diff --git a/Zframework/init.lua b/Zframework/init.lua index e10a869a..88a620b8 100644 --- a/Zframework/init.lua +++ b/Zframework/init.lua @@ -79,8 +79,8 @@ local function updatePowerInfo() if charging then gc_setColor(0,1,0) elseif pow>50 then gc_setColor(1,1,1) elseif pow>26 then gc_setColor(1,1,0) - elseif pow<26 then gc_setColor(1,0,0) - else gc_setColor(.5,0,1) + elseif pow==26 then gc_setColor(.5,0,1) + else gc_setColor(1,0,0) end gc_rectangle('fill',76,6,pow*.22,14) if pow<100 then @@ -558,9 +558,11 @@ function love.run() end --Draw FPS - gc_setColor(1,1,1) setFont(15) _=SCR.h + gc_setColor(.8,.8,.8,.4) + gc_print(VERSION.string,SCR.safeX+50,_-20) + gc_setColor(1,1,1) gc_print(FPS(),SCR.safeX+5,_-20) --Debug info. diff --git a/Zframework/wheelScroll.lua b/Zframework/wheelScroll.lua index a67c5560..3eece35a 100644 --- a/Zframework/wheelScroll.lua +++ b/Zframework/wheelScroll.lua @@ -1,5 +1,5 @@ local floatWheel=0 -return function(y) +return function(y,key1,key2) if y>0 then if floatWheel<0 then floatWheel=0 end floatWheel=floatWheel+y^1.2 @@ -8,11 +8,11 @@ return function(y) floatWheel=floatWheel-(-y)^1.2 end while floatWheel>=1 do - love.keypressed("up") + love.keypressed(key1 or"up") floatWheel=floatWheel-1 end while floatWheel<=-1 do - love.keypressed("down") + love.keypressed(key2 or"down") floatWheel=floatWheel+1 end end \ No newline at end of file diff --git a/Zframework/widget.lua b/Zframework/widget.lua index 2732cc2a..8734d4be 100644 --- a/Zframework/widget.lua +++ b/Zframework/widget.lua @@ -871,7 +871,7 @@ function textBox:update() end function textBox:push(t) ins(self.texts,t) - if self.scrollPos==#self.texts-1 then + if self.scrollPos==#self.texts-1 and not(self.hide==true or self.hide and self.hide())then self.scrollPos=#self.texts else self.new=true @@ -902,9 +902,6 @@ function textBox:scroll(n) self.scrollPos=max(self.scrollPos+n,min(#self.texts,self.capacity)) else self.scrollPos=min(self.scrollPos+n,#self.texts) - if self.scrollPos==#self.texts then - self.new=false - end end end function textBox:clear() @@ -918,6 +915,10 @@ function textBox:draw() local scroll=self.scrollPos local cap=self.capacity + --Update new message status, necessary when hide==true + if self.scrollPos==#self.texts then + self.new=false + end --Background gc.setColor(0,0,0,.3) diff --git a/parts/language/dict_en.lua b/parts/language/dict_en.lua index e6d758d0..d36610a6 100644 --- a/parts/language/dict_en.lua +++ b/parts/language/dict_en.lua @@ -92,6 +92,12 @@ return{ "*Web-based, no mobile support | Single player and multiplayer*\nFancy online battle Tetris game.", "https://tetr.io", }, + {"Nuketris", + "nuketris", + "game", + "[NEED TRANSLATION]",--TODO + "https://nuketris.herokuapp.com", + }, {"WWC", "wwc worldwidecombos", "game", @@ -175,6 +181,11 @@ return{ "game", "*Android | Multiplayer*\nChinese: JJ块\nA casual game on JJ Card Games (JJ棋牌). Portrait screen, low input delay, smooth controls. Customizable DAS/ARR and toggle-able 20G soft drop, limited control scheme customization. No hold nor B2B, no garbage buffer nor cancelling. Every attack sends at most 4 lines, combos are more powerful, otherwise similar to modern Tetris.", }, + {"Falling lightblock", + "fl fallinglightblock", + "game", + "[NEED TRANSLATION]",--TODO + }, {"Huopin Tetris", "huopin qq", "game", @@ -771,7 +782,7 @@ return{ "community communities", "other", "Join Tetris communities and talk with other players!\n\nChina: [QQ] Tetris Research: 112897780\nGlobal: [Discord] Hard Drop: discord.gg/harddrop (click \"Open URL\")", - "https://discord.gg/harddrop/" + "https://discord.gg/harddrop" }, {"Tetris OL Servers", "tetrisonline servers", diff --git a/parts/language/dict_zh.lua b/parts/language/dict_zh.lua index 1fce10be..c457464a 100644 --- a/parts/language/dict_zh.lua +++ b/parts/language/dict_zh.lua @@ -88,6 +88,12 @@ return{ "简称IO,炫酷在线对战方块点击即玩(推荐使用电脑,移动设备需要外接键盘)(服务器在国外,可能超级慢甚至打不开)有很科学的排位系统,自定义功能非常全面,同时也提供电脑客户端下载(可以去除广告)。缺点是单机模式非常非常少。", "https://tetr.io", }, + {"Nuketris", + "网页 nuketris he", + "game", + "在线对战网页方块点击即玩(推荐使用电脑)(服务器在国外可能很卡)有几个基础单机模式和1v1排位。", + "https://nuketris.herokuapp.com/", + }, {"World Wide Combo", "网页 wwc worldwidecombo", "game", @@ -124,14 +130,14 @@ return{ "简称Tex,一个win平台方块,包含TGM的所有模式,可以用来练习TGM,手感比真版较好,不足的是world规则不完全一样(如软降到底无锁延,踢墙表有细节不同等)", }, - --游戏(PC/主机) + --游戏(PC/主机/手机) {"Tetris99", "吃鸡 t99 tetris99", "game", "简称T99,ns端方块,主玩99人混战的吃鸡模式,战术比重比较大,胜率不只由玩家在平时1v1时的水平决定。也有一些常用单机模式如马拉松等", }, {"Puyopuyo Tetris", - "ppt puyopuyotetris", + "噗哟方块 ppt puyopuyotetris", "game", "简称PPT,多平台方块(steamPC版手感,网络等都不太好,不建议购买),将tetris和puyopuyo两个下落消除游戏放到一个游戏里,二者可以对战,联机单机模式都很多,很有趣", }, @@ -146,17 +152,17 @@ return{ "简称TO,PC方块打开Steam免费下载即玩(现在已经没了),开发团队只有Dr.Ocelot和Mine两个人(都没有很多开发经验),UI部分模仿PPT,手感故意设计为较慢,平时玩无延迟方块的玩家会很不习惯,音乐不错,攻击特效好看。2020年12月9日收到来自TTC的DCMA警告信于是被迫停止开发,在一段时间后关服并下架。", }, {"Tetris Effect", - "tec tetriseffectconnect", + "效应 tec tetriseffectconnect", "game", "简称TE(C),一个win/ps4/xbox平台方块,特效方块游戏,只有单机模式,手感不算太好,想看特效的可以一试,只是去玩方块的不是很建议\n有一个拓展版本Tetris Effect: Connected增加了联网对战,包含普通对战,zone对战,经典对战和boss战四个模式", }, {"Techmino", - "techmino tieke", + "铁壳 techmino tieke", "game", "简称Tech,一个win/android/linux/macOS方块,单机模式和各种设置都很齐全,联机正在逐渐开发中,输入延迟很小,手感很好", }, {"Cultris II", - "c2 cultris2 cultrisii", + "文艺 c2 cultris2 cultrisii", "game", "简称C2,一个win/linux/macOS平台方块,设计基于经典规则出发,但支持自定义das/arr,对战的主要玩法是基于时间的连击,考验玩家速度/wide打法/挖掘", }, @@ -166,7 +172,7 @@ return{ "简称NP,一个win平台方块,整个游戏自定义程度极高,几乎任何参数都可以自己设置,是一个专业级方块,不太适合新人上手,连菜单都不太好搞清楚", }, {"Touhoumino", - "touhoumino chewan dongfang", + "东方 车万 touhoumino chewan dongfang", "game", "块圈玩家自制win平台方块,其实就是一个nullpomino的自带资源包的改版,将东方project元素结合到俄罗斯方块的游戏,好玩但是难度较大,适合有方块基础并且各项能力都较强的玩家游玩(不然都不知道自己怎么死的)", }, @@ -180,6 +186,11 @@ return{ "game", "jj棋牌平台下一个休闲游戏,安卓百度“JJ比赛”官网下载平台后可以找到(找不到的原因是ios系统或者没在官网下载或者被限制不可直接访问游戏)。竖屏,输入延迟很小超流畅,可自定义das/arr/20G软降,简单自定义键位,无hold,没有b2b,无攻击缓冲不可抵消,每次攻击上限为4,连击较强,其他同现代方块", }, + {"Falling lightblock", + "手机 fl fallinglightblock", + "game", + "一个全平台块,横竖屏,有延迟并且不可调。手机支持自定义键位,主要玩法基于nes块设计,也有现代模式。对战为半即时半回合制,无攻击缓冲不可抵消。", + }, {"火拼俄罗斯", "火拼俄罗斯 huopin qq", "game", @@ -478,7 +489,7 @@ return{ {"C4W", "连击 ·c4w center4wide", "term", - "Center 4 Wide\n中间空四列,一种连击打法,能打出很高的连击,利用了大多数专业对战方块游戏的死亡判定机制,可以放心堆高不担心被顶死,然后开始连击。是一种利用游戏机制的不平衡策略(尤其在开局时),观赏性不是很强还可以以弱胜强,成本太低所以成为了部分游戏中约定的类似 禁招 的东西,请在了解情况后再使用,不然可能会被别人骂。\n\n本游戏里做了平衡,c4w强度没有别的游戏高,而且打的是电脑所以放心用~", + "Center 4 Wide\n中间空四列,一种连击打法,能打出很高的连击,利用了大多数专业对战方块游戏的死亡判定机制,可以放心堆高不担心被顶死,然后开始连击。是一种利用游戏机制的不平衡策略(尤其在开局时),观赏性不是很强还可以以弱胜强,成本太低所以成为了部分游戏中约定的类似 禁招 的东西,请在了解情况后再使用,不然可能会被别人骂。\n\n本游戏里考虑到了平衡问题,所以c4w的强度没有别的游戏那么夸张。", }, {"N-res", "连击 ·residual c4w s4w", @@ -543,7 +554,7 @@ return{ {"SDF", "软降速度 sdf softdropfactor", "term", - "Soft Drop Factor,软降速度因子(倍率),部分游戏中的软降机制就是在按住软件键时方块受到的重力变为原来的若干倍,SDF就是这个变大的倍数。\n基本所有官块和tetr.io使用这个机制,但本游戏不使用。", + "Soft Drop Factor,软降速度因子(倍率)\n部分游戏中的软降机制就是在按住软降键时方块受到的重力变为原来的若干倍,SDF就是这个变大的倍数。\n基本所有官块和tetr.io使用这个机制,但本游戏不使用。", }, {"bag7出块", "bag出块 bag7bag", diff --git a/parts/language/lang_en.lua b/parts/language/lang_en.lua index 7c6342b8..ee20a478 100644 --- a/parts/language/lang_en.lua +++ b/parts/language/lang_en.lua @@ -36,8 +36,10 @@ return{ combo="Combo",maxcmb="Max Combo", pc="Perfect Clear",ko="KO", - win="You Win!", + win="Win", + lose="Lose", finish="Finish", + gamewin="You Win!", gameover="Game Over", pause="Pause", pauseCount="Pauses", diff --git a/parts/language/lang_fr.lua b/parts/language/lang_fr.lua index d1e6d89c..63b7ece4 100644 --- a/parts/language/lang_fr.lua +++ b/parts/language/lang_fr.lua @@ -37,8 +37,10 @@ return{ pc="Perfect Clear",ko="KO", - win="Gagné !", + -- win="Win", + -- lose="Lose", finish="Terminé", + gamewin="Gagné !", gameover="Fin du jeu", pause="Pause", pauseCount="Pauses", diff --git a/parts/language/lang_pt.lua b/parts/language/lang_pt.lua index bb8a866d..583da9b8 100644 --- a/parts/language/lang_pt.lua +++ b/parts/language/lang_pt.lua @@ -37,8 +37,10 @@ return{ combo="Combo",maxcmb="Combo máximo", pc="Tudo limpo",ko="KO", - win="Você venceu!", + -- win="Win", + -- lose="Lose", finish="Terminou", + gamewin="Você venceu!", gameover="Fim de jogo", pause="Pausa", pauseCount="Pausas", diff --git a/parts/language/lang_sp.lua b/parts/language/lang_sp.lua index af84b7c9..41f60507 100644 --- a/parts/language/lang_sp.lua +++ b/parts/language/lang_sp.lua @@ -36,8 +36,10 @@ return{ combo="Combo",maxcmb="Combo Máx.", pc="Perfect Clear",ko="KO", - win="Victoria", + -- win="Win", + -- lose="Lose", finish="Fin", + gamewin="Victoria", gameover="Fin del Juego", pause="Pausa", pauseCount="Veces pausadas", diff --git a/parts/language/lang_symbol.lua b/parts/language/lang_symbol.lua index f6fb2e5d..1f41eb44 100644 --- a/parts/language/lang_symbol.lua +++ b/parts/language/lang_symbol.lua @@ -25,7 +25,9 @@ return{ missionFailed="-X_X-", win=": )", + lose=": (", finish="&", + gamewin=">>", gameover="x", pause="=", pauseCount="==", diff --git a/parts/language/lang_yygq.lua b/parts/language/lang_yygq.lua index 43576b87..c1e4dfc5 100644 --- a/parts/language/lang_yygq.lua +++ b/parts/language/lang_yygq.lua @@ -26,9 +26,11 @@ return{ combo="连击",maxcmb="最大连", pc="消干净了",ko="淘汰", - win="成了", + win="好了", + lose="挂了", finish="可以的", - gameover="挂了", + gamewin="成了", + gameover="没了", pause="歇会", pauseCount="歇多久了", finesse_ap="您", diff --git a/parts/language/lang_zh.lua b/parts/language/lang_zh.lua index fe25d42d..3d78166f 100644 --- a/parts/language/lang_zh.lua +++ b/parts/language/lang_zh.lua @@ -37,7 +37,9 @@ return{ pc="Perfect Clear",ko="KO", win="胜利", + lose="失败", finish="完成", + gamewin="胜利", gameover="游戏结束", pause="暂停", pauseCount="暂停统计", diff --git a/parts/list.lua b/parts/list.lua index 6f57d123..6aef2e18 100644 --- a/parts/list.lua +++ b/parts/list.lua @@ -166,8 +166,9 @@ do--drawableText anykey=T(40), replaying=T(20), next=T(40),hold=T(40), - win=T(120),finish=T(120), - gameover=T(100),pause=T(120), + win=T(120),lose=T(120), + finish=T(120), + gamewin=T(100),gameover=T(100),pause=T(120), speedLV=T(20), line=T(25),atk=T(20),eff=T(20), diff --git a/parts/modes/bigbang.lua b/parts/modes/bigbang.lua index 251cdb45..1a4eeaf6 100644 --- a/parts/modes/bigbang.lua +++ b/parts/modes/bigbang.lua @@ -1,5 +1,5 @@ return{ - color=COLOR.lH, + color=COLOR.lGray, env={ drop=1e99,lock=1e99, holdCount=0, @@ -11,7 +11,7 @@ return{ PLY.newPlayer(1) end, score=function(P)return{P.modeData.event,P.stat.finesseRate*20/P.stat.piece}end, - scoreDisp=function(D)return("%d Stage %.2f%"):format(D[1],D[2])end, + scoreDisp=function(D)return("%d Stage %.2f%%"):format(D[1],D[2])end, comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]>b[2]end, getRank=function(P) local W=P.modeData.event diff --git a/parts/modes/master_final.lua b/parts/modes/master_final.lua index 48e4c71d..33c3816d 100644 --- a/parts/modes/master_final.lua +++ b/parts/modes/master_final.lua @@ -40,7 +40,7 @@ local function score(P) end return{ - color=COLOR.lH, + color=COLOR.lGray, env={ noTele=true, das=5,arr=1, diff --git a/parts/modes/sprint_1000l.lua b/parts/modes/sprint_1000l.lua index 7a2a59a5..1211ea03 100644 --- a/parts/modes/sprint_1000l.lua +++ b/parts/modes/sprint_1000l.lua @@ -1,5 +1,5 @@ return{ - color=COLOR.lH, + color=COLOR.lGray, env={ drop=60,lock=60, dropPiece=function(P)if P.stat.row>=1000 then P:win('finish')end end, diff --git a/parts/modes/ultra.lua b/parts/modes/ultra.lua index 843054ba..48bfdadd 100644 --- a/parts/modes/ultra.lua +++ b/parts/modes/ultra.lua @@ -1,7 +1,7 @@ local gc=love.graphics local warnTime={60,90,105,115,116,117,118,119,120} return{ - color=COLOR.lH, + color=COLOR.lGray, env={ noTele=true, minarr=1,minsdarr=1, diff --git a/parts/modes/zen.lua b/parts/modes/zen.lua index 9f619718..196c694b 100644 --- a/parts/modes/zen.lua +++ b/parts/modes/zen.lua @@ -1,5 +1,5 @@ return{ - color=COLOR.lH, + color=COLOR.lGray, env={ drop=120,lock=120, infHold=true, diff --git a/parts/player/draw.lua b/parts/player/draw.lua index c22f7f6c..f152ea96 100644 --- a/parts/player/draw.lua +++ b/parts/player/draw.lua @@ -9,7 +9,7 @@ local gc_stencil,gc_setStencilTest=gc.stencil,gc.setStencilTest local int,ceil,rnd=math.floor,math.ceil,math.random local max,min,sin,modf=math.max,math.min,math.sin,math.modf -local setFont,mStr=setFont,mStr +local setFont,mDraw,mStr=setFont,mDraw,mStr local TIME=TIME local frameColorList={ @@ -867,7 +867,7 @@ function draw.small(P) --Draw result if P.result then gc_setColor(1,1,1,min(P.endCounter,60)*.01) - setFont(20)mStr(drawableText[P.result],32,47) + setFont(20)mDraw(drawableText[P.result],30,60,nil,P.size) setFont(15)mStr(P.modeData.place,30,82) end gc_pop() diff --git a/parts/player/player.lua b/parts/player/player.lua index 4780d958..5b2562f3 100644 --- a/parts/player/player.lua +++ b/parts/player/player.lua @@ -1702,7 +1702,7 @@ function Player:win(result) self:changeAtk() end if self.type=='human'then - GAME.result=result or'win' + GAME.result=result or'gamewin' SFX.play('win') VOC.play('win') if GAME.modeEnv.royaleMode then @@ -1807,7 +1807,7 @@ function Player:lose(force) self:showTextF(self.modeData.place,0,120,60,'appear',.26,.9) end self.gameEnv.keepVisible=self.gameEnv.visible~='show' - self:showTextF(text.gameover,0,0,60,'appear',.26,.9) + self:showTextF(text.lose,0,0,90,'appear',.26,.9) if self.type=='human'then GAME.result='gameover' SFX.play('fail') diff --git a/parts/scenes/app_console.lua b/parts/scenes/app_console.lua index 8c1a7bc0..01573edd 100644 --- a/parts/scenes/app_console.lua +++ b/parts/scenes/app_console.lua @@ -5,9 +5,10 @@ local C=COLOR local inputBox=WIDGET.newInputBox{name="input",x=40,y=650,w=1200,h=50} local outputBox=WIDGET.newTextBox{name="output",x=40,y=30,w=1200,h=610,font=25,lineH=25,fix=true} + local function log(str)outputBox:push(str)end log{C.lP,"Techmino Console"} -log{C.lB,"©2020 26F Studio some rights reserved"} +log{C.lC,"©2020 26F Studio some rights reserved"} log{C.dR,"DO NOT RUN ANY CODE YOU DON'T UNDERSTAND"} local history,hisPtr={"?"} @@ -679,6 +680,10 @@ function scene.sceneInit() BG.set('none') end +function scene.wheelMoved(_,y) + WHEELMOV(y,"scrollup","scrolldown") +end + function scene.keyDown(k) if k=="return"then local input=inputBox.value @@ -766,6 +771,12 @@ function scene.keyDown(k) inputBox.value=res[1] end end + elseif k=="scrollup"then outputBox:scroll(-1) + elseif k=="scrolldown"then outputBox:scroll(1) + elseif k=="pageup"then outputBox:scroll(-20) + elseif k=="pagedown"then outputBox:scroll(20) + elseif k=="home"then outputBox:scroll(-1e99) + elseif k=="end"then outputBox:scroll(1e99) elseif combKey[k]and kb.isDown("lctrl","rctrl")then combKey[k]() elseif k=="escape"then diff --git a/parts/scenes/net_game.lua b/parts/scenes/net_game.lua index 9baf1a5e..c9b6e1f1 100644 --- a/parts/scenes/net_game.lua +++ b/parts/scenes/net_game.lua @@ -112,7 +112,7 @@ end function scene.gamepadDown(key) if key=="back"then if TIME()-lastBackTime<1 then - SCN.back() + NET.signal_quit() else lastBackTime=TIME() LOG.print(text.sureQuit,COLOR.O) @@ -201,7 +201,10 @@ function scene.socketRead(cmd,d) end function scene.update(dt) - if NET.checkPlayDisconn()then SCN.back()end + if NET.checkPlayDisconn()then + NET.wsclose_stream() + SCN.back() + end if not playing then return end local P1=PLAYERS[1] @@ -234,7 +237,7 @@ function scene.draw() drawFWM() --Players - for p=textBox.hide and 1 or 2,#PLAYERS do + for p=1,#PLAYERS do PLAYERS[p]:draw() end @@ -275,11 +278,12 @@ function scene.draw() --Profile drawSelfProfile() end + --New message - if textBox.new and textBox.hide then - setFont(30) - gc.setColor(1,TIME()%.4<.2 and 1 or 0,0) - gc.print("M",460,15) + if textBox.new then + setFont(40) + gc.setColor(1,.5+.5*math.sin(TIME()*26),0) + gc.print("M",430,10) end end scene.widgetList={ @@ -290,7 +294,6 @@ scene.widgetList={ return playing or NET.serverGaming or - not textBox.hide or PLY_NET[1].ready or NET.getlock('ready') end}, @@ -299,7 +302,6 @@ scene.widgetList={ return playing or NET.serverGaming or - not textBox.hide or not PLY_NET[1].ready or NET.getlock('ready') end}, diff --git a/parts/scenes/pause.lua b/parts/scenes/pause.lua index 9c256a67..c2bd5f20 100644 --- a/parts/scenes/pause.lua +++ b/parts/scenes/pause.lua @@ -190,7 +190,7 @@ function scene.draw() --Result Text setFont(35) - mText(GAME.result and drawableText[GAME.result]or drawableText.pause,640,50-10*(5-timer*.1)^1.5) + mDraw(GAME.result and drawableText[GAME.result]or drawableText.pause,640,100-10*(5-timer*.1)^1.5) --Mode Info gc.draw(drawableText.modeName,40,240)