From 08883b952f3b259c1ed05fd604a1bfbbc0d9e51c Mon Sep 17 00:00:00 2001 From: MrZ_26 Date: Thu, 28 May 2020 15:16:38 +0800 Subject: [PATCH] 0.8.22:Shader Update --- callback.lua | 100 +--- conf.lua | 2 +- image/BG/bg1.png | Bin 1761 -> 0 bytes image/BG/bg2.png | Bin 227 -> 0 bytes image/mess/electric.png | Bin 0 -> 2506 bytes main.lua | 4 +- modes/GM.lua | 4 +- modes/attacker_hard.lua | 2 +- modes/attacker_ultimate.lua | 2 +- modes/bigbang.lua | 4 +- modes/blind_easy.lua | 4 +- modes/blind_hard.lua | 7 +- modes/blind_lunatic.lua | 7 +- modes/blind_normal.lua | 7 +- modes/blind_ultimate.lua | 7 +- modes/c4wtrain_lunatic.lua | 2 +- modes/c4wtrain_normal.lua | 2 +- modes/classic_fast.lua | 2 +- modes/custom_clear.lua | 8 +- modes/custom_puzzle.lua | 6 +- modes/defender_lunatic.lua | 2 +- modes/defender_normal.lua | 2 +- modes/dig_hard.lua | 2 +- modes/dig_ultimate.lua | 2 +- modes/drought_lunatic.lua | 4 +- modes/drought_normal.lua | 4 +- modes/infinite.lua | 2 +- modes/infinite_dig.lua | 2 +- modes/marathon_hard.lua | 2 +- modes/marathon_normal.lua | 2 +- modes/master_adavnce.lua | 2 +- modes/master_beginner.lua | 2 +- modes/master_final.lua | 2 +- modes/pcchallenge_hard.lua | 4 +- modes/pcchallenge_lunatic.lua | 4 +- modes/pcchallenge_normal.lua | 4 +- modes/pctrain_lunatic.lua | 2 +- modes/pctrain_normal.lua | 2 +- modes/round_1.lua | 4 +- modes/round_2.lua | 4 +- modes/round_3.lua | 4 +- modes/round_4.lua | 4 +- modes/round_5.lua | 4 +- modes/solo_1.lua | 4 +- modes/solo_2.lua | 4 +- modes/solo_3.lua | 4 +- modes/solo_4.lua | 4 +- modes/solo_5.lua | 4 +- modes/sprintPenta.lua | 6 +- modes/sprint_10.lua | 4 +- modes/sprint_100.lua | 4 +- modes/sprint_1000.lua | 4 +- modes/sprint_20.lua | 4 +- modes/sprint_40.lua | 4 +- modes/sprint_400.lua | 4 +- modes/survivor_easy.lua | 2 +- modes/survivor_hard.lua | 2 +- modes/survivor_lunatic.lua | 2 +- modes/survivor_normal.lua | 2 +- modes/survivor_ultimate.lua | 2 +- modes/tech_hard+.lua | 2 +- modes/tech_hard.lua | 2 +- modes/tech_lunatic+.lua | 2 +- modes/tech_lunatic.lua | 2 +- modes/tech_normal+.lua | 2 +- modes/tech_normal.lua | 2 +- modes/tech_ultimate+.lua | 2 +- modes/tech_ultimate.lua | 2 +- modes/techmino49_easy.lua | 10 +- modes/techmino49_hard.lua | 10 +- modes/techmino49_ultimate.lua | 10 +- modes/techmino99_easy.lua | 10 +- modes/techmino99_hard.lua | 10 +- modes/techmino99_ultimate.lua | 10 +- modes/tsd_easy.lua | 2 +- modes/tsd_hard.lua | 2 +- modes/tsd_ultimate.lua | 2 +- modes/ultra.lua | 2 +- modes/zen.lua | 4 +- paint.lua | 41 +- parts/bg.lua | 497 +++++++++++--------- parts/bgm.lua | 24 +- default_data.lua => parts/default_data.lua | 1 + parts/file.lua | 4 +- parts/img.lua | 3 +- parts/kickList.lua | 27 +- parts/languages.lua | 135 ++++-- parts/light.lua | 4 +- parts/list.lua | 2 +- parts/shader.lua | 11 +- parts/text.lua | 4 +- player.lua | 402 +++++++--------- scene.lua | 457 +++++++++--------- shader/alpha.cs | 5 - shader/alpha.glsl | 4 + shader/aura.glsl | 42 ++ shader/glow.cs | 5 - shader/glow.glsl | 5 + shader/{lightRender.cs => lightRender.glsl} | 20 +- shader/rainbow.glsl | 15 + shader/{shadowMap.cs => shadowMap.glsl} | 6 +- shader/strap.glsl | 11 + shader/warning.glsl | 8 + timer.lua | 47 +- toolfunc.lua | 10 +- updateLog.lua | 24 +- widgetList.lua | 31 +- 107 files changed, 1220 insertions(+), 1009 deletions(-) delete mode 100644 image/BG/bg1.png delete mode 100644 image/BG/bg2.png create mode 100644 image/mess/electric.png rename default_data.lua => parts/default_data.lua (99%) delete mode 100644 shader/alpha.cs create mode 100644 shader/alpha.glsl create mode 100644 shader/aura.glsl delete mode 100644 shader/glow.cs create mode 100644 shader/glow.glsl rename shader/{lightRender.cs => lightRender.glsl} (58%) create mode 100644 shader/rainbow.glsl rename shader/{shadowMap.cs => shadowMap.glsl} (83%) create mode 100644 shader/strap.glsl create mode 100644 shader/warning.glsl diff --git a/callback.lua b/callback.lua index ef3eba9f..c493b3c3 100644 --- a/callback.lua +++ b/callback.lua @@ -121,7 +121,7 @@ function keyDown.load(k) end end function touchDown.load() - if #tc.getTouches()>2 then + if #tc.getTouches()==2 then sceneTemp.skip=true end end @@ -669,6 +669,18 @@ function touchDown.help(id,x,y) sceneTemp.pw=pw end +function keyDown.staff(key) + if key=="escape"then + SCN.back() + elseif key=="\122"then + if kb.isDown("\109")and kb.isDown("\114")then + sceneTemp.v=-2.6 + marking=nil + SFX.play("reach") + end + end +end + function wheelMoved.history(x,y) wheelScroll(y) end @@ -800,16 +812,11 @@ function love.keypressed(i) local W=WIDGET.sel if W then W:getInfo()end elseif i=="f3"then - error("Techmino:挂了") + assert(false,"Techmino:挂了") elseif i=="e"then for k,v in next,_G do print(k,v) end - elseif i=="\122"then - if kb.isDown("\109")and kb.isDown("\114")then - marking=nil - SFX.play("reach") - end elseif WIDGET.sel then local W=WIDGET.sel if i=="left"then W.x=W.x-10 @@ -901,9 +908,10 @@ function love.lowmemory() collectgarbage() end function love.resize(w,h) - love.timer.sleep(.26) - scr.w,scr.h,scr.r=w,h,h/w + scr.w,scr.h=w,h + scr.r=h/w scr.rad=(w^2+h^2)^.5 + scr.dpi=gc.getDPIScale() if scr.r>=.5625 then scr.k=w/1280 scr.x,scr.y=0,(h-w*9/16)*.5 @@ -913,6 +921,9 @@ function love.resize(w,h) end xOy=xOy:setTransformation(w*.5,h*.5,nil,scr.k,nil,640,360) BG.resize(w,h) + + SHADER.warning:send("w",w*scr.dpi) + SHADER.warning:send("h",h*scr.dpi) end function love.focus(f) if SCN.cur=="play"and not f and setting.autoPause then pauseGame()end @@ -938,6 +949,7 @@ function love.run() SCN.init("load")--Scene Launch marking=true return function() + local _ --EVENT PUMP() for N,a,b,c,d,e in POLL()do @@ -948,6 +960,7 @@ function love.run() return 1 end end + --UPDATE STEP()local dt=GETDelta() TASK.update() @@ -955,7 +968,7 @@ function love.run() BG.update(dt) sysFX.update(dt) TEXT.update() - local _=Tmr[SCN.cur]if _ then _(dt)end--Scene Updater + _=Tmr[SCN.cur]if _ then _(dt)end--Scene Updater if SCN.swapping then SCN.swapUpdate()end--Scene swapping animation WIDGET.update()--Widgets animation @@ -1019,76 +1032,11 @@ function love.run() if Timer()-lastFrame<.058 then WAIT(.01)end while Timer()-lastFrame<.0159 do WAIT(.001)end - --FRESH POWER + --FRESH POWERINFO lastFrame=Timer() if Timer()-lastFreshPow>3 and setting.powerInfo and SCN.cur~="load"then updatePowerInfo() lastFreshPow=Timer() end end -end -function love.errorhandler(msg) - local PUMP,POLL=love.event.pump,love.event.poll - love.mouse.setVisible(true) - love.audio.stop() - local err={"Error:"..msg} - local trace=debug.traceback("",2) - local c=2 - for l in string.gmatch(trace,"(.-)\n")do - if c>2 then - if not string.find(l,"boot")then - err[c]=string.gsub(l,"^\t*","") - c=c+1 - end - else - err[2]="Traceback" - c=3 - end - end - print(table.concat(err,"\n"),1,c-2) - gc.reset() - local CAP - local function _(_)CAP=gc.newImage(_)end - gc.captureScreenshot(_) - gc.present() - setting.sfx=setting.voc--only for error "voice" played with voice volume,not saved - if SFX.list.error then SFX.play("error",.8)end - local BGcolor=rnd()>.026 and{.3,.5,.9},{.62,.3,.926} - local needDraw=true - return function() - PUMP() - for E,a,b,c,d,e in POLL()do - if E=="quit"or a=="escape"then - destroyPlayers() - return 1 - elseif E=="resize"then - love.resize(a,b) - needDraw=true - elseif E=="focus"then - needDraw=true - end - end - if needDraw then - gc.discard() - gc.clear(BGcolor) - gc.setColor(1,1,1) - gc.push("transform") - gc.replaceTransform(xOy) - gc.draw(CAP,100,365,nil,512/CAP:getWidth(),288/CAP:getHeight()) - setFont(120)gc.print(":(",100,40) - setFont(38)gc.printf(text.errorMsg,100,200,1280-100) - setFont(20) - gc.print(system.."-"..gameVersion,100,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 - gc.print(err[i],626,370+20*i) - end - gc.pop() - gc.present() - needDraw=false - end - love.timer.sleep(.2) - end end \ No newline at end of file diff --git a/conf.lua b/conf.lua index 1792b93a..9b424a81 100644 --- a/conf.lua +++ b/conf.lua @@ -1,4 +1,4 @@ -gameVersion="Alpha V0.8.21" +gameVersion="Alpha V0.8.22" function love.conf(t) t.identity="Techmino"--folder name t.version="11.1" diff --git a/image/BG/bg1.png b/image/BG/bg1.png deleted file mode 100644 index c91cd5758342bd5b04985887f60b3d1608287889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1761 zcmV<71|Io|P)ud(86r4w;wSiG zhj+c>?yh=La?tDEF+p9bx@)FWN~M%~_Md*PzGTs65Wd9BGwaZhmyQg8^U0Br~uc^K>hGbUnSl!FCWIaEQ2phz4; zfN=V%br(>GM4T$7L|TLA0zWY*e}bcpQKwKDKE${f6(ZfR0p^7jxEI5WlL8z!VbX$j zz(^HSMM_M>Niro$kibbHjW^%{GKR9_FJRJ4;9$3Y91bcVgd;-W#&0g+OmZ>M*-yk- zFjw}{fQo14$WR7j-e6n=7*!pFnPKYWEIJ6h2y=`gDC}7TC^h}Fn*RHn>`QRU8(gdQ z6;Os4jCrt10C52hI8kTqhC7&d)?+mIT=YMf5XO`^RNN>^;+A4Q>;8Yh7Yifrt$`4j zHxnE%0UOPRZ!3r>HY-l+a-fG0#X)kAq>7_N0(XIOJi(De4J3zhO2(K+*Hvj$8si1V z)`6Ul{M@h*?uKu|RT#o3aAVHSda5`m4mx|u7x<3KQEd%ekCGVUyc%_a4-vTp_X1uJ z>Ojnd8SEd0k0i|5EV(OCH3Qd5u1anxj)GZ%a%=DzNLvFdAOm5jj8S)?39&&K$yFlrg~}bx3ssKh1`1RIrL_=cNI{h`>|DQXA_nMY z$VA>CcQJ3qb`|q#%&VwVSUB4sP9iQO#^*fwl*N%R)O>01xue>e#q^bREFE#$D^6iY@#R%~{wewX{e^#jd*#iMV zpxu{AJ^X4sSbuZ%`ysZkFU_77>jH%>yIsP;Kt`Q|`SXQ;{quXi{PoYAfBc4gpHu+k z)2tu=z1rx1uKsSMZLnOvxdCLPIo;}ph&4Wg+&@t7zT@@y$Pd4KAg+I6&v%^rN!bnA zL`;fWKUd2EMH@4q#1_^l+c2#F@<|2q=uFC}aiQXZwhv7Ez^~VxAI`!2?i(TpI{G2Ez^7s?#jh29D#MiOjm>&PbG9qMG1?Ol60)jRSH#fB`XaRCN(?$ivf zDL&=oruSUgU<7P|%NV)3_b@!VacnabJ5>{7Ah#A?ol6(OForCe>e#@796Q*CGTKBI z_%E7FcJA!31-3^!CEya{6lLwK4=q#R+n_A4I(yZ2M^t~t7`46YjD0lq3^WHSCueZ2 zRp@8ySv8V7vER078Y+dhl{88-U5GeY>B+aEmunz!=0!o5gadoc(;ShqpVaV6u?} zwvV+88hD3b>g6S*c2aZ7SJzE{PFgD<48`b`j>Oxky53p#8}NH2MR2k)3DO*5?doqv zs|l=nbo*nb_hF#lO`47Mz2#%*1*58`TxG9F_qEj=6y+P4gJduj*u^^gaPVk@DM2h9 zn6N7Bbljkp{abVZqK|sYL=#lAtl94zOcNMdoB1nSLU=rA{27jvmYYoi4*4Wl55xm#C`szhy zD~N|#7WiB6<1M&W02sv^a9_bdPtB#U$fav!<97cD?(=_c32WvyN5|*noR<`~C)mPe|pC|kmQvP0ppGj z=a?UuexBtj`+ui0=aGYqb4=DcgvFa`U!J}4Z}qCYSx@7NWKT_Jy!3~|;?UB3eYq#> zPu`^8Fme>1%Nx@=CHnR%-_>TzJ8!I5l=Z`T4nzBcU!`jz+OnnAG~Qg=Uw3fZcJue; ZaeGAF4!qjx^&03v22WQ%mvv4FO#pSBS*QR2 diff --git a/image/mess/electric.png b/image/mess/electric.png new file mode 100644 index 0000000000000000000000000000000000000000..db496d6aa3e8da94706d063d0d9d6ad0d06aa337 GIT binary patch literal 2506 zcmV;*2{rbKP)RCwC$oqLd$RUOAaKiNgOtSq3+aEXiEaU8V_Fu^iYY!OGS zG;talZKAQ6$@iNN$A>FG!DtJ;7&fVF0JuOcg|A*Z?f+3x-rMNr$=nVy_+Z-Tgd8UUXH^{_Z~0-P^tPyzcH3-2Hgfgm^ber@Q+i zFQ2E~eW+?g94hD-cW({-##p$^-8Ik_|Ce;KyRY#$xn9##60|??05AoJb;R8POf$2` zBx-$1IvBVQI46P2-2j|#W-H6SkYl7yO(kst?oUKgfDypW;f|O@ts`y%&Q9!_FQ&L7 zCQ<7oo6Z5|BzpNX%bo>LAGJ1;4g&rGj83>1=$Y1rk-L>6fUYTDbcNiJDi18qg=RV)X&0Nz}YJi4rHt zb3&pDi7JFd6%tj5BaIU!sz`xLB&tY(G49?^qKeoV51b-VMG9OcQAG+gN>q^oCQ&mQ zbYxt%bKU)Y5;YH6GA`SDsNqwo5>+IDL=_TM)c#hZL=`>ZC51qurobX#rNSUlqsGj3 z0P_?HiJAg`pg5X5N0v#{e6s3#;8z(I?f1ZoHH)KEs=?6TeHgHoeD z%Bq`z+cPQ7KH#ESN~(-n+pId4G`C3a0M>_QemQWDnZ2eO&0E%ao)%BJ`(%y!>yNp> zqX}K_W;1(6qSjwu^=;sDz&1rgqQ)-kJHVBRT<%VZTHm~x$aVfQnm=$kQ`*34Juo)n zOKbx^Y-YQaQR|zpM}B<|$0DgRs3=aUi2`ZI|t4$Z2s0v7}AiblkPDR&uZ)=!IM**{d>%$*S z%&euDE?Z@0E>X+n4dBPX0yEpx3t|ogCQ%&7&`7c2?Xii)=tkg9Gusx6s1ty10iU7! z^O~vicZyw1<^wy;Y+nzgv@rA07{nY8oJ+AIbLwmWt}MH64;8mi-TidnyA<=F^~e%> z_R!sNlyH(=4cP_E27XuOLTWoCJ2U|ggi*c_m9zq1G_z8c03Nh@Dr}SZl<;8tK^*sDOIil|u)%rdj*)%1&)`4I4D zcVF!8AFZXR_bc|IoAd!L0-kgCyL&^}!-={`aTh(LAq=>lb@vC|eNwm~(kp$`W{M+c zMkwy03fu>L-^`X*Rn#Esb-?%Ny`^Z|fzC#XLx2IQ->mpAuo$@7%(hld)FA5<99S$} zE#9PfX8blYYwP5DPX(?G-#u1!oE4jaXMnGn*@kL~I*^0+o4*nGLPg*9gf4!^R*F+J zZUvs~>R(iNTw_2GdonOc^_&gcfjcRdTkbw8QI8nAaNwarkv2Pk8z|NWcVr=Ig|H`3Jk~K+^_&fl1GCNS zm25<<5cZoC&&KNxTOOtV9j6UJLv{vS!26z^Bb@PvwWnSFV}O1HM7=h_^_e zDZo#%%cvEZ^=jaU#QVIw=sLTA8I{j!WwnRDyI%v$Q$1(FD&Wj;h+JO%Iy3tb#iPmp zQavZncwlK*dy?M(#LON7rc#`UEYfBI#a?Im9^d2clYnK^-(Cf|@d7X<>vN{u{VIxk z$|7y%W!qOX{sCYi#eT0MEq2w_S*Y$l z0(eZaDx;>7Szpp@Kw8w@LXL1Q)t7+Xs(y(YyR5$f9#-|M=}(~x&;-0faqN#!MvXSB z?x0u~uw5ER)YxTx9=KZ?NYoTqs1T@+nnGXo7>dUqJ}w=UQDbiY_fu?+AtY+_{DopS z7a>uj&Z?Uzwhj{NqekCXZ3NmW4mJ~U@wPJRfvmb$QHYjSi7M1b6+(T~-sz|AQ6Du* z&QeA_7)?>dNxMWnn1>Vs^-+b8s3Kc70$U`ih@Cbw+aOVentmawz%q#{Qec%t6>9p0 zkf@?w*aQ4kqKepAZD#7Dis)IYreCO!nlL(4O`;}&*5}5>5{W8OpiQC*HT^=$YGKnhG^a~+Tg+vtqG${lUH3hCv2qdZyU8NmO zPl*&nHM7+cRjBC~LZbE}?tUrIph!s6*l9wKqDa&P_$SbzFhs#ViP||0ibpiem#Cfd ze#JvgzYr2tNYr{_h(aJyQ{YmCK%xrK9iEk_A_Z1RRH3F{2#G2rst^)20o;8!FkF#{ zf~CM_iF$ZO0V5TLDA;LcT0PZSQdJ1l^rwIpOiNT{RM9Q&k*Lb3DexbOs*I|pKXHaC z1QIm`w8T%M3L#NNUbF*mNK_F!o6T&6L_OSa-@O5tDo51xrw{|(=a;C_Gg={th9wfU zb6OOFXlRqDoij=yP}83R7b*l2HTDtzAfUfAkf^b98Zbs0NK_#tY8Cjr6i9>r0ZybH U7#&Ys`v3p{07*qoM6N<$f^xB`00000 literal 0 HcmV?d00001 diff --git a/main.lua b/main.lua index 37e081c4..2ad2e964 100644 --- a/main.lua +++ b/main.lua @@ -55,9 +55,9 @@ WIDGET=require("parts/widget") LIGHT=require("parts/light") require("parts/modes") -require("default_data") +require("parts/default_data") require("parts/ai") -require("player") +PLY=require("player") widgetList=require("widgetList") require("callback") diff --git a/modes/GM.lua b/modes/GM.lua index 31f48e50..14166cc7 100644 --- a/modes/GM.lua +++ b/modes/GM.lua @@ -30,11 +30,11 @@ return{ P:win("finish") end end, - bg="game3",bgm="far", + bg="aura",bgm="far", }, slowMark=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) players[1].modeData.event="M7" end, mesDisp=function(P,dx,dy) diff --git a/modes/attacker_hard.lua b/modes/attacker_hard.lua index b39966fe..fd1e22a5 100644 --- a/modes/attacker_hard.lua +++ b/modes/attacker_hard.lua @@ -39,7 +39,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(55) diff --git a/modes/attacker_ultimate.lua b/modes/attacker_ultimate.lua index 58c940f6..b84a3ffd 100644 --- a/modes/attacker_ultimate.lua +++ b/modes/attacker_ultimate.lua @@ -48,7 +48,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(55) diff --git a/modes/bigbang.lua b/modes/bigbang.lua index 7d66ded8..1db60db4 100644 --- a/modes/bigbang.lua +++ b/modes/bigbang.lua @@ -11,13 +11,13 @@ return{ env={ drop=1e99,lock=1e99, hold=false, - dropPiece=player.lose, + dropPiece=function(P)P:lose()end, task=nil, bg="game1",bgm="newera", }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) end, diff --git a/modes/blind_easy.lua b/modes/blind_easy.lua index 4f013540..37628398 100644 --- a/modes/blind_easy.lua +++ b/modes/blind_easy.lua @@ -4,14 +4,14 @@ return{ env={ drop=30,lock=45, visible="time", - dropPiece=player.reach_winCheck, + dropPiece=PLY.reach_winCheck, freshLimit=10, target=200, bg="glow",bgm="newera", }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) mText(drawableText.line,-81,300) diff --git a/modes/blind_hard.lua b/modes/blind_hard.lua index 7d7dec8c..79f0a131 100644 --- a/modes/blind_hard.lua +++ b/modes/blind_hard.lua @@ -1,3 +1,4 @@ +local gc=love.graphics local min=math.min return{ color=color.magenta, @@ -6,14 +7,14 @@ return{ fall=10,lock=60, center=false, visible="none", - dropPiece=player.reach_winCheck, + dropPiece=PLY.reach_winCheck, freshLimit=15, target=200, bg="rgb",bgm="secret7th", }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) mText(drawableText.line,-81,300) @@ -21,6 +22,8 @@ return{ setFont(75) mStr(P.stat.row,-81,220) mStr(P.stat.clear_S[4],-81,340) + gc.setColor(1,1,1,.2) + gc.draw(IMG.electric,-26,120,0,2.6) 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 6028191f..f51adeae 100644 --- a/modes/blind_lunatic.lua +++ b/modes/blind_lunatic.lua @@ -1,3 +1,4 @@ +local gc=love.graphics local min=math.min return{ color=color.red, @@ -7,14 +8,14 @@ return{ center=false,ghost=false, dropFX=0,lockFX=0, visible="none", - dropPiece=player.reach_winCheck, + dropPiece=PLY.reach_winCheck, freshLimit=15, target=200, bg="rgb",bgm="secret8th", }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) mText(drawableText.line,-81,300) @@ -22,6 +23,8 @@ return{ setFont(75) mStr(P.stat.row,-81,220) mStr(P.stat.clear_S[4],-81,340) + gc.setColor(1,1,1,.2) + gc.draw(IMG.electric,-26,120,0,2.6) 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 d57a3d98..5006f3ca 100644 --- a/modes/blind_normal.lua +++ b/modes/blind_normal.lua @@ -1,3 +1,4 @@ +local gc=love.graphics local min=math.min return{ color=color.green, @@ -5,14 +6,14 @@ return{ drop=15,lock=45, freshLimit=10, visible="fast", - dropPiece=player.reach_winCheck, + dropPiece=PLY.reach_winCheck, freshLimit=10, target=200, bg="glow",bgm="reason", }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) mText(drawableText.line,-81,300) @@ -20,6 +21,8 @@ return{ setFont(75) mStr(P.stat.row,-81,220) mStr(P.stat.clear_S[4],-81,340) + gc.setColor(1,1,1,.2) + gc.draw(IMG.electric,-26,120,0,2.6) 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_ultimate.lua b/modes/blind_ultimate.lua index 7af21c21..2ffcad12 100644 --- a/modes/blind_ultimate.lua +++ b/modes/blind_ultimate.lua @@ -1,3 +1,4 @@ +local gc=love.graphics local min=math.min return{ color=color.red, @@ -8,14 +9,14 @@ return{ center=false,ghost=false, dropFX=0,lockFX=0, visible="none", - dropPiece=player.reach_winCheck, + dropPiece=PLY.reach_winCheck, freshLimit=15, target=200, bg="rgb",bgm="secret7th", }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) mText(drawableText.line,-81,300) @@ -23,6 +24,8 @@ return{ setFont(75) mStr(P.stat.row,-81,220) mStr(P.stat.clear_S[4],-81,340) + gc.setColor(1,1,1,.2) + gc.draw(IMG.electric,-26,120,0,2.6) 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 a2be107d..67b245ed 100644 --- a/modes/c4wtrain_lunatic.lua +++ b/modes/c4wtrain_lunatic.lua @@ -27,7 +27,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) local P=players[1] local F=P.field for i=1,24 do diff --git a/modes/c4wtrain_normal.lua b/modes/c4wtrain_normal.lua index ea132a0e..35514093 100644 --- a/modes/c4wtrain_normal.lua +++ b/modes/c4wtrain_normal.lua @@ -25,7 +25,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) local P=players[1] local F=P.field for i=1,24 do diff --git a/modes/classic_fast.lua b/modes/classic_fast.lua index f18ae4c3..b065370d 100644 --- a/modes/classic_fast.lua +++ b/modes/classic_fast.lua @@ -29,7 +29,7 @@ return{ }, slowMark=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(75) diff --git a/modes/custom_clear.lua b/modes/custom_clear.lua index be3fc2f7..c64e890e 100644 --- a/modes/custom_clear.lua +++ b/modes/custom_clear.lua @@ -3,7 +3,7 @@ local int=math.floor return{ color=color.white, env={ - dropPiece=player.reach_winCheck, + dropPiece=PLY.reach_winCheck, }, load=function() for i=1,#customID do @@ -12,14 +12,14 @@ return{ end modeEnv._20G=modeEnv.drop==0 modeEnv.oncehold=customSel[6]==1 - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) local L=modeEnv.opponent if L~=0 then modeEnv.target=nil if L<10 then - newAIPlayer(2,965,360,.5,AITemplate("9S",2*L)) + PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",2*L)) else - newAIPlayer(2,965,360,.5,AITemplate("CC",L-6,2+int((L-11)*.5),modeEnv.hold,15000+5000*(L-10))) + PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",L-6,2+int((L-11)*.5),modeEnv.hold,15000+5000*(L-10))) end end preField.h=20 diff --git a/modes/custom_puzzle.lua b/modes/custom_puzzle.lua index b1dc7c3b..630c842b 100644 --- a/modes/custom_puzzle.lua +++ b/modes/custom_puzzle.lua @@ -32,14 +32,14 @@ return{ modeEnv._20G=modeEnv.drop==0 modeEnv.oncehold=customSel[6]==1 modeEnv.target=0 - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) local L=modeEnv.opponent if L~=0 then modeEnv.target=nil if L<10 then - newAIPlayer(2,965,360,.5,AITemplate("9S",2*L)) + PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",2*L)) else - newAIPlayer(2,965,360,.5,AITemplate("CC",L-6,2+int((L-11)*.5),modeEnv.hold,15000+5000*(L-10))) + PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",L-6,2+int((L-11)*.5),modeEnv.hold,15000+5000*(L-10))) end end preField.h=20 diff --git a/modes/defender_lunatic.lua b/modes/defender_lunatic.lua index fe105817..dcbbf657 100644 --- a/modes/defender_lunatic.lua +++ b/modes/defender_lunatic.lua @@ -41,7 +41,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(55) diff --git a/modes/defender_normal.lua b/modes/defender_normal.lua index 357f2a53..19f1c30c 100644 --- a/modes/defender_normal.lua +++ b/modes/defender_normal.lua @@ -41,7 +41,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(55) diff --git a/modes/dig_hard.lua b/modes/dig_hard.lua index 478d7b9f..db901cb6 100644 --- a/modes/dig_hard.lua +++ b/modes/dig_hard.lua @@ -20,7 +20,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(65) diff --git a/modes/dig_ultimate.lua b/modes/dig_ultimate.lua index 6a728d8e..48fbe539 100644 --- a/modes/dig_ultimate.lua +++ b/modes/dig_ultimate.lua @@ -19,7 +19,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(65) diff --git a/modes/drought_lunatic.lua b/modes/drought_lunatic.lua index 96204fcf..a095b9a0 100644 --- a/modes/drought_lunatic.lua +++ b/modes/drought_lunatic.lua @@ -82,7 +82,7 @@ return{ P:getNext(res[rnd(#res)]) end end, - target=100,dropPiece=player.reach_winCheck, + target=100,dropPiece=PLY.reach_winCheck, next=1,hold=false, ospin=false, freshLimit=15, @@ -90,7 +90,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(70) diff --git a/modes/drought_normal.lua b/modes/drought_normal.lua index b08fb506..4350e84e 100644 --- a/modes/drought_normal.lua +++ b/modes/drought_normal.lua @@ -5,7 +5,7 @@ return{ drop=20,lock=60, sequence="bag", bag={1,1,2,2,3,3,4,4,5,5,6,6}, - target=100,dropPiece=player.reach_winCheck, + target=100,dropPiece=PLY.reach_winCheck, next=3, ospin=false, freshLimit=15, @@ -13,7 +13,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(70) diff --git a/modes/infinite.lua b/modes/infinite.lua index 12fd06da..b29b5fa9 100644 --- a/modes/infinite.lua +++ b/modes/infinite.lua @@ -7,7 +7,7 @@ return{ bg="glow",bgm="infinite", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/infinite_dig.lua b/modes/infinite_dig.lua index d875fddd..fc5a5f44 100644 --- a/modes/infinite_dig.lua +++ b/modes/infinite_dig.lua @@ -17,7 +17,7 @@ return{ bg="glow",bgm="infinite", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) for _=1,8 do players[1]:garbageRise(13,1,rnd(10)) end diff --git a/modes/marathon_hard.lua b/modes/marathon_hard.lua index 3a97dc46..875efa55 100644 --- a/modes/marathon_hard.lua +++ b/modes/marathon_hard.lua @@ -26,7 +26,7 @@ return{ pauseLimit=true, slowMark=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/marathon_normal.lua b/modes/marathon_normal.lua index 13f2cf97..49283a1b 100644 --- a/modes/marathon_normal.lua +++ b/modes/marathon_normal.lua @@ -26,7 +26,7 @@ return{ pauseLimit=true, slowMark=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/master_adavnce.lua b/modes/master_adavnce.lua index 8eb80483..f3b3d5a5 100644 --- a/modes/master_adavnce.lua +++ b/modes/master_adavnce.lua @@ -47,7 +47,7 @@ return{ }, slowMark=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/master_beginner.lua b/modes/master_beginner.lua index 8427440a..77e5d897 100644 --- a/modes/master_beginner.lua +++ b/modes/master_beginner.lua @@ -51,7 +51,7 @@ return{ }, slowMark=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/master_final.lua b/modes/master_final.lua index 1b2e179e..e8d2af0e 100644 --- a/modes/master_final.lua +++ b/modes/master_final.lua @@ -47,7 +47,7 @@ return{ }, slowMark=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/pcchallenge_hard.lua b/modes/pcchallenge_hard.lua index 9d343624..eb71a038 100644 --- a/modes/pcchallenge_hard.lua +++ b/modes/pcchallenge_hard.lua @@ -4,14 +4,14 @@ return{ env={ drop=60,lock=120, fall=10, - target=100,dropPiece=player.reach_winCheck, + target=100,dropPiece=PLY.reach_winCheck, freshLimit=15, ospin=false, bg="rgb",bgm="infinite", }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/pcchallenge_lunatic.lua b/modes/pcchallenge_lunatic.lua index 67ce61cc..ec78e882 100644 --- a/modes/pcchallenge_lunatic.lua +++ b/modes/pcchallenge_lunatic.lua @@ -4,14 +4,14 @@ return{ env={ drop=20,lock=60, fall=20, - target=100,dropPiece=player.reach_winCheck, + target=100,dropPiece=PLY.reach_winCheck, freshLimit=15, ospin=false, bg="rgb",bgm="infinite", }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/pcchallenge_normal.lua b/modes/pcchallenge_normal.lua index 1b9e83c1..ea1703ce 100644 --- a/modes/pcchallenge_normal.lua +++ b/modes/pcchallenge_normal.lua @@ -4,13 +4,13 @@ return{ env={ oncehold=false, drop=300,lock=1e99, - target=100,dropPiece=player.reach_winCheck, + target=100,dropPiece=PLY.reach_winCheck, ospin=false, bg="rgb",bgm="newera", }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/pctrain_lunatic.lua b/modes/pctrain_lunatic.lua index 9c1fa544..5bffdd0e 100644 --- a/modes/pctrain_lunatic.lua +++ b/modes/pctrain_lunatic.lua @@ -62,7 +62,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) newPC(players[1]) end, mesDisp=function(P,dx,dy) diff --git a/modes/pctrain_normal.lua b/modes/pctrain_normal.lua index 4401c4b8..dd2ed1f0 100644 --- a/modes/pctrain_normal.lua +++ b/modes/pctrain_normal.lua @@ -54,7 +54,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) newPC(players[1]) end, mesDisp=function(P,dx,dy) diff --git a/modes/round_1.lua b/modes/round_1.lua index e49bd800..0582d331 100644 --- a/modes/round_1.lua +++ b/modes/round_1.lua @@ -19,8 +19,8 @@ return{ bg="game2",bgm="push", }, load=function() - newPlayer(1,340,15) - newAIPlayer(2,965,360,.5,AITemplate("CC",10,1,true,5000)) + PLY.newPlayer(1,340,15) + PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,1,true,5000)) game.garbageSpeed=1e99 end, mesDisp=function(P,dx,dy) diff --git a/modes/round_2.lua b/modes/round_2.lua index 6090ca55..cf9860d5 100644 --- a/modes/round_2.lua +++ b/modes/round_2.lua @@ -19,8 +19,8 @@ return{ bg="game2",bgm="push", }, load=function() - newPlayer(1,340,15) - newAIPlayer(2,965,360,.5,AITemplate("CC",10,1,true,10000)) + PLY.newPlayer(1,340,15) + PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,1,true,10000)) game.garbageSpeed=1e99 end, mesDisp=function(P,dx,dy) diff --git a/modes/round_3.lua b/modes/round_3.lua index acf82722..2c349d48 100644 --- a/modes/round_3.lua +++ b/modes/round_3.lua @@ -19,8 +19,8 @@ return{ bg="game2",bgm="push", }, load=function() - newPlayer(1,340,15) - newAIPlayer(2,965,360,.5,AITemplate("CC",10,2,true,12600)) + PLY.newPlayer(1,340,15) + PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,2,true,12600)) game.garbageSpeed=1e99 end, mesDisp=function(P,dx,dy) diff --git a/modes/round_4.lua b/modes/round_4.lua index 9d692a34..889fefd4 100644 --- a/modes/round_4.lua +++ b/modes/round_4.lua @@ -19,8 +19,8 @@ return{ bg="game2",bgm="push", }, load=function() - newPlayer(1,340,15) - newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,16260)) + PLY.newPlayer(1,340,15) + PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,16260)) game.garbageSpeed=1e99 end, mesDisp=function(P,dx,dy) diff --git a/modes/round_5.lua b/modes/round_5.lua index 89985cc2..ef6a06f4 100644 --- a/modes/round_5.lua +++ b/modes/round_5.lua @@ -19,8 +19,8 @@ return{ bg="game2",bgm="push", }, load=function() - newPlayer(1,340,15) - newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,26000)) + PLY.newPlayer(1,340,15) + PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,26000)) game.garbageSpeed=1e99 end, mesDisp=function(P,dx,dy) diff --git a/modes/solo_1.lua b/modes/solo_1.lua index 14f2af0e..7e3a9363 100644 --- a/modes/solo_1.lua +++ b/modes/solo_1.lua @@ -7,8 +7,8 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) - newAIPlayer(2,965,360,.5,AITemplate("9S",3)) + PLY.newPlayer(1,340,15) + PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",3)) end, mesDisp=function(P,dx,dy) end, diff --git a/modes/solo_2.lua b/modes/solo_2.lua index 144df766..fd0d76c7 100644 --- a/modes/solo_2.lua +++ b/modes/solo_2.lua @@ -7,8 +7,8 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) - newAIPlayer(2,965,360,.5,AITemplate("9S",5)) + PLY.newPlayer(1,340,15) + PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",5)) end, mesDisp=function(P,dx,dy) end, diff --git a/modes/solo_3.lua b/modes/solo_3.lua index 6ee0d1f0..276d33be 100644 --- a/modes/solo_3.lua +++ b/modes/solo_3.lua @@ -7,8 +7,8 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) - newAIPlayer(2,965,360,.5,AITemplate("9S",7)) + PLY.newPlayer(1,340,15) + PLY.newAIPlayer(2,965,360,.5,AITemplate("9S",7)) end, mesDisp=function(P,dx,dy) end, diff --git a/modes/solo_4.lua b/modes/solo_4.lua index 09d7cf82..9c65d847 100644 --- a/modes/solo_4.lua +++ b/modes/solo_4.lua @@ -7,8 +7,8 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) - newAIPlayer(2,965,360,.5,AITemplate("CC",9,2,true,26000)) + PLY.newPlayer(1,340,15) + PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",9,2,true,26000)) end, mesDisp=function(P,dx,dy) end, diff --git a/modes/solo_5.lua b/modes/solo_5.lua index c0252c2c..3a33b4a1 100644 --- a/modes/solo_5.lua +++ b/modes/solo_5.lua @@ -7,8 +7,8 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) - newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,50000)) + PLY.newPlayer(1,340,15) + PLY.newAIPlayer(2,965,360,.5,AITemplate("CC",10,3,true,50000)) end, mesDisp=function(P,dx,dy) end, diff --git a/modes/sprintPenta.lua b/modes/sprintPenta.lua index e359ad57..3e1328ad 100644 --- a/modes/sprintPenta.lua +++ b/modes/sprintPenta.lua @@ -5,11 +5,11 @@ return{ env={ drop=60,lock=60, sequence="bag",bag={8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25}, - target=40,dropPiece=player.reach_winCheck, - bg="strap",bgm="race", + target=40,dropPiece=PLY.reach_winCheck, + bg="aura",bgm="race", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P) local dx,dy=P.fieldOff.x,P.fieldOff.y diff --git a/modes/sprint_10.lua b/modes/sprint_10.lua index e568f7ad..d87cd151 100644 --- a/modes/sprint_10.lua +++ b/modes/sprint_10.lua @@ -4,11 +4,11 @@ return{ color=color.cyan, env={ drop=60,lock=60, - target=10,dropPiece=player.reach_winCheck, + target=10,dropPiece=PLY.reach_winCheck, bg="strap",bgm="race", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P) local dx,dy=P.fieldOff.x,P.fieldOff.y diff --git a/modes/sprint_100.lua b/modes/sprint_100.lua index ae02ceee..2d78b02b 100644 --- a/modes/sprint_100.lua +++ b/modes/sprint_100.lua @@ -4,11 +4,11 @@ return{ color=color.orange, env={ drop=60,lock=60, - target=100,dropPiece=player.reach_winCheck, + target=100,dropPiece=PLY.reach_winCheck, bg="strap",bgm="race", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P) local dx,dy=P.fieldOff.x,P.fieldOff.y diff --git a/modes/sprint_1000.lua b/modes/sprint_1000.lua index 82e50ed9..40d14155 100644 --- a/modes/sprint_1000.lua +++ b/modes/sprint_1000.lua @@ -4,11 +4,11 @@ return{ color=color.lightGrey, env={ drop=60,lock=60, - target=1000,dropPiece=player.reach_winCheck, + target=1000,dropPiece=PLY.reach_winCheck, bg="strap",bgm="push", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P) local dx,dy=P.fieldOff.x,P.fieldOff.y diff --git a/modes/sprint_20.lua b/modes/sprint_20.lua index ba3e87da..39eae0fb 100644 --- a/modes/sprint_20.lua +++ b/modes/sprint_20.lua @@ -4,11 +4,11 @@ return{ color=color.lightBlue, env={ drop=60,lock=60, - target=20,dropPiece=player.reach_winCheck, + target=20,dropPiece=PLY.reach_winCheck, bg="strap",bgm="race", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P) local dx,dy=P.fieldOff.x,P.fieldOff.y diff --git a/modes/sprint_40.lua b/modes/sprint_40.lua index d1c1226d..dd228898 100644 --- a/modes/sprint_40.lua +++ b/modes/sprint_40.lua @@ -4,11 +4,11 @@ return{ color=color.green, env={ drop=60,lock=60, - target=40,dropPiece=player.reach_winCheck, + target=40,dropPiece=PLY.reach_winCheck, bg="strap",bgm="race", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P) local dx,dy=P.fieldOff.x,P.fieldOff.y diff --git a/modes/sprint_400.lua b/modes/sprint_400.lua index d4bf8434..e5003102 100644 --- a/modes/sprint_400.lua +++ b/modes/sprint_400.lua @@ -4,11 +4,11 @@ return{ color=color.red, env={ drop=60,lock=60, - target=400,dropPiece=player.reach_winCheck, + target=400,dropPiece=PLY.reach_winCheck, bg="strap",bgm="push", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P) local dx,dy=P.fieldOff.x,P.fieldOff.y diff --git a/modes/survivor_easy.lua b/modes/survivor_easy.lua index 8b6ac3f4..bae74f6c 100644 --- a/modes/survivor_easy.lua +++ b/modes/survivor_easy.lua @@ -20,7 +20,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(65) diff --git a/modes/survivor_hard.lua b/modes/survivor_hard.lua index 102016ac..3435bf8f 100644 --- a/modes/survivor_hard.lua +++ b/modes/survivor_hard.lua @@ -26,7 +26,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(65) diff --git a/modes/survivor_lunatic.lua b/modes/survivor_lunatic.lua index 37106f79..4ff20115 100644 --- a/modes/survivor_lunatic.lua +++ b/modes/survivor_lunatic.lua @@ -21,7 +21,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(65) diff --git a/modes/survivor_normal.lua b/modes/survivor_normal.lua index 7d73e7d7..e1e6c6ae 100644 --- a/modes/survivor_normal.lua +++ b/modes/survivor_normal.lua @@ -25,7 +25,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(65) diff --git a/modes/survivor_ultimate.lua b/modes/survivor_ultimate.lua index 90b5fdba..8859adb2 100644 --- a/modes/survivor_ultimate.lua +++ b/modes/survivor_ultimate.lua @@ -27,7 +27,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(65) diff --git a/modes/tech_hard+.lua b/modes/tech_hard+.lua index c072dba0..3783fc77 100644 --- a/modes/tech_hard+.lua +++ b/modes/tech_hard+.lua @@ -15,7 +15,7 @@ return{ bg="matrix",bgm="secret8th", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/tech_hard.lua b/modes/tech_hard.lua index 52b66652..58d3a80f 100644 --- a/modes/tech_hard.lua +++ b/modes/tech_hard.lua @@ -15,7 +15,7 @@ return{ bg="matrix",bgm="secret8th", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/tech_lunatic+.lua b/modes/tech_lunatic+.lua index d3dc0ddc..13101048 100644 --- a/modes/tech_lunatic+.lua +++ b/modes/tech_lunatic+.lua @@ -15,7 +15,7 @@ return{ bg="matrix",bgm="secret7th", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/tech_lunatic.lua b/modes/tech_lunatic.lua index c53bbe73..9a8de439 100644 --- a/modes/tech_lunatic.lua +++ b/modes/tech_lunatic.lua @@ -15,7 +15,7 @@ return{ bg="matrix",bgm="secret7th", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/tech_normal+.lua b/modes/tech_normal+.lua index 7abf06fa..640fe8c7 100644 --- a/modes/tech_normal+.lua +++ b/modes/tech_normal+.lua @@ -15,7 +15,7 @@ return{ bg="matrix",bgm="newera", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/tech_normal.lua b/modes/tech_normal.lua index 7bdaa5a7..f667980e 100644 --- a/modes/tech_normal.lua +++ b/modes/tech_normal.lua @@ -15,7 +15,7 @@ return{ bg="matrix",bgm="newera", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/tech_ultimate+.lua b/modes/tech_ultimate+.lua index 6c597e67..b25ca7a0 100644 --- a/modes/tech_ultimate+.lua +++ b/modes/tech_ultimate+.lua @@ -18,7 +18,7 @@ return{ }, slowMark=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/tech_ultimate.lua b/modes/tech_ultimate.lua index 27fb28b8..73b9bde5 100644 --- a/modes/tech_ultimate.lua +++ b/modes/tech_ultimate.lua @@ -12,7 +12,7 @@ return{ }, slowMark=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(45) diff --git a/modes/techmino49_easy.lua b/modes/techmino49_easy.lua index c42dfe17..7e4a7a6a 100644 --- a/modes/techmino49_easy.lua +++ b/modes/techmino49_easy.lua @@ -31,7 +31,7 @@ return{ powerUp={2,5,10,20}, stage={30,20,15,10,5}, } - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) local L={}for i=1,49 do L[i]=true end local t=system~="Windows"and 0 or 2 while t>0 do @@ -41,17 +41,17 @@ return{ local n=2 for i=1,4 do for j=1,6 do if L[n]then - newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(2,5))) + PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(2,5))) else - newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000)) + PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000)) end n=n+1 end end for i=9,12 do for j=1,6 do if L[n]then - newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(2,5))) + PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(2,5))) else - newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000)) + PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(2,5)-1,2,true,10000)) end n=n+1 end end diff --git a/modes/techmino49_hard.lua b/modes/techmino49_hard.lua index 8c6daf34..2cd0660f 100644 --- a/modes/techmino49_hard.lua +++ b/modes/techmino49_hard.lua @@ -31,7 +31,7 @@ return{ powerUp={2,5,10,20}, stage={30,20,15,10,5}, } - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) local L={}for i=1,49 do L[i]=true end local t=system~="Windows"and 0 or 4 while t>0 do @@ -41,17 +41,17 @@ return{ local n=2 for i=1,4 do for j=1,6 do if L[n]then - newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(4,7))) + PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(4,7))) else - newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000)) + PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000)) end n=n+1 end end for i=9,12 do for j=1,6 do if L[n]then - newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(4,7))) + PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(4,7))) else - newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000)) + PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(4,7)-1,3,true,20000)) end n=n+1 end end diff --git a/modes/techmino49_ultimate.lua b/modes/techmino49_ultimate.lua index 603e4908..31ddb3f1 100644 --- a/modes/techmino49_ultimate.lua +++ b/modes/techmino49_ultimate.lua @@ -31,7 +31,7 @@ return{ powerUp={2,5,10,20}, stage={30,20,15,10,5}, } - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) local L={}for i=1,49 do L[i]=true end local t=system~="Windows"and 0 or 6 while t>0 do @@ -41,17 +41,17 @@ return{ local n=2 for i=1,4 do for j=1,6 do if L[n]then - newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(8,10))) + PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("9S",rnd(8,10))) else - newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000)) + PLY.newAIPlayer(n,78*i-54,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000)) end n=n+1 end end for i=9,12 do for j=1,6 do if L[n]then - newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(8,10))) + PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("9S",rnd(8,10))) else - newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000)) + PLY.newAIPlayer(n,78*i+267,115*j-98,.09,AITemplate("CC",rnd(8,10)-1,4,true,30000)) end n=n+1 end end diff --git a/modes/techmino99_easy.lua b/modes/techmino99_easy.lua index 19fa1857..b32ceb0a 100644 --- a/modes/techmino99_easy.lua +++ b/modes/techmino99_easy.lua @@ -31,7 +31,7 @@ return{ powerUp={2,6,14,30}, stage={75,50,35,20,10}, } - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) local L={}for i=1,100 do L[i]=true end local t=system~="Windows"and 0 or 4 while t>0 do @@ -41,17 +41,17 @@ return{ local n=2 for i=1,7 do for j=1,7 do if L[n]then - newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(2,5))) + PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(2,5))) else - newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000)) + PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000)) end n=n+1 end end for i=15,21 do for j=1,7 do if L[n]then - newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(2,5))) + PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(2,5))) else - newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000)) + PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(2,5)-1,2,true,10000)) end n=n+1 end end diff --git a/modes/techmino99_hard.lua b/modes/techmino99_hard.lua index 0641d4b7..941d3fff 100644 --- a/modes/techmino99_hard.lua +++ b/modes/techmino99_hard.lua @@ -31,7 +31,7 @@ return{ powerUp={2,6,14,30}, stage={75,50,35,20,10}, } - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) local L={}for i=1,100 do L[i]=true end local t=system~="Windows"and 0 or 4 while t>0 do @@ -41,17 +41,17 @@ return{ local n=2 for i=1,7 do for j=1,7 do if L[n]then - newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(4,7))) + PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(4,7))) else - newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000)) + PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000)) end n=n+1 end end for i=15,21 do for j=1,7 do if L[n]then - newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(4,7))) + PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(4,7))) else - newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000)) + PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(4,7)-1,3,true,20000)) end n=n+1 end end diff --git a/modes/techmino99_ultimate.lua b/modes/techmino99_ultimate.lua index 739a89f9..e4d9d056 100644 --- a/modes/techmino99_ultimate.lua +++ b/modes/techmino99_ultimate.lua @@ -31,7 +31,7 @@ return{ powerUp={2,6,14,30}, stage={75,50,35,20,10}, } - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) local L={}for i=1,100 do L[i]=true end local t=system~="Windows"and 0 or 4 while t>0 do @@ -41,17 +41,17 @@ return{ local n=2 for i=1,7 do for j=1,7 do if L[n]then - newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(8,10))) + PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("9S",rnd(8,10))) else - newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000)) + PLY.newAIPlayer(n,46*i-36,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000)) end n=n+1 end end for i=15,21 do for j=1,7 do if L[n]then - newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(8,10))) + PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("9S",rnd(8,10))) else - newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000)) + PLY.newAIPlayer(n,46*i+264,97*j-72,.068,AITemplate("CC",rnd(8,10)-1,4,true,30000)) end n=n+1 end end diff --git a/modes/tsd_easy.lua b/modes/tsd_easy.lua index cb9861e9..ea850834 100644 --- a/modes/tsd_easy.lua +++ b/modes/tsd_easy.lua @@ -21,7 +21,7 @@ return{ bg="matrix",bgm="reason", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(75) diff --git a/modes/tsd_hard.lua b/modes/tsd_hard.lua index e3d54241..630c7bc7 100644 --- a/modes/tsd_hard.lua +++ b/modes/tsd_hard.lua @@ -19,7 +19,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(75) diff --git a/modes/tsd_ultimate.lua b/modes/tsd_ultimate.lua index 438e7c84..9fba6dd4 100644 --- a/modes/tsd_ultimate.lua +++ b/modes/tsd_ultimate.lua @@ -19,7 +19,7 @@ return{ }, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(75) diff --git a/modes/ultra.lua b/modes/ultra.lua index b3b821fb..1e801d40 100644 --- a/modes/ultra.lua +++ b/modes/ultra.lua @@ -25,7 +25,7 @@ return{ slowMark=true, pauseLimit=true, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) gc.setLineWidth(2) diff --git a/modes/zen.lua b/modes/zen.lua index 622006c7..e601890b 100644 --- a/modes/zen.lua +++ b/modes/zen.lua @@ -3,11 +3,11 @@ return{ env={ drop=120,lock=120, oncehold=false,target=200, - dropPiece=player.reach_winCheck, + dropPiece=PLY.reach_winCheck, bg="strap",bgm="infinite", }, load=function() - newPlayer(1,340,15) + PLY.newPlayer(1,340,15) end, mesDisp=function(P,dx,dy) setFont(70) diff --git a/paint.lua b/paint.lua index f21e07d1..f838ec98 100644 --- a/paint.lua +++ b/paint.lua @@ -54,7 +54,7 @@ local function VirtualkeyPreview() local c=sceneTemp.sel==i and .6 or 1 gc.setColor(c,1,c,setting.VKAlpha*.1) gc.setLineWidth(B.r*.07) - gc.circle("line",B.x,B.y,B.r) + gc.circle("line",B.x,B.y,B.r,10) if setting.VKIcon then gc.draw(VKIcon[i],B.x,B.y,nil,B.r*.025,nil,18,18)end end end @@ -202,11 +202,9 @@ function Pnt.mode() 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) + local dx,dy=6.26*sin(Timer()*0.626+M.id),6.6*sin(Timer()+M.id) + gc.setColor(0,0,0,.26) 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 @@ -416,13 +414,20 @@ function Pnt.play() end end end + gc.push("transform") + gc.origin() if restartCount>0 then gc.setColor(0,0,0,restartCount*.05) - gc.push("transform") - gc.origin() - gc.rectangle("fill",0,0,scr.w,scr.h) - gc.pop() + gc.rectangle("fill",0,0,scr.w,scr.h) end + if game.warnLVL>0 then + gc.setColor(0,0,0,0) + SHADER.warning:send("level",game.warnLVL) + gc.setShader(SHADER.warning) + gc.rectangle("fill",0,0,scr.w,scr.h) + gc.setShader() + end + gc.pop() end local hexList={1,0,.5,1.732*.5,-.5,1.732*.5}for i=1,6 do hexList[i]=hexList[i]*150 end local textPos={90,131,-90,131,-200,-25,-90,-181,90,-181,200,-25} @@ -667,7 +672,7 @@ function Pnt.help() setFont(20) gc.setColor(1,1,1) for i=1,#text.help do - gc.printf(text.help[i],150,30*i-10,1000,"center") + gc.printf(text.help[i],150,35*i+40,1000,"center") end setFont(19) gc.print(text.used,30,330) @@ -684,6 +689,22 @@ function Pnt.help() mStr(text.support,150+sin(Timer()*4)*20,283) mStr(text.support,1138-sin(Timer()*4)*20,270) end +function Pnt.staff() + local L=text.staff + local t=sceneTemp.time + if t>45 then t=45 end + if t>0 then + setFont(40) + for i=1,#L do + mStr(L[i],640,800+80*i-t*40) + end + mDraw(IMG.coloredTitleImage,640,800-t*40,nil,2) + mDraw(IMG.coloredTitleImage,640,2160-t*40,nil,2) + else + setFont(60) + mStr("Don't tell this to anyone.",640,-100-t*40) + end +end function Pnt.stat() local chart=sceneTemp.chart setFont(24) diff --git a/parts/bg.lua b/parts/bg.lua index efaa4d20..1ddd41c8 100644 --- a/parts/bg.lua +++ b/parts/bg.lua @@ -2,241 +2,302 @@ 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 BG local scr=scr -local BGinit,BGresize,BGupdate,BGdraw,BGdiscard={},{},{},{},{} -local BGvars={_G=_G} +local BGvars={_G=_G,SHADER=SHADER} -function BGdraw.none() - gc.clear(.15,.15,.15) -end +local back={} +back.none={ + draw=function() + gc.clear(.15,.15,.15) + end, +} +back.grey={ + draw=function() + gc.clear(.3,.3,.3) + end, +} +back.glow={ + init=function() + t=0 + end, + update=function(dt) + t=t+dt + end, + draw=function() + 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, +}--light-dark +back.rgb={ + init=function() + t=0 + end, + update=function(dt) + t=t+dt + end, + draw=function() + gc.clear( + sin(t*1.2)*.15+.2, + sin(t*1.5)*.15+.2, + sin(t*1.9)*.15+.2 + ) + end, +}--Changing pure color +back.strap={ + init=function() + t=0 + end, + update=function(dt) + t=t+dt + end, + draw=function() + SHADER.strap:send("t",t*.626) + gc.setColor(.4,.626,.626) + gc.setShader(SHADER.strap) + gc.rectangle("fill",0,0,scr.w,scr.h) + gc.setShader() + end, +}--Horizonal ranbow +back.flink={ + init=function() + t=0 + end, + update=function(dt) + t=t+dt + end, + draw=function() + local t=.13-t%3%1.7 + if t<.2 then gc.clear(t,t,t) + else gc.clear(0,0,0) + end + end, +}--flash after random time +back.aura={ + init=function() + t=rnd()*3600 + BG.resize(scr.w,scr.h) + end, + resize=function(w,h) + SHADER.aura:send("w",w*scr.dpi) + SHADER.aura:send("h",h*scr.dpi) + end, + update=function(dt) + t=t+dt + end, + draw=function() + SHADER.aura:send("t",t) + gc.setShader(SHADER.aura) + gc.rectangle("fill",0,0,scr.w,scr.h) + gc.setShader() + end, +}--cool liquid background +back.game1={ + init=function() + t=0 + BG.resize(scr.w,scr.h) + end, + resize=function(w,h) + SHADER.rainbow:send("w",w*scr.dpi) + SHADER.rainbow:send("h",h*scr.dpi) + end, + update=function(dt) + t=t+dt + end, + draw=function() + SHADER.rainbow:send("t",t) + gc.setColor(.6,.6,.6) + gc.setShader(SHADER.rainbow) + gc.rectangle("fill",0,0,scr.w,scr.h) + gc.setShader() + end, +}--Rolling rainbow +back.game2={ + init=function() + t=0 + BG.resize(scr.w,scr.h) + end, + resize=function(w,h) + SHADER.rainbow:send("w",w*scr.dpi) + SHADER.rainbow:send("h",h*scr.dpi) + end, + update=function(dt) + t=t+dt + end, + draw=function() + SHADER.rainbow:send("t",t) + gc.setColor(.7,.4,.4) + gc.setShader(SHADER.rainbow) + gc.rectangle("fill",0,0,scr.w,scr.h) + gc.setShader() + end, +}--Red rolling rainbow +back.game3={ + init=function() + t=0 + BG.resize(scr.w,scr.h) + end, + resize=function(w,h) + SHADER.rainbow:send("w",w*scr.dpi) + SHADER.rainbow:send("h",h*scr.dpi) + end, + update=function(dt) + t=t+dt + end, + draw=function() + SHADER.rainbow:send("t",t) + gc.setColor(.5,.5,.8) + gc.setShader(SHADER.rainbow) + gc.rectangle("fill",0,0,scr.w,scr.h) + gc.setShader() + end, +}--Blue rolling rainbow +back.game4={ + init=function() + t=0 + end, + update=function(dt) + t=t+dt + end, + draw=function() + SHADER.strap:send("t",t*1.26) + gc.setColor(.5,.626,.74) + gc.setShader(SHADER.strap) + gc.rectangle("fill",0,0,scr.w,scr.h) + gc.setShader() + end, +}--Blue strap +back.game5={ + init=function() + t=0 + end, + update=function(dt) + t=t+dt + end, + draw=function() + local t=2.5-t%20%6%2.5 + if t<.3 then gc.clear(t,t,t) + else gc.clear(0,0,0) + end + end, +}--Lightning -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 - repeat - gc.draw(img,x,0,nil,8,scr.h) - x=x+1024--image width*8 - until x>=scr.w -end - -function BGinit.flink() - t=0 -end -function BGupdate.flink(dt) - t=t+dt -end -function BGdraw.flink() - local t=.13-t%3%1.7 - if t<.2 then gc.clear(t,t,t) - else gc.clear(0,0,0) - end -end - -function BGinit.game1() - t=0 - img=_G.IMG.gameBG1 -end -function BGupdate.game1(dt) - t=t+dt -end -function BGdraw.game1() - gc.setColor(.5,.5,.5) - gc.draw(img,scr.w*.5,scr.h*.5,t*.15,scr.rad*.0625,nil,16,16) -end--Rainbow - -function BGinit.game2() - t=0 - img=_G.IMG.gameBG1 -end -function BGupdate.game2(dt) - t=t+dt -end -function BGdraw.game2() - gc.setColor(.5,.26,.26) - gc.draw(img,scr.w*.5,scr.h*.5,t*.15,scr.rad*.0625,nil,16,16) -end--Red rainbow - -function BGinit.game3() - t=0 - img=_G.IMG.gameBG1 -end -function BGupdate.game3(dt) - t=t+dt -end -function BGdraw.game3() - gc.setColor(.4,.4,.8) - gc.draw(img,scr.w*.5,scr.h*.5,t*.15,scr.rad*.0625,nil,16,16) -end--Blue rainbow - -function BGinit.game4() - t=0 - img=_G.IMG.gameBG2 -end -function BGupdate.game4(dt) - t=t+dt -end -function BGdraw.game4() - gc.setColor(.05,.4,.4) - local x=t%8*-128 - repeat - gc.draw(img,x,0,nil,8,scr.h) - x=x+1024--image width*8 - until x>=scr.w -end--Fast strap - -function BGinit.game5() - t=0 -end -function BGupdate.game5(dt) - t=t+dt -end -function BGdraw.game5() - local t=2.5-t%20%6%2.5 - if t<.3 then gc.clear(t,t,t) - else gc.clear(0,0,0) - end -end--Lightning - -function BGinit.game6() - t=0 - colorLib=_G.SKIN.libColor - colorSet=_G.setting.skin - miniBlock=_G.miniBlock -end -function BGupdate.game6(dt) - t=t+dt -end local blocks=require("parts/mino") local scs=require("parts/spinCenters") -function BGdraw.game6() - local t=1.2-t%10%3%1.2 - if t<.3 then gc.clear(t,t,t) - else gc.clear(0,0,0) - end - local R=7-int(t*.5)%7 - local _=colorLib[colorSet[R]] - gc.setColor(_[1],_[2],_[3],.1) - gc.draw(miniBlock[R],640,360,t%3.1416*6,400,400,scs[R][0][2]-.5,#blocks[R][0]-scs[R][0][1]+.5) -end--Fast lightning&spining tetromino +back.game6={ + init=function() + t=0 + colorLib=_G.SKIN.libColor + colorSet=_G.setting.skin + miniBlock=_G.miniBlock + end, + update=function(dt) + t=t+dt + end, + draw=function() + local t=1.2-t%10%3%1.2 + if t<.3 then gc.clear(t,t,t) + else gc.clear(0,0,0) + end + local R=7-int(t*.5)%7 + local _=colorLib[colorSet[R]] + gc.setColor(_[1],_[2],_[3],.1) + gc.draw(miniBlock[R],640,360,t%3.1416*6,400,400,scs[R][0][2]-.5,#blocks[R][0]-scs[R][0][1]+.5) + end, +}--Fast lightning + spining tetromino local matrixT={}for i=1,50 do matrixT[i]={}for j=1,50 do matrixT[i][j]=love.math.noise(i,j)+2 end end -function BGinit.matrix() - t=0 -end -function BGupdate.matrix(dt) - t=t+dt -end -function BGdraw.matrix() - gc.scale(scr.k) - gc.clear(.15,.15,.15) - local _=ceil(scr.h/80) - for i=1,ceil(scr.w/80)do - for j=1,_ do - gc.setColor(1,1,1,sin(i+matrixT[i][j]*t)*.1+.1) - gc.rectangle("fill",80*i,80*j,-80,-80) +back.matrix={ + init=function() + t=rnd()*3600 + end, + update=function(dt) + t=t+dt + end, + draw=function() + gc.scale(scr.k) + gc.clear(.15,.15,.15) + local Y=ceil(scr.h*scr.dpi/80) + for x=1,ceil(scr.w*scr.dpi/80)do + for y=1,Y do + gc.setColor(1,1,1,sin(x+matrixT[x][y]*t)*.1+.1) + gc.rectangle("fill",80*x,80*y,-80,-80) + end end - end - gc.scale(1/scr.k) -end + gc.scale(1/scr.k) + end, +} +back.space={ + init=function() + stars={} + W,H=scr.w+20,scr.h+20 + BG.resize(scr.w,scr.h) + end, + resize=function(w,h) + local S=stars + for i=1,1260,5 do + local s=rnd(26,40)*.1 + S[i]=s*scr.k --size + S[i+1]=rnd(W)-10 --x + S[i+2]=rnd(H)-10 --y + S[i+3]=(rnd()-.5)*.01*s --vx + S[i+4]=(rnd()-.5)*.01*s --vy + end--800 var + end, + update=function(dt) + local S=stars + for i=1,1260,5 do + S[i+1]=(S[i+1]+S[i+3])%W + S[i+2]=(S[i+2]+S[i+4])%H + end--star moving + end, + draw=function() + gc.clear(.2,.2,.2) + if not stars[1]then return end + gc.translate(-10,-10) + gc.setColor(.8,.8,.8) + for i=1,1260,5 do + local s=stars + local x,y=s[i+1],s[i+2] + s=s[i] + gc.rectangle("fill",x,y,s,s) + end + gc.translate(10,10) + end, + discard=function() + stars={} + end, +} -function BGinit.space() - stars={} - for i=1,2600,5 do - local s=rnd(4) - stars[i]=s --size - stars[i+1]=rnd(W)-10 --x - stars[i+2]=rnd(H)-10 --y - stars[i+3]=(rnd()-.5)*.01*s --vx - stars[i+4]=(rnd()-.5)*.01*s --vy - end--800 var -end -function BGresize.space(w,h) - W,H=w+20,h+20 - BGinit.space() -end -function BGupdate.space(dt) - local s=stars - for i=1,2600,5 do - s[i+1]=(s[i+1]+s[i+3])%W - s[i+2]=(s[i+2]+s[i+4])%H - end--star moving -end -function BGdraw.space() - gc.clear(.2,.2,.2) - if not stars[1]then return end - gc.translate(-10,-10) - gc.setColor(.8,.8,.8) - for i=1,2600,5 do - local s=stars - local x,y=s[i+1],s[i+2] - s=s[i] - gc.rectangle("fill",x,y,s,s) - end - gc.translate(10,10) -end -function BGdiscard.space() - stars={} -end +for _,bg in next,back do + if not bg.init then bg.init= NULL end setfenv(bg.init ,BGvars) + if not bg.resize then bg.resize= NULL end setfenv(bg.resize ,BGvars) + if not bg.update then bg.update= NULL end setfenv(bg.update ,BGvars) + if not bg.discard then bg.discard=NULL end setfenv(bg.discard ,BGvars) + if not bg.draw then bg.draw= NULL end setfenv(bg.draw ,BGvars) +end--make BG vars invisible -for k in next,BGdraw do - if BGinit[k]then setfenv(BGinit[k], BGvars)end - if BGresize[k]then setfenv(BGresize[k], BGvars)end - if BGupdate[k]then setfenv(BGupdate[k], BGvars)end - if BGdraw[k]then setfenv(BGdraw[k], BGvars)end - if BGdiscard[k]then setfenv(BGdiscard[k], BGvars)end -end - -local BG={ +BG={ cur="none", resize=NULL, update=NULL, - draw=BGdraw.none, + draw=back.none.draw, } function BG.set(bg) if bg==BG.cur or not setting.bg then return end + if BG.discard then + BG.discard() + collectgarbage() + end BG.cur=bg - local _=BGdiscard[BG.cur]if _ then _()collectgarbage()end - BG.resize=BGresize[bg]or NULL;BG.resize(scr.w,scr.h) - _=BGinit[bg]if _ then _()end - BG.update=BGupdate[bg]or NULL - BG.draw=BGdraw[bg] -end + bg=back[bg] + BG.init=bg.init or NULL + BG.resize=bg.resize or NULL + BG.update=bg.update or NULL + BG.discard=bg.discard or NULL + BG.draw=bg.draw or NULL + BG.init() +end return BG \ No newline at end of file diff --git a/parts/bgm.lua b/parts/bgm.lua index 8281656d..f5440e0a 100644 --- a/parts/bgm.lua +++ b/parts/bgm.lua @@ -1,9 +1,10 @@ local rem=table.remove -local BGM={} --- BGM.nowPlay=[str:playing ID] --- BGM.suspend=[str:pausing ID] --- BGM.playing=[src:playing SRC] +local BGM={ + --nowPlay=[str:playing ID] + --suspend=[str:pausing ID] + --playing=[src:playing SRC] +} BGM.list={ "blank","way","race","newera","push","reason","infinite", "secret7th","secret8th", @@ -11,11 +12,14 @@ BGM.list={ "rockblock","cruelty","final","8-bit happiness","end", } BGM.len=#BGM.list -function BGM.loadOne(_) - local _=BGM.list[_] - BGM.list[_]=love.audio.newSource("/BGM/".._..".ogg","stream") - BGM.list[_]:setLooping(true) - BGM.list[_]:setVolume(0) +function BGM.loadOne(N) + N=BGM.list[N] + local file="/BGM/"..N..".ogg" + if love.filesystem.getInfo(file)then + BGM.list[N]=love.audio.newSource(file,"stream") + BGM.list[N]:setLooping(true) + BGM.list[N]:setVolume(0) + end end function BGM.loadAll() for i=1,#BGM.list do @@ -27,7 +31,7 @@ function BGM.play(s) BGM.playing=BGM.list[s] BGM.suspend,BGM.nowPlay=s return - elseif not s then + elseif not s or not BGM.list[s]then return end if BGM.nowPlay~=s then diff --git a/default_data.lua b/parts/default_data.lua similarity index 99% rename from default_data.lua rename to parts/default_data.lua index e73ac5be..bd4ebaa5 100644 --- a/default_data.lua +++ b/parts/default_data.lua @@ -26,6 +26,7 @@ local s={ frameMul=100, text=true, + warn=true, fullscreen=false, bg=true, powerInfo=false, diff --git a/parts/file.lua b/parts/file.lua index a88c185a..58dd4148 100644 --- a/parts/file.lua +++ b/parts/file.lua @@ -41,14 +41,14 @@ local function dumpTable(L,t) end elseif T=="string"then k=k.."=" elseif T=="boolean"then k="["..k.."]=" - else error("Error key type!") + else assert(false,"Error key type!") end T=type(v) if T=="number"then v=tostring(v) elseif T=="string"then v="\""..v.."\"" elseif T=="table"then v=dumpTable(v,t+1) elseif T=="boolean"then v=tostring(v) - else error("Error data type!") + else assert(false,"Error data type!") end s=s..tabs[t]..k..v..",\n" end diff --git a/parts/img.lua b/parts/img.lua index 69311f8f..c33acf28 100644 --- a/parts/img.lua +++ b/parts/img.lua @@ -17,8 +17,7 @@ local IMG={ miyaF3="miya/f3.png", miyaF4="miya/f4.png", - gameBG1="BG/bg1.png", - gameBG2="BG/bg2.png", + electric="mess/electric.png", } local list={} local count=0 diff --git a/parts/kickList.lua b/parts/kickList.lua index 01d70138..cfc9b9c1 100644 --- a/parts/kickList.lua +++ b/parts/kickList.lua @@ -62,6 +62,11 @@ local OspinList={ {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=L/R unmovable,2=free)} +local XspinList={ + {{ 1,-1},{ 1, 0},{ 1, 1}}, + {{ 0,-1},{ 0,-2},{ 0, 1}}, + {{-1,-1},{-1, 0},{-1, 1}}, +} local TRS={ { [01]={{-1, 0},{-1, 1},{ 0,-2},{-1, 2},{ 0, 1}}, @@ -89,8 +94,8 @@ local TRS={ [23]={{ 1, 0},{ 1,-1},{ 1, 1},{ 0,-2},{ 1,-2},{ 1,-1}}, [02]={{-1, 0},{ 1, 0},{ 0,-1},{ 0, 1}}, [20]={{ 1, 0},{-1, 0},{ 0, 1},{ 0,-1}}, - [13]={{ 0,-1},{ 1, 0},{ 0, 1}}, - [31]={{ 0, 1},{-1, 0},{ 0,-1}}, + [13]={{ 0,-1},{ 0, 1},{ 1, 0}}, + [31]={{ 0, 1},{ 0,-1},{-1, 0}}, },--J {},--L { @@ -250,7 +255,19 @@ local TRS={ [31]={{ 0,-1},{ 1, 0}}, },--W function(P,d) - return + if P.human then SFX.fieldPlay("rotate",nil,P)end + if P.gameEnv.easyFresh then P:freshLockDelay()end + local iki=XspinList[d] + for test=1,#iki do + local x,y=P.curX+iki[test][1],P.curY+iki[test][2] + if not P:ifoverlap(P.cur.bk,x,y)then + P.curX,P.curY=x,y + P.spinLast=1 + P:freshgho() + P.stat.rotate=P.stat.rotate+1 + return + end + end end,--X { [01]={{-1, 0},{-1, 1},{ 0,-3},{-1, 1},{-1, 2},{ 0, 1}}, @@ -259,8 +276,8 @@ local TRS={ [30]={{ 0, 1},{-1, 1},{ 1, 0},{-1,-1},{ 0, 2},{-1, 2},{ 0, 3},{-1, 3},{ 1,-1}}, [12]={{ 1, 0},{ 1,-1},{ 0,-1},{ 1,-2},{ 0,-2},{ 1, 1},{-1, 0},{ 0, 2},{ 1, 2}}, [21]={{-1, 0},{-1, 1},{ 0, 1},{-1, 2},{ 0, 2},{-1,-1},{ 1, 0},{ 0,-2},{-1,-2}}, - [32]={{-1, 0},{-1, 1},{-1,-1},{ 0, 2},{-1, 2},{ 0,-2}}, - [23]={{ 1, 0},{ 1,-1},{ 1, 1},{ 0,-2},{ 1,-2},{ 0, 2}}, + [32]={{-1, 0},{-1, 1},{-1,-1},{ 1, 0},{ 0, 2},{-1, 2},{ 0,-2}}, + [23]={{ 1, 0},{ 1,-1},{ 1, 1},{-1, 0},{ 0,-2},{ 1,-2},{ 0, 2}}, [02]={{ 0,-1},{ 1,-1},{-1, 0},{ 2,-1},{ 0, 1}}, [20]={{ 0, 1},{-1, 1},{ 1, 0},{-2, 1},{ 0,-1}}, [13]={{-1, 0},{-1,-1},{ 0, 1},{-1,-2}}, diff --git a/parts/languages.lua b/parts/languages.lua index ae38085e..328f776c 100644 --- a/parts/languages.lua +++ b/parts/languages.lua @@ -139,21 +139,32 @@ local langList={ "全/半清:", }, help={ - "好像也没啥好帮助的吧?就当是关于了", + "既然你能玩到这个游戏,应该也不需要什么帮助吧?", "这只是一个普通的方块游戏,请勿称此游戏为某某某方块", "从TO/C2/KOS/TGM3/JS等方块获得过灵感", "", "使用LOVE2D引擎", - "作者:MrZ 邮箱:1046101471@qq.com", - "程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:MrZ/Miya", - "特别感谢:Flyz,Farter,196,Teatube,[所有内测人员]和 你!", - "", "错误或者建议请附带截图发送到内测群或者作者邮箱~", - "仅通过唯一内测群822023725进行免费下载/更新", - "其他渠道获得游戏皆有被修改/植入病毒的风险,程序只申请了震动&联网权限!", + "仅通过内测群822023725进行免费下载/更新", + "其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了震动&联网权限!", "若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)", "请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~", }, + staff={ + "作者:MrZ 邮箱:1046101471@qq.com", + "", + "使用LOVE2D引擎", + "", + "程序:MrZ, (FinnTenzor)", + "美术:MrZ, (Gnyar)", + "音乐:MrZ, (T0722)", + "音效:MrZ", + "语音:Miya, (MrZ)", + "", + "特别感谢:", + "Flyz, Farter, 蕴空之灵,", + "Teatube, [所有内测人员]", + }, used=[[ 使用工具: Beepbox @@ -249,6 +260,7 @@ local langList={ atkFX="攻击特效等级", frame="绘制帧率", text="消行文本", + warn="死亡预警", fullscreen="全屏", bg="背景", power="电量显示", @@ -321,10 +333,14 @@ local langList={ back="返回", },--langName added later help={ - his="历史", + staff="制作人员", + his="更新历史", qq="作者QQ", back="返回", }, + staff={ + back="返回", + }, history={ prev="↑", next="↓", @@ -369,8 +385,8 @@ local langList={ {"隐形", "半隐", "不强大脑"}, {"隐形", "全隐", "挺强大脑"}, {"隐形", "瞬隐", "很强大脑"}, - {"隐形", "瞬隐+", "超强大脑"}, - {"隐形", "啥都不剩隐","最强大脑"}, + {"隐形", "瞬隐+", "最强大脑"}, + {"隐形", "", "你准备好了吗"}, {"高速经典", "CTWC", "高速经典"}, {"生存", "简单", "你能存活多久?"}, {"生存", "普通", "你能存活多久?"}, @@ -408,7 +424,7 @@ local langList={ {"无尽:挖掘", "", "挖呀挖呀挖"}, {"自定义", "普通", "画点什么然后把它消除!"}, {"自定义", "拼图", "画点什么然后把它拼出来吧!"}, - {"竞速", "五联块", "不可能的任务"}, + {"竞速", "五联块", "伤脑筋十八块"}, }, }, { @@ -549,21 +565,31 @@ local langList={ "全/半清:", }, help={ - "好像也没啥好帮助的吧?就当是关于了", + "既然你能玩到这个游戏,应该也不需要什么帮助吧?", "这只是一个普通的方块游戏,请勿称此游戏为某某某方块", "从TO/C2/KOS/TGM3/JS等方块获得过灵感", "", - "使用LOVE2D引擎", - "作者:MrZ 邮箱:1046101471@qq.com", - "程序:MrZ 美术:MrZ 音乐:MrZ 音效:MrZ 语音:MrZ/Miya", - "特别感谢:Flyz,Farter,196,Teatube,[所有内测人员]和 你!", - "", "错误或者建议请附带截图发送到内测群或者作者邮箱~", "仅通过内测群822023725进行免费下载/更新", - "其他渠道获得游戏皆有被修改/植入病毒的风险,程序只申请了震动&联网权限!", + "其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了震动&联网权限!", "若由于被修改的本游戏产生的各种损失作者不负责(我怎么负责啊跟我有啥关系)", "请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~", }, + staff={ + "作者:MrZ 邮箱:1046101471@qq.com", + "", + "使用LOVE2D引擎", + "", + "程序:MrZ, (FinnTenzor)", + "美术:MrZ, (Gnyar)", + "音乐:MrZ, (T0722)", + "音效:MrZ", + "语音:Miya, (MrZ)", + "", + "特别感谢:", + "Flyz, Farter, 蕴空之灵,", + "Teatube, [所有内测人员]", + }, used=[[ 使用工具: Beepbox @@ -659,6 +685,7 @@ local langList={ atkFX="攻击特效等级", frame="绘制帧率", text="消行文本", + warn="死亡预警", fullscreen="全屏", bg="背景", power="电量显示", @@ -731,10 +758,14 @@ local langList={ back="返回", },--langName added later help={ - his="历史", + staff="制作人员", + his="更新历史", qq="作者QQ", back="返回", }, + staff={ + back="返回", + }, history={ prev="↑", next="↓", @@ -780,7 +811,7 @@ local langList={ {"隐形", "全隐", "挺强大脑"}, {"隐形", "瞬隐", "很强大脑"}, {"隐形", "瞬隐+", "超强大脑"}, - {"隐形", "啥都不剩隐","最强大脑"}, + {"隐形", "", "你准备好了吗"}, {"高速经典", "CTWC", "高速经典"}, {"生存", "简单", "你能存活多久?"}, {"生存", "普通", "你能存活多久?"}, @@ -818,7 +849,7 @@ local langList={ {"无尽:挖掘", "", "挖呀挖呀挖"}, {"自定义", "普通", "画点什么然后把它消除!"}, {"自定义", "拼图", "画点什么然后把它拼出来吧!"}, - {"竞速", "五联块", "不可能的任务"}, + {"竞速", "五联块", "伤脑筋十八块"}, }, }, { @@ -956,21 +987,31 @@ local langList={ "PC/HPC:", }, help={ - "Doesn't this seem to be of \"any help\", right?", + "Now you can play this, you are probabaly do not need \"help\"?", "This is just an ordinary block game, not a certain one.", "It plays like TO/C2/KOS/TGM3 and others.", "", - "Made with LOVE2D", - "Author: MrZ E-mail: 1046101471@qq.com", - "Program: MrZ Art: MrZ Music: MrZ SFX: MrZ Voice: MrZ/Miya", - "Special thanks to Flyz, Farter, 196, Teatube, [all testers] and you!", - "", "bug reports/suggestions, sent to the author's testing group or email ~", "This is a free download available only through discord.gg/f9pUvkh", "The game downloaded from other sources may contain viruses,", "and only vibration & networking permissions are needed for mobile versions!", "The author is not responsible for any losses from modifying the game.", }, + staff={ + "Author: MrZ E-mail: 1046101471@qq.com", + "", + "Powered by LOVE2D", + "", + "Program: MrZ, (FinnTenzor)", + "Art: MrZ, (Gnyar)", + "Music: MrZ, (T0722)", + "Sound: MrZ", + "Voice: Miya, (MrZ)", + "", + "Secial Thanks:", + "Flyz, Farter, 蕴空之灵,", + "Teatube, [All test staff]", + }, used="Tool used:\n\tBeepbox\n\tGFIE\n\tGoldwave\nLib used:\n\tCold_Clear[MinusKelvin]\n\tsimple-love-lights[dylhunn]", support="Support author", group="Official QQ Group(if not hacked):822023725", @@ -1058,6 +1099,7 @@ local langList={ atkFX="ATK. FX level", frame="Render Frame Rate", text="Action Text", + warn="Death Alert", fullscreen="Full Screen", bg="Background", power="Power Info.", @@ -1130,10 +1172,14 @@ local langList={ back="Back", },--langName added later help={ + staff="Staff", his="History", qq="Author's qq", back="Back", }, + staff={ + back="Back", + }, history={ prev="↑", next="↓", @@ -1179,7 +1225,7 @@ local langList={ {"Blind", "ALL", "For intermediate players."}, {"Blind", "SUDDEN", "For experienced players."}, {"Blind", "SUDDEN+", "For professionals."}, - {"Blind", "NOTHING", "For masters."}, + {"Blind", "", "R U Ready?"}, {"Classic", "CTWC", "High-speed classic mode."}, {"Survivor", "EASY", "How long can you survive?"}, {"Survivor", "NORMAL", "How long can you survive?"}, @@ -1217,7 +1263,7 @@ local langList={ {"Infinite: Dig", "", "Dig, dig, dig."}, {"Custom", "NORMAL", "Draw something then clear it!!"}, {"Custom", "PUZZLE", "Draw something then stack it!!"}, - {"Sprint", "Pentomino", "???"}, + {"Sprint", "Pentomino", "Puzzle-18"}, }, }, { @@ -1355,21 +1401,31 @@ local langList={ "#<>#/<>:", }, help={ - "?↓↓↓?? ?", + "□□□□~~~, ?_?x ?", "□!!~~~,□□□□X", "□!!==*/*/*/*~", "", - "Made with LOVE2D", - "Author: MrZ E-mail: 1046101471@qq.com", - "Program: MrZ Art: MrZ Music: MrZ SFX: MrZ Voice: MrZ/Miya", - "Special thanks to Flyz, Farter, 196, Teatube, [all testers] and you!", - "", "bug reports/suggestions, sent to the author's testing group or email ~", "This is a free download available only through discord.gg/f9pUvkh", "The game downloaded from other sources may contain viruses,", "and only vibration & networking permissions are needed for mobile versions!", "The author is not responsible for any losses from modifying the game.", }, + staff={ + "Author: MrZ E-mail: 1046101471@qq.com", + "", + "Powered by LOVE2D", + "", + "Program: MrZ, (FinnTenzor)", + "Art: MrZ, (Gnyar)", + "Music: MrZ, (T0722)", + "Sound: MrZ", + "Voice: Miya, (MrZ)", + "", + "Secial Thanks:", + "Flyz, Farter, 蕴空之灵,", + "Teatube, [All test staff]", + }, used="Tool used:\n\tBeepbox\n\tGFIE\n\tGoldwave\nLib used:\n\tCold_Clear[MinusKelvin]\n\tsimple-love-lights[dylhunn]", support="Support author", group="Official QQ Group(if not hacked):822023725", @@ -1457,6 +1513,7 @@ local langList={ atkFX="→→~", frame="|=|", text="ABC", + warn="!↑↑↑!", fullscreen="|←→|", bg="__?__", power="+.", @@ -1529,10 +1586,14 @@ local langList={ back="X", },--langName added later help={ + staff="Orz", his="_&_", qq="_@_", back="X", }, + staff={ + back="X", + }, history={ prev="↑", next="↓", @@ -1578,7 +1639,7 @@ local langList={ {"Blind", "ALL", "For intermediate players."}, {"Blind", "SUDDEN", "For experienced players."}, {"Blind", "SUDDEN+", "For professionals."}, - {"Blind", "NOTHING", "For masters."}, + {"Blind", "", "R U Ready?"}, {"Classic", "CTWC", "High-speed classic mode."}, {"Survivor", "EASY", "How long can you survive?"}, {"Survivor", "NORMAL", "How long can you survive?"}, @@ -1616,7 +1677,7 @@ local langList={ {"Infinite: Dig", "", "Dig, dig, dig."}, {"Custom", "NORMAL", "Draw something then clear it!!"}, {"Custom", "PUZZLE", "Draw something then stack it!!"}, - {"Sprint", "Pentomino", "???"}, + {"Sprint", "Pentomino", "Puzzle-18"}, }, }, } diff --git a/parts/light.lua b/parts/light.lua index 18393192..06847732 100644 --- a/parts/light.lua +++ b/parts/light.lua @@ -3,8 +3,8 @@ --https://github.com/mattdesl/lwjgl-basics/wiki/2D-Pixel-Perfect-Shadows local gc=love.graphics local C=gc.clear -local shadowMapShader=gc.newShader("shader/shadowMap.cs")--Shader for caculating the 1D shadow map. -local lightRenderShader=gc.newShader("shader/lightRender.cs")--Shader for rendering blurred lights and shadows. +local shadowMapShader=gc.newShader("shader/shadowMap.glsl")--Shader for caculating the 1D shadow map. +local lightRenderShader=gc.newShader("shader/lightRender.glsl")--Shader for rendering blurred lights and shadows. local Lights={}--Lightsource objects local function move(L,x,y) L.x,L.y=x,y diff --git a/parts/list.lua b/parts/list.lua index 21b1dbc5..73dd023f 100644 --- a/parts/list.lua +++ b/parts/list.lua @@ -20,7 +20,7 @@ customRange={ target={10,20,40,100,200,500,1000,1e99}, freshLimit={0,8,15,1e99}, opponent={0,1,2,3,4,5,11,12,13,14,15,16}, - bg={"none","game1","game2","game3","strap","rgb","glow","matrix"}, + bg={"none","game1","game2","game3","strap","aura","rgb","glow","matrix"}, bgm={"blank","way","race","newera","push","reason","infinite","secret7th","secret8th","rockblock"}, } snapLevelValue={1,10,20,40,60,80} \ No newline at end of file diff --git a/parts/shader.lua b/parts/shader.lua index a73ab1a7..f4f2343f 100644 --- a/parts/shader.lua +++ b/parts/shader.lua @@ -1,5 +1,12 @@ -local gc=love.graphics +local function N(file) + return love.graphics.newShader("shader/"..file..".glsl") +end return{ -- glow=gc.newShader("shader/glow.cs"), - alpha=gc.newShader("shader/alpha.cs"), + alpha=N("alpha"), + warning=N("warning"), + + rainbow=N("rainbow"), + strap=N("strap"), + aura=N("aura"), } \ No newline at end of file diff --git a/parts/text.lua b/parts/text.lua index 51db7689..b69d68c6 100644 --- a/parts/text.lua +++ b/parts/text.lua @@ -83,7 +83,7 @@ function TEXT.getText(text,x,y,font,style,spd,stop) font=font or 40, spd=(spd or 1)/60, stop=stop, - draw=textFX[style]or error("unavailable type:"..style), + draw=textFX[style]or assert(false,"unavailable type:"..style), } end--another version of TEXT() function TEXT.show(text,x,y,font,style,spd,stop) @@ -95,7 +95,7 @@ function TEXT.show(text,x,y,font,style,spd,stop) font=font or 40, --font spd=(spd or 1)/60, --timing speed(1=last 1 sec) stop=stop, --stop time(sustained text) - draw=textFX[style]or error("unavailable type:"..style), --draw method + draw=textFX[style]or assert(false,"unavailable type:"..style), --draw method } end function TEXT.update(list) diff --git a/player.lua b/player.lua index 9d9b37ae..9615b76d 100644 --- a/player.lua +++ b/player.lua @@ -57,7 +57,6 @@ local spinSCR={--[blockName][row] --B2BMUL:1.2/2.0 --Techrash:1K;MUL:1.3/1.8 --Mini*=.6 -local visible_opt={show=1e99,time=300,fast=20,none=0} local reAtk={0,0,1,1,1,2,2,3,3} local reDef={0,1,1,2,3,3,4,4,5} local scs=require("parts/spinCenters") @@ -153,6 +152,11 @@ local clear_n={"clear_1","clear_2","clear_3","clear_4","clear_4"} local ren_n={}for i=1,11 do ren_n[i]="ren_"..i end ---------------------------------------------------- +---------------------------------------------------- +local player={} +local PLY={} +---------------------------------------------------- + ---------------------------------------------------- local function updateFXs(P,dt) if P.stat.score>P.score1 then @@ -162,7 +166,7 @@ local function updateFXs(P,dt) P.score1=int(min(P.score1*.9+P.stat.score*.1+1)) end end - + for i=#P.lockFX,1,-1 do local S=P.lockFX[i] S[3]=S[3]+S[4]*dt @@ -844,9 +848,8 @@ local function Pdraw_demo(P) gc.pop() end ---------------------------------------------------- -player={}local player=player + ---------------------------------------------------- -local textFX=textFX function player.showText(P,text,dx,dy,font,style,spd,stop) if P.gameEnv.text then P.bonus[#P.bonus+1]=TEXT.getText(text,150+dx,300+dy,font*P.size,style,spd,stop) @@ -1543,7 +1546,7 @@ function player.drop(P)--Place piece sendTime=60 atk=cc end - P.b2b=P.b2b+cc*80-300 + P.b2b=P.b2b+cc*80-220 P.lastClear=P.cur.name*10+cc else if not clear then @@ -1823,11 +1826,6 @@ function player.die(P)--Same thing when win/lose,not really die! end end end -function player.reach_winCheck(P) - if P.stat.row>=P.gameEnv.target then - P:win("finish") - end -end function player.win(P,result) P:die() P.result="WIN" @@ -1843,7 +1841,6 @@ function player.win(P,result) BGM.play("8-bit happiness") end end - TASK.new(tickEvent.finish,P) if curMode.id=="custom_puzzle"then P:showTextF(text.win,0,0,90,"beat",.4) else @@ -1852,6 +1849,7 @@ function player.win(P,result) if P.human then gameOver() end + TASK.new(tickEvent.finish,P) end function player.lose(P) if P.life>0 then @@ -1920,14 +1918,18 @@ function player.lose(P) SFX.play("fail") VOC.play("lose") if modeEnv.royaleMode then BGM.play("end")end + gameOver() + TASK.new(#players>1 and tickEvent.lose or tickEvent.finish,P) end if #players.alive==1 then players.alive[1]:win() end - if #players==1 or(P.human and not players[2].human)then - gameOver() +end + +function PLY.reach_winCheck(P) + if P.stat.row>=P.gameEnv.target then + P:win("finish") end - TASK.new(#players>1 and tickEvent.lose or tickEvent.finish,P) end --------------------------<\Events>-------------------------- @@ -2178,135 +2180,36 @@ T={ ---------------------------------------------------- ---------------------------------------------------- ---- 从当前的modeEnv setting和默认配置中读取GameEnv --- @param P 玩家 -function player.loadGameEnv(P) - P.gameEnv={}--Current game setting environment - local ENV=P.gameEnv - for k,v in next,gameEnv0 do - if modeEnv[k]~=nil then - v=modeEnv[k] - elseif setting[k]~=nil then - v=setting[k] - end - ENV[k]=v - end--load game settings -end - ---- 整理GameEnv中部分未完成的参数 --- @param P 玩家 -function player.marshalGameEnv(P) - local ENV=P.gameEnv - ENV.das=max(ENV.das,ENV.mindas) - ENV.arr=max(ENV.arr,ENV.minarr) - ENV.sdarr=max(ENV.sdarr,ENV.minsdarr) - - ENV.next=min(ENV.next,setting.maxNext) - - if ENV.sequence~="bag"then - ENV.bagLine=false - else - ENV.bagLen=#ENV.bag - end - - if ENV.lockFX==0 then ENV.lockFX=nil end - if ENV.dropFX==0 then ENV.dropFX=nil end - if ENV.clearFX==0 then ENV.clearFX=nil end - if ENV.shakeFX==0 then ENV.shakeFX=nil end -end - ---- 把部分GameEnv参数写入到Player中 --- 该函数会写入Player的 dropDelay lockDelay color showTime keepVisible --- @param P 玩家 -function player.applyGameEnv(P) - local ENV=P.gameEnv - P.dropDelay,P.lockDelay=ENV.drop,ENV.lock - - P.color={} - for _=1,7 do - P.color[_]=SKIN.libColor[ENV.skin[_]] - end - - P.showTime=visible_opt[ENV.visible] - P.keepVisible=ENV.visible=="show" -end - ---- 调用freshPrepare并设置newNext --- @param P 玩家 -function player.prepareSequence(P) - local ENV=P.gameEnv - if type(ENV.sequence)=="string"then - freshPrepare[ENV.sequence](P) - P.newNext=freshMethod[ENV.sequence] - else - assert(type(ENV.sequence)=="function"and type(ENV.freshMethod)=="function","wrong sequence generator code") - ENV.sequence(P) - P.newNext=ENV.freshMethod - end -end - ---- 加载AI参数 --- @param P 玩家 --- @param AIdata AI参数 -function player.loadAI(P, AIdata) - local ENV=P.gameEnv - P.AI_mode=AIdata.type - P.AI_stage=1 - P.AI_needFresh=false - P.AI_keys={} - P.AI_delay=AIdata.delay or min(int(ENV.drop*.8),2*AIdata.delta) - P.AI_delay0=AIdata.delta - P.AIdata={ - next=AIdata.next, - hold=AIdata.hold, - _20G=ENV._20G, - bag=AIdata.bag=="bag", - node=AIdata.node, - } - if not BOT then P.AI_mode="9S"end - if P.AI_mode=="CC"then - P.RS=kickList.AIRS - local opt,wei=BOT.getConf() - BOT.setHold(opt,P.AIdata.hold) - BOT.set20G(opt,P.AIdata._20G) - BOT.setBag(opt,P.AIdata.bag) - BOT.setNode(opt,P.AIdata.node) - P.AI_bot=BOT.new(opt,wei) - BOT.free(opt)BOT.free(wei) - for i=1,AIdata.next do - BOT.addNext(P.AI_bot,CCblockID[P.next[i].id]) - end - elseif P.AI_mode=="9S"then - P.RS=kickList.TRS - end -end - ---- 空Player --- 创建出来的Player不能直接用 仅包含所有Player的通用参数 --- @params int id --- @params int x --- @params int y --- @params float size 缩放比例 --- @params actions 操作序列 -local function newEmptyPlayer(id, x, y, size) +local function newEmptyPlayer(id,x,y,size) local P={id=id} players[id]=P - P.life=0 - --inherit functions of player class - 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 or 1 - --for shake FX - P.fieldOff={x=0,y=0,vx=0,vy=0} - P.small=false -- - P.keyRec=false--if calculate keySpeed - P.centerX,P.centerY=P.x+300*P.size,P.y+370*P.size - P.absFieldX=P.x+150*P.size - P.absFieldY=P.y+60*P.size - P.draw=Pdraw_norm + P.fieldOff={x=0,y=0,vx=0,vy=0}--for shake FX + P.x,P.y,P.size=x,y,size or 1 + + P.small=P.size<.1--if draw in small mode + if P.small then + P.centerX,P.centerY=P.x+300*P.size,P.y+600*P.size + P.canvas=love.graphics.newCanvas(60,120) + P.frameWait=rnd(30,120) + P.draw=Pdraw_small + else + P.keyRec=true--if calculate keySpeed + P.centerX,P.centerY=P.x+300*P.size,P.y+370*P.size + P.absFieldX=P.x+150*P.size + P.absFieldY=P.y+60*P.size + P.draw=Pdraw_norm + P.bonus={}--text objects + end P.update=Pupdate_alive + --inherit functions of player class + for k,v in next,player do P[k]=v end + + P.small=false + P.keyRec=false--if calculate keySpeed + P.life=0 P.alive=true P.control=false P.timing=false @@ -2321,14 +2224,11 @@ local function newEmptyPlayer(id, x, y, size) P.field,P.visTime={},{} P.atkBuffer={sum=0} + --Royale-related P.badge,P.strength=0,0 P.atkMode,P.swappingAtkMode=1,20 P.atker,P.atking,P.lastRecv={} - --Royale-related - -- loadGameEnv - -- marshalGameEnv - -- applyGameEnv 以下这些参数在applyGameEnv调用时被初始化 P.dropDelay,P.lockDelay=0,0 P.color={} P.showTime=nil @@ -2370,13 +2270,98 @@ local function newEmptyPlayer(id, x, y, size) return P end ---- 游戏开场画面的Demo玩家 --- @params int id --- @params int x --- @params int y --- @params float size 缩放比例 -function newDemoPlayer(id,x,y,size) - local P = newEmptyPlayer(id, x, y, size) +local function loadGameEnv(P)--load gameEnv + P.gameEnv={}--Current game setting environment + local ENV=P.gameEnv + for k,v in next,gameEnv0 do + if modeEnv[k]~=nil then + v=modeEnv[k] + elseif setting[k]~=nil then + v=setting[k] + end + ENV[k]=v + end--load game settings +end +local function applyGameEnv(P)--finish gameEnv processing + local ENV=P.gameEnv + + P.dropDelay=ENV.drop + P.lockDelay=ENV.lock + + P.color={} + for _=1,7 do + P.color[_]=SKIN.libColor[ENV.skin[_]] + end + + P.keepVisible=ENV.visible=="show" + P.showTime= + ENV.visible=="show"and 1e99 or + ENV.visible=="time"and 300 or + ENV.visible=="fast"and 20 or + ENV.visible=="none"and 0 + + ENV.das=max(ENV.das,ENV.mindas) + ENV.arr=max(ENV.arr,ENV.minarr) + ENV.sdarr=max(ENV.sdarr,ENV.minsdarr) + ENV.next=min(ENV.next,setting.maxNext) + + if ENV.sequence~="bag"then + ENV.bagLine=false + else + ENV.bagLen=#ENV.bag + end + + if ENV.lockFX==0 then ENV.lockFX=nil end + if ENV.dropFX==0 then ENV.dropFX=nil end + if ENV.clearFX==0 then ENV.clearFX=nil end + if ENV.shakeFX==0 then ENV.shakeFX=nil end +end +local function prepareSequence(P)--call freshPrepare and set newNext + local ENV=P.gameEnv + if type(ENV.sequence)=="string"then + freshPrepare[ENV.sequence](P) + P.newNext=freshMethod[ENV.sequence] + else + assert(type(ENV.sequence)=="function"and type(ENV.freshMethod)=="function","wrong sequence generator code") + ENV.sequence(P) + P.newNext=ENV.freshMethod + end +end +local function loadAI(P,AIdata)--load AI params + local ENV=P.gameEnv + P.AI_mode=AIdata.type + P.AI_stage=1 + P.AI_needFresh=false + P.AI_keys={} + P.AI_delay=AIdata.delay or min(int(ENV.drop*.8),2*AIdata.delta) + P.AI_delay0=AIdata.delta + P.AIdata={ + next=AIdata.next, + hold=AIdata.hold, + _20G=ENV._20G, + bag=AIdata.bag=="bag", + node=AIdata.node, + } + if not BOT then P.AI_mode="9S"end + if P.AI_mode=="CC"then + P.RS=kickList.AIRS + local opt,wei=BOT.getConf() + BOT.setHold(opt,P.AIdata.hold) + BOT.set20G(opt,P.AIdata._20G) + BOT.setBag(opt,P.AIdata.bag) + BOT.setNode(opt,P.AIdata.node) + P.AI_bot=BOT.new(opt,wei) + BOT.free(opt)BOT.free(wei) + for i=1,AIdata.next do + BOT.addNext(P.AI_bot,CCblockID[P.next[i].id]) + end + elseif P.AI_mode=="9S"then + P.RS=kickList.TRS + end +end + +function PLY.newDemoPlayer(id,x,y,size) + local P=newEmptyPlayer(id,x,y,size) P.life=1e99 -- rewrite draw arguments @@ -2388,11 +2373,7 @@ function newDemoPlayer(id,x,y,size) P.draw=Pdraw_demo P.update=Pupdate_alive - P.control = true - -- clear key time and drop time - -- maybe not necessary - P.keyTime={} - P.dropTime={} + P.control=true P.atker={}P.strength=0 @@ -2429,23 +2410,18 @@ function newDemoPlayer(id,x,y,size) target=1e99,dropPiece=NULL, mindas=0,minarr=0,minsdarr=0, } + applyGameEnv(P) - -- no loadGameEnv - P:marshalGameEnv() - P:applyGameEnv() - - -- rewrite some arguments P.dropDelay,P.lockDelay=1e99,1e99 - -- P.color is set at applyGameEnv P.showTime=1e99 P.keepVisible=true - -- use "bag" manually instead of prepareSequence + --always use "bag" freshPrepare.bag(P) P.newNext=freshMethod.bag P.human=false - P:loadAI({ + loadAI(P,{ type="CC", next=5, hold=true, @@ -2457,100 +2433,48 @@ function newDemoPlayer(id,x,y,size) P:popNext() end ---- 远程玩家 即多人联机游戏时的其他玩家 --- @params int id --- @params int x --- @params int y --- @params float size 缩放比例 --- @params actions 操作序列 -function newRemotePlayer(id, x, y, size, actions) - local P = newEmptyPlayer(id, x, y, size) +function PLY.newRemotePlayer(id,x,y,size,actions) + local P=newEmptyPlayer(id,x,y,size) - P.human = false -- 录像不是人为操作 - P.remote = true -- 远程操作 + P.human=false -- 录像不是人为操作 + P.remote=true -- 远程操作 -- 开发中 - -- P.updateAction = buildActionFunctionFromActions(P, actions) + -- P.updateAction=buildActionFunctionFromActions(P, actions) - P:loadGameEnv() - P:marshalGameEnv() - P:applyGameEnv() - P:prepareSequence() + loadGameEnv(P) + applyGameEnv(P) + prepareSequence(P) end ---- AI玩家 (bot) --- @params int id --- @params int x --- @params int y --- @params float size 缩放比例 --- @params AIdata size AI参数 -function newAIPlayer(id,x,y,size,AIdata) - local P = newEmptyPlayer(id, x, y, size) - - -- rewrite draw arguments - P.small=P.size<.1--if draw in small mode - if P.small then - P.centerX,P.centerY=P.x+300*P.size,P.y+600*P.size - P.canvas=love.graphics.newCanvas(60,120) - P.frameWait=rnd(30,120) - P.draw=Pdraw_small - else - P.keyRec=true--if calculate keySpeed - P.centerX,P.centerY=P.x+300*P.size,P.y+370*P.size - P.absFieldX=P.x+150*P.size - P.absFieldY=P.y+60*P.size - P.draw=Pdraw_norm - P.dust=clearDust:clone() - P.dust:start() - P.bonus={}--texts - end - P.update=Pupdate_alive - - P:loadGameEnv() - P:marshalGameEnv() - P:applyGameEnv() - P:prepareSequence() - - local ENV = P.gameEnv - ENV.face={0,0,0,0,0,0,0} - ENV.skin={1,5,8,2,10,3,7} - P.human=false - P:loadAI(AIdata) +function PLY.newAIPlayer(id,x,y,size,AIdata) + local P=newEmptyPlayer(id,x,y,size) if P.small then ENV.text=false ENV.lockFX=nil ENV.dropFX=nil ENV.shakeFX=nil - else - if ENV.lockFX==0 then ENV.lockFX=nil end - if ENV.dropFX==0 then ENV.dropFX=nil end - if ENV.clearFX==0 then ENV.clearFX=nil end - if ENV.shakeFX==0 then ENV.shakeFX=nil end end + loadGameEnv(P) + applyGameEnv(P) + prepareSequence(P) + + local ENV=P.gameEnv + ENV.face={0,0,0,0,0,0,0} + ENV.skin={1,5,8,2,10,3,7} + P.human=false + loadAI(P,AIdata) end ---- 普通玩家 --- @params int id --- @params int x --- @params int y --- @params float size 缩放比例 -function newPlayer(id,x,y,size) - local P = newEmptyPlayer(id, x, y, size) +function PLY.newPlayer(id,x,y,size) + local P=newEmptyPlayer(id,x,y,size) - P:loadGameEnv() - P:marshalGameEnv() - P:applyGameEnv() - P:prepareSequence() - - P.small=false -- - P.keyRec=true--if calculate keySpeed - P.centerX,P.centerY=P.x+300*P.size,P.y+370*P.size - P.absFieldX=P.x+150*P.size - P.absFieldY=P.y+60*P.size - P.draw=Pdraw_norm - P.update=Pupdate_alive + loadGameEnv(P) + applyGameEnv(P) + prepareSequence(P) P.human=true P.RS=kickList.TRS players.human=players.human+1 end ----------------------------------------------------- \ No newline at end of file +---------------------------------------------------- +return PLY \ No newline at end of file diff --git a/scene.lua b/scene.lua index 93623feb..7312f353 100644 --- a/scene.lua +++ b/scene.lua @@ -15,235 +15,244 @@ local SCN={ }, seq={"quit","slowFade"},--Back sequence }--scene datas,returned -local sceneInit={ - quit=love.event.quit, - load=function() - sceneTemp={ - phase=1,--Loading stage - cur=1,--Counter - tar=#VOC.name,--Loading bar lenth(current) - tip=require("parts/getTip"), - list={ - #VOC.name, - #BGM.list, - #SFX.list, - IMG.getCount(), - #modes, - 1, - }, - skip=false,--if skipping - } - end, - intro=function() - BG.set("space") - sceneTemp=0--animation timer - BGM.play("blank") - end, - main=function() - BG.set("space") - BGM.play("blank") - destroyPlayers() - modeEnv={} - if not players[1]then - newDemoPlayer(1,900,35,1.1) - end--create demo player - end, - music=function() - if BGM.nowPlay then - for i=1,BGM.len do - if BGM.list[i]==BGM.nowPlay then - sceneTemp=i--music select - return - end + +local sceneInit={} +sceneInit.quit=love.event.quit +function sceneInit.load() + sceneTemp={ + phase=1,--Loading stage + cur=1,--Counter + tar=#VOC.name,--Loading bar lenth(current) + tip=require("parts/getTip"), + list={ + #VOC.name, + #BGM.list, + #SFX.list, + IMG.getCount(), + #modes, + 1, + }, + skip=false,--if skipping + } +end +function sceneInit.intro() + BG.set("space") + sceneTemp=0--animation timer + BGM.play("blank") +end +function sceneInit.main() + BG.set("space") + BGM.play("blank") + destroyPlayers() + modeEnv={} + if not players[1]then + PLY.newDemoPlayer(1,900,35,1.1) + end--create demo player +end +function sceneInit.music() + if BGM.nowPlay then + for i=1,BGM.len do + if BGM.list[i]==BGM.nowPlay then + sceneTemp=i--music select + return end - else - sceneTemp=1 end - end, - mode=function(org) - BG.set("space") - BGM.play("blank") - destroyPlayers() - local cam=mapCam - cam.zoomK=org=="main"and 5 or 1 - if cam.sel then - local M=modes[cam.sel] - cam.x,cam.y=M.x*cam.k+180,M.y*cam.k - cam.x1,cam.y1=cam.x,cam.y - end - end, - custom=function() - sceneTemp=1--option select - destroyPlayers() - BG.set(customRange.bg[customSel[12]]) - BGM.play(customRange.bgm[customSel[13]]) - end, - draw=function() - BG.set("space") - sceneTemp={ - sure=0, - pen=1, - x=1,y=1, - demo=false, - } - end, - play=function() - love.keyboard.setKeyRepeat(false) - restartCount=0 - if needResetGameData then - resetGameData() - needResetGameData=nil - end - BG.set(modeEnv.bg) - end, - pause=function(org) - if - org=="setting_game"or - org=="setting_video"or - org=="setting_sound" - then - TEXT.show(text.needRestart,640,440,50,"fly",.6) - end - local S=players[1].stat - sceneTemp={ - timer=org=="play"and 0 or 50, - list={ - toTime(S.time), - S.key.."/"..S.rotate.."/"..S.hold, - format("%d %.2fPPS",S.piece,S.piece/S.time), - format("%d(%d) %.2fLPM",S.row,S.dig,S.row/S.time*60), - format("%d(%d)",S.atk,S.digatk), - format("%d(%d-%d)",S.pend,S.recv,S.recv-S.pend), - format("%d/%d/%d/%d",S.clear_S[1],S.clear_S[2],S.clear_S[3],S.clear_S[4]), - format("(%d)/%d/%d/%d",S.spin_S[1],S.spin_S[2],S.spin_S[3],S.spin_S[4]), - format("%d(+%d)/%d(%d)",S.b2b,S.b3b,S.pc,S.hpc), - format("%d[%.2f%%]",S.extraPiece,100*max(1-S.extraRate/S.piece,0)), - }, + else + sceneTemp=1 + end +end +function sceneInit.mode(org) + BG.set("space") + BGM.play("blank") + destroyPlayers() + local cam=mapCam + cam.zoomK=org=="main"and 5 or 1 + if cam.sel then + local M=modes[cam.sel] + cam.x,cam.y=M.x*cam.k+180,M.y*cam.k + cam.x1,cam.y1=cam.x,cam.y + end +end +function sceneInit.custom() + sceneTemp=1--option select + destroyPlayers() + BG.set(customRange.bg[customSel[12]]) + BGM.play(customRange.bgm[customSel[13]]) +end +function sceneInit.draw() + BG.set("space") + sceneTemp={ + sure=0, + pen=1, + x=1,y=1, + demo=false, + } +end +function sceneInit.play() + love.keyboard.setKeyRepeat(false) + restartCount=0 + if needResetGameData then + resetGameData() + needResetGameData=nil + end + BG.set(modeEnv.bg) +end +function sceneInit.pause(org) + if + org=="setting_game"or + org=="setting_video"or + org=="setting_sound" + then + TEXT.show(text.needRestart,640,440,50,"fly",.6) + end + local S=players[1].stat + sceneTemp={ + timer=org=="play"and 0 or 50, + list={ + toTime(S.time), + S.key.."/"..S.rotate.."/"..S.hold, + format("%d %.2fPPS",S.piece,S.piece/S.time), + format("%d(%d) %.2fLPM",S.row,S.dig,S.row/S.time*60), + format("%d(%d)",S.atk,S.digatk), + format("%d(%d-%d)",S.pend,S.recv,S.recv-S.pend), + format("%d/%d/%d/%d",S.clear_S[1],S.clear_S[2],S.clear_S[3],S.clear_S[4]), + format("(%d)/%d/%d/%d",S.spin_S[1],S.spin_S[2],S.spin_S[3],S.spin_S[4]), + format("%d(+%d)/%d(%d)",S.b2b,S.b3b,S.pc,S.hpc), + format("%d[%.2f%%]",S.extraPiece,100*max(1-S.extraRate/S.piece,0)), + }, - --from right-down, 60 degree each - radar={ - (S.recv-S.pend+S.dig)/S.time*60,--DefPM - (S.recv-S.pend)/S.time*60, --OffPM - S.atk/S.time*60, --AtkPM - S.send/S.time*60, --SendPM - S.piece/S.time*24, --LinePM - S.dig/S.time*60, --DigPM - }, - val={1/80,1/40,1/60,1/60,1/100,1/40}, - timing=org=="play", - } - local _=sceneTemp - local A,B=_.radar,_.val - for i=1,6 do - B[i]=B[i]*A[i]if B[i]>1.26 then B[i]=1.26+(B[i]-1.26)*.26 end - end--normalize vals - for i=1,6 do - A[i]=format("%.2f",A[i])..text.radarData[i] - end - local f=1 - for i=1,6 do - if B[i]>.5 then f=2 end - if B[i]>1 then f=3 break end - end - if f==1 then _.color,f={.4,.9,.5},1.25 --Vegetable - elseif f==2 then _.color,f={.4,.7,.9},1 --Normal - elseif f==3 then _.color,f={1,.3,.3},.626 --Diao - end - A={ - 120*.5*f, 120*3^.5*.5*f, - 120*-.5*f, 120*3^.5*.5*f, - 120*-1*f, 120*0*f, - 120*-.5*f, 120*-3^.5*.5*f, - 120*.5*f, 120*-3^.5*.5*f, - 120*1*f, 120*0*f, - } - _.scale=f - _.standard=A + --from right-down, 60 degree each + radar={ + (S.recv-S.pend+S.dig)/S.time*60,--DefPM + (S.recv-S.pend)/S.time*60, --OffPM + S.atk/S.time*60, --AtkPM + S.send/S.time*60, --SendPM + S.piece/S.time*24, --LinePM + S.dig/S.time*60, --DigPM + }, + val={1/80,1/40,1/60,1/60,1/100,1/40}, + timing=org=="play", + } + local _=sceneTemp + local A,B=_.radar,_.val + for i=1,6 do + B[i]=B[i]*A[i]if B[i]>1.26 then B[i]=1.26+(B[i]-1.26)*.26 end + end--normalize vals + for i=1,6 do + A[i]=format("%.2f",A[i])..text.radarData[i] + end + local f=1 + for i=1,6 do + if B[i]>.5 then f=2 end + if B[i]>1 then f=3 break end + end + if f==1 then _.color,f={.4,.9,.5},1.25 --Vegetable + elseif f==2 then _.color,f={.4,.7,.9},1 --Normal + elseif f==3 then _.color,f={1,.3,.3},.626 --Diao + end + A={ + 120*.5*f, 120*3^.5*.5*f, + 120*-.5*f, 120*3^.5*.5*f, + 120*-1*f, 120*0*f, + 120*-.5*f, 120*-3^.5*.5*f, + 120*.5*f, 120*-3^.5*.5*f, + 120*1*f, 120*0*f, + } + _.scale=f + _.standard=A - for i=6,1,-1 do - B[2*i-1],B[2*i]=B[i]*A[2*i-1],B[i]*A[2*i] - end - _.val=B - end, - setting_game=function() - BG.set("space") - end, - setting_video=function() - BG.set("space") - end, - setting_sound=function() - sceneTemp={last=0,jump=0}--last sound time,animation count(10 to 0) - BG.set("space") - end, - setting_control=function() - sceneTemp={ - das=setting.das, - arr=setting.arr, - pos=0, - dir=1, - wait=30, + for i=6,1,-1 do + B[2*i-1],B[2*i]=B[i]*A[2*i-1],B[i]*A[2*i] + end + _.val=B +end +function sceneInit.setting_game() + BG.set("space") +end +function sceneInit.setting_video() + BG.set("space") +end +function sceneInit.setting_sound() + sceneTemp={last=0,jump=0}--last sound time,animation count(10 to 0) + BG.set("space") +end +function sceneInit.setting_control() + sceneTemp={ + das=setting.das, + arr=setting.arr, + pos=0, + dir=1, + wait=30, + } + BG.set("strap") +end +function sceneInit.setting_key() + sceneTemp={ + board=1, + kb=1,js=1, + kS=false,jS=false, + } +end +function sceneInit.setting_touch() + BG.set("game2") + sceneTemp={ + default=1, + snap=1, + sel=nil, + } +end +function sceneInit.setting_touchSwitch() + BG.set("matrix") +end +function sceneInit.help() + sceneTemp={ + pw=0, + } + BG.set("space") +end +function sceneInit.staff() + sceneTemp={ + time=0, + v=1, + } + BG.set("space") +end +function sceneInit.stat() + local S=stat + sceneTemp={ + 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, } - BG.set("strap") - end, - setting_key=function() - sceneTemp={ - board=1, - kb=1,js=1, - kS=false,jS=false, - } - end, - setting_touch=function() - BG.set("game2") - sceneTemp={ - default=1, - snap=1, - sel=nil, - } - end, - setting_touchSwitch=function() - BG.set("matrix") - end, - help=function() - sceneTemp={ - pw=0, - } - BG.set("space") - end, - stat=function() - local S=stat - sceneTemp={ - 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() - BG.set("strap") - sceneTemp={require("updateLog"),1}--scroll pos - end, - quit=function() - love.timer.sleep(.3) - love.event.quit() - end, -} + } + for i=1,11 do + sceneTemp.item[i]=text.stat[i].."\t"..sceneTemp.item[i] + end +end +function sceneInit.history() + BG.set("strap") + sceneTemp={require("updateLog"),1}--scroll pos +end +function sceneInit.quit() + love.timer.sleep(.3) + love.event.quit() +end + + local swap={ none={1,0,NULL}, flash={8,1,function()gc.clear(1,1,1)end}, diff --git a/shader/alpha.cs b/shader/alpha.cs deleted file mode 100644 index 4fd443c3..00000000 --- a/shader/alpha.cs +++ /dev/null @@ -1,5 +0,0 @@ -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/shader/alpha.glsl b/shader/alpha.glsl new file mode 100644 index 00000000..8da9a18f --- /dev/null +++ b/shader/alpha.glsl @@ -0,0 +1,4 @@ +extern float a; +vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){ + return vec4(1.,1.,1.,sign(Texel(text,pos).a)*a); +} \ No newline at end of file diff --git a/shader/aura.glsl b/shader/aura.glsl new file mode 100644 index 00000000..8b734477 --- /dev/null +++ b/shader/aura.glsl @@ -0,0 +1,42 @@ +#define PI 3.1415926535897932384626 +extern float w,h; +extern float t; +vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){ + float x=scr_pos.x/w; + float y=scr_pos.y/h; + float dx,dy; + vec3 V=vec3(0.); + + dx=0.5+cos(t*3.*0.26)*0.4-x; + dy=0.5-sin(t*3.*0.62)*0.4-y; + dx=sqrt(dx*dx+dy*dy); + V.r=V.r+smoothstep(1.26,0.,dx); + + dx=(0.5+cos(t*3.*0.32)*0.4)-x; + dy=(0.5-sin(t*3.*0.80)*0.4)-y; + dx=sqrt(dx*dx+dy*dy); + V.g=V.g+smoothstep(1.26,0.,dx); + + dx=(0.5-cos(t*3.*0.49)*0.4)-x; + dy=(0.5+sin(t*3.*0.18)*0.4)-y; + dx=sqrt(dx*dx+dy*dy); + V.b=V.b+smoothstep(1.26,0.,dx); + + dx=(0.5+cos(t*0.53)*0.4)-x; + dy=(0.5-sin(t*0.46)*0.4)-y; + dx=sqrt(dx*dx+dy*dy); + V.rg+=vec2(smoothstep(0.626,0.,dx)); + + dx=(0.5+cos(t*0.98)*0.4)-x; + dy=(0.5+sin(t*0.57)*0.4)-y; + dx=sqrt(dx*dx+dy*dy); + V.rb+=vec2(smoothstep(0.626,0.,dx)); + + dx=(0.5-cos(t*0.86)*0.4)-x; + dy=(0.5-sin(t*0.32)*0.4)-y; + dx=sqrt(dx*dx+dy*dy); + V.gb+=vec2(smoothstep(0.626,0.,dx)); + + dx=1.26*max(max(V.r,V.g),V.b); + return vec4(V/dx,1.); +} \ No newline at end of file diff --git a/shader/glow.cs b/shader/glow.cs deleted file mode 100644 index 5c5d8627..00000000 --- a/shader/glow.cs +++ /dev/null @@ -1,5 +0,0 @@ -extern float X;extern float Y;extern float W;extern float H; -vec4 effect(vec4 C,Image Tx,vec2 Tcd,vec2 Pcd){ - C[3]=min((Pcd.x-X)/W*.3+(Pcd.y-Y)/H*.1,.3)+.5; - return C; -} \ No newline at end of file diff --git a/shader/glow.glsl b/shader/glow.glsl new file mode 100644 index 00000000..4c3b9bf3 --- /dev/null +++ b/shader/glow.glsl @@ -0,0 +1,5 @@ +extern float X,Y,W,H; +vec4 effect(vec4 C,Image Tx,vec2 pos,vec2 scr_pos){ + C[3]=min((scr_pos.x-X)/W*0.3+(scr_pos.y-Y)/H*0.1,0.3)+0.5; + return C; +} \ No newline at end of file diff --git a/shader/lightRender.cs b/shader/lightRender.glsl similarity index 58% rename from shader/lightRender.cs rename to shader/lightRender.glsl index ddbbef3f..5eddc563 100644 --- a/shader/lightRender.cs +++ b/shader/lightRender.glsl @@ -1,4 +1,4 @@ -#define PI 3.14 +#define PI 3.14159 extern float xresolution; //sample from 1D vis-depth map float samp(vec2 coord,float r,Image u_texture){ @@ -7,22 +7,22 @@ float samp(vec2 coord,float r,Image u_texture){ vec4 effect(vec4 color,Image texture,vec2 texture_coords,vec2 screen_coords){ //cartesian to polar, y of 1D sample is always 0 vec2 norm=texture_coords.st*2.-1.; - float r=length(norm); vec2 tc=vec2((atan(norm.y,norm.x)+PI)/(2.*PI),0.); + float r=length(norm); //enlarge blur parameter by distance, light scattering simulation - float blur=(1./xresolution)*smoothstep(.3,1.,r); + float blur=(1./xresolution)*smoothstep(0.3,1.,r); //Simple Gaussian blur float sum=//brightness(0~1) - samp(vec2(tc.x-3.*blur,tc.y),r,texture)*.1 - +samp(vec2(tc.x-2.*blur,tc.y),r,texture)*.13 - +samp(vec2(tc.x-1.*blur,tc.y),r,texture)*.17 + samp(vec2(tc.x-3.*blur,tc.y),r,texture)*0.1 + +samp(vec2(tc.x-2.*blur,tc.y),r,texture)*0.13 + +samp(vec2(tc.x-1.*blur,tc.y),r,texture)*0.17 - +samp(tc,r,texture)*.2//The center tex coord,which gives us hard shadows. - +samp(vec2(tc.x+1.*blur,tc.y),r,texture)*.17 - +samp(vec2(tc.x+2.*blur,tc.y),r,texture)*.13 - +samp(vec2(tc.x+3.*blur,tc.y),r,texture)*.1; + +samp(tc,r,texture)*0.2//The center tex coord,which gives us hard shadows. + +samp(vec2(tc.x+1.*blur,tc.y),r,texture)*0.17 + +samp(vec2(tc.x+2.*blur,tc.y),r,texture)*0.13 + +samp(vec2(tc.x+3.*blur,tc.y),r,texture)*0.1; //Multiply the distance to get a soft fading return vec4(vec3(1.),sum*smoothstep(1.,0.,r)); diff --git a/shader/rainbow.glsl b/shader/rainbow.glsl new file mode 100644 index 00000000..da161cad --- /dev/null +++ b/shader/rainbow.glsl @@ -0,0 +1,15 @@ +#define PI 3.14159265 +extern float w,h; +extern float t; +vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){ + float x=scr_pos.x-w/2.; + float y=scr_pos.y-h/2.; + float a=(step(0.,x)*2.-1.)*PI+atan(y,x)+PI*0.5+t*0.626; + + return vec4( + color.r*(sin(a+PI*0./3.)*0.3+0.5), + color.g*(sin(a+PI*2./3.)*0.3+0.5), + color.b*(sin(a+PI*4./3.)*0.3+0.5), + 1. + ); +} \ No newline at end of file diff --git a/shader/shadowMap.cs b/shader/shadowMap.glsl similarity index 83% rename from shader/shadowMap.cs rename to shader/shadowMap.glsl index 302fe480..8150a6d3 100644 --- a/shader/shadowMap.cs +++ b/shader/shadowMap.glsl @@ -7,14 +7,14 @@ vec4 effect(vec4 color,Image texture,vec2 texture_coords,vec2 screen_coords){ // y/yresolution=distance to light source(0~1) vec2 norm=vec2(texture_coords.s,y/yresolution)*2.-1.; float theta=PI*1.5+norm.x*PI; - float r=(1.+norm.y)*.5; + float r=(1.+norm.y)*0.5; //sample from solid if( Texel(texture,( - vec2(-r*sin(theta),-r*cos(theta))*.5+.5//coord of solid sampling + vec2(-r*sin(theta),-r*cos(theta))*0.5+0.5//coord of solid sampling )) - .a>.1 + .a>0.1 )return vec4(vec3(y/yresolution),1.);//collision check, alpha>0.1 means transparent } return vec4(1.,1.,1.,1.);//return max distance 1 diff --git a/shader/strap.glsl b/shader/strap.glsl new file mode 100644 index 00000000..e62c1930 --- /dev/null +++ b/shader/strap.glsl @@ -0,0 +1,11 @@ +#define PI 3.14159265 +extern float t; +vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){ + float x=scr_pos.x/262.+t; + return vec4( + color.r*(sin(x+PI*0./3.)*0.3+0.5), + color.g*(sin(x+PI*2./3.)*0.3+0.5), + color.b*(sin(x+PI*4./3.)*0.3+0.5), + 1. + ); +} \ No newline at end of file diff --git a/shader/warning.glsl b/shader/warning.glsl new file mode 100644 index 00000000..2a96757e --- /dev/null +++ b/shader/warning.glsl @@ -0,0 +1,8 @@ +extern float w,h; +extern float level; +vec4 effect(vec4 color,Image text,vec2 pos,vec2 scr_pos){ + float dx=abs(scr_pos.x/w-0.5); + float dy=abs(scr_pos.y/h-0.5); + float a=(max(dx,dy)*2.-.626)*level; + return vec4(1.,0.,0.,a); +} \ No newline at end of file diff --git a/timer.lua b/timer.lua index 49cb1cd2..b953a21b 100644 --- a/timer.lua +++ b/timer.lua @@ -1,7 +1,7 @@ local gc=love.graphics local kb=love.keyboard local Timer=love.timer.getTime -local int,abs,rnd,max,min,sin=math.floor,math.abs,math.random,math.max,math.min,math.sin +local int,abs,rnd,max,min,sin,ln=math.floor,math.abs,math.random,math.max,math.min,math.sin,math.log local ins,rem=table.insert,table.remove local Tmr={} @@ -68,13 +68,13 @@ local function dumpTable(L) T=type(k) if T=="number"then k="["..k.."]=" elseif T=="string"then k=k.."=" - else error("Error data type!") + else assert(false,"Error data type!") end T=type(v) if T=="number"then v=tostring(v) elseif T=="string"then v="\""..v.."\"" elseif T=="table"then v=dumpTable(v) - else error("Error data type!") + else assert(false,"Error data type!") end s=s..k..v..",\n" end @@ -160,6 +160,7 @@ end function Tmr.play(dt) frame=frame+1 stat.time=stat.time+dt + local P1=players[1] for i=#FX_attack,1,-1 do local b=FX_attack[i] b.t=b.t+1 @@ -216,11 +217,11 @@ function Tmr.play(dt) end if restartCount>0 then restartCount=restartCount-1 end return - elseif players[1].keyPressing[10]then + elseif P1.keyPressing[10]then restartCount=restartCount+1 if restartCount>20 then TASK.clear("play") - mergeStat(stat,players[1].stat) + mergeStat(stat,P1.stat) resetGameData() return end @@ -237,6 +238,33 @@ function Tmr.play(dt) TEXT.show(text.marking,rnd(162,scr.w-162),rnd(126,scr.h-200),40,"mark",.626) end--mark 2s each 10s end + if P1.alive then + if frame%26==0 and setting.warn then + local F=P1.field + local M=#F + local height=0 + for x=3,8 do + for y=M,1,-1 do + if F[y][x]>0 then + if y>height then + height=y + end + break + end + end + end + game.warnLVL0=ln(height-15+P1.atkBuffer.sum*.8) + end + local M=game.warnLVL + if M0 then + M=max(M-.026,0) + end + game.warnLVL=M + elseif game.warnLVL>0 then + game.warnLVL=max(game.warnLVL-.026,0) + end end function Tmr.pause(dt) if not game.result then @@ -283,4 +311,13 @@ function Tmr.setting_control() end end end +function Tmr.staff(dt) + local S=sceneTemp + if kb.isDown("space","return")and S.v<6.26 then + S.v=S.v+.26 + elseif S.v>1 then + S.v=S.v-.26 + end + S.time=S.time+S.v*dt +end return Tmr \ No newline at end of file diff --git a/toolfunc.lua b/toolfunc.lua index f6bf6697..4488e0a6 100644 --- a/toolfunc.lua +++ b/toolfunc.lua @@ -17,13 +17,13 @@ function toTime(s) end end function mStr(s,x,y) - gc.printf(s,x-320,y,640,"center") + gc.printf(s,x-400,y,800,"center") end 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) +function mDraw(s,x,y,a,k) + gc.draw(s,x,y,a,k,nil,s:getWidth()*.5,s:getHeight()*.5) end function destroyPlayers() for i=#players,1,-1 do @@ -247,6 +247,8 @@ function resetPartGameData() pauseTime=0, pauseCount=0, garbageSpeed=1, + warnLVL0=0, + warnLVL=0, } frame=150-setting.reTime*15 destroyPlayers() @@ -280,6 +282,8 @@ function resetGameData() pauseTime=0,--Time paused pauseCount=0,--Pausing count garbageSpeed=1,--garbage timing speed + warnLVL0=0, + warnLVL=0, } frame=150-setting.reTime*15 destroyPlayers() diff --git a/updateLog.lua b/updateLog.lua index 35b05f77..77341d51 100644 --- a/updateLog.lua +++ b/updateLog.lua @@ -68,6 +68,7 @@ Future outlook: symmetry hidden mode: sound only reverb mode (often repeat a piece many times) + 4 keys limit per piece Other: mod system with: block hidden @@ -83,7 +84,6 @@ Future outlook: in-game document lang setting page dragging control - warning FX(Graphic) game recording new widgets (joystick etc.) custom sequence(TTT!) @@ -91,12 +91,30 @@ Future outlook: cool backgrounds more graphic FXs & 3D features & animations Encrypt source code (compile to byte code) + network game new AI: task-Z -0.8.22: Details Updated +0.8.22: Shader Update + new: + new background: aura (using shader) + new BGM: Far + X-spin added + visual effects for when the player is in danger + staff page added changed: + remake several backgrounds with shader, instead of image + kick-list of pentomino optimized + all backgounds fix screen correctly (maybe) won't show "open saving folder" button on mobile devices + wallkick of J/L-180° spin changed reset all settings + code: + player generator optimized by FinnTenzor + player system moduled + fixed: + rotating x do not fresh lock delay + error after reset skin/dir. in pentomino mode + some times error when any AI exists (wrong kickList code) 0.8.21: Bug Fixed changed: @@ -567,7 +585,7 @@ Future outlook: little game rule change bugs fixed(AI control error) -0.7.13: +0.7.13: new: Chinese game name: 方块研究所 SUPER COOL instant moving effect diff --git a/widgetList.lua b/widgetList.lua index 454bf79a..ae1e11f6 100644 --- a/widgetList.lua +++ b/widgetList.lua @@ -201,18 +201,19 @@ local widgetList={ shakeFX=newSlider(350,520,373,5,32,nil, SETval("shakeFX"), SETsto("shakeFX"), nil,"atkFX"), atkFX= newSlider(350,580,373,5,32,nil, SETval("atkFX"), SETsto("atkFX"), nil,"frame"), frame= newSlider(350,640,373,10,30,nil,function()return setting.frameMul>35 and setting.frameMul/10 or setting.frameMul/5-4 end,function(i)setting.frameMul=i<5 and 5*i+20 or 10*i end,nil,"text"), - text= newSwitch(1050,180,35,SETval("text"),SETrev("text"),nil,"fullscreen"), - fullscreen=newSwitch(1050,260,35,SETval("fullscreen"),function() + text= newSwitch(1050,180,35,SETval("text"),SETrev("text"),nil,"warn"), + warn= newSwitch(1050,260,35,SETval("warn"),SETrev("warn"),nil,"fullscreen"), + fullscreen=newSwitch(1050,340,35,SETval("fullscreen"),function() setting.fullscreen=not setting.fullscreen love.window.setFullscreen(setting.fullscreen) love.resize(love.graphics.getWidth(),love.graphics.getHeight()) end,nil,"bg"), - bg= newSwitch(1050,340,35,SETval("bg"),function() + bg= newSwitch(1050,420,35,SETval("bg"),function() BG.set("none") setting.bg=not setting.bg BG.set("space") end,nil,"power"), - power= newSwitch(1050,420,35,SETval("powerInfo"),function() + power= newSwitch(1050,500,35,SETval("powerInfo"),function() setting.powerInfo=not setting.powerInfo end,nil,"back"), back= newButton(1140,650,200,80,C.white,40,SCN.back,nil,"sound"), @@ -273,8 +274,16 @@ local widgetList={ --spin6=newButton(825,540,90,65,C.white,30,nextDir(6)),--cannot rotate O spin7= newButton(970,540,90,65,C.white,30,nextDir(7)), - skinR= newButton(200,640,220,80,C.lightPurple,35,function()setting.skin={1,5,8,2,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), + skinR= newButton(200,640,220,80,C.lightPurple,35,function() + setting.skin={1,5,8,2,10,3,7,1,5,5,1,8,2,10,3,7,10,7,8,2,8,2,1,5,3} + SFX.play("rotate") + end), + faceR= newButton(480,640,220,80,C.lightRed,35,function() + for i=1,25 do + setting.face[i]=0 + end + SFX.play("hold") + end), back= newButton(1140,650,200,80,C.white,40,SCN.back), }, setting_touch={ @@ -361,9 +370,13 @@ local widgetList={ back= newButton(640,600,200,80,C.white,40,SCN.back,nil,"chi"), }, help={ - 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,mobileHide,"his"), - back= newButton(640,600,200,80,C.white,40,SCN.back,nil,"qq"), + staff= newButton(980,500,150,80,C.white,32,function()SCN.push()SCN.swapTo("staff")end,nil,"his"), + his= newButton(1160,500,150,80,C.white,32,function()SCN.push()SCN.swapTo("history")end,nil,"qq"), + qq= newButton(980,600,150,80,C.white,32,function()love.system.openURL("tencent://message/?uin=1046101471&Site=&Menu=yes")end,mobileHide,"back"), + back= newButton(640,600,200,80,C.white,40,SCN.back,nil,"staff"), + }, + staff={ + back= newButton(1160,630,150,80,C.white,40,SCN.back), }, history={ prev= newButton(1155,170,180,180,C.white,65,pressKey("up"),function()return sceneTemp[2]==1 end),