diff --git a/BGM/rockblock.ogg b/BGM/rockblock.ogg new file mode 100644 index 00000000..67d4dfea Binary files /dev/null and b/BGM/rockblock.ogg differ diff --git a/conf.lua b/conf.lua index 172bb51c..2d1f6d4d 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.9" + W.title="Techmino V0.7.10" W.icon="/image/icon.png" W.width,W.height=1280,720 W.minwidth,W.minheight=640,360 diff --git a/allph.ttf b/font.ttf similarity index 75% rename from allph.ttf rename to font.ttf index 199b3563..d845a60f 100644 Binary files a/allph.ttf and b/font.ttf differ diff --git a/gamefunc.lua b/gamefunc.lua index b8c4a999..e27a6dfe 100644 --- a/gamefunc.lua +++ b/gamefunc.lua @@ -92,7 +92,7 @@ function createPlayer(id,x,y,size,AIspeed,data) P.atkMode,P.swappingAtkMode=1,20 P.atker,P.atking,P.lastRecv={} --Royale-related - + P.gameEnv={}--Game setting vars,like dropDelay setting for k,v in pairs(gameEnv0)do if data and data[k]~=nil then @@ -161,7 +161,7 @@ function createPlayer(id,x,y,size,AIspeed,data) 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}) @@ -513,7 +513,7 @@ function spin(d,ifpre) end function hold(ifpre) if not P.holded and P.waiting<=0 and P.gameEnv.hold then - P.hid,P.bid,P.bc=P.bid,P.hid,P.hid + P.hid,P.bid,P.bc,P.hc=P.bid,P.hid,P.hc,P.bc P.hb,P.cb=blocks[P.hid][0],P.hb if P.bid==0 then @@ -604,11 +604,11 @@ function drop() elseif cc>0 then if dospin then if P.b2b>480 then - showText(P,text.spin[P.bc]..text.clear[cc]..text.b3b,"spin",40) + showText(P,text.b3b..text.spin[P.bc]..text.clear[cc],"spin",40) csend=b2bATK[cc]+1 exblock=exblock+1 elseif P.b2b>=30 then - showText(P,text.spin[P.bc]..text.clear[cc]..text.b2b,"spin",40) + showText(P,text.b2b..text.spin[P.bc]..text.clear[cc],"spin",40) csend=b2bATK[cc] else showText(P,text.spin[P.bc]..text.clear[cc],"spin",50) @@ -616,7 +616,7 @@ function drop() end sendTime=20+csend*20 if mini then - showText(P,text.mini,"drive",40,10) + showText(P,text.mini,"appear",40,-60) csend=ceil(csend*.5) sendTime=sendTime+60 P.b2b=P.b2b+b2bPoint[cc]*.8 @@ -630,7 +630,7 @@ function drop() SFX(spin_n[cc]) elseif #P.clearing<#P.field then P.b2b=P.b2b-150-cc*50 - showText(P,text.clear[cc],"appear",25+cc*5) + showText(P,text.clear[cc],"appear",32+cc*3,0,(8-cc)*.3) csend=cc-1 sendTime=20+csend*20 P.lastClear=cc diff --git a/language/chi.lua b/language/chi.lua index 9f3c4a56..3665d876 100644 --- a/language/chi.lua +++ b/language/chi.lua @@ -4,15 +4,17 @@ return{ end, cmb={nil,nil,"3连击","4连击","5连击","6连击","7连击","8连击","9连击","10连击!","11连击!","12连击!","13连击!","14连击!","15连击!","16连击!","17连击!","18连击!","19连击!","巨型连击"}, techrash="四清", - techrashB2B="四清 B2B", - techrashB3B="四清 B2B2B", + techrashB2B="满贯 四清", + techrashB3B="大满贯 四清", block={"Z","S","L","J","T","O","I"}, - spin={"Z旋","S旋","L旋","J旋","T旋","O旋","I旋"}, - clear={"单消","双消","三清"}, - b2b="B2B", - b3b="B2B2B", + spin={"Z型回旋","S型回旋","L型回旋","J型回旋","T型回旋","O型回旋","I型回旋"}, + clear={"单清","双清","三清"}, + b2b="满贯 ", + b3b="大满贯 ", mini="次级", PC="场地全清", + hold="暂存", + next="下一个", stage={"关卡 1","关卡 2","关卡 3","关卡 4","关卡 5",}, maxspeed="最高速度", @@ -22,8 +24,35 @@ return{ lose="失败", custom="自定义游戏", + customOption={ + drop="下落延迟:", + lock="锁定延迟:", + wait="放块延迟:", + fall="消行延迟:", + next="序列数量:", + hold="暂存:", + sequence="序列:", + visible="可见性:", + target="目标行数:", + freshLimit="锁延刷新次数:", + opponent="对手速度等级:", + }, + customVal={ + drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞","[20G]"}, + lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"}, + wait=nil, + fall=nil, + next=nil, + hold={"开","关"}, + sequence={"bag7","his4","随机"}, + visible={"可见","半隐形","全隐形"}, + target={10,20,40,100,200,500,1000,"∞"}, + freshLimit={0,8,15,"∞"}, + opponent={"无电脑",1,2,3,4,5,6,7,8,9,10,11}, + }, softdropdas="软降DAS:", softdroparr="软降ARR:", + snapLevelName={"任意摆放","10px吸附","20px吸附","40px吸附","60px吸附","80px吸附"}, keyboard="键盘", joystick="手柄", setting2Help="方向键选择/翻页,回车修改,esc返回", @@ -32,12 +61,13 @@ return{ actName={"左移:","右移:","顺时针旋转:","顺时针旋转:","180°旋转","硬降:","软降:","暂存:","切换攻击:","重新开始:","左瞬移:","右瞬移:","软降到底:"}, modeName={ [0]="自定义", - "竞速","马拉松","禅","无尽","单挑","仅TSD","隐形","挖掘","生存","科研", + "竞速","马拉松","经典","禅","无尽","单挑","仅TSD","隐形","挖掘","生存","科研", "全清训练","全清挑战","41人混战","99人混战","干旱","多人", }, modeInfo={ sprint="挑战世界纪录", marathon="尝试坚持到最后", + classic="高速经典", zen="无重力消除200行", infinite="科研沙盒", solo="打败AI", @@ -81,7 +111,7 @@ return{ help={ "好像也没啥好帮助的吧?就当是关于了", "这只是一个方块游戏,请勿过度解读和随意联想", - "不过就当成TOP/C2/KOS/TGM3玩好了", + "不过就当成TOP/C2/KOS/TGM3/JS玩好了", "游戏还在测试阶段,请 勿 外 传", "", "使用LOVE2D引擎", @@ -145,7 +175,7 @@ return{ "返回", function()return setting.virtualkeySwitch and"隐藏虚拟按键"or"显示虚拟按键"end, "默认组合", - function()return snapLevelName[snapLevel]end, + function()return text.snapLevelName[snapLevel]end, function()return percent0to5[setting.virtualkeyAlpha]end, "图标", "大小", diff --git a/language/eng.lua b/language/eng.lua index 9e0aed0c..8d6a1702 100644 --- a/language/eng.lua +++ b/language/eng.lua @@ -13,6 +13,8 @@ return{ b3b=" B2B2B", mini="Mini", PC="Perfect Clear", + hold="hold", + next="next", stage={"STAGE 1","STAGE 2","STAGE 3","STAGE 4","STAGE 5",}, maxspeed="Max speed", @@ -22,8 +24,35 @@ return{ lose="LOSE", custom="Custom Game", + customOption={ + drop="Drop delay:", + lock="Lock delay:", + wait="Next piece delay:", + fall="Clear row delay:", + next="Next count:", + hold="Hold:", + sequence="Sequence:", + visible="Visible:", + target="Line limit:", + freshLimit="Lock fresh limit:", + opponent="Opponent speed:", + }, + customVal={ + drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞","[20G]"}, + lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"}, + wait=nil, + fall=nil, + next=nil, + hold={"on","off"}, + sequence={"bag7","his4","random"}, + visible={"normal","time","invisible"}, + target={10,20,40,100,200,500,1000,"∞"}, + freshLimit={0,8,15,"∞"}, + opponent={"No CPU",1,2,3,4,5,6,7,8,9,10,11}, + }, softdropdas="softdropDAS:", softdroparr="softdropARR:", + snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"}, keyboard="Keyboard", joystick="Joystick", setting2Help="Arrowkey to select/change slot,Enter to change,Esc back", @@ -32,12 +61,13 @@ return{ actName={"Move Left:","Move Right:","Rotate Right:","Rotate Left:","Rotate Flip:","Hard Drop:","Soft Drop:","Hold:","Swap:","Restart:","Instant Left:","Instant Right:","Ins Down:"}, modeName={ [0]="Custom", - "Sprint","Marathon","Zen","Infinite","1v1","TSD-only","Blind","Dig","Survivor","Tech", + "Sprint","Marathon","Classic","Zen","Infinite","1v1","TSD-only","Blind","Dig","Survivor","Tech", "PC Train","PC Challenge","Techmino41","Techmino99","Drought","Hotseat", }, modeInfo={ sprint="Speed run", marathon="Survive and reach target", + classic="Vintage car drag racing", zen="Clear 200 Lines without gravity", infinite="Infinite game,infinite happiness", solo="Beat AI", @@ -145,7 +175,7 @@ return{ "Back", function()return setting.virtualkeySwitch and"Hide Virtual Key"or"Show Virtual Key"end, "Defaults", - function()return snapLevelName[snapLevel]end, + function()return text.snapLevelName[snapLevel]end, function()return percent0to5[setting.virtualkeyAlpha]end, "Icon", "Size", diff --git a/list.lua b/list.lua index 5e45be8e..c11d5a65 100644 --- a/list.lua +++ b/list.lua @@ -128,6 +128,7 @@ bgm={ "final", "secret7th", "secret8th", + "rockblock", } prevMenu={ @@ -162,33 +163,7 @@ customID={ "target", "freshLimit", "opponent", -}--Order -customOption={ - drop="Drop delay:", - lock="Lock delay:", - wait="Next piece delay:", - fall="Clear row delay:", - next="Next count:", - hold="Hold:", - sequence="Sequence:", - visible="Visible:", - target="Line limit:", - freshLimit="Lock fresh limit:", - opponent="Opponent speed:", -}--Key str -customVal={ - drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞","[20G]"}, - lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,"∞"}, - wait=nil, - fall=nil, - next=nil, - hold={"on","off"}, - sequence={"bag7","his4","random"}, - visible={"normal","time","invisible"}, - target={10,20,40,100,200,500,1000,"∞"}, - freshLimit={0,8,15,"∞"}, - opponent={"No CPU",1,2,3,4,5,6,7,8,9,10,11}, -}--number-Val str +} customRange={ drop={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99,-1}, lock={0,1,2,3,4,5,6,7,8,9,10,12,14,16,18,20,25,30,40,60,180,1e99}, @@ -234,7 +209,6 @@ pc_fall={18,16,14,12,10,9,8,7,6} atkModeName={"Random","Badges","K.O.s","Counters"} up0to4={[0]="000%UP","025%UP","050%UP","075%UP","100%UP",} percent0to5={[0]="0%","20%","40%","60%","80%","100%",} -snapLevelName={"Free pos","Snap-10","Snap-20","Snap-40","Snap-60","Snap-80"} defaultModeEnv={ sprint={ @@ -332,6 +306,22 @@ defaultModeEnv={ bgm="secret7th", }, }, + classic={ + { + das=15,arr=3, + sddas=2,sdarr=2, + ghost=false,center=false, + drop=1,lock=1, + wait=10,fall=25, + next=6,hold=false, + sequence="rnd", + freshLimit=0, + target=10, + reach=Event.classic_reach, + bg="rgb", + bgm="rockblock", + }, + }, zen={ { drop=1e99, @@ -622,9 +612,15 @@ defaultModeEnv={ }, }, } +modeID={ + [0]="custom", + "sprint","marathon","classic","zen","infinite","solo","tsd","blind","dig","survivor","tech", + "pctrain","pcchallenge","techmino41","techmino99","drought","hotseat", +} modeLevel={ sprint={"10L","20L","40L","100L","400L","1000L"}, marathon={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, + classic={"CTWC"}, zen={"NORMAL"}, infinite={"NORMAL"}, solo={"EASY","NORMAL","HARD","LUNATIC"}, @@ -633,7 +629,7 @@ modeLevel={ dig={"NORMAL","LUNATIC"}, survivor={"EASY","NORMAL","HARD","LUNATIC"}, tech={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, - pctrain={"NORMAL","LUNATIC"}, + pctrain={"NORMAL","EXTRA"}, pcchallenge={"NORMAL","HARD","LUNATIC"}, techmino41={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, techmino99={"EASY","NORMAL","HARD","LUNATIC","ULTIMATE"}, @@ -647,11 +643,12 @@ modeLevelColor={ HARD=color.purple, LUNATIC=color.red, EXTRA=color.lightPurple, + ULTIMATE=color.lightYellow, MESS=color.lightGrey, GM=color.blue, - ULTIMATE=color.lightYellow, DEATH=color.lightRed, + CTWC=color.lightBlue, ["10L"]=color.cyan, ["20L"]=color.lightBlue, ["40L"]=color.green, @@ -659,11 +656,6 @@ modeLevelColor={ ["400L"]=color.red, ["1000L"]=color.darkRed, } -modeID={ - [0]="custom", - "sprint","marathon","zen","infinite","solo","tsd","blind","dig","survivor","tech", - "pctrain","pcchallenge","techmino41","techmino99","drought","hotseat", -} freshMethod={ bag7=function() @@ -944,16 +936,16 @@ Buttons={ {x=850,y=370,w=340,h=60,rgb=color.white,code=function() setting.frameMul=setting.frameMul+(setting.frameMul<50 and 5 or 10) if setting.frameMul>100 then setting.frameMul=25 end - end,up=15,down=17}, + end,up=15,down=17,left=19}, --11~16 - {x=850,y=440,w=340,h=60,rgb=color.green,code=function()gotoScene("setting2")end,up=16,down=18}, - {x=850,y=510,w=340,h=60,rgb=color.yellow,code=function()gotoScene("setting3")end,up=17,down=20}, + {x=850,y=440,w=340,h=60,rgb=color.green,code=function()gotoScene("setting2")end,up=16,down=18,left=19}, + {x=850,y=510,w=340,h=60,rgb=color.yellow,code=function()gotoScene("setting3")end,up=17,down=20,left=19}, {x=280,y=510,w=200,h=60,rgb=color.red,code=function() setting.lang=setting.lang%#langName+1 swapLanguage(setting.lang) - end,up=10,down=20,right=18}, + end,up=7,down=20,right=18}, {x=640,y=620,w=300,h=70,rgb=color.white,code=back,up=19}, - --17~19 + --17~20 }, setting2={--Control setting {x=840,y=630,w=180,h=60,rgb=color.white,code=back}, diff --git a/main.lua b/main.lua index 913d08d0..b4950ac4 100644 --- a/main.lua +++ b/main.lua @@ -39,7 +39,7 @@ function setFont(s) if Fonts[s]then gc.setFont(Fonts[s]) else - local t=gc.setNewFont("allph.ttf",s-5) + local t=gc.setNewFont("font.ttf",s-5) Fonts[s]=t gc.setFont(t) end @@ -83,6 +83,9 @@ loadmode={ marathon=function() createPlayer(1,340,15) end, + classic=function() + createPlayer(1,340,15) + end, zen=function() createPlayer(1,340,15) end, @@ -209,6 +212,23 @@ mesDisp={ setFont(70) mStr(max(P.gameEnv.target-P.cstat.row,0),-75,260) end, + marathon=function() + setFont(50) + mStr(P.cstat.row,-75,320) + mStr(P.gameEnv.target,-75,370) + gc.rectangle("fill",-120,376,90,4) + end, + classic=function() + setFont(80) + local r=P.gameEnv.target*.1 + mStr(r<11 and 19+r or r==11 and"00"or r==12 and"0a"or format("%x",r*10-110),-75,210) + setFont(20) + mStr("speed level",-75,290) + setFont(50) + mStr(P.cstat.row,-75,320) + mStr(P.gameEnv.target,-75,370) + gc.rectangle("fill",-120,376,90,4) + end, zen=function() setFont(75) mStr(max(200-P.cstat.row,0),-75,280) @@ -221,12 +241,6 @@ mesDisp={ mStr("Attack",-75,363) mStr("Efficiency",-75,475) end, - marathon=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) mStr("TSD",-75,405) @@ -470,11 +484,18 @@ Event={ SFX("reach") end end, + classic_reach=function() + P.gameEnv.target=P.gameEnv.target+10 + if P.gameEnv.target==100 then + P.gameEnv.drop,P.gameEnv.lock=0,0 + end + SFX("reach") + end, tsd_reach=function() if P.lastClear~=52 then Event.gameover.lose() else - P.gameEnv.target=P.gameEnv.target+2 + P.gameEnv.target=P.gameEnv.target+20 P.cstat.event=P.cstat.event+1 if #P.field>11 and P.cstat.event%5~=1 then ins(P.clearing,1) diff --git a/paint.lua b/paint.lua index 8fc5beaf..fb41fb45 100644 --- a/paint.lua +++ b/paint.lua @@ -267,7 +267,7 @@ end function Pnt.main() gc.setColor(1,1,1) setFont(30) - gc.print("Alpha V0.7.9",370,140) + gc.print("Alpha V0.7.10",370,140) gc.print(system,530,110) gc.draw(titleImage,30,30) end @@ -300,9 +300,9 @@ function Pnt.custom() for i=1,#customID do local k=customID[i] local y=90+40*i - gc.print(customOption[k],50,y) - if customVal[k]then - gc.print(customVal[k][customSel[k]],350,y) + gc.printf(text.customOption[k],50,y,300,"right") + if text.customVal[k]then + gc.print(text.customVal[k][customSel[k]],350,y) else gc.print(customRange[k][customSel[k]],350,y) end @@ -445,16 +445,16 @@ function Pnt.play() setFont(40) gc.setColor(1,1,1) if P.gameEnv.hold then - gc.print("Hold",-115,-10) + mStr(text.hold,-75,-10) for i=1,#P.hb do for j=1,#P.hb[1] do if P.hb[i][j]>0 then - drawPixel(i+17.5-#P.hb*.5,j-2.5-#P.hb[1]*.5,P.holded and 13 or P.hid,1) + drawPixel(i+17.5-#P.hb*.5,j-2.5-#P.hb[1]*.5,P.holded and 13 or P.hc,1) end end end end--Hold - gc.print("Next",336,-10) + gc.print(text.next,325,-10) for N=1,P.gameEnv.next do local b=P.nb[N] for i=1,#b do