Merge branch 'main' into test-new-mode-system

This commit is contained in:
MrZ626
2021-12-16 02:32:51 +08:00
21 changed files with 281 additions and 230 deletions

View File

@@ -107,8 +107,9 @@ function BGM.init(list)
LOG("No BGM: "..name,5)
end
end
function BGM.play(name)
function BGM.play(name,args)
name=name or BGM.default
args=args or""
if not _tryLoad(name)then return end
if volume==0 then
BGM.nowPlay=name
@@ -118,14 +119,24 @@ function BGM.init(list)
if name and SourceObjList[name].source then
if BGM.nowPlay~=name then
if BGM.nowPlay then
TASK.new(task_fadeOut,BGM.playing)
if not STRING.sArg(args,'-so')then
TASK.new(task_fadeOut,BGM.playing)
else
BGM.playing:pause()
end
end
TASK.removeTask_iterate(check_curFadeOut,task_fadeOut,SourceObjList[name].source)
TASK.removeTask_code(task_fadeIn)
TASK.new(task_fadeIn,SourceObjList[name].source)
BGM.nowPlay=name
BGM.playing=SourceObjList[name].source
if not STRING.sArg(args,'-si')then
BGM.playing:setVolume(0)
TASK.new(task_fadeIn,BGM.playing)
else
BGM.playing:setVolume(volume)
BGM.playing:play()
end
BGM.lastPlayed=BGM.nowPlay
BGM.playing:seek(0)
BGM.playing:play()
@@ -148,10 +159,15 @@ function BGM.init(list)
BGM.playing:play()
end
end
function BGM.stop()
function BGM.stop(args)
args=args or""
TASK.removeTask_code(task_fadeIn)
if BGM.nowPlay then
TASK.new(task_fadeOut,BGM.playing)
if not STRING.sArg(args,'-s')then
if BGM.nowPlay then
TASK.new(task_fadeOut,BGM.playing)
end
else
BGM.playing:pause()
end
BGM.nowPlay,BGM.playing=nil
end

View File

@@ -7,10 +7,10 @@ function FILE.load(name,args)
assert(F:open'r','open error')
local s=F:read()F:close()
local mode=
args:sArg'-luaon'and'luaon'or
args:sArg'-lua'and'lua'or
args:sArg'-json'and'json'or
args:sArg'-string'and'string'or
STRING.sArg(args,'-luaon')and'luaon'or
STRING.sArg(args,'-lua')and'lua'or
STRING.sArg(args,'-json')and'json'or
STRING.sArg(args,'-string')and'string'or
s:sub(1,6)=='return{'and'luaon'or
(s:sub(1,1)=='['and s:sub(-1)==']'or s:sub(1,1)=='{'and s:sub(-1)=='}')and'json'or
'string'
@@ -48,12 +48,12 @@ function FILE.load(name,args)
end
function FILE.save(data,name,args)
if not args then args=''end
if args:sArg'-d'and fs.getInfo(name)then
if STRING.sArg(args,'-d')and fs.getInfo(name)then
error('duplicate')
end
if type(data)=='table'then
if args:sArg'-luaon'then
if STRING.sArg(args,'-luaon')then
data=TABLE.dump(data)
if not data then
error('encode error')

View File

@@ -18,7 +18,7 @@ function FONT.rawset(s)
end
function FONT.load(fonts)
for name,path in next,fonts do
assert(love.filesystem.getInfo(path),("Font file $1($2) not exist!"):repD(name,path))
assert(love.filesystem.getInfo(path),STRING.repD("Font file $1($2) not exist!",name,path))
fontFiles[name]=love.filesystem.newFile(path)
fontCache[name]={}
end

View File

@@ -70,15 +70,25 @@ local gc_draw,gc_line,gc_circle,gc_print=gc.draw,gc.line,gc.circle,gc.print
local WIDGET,SCR,SCN=WIDGET,SCR,SCN
local xOy=SCR.xOy
local ITP=xOy.inverseTransformPoint
local max,min=math.max,math.min
local devMode
local mx,my,mouseShow,cursorSpd=640,360,false,0
local jsState={}--map, joystickID->axisStates: {axisName->axisVal}
local errData={}--list, each error create {mes={errMes strings},scene=sceneNameStr}
local devMode
local function drawCursor(_,x,y)
gc_setColor(1,1,1)
gc_setLineWidth(2)
gc_circle(ms.isDown(1)and'fill'or'line',x,y,6)
end
local showPowerInfo=true
local showClickFX=true
local discardCanvas=false
local frameMul=100
local onQuit=NULL
local batteryImg=GC.DO{31,20,
{'fRect',1,0,26,2},
@@ -152,7 +162,7 @@ local function _triggerMouseDown(x,y,k)
if SCN.mouseDown then SCN.mouseDown(x,y,k)end
WIDGET.press(x,y,k)
lastX,lastY=x,y
if SETTING.clickFX then SYSFX.newTap(3,x,y)end
if showClickFX then SYSFX.newTap(3,x,y)end
end
local function mouse_update(dt)
if not KBisDown('lctrl','rctrl')and KBisDown('up','down','left','right')then
@@ -260,7 +270,7 @@ function love.touchreleased(id,x,y)
if SCN.touchUp then SCN.touchUp(x,y)end
if(x-lastX)^2+(y-lastY)^2<62 then
if SCN.touchClick then SCN.touchClick(x,y)end
if SETTING.clickFX then SYSFX.newTap(3,x,y)end
if showClickFX then SYSFX.newTap(3,x,y)end
end
end
@@ -324,7 +334,7 @@ function love.keypressed(key,_,isRep)
elseif key=='space'or key=='return'then
mouseShow=true
if not isRep then
if SETTING.clickFX then SYSFX.newTap(3,mx,my)end
if showClickFX then SYSFX.newTap(3,mx,my)end
_triggerMouseDown(mx,my,1)
end
else
@@ -452,7 +462,7 @@ function love.gamepadpressed(_,key)
if W and W.arrowKey then W:arrowKey(key)end
elseif key=='return'then
mouseShow=true
if SETTING.clickFX then SYSFX.newTap(3,mx,my)end
if showClickFX then SYSFX.newTap(3,mx,my)end
_triggerMouseDown(mx,my,1)
else
if W and W.keypress then
@@ -627,14 +637,6 @@ local wsImg={}do
}
end
local function drawCursor(_,x,y)
gc_setColor(1,1,1)
gc_setLineWidth(2)
gc_circle(ms.isDown(1)and'fill'or'line',x,y,6)
end
local function showPowerInfo()return true end
local onQuit=NULL
function love.run()
local love=love
@@ -649,7 +651,7 @@ function love.run()
local FPS,MINI=love.timer.getFPS,love.window.isMinimized
local PUMP,POLL=love.event.pump,love.event.poll
local timer,SETTING,VERSION=love.timer.getTime,SETTING,VERSION
local timer,VERSION=love.timer.getTime,VERSION
local frameTimeList={}
local lastFrame=timer()
@@ -698,7 +700,7 @@ function love.run()
--DRAW
if not MINI()then
FCT=FCT+SETTING.frameMul
FCT=FCT+frameMul
if FCT>=100 then
FCT=FCT-100
@@ -720,7 +722,7 @@ function love.run()
MES_draw()
gc_replaceTransform(SCR.origin)
--Draw power info.
if showPowerInfo()then
if showPowerInfo then
gc_setColor(1,1,1)
gc_draw(infoCanvas,safeX,0,0,SCR.k)
end
@@ -794,13 +796,13 @@ function love.run()
gc_present()
--SPEED UPUPUP!
if SETTING.cleanCanvas then gc_discard()end
if discardCanvas then gc_discard()end
end
end
--Fresh power info.
if time-lastFreshPow>2.6 then
if showPowerInfo()then
if showPowerInfo then
updatePowerInfo()
lastFreshPow=time
end
@@ -830,7 +832,12 @@ local Z={}
Z.js=jsState
Z.errData=errData
function Z.setIfPowerInfo(func)showPowerInfo=func end
function Z.setPowerInfo(bool)showPowerInfo=bool end
function Z.setCleanCanvas(bool)discardCanvas=bool end
function Z.setFrameMul(n)frameMul=n end
function Z.setClickFX(bool)showClickFX=bool end
--[Warning] Color and line width is uncertain value, set it in the function.
function Z.setCursor(func)drawCursor=func end

View File

@@ -6,7 +6,7 @@ local find,sub,gsub,upper=string.find,string.sub,string.gsub,string.upper
local char,byte=string.char,string.byte
--"Replace dollars", replace all $n with ...
function string.repD(str,...)
function STRING.repD(str,...)
local l={...}
for i=#l,1,-1 do
str=gsub(str,'$'..i,l[i])
@@ -15,7 +15,7 @@ function string.repD(str,...)
end
--"Scan arg", scan if str has the arg (format of str is like "-json -q", arg is like "-q")
function string.sArg(str,switch)
function STRING.sArg(str,switch)
if find(str.." ",switch.." ")then
return true
end

View File

@@ -71,6 +71,8 @@ mStr=GC.mStr
mText=GC.simpX
mDraw=GC.draw
Snd=SFX.playSample
string.repD=STRING.repD
string.sArg=STRING.sArg
--Delete all naked files (from too old version)
FILE.clear('')
@@ -123,9 +125,10 @@ end})
table.insert(_LOADTIMELIST_,("Load Parts: %.3fs"):format(TIME()-_LOADTIME_))
--Init Zframework
Z.setIfPowerInfo(function()
return SETTING.powerInfo and LOADED
end)
Z.setCleanCanvas(SETTING.cleanCanvas)
Z.setFrameMul(SETTING.frameMul)
Z.setClickFX(SETTING.clickFX)
do--Z.setCursor
local normImg=GC.DO{16,16,
{'fCirc',8,8,4},

View File

@@ -36,6 +36,7 @@ return{
end,
hook_drop=function(P)
local D=P.modeData
D.drought=P.lastPiece.id==7 and 0 or D.drought+1
if P.stat.row>=D.target then
if D.target==110 then
P.gameEnv.drop,P.gameEnv.lock=2,2

View File

@@ -36,6 +36,7 @@ return{
end,
hook_drop=function(P)
local D=P.modeData
D.drought=P.lastPiece.id==7 and 0 or D.drought+1
if P.stat.row>=D.target then
if D.target==100 then
P:win('finish')

View File

@@ -749,7 +749,7 @@ do--function resetGameData(args)
BGM.play(type(bgm)=='string'and bgm or type(bgm)=='table'and bgm[math.random(#bgm)])
TEXT.clear()
if GAME.modeEnv.eventset=='royale'then
if GAME.modeEnv.eventSet=='royale'then
for i=1,#PLAYERS do
PLAYERS[i]:changeAtk(randomTarget(PLAYERS[i]))
end

View File

@@ -799,6 +799,11 @@ return{
"term",
"Vibrate your finger on the controller to achieve faster sideways movement speed than holding it.\nIt is most commonly used on classic Tetris where DAS is rather slow. In most cases, you do not need to hypertap in modern Tetris games, because their DAS is often fast enough.",
},
{"Rolling",
"rolling",
"term",
"Another method of fast-tapping in high-gravity (around 1G) modes (with slow DAS/ARR setting).\nWhen you perform rolling, you fix the position of one hand and the controller, and then tap the back of the controller with fingers on your other hand repeatedly. This method allows even faster moving speeds than hypertapping (see \"Hypertapping\" for more)and requires much less effort.\nThis method was first discovered by Cheez-fish and he has once achieved a tapping speed of more than 20 Hz.",
},
{"Passthrough",
"passthrough pingthrough",
"term",

View File

@@ -121,190 +121,192 @@ return{
{"Tetr.js",
"网页 手机 tetrjs",
"game",
"简称屁块,全平台网页版单机方块点击即玩,有对新人比较友好的全自定义(大多数常用功能),手机只能选几个默认按键组不能自由摆放;别的都很好",
"网页游戏 | 单机 | 支持移动端\n简称屁块因为作者网名叫Farter。设置内容足够专业模式很多但画面很简单几乎没有动画而且移动端只有几套固定的按键组合(不能自由拖放)",
"http://farter.cn/t",
},
{"Tetra Legends",
"网页 tl tetralegends",
"game",
"简称TL全平台网页版单机方块点击即玩推荐使用电脑移动设备需要外接键盘第一次加载可能很慢除了手感不够舒适以外功能比较强大动效很好看还把很多别的游戏不可见的机制可视化了,游戏体验很好。\n\n注:包含节奏模式!\n\n2020年12月基本确定由于各种原因不再继续开发",
"网页游戏 | 单机 | [服务器在国外可能卡]\n简称TL。单机模式比较丰富有两个隐藏的节奏模式并且将一些其他游戏不可见的机制进行了可视化,动效也很多。在2020年12月基本确定由于各种原因不再继续开发",
"https://tetralegends.app",
},
{"Ascension",
"网页 asc ascension",
"game",
"简称ASC全平台网页版单机方块点击即玩第一次加载可能很慢使用自己的ASC旋转系统有不少单机模式本游戏的堆积模式就来自ASC对战模式目前处在测试阶段2021/08/20",
"网页游戏 | 单机/多人 | [服务器在国外可能卡]\n简称ASC使用自己的ASC旋转系统有不少单机模式本游戏的堆积模式就来自ASC对战模式目前处在测试阶段2021/12/15",
"https://asc.winternebs.com",
},
{"Jstris",
"网页 手机 js jstris",
"game",
"简称JS全平台网页对战方块点击即玩服务器在国外国内访问可能很卡。有常用的科研向单机模式和自定义各种参数的功能但没有很多强制速度向的挑战项目。都是纯色素材导致画面效果不怎么好。移动端的键位设置并不舒适",
"网页游戏 | 单机/多人 | 支持移动端 | [服务器在国外可能卡]\n简称JS有常用的科研向单机模式和自定义各种参数的功能允许拖放固定尺寸的正方形虚拟按键。画面效果完全没有一个动画都没有",
"https://jstris.jezevec10.com",
},
{"TETR.IO",
"网页 io tetrio",
"game",
"简称IO炫酷在线对战方块点击即玩。推荐使用电脑移动设备需要外接键盘服务器在国外国内访问可能超级慢甚至打不开此外Safari浏览器似乎也打不开。有很科学的排位系统自定义功能非常全面同时也提供电脑客户端下载可以去除广告。缺点是单机模式非常非常少。",
"网页游戏 | 单机/多人 | [服务器在国外可能卡]\n简称IO有排位系统和功能全面的自定义模式单机模式只有三个。有电脑客户端下载优化性能无广告\n[Safari浏览器似乎打不开]",
"https://tetr.io",
},
{"Nuketris",
"网页 nuketris he",
"game",
"在线对战网页方块点击即玩(推荐使用电脑,服务器在国外可能很卡)。\n有几个基础单机模式和1V1排位。",
"网页游戏 | 单机/多人 | [服务器在国外可能卡]\n有几个基础单机模式和1V1排位。",
"https://nuketris.herokuapp.com/",
},
{"Worldwide Combos",
"网页 wwc worldwidecombo",
"game",
"简称WWC网页全世界匹配制1对1方块点击即玩\n(服务器在国外可能很卡)",
"网页游戏 | 单机/多人 | [服务器在国外可能卡]\n简称WWC全世界匹配制1V1。特色有录像战匹配的对手可以不是真人几种不同风格的大规则炸弹垃圾行对战。",
"https://worldwidecombos.com",
},
{"Tetris Friends",
"网页 tf tetrisfriends",
"game",
"简称TF已经关服了的网页版方块曾经是一个不错的对战平台\n现在有人架了私服(怀旧服?)",
"网页游戏 | 单机/多人\n简称TF已经关服了的网页版方块。以前人比较多后来官服倒闭了热度下去了不过现在有人架了私服还可以体验到。",
"https://notrisfoes.com",
},
{"Tetris.com",
"tetris online official",
"game",
"tetris.com官网上的俄罗斯方块只有马拉松一种模式特色是支持基于鼠标指针位置的智能控制。",
"网页游戏 | 单机 | 支持移动端\ntetris.com官网上的俄罗斯方块只有马拉松一种模式特色是支持基于鼠标指针位置的智能控制。",
},
{"Tetris Gems",
"宝石 tetris online official gems",
"game",
"tetris.com官网上的俄罗斯方块限时1分钟挖掘有重力机制。\n有三种消除后可以获得不同功能的宝石方块。",
"网页游戏 | 单机\ntetris.com官网上的俄罗斯方块限时1分钟挖掘有重力机制。\n有三种消除后可以获得不同功能的宝石方块。",
},
{"Tetris Mind Bender",
"技能 tetris online official mindbender",
"game",
"tetris.com官网上的俄罗斯方块在马拉松基础上添加了技能场地上会随机冒出技能方块消除后会得到各种各样或好或坏的技能。",
"网页游戏 | 单机\ntetris.com官网上的俄罗斯方块在马拉松基础上添加了技能场地上会随机冒出技能方块消除后会得到各种各样或好或坏的技能。",
},
--游戏(跨平台)
{"Techmino",
"铁壳米诺 techmino tieke",
"game",
"跨平台 | 单机/多人\n简称Tech使用LÖVE引擎开发的方块单机模式和各种设置都很齐全联机正在逐渐开发中。",
},
{"Falling Lightblock",
"手机 fl fallinglightblock",
"game",
"跨平台 | 单机/多人\n一个全平台块横竖屏有延迟并且不可调。手机支持自定义键位主要玩法基于NES块设计也有现代模式。对战为半即时半回合制无攻击缓冲不可抵消。"
},
{"Cambridge",
"剑桥 cambridge",
"game",
"跨平台 | 单机\n使用LÖVE引擎开发的一款方块游戏致力于创建一个轻松高度自定义新模式的方块平台。最初由Joe Zeng开发于2020.10.8日的0.1.5版开始Milla接管了开发。 — Tetris Wiki.",
},
{"Nanamino",
"nanamino",
"game",
"Windows/Android | 单机\n块圈玩家自制方块,正在开发中,有一个原创旋转系统。",
},
--游戏(街机/类街机)
{"TGM",
"俄罗斯方块大师 tgm3 tetrisgrandmaster",
"game",
"全称Tetris The Grand Master一个街机平台方块系列S13/GM等称号出自该系列可以在Windows平台运行。\n\n其中TGM3目前玩得最普遍部分模式说明\n\nMaster大师模式有段位评价拿到更高段位点的要求非消一的连击和消四字幕战中消除和通关每100的前70小于【标准时间上一个0~70秒数+2】中小的一个每100总用时不能超过限定值不然取消上一个方法的加分并反扣点数到500若没有进标准时间会强制结束游戏称为铁门字幕战有两个难度半隐和全隐后者必须拿到几乎全部的段位点才能进消除奖励的段位点也更多。\n\nShirase死亡模式类似于techmino中的20G-极限开局就是高速20G500和1000有铁门500开始底下开始涨垃圾行1000开始出现骨块1300通关进入大方块字幕战段位结算每通100加1段从S1到S13如果通关了字幕战就会有金色的S13\n\n更多内容详见链接",
"Windows | 单机/本地双人\n全称Tetris The Grand Master一个街机方块系列S13/GM等称号出自该系列可以在Windows平台运行。\n\n其中TGM3目前玩得最普遍部分模式说明\n\nMaster大师模式有段位评价拿到更高段位点的要求非消一的连击和消四字幕战中消除和通关每100的前70小于【标准时间上一个0~70秒数+2】中小的一个每100总用时不能超过限定值不然取消上一个方法的加分并反扣点数到500若没有进标准时间会强制结束游戏称为铁门字幕战有两个难度半隐和全隐后者必须拿到几乎全部的段位点才能进消除奖励的段位点也更多。\n\nShirase死亡模式类似于techmino中的20G-极限开局就是高速20G500和1000有铁门500开始底下开始涨垃圾行1000开始出现骨块1300通关进入大方块字幕战段位结算每通100加1段从S1到S13如果通关了字幕战就会有金色的S13\n\n更多内容详见链接",
"http://teatube.ltd/TGMGUIDE/",
},
{"DTET",
"dtet",
"game",
"一个Windows平台方块基于经典规则加入了20G和一个强大的旋转系统,手感非常好,但是除了键位都不可自定义,能习惯经典出块方向的玩家可以玩(就是有点难找到,找到可能还要自己装缺了的DLL文件。",
"Windows | 单机\n单机方块游戏基于经典规则加入了20G和一个强大的旋转系统但是除了键位其他参数都不可自定义有点难找到,而且找到可能还要自己补齐缺的DLL文件。",
},
{"Heboris",
"hb heboris",
"game",
"一个Windows平台方块,仿街机,可以模拟多个方块游戏的部分模式。",
"Windows | 单机\n一个仿街机方块游戏,可以模拟多个方块游戏的部分模式。",
},
{"Texmaster",
"txm texmaster",
"game",
"简称Tex一个Windows平台方块包含TGM的所有模式可以用来练习TGM手感比真版较好,不足的是World规则不完全一样如软降到底无锁延踢墙表有细节不同等",
},
{"Cambridge",
"剑桥 cambridge",
"game",
"一个Windows/macOS/Linux平台方块是基于Lua的方块游戏引擎致力于创建一个轻松高度自定义新模式的方块平台。最初由Joe Zeng开发于2020.10.8日的0.1.5版开始Milla接管了开发。\n--Tetris Wiki",
"Windows | 单机\n简称Tex包含TGM的所有模式可以用来练习TGM手感较好,但World规则不完全一样如软降到底无锁延踢墙表有细节不同等",
},
--游戏(PC/主机/手机
{"Techmino",
"铁壳米诺 techmino tieke",
--游戏(其他
{"Tetris Effect",
"效应 tec tetriseffectconnected xiaoyinglianjie",
"game",
"简称TechWindows/Android/Linux/macOS/iOS方块单机模式和各种设置都很齐全联机正在逐渐开发中输入延迟很小手感很好",
"PlayStation, Windows, Oculus Quest, Xbox, Nintendo Switch | 单机/多人\n简称TE特效方块游戏。不带Connected的基础版本没有多人模式。\n拓展版本Tetris Effect: Connected增加了联网对战包含Boss战、Zone对战、经典块对战和分数对战四个模式",
},
{"Tetris 99",
"吃鸡 t99 tetris99 ns",
"吃鸡 t99 tetris99",
"game",
"简称T99Nintendo Switch端方块主玩99人混战的吃鸡模式 战术比重比较大胜率不只由玩家在平时1V1时的水平决定。\n也有一些常用单机模式如马拉松等。",
"Nintendo Switch | 单机/多人\n简称T99主玩99人混战的吃鸡模式战术比重比较大胜率不只由玩家在平时1V1时的水平决定。\n也有一些常用单机模式如马拉松等。",
},
{"Puyo Puyo Tetris",
"噗哟方块 ppt puyopuyotetris",
"game",
"简称PPT多平台方块Steam PC版相对NS版手感和网络等都不太好,将 Tetris 和 Puyo Puyo 两个下落消除游戏放到一个游戏里, 二者可以对战, 联机单机模式都很多,很有趣",
"Nintendo Switch, PlayStation, Xbox, Windows | 单机/多人\n简称PPT,将 Tetris 和 Puyo Puyo 两个下落消除游戏放到一个游戏里,二者可以对战,联机单机模式都很多。另有一拓展版本Puyo Puyo Tetris 2。\n[Steam PC版相对NS版手感和网络等都不太好]",
},
{"Tetris Online",
"top tetris online study",
"game",
"简称TO[服务器名首字母]一个Windows平台方块主要用来6人内对战/单挑/刷每日40L榜/挖掘模式/打机器人。支持自定义DAS/ARR但都不能到0,有一点输入延迟但问题不大,是新人入块圈不错的选择。\n\n现在还开着的服务器有:\n\tTO-P波兰服服务器在波兰可能会卡顿\n\tTO-S研究服研究群群友自己开的服很稳定需要进群注册\n\tTO-X千雪服VUP星月千雪于20年9月开的服还处于实验阶段",
"Windows | 单机/多人\n简称TO主要用来6人内对战/单挑/刷每日40L榜/挖掘模式/打机器人。支持自定义DAS/ARR但都不能到0\n现在还开着的服务器有:\nTO-P波兰服服务器在波兰可能会卡顿\nTO-S研究服研究群群友自己开的服很稳定需要进群注册\nTO-X千雪服VUP星月千雪于20年9月开的服还处于实验阶段",
},
{"Tetra Online",
"to tetraonline",
"game",
"简称TOPC方块打开Steam免费下载即玩现在已经没了开发团队只有Dr.Ocelot和Mine两个人(都没有很多开发经验)UI部分模仿PPT手感故意设计为较慢,平时玩无延迟方块的玩家会很不习惯,音乐不错,攻击特效好看。\n\n2020年12月9日收到来自TTC的DCMA警告信于是被迫停止开发在一段时间后关服并下架。",
},
{"Tetris Effect",
"效应 tec tetriseffectconnect",
"game",
"简称TEC一个Windows/PS/Xbox/Oculus Quest 平台方块, 特效方块游戏,只有单机模式,手感不算太好,想看特效的可以一试, 只是去玩方块的不是很建议。\n\n有一个拓展版本 Tetris Effect: Connected 增加了联网对战, 包含普通对战, Zone 对战经典对战和Boss战四个模式。",
"Windows, macOS, Linux | 单机/多人\n简称TODr.Ocelot和Mine两人开发UI部分模仿PPT音乐不错,攻击特效好看。\n故意设计为延迟较多,平时玩无延迟方块的玩家可能会不习惯。\n2020年12月9日收到来自TTC的DCMA警告信于是被迫停止开发在一段时间后关服并下架Steam",
},
{"Cultris II",
"文艺方块 c2 cultris2 cultrisii",
"game",
"简称C2一个Windows/Linux/macOS平台方块,设计基于经典规则出发,支持自定义DAS/ARR对战的主要玩法是基于时间的连击考验玩家速度/Wide打法/挖掘。\n\n游戏作者因为太久没有更新Mac版导致macOS Catalina 以后的系统完全无法运行。",
"Windows/macOS/Linux | 单机/多人\n简称C2设计基于经典规则出发支持自定义DAS/ARR对战的主要玩法是基于时间的连击考验玩家速度/Wide打法/挖掘。\n游戏作者因为太久没有更新Mac版导致macOS Catalina 以后的系统完全无法运行。",
},
{"Nullpomino",
"np nullpomino",
"game",
"简称NP一个Windows平台方块,整个游戏自定义程度极高,几乎任何参数都可以自己设置,是一个专业级方块,不太适合新人上手,连菜单都不太好搞清楚",
},
{"俄罗斯方块环游记",
"环游记 huanyouji tetris journey",
"game",
"简称环游记,安卓/iOS平台方块国内第一款正版授权手游方块。有闯关模式、对战模式和几个单机模式。规则同现代方块可以自定义虚拟按键的大小和位置但是不能自定义DAS/ARR。\n对战模式每次2分钟如果时间耗尽双方都没有Top Out就判定打出攻击较高的玩家胜利。",
},
{"Tetris Blitz",
"闪电战 tetris blitz ea",
"game",
"简称闪电战EA代理的一款移动端方块有重力连锁机制限时2分钟游戏开始会掉下一堆小方块持续消行会进入Frenzy模式场地下方会不断冒出垃圾行帮助玩家制造大连锁如果多次落块没有消行会强制结束Frenzy。有非常多的道具。\n此外这款游戏似乎没有top-out机制。当新出现的方块与场地现有方块重叠时场地最上方的几行会被自动清除。\n\n已于2020年4月下架。",
},
{"Tetris (EA)",
"tetris ea",
"game",
"EA代理的一款宇宙主题的移动端方块。有滑动操控和单点触控两种操作模式除经典的马拉松外还有一个星系模式地图挖掘有重力连锁机制目标是在限定块数内消除所有地图块。\n\n已于2020年4月下架。"
},
{"Tetris Beat",
"节奏 tetris beat n3twork",
"game",
"N3TWORK代理的一款移动端方块有马拉松、3分钟限时打分和Royale最多100人对战模式。UI比较好看但不支持自定义键位而且默认的按钮很小手感不好。",
},
{"Tetris (N3TWORK)",
"Tetris n3twork",
"game",
"N3TWORK代理的一款移动端方块有马拉松、限时打分和Royale最多99人对战模式。UI比较好看但不支持自定义键位而且默认的按钮很小手感不好。"
},
{"Touhoumino",
"东方 车万 偷猴 touhoumino chewan dongfang touhou th",
"game",
"玩家自制Windows平台方块东方主题其实就是一个Nullpomino的自带资源包的改版将东方Project元素结合到俄罗斯方块的游戏好玩但是难度较大适合有方块基础并且各项能力都较强的玩家游玩不然都不知道自己怎么死的",
},
{"Nanamino",
"nanamino",
"game",
"块圈玩家自制Windows/Android平台方块正在开发中有一个非常有趣的原创旋转系统。",
"Windows/macOS/Linux | 单机/多人\n简称NP,整个游戏自定义程度极高,几乎任何参数都可以自己设置,是一个专业级方块,不过ui风格比较老需要全键盘操作刚开始可能不习惯",
},
{"Misamino",
"回合制 misamino",
"game",
"块圈玩家自制Windows平台方块单机1v1主玩回合制模式可以自定义AI自己写的话需要了解接口",
"Windows | 单机\n块圈玩家自制方块单机1v1主玩回合制模式可以自定义AI自己写的话需要了解接口",
},
{"Touhoumino",
"东方 车万 touhoumino chewan dongfang th",
"game",
"Windows | 单机\n块圈玩家自制方块一个Nullpomino的自带资源包的改版将东方Project元素与俄罗斯方块结合。马拉松模式结合了东方Project里的”符卡”机制需要在一定时间内达成目标分数才能击破。\n难度较大,适合有方块基础并且各项能力都较强的玩家游玩(不然都不知道自己怎么死的)。",
},
{"Tetris Blitz",
"闪电战 tetris blitz ea",
"game",
"iOS/Android | 单机/多人\n简称闪电战EA代理的一款移动端方块有重力连锁机制限时2分钟游戏开始会掉下一堆小方块持续消行会进入Frenzy模式场地下方会不断冒出垃圾行帮助玩家制造大连锁如果多次落块没有消行会强制结束Frenzy。有非常多的道具。\n当新出现的方块与场地现有方块重叠时场地最上方的几行会被自动清除游戏不结束。已于2020年4月下架。",
},
{"Tetris (EA)",
"tetris ea",
"game",
"iOS/Android | 单机\nEA代理的一款宇宙主题的移动端方块。有滑动操控和单点触控两种操作模式除经典的马拉松外还有一个星系模式地图挖掘有重力连锁机制目标是在限定块数内消除所有地图块。\n已于2020年4月下架。",
},
{"Tetris Beat",
"节奏 tetris beat n3twork",
"game",
"iOS | 单机\nN3TWORK代理的一款移动端方块。除了马拉松以外游戏还有一个“Beat”模式但只需根据BGM的节奏落块就可以得到额外分数。\n[特效比较瞎眼,不支持自定义键位,而且默认的按钮也很小导致控制也不是很舒服]",
},
{"Tetris (N3TWORK)",
"Tetris n3twork",
"game",
"iOS/Android | 单机/多人\nN3TWORK代理的一款移动端方块有马拉松、3分钟限时打分和Royale最多100人对战模式。\n[UI设计比较不错但不支持自定义键位而且默认的按钮也很小导致控制也不是很舒服]",
},
{"俄罗斯方块环游记",
"环游记 huanyouji tetris journey",
"game",
"iOS/Android | 单机/多人\n简称环游记国内第一款正版授权手游方块。有闯关模式、对战模式和几个单机模式。闯关模式有各种各样有趣规则大多数有重力连锁对战规则同现代方块可以自定义虚拟按键的大小和位置但是不能自定义DAS/ARR。",
},
{"JJ块",
"手机 jj gougou",
"game",
"JJ棋牌平台下一个休闲游戏安卓百度“JJ比赛”官网下载平台后可以找到找不到的原因是iOS系统或者没在官网下载或者被限制不可直接访问游戏。竖屏输入延迟很小超流畅可自定义DAS/ARR/20G软降简单自定义键位无Hold没有B2B无攻击缓冲不可抵消每次攻击上限为4连击较强其他同现代方块。",
},
{"Falling Lightblock",
"手机 fl fallinglightblock",
"game",
"一个全平台块横竖屏有延迟并且不可调。手机支持自定义键位主要玩法基于NES块设计也有现代模式。对战为半即时半回合制无攻击缓冲不可抵消。",
"Android | 单机/多人\nJJ棋牌平台下一个休闲游戏安卓百度“JJ比赛”官网下载平台后可以找到找不到的原因是iOS系统或者没在官网下载或者被限制不可直接访问游戏。竖屏输入延迟很小可自定义DAS/ARR/20G软降简单自定义键位无Hold没有B2B无攻击缓冲不可抵消每次攻击上限为4连击较强其他同现代方块。",
},
{"火拼俄罗斯",
"火拼俄罗斯 腾讯 huopin qq tencent",
"game",
"腾讯游戏大厅的方块, 场地12列 打字的 DAS 和 ARR 1 Next 无 Hold 攻击途径只有消4打3、 消3打2 垃圾行为国际象棋棋盘式, 几乎不可能挖掘。",
"Windows | 多人\n腾讯游戏大厅的方块场地12列打字的 DAS 和 ARR1 Next无 Hold攻击途径只有消4打3、 消3打2垃圾行为国际象棋棋盘式几乎不可能挖掘。",
},
--术语(缩写)
@@ -820,6 +822,11 @@ return{
"term",
"快速震动手指,实现比长按更快速+灵活的高速单点移动主要在经典块的高难度下因为das不可调而且特别慢高速下很容易md导致失败此时手动连点就比自动移动更快或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人称为“Hypertapper”。",
},
{"轮指 Rolling",
"轮指 rolling lunzhi liandian",
"term",
"另一种快速连点方法用于das/arr设置非常慢时的高重力(1G左右)模式。\n先把手柄键盘……可能也行吧悬空摆好比如架在腿上要连点某个键的时候一只手虚按按键另外一只手的几根手指轮流敲打手柄背面“反向按键”实现连点。这种控制方法可以让玩家更轻松地获得比直接抖动手指的hypertap(详见超连点词条)更快的控制速度。\n此方法最先由Cheez-fish发明他本人则使用rolling达到过超过20Hz的点击频率。",
},
{"穿透 Passthrough",
"穿透 passthrough pingthrough chuantou",
"term",

View File

@@ -1,25 +1,25 @@
return{
fallback='en',
sureQuit="Pulsa de nuevo para salir",
-- sureReset="Press again to reset",
-- sureDelete="Press again to delete",
sureReset="Pulsa de nuevo para reiniciar",
sureDelete="Pulsa de nuevo para borrar",
newDay="[Anti-adicción] ¡Nuevo día, nuevo comienzo!",
playedLong="[Anti-adicción] Estuviste jugando un buen rato hoy. Recuerda descansar de vez en cuando.",
playedTooMuch="[Anti-adicción] ¡Has jugado mucho por hoy! No puedes jugar más.",
-- settingWarn="Modifing uncommon setting, be careful!",
settingWarn="¡Ten cuidado con modificar esto!",
atkModeName={"Al azar","Medallas","KOs","Atacantes"},
royale_remain="$1 Jugadores Restantes",
cmb={nil,"Combo de 1","Combo de 2","Combo de 3","Combo de 4","Combo de 5","Combo de 6","Combo de 7","Combo de 8","Combo de 9","¡Combo de 10!","¡Combo de 11!","¡Combo de 12!","¡Combo de 13!","¡Combo de 14!","¡Combo de 15!","¡Combo de 16!","¡Combo de 17!","¡Combo de 18!","¡Combo de 19!","MEGACOMBO"},
spin="-spin",
clear={"Single","Doble","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
-- cleared="$1 lines",
cleared="$1 líneas",
mini="Mini",b2b="B2B ",b3b="B2B2B ",
PC="Perfect Clear",HPC="Half Clear",
replaying="[Repetición]",
tasUsing="[TAS]",
-- stage="Stage $1 completed",
stage="Fase $1 Completada",
great="¡Genial!",
awesome="¡Fantástico!",
almost="¡Casi!",
@@ -28,7 +28,7 @@ return{
speedup="¡Más rápido!",
missionFailed="Misión Fallida",
speedLV="Vel. de juego",
speedLV="Veloc. de juego",
piece="Piezas",line="Líneas",atk="Ataque",eff="Eficiencia",
rpm="RPM",tsd="TSD",
grade="Grado",techrash="Techrash",
@@ -50,25 +50,25 @@ return{
page="Página:",
-- cc_fixed="CC is incompatible with fixed sequences",
-- cc_swap="CC is incompatible with swap holdmode",
cc_fixed="CC no es compatible con piezas prefijadas",
cc_swap="CC no es compatible con Swap Hold",
ai_prebag="La IA no es compatible con piezas que no sean Tetrominos.",
ai_mission="La IA no es compatible con misiones personalizadas.",
switchSpawnSFX="Habilita los sonidos de aparición de las piezas ;)",
needRestart="Reinicia Techmino para que los cambios tengan efecto.",
-- loadError_errorMode="'$1' loading failed: no load mode '$2'",
-- loadError_read="'$1' loading failed: read failed",
-- loadError_noFile="'$1' loading failed no file:",
-- loadError_other="'$1' loading failed: $2",
-- loadError_unknown="'$1' loading failed: unknown reason",
loadError_errorMode="'$1' Error al cargar: no hay modo '$2'",
loadError_read="'$1' Error al cargar: error de lectura",
loadError_noFile="'$1' Error al cargar, no existe el archivo:",
loadError_other="'$1' Error al cargar: $2",
loadError_unknown="'$1' Error al cargar: desconocido",
-- saveError_duplicate="'$1' saving failed: duplicated filename",
-- saveError_encode="'$1' saving failed: encode failed",
-- saveError_other="'$1' saving failed: $2",
-- saveError_unknown="'$1' saving failed: unknown reason",
saveError_duplicate="'$1' Error al guardar: archivo duplicado",
saveError_encode="'$1' Error al guardar: error de encoding",
saveError_other="'$1' Error al guardar: $2",
saveError_unknown="'$1' Error al guardar: desconocido",
-- copyDone="Copied!",
copyDone="¡Copiado con éxito!",
saveDone="Datos guardados",
exportSuccess="Exportado con éxito",
importSuccess="Importado con éxito",
@@ -90,7 +90,7 @@ return{
replayBroken="No se puede cargar la repetición",
-- dictNote="==Copied from TetroDictionary==",
dictNote="==Copia de TetroDictionary==",
getNoticeFail="Error al buscar novedades.",
oldVersion="¡Está disponible la nueva versión $1!",
@@ -128,12 +128,12 @@ return{
chatHistory="------Nuevos mensajes------",
-- searchModeHelp="Type to search",
-- keySettingHelp="Press to bind key\nescape: cancel\nbackspace: delete",
-- customBGhelp="Drop image file here to apply custom background",
-- customBGloadFailed="Unsupport image format for custom background",
keySettingHelp="Pulsa la tecla a mapear\nEsc.: Cancelar\nBackspace: Borrar",
customBGhelp="Suelta una imagen aquí para aplicarla de fondo",
customBGloadFailed="Formato de imagen no soportado",
errorMsg="Ha ocurrido un error y Techmino necesita reiniciarse.\nSe creó un registro de error, puedes enviarlo al autor.",
-- tryAnotherBuild="[Invalid UTF-8] If you are on Windows, try downloading Techmino-win32 or Techmino-win64 (different from what you are using now).",
tryAnotherBuild="[UTF-8 Inválido] Si estás usando Windows, intenta descargar Techmino-win32 o Techmino-win64 (el que no estés usando ahora).",
-- modInstruction="",
-- modInfo={},--See lang_en.lua
@@ -174,7 +174,7 @@ return{
"Descargas desde otros sitios pueden contener malware/viruses, y en smartphones sólo requiere permisos de internet y vibración.",
"El autor no se responabiliza por daños ocasionados debido a modificaciones del juego.",
FNNS and"/"or"Por favor descarga las últimas versiones desde los sitios oficiales. El juego es gratuito",
-- FNNS and"/"or"Check Zictionary for more",
FNNS and"/"or"Ve el Zictionary (en inglés) para más info",
},
staff={
"Autor:MrZ Email: 1046101471@qq.com",
@@ -273,8 +273,8 @@ return{
lock="Retraso de Bloqueo",
wait="Retraso de Spawneo",
fall="Retraso de Línea",
-- hang="Death Delay",
-- hurry="ARE Interruption",
hang="Retraso de Muerte",
hurry="Interrupc. de ARE",
capacity="Capacidad",
create="Crear",
@@ -282,14 +282,14 @@ return{
ospin="O-Spin",
fineKill="100% Finesse",
b2bKill="No Romper B2B ",
-- lockout="Fail when lock out",
lockout="Derrota al ocurrir Lock Out",
easyFresh="Reinicio de Bloqueo Normal",
deepDrop="Deep Drop",
bone="Bone Block",
-- eventSet="Rule Set",
eventSet="Ruleset",
-- holdMode="Hold Mode",
holdMode="Modo de Reserva",
nextCount="Siguiente",
holdCount="Reserva",
infHold="Reserva Inft.",
@@ -298,13 +298,13 @@ return{
net_game={
ready="Estoy Listo",
spectate="Espectear",
-- cancel="Cancel ready",
cancel="Esperar",
},
setting_game={
title="Ajustes del Juego",
graphic="←Video",
sound="Sonido→",
-- style="Style",
style="Estilo",
ctrl="Sensibilidad",
key="Teclas",
@@ -313,10 +313,10 @@ return{
reTime="Retraso de Inicio",
RS="Sistema de Rotación",
menuPos="Pos. del Botón de Menú",
-- sysCursor="Use system cursor",
sysCursor="Usar cursor del sistema",
autoPause="Pausar cuando la ventana no está enfocada",
autoSave="Autograbar Récords",
-- autoLogin="Auto Login on Start",
autoLogin="Autologueo al Iniciar",
simpMode="Modo Sencillo",
},
setting_video={
@@ -344,13 +344,13 @@ return{
atkFX="FX Vis. de Ataque",
frame="Ratio de FPSs(%)",
-- FTlock="Frame-Time Lock",
FTlock="Bloqueo por frames",
text="Texto de Acciones",
score="Puntaje en Pantalla",
bufferWarn="Alerta de Búfer",
showSpike="Contador de Spike",
-- nextPos="Spawn Preview",
nextPos="Prever Spawn de Pzas.",
highCam="Cám. Vista Aérea",
warn="Alerta de Peligro",
@@ -359,9 +359,9 @@ return{
clean="Fast Draw",
fullscreen="Pant. Completa",
-- bg_on="Normal B.G.",
-- bg_on="No B.G.",
-- bg_custom="Use Custom B.G.",
bg_on="Fondo Normal",
bg_off="Sin Fondo",
bg_custom="Fondo Personalizado",
blockSatur="Saturac. de los Bloques",
fieldSatur="Saturac. del Tablero",
@@ -371,7 +371,7 @@ return{
game="←Juego",
graphic="Video→",
-- mainVol="Main Volume",
mainVol="Vol. Principal",
bgm="BGM",
sfx="SFX",
stereo="Estéreo",
@@ -380,9 +380,9 @@ return{
vib="Vibración",
voc="Voces",
-- autoMute="Mute while unfocused",
autoMute="Silenciar cuando la ventana no está enfocada",
fine="Sonido de Error de Finesse",
-- sfxPack="SFX Pack",
sfxPack="Pack de SFX",
vocPack="Pack de Voces",
apply="Aplicar",
},
@@ -460,8 +460,8 @@ return{
lock="Retraso de Bloqueo",
wait="Retraso de Spawneo",
fall="Retraso de Línea",
-- hang="Death Delay",
-- hurry="ARE Interruption",
hang="Retraso de Muerte",
hurry="Interrupc. de ARE",
bg="Fondo",
bgm="Música",
@@ -478,9 +478,9 @@ return{
sequence="Editar Secuencia (S)",
mission="Editar Misiones (M)",
-- eventSet="Rule Set",
eventSet="Ruleset",
-- holdMode="Hold Mode",
holdMode="Modo de Reserva",
nextCount="Siguiente",
holdCount="Reserva",
infHold="Reserva Inft.",
@@ -499,7 +499,7 @@ return{
ospin="O-Spin",
fineKill="100% Finesse",
b2bKill="No Romper B2B ",
-- lockout="Fail when lock out",
lockout="Derrota al ocurrir Lock Out",
easyFresh="Reinicio de Bloqueo Normal",
deepDrop="Deep Drop",
bone="Bone Block",
@@ -534,7 +534,7 @@ return{
about={
staff="Staff",
his="Hist. de Acts.",
-- legals="Legals",
legals="Legalidades",
},
dict={
title="TetroDictionary",
@@ -558,7 +558,7 @@ return{
sfx="SFX",
voc="Voces",
music="BGMs",
-- label="label",
label="Etiq.",
},
login={
title="Entrar",
@@ -645,7 +645,7 @@ return{
['dig_100l']= {"Queso", "100L", "Limpia 100 líneas de queso."},
['dig_400l']= {"Queso", "400L", "Limpia 400 líneas de queso."},
['drought_n']= {"Sequía", "100L", "¡Sin piezas I!"},
['drought_l']= {"Sequía+", "100L", "Guat de foc..."},
['drought_l']= {"Sequía+", "100L", "Qué es esto..."},
['marathon_n']= {"Maratón", "Normal", "Maratón de 200 líneas con velocidad en aumento."},
['marathon_h']= {"Maratón", "Difícil", "Maratón de 200 líneas a velocidad máxima."},
['solo_e']= {"VS.", "Fácil", "¡Derrota a la CPU!"},
@@ -653,12 +653,12 @@ return{
['solo_h']= {"VS.", "Difícil", "¡Derrota a la CPU!"},
['solo_l']= {"VS.", "Lunático", "¡Derrota a la CPU!"},
['solo_u']= {"VS.", "Supremo", "¡Derrota a la CPU!"},
['techmino49_e']= {"Tech 49", "Fácil", "Batalla de 49 jugadores. ¡El último en pie gana!"},
['techmino49_h']= {"Tech 49", "Difícil", "Batalla de 49 jugadores. ¡El último en pie gana!"},
['techmino49_u']= {"Tech 49", "Supremo", "Batalla de 49 jugadores. ¡El último en pie gana!"},
['techmino99_e']= {"Tech 99", "Fácil", "Batalla de 99 jugadores. ¡El último en pie gana!"},
['techmino99_h']= {"Tech 99", "Difícil", "Batalla de 99 jugadores. ¡El último en pie gana!"},
['techmino99_u']= {"Tech 99", "Supremo", "Batalla de 99 jugadores. ¡El último en pie gana!"},
['techmino49_e']= {"Tech 49", "Fácil", "Batalla de 49 jugadores.\n¡El último en pie gana!"},
['techmino49_h']= {"Tech 49", "Difícil", "Batalla de 49 jugadores.\n¡El último en pie gana!"},
['techmino49_u']= {"Tech 49", "Supremo", "Batalla de 49 jugadores.\n¡El último en pie gana!"},
['techmino99_e']= {"Tech 99", "Fácil", "Batalla de 99 jugadores.\n¡El último en pie gana!"},
['techmino99_h']= {"Tech 99", "Difícil", "Batalla de 99 jugadores.\n¡El último en pie gana!"},
['techmino99_u']= {"Tech 99", "Supremo", "Batalla de 99 jugadores.\n¡El último en pie gana!"},
['round_e']= {"Por Turnos", "Fácil", "Modo ajedrez."},
['round_n']= {"Por Turnos", "Normal", "Modo ajedrez."},
['round_h']= {"Por Turnos", "Difícil", "Modo ajedrez."},
@@ -666,15 +666,15 @@ return{
['round_u']= {"Por Turnos", "Supremo", "Modo ajedrez."},
['master_n']= {"Master", "Normal", "Para principiantes en 20G"},
['master_h']= {"Master", "Difícil", "¡Desafío profesional de 20G!"},
-- ['master_m']= {"Master", "M21", "For 20G Masters."},
['master_final']= {"Master", "FINAL", "El verdadero 20G Supremo: el final es inalcanzable."},
['master_ex']= {"GrandMaster", "EXTRA", "Para ser un gran maestro, acepta este desafío"},
['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
-- ['strategy_e_plus']={"Strategi", "MUDAH+", "Keputusan 20G cepat"},
-- ['strategy_h_plus']={"Strategi", "SULIT+", "Keputusan 20G cepat"},
-- ['strategy_u_plus']={"Strategi", "TERAKHIR+", "Keputusan 20G cepat"},
['master_m']= {"Master", "M21", "Para Maestros del 20G."},
['master_final']= {"Master", "FINAL", "El verdadero 20G Supremo:\nel final es inalcanzable."},
['master_ex']= {"GrandMaster", "EXTRA", "Para ser un gran maestro,\nacepta este desafío"},
['strategy_e']= {"Strategy", "EASY", "Decisiones rápidas en 20G."},
['strategy_h']= {"Strategy", "HARD", "Decisiones rápidas en 20G."},
['strategy_u']= {"Strategy", "ULTIMATE", "Decisiones rápidas en 20G."},
['strategy_e_plus']={"Strategi", "MUDAH+", "Decisiones rápidas en 20G."},
['strategy_h_plus']={"Strategi", "SULIT+", "Decisiones rápidas en 20G."},
['strategy_u_plus']={"Strategi", "TERAKHIR+", "Decisiones rápidas en 20G."},
['blind_e']= {"A Ciegas", "Parcial", "Para novatos."},
['blind_n']= {"A Ciegas", "Total", "Para jugadores intermedios."},
['blind_h']= {"A Ciegas", "Inmediato", "Para jugadores experimentados"},
@@ -695,7 +695,7 @@ return{
['defender_l']= {"Defensor", "Lunático", "¡Practica la defensa!"},
['dig_h']= {"Downstack", "Difícil", "¡Practica el downstackeo!"},
['dig_u']= {"Downstack", "Supremo", "¡Practica el downstackeo!"},
-- ['clearRush']= {"Clear Rush", "NORMAL", "All-spin tutorial!\n[Under construction]"},
['clearRush']= {"Clear Rush", "NORMAL", "¡Tutorial de Allspins!\n[En construcción]"},
['c4wtrain_n']= {"Entrenar C4W", "Normal", "Combos infinitos."},
['c4wtrain_l']= {"Entrenar C4W", "Lunático", "Combos infinitos."},
['pctrain_n']= {"Entrenar PC", "Normal", "Modo sencillo para practicar Perfect Clears."},
@@ -711,7 +711,7 @@ return{
['tech_l']= {"Tech", "Lunático", "¡Mantén el B2B!"},
['tech_l_plus']= {"Tech", "Lunático+", "¡Sólo se permiten Spins y PCs!"},
['tech_finesse']= {"Tech", "Finesse", "¡No cometas errores de Finesse!"},
['tech_finesse_f']= {"Tech", "Finesse+", "Sin errores de finesse, ¡pero tampoco clears normales!"},
['tech_finesse_f']= {"Tech", "Finesse+", "Sin errores de finesse,\n¡pero tampoco clears normales!"},
['tsd_e']= {"Desafío de TSD", "Fácil", "¡Sólo se permiten T-Spin Dobles!"},
['tsd_h']= {"Desafío de TSD", "Difícil", "¡Sólo se permiten T-Spin Dobles!"},
['tsd_u']= {"Desafío de TSD", "Supremo", "¡Sólo se permiten T-Spin Dobles!"},
@@ -720,7 +720,7 @@ return{
['backfire_l']= {"Retorno", "Lunático", "Lidia con tus propias líneas basura."},
['backfire_u']= {"Retorno", "Supremo", "Lidia con tus propias líneas basura."},
['sprintAtk']= {"Sprint", "100L - Ataque", "¡Envía 100 líneas de ataque!"},
-- ['sprintEff']= {"Sprint", "Efficiency", "Send more attack in 40lines!"},
['sprintEff']= {"Sprint", "Efficiency", "¡Envía ataque eficiente en 40neas!"},
['zen']= {'Zen', "200L", "200 líneas sin límite de tiempo."},
['ultra']= {'Ultra', "Extra", "¡Consigue el mayor puntaje posible en 2 minutos!"},
['infinite']= {"Infinito", "", "Modo Sandbox."},

View File

@@ -357,7 +357,7 @@ return{
fullscreen="Plein écran",
-- bg_on="Normal B.G.",
-- bg_on="No B.G.",
-- bg_off="No B.G.",
-- bg_custom="Use Custom B.G.",
-- blockSatur="Block Saturation",
@@ -714,7 +714,7 @@ return{
['tech_l']= {"Tech", "LUNATIQUE", "Gardez le B2B !"},
['tech_l_plus']= {"Tech", "LUNATIQUE+", "Spin & PC uniquement"},
['tech_finesse']= {"Tech", "FINESSE", "Pas d'erreurs de finesse !"},
['tech_finesse_f']={"Tech", "FINESSE+", "Pas de nettoyages normaux, Pas d'erreurs de finesse !"},
['tech_finesse_f']={"Tech", "FINESSE+", "Pas de nettoyages normaux,\nPas d'erreurs de finesse !"},
['tsd_e']= {"TSD Challenge", "FACILE", "T-spin doubles uniquement !"},
['tsd_h']= {"TSD Challenge", "DIFFICILE", "T-spin doubles uniquement !"},
['tsd_u']= {"TSD Challenge", "ULTIME", "T-spin doubles uniquement !"},

View File

@@ -382,7 +382,7 @@ return{
fullscreen="Tela cheia",
-- bg_on="Normal B.G.",
-- bg_on="No B.G.",
-- bg_off="No B.G.",
-- bg_custom="Use Custom B.G.",
-- blockSatur="Block Saturation",
@@ -745,7 +745,7 @@ return{
['tech_l']= {"Tech", "LUNÁTICO", "Não quebre o B2B!"},
['tech_l_plus']= {"Tech", "LUNÁTICO+", "Apenas spins e PC"},
['tech_finesse']= {"Tech", "FINESSE", "Não erre a destreza!"},
['tech_finesse_f']= {"Tech", "FINESSE+", "Sem limpas normais, não erre a destreza!"},
['tech_finesse_f']= {"Tech", "FINESSE+", "Sem limpas normais,\nnão erre a destreza!"},
['tsd_e']= {"Desafio TSD", "FÁCIL", "Apenas T-spin-doubles!"},
['tsd_h']= {"Desafio TSD", "DIFÍCIL", "Apenas T-spin-doubles!"},
['tsd_u']= {"Desafio TSD", "ULTIMATE", "Apenas T-spin-doubles!"},

View File

@@ -834,7 +834,6 @@ return{
"混合消除即将到来!",
"架空消除即将到来!",
"建议使用双手游玩",
"据某个群友描述玩了Techmino之后打字速度变快了",
"绝大多数按钮上的图标是调用Unicode私用区里的自制字符实现的",
"科技骨牌 你的创新式块堆栈业务技术管理器",
"块东V共荣",
@@ -943,6 +942,26 @@ return{
"Z酱是谁",
"Z酱只是个写代码的懂什么方块",
"Z块等身抱枕来一个(x",
"时间碎片[000] 2021/11/21加入这个版块",
"时间碎片[001] V0.0.091726加入TRS旋转系统",
"时间碎片[002] V0.7.9加入O-spin",
"时间碎片[003] V0.7.19加入语音系统",
"时间碎片[004] V0.7.22加入平滑下落",
"时间碎片[005] V0.8.5加入模式地图",
"时间碎片[006] V0.8.19加入五连块",
"时间碎片[007] V0.9.0加入自定义序列和模式",
"时间碎片[008] V0.10.0加入录像回放",
"时间碎片[009] V0.11.1加入小z词典",
"时间碎片[010] V0.12.2加入mod系统",
"时间碎片[011] V0.13.0联网对战测试",
"时间碎片[012] V0.13.2加入任意场地高度",
"时间碎片[013] V0.13.3加入控制台",
"时间碎片[014] V0.14.4加入第一首非Beepbox制作的BGM",
"时间碎片[015] V0.14.5加入第一首社区玩家自制BGM",
"时间碎片[016] V0.15.5加入录像回放菜单",
"时间碎片[017] V0.16.0加入BIRS",
"时间碎片[018] V0.16.2加入打击垫样式的音效室",
"时间碎片[019] V0.17.0加入手柄的摇杆和扳机支持",
"豆知识[001]总共有400多条tip哦",
"豆知识[002]背景影响游玩?可以去设置关闭",
"豆知识[003]方块默认出现的方向都是重心在下哦(如果你没乱动设置",
@@ -1053,13 +1072,8 @@ return{
"健康小贴士[03]戴耳机(尤其是半入耳式)时音量千万别拉满,不然真的会影响听力(虽然很慢)",
"健康小贴士[04]不要熬夜,真的会猝死",
"健康小贴士[05]长期睡眠不足会引起不可逆的脑损伤(变傻)",
"Z思辨[01]《教育的力量》",
"Z思辨[02]《学习的意义》",
"Z思辨[03]《练习的力量》",
"Z思辨[04]《知识的力量》",
"Z思辨[05]《梦想的价值》",
"Z思辨[06]《天赋的力量》",
"Z思辨[07]《游戏的意义》",
"群友名言[001]“玩了Techmino之后发现打字速度变快了”",
"群友名言[002]“我要陪伴着tech一步步成长然后就可以疯狂的享受他”",
"Frt评[01]“成天被夸赞‘好玩’的”",
"Frt评[02]“可以形成方块圈子小中心话题,同作者一起衍生一些概念与梗的”",
"Frt评[03]“论方块的软工意义(就算这么小个范围内,各种取舍蒙混翻车现象都总会以很易懂的方式出现(”",
@@ -1087,26 +1101,6 @@ return{
"今日数学[13]sin²α-cos²β=-C(α+β)C(α-β)",
"今日数学[14]sin²α-sin²β=S(α+β)S(α-β)",
"今日数学[15]sin2α=2SαCα",
"时间碎片[000] 2021/11/21加入这个版块",
"时间碎片[001] V0.0.091726加入TRS旋转系统",
"时间碎片[002] V0.7.9加入O-spin",
"时间碎片[003] V0.7.19加入语音系统",
"时间碎片[004] V0.7.22加入平滑下落",
"时间碎片[005] V0.8.5加入模式地图",
"时间碎片[006] V0.8.19加入五连块",
"时间碎片[007] V0.9.0加入自定义序列和模式",
"时间碎片[008] V0.10.0加入录像回放",
"时间碎片[009] V0.11.1加入小z词典",
"时间碎片[010] V0.12.2加入mod系统",
"时间碎片[011] V0.13.0联网对战测试",
"时间碎片[012] V0.13.2加入任意场地高度",
"时间碎片[013] V0.13.3加入控制台",
"时间碎片[014] V0.14.4加入第一首非Beepbox制作的BGM",
"时间碎片[015] V0.14.5加入第一首社区玩家自制BGM",
"时间碎片[016] V0.15.5加入录像回放菜单",
"时间碎片[017] V0.16.0加入BIRS",
"时间碎片[018] V0.16.2加入打击垫样式的音效室",
"时间碎片[019] V0.17.0加入手柄的摇杆和扳机支持",
"Z哲[01]方块教会我们,合群了就会消失,……",
"Z哲[02]假如生活欺骗了你,不要悲伤,不要心急,还有块陪着你",
"Z哲[03]……合群了就会消失不合群世界毁灭指game over",
@@ -1123,6 +1117,14 @@ return{
"Z哲[14]不希望激烈的零和竞争充斥整个游戏",
"Z哲[15]尝试手动控制圈子规模扩大速度,希望能对维持社区氛围有帮助",
"Z哲[16]圈子大了真的会……吗?我们可以试着做些什么,起码让这个过程慢一点",
"Z思辨[01]《教育的力量》",
"Z思辨[02]《学习的意义》",
"Z思辨[03]《练习的力量》",
"Z思辨[04]《知识的力量》",
"Z思辨[05]《梦想的价值》",
"Z思辨[06]《天赋的力量》",
"Z思辨[07]《游戏的意义》",
"Z思辨[08]《自强与竞争》",
"Z推[01]东方Project好玩",
"Z推[02]Minecraft好玩",
"Z推[03]Osu!好玩!",

View File

@@ -318,8 +318,8 @@ function Player:act_softDrop()
self:act_down1()
end
self:checkTouchSound()
elseif self.gameEnv.deepdrop then
self:_deepdrop()
elseif self.gameEnv.deepDrop then
self:_deepDrop()
end
end
end
@@ -408,8 +408,8 @@ function Player:act_down1()
self.curY=self.curY-1
self:freshBlock('fresh')
self.spinLast=false
elseif self.gameEnv.deepdrop then
self:_deepdrop()
elseif self.gameEnv.deepDrop then
self:_deepDrop()
end
end
end
@@ -422,8 +422,8 @@ function Player:act_down4()
self.curY,self.ghoY=self.ghoY,ghoY0
self:freshBlock('fresh')
self.spinLast=false
elseif self.gameEnv.deepdrop then
self:_deepdrop()
elseif self.gameEnv.deepDrop then
self:_deepDrop()
end
end
end
@@ -436,8 +436,8 @@ function Player:act_down10()
self.curY,self.ghoY=self.ghoY,ghoY0
self:freshBlock('fresh')
self.spinLast=false
elseif self.gameEnv.deepdrop then
self:_deepdrop()
elseif self.gameEnv.deepDrop then
self:_deepDrop()
end
end
end

View File

@@ -140,6 +140,7 @@ function scene.mouseMove(x,y)
end
end
function scene.mouseDown(x,y,k)
if k>3 then return end
if not curPen then
curPen=k
elseif curPen~=k then
@@ -149,6 +150,7 @@ function scene.mouseDown(x,y,k)
scene.mouseMove(x,y)
end
function scene.mouseUp(_,_,k)
if k>3 then return end
if curPen==k then
_pDraw()
curPen=false

View File

@@ -50,6 +50,7 @@ local loadingThread=coroutine.wrap(function()
VOC.play('welcome')
THEME.fresh()
LOADED=true
Z.setPowerInfo(SETTING.powerInfo)
return'finish'
end)

View File

@@ -68,7 +68,7 @@ scene.widgetList={
WIDGET.newSlider{name='shakeFX', x=330,y=760,lim=280,w=540,unit=5,disp=SETval('shakeFX'), code=SETsto('shakeFX')},
WIDGET.newSlider{name='atkFX', x=330,y=820,lim=280,w=540,unit=5,disp=SETval('atkFX'), code=SETsto('atkFX')},
WIDGET.newSelector{name='frame', x=400,y=890,lim=280,w=460,list={8,10,13,17,22,29,37,47,62,80,100},disp=SETval('frameMul'),code=SETsto('frameMul')},
WIDGET.newSelector{name='frame', x=400,y=890,lim=280,w=460,list={8,10,13,17,22,29,37,47,62,80,100},disp=SETval('frameMul'),code=function(v)SETTING.frameMul=v;Z.setFrameMul(SETTING.frameMul)end},
WIDGET.newSwitch{name='FTlock', x=950,y=890,lim=290,disp=SETval('FTLock'), code=SETrev('FTLock')},
WIDGET.newSwitch{name='text', x=450,y=980,lim=360,disp=SETval('text'), code=SETrev('text')},
@@ -80,8 +80,8 @@ scene.widgetList={
WIDGET.newSwitch{name='warn', x=450,y=1340,lim=360,disp=SETval('warn'), code=SETrev('warn')},
WIDGET.newSwitch{name='clickFX', x=950,y=980,lim=360,disp=SETval('clickFX'), code=SETrev('clickFX')},
WIDGET.newSwitch{name='power', x=950,y=1070,lim=360,disp=SETval('powerInfo'), code=SETrev('powerInfo')},
WIDGET.newSwitch{name='clean', x=950,y=1160,lim=360,disp=SETval('cleanCanvas'), code=SETrev('cleanCanvas')},
WIDGET.newSwitch{name='power', x=950,y=1070,lim=360,disp=SETval('powerInfo'), code=function()SETTING.powerInfo=not SETTING.powerInfo Z.setPowerInfo(SETTING.powerInfo)end},
WIDGET.newSwitch{name='clean', x=950,y=1160,lim=360,disp=SETval('cleanCanvas'), code=function()SETTING.cleanCanvas=not SETTING.cleanCanvas Z.setCleanCanvas(SETTING.cleanCanvas)end},
WIDGET.newSwitch{name='fullscreen', x=950,y=1250,lim=360,disp=SETval('fullscreen'), code=function()SETTING.fullscreen=not SETTING.fullscreen applyFullscreen()end},
WIDGET.newKey{name='bg_on', x=680,y=1340,w=200,h=80,code=function()SETTING.bg='on'applyBG()end},

View File

@@ -14,23 +14,29 @@ return[=[
0.17.1: 苏醒 Wake Up
新增:
全新模式选择界面(未完善,未来会增加更多便利功能)
新皮肤:pixel(by C₂₉H₂₅N₃O₅)
新语言:Bahasa Indonesia(by NOT_A_ROBOT)
改动:
修改选择模式音效
优化皮肤设置页面交互效果
重做关于页面
换新miya立绘,给不同立绘添加不同点击动画
略微降低master-h模式骨块出现后的难度
TRS的N/H添加一个踢墙
X块的默认色改为黄色
重做关于页面
微调全局颜色表
修复:
自定义场地界面按超过第三个的鼠标键会报错
经典模式h和u难度没有干旱计数器 #546
自定义场地16号色的方块名位置显示错误
自动保存会丢掉最后一个键(如果它触发了结束)
登录界面读取本地账号密码数据错误
策略堆叠模式评级标准不当
云存档/读档的一处小问题
部分场景文本重叠问题
deepdrop坏了
混战模式坏了
0.17.0: 硬着陆 Hard Landing
新增:

View File

@@ -1,5 +1,5 @@
return{
["apkCode"]=420,
["apkCode"]=421,
["code"]=1701,
["string"]="V0.17.1",
["room"]="ver A-2",