This commit is contained in:
user670
2021-05-02 15:27:48 +08:00
23 changed files with 101 additions and 48 deletions

View File

@@ -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.

View File

@@ -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

View File

@@ -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)

View File

@@ -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",

View File

@@ -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",
"简称T99ns端方块主玩99人混战的吃鸡模式战术比重比较大胜率不只由玩家在平时1v1时的水平决定。也有一些常用单机模式如马拉松等",
},
{"Puyopuyo Tetris",
"ppt puyopuyotetris",
"噗哟方块 ppt puyopuyotetris",
"game",
"简称PPT多平台方块(steamPC版手感网络等都不太好不建议购买)将tetris和puyopuyo两个下落消除游戏放到一个游戏里二者可以对战联机单机模式都很多很有趣",
},
@@ -146,17 +152,17 @@ return{
"简称TOPC方块打开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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -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",

View File

@@ -25,7 +25,9 @@ return{
missionFailed="-X_X-",
win=": )",
lose=": (",
finish="&",
gamewin=">>",
gameover="x",
pause="=",
pauseCount="==",

View File

@@ -26,9 +26,11 @@ return{
combo="连击",maxcmb="最大连",
pc="消干净了",ko="淘汰",
win="",
win="",
lose="挂了",
finish="可以的",
gameover="",
gamewin="",
gameover="没了",
pause="歇会",
pauseCount="歇多久了",
finesse_ap="",

View File

@@ -37,7 +37,9 @@ return{
pc="Perfect Clear",ko="KO",
win="胜利",
lose="失败",
finish="完成",
gamewin="胜利",
gameover="游戏结束",
pause="暂停",
pauseCount="暂停统计",

View File

@@ -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),

View File

@@ -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

View File

@@ -40,7 +40,7 @@ local function score(P)
end
return{
color=COLOR.lH,
color=COLOR.lGray,
env={
noTele=true,
das=5,arr=1,

View File

@@ -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,

View File

@@ -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,

View File

@@ -1,5 +1,5 @@
return{
color=COLOR.lH,
color=COLOR.lGray,
env={
drop=120,lock=120,
infHold=true,

View File

@@ -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()

View File

@@ -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')

View File

@@ -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

View File

@@ -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},

View File

@@ -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)