From c35152cf6ef0373e64588f44e0429770a776e43f Mon Sep 17 00:00:00 2001 From: MrZ_26 Date: Tue, 4 Feb 2020 19:31:17 +0800 Subject: [PATCH] Alpha V0.7.7 --- SFX/blip_1.ogg | Bin 0 -> 8039 bytes SFX/blip_2.ogg | Bin 0 -> 13236 bytes SFX/emit.ogg | Bin 0 -> 7860 bytes call&sys.lua | 6 +- conf.lua | 2 +- gamefunc.lua | 80 ++++++----- image/block/1.png | Bin 6306 -> 6377 bytes image/mess/miniTitle.png | Bin 201 -> 0 bytes list.lua | 188 +++++++++++++------------ main.lua | 286 +++++++++++++++++++++++++++------------ paint.lua | 49 +++---- timer.lua | 7 +- toolfunc.lua | 9 +- 13 files changed, 388 insertions(+), 239 deletions(-) create mode 100644 SFX/blip_1.ogg create mode 100644 SFX/blip_2.ogg create mode 100644 SFX/emit.ogg delete mode 100644 image/mess/miniTitle.png diff --git a/SFX/blip_1.ogg b/SFX/blip_1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8fd85f488ed43ef5e7630b9f63c4c4f4448ae46d GIT binary patch literal 8039 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

8Ka}`=#q0$>;W|!!*0V$5)o5qumzrXU zML9|Qt7ibd9fsj{2!T~}#}=mj4ewwm+UNkY%y5r_0SeWzEJ)lv3L>YnW3u#q!+^^?AXY? zXK#?e++Q8rCp70r+soeX&zxztSKOqGGlY9>o+#8t2~EJTm=}auV_PB})IbKD2!LdN z+#GaJ>|w%2O2o?%&?tm%;cCOAL?dR``B#eB2<2YQZgt zMqbeVtU7$u!3tpbR}K@%(+|mvTrBUIU?H<$LWNJSTPe~ab0*k+_c}YSNSM{z2D9nb znCWm9l>T;94{el&c#9J|Q%6CQ!J!_zNt*fMw*OK(`XqCqIAteT2ovin z6V(w#Mu&Op+t9z9`S_fp29WF>z*%ayMmz(T$ikl^kiWq6AVPDC$t&noI2zfZ^uxu$ z;ME7ZoE$9pELx%bD2Z%pELv>{{D9U{e<__$&-;`VNsc-F?pWjH0SRn{*tfkdW53e zvm-gVe#QdWipc=OE(rViOMKSyi32zB6s1q>8o~w-fZf3XZ#?{#gNKg8-c(wJlNft& zd;N>|DM+hJ%WC7Azjf#GycHh2e^^nG|NNJ5wTvedUR|-Tnf|&xVyN^tfiVHOc!dy9 zm{+i3I`Vtt+SSO7P(MGqywQFMfGAAhz?>YMAMj=z3b?Xm9>5cm+Q#k%5_mE(E|ph}^)m2e0%& z6s}O9>cs;D&dg6MxYtAl=lQ5AXWJhiLFao zo$`%hXZ4d3_l!S4N3xMqLF?+1hk5`nVTKn3KDh}BEofJHc?CgCZo#<9{OROZYwmYf z3wwLTy)K02P|zC(j_H|??m48mxpS$>_v?b zi|xII3g4ZIaQ!$;SVGhBZ$+0Xe7cX%I{uz6OKhlEyJ%7uLk+lMC`HP^0KE*A>(a*8 zmdz(}e?5`QZrmN5ISnl!W@ixsSUYMx5;4?G4171gUF;+k8w@woFhe4NemGYIuvhiK z^VY!UZ|HiU*?ySbg={~MrsK#-c%*4t#K;1wVt zC$xC^Wkvl`n{fhRw3F5CDk&=kS!|K<9xXV-FTh%8_^O~>T{og4a_UG@t9Kf67gksp z5yfm322w3DnuRPpD~>lN@4oHT;>>;D6fW;fi2j(8c@ar>1NQQ6!Iu+JHv%J%MkEO9 zT$fhXJ}35hRuHYt-Ti5>PhfeYVvH=h`R@4P?)#fe_f1!f;FI+x--x0^Z_ZNF&$un@|37BIGzQCj*~buCAB!$le2t815e zu>is-m3v=qbmNtGH+sIkvs`JB(tP<~NAwP#_fhT_65J^@(TSUrHz$m?E`E8dcRFU{ z`EQjp1BrGmfxzNd`>N5Bs^Jr}=cnH0Y!#k4d+2kG%g-hf&a}T)Q2V#ufikw+&~;L4 zU*FZY<{fV}{Xf4{i^1us1RqzKy|M30@Qb9W(7_XrZk#Qs3+Q;8`R$2XO!eU5&M$q( ZMpkBh4ZvOy+NyD^<13)s(ZYr0{|9*Rh4%me literal 0 HcmV?d00001 diff --git a/SFX/emit.ogg b/SFX/emit.ogg new file mode 100644 index 0000000000000000000000000000000000000000..81c7fd4255eee128ebe9683d8be7da03887ff0f6 GIT binary patch literal 7860 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 literal 0 HcmV?d00001 diff --git a/call&sys.lua b/call&sys.lua index 8a68c5da..1fec9af4 100644 --- a/call&sys.lua +++ b/call&sys.lua @@ -88,7 +88,7 @@ function keyDown.mode(key) levelSel=levelSel+1 end elseif key=="return"then - loadGame(modeID[modeSel],levelSel) + loadGame(modeSel,levelSel) elseif key=="c"then gotoScene("custom") elseif key=="escape"then @@ -107,7 +107,7 @@ function keyDown.custom(key) elseif key=="up"then optSel=(optSel-2)%#customID+1 elseif key=="return"then - loadGame("custom",1) + loadGame(0,1) elseif key=="escape"then back() end @@ -185,7 +185,7 @@ function gamepadDown.mode(key) elseif key=="dpup"then if modeSel>1 then modeSel=modeSel-1 end elseif key=="start"then - loadGame(modeID[modeSel],levelSel) + loadGame(modeSel,levelSel) elseif key=="back"then back() end diff --git a/conf.lua b/conf.lua index a9977114..308fb0c3 100644 --- a/conf.lua +++ b/conf.lua @@ -9,7 +9,7 @@ function love.conf(t) t.audio.mixwithsystem=true--Switch on to keep sysBGM local W=t.window - W.title="Techmino V0.7.6" + W.title="Techmino V0.7.7" W.icon="/image/icon.png" W.width,W.height=1280,720 W.borderless=X diff --git a/gamefunc.lua b/gamefunc.lua index a7c50369..4da9a178 100644 --- a/gamefunc.lua +++ b/gamefunc.lua @@ -1,15 +1,17 @@ function loadGame(mode,level) --rec={} - gameMode,gameLevel=mode,level + print(mode) + curMode={id=modeID[mode],lv=level,modeName=modeName[mode],levelName=modeLevel[modeID[mode]][level]} gotoScene("play") end function resetGameData() frame=0 - pushSpeed,garbageSpeed=3,1 + garbageSpeed=1 + pushSpeed=3 players={alive={}} - modeEnv=defaultModeEnv[gameMode][gameLevel]or defaultModeEnv[gameMode][1] - loadmode[gameMode]() + modeEnv=defaultModeEnv[curMode.id][curMode.lv]or defaultModeEnv[curMode.id][1] + loadmode[curMode.id]() FX.beam={} for k,v in pairs(PTC.dust)do @@ -27,8 +29,8 @@ function resetGameData() end mostBadge,mostDangerous,secBadge,secDangerous=nil gameStage=1 - pushSpeed=2 garbageSpeed=.3 + pushSpeed=2 end for i=1,#virtualkey do virtualkey[i].press=false @@ -77,12 +79,12 @@ function createPlayer(id,x,y,size,AIspeed,data) P.control=false P.timing=false P.time=0 - P.cstat={key=0,piece=0,row=0,atk=0,techrash=0,pc=0}--Current gamestat + P.cstat={key=0,piece=0,row=0,atk=0,techrash=0,pc=0,event=0}--Current gamestat P.keyTime={}for i=1,10 do P.keyTime[i]=-1e5 end P.keySpeed=0 P.dropTime={}for i=1,10 do P.dropTime[i]=-1e5 end P.dropSpeed=0 - P.field,P.visTime,P.atkBuffer={},{},{} - + P.field,P.visTime={},{} + P.atkBuffer={sum=0} P.ko,P.badge,P.strength=0,0,0 P.atkMode,P.swappingAtkMode=1,20 @@ -151,11 +153,12 @@ function createPlayer(id,x,y,size,AIspeed,data) P.b2b=0 P.b2b1=0 + P.endCounter=0 P.counter=0 P.result=nil--string,"win"/"lose" P.task={} P.bonus={} -end +end function showText(P,text,type,font,dy,spd,inf) if not P.small then ins(P.bonus,{t=0,text=text,draw=FX[type],font=font,dy=dy or 0,speed=spd or 1,inf=inf}) @@ -233,47 +236,53 @@ function changeAtk(P,R) P.atking=nil end end -function freshRoyaleTarget() - mostBadge,secBadge,mostDangerous,secDangerous=nil - local h,b=0,0 +function freshMostBadge() + mostBadge,secBadge=nil + local m=0 for i=1,#players.alive do - if players.alive[i].badge>=h then + if players.alive[i].badge>=m then mostBadge,secBadge=players.alive[i],mostBadge - h=players[i].badge + m=players.alive[i].badge end - if #players.alive[i].field>=b then + end +end +function freshMostDangerous() + mostDangerous,secDangerous=nil + local m=0 + for i=1,#players.alive do + if #players.alive[i].field>=m then mostDangerous,secDangerous=players.alive[i],mostDangerous - b=#players.alive[i].field + m=#players.alive[i].field end end end function royaleLevelup() gameStage=gameStage+1 - local s + local spd if(gameStage==3 or gameStage>4)and players[1].alive then showText(players[1],#players.alive.." Players Remain","beat",50,-100,.3) end if gameStage==2 then - s=30 + spd=30 elseif gameStage==3 then - s=15 + spd=15 garbageSpeed=.6 BGM("cruelty") elseif gameStage==4 then - s=10 + spd=10 pushSpeed=3 elseif gameStage==5 then - s=5 + spd=5 garbageSpeed=1 elseif gameStage==6 then - s=3 + spd=3 BGM("final") end for i=1,#players.alive do local P=players.alive[i] - P.gameEnv.drop=s + P.gameEnv.drop=spd end - if gameLevel==5 and players[1].alive then + if curMode.lv==5 and players[1].alive then local P=players[1] P.gameEnv.drop=int(P.gameEnv.drop*.3) if P.gameEnv.drop==0 then @@ -393,7 +402,7 @@ function pressKey(i,p) end function releaseKey(i,p) p.keyPressing[i]=false - P.isKeyDown[i]=false + p.isKeyDown[i]=false -- if playmode=="recording"then ins(rec,{-i,frame})end end function spin(d,ifpre) @@ -581,7 +590,7 @@ function drop() if cc>0 then SFX(clear_n[cc]) SFX(ren_n[min(P.combo,11)]) - VIB(cc<3 and 1 or cc-1) + if P.id==1 then VIB(cc<3 and 1 or cc-1)end end P.b2b=max(min(P.b2b,600),0) @@ -617,13 +626,10 @@ function drop() csend=csend-1 end P.atkBuffer[1].amount=P.atkBuffer[1].amount-1 + P.atkBuffer.sum=P.atkBuffer.sum-1 if P.atkBuffer[1].amount==0 then rem(P.atkBuffer,1) end - if P.atkBuffer[1]and csend==0 then - local s=P.atkBuffer[1].amount - P.atkBuffer[1].lv=s<4 and 1 or s<7 and 2 or 3 - end end if csend>0 then if modeEnv.royaleMode then @@ -642,6 +648,7 @@ function drop() elseif #players.alive>1 then garbageSend(P,randomTarget(P),csend,sendTime) end + if P.id==1 and csend>3 then sysSFX("emit",min(csend,8)*.125)end end elseif cc==0 then if P.b2b>480 then @@ -676,11 +683,13 @@ function lock() end function garbageSend(S,R,send,time) local pos=rnd(10) - local level=send<4 and 1 or send<7 and 2 or 3 - createBeam(S,R,level) + createBeam(S,R,send<4 and 1 or send<7 and 2 or 3) R.lastRecv=S - if #R.atkBuffer<15 then - ins(R.atkBuffer,{pos,amount=send,countdown=time,cd0=time,time=0,sent=false,lv=level}) + if R.atkBuffer.sum<20 then + send=min(send,20-R.atkBuffer.sum) + R.atkBuffer.sum=R.atkBuffer.sum+send + ins(R.atkBuffer,{pos,amount=send,countdown=time,cd0=time,time=0,sent=false,lv=send<4 and 1 or send<7 and 2 or 3}) + if R.id==1 then sysSFX(send<4 and "blip_1"or"blip_2",min(send+1,5)*.1)end end end function garbageRelease() @@ -695,6 +704,7 @@ function garbageRelease() P.field[1][atk[k]]=0 end end + P.atkBuffer.sum=P.atkBuffer.sum-atk.amount atk.sent=true atk.time=0 P.fieldBeneath=P.fieldBeneath+atk.amount*30 @@ -755,7 +765,7 @@ act={ P.cy=P.y_img P.spinLast=false SFX("drop") - VIB(0) + if P.id==1 then VIB(0)end end drop() end diff --git a/image/block/1.png b/image/block/1.png index 80fb3e1378376be781327e15a20d5229e947aad3..5a26fd18bb20944684e513f9bc424c528b64ec03 100644 GIT binary patch delta 6376 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 XR%~?qY}_LZ00000NkvXXu0mjf!|dYv diff --git a/image/mess/miniTitle.png b/image/mess/miniTitle.png deleted file mode 100644 index aa07799a70847424774452336248b103f51ecadb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^Qb5ed!3HD^d3l_H6lZ})WHAE+w=f7ZGR&GI0TitE zba4!^IDIw5k?(*4$KoUZ>u1KQ6!IEHY*T&hIooM!graa-niE5V)_WO-HMZCPa^6ue zy7e(~?J0K&(Lj@BtG1<1F+I2Czx3Tx<#~U#HdMbpmu~rJ*BZB+MTbI71=r8{VsiHA xeC4LN-p888duLByck_i!ZoE5tlChZ`!?u{kcZ*NjzX3Xf!PC{xWt~$(695UgNHYKc diff --git a/list.lua b/list.lua index 93063ece..d928d91e 100644 --- a/list.lua +++ b/list.lua @@ -24,12 +24,12 @@ PClist={--ZSLJTOI {7,7,4,5},{7,7,6,4},{7,7,2,4},{7,7,1,3},{7,7,5,6},{7,7,5,2},{7,7,5,4},{7,7,5,3}, {7,4,1,2},{7,3,5,7},{7,5,4,3},{7,5,1,2},{7,1,4,2},{7,4,2,5},{7,6,4,5},{7,5,4,2}, {7,5,6,4},{7,5,3,6},{7,2,5,6},{7,2,6,4},{7,2,1,3},{7,5,2,7},{7,5,7,2},{7,5,2,3}, - {7,5,3,2},{7,6,4,5},{7,6,5,4},{7,3,1,5},{7,3,2,5},{7,4,1,5},{7,4,5,2},{7,7,3,6}, - {7,3,7,6},{7,3,6,2},{7,3,7,1},{7,6,4,2},{3,2,7,6},{3,2,6,7},{7,7,4,5},{7,5,3,4}, - {7,3,6,5},{7,3,2,5},{7,4,6,5},{7,6,4,5},{7,5,2,3},{7,3,5,7},{7,3,2,5},{7,3,5,1}, - {7,5,2,3},{3,6,2,5},{3,1,2,5},{3,1,1,5},{3,1,5,2},{3,1,5,1},{3,5,1,2},{4,5,3,2}, - {4,2,6,5},{6,5,3,2},{1,4,2,5},{1,5,3,6},{5,2,6,3},{5,2,1,3},{5,2,7,4},{2,4,1,5}, - {2,4,5,1},{2,1,4,5},{2,5,4,3},{2,5,6,7},{7,5,4,2}, + {7,5,3,2},{7,6,5,4},{7,3,1,5},{7,3,2,5},{7,4,1,5},{7,4,5,2},{7,7,3,6},{7,3,7,6}, + {7,3,6,2},{7,3,7,1},{7,6,4,2},{3,2,7,6},{3,2,6,7},{7,7,4,5},{7,5,3,4},{7,3,6,5}, + {7,3,2,5},{7,4,6,5},{7,5,2,3},{7,3,5,7},{7,3,2,5},{7,3,5,1},{7,5,2,3},{3,6,2,5}, + {3,1,2,5},{3,1,1,5},{3,1,5,2},{3,1,5,1},{3,5,1,2},{4,5,3,2},{4,2,6,5},{6,5,3,2}, + {1,4,2,5},{1,5,3,6},{5,2,6,3},{5,2,1,3},{5,2,7,4},{2,4,1,5},{2,4,5,1},{2,1,4,5}, + {2,5,4,3},{2,5,6,7},{7,5,4,2}, } color={ red={1,0,0}, @@ -68,7 +68,7 @@ attackColor={ gc.setColor(1,t,0) end, function(t) - gc.setColor(1,.3,.2+t*.8) + gc.setColor(1,.4,.3+t*.7) end, function(t) gc.setColor(.2+t*.8,.2+t*.8,1) @@ -104,7 +104,7 @@ for j=1,7 do spinName[0][j]=blockName[j].." spin" end -miniTitle_pixel={ +miniTitle_rect={ {2,0,5,1},{4,1,1,6}, {9,0,4,1},{9,3,4,1},{9,6,4,1},{8,0,1,7}, {15,0,3,1},{15,6,3,1},{14,0,1,7}, @@ -125,6 +125,7 @@ sfx={ "ren_1","ren_2","ren_3","ren_4","ren_5","ren_6","ren_7","ren_8","ren_9","ren_10","ren_11", "clear_1","clear_2","clear_3","clear_4", "spin_0","spin_1","spin_2","spin_3", + "emit","blip_1","blip_2", "perfectclear", } bgm={ @@ -146,7 +147,7 @@ prevMenu={ custom="mode", ready="mode", play=function() - gotoScene(gameMode~="custom"and"mode"or"custom") + gotoScene(curMode.id~="custom"and"mode"or"custom") end, help="main", stat="main", @@ -274,6 +275,12 @@ defaultModeEnv={ }, }, marathon={ + { + drop=1e99, + lock=1e99, + target=200, + reach=Event.marathon_reach, + }, { drop=60, fall=20, @@ -286,6 +293,16 @@ defaultModeEnv={ target=200, reach=Event.marathon_reach, }, + { + _20G=true, + drop=0, + lock=death_lock[1], + wait=death_wait[1], + fall=death_fall[1], + target=50, + reach=Event.marathon_reach_lunatic, + arr=1, + }, }, zen={ { @@ -305,18 +322,6 @@ defaultModeEnv={ solo={ {}, }, - death={ - { - _20G=true, - drop=0, - lock=death_lock[1], - wait=death_wait[1], - fall=death_fall[1], - target=50, - reach=Event.death_reach, - arr=1, - }, - }, tsd={ { oncehold=false, @@ -334,9 +339,9 @@ defaultModeEnv={ }, blind={ { - drop=1e99, - lock=1e99, - visible=0, + drop=30, + lock=60, + visible=2, }, { drop=15, @@ -350,6 +355,48 @@ defaultModeEnv={ visible=0, freshLimit=15, }, + { + _20G=true, + drop=0, + lock=15, + wait=10, + fall=15, + visible=0, + arr=1, + }, + }, + dig={ + { + drop=60, + lock=120, + fall=20, + }, + { + drop=10, + lock=30, + }, + }, + survivor={ + { + drop=60, + lock=120, + fall=30, + }, + { + drop=30, + lock=60, + fall=20, + }, + { + drop=10, + lock=20, + fall=15, + }, + { + drop=5, + lock=15, + fall=10, + }, }, sudden={ { @@ -369,13 +416,13 @@ defaultModeEnv={ drop=15, lock=60, target=0, - reach=Event.sudden_reach_HARD, + reach=Event.sudden_reach_hard, }, { drop=5, lock=20, target=0, - reach=Event.sudden_reach_HARD, + reach=Event.sudden_reach_hard, }, }, pctrain={ @@ -434,6 +481,7 @@ defaultModeEnv={ royaleMode=true, royalePowerup={2,5,10,20}, royaleRemain={30,20,15,10,5}, + pushSpeed=2, }, }, techmino99={ @@ -442,6 +490,7 @@ defaultModeEnv={ royaleMode=true, royalePowerup={2,6,14,30}, royaleRemain={75,50,35,20,10}, + pushSpeed=2, }, }, drought={ @@ -460,24 +509,7 @@ defaultModeEnv={ reach=Event.gameover.win, }, }, - gmroll={ - { - drop=0, - lock=15, - wait=10, - fall=15, - _20G=true, - visible=0, - arr=1, - }, - }, - p2={ - {}, - }, - p3={ - {}, - }, - p4={ + hotseat={ {}, }, custom={ @@ -488,23 +520,22 @@ defaultModeEnv={ } modeLevel={ sprint={"10L","20L","40L","100L","400L","1000L"}, - marathon={"NORMAL","LUNATIC"}, + marathon={"EASY","NORMAL","EXTRA","DEATH"}, zen={"NORMAL"}, infinite={"NORMAL"}, solo={"EASY","NORMAL","HARD","LUNATIC"}, - death={"LUNATIC"}, tsd={"NORMAL","HARD"}, - blind={"EASY","HARD","LUNATIC"}, + blind={"EASY","HARD","LUNATIC","GM"}, + dig={"NORMAL","LUNATIC"}, + survivor={"EASY","NORMAL","HARD","LUNATIC"}, sudden={"EASY","NORMAL","HARD","LUNATIC"}, pctrain={"HARD","LUNATIC"}, pcchallenge={"NORMAL","HARD","LUNATIC"}, - techmino41={"EASY","NORMAL","HARD","LUNATIC","HELL"}, - techmino99={"EASY","NORMAL","HARD","LUNATIC","HELL"}, + techmino41={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, + techmino99={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, drought={"NORMAL","MESS"}, - gmroll={"GM"}, - p2={"NORMAL"}, - p3={"NORMAL"}, - p4={"NORMAL"}, + hotseat={"2P","3P","4P",}, + custom={""}, } modeLevelColor={ EASY=color.cyan, @@ -515,7 +546,8 @@ modeLevelColor={ MESS=color.lightGrey, GM=color.blue, - HELL=color.grey, + ULTIMATE=color.lightYellow, + DEATH=color.lightRed, ["10L"]=color.cyan, ["20L"]=color.lightBlue, ["40L"]=color.green, @@ -524,32 +556,32 @@ modeLevelColor={ ["1000L"]=color.darkRed, } modeID={ - "sprint","marathon","zen","infinite","solo","death","tsd","blind","sudden", - "pctrain","pcchallenge","techmino41","techmino99","drought","gmroll","p2","p3","p4" + [0]="custom", + "sprint","marathon","zen","infinite","solo","tsd","blind","dig","survivor","sudden", + "pctrain","pcchallenge","techmino41","techmino99","drought","hotseat", } modeName={ - "Sprint","Marathon","Zen","Infinite","1v1","Death","TSD-only","Blind","Sudden", - "PC Train","PC Challenge","Techmino41","Techmino99","Drought","GM roll","2P","3P","4P" + [0]="Custom", + "Sprint","Marathon","Zen","Infinite","1v1","TSD-only","Blind","Dig","Survivor","Sudden", + "PC Train","PC Challenge","Techmino41","Techmino99","Drought","Hotseat", } modeInfo={ sprint="Speed run.", - marathon="Clear 200 Lines", + marathon="Survive and reach target", zen="Clear 200 Lines without gravity", infinite="Infinite game,infinite happiness", solo="Beat AI", - death="Survive under terrible speed", - tsd="try to make 20 T-spin-double", + tsd="Make more T-spin-doubles", blind="Invisible board", - sudden="Try to survive", + dig="Downstack!", + survivor="Hand them!", + sudden="Techniques practice", pctrain="Let's learn some PCs", pcchallenge="Make PCs in 100 Lines", techmino41="Melee fight with 40 AIs", techmino99="Melee fight with 98 AIs", drought="ERRSEQ flood attack", - gmroll="Who want to be the grand master?", - p2="2 players game", - p3="3 players game", - p4="4 players game", + hotseat="", } freshMethod={ @@ -579,21 +611,7 @@ freshMethod={ end, function() P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1) - if P.cstat.piece%4==0 then - local r=rnd(#PClist) - local P=players[1] - local f=P.cstat.pc%2==0 - for i=1,4 do - local b=PClist[r][i] - if f then - if b<3 then b=3-b - elseif b<5 then b=7-b - end - end - ins(P.nxt,b) - ins(P.nb,blocks[b][0]) - end - end + --generate in newPC end, function() P.bn,P.cb=rem(P.nxt,1),rem(P.nb,1) @@ -701,14 +719,14 @@ Buttons={ {x=250,y=360,w=350,h=100,rgb=color.blue,f=50,t="Settings",code=function()gotoScene("setting")end,up=1,down=3}, {x=160,y=470,w=170,h=100,rgb=color.yellow,f=50,t="Help",code=function()gotoScene("help")end,up=2,down=5,right=4}, {x=340,y=470,w=170,h=100,rgb=color.cyan,f=40,t="Statistics",code=function()gotoScene("stat")end,up=2,down=5,left=3}, - {x=250,y=580,w=350,h=100,rgb=color.grey,f=40,t="Quit",code=back,up=3}, + {x=250,y=580,w=350,h=100,rgb=color.grey,f=40,t="Quit",code=function()gotoScene("quit")end,up=3}, }, mode={ {x=1000,y=210,w=200,h=140,rgb=color.white,hide=function()return modeSel==1 end,t="Λ",f=64,code=function()keyDown.mode("up")end}, {x=1000,y=430,w=200,h=140,rgb=color.white,hide=function()return modeSel==#modeID end,t="v",f=80,code=function()keyDown.mode("down")end}, {x=190,y=160,w=100,h=80,rgb=color.white,hide=function()return levelSel==1 end,t="<",code=function()keyDown.mode("left")end}, {x=350,y=160,w=100,h=80,rgb=color.white,hide=function()return levelSel==#modeLevel[modeID[modeSel]] end,t=">",code=function()keyDown.mode("right")end}, - {x=1000,y=600,w=250,h=100,rgb=color.green,f=50,t="Start",code=function()loadGame(modeID[modeSel],levelSel)end}, + {x=1000,y=600,w=250,h=100,rgb=color.green,f=50,t="Start",code=function()loadGame(modeSel,levelSel)end}, {x=270,y=540,w=190,h=85,rgb=color.yellow,t="Custom(c)",code=function()gotoScene("custom")end}, {x=640,y=630,w=230,h=90,rgb=color.white,f=45,t="Back",code=back}, }, @@ -717,7 +735,7 @@ Buttons={ {x=1000,y=440,w=100,h=100,rgb=color.white,t="v",f=50,code=function()optSel=optSel%#customID+1 end}, {x=880,y=320,w=100,h=100,rgb=color.white,t="<",f=50,code=function()local k=customID[optSel]customSel[k]=(customSel[k]-2)%#customRange[k]+1 end}, {x=1120,y=320,w=100,h=100,rgb=color.white,t=">",f=50,code=function()local k=customID[optSel]customSel[k]=customSel[k]%#customRange[k]+1 end}, - {x=1000,y=580,w=180,h=80,rgb=color.green,t="Start",code=function()loadGame("custom",levelSel)end}, + {x=1000,y=580,w=180,h=80,rgb=color.green,t="Start",code=function()loadGame(0,1)end}, {x=640,y=630,w=180,h=60,rgb=color.white,t="Back",code=back}, }, play={ @@ -938,7 +956,7 @@ Text={ "Author:MrZ E-mail:1046101471@qq.com", "Programe:MrZ Art:MrZ Music:MrZ SFX:MrZ", "Tool used:VScode,GFIE,Beepbox,Goldwave", - "Special thanks:farter,teatube,flyz,t830,[all test staff] and YOU!!", + "Special thanks:Farter,Teatube,196,Flyz,T830,[all test staff] and YOU!", "Any bugs/suggestions to my E-mail.", }, } \ No newline at end of file diff --git a/main.lua b/main.lua index ce3760ee..742f3077 100644 --- a/main.lua +++ b/main.lua @@ -25,7 +25,6 @@ system=sys.getOS() touching=nil--1st touching ID scene="" -gameMode="" bgmPlaying=nil curBG="none" BGblock={ct=150,next=7} @@ -98,7 +97,7 @@ loadmode={ end, solo=function() createPlayer(1,20,15)--Player - createPlayer(2,660,85,.9,customRange.opponent[3*gameLevel])--AI + createPlayer(2,660,85,.9,customRange.opponent[3*curMode.lv])--AI curBG="game2" BGM("race") end, @@ -110,13 +109,45 @@ loadmode={ tsd=function() createPlayer(1,340,15) curBG="matrix" - BGM("infinite") + BGM("reason") end, blind=function() createPlayer(1,340,15) curBG="glow" BGM("push") end, + dig=function() + createPlayer(1,340,15) + local P=players[1] + if curMode.lv==1 then + ins(players[1].task,Event.task.dig_normal) + pushSpeed=1 + elseif curMode.lv==2 then + ins(players[1].task,Event.task.dig_lunatic) + pushSpeed=1 + end + curBG="game2" + BGM("push") + end, + survivor=function() + createPlayer(1,340,15) + local P=players[1] + if curMode.lv==1 then + ins(players[1].task,Event.task.survivor_easy) + pushSpeed=1 + elseif curMode.lv==2 then + ins(players[1].task,Event.task.survivor_normal) + pushSpeed=1 + elseif curMode.lv==3 then + ins(players[1].task,Event.task.survivor_hard) + pushSpeed=2 + elseif curMode.lv==4 then + ins(players[1].task,Event.task.survivor_lunatic) + pushSpeed=2 + end + curBG="game2" + BGM("push") + end, sudden=function() createPlayer(1,340,15) curBG="matrix" @@ -142,17 +173,17 @@ loadmode={ end, techmino41=function() createPlayer(1,340,15)--Player - if gameLevel==5 then players[1].gameEnv.drop=15 end + if curMode.lv==5 then players[1].gameEnv.drop=15 end local n,min,max=2 - if gameLevel==1 then + if curMode.lv==1 then min,max=5,30 - elseif gameLevel==2 then + elseif curMode.lv==2 then min,max=3,25 - elseif gameLevel==3 then + elseif curMode.lv==3 then min,max=2,20 - elseif gameLevel==4 then + elseif curMode.lv==4 then min,max=2,10 - elseif gameLevel==5 then + elseif curMode.lv==5 then min,max=1,6 end for i=1,4 do @@ -173,17 +204,17 @@ loadmode={ end, techmino99=function() createPlayer(1,340,15)--Player - if gameLevel==5 then players[1].gameEnv.drop=15 end + if curMode.lv==5 then players[1].gameEnv.drop=15 end local n,min,max=2 - if gameLevel==1 then + if curMode.lv==1 then min,max=5,32 - elseif gameLevel==2 then + elseif curMode.lv==2 then min,max=3,25 - elseif gameLevel==3 then + elseif curMode.lv==3 then min,max=2,18 - elseif gameLevel==4 then + elseif curMode.lv==4 then min,max=2,12 - elseif gameLevel==5 then + elseif curMode.lv==5 then min,max=1,12 end for i=1,7 do @@ -212,27 +243,20 @@ loadmode={ curBG="glow" BGM("push") end, - p2=function() - createPlayer(1,20,15) - createPlayer(2,650,15) - - curBG="game2" - BGM("way") - end, - p3=function() - createPlayer(1,20,100,.65) - createPlayer(2,435,100,.65) - createPlayer(3,850,100,.65) - - curBG="game2" - BGM("way") - end, - p4=function() - createPlayer(1,25,150,.5) - createPlayer(2,335,150,.5) - createPlayer(3,645,150,.5) - createPlayer(4,955,150,.5) - + hotseat=function() + if curMode.lv==1 then + createPlayer(1,20,15) + createPlayer(2,650,15) + elseif curMode.lv==2 then + createPlayer(1,20,100,.65) + createPlayer(2,435,100,.65) + createPlayer(3,850,100,.65) + elseif curMode.lv==3 then + createPlayer(1,25,160,.5) + createPlayer(2,335,160,.5) + createPlayer(3,645,160,.5) + createPlayer(4,955,160,.5) + end curBG="game2" BGM("way") end, @@ -278,12 +302,6 @@ mesDisp={ mStr(P.gameEnv.target,-75,370) gc.rectangle("fill",-120,376,90,4) end, - death=function() - setFont(50) - mStr(P.cstat.row,-75,320) - mStr(P.gameEnv.target,-75,370) - gc.rectangle("fill",-120,376,90,4) - end, tsd=function() setFont(35) gc.print("TSD",-102,405) @@ -298,6 +316,18 @@ mesDisp={ mStr(P.cstat.row,-75,220) mStr(P.cstat.techrash,-75,340) end, + dig=function() + setFont(70) + mStr(P.cstat.event,-75,310) + setFont(30) + gc.print("Wave",-112,375) + end, + survivor=function() + setFont(70) + mStr(P.cstat.event,-75,310) + setFont(30) + gc.print("Wave",-112,375) + end, pctrain=function() setFont(25) gc.print("Perfect Clear",-140,410) @@ -346,12 +376,6 @@ mesDisp={ setFont(75) mStr(max(100-P.cstat.row,0),-75,280) end, - gmroll=function() - setFont(25) - gc.print("Techrash",-123,420) - setFont(80) - mStr(P.cstat.techrash,-75,340) - end, custom=function() if P.gameEnv.target<1e4 then setFont(75) @@ -367,8 +391,14 @@ Event={ P.timing=false P.waiting=1e99 P.b2b=0 - P.result="WIN" - changeAtk(P) + if modeEnv.royaleMode then + P.rank=#players.alive + P.result="WIN" + changeAtk(P) + end + while P.task[1]do + rem(P.task) + end for i=1,#P.atkBuffer do P.atkBuffer[i].sent=true P.atkBuffer[i].time=0 @@ -388,16 +418,19 @@ Event={ P.timing=false P.waiting=1e99 P.b2b=0 - P.result="K.O." - showText(P,"LOSE","appear",90,nil,nil,true) + while P.task[1]do + rem(P.task) + end for i=1,#players.alive do if players.alive[i]==P then rem(players.alive,i) break end end - changeAtk(P) if modeEnv.royaleMode then + changeAtk(P) + P.result="K.O." + P.rank=#players.alive P.strength=0 if P.lastRecv and P.lastRecv.alive then local A=P.lastRecv @@ -412,7 +445,7 @@ Event={ end end end - freshRoyaleTarget() + freshMostBadge() for i=1,#players.alive do if players.alive[i].atking==P then freshTarget(players.alive[i]) @@ -431,6 +464,7 @@ Event={ P.visTime[i][j]=min(P.visTime[i][j],20) end end + showText(P,"LOSE","appear",90,nil,nil,true) if P.id==1 and players[2]and players[2].ai then SFX("fail")end ins(P.task,Event.task.lose) if #players.alive==1 then @@ -449,7 +483,7 @@ Event={ SFX("reach") end end, - death_reach=function() + marathon_reach_lunatic=function() if P.gameEnv.target==250 then Event.gameover.win() else @@ -467,7 +501,7 @@ Event={ Event.gameover.lose() else P.gameEnv.target=P.gameEnv.target+2 - if #P.field>10 and P.gameEnv.target%10~=0 then + if P.cstat.row%10~=0 then ins(P.clearing,1) end end @@ -477,31 +511,45 @@ Event={ Event.gameover.lose() end end, - sudden_reach_HARD=function() + sudden_reach_hard=function() if #P.clearing>0 and P.lastClear<10 and P.lastClear~=74 then Event.gameover.lose() end end, newPC=function() local P=players[1] - if #P.field==#P.clearing then - P.counter=P.cstat.piece==0 and 19 or 0 - ins(P.task,Event.task.PC) - if gameLevel==2 then - local s=P.cstat.pc*.5 - if int(s)==s and s>0 then - P.gameEnv.drop=pc_drop[s]or 10 - P.gameEnv.lock=pc_lock[s]or 20 - P.gameEnv.fall=pc_fall[s]or 5 - if s==10 then - showText(P,"Max speed","appear",80,-120) - else - showText(P,"Speed up","appear",30,-130) + if P.cstat.piece%4==0 then + if #P.field==#P.clearing then + P.counter=P.cstat.piece==0 and 19 or 0 + ins(P.task,Event.task.PC) + if curMode.lv==2 then + local s=P.cstat.pc*.5 + if int(s)==s and s>0 then + P.gameEnv.drop=pc_drop[s]or 10 + P.gameEnv.lock=pc_lock[s]or 20 + P.gameEnv.fall=pc_fall[s]or 5 + if s==10 then + showText(P,"Max speed","appear",80,-120) + else + showText(P,"Speed up","appear",30,-130) + end end end + local r=rnd(#PClist) + local f=P.cstat.pc%2==0 + for i=1,4 do + local b=PClist[r][i] + if f then + if b<3 then b=3-b + elseif b<5 then b=7-b + end + end + ins(P.nxt,b) + ins(P.nb,blocks[b][0]) + end + else + Event.gameover.lose() end - else - Event.gameover.lose() end end, task={ @@ -510,8 +558,8 @@ Event={ return true end, win=function() - P.counter=P.counter+1 - if P.counter>80 then + P.endCounter=P.endCounter+1 + if P.endCounter>80 then if P.gameEnv.visible==1 then for i=1,#P.field do for j=1,10 do @@ -520,21 +568,21 @@ Event={ end end end - if P.counter==100 then + if P.endCounter==100 then for i=1,#P.field do removeRow(P.field) removeRow(P.visTime) end return true end - elseif P.counter==100 then + elseif P.endCounter==100 then return true end end end, lose=function() - P.counter=P.counter+1 - if P.counter>80 then + P.endCounter=P.endCounter+1 + if P.endCounter>80 then if P.gameEnv.visible==1 then for i=1,#P.field do for j=1,10 do @@ -543,26 +591,98 @@ Event={ end end end - if P.counter==100 then + if P.endCounter==100 then for i=1,#P.field do removeRow(P.field) removeRow(P.visTime) end return true end - elseif P.counter==100 then + elseif P.endCounter==100 then return true end end end, - garbagepush=function() - + dig_normal=function() + local P=players[1] + P.counter=P.counter+1 + if #P.clearing==0 and P.counter>=max(90,180-2*P.cstat.event)then + ins(P.field,1,getNewRow(13)) + ins(P.visTime,1,getNewRow(1e99)) + P.field[1][rnd(10)]=0 + P.fieldBeneath=P.fieldBeneath+30 + P.cy,P.y_img=P.cy+1,P.y_img+1 + P.counter=0 + P.cstat.event=P.cstat.event+1 + end + end, + dig_lunatic=function() + local P=players[1] + P.counter=P.counter+1 + if #P.clearing==0 and P.counter>=max(40,60-.5*P.cstat.event)then + ins(P.field,1,getNewRow(13)) + ins(P.visTime,1,getNewRow(1e99)) + P.field[1][rnd(10)]=0 + P.fieldBeneath=P.fieldBeneath+30 + P.cy,P.y_img=P.cy+1,P.y_img+1 + P.counter=0 + P.cstat.event=P.cstat.event+1 + end + end, + survivor_easy=function() + local P=players[1] + P.counter=P.counter+1 + if P.counter==max(60,180-2*P.cstat.event)then + ins(P.atkBuffer,{rnd(10),amount=1,countdown=0,cd0=0,time=0,sent=false,lv=1}) + P.counter=0 + P.cstat.event=P.cstat.event+1 + end + end, + survivor_normal=function() + local P=players[1] + P.counter=P.counter+1 + if P.counter==max(60,180-2*P.cstat.event)then + local d=P.cstat.event + if rnd()<.33 then + ins(P.atkBuffer,{rnd(10),amount=1,countdown=20,cd0=20,time=0,sent=false,lv=1}) + elseif rnd()<.33 then + ins(P.atkBuffer,{rnd(10),amount=2,countdown=40,cd0=40,time=0,sent=false,lv=1}) + elseif rnd()<.5 then + ins(P.atkBuffer,{rnd(10),amount=3,countdown=60,cd0=60,time=0,sent=false,lv=2}) + else + ins(P.atkBuffer,{rnd(10),amount=4,countdown=90,cd0=90,time=0,sent=false,lv=3}) + end + P.counter=0 + P.cstat.event=P.cstat.event+1 + end + end, + survivor_hard=function() + local P=players[1] + P.counter=P.counter+1 + if P.counter==max(80,150-2*P.cstat.event)then + if rnd()<.33 then + ins(P.atkBuffer,{rnd(10),amount=1,countdown=0,cd0=0,time=0,sent=false,lv=1}) + else + ins(P.atkBuffer,{rnd(10),amount=3,countdown=0,cd0=0,time=0,sent=false,lv=1}) + end + P.counter=0 + P.cstat.event=P.cstat.event+1 + end + end, + survivor_lunatic=function() + local P=players[1] + P.counter=P.counter+1 + if P.counter==max(90,150-P.cstat.event)then + local t=max(30,90-2*P.cstat.event) + ins(P.atkBuffer,{rnd(10),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3}) + P.counter=0 + P.cstat.event=P.cstat.event+1 + end end, PC=function() local P=players[1] P.counter=P.counter+1 if P.counter==21 then - P.gameEnv.target=P.gameEnv.target+4 local t=P.cstat.pc%2 for i=1,4 do local r=getNewRow() diff --git a/paint.lua b/paint.lua index ed7f7578..01e0f7b6 100644 --- a/paint.lua +++ b/paint.lua @@ -145,14 +145,11 @@ function drawButton() end end function drawDial(x,y,speed) - gc.push("transform") - gc.translate(x,y) - gc.setColor(1,1,1) - mStr(int(speed),0,-20) - gc.draw(dialCircle,0,0,nil,nil,nil,32,32) - gc.setColor(1,1,1,.6) - gc.draw(dialNeedle,0,0,2.094+(speed<=175 and .02094*speed or 4.712-52.36/(speed-125)),nil,nil,5,4) - gc.pop() + gc.setColor(1,1,1) + mStr(int(speed),x,y-18) + gc.draw(dialCircle,x,y,nil,nil,nil,32,32) + gc.setColor(1,1,1,.6) + gc.draw(dialNeedle,x,y,2.094+(speed<=175 and .02094*speed or 4.712-52.36/(speed-125)),nil,nil,5,4) end function drawPixel(y,x,id,alpha) gc.setColor(1,1,1,alpha) @@ -264,7 +261,7 @@ end function Pnt.main() gc.setColor(1,1,1) setFont(30) - gc.print("Alpha V0.7.6",370,140) + gc.print("Alpha V0.7.7",370,140) gc.print(system,530,110) gc.draw(titleImage,30,30) end @@ -312,12 +309,12 @@ function Pnt.play() if P.small then gc.push("transform") gc.translate(P.x,P.y)gc.scale(P.size)--Scale - gc.setColor(0,0,0,.5)gc.rectangle("fill",0,0,300,600)--Black Background + gc.setColor(0,0,0,.4)gc.rectangle("fill",0,0,300,600)--Black Background gc.setLineWidth(13) gc.stencil(stencil_field_small,"replace",1) gc.translate(0,P.fieldBeneath) gc.setStencilTest("equal",1) - gc.setColor(1,1,1,P.result and max(20-P.counter,0)*.05 or 1) + gc.setColor(1,1,1,P.result and max(20-P.endCounter,0)*.05 or 1) for j=int(P.fieldBeneath/30+1),#P.field do if P.falling<=0 or without(P.clearing,j)then for i=1,10 do @@ -337,20 +334,20 @@ function Pnt.play() end end if P.result then - gc.setColor(1,1,1,min(P.counter,60)*.01) + gc.setColor(1,1,1,min(P.endCounter,60)*.01) setFont(100) mStr(P.result,150,235) if P.killMark then gc.setLineWidth(20) - gc.setColor(1,0,0,min(P.counter,25)*.04) - gc.circle("line",150,300,420-10*min(P.counter,30)) + gc.setColor(1,0,0,min(P.endCounter,25)*.04) + gc.circle("line",150,300,420-10*min(P.endCounter,30)) end end gc.pop() else gc.push("transform") gc.translate(P.x,P.y)gc.scale(P.size)--Scale - gc.setColor(0,0,0,.7)gc.rectangle("fill",0,0,600,690)--Black Background + gc.setColor(0,0,0,.6)gc.rectangle("fill",0,0,600,690)--Black Background gc.setLineWidth(7) gc.setColor(frameColor[P.strength])gc.rectangle("line",0,0,600,690)--Big frame gc.stencil(stencil_field,"replace", 1) @@ -398,7 +395,8 @@ function Pnt.play() gc.draw(PTC.dust[p])--Draw game field gc.setStencilTest()--In-playField mask gc.translate(0,-P.fieldBeneath) - gc.setColor(1,1,1)gc.rectangle("line",-3,-13,306,616)--Draw boarder + gc.setLineWidth(5) + gc.setColor(1,1,1)gc.rectangle("line",-2,-12,304,614)--Draw boarder local h=0 for i=1,#P.atkBuffer do @@ -412,23 +410,22 @@ function Pnt.play() end if a.countdown>0 then gc.setColor(attackColor[a.lv][1]) - gc.rectangle("fill",308,600-h,10,-bar+5) + gc.rectangle("fill",307,600-h,12,-bar+5) gc.setColor(attackColor[a.lv][2]) - gc.rectangle("fill",308,600-h+(-bar+5),10,-(-bar+5)*(1-a.countdown/a.cd0)) + gc.rectangle("fill",307,600-h+(-bar+5),12,-(-bar+5)*(1-a.countdown/a.cd0)) --Timing else attackColor.animate[a.lv]((sin((Timer()-i)*20)+1)*.5) - gc.rectangle("fill",308,600-h,10,-bar+5) + gc.rectangle("fill",307,600-h,12,-bar+5) --Warning end else gc.setColor(attackColor[a.lv][1]) bar=bar*(20-a.time)*.05 - gc.rectangle("fill",308,600-h,10,-bar+3) + gc.rectangle("fill",307,600-h,12,-bar+3) --Disappear end h=h+bar - if h>=600 then break end end--Buffer line gc.setColor(P.b2b<40 and color.white or P.b2b<=480 and color.lightRed or color.lightBlue) @@ -462,6 +459,10 @@ function Pnt.play() end end end--Next + setFont(30) + gc.setColor(.8,.8,.8) + gc.print(curMode.modeName,-135,-65) + gc.printf(curMode.levelName,240,-65,200,"right") if frame<180 then local count=179-frame gc.push("transform") @@ -479,7 +480,7 @@ function Pnt.play() gc.setColor(1,1,1) setFont(35) mStr(format("%.2f",P.time),-75,520)--Draw time - if mesDisp[gameMode]then mesDisp[gameMode]()end--Draw other message + if mesDisp[curMode.id]then mesDisp[curMode.id]()end--Draw other message gc.setColor(1,1,1) setFont(15) @@ -528,7 +529,7 @@ function Pnt.play() end if P.atkMode~=4 then if P.atking then - gc.setColor(0,.5,1,.2+(sin(Timer()*7)+1)*.1) + gc.setColor(0,.5,1,.2+(sin(Timer()*10)+1)*.1) gc.line(P.centerX,P.centerY,P.atking.centerX,P.atking.centerY) end end @@ -593,7 +594,7 @@ function Pnt.help() setFont(32) gc.setColor(1,1,1) for i=1,11 do - mStr(Text.help[i],640,15+43*i) + gc.printf(Text.help[i],140,15+43*i,1000,"center") end gc.draw(titleImage,180,600,.2,.7+.05*sin(Timer()*2),nil,140,100) end diff --git a/timer.lua b/timer.lua index f7332a97..e1239e37 100644 --- a/timer.lua +++ b/timer.lua @@ -196,7 +196,7 @@ function Tmr.play(dt) if P.falling<=0 then if #P.field>P.clearing[1]then SFX("fall") - VIB(1) + if P.id==1 then VIB(1)end end for i=1,#P.clearing do removeRow(P.field,P.clearing[i]) @@ -205,7 +205,7 @@ function Tmr.play(dt) P.clearing={} end end--Rows cleared drop - if P.counter<40 then + if P.endCounter<40 then for j=1,#P.field do for i=1,10 do if P.visTime[j][i]<20 then P.visTime[j][i]=P.visTime[j][i]+.5 end end end--Make field visible @@ -246,7 +246,6 @@ function Tmr.play(dt) end end if modeEnv.royaleMode and frame%60==0 then - freshRoyaleTarget() + freshMostDangerous() end - setmetatable(_G,nil) end \ No newline at end of file diff --git a/toolfunc.lua b/toolfunc.lua index d4bfb4d7..c5c6bee8 100644 --- a/toolfunc.lua +++ b/toolfunc.lua @@ -16,7 +16,7 @@ function without(t,v) return true end function mStr(s,x,y) - gc.printf(s,x-500,y,1000,"center") + gc.printf(s,x-250,y,500,"center") end function getNewRow(val) @@ -58,8 +58,8 @@ function timeSort(a,b) return a.time>b.time end function stencil_miniTitle() - for i=1,#miniTitle_pixel do - gc.rectangle("fill",unpack(miniTitle_pixel[i])) + for i=1,#miniTitle_rect do + gc.rectangle("fill",unpack(miniTitle_rect[i])) end end function stencil_field() @@ -72,7 +72,7 @@ end function VIB(t) if setting.vib>0 then - love.system.vibrate(setting.vib+t) + love.system.vibrate(vibrateLevel[setting.vib+t]) end end function sysSFX(s,v) @@ -83,6 +83,7 @@ function sysSFX(s,v) if not sfx[s][n]then sfx[s][n]=sfx[s][n-1]:clone() sfx[s][n]:seek(0) + break end end sfx[s][n]:setVolume(v or 1)