Compare commits

..

21 Commits

Author SHA1 Message Date
MrZ_26
baf36ac86b 版本推进 2022-03-22 14:14:03 +08:00
MrZ_26
d8c058b0e1 修正词典文件语法错误 2022-03-22 14:14:03 +08:00
MrZ_26
6c69c38b32 登录界面可选隐藏邮箱 close #639 2022-03-22 02:39:26 +08:00
Untitled_unrevised
d17e62e36b Update dict_zh.lua (#675)
added "DPC", "Gamushiro Stacking", "Fractal"
added some link of setups and patterns
2022-03-22 02:19:40 +08:00
MrZ_26
3a2ec3a5dd 移除FTLock,全局强制开启 2022-03-22 02:15:48 +08:00
MrZ_26
ce25f17676 修正一个背景代码细节 2022-03-14 04:27:47 +08:00
MrZ_26
61fe4a5897 版本推进 2022-03-11 19:36:02 +08:00
MrZ_26
f50e90b29b 删除一个重复词条 2022-03-11 19:33:27 +08:00
MrZ_26
c151c1176f 简化部分中文文本 2022-03-11 19:22:01 +08:00
C₂₉H₂₅N₃O₅
69491e2f8b Good grammar makes reading easier (#668)
- 英语使用typesetting quotation marks
- 引号使用美式规则排版
- 重做IPA相关符号

* Good grammar makes reading easier

* 改细节 顺便改下中文文本准备下新UI
2022-03-11 19:21:12 +08:00
NOT_A_ROBOT
4f4988d7ef Fix incorrect score order in Dig Efficiency modes 2022-03-10 02:13:49 +08:00
MrZ_26
9ee4af48da 修正中文词典几个词条缺少中文关键词 2022-03-08 00:03:27 +08:00
NOT_A_ROBOT
566ebbf213 Added new icon and added the modes to the map 2022-03-07 00:44:15 +08:00
NOT_A_ROBOT
b1ea222b90 Added entry to language files 2022-03-07 00:44:15 +08:00
NOT_A_ROBOT
d85f77b480 Added efficiency-based Dig modes 2022-03-07 00:44:15 +08:00
NOT_A_ROBOT
20f5d07d05 Add Sonic Drop to Master Graded, closes #641 2022-03-07 00:42:33 +08:00
NOT_A_ROBOT
9864a75e0f Fixed Master Graded final section counted as regret during roll 2022-03-07 00:42:17 +08:00
NOT_A_ROBOT
af4cf9fc0d Made level counter more readable + added level overflow mechanic 2022-03-05 01:03:38 +08:00
MrZ_26
d0597e6836 修正一处拼写错误 close #663 2022-03-05 01:00:38 +08:00
MrZ_26
61fb504b21 中文词典新增一条新人指引 2022-03-01 18:43:23 +08:00
MrZ_26
bd055a7c60 修复关闭3D方块选项后场地方块饱和度设置无效 close #656 2022-02-28 03:56:27 +08:00
36 changed files with 779 additions and 541 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 969 B

View File

@@ -19,8 +19,8 @@ function back.draw()
gc.clear(.08,.08,.084) gc.clear(.08,.08,.084)
end end
gc.push('transform') gc.push('transform')
gc.translate(SCR.cx,SCR.cy+20*sin(t*.02)) gc.replaceTransform(SCR.xOy_m)
gc.scale(SCR.k) gc.translate(0,20*sin(t*.02))
gc.scale(1.26,1.36) gc.scale(1.26,1.36)
if -t%6.26<.1355 then if -t%6.26<.1355 then
gc.translate(60*sin(t*.26),100*sin(t*.626)) gc.translate(60*sin(t*.26),100*sin(t*.626))

View File

@@ -1,3 +1,28 @@
local function GetLevelStr(lvl)
local list={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","00","0A","14","1E","28","32","3C","46","50","5A","64","6E","78","82","8C","96","A0","AA","B4","BE","C6","20","E6","20","06","21","26","21","46","21","66","21","86","21","A6","21","C6","21","E6","21","06","22","26","22","46","22","66","22","86","22","A6","22","C6","22","E6","22","06","23","26","23","85","A8","29","F0","4A","4A","4A","4A","8D","07","20","A5","A8","29","0F","8D","07","20","60","A6","49","E0","15","10","53","BD","D6","96","A8","8A","0A","AA","E8","BD","EA","96","8D","06","20","CA","A5","BE","C9","01","F0","1E","A5","B9","C9","05","F0","0C","BD","EA","96","38","E9","02","8D","06","20","4C","67","97","BD","EA","96","18","69","0C","8D","06","20","4C","67","97","BD","EA","96","18","69","06","8D","06","20","A2","0A","B1","B8","8D","07","20","C8","CA","D0","F7","E6","49","A5","49","C9","14","30","04","A9","20","85","49","60","A5","B1","29","03","D0","78","A9","00","85","AA","A6","AA","B5","4A","F0","5C","0A","A8","B9","EA","96","85","A8","A5","BE","C9","01","D0","0A","A5","A8","18","69","06","85","A8","4C","BD","97","A5","B9","C9","04","D0","0A","A5","A8","38","E9","02","85","A8","4C","BD","97","A5","A8"}
list[0]="00"
lvl=lvl%256
return list[lvl]
end
local function GetGravity(lvl)
lvl=lvl%256
return
lvl==0 and 48 or
lvl==1 and 43 or
lvl==2 and 38 or
lvl==3 and 33 or
lvl==4 and 28 or
lvl==5 and 23 or
lvl==6 and 18 or
lvl==7 and 13 or
lvl==8 and 8 or
lvl==9 and 6 or
lvl<13 and 5 or
lvl<16 and 4 or
lvl<19 and 3 or
lvl<29 and 2 or
1
end
local gc_setColor=love.graphics.setColor local gc_setColor=love.graphics.setColor
return{ return{
das=16,arr=6, das=16,arr=6,
@@ -15,8 +40,7 @@ return{
keyCancel={5,6}, keyCancel={5,6},
mesDisp=function(P) mesDisp=function(P)
setFont(75) setFont(75)
local r=P.modeData.target/10 mStr(GetLevelStr(P.modeData.lvl),63,210)
mStr(r<10 and 9 or r<30 and r or("%02x"):format(r*10-300),63,210)
mText(TEXTOBJ.speedLV,63,290) mText(TEXTOBJ.speedLV,63,290)
PLY.draw.drawProgress(P.stat.row,P.modeData.target) PLY.draw.drawProgress(P.stat.row,P.modeData.target)
if P.modeData.drought>7 then if P.modeData.drought>7 then
@@ -32,27 +56,22 @@ return{
end end
end, end,
task=function(P) task=function(P)
P.modeData.lvl=9
P.modeData.target=10 P.modeData.target=10
end, end,
hook_drop=function(P) hook_drop=function(P)
local D=P.modeData local D=P.modeData
D.drought=P.lastPiece.id==7 and 0 or D.drought+1 D.drought=P.lastPiece.id==7 and 0 or D.drought+1
if P.stat.row>=D.target then if P.stat.row>=D.target then
if D.target==110 then if D.target>=100 then
P.gameEnv.drop,P.gameEnv.lock=5,5 D.lvl=D.lvl+1
P.gameEnv.sddas,P.gameEnv.sdarr=5,5 end
local dropSpd=GetGravity(D.lvl)
if D.target==200 then P.win('finish') return
elseif dropSpd~=P.gameEnv.drop then
P.gameEnv.drop,P.gameEnv.lock=dropSpd,dropSpd
P.gameEnv.sddas,P.gameEnv.sdarr=dropSpd,dropSpd
SFX.play('warn_2',.7) SFX.play('warn_2',.7)
elseif D.target==140 then
P.gameEnv.drop,P.gameEnv.lock=4,4
P.gameEnv.sddas,P.gameEnv.sdarr=4,4
SFX.play('warn_2',.7)
elseif D.target==170 then
P.gameEnv.drop,P.gameEnv.lock=3,3
P.gameEnv.sddas,P.gameEnv.sdarr=3,3
SFX.play('warn_2',.7)
elseif D.target==200 then
P:win('finish')
return
else else
SFX.play('reach') SFX.play('reach')
end end

View File

@@ -1,3 +1,28 @@
local function GetLevelStr(lvl)
local list={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","00","0A","14","1E","28","32","3C","46","50","5A","64","6E","78","82","8C","96","A0","AA","B4","BE","C6","20","E6","20","06","21","26","21","46","21","66","21","86","21","A6","21","C6","21","E6","21","06","22","26","22","46","22","66","22","86","22","A6","22","C6","22","E6","22","06","23","26","23","85","A8","29","F0","4A","4A","4A","4A","8D","07","20","A5","A8","29","0F","8D","07","20","60","A6","49","E0","15","10","53","BD","D6","96","A8","8A","0A","AA","E8","BD","EA","96","8D","06","20","CA","A5","BE","C9","01","F0","1E","A5","B9","C9","05","F0","0C","BD","EA","96","38","E9","02","8D","06","20","4C","67","97","BD","EA","96","18","69","0C","8D","06","20","4C","67","97","BD","EA","96","18","69","06","8D","06","20","A2","0A","B1","B8","8D","07","20","C8","CA","D0","F7","E6","49","A5","49","C9","14","30","04","A9","20","85","49","60","A5","B1","29","03","D0","78","A9","00","85","AA","A6","AA","B5","4A","F0","5C","0A","A8","B9","EA","96","85","A8","A5","BE","C9","01","D0","0A","A5","A8","18","69","06","85","A8","4C","BD","97","A5","B9","C9","04","D0","0A","A5","A8","38","E9","02","85","A8","4C","BD","97","A5","A8"}
list[0]="00"
lvl=lvl%256
return list[lvl]
end
local function GetGravity(lvl)
lvl=lvl%256
return
lvl==0 and 48 or
lvl==1 and 43 or
lvl==2 and 38 or
lvl==3 and 33 or
lvl==4 and 28 or
lvl==5 and 23 or
lvl==6 and 18 or
lvl==7 and 13 or
lvl==8 and 8 or
lvl==9 and 6 or
lvl<13 and 5 or
lvl<16 and 4 or
lvl<19 and 3 or
lvl<29 and 2 or
1
end
local gc_setColor=love.graphics.setColor local gc_setColor=love.graphics.setColor
return{ return{
das=16,arr=6, das=16,arr=6,
@@ -15,8 +40,7 @@ return{
keyCancel={5,6}, keyCancel={5,6},
mesDisp=function(P) mesDisp=function(P)
setFont(75) setFont(75)
local r=P.modeData.target/10 mStr(GetLevelStr(P.modeData.lvl),63,210)
mStr(r<11 and 18 or r<22 and r+8 or("%02x"):format(r*10-220),63,210)
mText(TEXTOBJ.speedLV,63,290) mText(TEXTOBJ.speedLV,63,290)
PLY.draw.drawProgress(P.stat.row,P.modeData.target) PLY.draw.drawProgress(P.stat.row,P.modeData.target)
if P.modeData.drought>7 then if P.modeData.drought>7 then
@@ -32,19 +56,22 @@ return{
end end
end, end,
task=function(P) task=function(P)
P.modeData.lvl=18
P.modeData.target=10 P.modeData.target=10
end, end,
hook_drop=function(P) hook_drop=function(P)
local D=P.modeData local D=P.modeData
D.drought=P.lastPiece.id==7 and 0 or D.drought+1 D.drought=P.lastPiece.id==7 and 0 or D.drought+1
if P.stat.row>=D.target then if P.stat.row>=D.target then
if D.target==100 then if D.target>=100 then
P.gameEnv.drop,P.gameEnv.lock=2,2 D.lvl=D.lvl+1
P.gameEnv.sddas,P.gameEnv.sdarr=2,2 end
local dropSpd=GetGravity(D.lvl)
if D.target==200 then P.win('finish') return
elseif dropSpd~=P.gameEnv.drop then
P.gameEnv.drop,P.gameEnv.lock=dropSpd,dropSpd
P.gameEnv.sddas,P.gameEnv.sdarr=dropSpd,dropSpd
SFX.play('warn_1') SFX.play('warn_1')
elseif D.target==200 then
P:win('finish')
return
else else
SFX.play('reach') SFX.play('reach')
end end

View File

@@ -1,23 +1,46 @@
local function GetLevelStr(lvl)
local list={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","00","0A","14","1E","28","32","3C","46","50","5A","64","6E","78","82","8C","96","A0","AA","B4","BE","C6","20","E6","20","06","21","26","21","46","21","66","21","86","21","A6","21","C6","21","E6","21","06","22","26","22","46","22","66","22","86","22","A6","22","C6","22","E6","22","06","23","26","23","85","A8","29","F0","4A","4A","4A","4A","8D","07","20","A5","A8","29","0F","8D","07","20","60","A6","49","E0","15","10","53","BD","D6","96","A8","8A","0A","AA","E8","BD","EA","96","8D","06","20","CA","A5","BE","C9","01","F0","1E","A5","B9","C9","05","F0","0C","BD","EA","96","38","E9","02","8D","06","20","4C","67","97","BD","EA","96","18","69","0C","8D","06","20","4C","67","97","BD","EA","96","18","69","06","8D","06","20","A2","0A","B1","B8","8D","07","20","C8","CA","D0","F7","E6","49","A5","49","C9","14","30","04","A9","20","85","49","60","A5","B1","29","03","D0","78","A9","00","85","AA","A6","AA","B5","4A","F0","5C","0A","A8","B9","EA","96","85","A8","A5","BE","C9","01","D0","0A","A5","A8","18","69","06","85","A8","4C","BD","97","A5","B9","C9","04","D0","0A","A5","A8","38","E9","02","85","A8","4C","BD","97","A5","A8"}
list[0]="00"
lvl=lvl%256
return list[lvl]
end
local function GetGravity(lvl)
lvl=lvl%256
return
lvl==0 and 48 or
lvl==1 and 43 or
lvl==2 and 38 or
lvl==3 and 33 or
lvl==4 and 28 or
lvl==5 and 23 or
lvl==6 and 18 or
lvl==7 and 13 or
lvl==8 and 8 or
lvl==9 and 6 or
lvl<13 and 5 or
lvl<16 and 4 or
lvl<19 and 3 or
lvl<29 and 2 or
1
end
local gc_setColor=love.graphics.setColor local gc_setColor=love.graphics.setColor
return{ return{
das=16,arr=6, das=16,arr=6,
sddas=2,sdarr=2, sddas=2,sdarr=2,
irs=false,ims=false, irs=false,ims=false,
drop=2, drop=2,lock=2,
lock=2, wait=10,fall=25,
wait=10,
fall=25,
freshLimit=0, freshLimit=0,
fieldH=19, fieldH=19,
nextCount=1,holdCount=0, nextCount=1,
holdCount=0,
RS='Classic', RS='Classic',
sequence='rnd', sequence='rnd',
noTele=true, noTele=true,
keyCancel={5,6}, keyCancel={5,6},
mesDisp=function(P) mesDisp=function(P)
setFont(75) setFont(75)
local r=P.modeData.target/10 mStr(GetLevelStr(P.modeData.lvl),63,210)
mStr(r<11 and 19 or r<22 and r+9 or("%02x"):format(r*10-220),63,210)
mText(TEXTOBJ.speedLV,63,290) mText(TEXTOBJ.speedLV,63,290)
PLY.draw.drawProgress(P.stat.row,P.modeData.target) PLY.draw.drawProgress(P.stat.row,P.modeData.target)
if P.modeData.drought>7 then if P.modeData.drought>7 then
@@ -33,19 +56,25 @@ return{
end end
end, end,
task=function(P) task=function(P)
P.modeData.lvl=19
P.modeData.target=10 P.modeData.target=10
end, end,
hook_drop=function(P) hook_drop=function(P)
local D=P.modeData local D=P.modeData
D.drought=P.lastPiece.id==7 and 0 or D.drought+1 D.drought=P.lastPiece.id==7 and 0 or D.drought+1
if P.stat.row>=D.target then if P.stat.row>=D.target then
D.target=D.target+10 --if D.target>=200 then
if D.target==200 then D.lvl=D.lvl+1
P.gameEnv.drop,P.gameEnv.lock=1,1 --end
SFX.play('blip_1') local dropSpd=GetGravity(D.lvl)
if dropSpd~=P.gameEnv.drop then
P.gameEnv.drop,P.gameEnv.lock=dropSpd,dropSpd
P.gameEnv.sddas,P.gameEnv.sdarr=dropSpd,dropSpd
SFX.play('warn_1')
else else
SFX.play('reach') SFX.play('reach')
end end
D.target=D.target+10
end end
end, end
} }

View File

@@ -1,3 +1,28 @@
local function GetLevelStr(lvl)
local list={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","00","0A","14","1E","28","32","3C","46","50","5A","64","6E","78","82","8C","96","A0","AA","B4","BE","C6","20","E6","20","06","21","26","21","46","21","66","21","86","21","A6","21","C6","21","E6","21","06","22","26","22","46","22","66","22","86","22","A6","22","C6","22","E6","22","06","23","26","23","85","A8","29","F0","4A","4A","4A","4A","8D","07","20","A5","A8","29","0F","8D","07","20","60","A6","49","E0","15","10","53","BD","D6","96","A8","8A","0A","AA","E8","BD","EA","96","8D","06","20","CA","A5","BE","C9","01","F0","1E","A5","B9","C9","05","F0","0C","BD","EA","96","38","E9","02","8D","06","20","4C","67","97","BD","EA","96","18","69","0C","8D","06","20","4C","67","97","BD","EA","96","18","69","06","8D","06","20","A2","0A","B1","B8","8D","07","20","C8","CA","D0","F7","E6","49","A5","49","C9","14","30","04","A9","20","85","49","60","A5","B1","29","03","D0","78","A9","00","85","AA","A6","AA","B5","4A","F0","5C","0A","A8","B9","EA","96","85","A8","A5","BE","C9","01","D0","0A","A5","A8","18","69","06","85","A8","4C","BD","97","A5","B9","C9","04","D0","0A","A5","A8","38","E9","02","85","A8","4C","BD","97","A5","A8"}
list[0]="00"
lvl=lvl%256
return list[lvl]
end
local function GetGravity(lvl)
lvl=lvl%256
return
lvl==0 and 48 or
lvl==1 and 43 or
lvl==2 and 38 or
lvl==3 and 33 or
lvl==4 and 28 or
lvl==5 and 23 or
lvl==6 and 18 or
lvl==7 and 13 or
lvl==8 and 8 or
lvl==9 and 6 or
lvl<13 and 5 or
lvl<16 and 4 or
lvl<19 and 3 or
lvl<29 and 2 or
1
end
local gc_setColor=love.graphics.setColor local gc_setColor=love.graphics.setColor
return{ return{
das=16,arr=6, das=16,arr=6,
@@ -15,8 +40,7 @@ return{
keyCancel={5,6}, keyCancel={5,6},
mesDisp=function(P) mesDisp=function(P)
setFont(75) setFont(75)
local r=P.modeData.target/10 mStr(GetLevelStr(P.modeData.lvl),63,210)
mStr(r==1 and 29 or("%02x"):format(r*10-20),63,210)
mText(TEXTOBJ.speedLV,63,290) mText(TEXTOBJ.speedLV,63,290)
PLY.draw.drawProgress(P.stat.row,P.modeData.target) PLY.draw.drawProgress(P.stat.row,P.modeData.target)
if P.modeData.drought>7 then if P.modeData.drought>7 then
@@ -32,18 +56,17 @@ return{
end end
end, end,
task=function(P) task=function(P)
P.modeData.lvl=29
P.modeData.target=10 P.modeData.target=10
end, end,
hook_drop=function(P) hook_drop=function(P)
local D=P.modeData local D=P.modeData
D.drought=P.lastPiece.id==7 and 0 or D.drought+1 D.drought=P.lastPiece.id==7 and 0 or D.drought+1
if P.stat.row>=D.target then if P.stat.row>=D.target then
if D.target==100 then if D.target>=200 then P.win('finish') return end
P:win('finish')
return
end
D.target=D.target+10
SFX.play('reach') SFX.play('reach')
D.lvl=D.lvl+1
D.target=D.target+10
end end
end, end,
} }

View File

@@ -110,7 +110,7 @@ return{
lock=30, lock=30,
wait=23, wait=23,
fall=25, fall=25,
noTele=true, keyCancel={10,11,12,14,15,16,17,18,19,20},
das=16,arr=1, das=16,arr=1,
minsdarr=1, minsdarr=1,
ihs=true,irs=true,ims=false, ihs=true,irs=true,ims=false,
@@ -277,7 +277,7 @@ return{
YIELD() YIELD()
P.modeData.grade=getGrade() P.modeData.grade=getGrade()
P.modeData.gradePts=math.max(math.min(math.floor(int_grade_boosts[math.min(int_grade+1,#int_grade_boosts)]+rollGrades+cools+1-regrets),#gradeList),1) P.modeData.gradePts=math.max(math.min(math.floor(int_grade_boosts[math.min(int_grade+1,#int_grade_boosts)]+rollGrades+cools+1-regrets),#gradeList),1)
if P.stat.frame-prevSectTime > reg_time[math.ceil(P.modeData.pt/100+0.01)] then if P.stat.frame-prevSectTime > reg_time[math.ceil(P.modeData.pt/100+0.01)] and not (isInRoll or isInRollTrans) then
regretList[math.ceil(P.modeData.pt/100)]=true regretList[math.ceil(P.modeData.pt/100)]=true
end end
if regretDelay>-1 then if regretDelay>-1 then

View File

@@ -714,7 +714,7 @@ do--function resetGameData(args)
local gameSetting={ local gameSetting={
--Tuning --Tuning
'das','arr','dascut','dropcut','sddas','sdarr', 'das','arr','dascut','dropcut','sddas','sdarr',
'ihs','irs','ims','RS','FTLock', 'ihs','irs','ims','RS',
--System --System
'skin','face', 'skin','face',
@@ -943,7 +943,7 @@ do--CUS/SETXXX(k)
local warnList={ local warnList={
'das','arr','dascut','dropcut','sddas','sdarr', 'das','arr','dascut','dropcut','sddas','sdarr',
'ihs','irs','ims','RS', 'ihs','irs','ims','RS',
'FTLock','frameMul','highCam', 'frameMul','highCam',
'VKSwitch','VKIcon','VKTrack','VKDodge', 'VKSwitch','VKIcon','VKTrack','VKDodge',
'simpMode', 'simpMode',
} }

View File

@@ -536,7 +536,6 @@ do--Game data tables
ROOMENV={ ROOMENV={
--Room config --Room config
capacity=10, capacity=10,
FTLock=true,
--Basic --Basic
drop=30,lock=60, drop=30,lock=60,
@@ -591,7 +590,6 @@ do--Userdata tables
ihs=true,irs=true,ims=true, ihs=true,irs=true,ims=true,
holdMode='hold', holdMode='hold',
RS='TRS', RS='TRS',
FTLock=true,
--System --System
reTime=2, reTime=2,

File diff suppressed because it is too large Load Diff

View File

@@ -4,9 +4,14 @@ return{
{"新人须知", {"新人须知",
"读我 必读 萌新 xinren new noob readme", "读我 必读 萌新 xinren new noob readme",
"help", "help",
"致想深入玩下去的新人:\n\n\t两大根本原则:\n\t\t1. 选手感好的版本Tech/Tetr.io/Jstris/TOP/Tetr.js别用编程练习渣版本\n\t\t2. 踏实打好基础预判next稳定消四等别总想着炫酷T旋对未来发展没好处。\n\t两大主要技巧:\n\t\t1. 熟悉初始位置以及到各个位置的初始操作;\n\t\t2. 提前计算好下一块能放哪。\n\n推荐阅读专栏《给TOP新人的几点建议》\n\n[点击右下角地球按钮打开链接]", "致想深入玩下去的新人:\n\n\t两大根本原则:\n\t\t1. 选手感好的版本Tech/Tetr.io/Jstris/TOP/Tetr.js别用编程练习渣版本\n\t\t2. 踏实打好基础预判next稳定消四等别总想着炫酷T旋对未来实力提升没好处。\n\t两大主要技巧:\n\t\t1. 熟悉初始位置以及到各个位置的初始操作;\n\t\t2. 提前计算好下一块能放哪。\n\n推荐阅读专栏《给TOP新人的几点建议》\n\n[点击右下角地球按钮打开链接]",
"https://bilibili.com/read/cv2352939", "https://bilibili.com/read/cv2352939",
}, },
{"新人学习/练习路线",
"读我 必读 萌新 xinren new noob readme",
"help",
"以下是关于提升真正打块能力的指引,如果在以下任何项目练习过程中感到有困难,可以适当回去玩玩自己喜欢的项目。别忘了你是来“玩”游戏的,兴趣最重要。\n\n以下给出几个新手时期的主线任务树前期主要就应该练习以下内容学定式和T-Spin什么的对实力帮助很小我们不认为靠定式对战秒其他萌新是有效实力\n注意三段应当同时进行不是A→B→C\n\nA. 堆叠能力练习方法\n\tA1. 决定手上的块放哪的时候先别,看看下一块有没有地方放,如果放不下去,重新想手上的\n\tA2. 尝试把地形尽量控制得平整,因为比较平的地形来啥块都比较容易放得下去\n\nB. 操作效率与速度练习方法\n\tB1. 不要每一块都拿影子去对形状对位置,要自己想象这个块转一下是什么方向,想好了再开始按按键\n\tB2. 学习双旋,能逆时针转一次就不要顺时针转三次,费手\n\tB3. 学习极简,刚开始不用管速度,保证正确率最重要,养成良好习惯以后再提速快得很\n\nC. 堆叠能力考核\n\tC1. 稳定完成40行不死\n\tC2. 稳定不用hold完成40行\n\tC3. 稳定全消四完成40行\n\tC4. 稳定不用hold全消四完成40行\n\n以上都是根据社区和个人经验总结的模糊方法与目标所以C的考核可以根据自身情况调整严格程度例如“稳定”的具体成功率\n完成C的考核后需要在未来一直注意没有上限的A1这是方块的根本元素之一强大的读next能力可以让你快速上手任何变种玩法。",
},
{"关于T-spin学习", {"关于T-spin学习",
"T旋 T转 tspin", "T旋 T转 tspin",
"help", "help",
@@ -317,57 +322,57 @@ return{
--术语(缩写) --术语(缩写)
{"LPM", {"LPM",
"sudu", "速度 sudu",
"term", "term",
"Line Per Minute\n行每分,体现玩家下块速度。\n\n不同游戏中显示的LPM算法可能不一样例如TO中的LPM是用PPS换算的每1PPS=24LPM忽略掉了垃圾行的影响不再是字面意思本游戏中使用LPM代表这种换算后的LPM。", "Line Per Minute\n行每分,体现玩家下块速度。\n\n不同游戏中显示的LPM算法可能不一样例如TO中的LPM是用PPS换算的每1PPS=24LPM忽略掉了垃圾行的影响不再是字面意思本游戏中使用LPM代表这种换算后的LPM。",
}, },
{"PPS", {"PPS",
"sudu", "速度 sudu",
"term", "term",
"Piece Per Second\n块每秒,体现玩家下块速度。", "Piece Per Second\n块每秒,体现玩家下块速度。",
}, },
{"BPM", {"BPM",
"sudu", "速度 sudu",
"term", "term",
"Block Per Minute\n块每分,体现玩家下块速度\n又称PPMPiece Per Minute", "Block Per Minute\n块每分,体现玩家下块速度\n又称PPMPiece Per Minute",
}, },
{"KPM", {"KPM",
"sudu", "速度 sudu",
"term", "term",
"Key Per Minute\n按键每分,体现玩家按键速度。", "Key Per Minute\n按键每分,体现玩家按键速度。",
}, },
{"KPP", {"KPP",
"anjian", "按键 anjian",
"term", "term",
"Key Per Piece\n按键每块,体现玩家操作是否繁琐。\n学会极简提升操作效率以减少此数字。", "Key Per Piece\n按键每块,体现玩家操作是否繁琐。\n学会极简提升操作效率以减少此数字。",
}, },
{"APM", {"APM",
"attack gongji", "攻击 attack gongji",
"term", "term",
"Attack Per Minute\n攻击每分,即玩家每分钟能打出的垃圾行数。\n一定程度体现玩家攻击力。", "Attack Per Minute\n攻击每分,即玩家每分钟能打出的垃圾行数。\n一定程度体现玩家攻击力。",
}, },
{"SPM", {"SPM",
"send gongji", "发送 送出 发出 send gongji",
"term", "term",
"Send Per Minute\n送出每分,即玩家每分钟实际打出去给对手的垃圾行数。\n一定程度体现玩家给对手实际造成的攻击力。", "Send Per Minute\n送出每分,即玩家每分钟实际打出去给对手的垃圾行数。\n一定程度体现玩家给对手实际造成的攻击力。",
}, },
{"DPM", {"DPM",
"dig defend", "挖掘 防御 防守 dig defend",
"term", "term",
"Dig/Defend Per Minute\n挖掘每分,即玩家每分钟向下挖掘的垃圾行数。\n某些时候可以体现玩家生存能力。\n\n或:防御(抵消+挖掘)每分。", "Dig/Defend Per Minute\n挖掘每分,即玩家每分钟向下挖掘的垃圾行数。\n某些时候可以体现玩家生存能力。\n\n或:防御(抵消+挖掘)每分。",
}, },
{"RPM", {"RPM",
"receive jieshou", "接收 接受 receive jieshou",
"term", "term",
"Receive Per Minute\n接收每分,即玩家每分钟收到来自对手的垃圾行数。\n一定程度体现玩家被对手施加的压力。", "Receive Per Minute\n接收每分,即玩家每分钟收到来自对手的垃圾行数。\n一定程度体现玩家被对手施加的压力。",
}, },
{"ADPM", {"ADPM",
"attack defend vs", "攻击 防御 防守 attack defend vs",
"term", "term",
"Atk+Dig Per Minute\n攻击+挖掘每分用于在同一局游戏内对比玩家间水平差距比APM更准确一些。在TETR.IO中叫VS的数据就是ADPM调整过比例具体是Atk + Dig per 100s", "Atk+Dig Per Minute\n攻击+挖掘每分用于在同一局游戏内对比玩家间水平差距比APM更准确一些。在TETR.IO中叫VS的数据就是ADPM调整过比例具体是Atk + Dig per 100s",
}, },
{"APL", {"APL",
"xiaolv", "效率 xiaolv",
"term", "term",
"Attack Per Line\n攻击每行,也叫效率,体现玩家攻击的行利用率。", "Attack Per Line\n攻击每行,也叫效率,体现玩家攻击的行利用率。",
}, },
@@ -619,7 +624,7 @@ return{
"在……之下\n用于表示成绩单位一般可不写比如40L成绩Sub 30是秒1000行Sub 15是分钟不写项目默认是40L\n\n39.95s是Sub 4040.###s不是Sub 40。\n请不要使用Sub 62之类的词因为sub本身就是表示大约 一分钟左右的成绩精确到5~10s就可以了一般30s以内的成绩用sub## 的时候才会精确到1s。", "在……之下\n用于表示成绩单位一般可不写比如40L成绩Sub 30是秒1000行Sub 15是分钟不写项目默认是40L\n\n39.95s是Sub 4040.###s不是Sub 40。\n请不要使用Sub 62之类的词因为sub本身就是表示大约 一分钟左右的成绩精确到5~10s就可以了一般30s以内的成绩用sub## 的时候才会精确到1s。",
}, },
{"挖掘 Dig", {"挖掘 Dig",
"downstack ds wajue", "挖掘 downstack ds wajue",
"term", "term",
"指消除从场地底部进入的垃圾行对手攻击打过来或者模式中自动生成。也叫downstack(DS)。", "指消除从场地底部进入的垃圾行对手攻击打过来或者模式中自动生成。也叫downstack(DS)。",
}, },
@@ -854,11 +859,6 @@ return{
"term", "term",
"七个块初始权重设为0\n要取块的时候,\n先把七个数都除以2然后加上0~1的随机数\n最大的数字是第几个的就出对应的块然后将其权重除以3.5\n循环。",--Discovered by zxc "七个块初始权重设为0\n要取块的时候,\n先把七个数都除以2然后加上0~1的随机数\n最大的数字是第几个的就出对应的块然后将其权重除以3.5\n循环。",--Discovered by zxc
}, },
{"C2踢墙",
"kick",
"term",
"左下右下左2右2\n(任何方块的任何旋转都使用这个表)。",
},
{"堆叠 Stack", {"堆叠 Stack",
"duidie stacking", "duidie stacking",
"term", "term",
@@ -965,7 +965,8 @@ return{
{"QT炮", {"QT炮",
"qt cannon", "qt cannon",
"setup", "setup",
"QT炮细节未知。", "一种能以更高的概率搭出开局DT Attack的类似DT炮的定式。"..HDwiki,
HDsearch.."dt",
}, },
{"MT", {"MT",
"mt", "mt",
@@ -1003,9 +1004,10 @@ return{
HDsearch.."godspin", HDsearch.."godspin",
}, },
{"信天翁", {"信天翁",
"xintianweng", "xintianweng albatross",
"setup", "setup",
"一种高观赏性几乎不浪费T的快节奏强力T2-T3-T2-PC开局。", "一种高观赏性几乎不浪费T的快节奏强力T2-T3-T2-PC开局。"..HDwiki,
HDsearch.."Albatross_Special",
}, },
{"鹈鹕", {"鹈鹕",
"tihu", "tihu",
@@ -1013,9 +1015,22 @@ return{
"一种类似信天翁的定式,在块序不能信天翁的时候可以用。", "一种类似信天翁的定式,在块序不能信天翁的时候可以用。",
}, },
{"七巧板", {"七巧板",
"qiqiaoban", "qiqiaoban tangram",
"setup", "setup",
"一种极大概率能摆出来并且很大概率能做到PC的定式本游戏中的pc练习中空出不规则区域的那个就是七巧板。", "一种极大概率能摆出来并且很大概率能做到PC的定式本游戏中的pc练习中空出不规则区域的那个就是七巧板。"..HDwiki,
HDsearch.."Perfect_Clear_Opener",
},
{"DPC",
"DPC",
"setup",
"在场地空白1bag还剩一块的情况下能够100%搭成的TSD+PC的定式。常见于开局三包PC的后续。"..HDwiki,
HDsearch.."DPC_Setups",
},
{"Gamushiro堆叠",
"gamushiro",
"setup",
"ガムシロ積みGamushiro堆叠一种开局TD-Attack的定式。"..HDwiki,
HDsearch.."Gamushiro_Stacking",
}, },
--形状 --形状
@@ -1042,6 +1057,12 @@ return{
"STMB cave\n在高空3宽坑架SZ捐一个T2的形状。"..HDwiki, "STMB cave\n在高空3宽坑架SZ捐一个T2的形状。"..HDwiki,
HDsearch.."stmb_cave", HDsearch.."stmb_cave",
}, },
{"双刃剑",
"shuangrenjian fractal spider",
"pattern",
"两个T2形状叠在一起。"..HDwiki,
HDsearch.."Fractal",
},
{"LST堆叠", {"LST堆叠",
"lst", "lst",
"pattern", "pattern",
@@ -1061,14 +1082,15 @@ return{
HDsearch.."imperial_cross", HDsearch.."imperial_cross",
}, },
{"雨宫炮", {"雨宫炮",
"yugong", "yugong amemiya",
"pattern", "pattern",
"一种捐T2后可消四的形状常见于DT的一个分支。", "一种捐T2后可消四的形状常见于DT的一个分支。",
}, },
{"千鸟格子", {"千鸟格子",
"qianniaoge", "qianniaoge",
"pattern", "pattern",
"一种在小洞上捐一个T2后还能做一个T2的形状。", "一种在小洞上捐一个T2后还能做一个T2的形状。"..HDwiki,
HDsearch.."Cut_copy",
}, },
{"六巧板", {"六巧板",
"liuqiaoban", "liuqiaoban",
@@ -1076,9 +1098,10 @@ return{
"一种常用于增加中局PC概率的形状本游戏中的PC练习中空出4×4方形区域就是六巧板。", "一种常用于增加中局PC概率的形状本游戏中的PC练习中空出4×4方形区域就是六巧板。",
}, },
{"绯红之王", {"绯红之王",
"feihongzhiwang", "feihongzhiwang king crimson",
"pattern", "pattern",
"在STSD上叠若干个T3的形状。", "在STSD上叠若干个T3的形状。"..HDwiki,
HDsearch.."King_Crimson",
}, },
--存档管理 --存档管理

View File

@@ -14,9 +14,9 @@ return{
sureReset="Press again to reset", sureReset="Press again to reset",
sureDelete="Press again to delete", sureDelete="Press again to delete",
newDay="A new day, a new beginning!", newDay="A new day, a new beginning!",
playedLong="You have been playing for a long time. Time to a break!", playedLong="You have been playing for a long time. Time to take a break!",
playedTooMuch="You have been playing for far too long! Techmino is fun, but remember to take some rests!", playedTooMuch="You have been playing for far too long! Techmino is fun, but remember to take some rests!",
settingWarn="Careful - youre about to change some uncommon settings!", settingWarn="Careful youre about to change some uncommon settings!",
atkModeName={"Random","Badges","K.O.s","Attackers"}, atkModeName={"Random","Badges","K.O.s","Attackers"},
royale_remain="$1 Players Left", royale_remain="$1 Players Left",
@@ -59,7 +59,7 @@ return{
finesse_ap="All Perfect", finesse_ap="All Perfect",
finesse_fc="Full Combo", finesse_fc="Full Combo",
page="Page:", page="Page ",
cc_fixed="CC is incompatible with fixed sequences.", cc_fixed="CC is incompatible with fixed sequences.",
cc_swap="CC is incompatible when the hold mode is set to Swap.", cc_swap="CC is incompatible when the hold mode is set to Swap.",
@@ -459,7 +459,6 @@ return{
atkFX="Atk FX", atkFX="Atk FX",
frame="Render Frame Rate (%)", frame="Render Frame Rate (%)",
FTlock="Frame skip",
text="Line Clear Pop-Ups", text="Line Clear Pop-Ups",
score="Score Pop-Ups", score="Score Pop-Ups",
@@ -688,6 +687,7 @@ return{
register="Sign Up", register="Sign Up",
email="Email Address", email="Email Address",
password="Password", password="Password",
showEmail="Show Email",
keepPW="Remember me", keepPW="Remember me",
login="Log In", login="Log In",
}, },
@@ -756,108 +756,112 @@ return{
}, },
}, },
modes={ modes={
['sprint_10l']= {"Sprint", "10L", "Clear 10 lines!"}, ['sprint_10l']= {"Sprint", "10L", "Clear 10 lines!"},
['sprint_20l']= {"Sprint", "20L", "Clear 20 lines!"}, ['sprint_20l']= {"Sprint", "20L", "Clear 20 lines!"},
['sprint_40l']= {"Sprint", "40L", "Clear 40 lines!"}, ['sprint_40l']= {"Sprint", "40L", "Clear 40 lines!"},
['sprint_100l']= {"Sprint", "100L", "Clear 100 lines!"}, ['sprint_100l']= {"Sprint", "100L", "Clear 100 lines!"},
['sprint_400l']= {"Sprint", "400L", "Clear 400 lines!"}, ['sprint_400l']= {"Sprint", "400L", "Clear 400 lines!"},
['sprint_1000l']= {"Sprint", "1,000L", "Clear 1,000 lines!"}, ['sprint_1000l']= {"Sprint", "1,000L", "Clear 1,000 lines!"},
['sprintPenta']= {"Sprint", "PENTOMINO", "40L with 18 pentominoes"}, ['sprintPenta']= {"Sprint", "PENTOMINO", "40L with 18 pentominoes"},
['sprintMPH']= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"}, ['sprintMPH']= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"},
['sprint123']= {"Sprint", "M123", "40L with only monominoes, dominoes, and triminoes"}, ['sprint123']= {"Sprint", "M123", "40L with only monominoes, dominoes, and triminoes"},
['secret_grade']= {"Secret Grade", "", "Build a zig-zag hole formation, following to the guide!"}, ['secret_grade']= {"Secret Grade", "", "Build a zig-zag hole formation, following to the guide!"},
['dig_10l']= {"Dig", "10L", "Dig 10 garbage lines"}, ['dig_10l']= {"Dig", "10L", "Dig 10 garbage lines as fast as you can!"},
['dig_40l']= {"Dig", "40L", "Dig 40 garbage lines"}, ['dig_40l']= {"Dig", "40L", "Dig 40 garbage lines as fast as you can!"},
['dig_100l']= {"Dig", "100L", "Dig 100 garbage lines"}, ['dig_100l']= {"Dig", "100L", "Dig 100 garbage lines as fast as you can!"},
['dig_400l']= {"Dig", "400L", "Dig 400 garbage lines"}, ['dig_400l']= {"Dig", "400L", "Dig 400 garbage lines as fast as you can!"},
['drought_n']= {"Drought", "100L", "No I-pieces available"}, ['dig_eff_10l']= {"Dig", "EFFICIENCY 10L", "Dig 10 garbage lines with the least pieces!"},
['drought_l']= {"Drought+", "100L", "W T F"}, ['dig_eff_40l']= {"Dig", "EFFICIENCY 40L", "Dig 40 garbage lines with the least pieces!"},
['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with increasing speed"}, ['dig_eff_100l']= {"Dig", "EFFICIENCY 100L","Dig 100 garbage lines with the least pieces!"},
['marathon_h']= {"Marathon", "HARD", "200-line high-speed marathon"}, ['dig_eff_400l']= {"Dig", "EFFICIENCY 400L","Dig 400 garbage lines with the least pieces!"},
['solo_e']= {"Battle", "EASY", "Defeat the AI!"}, ['drought_n']= {"Drought", "100L", "No I-pieces available"},
['solo_n']= {"Battle", "NORMAL", "Defeat the AI!"}, ['drought_l']= {"Drought+", "100L", "W T F"},
['solo_h']= {"Battle", "HARD", "Defeat the AI!"}, ['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with increasing speed"},
['solo_l']= {"Battle", "LUNATIC", "Defeat the AI!"}, ['marathon_h']= {"Marathon", "HARD", "200-line high-speed marathon"},
['solo_u']= {"Battle", "ULTIMATE", "Defeat the AI!"}, ['solo_e']= {"Battle", "EASY", "Defeat the AI!"},
['techmino49_e']= {"Tech 49", "EASY", "49-player battle.\nThe last one standing wins"}, ['solo_n']= {"Battle", "NORMAL", "Defeat the AI!"},
['techmino49_h']= {"Tech 49", "HARD", "49-player battle.\nThe last one standing wins"}, ['solo_h']= {"Battle", "HARD", "Defeat the AI!"},
['techmino49_u']= {"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins"}, ['solo_l']= {"Battle", "LUNATIC", "Defeat the AI!"},
['techmino99_e']= {"Tech 99", "EASY", "99-player battle.\nThe last one standing wins"}, ['solo_u']= {"Battle", "ULTIMATE", "Defeat the AI!"},
['techmino99_h']= {"Tech 99", "HARD", "99-player battle.\nThe last one standing wins"}, ['techmino49_e']= {"Tech 49", "EASY", "49-player battle.\nThe last one standing wins"},
['techmino99_u']= {"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins"}, ['techmino49_h']= {"Tech 49", "HARD", "49-player battle.\nThe last one standing wins"},
['round_e']= {"Turn-Based", "EASY", "Take turns to play against the AI!"}, ['techmino49_u']= {"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins"},
['round_n']= {"Turn-Based", "NORMAL", "Take turns to play against the AI!"}, ['techmino99_e']= {"Tech 99", "EASY", "99-player battle.\nThe last one standing wins"},
['round_h']= {"Turn-Based", "HARD", "Take turns to play against the AI!"}, ['techmino99_h']= {"Tech 99", "HARD", "99-player battle.\nThe last one standing wins"},
['round_l']= {"Turn-Based", "LUNATIC", "Take turns to play against the AI!"}, ['techmino99_u']= {"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins"},
['round_u']= {"Turn-Based", "ULTIMATE", "Take turns to play against the AI!"}, ['round_e']= {"Turn-Based", "EASY", "Take turns to play against the AI!"},
['big_n']= {"Big", "NORMAL", "Play in a smaller field!"}, ['round_n']= {"Turn-Based", "NORMAL", "Take turns to play against the AI!"},
['big_h']= {"Big", "HARD", "Play in a smaller field!"}, ['round_h']= {"Turn-Based", "HARD", "Take turns to play against the AI!"},
['master_n']= {"Master", "NORMAL", "For 20G beginners"}, ['round_l']= {"Turn-Based", "LUNATIC", "Take turns to play against the AI!"},
['master_h']= {"Master", "HARD", "For 20G pros"}, ['round_u']= {"Turn-Based", "ULTIMATE", "Take turns to play against the AI!"},
['master_m']= {"Master", "M21", "For 20G Masters"}, ['big_n']= {"Big", "NORMAL", "Play in a smaller field!"},
['master_final']= {"Master", "FINAL", "20G and beyond"}, ['big_h']= {"Big", "HARD", "Play in a smaller field!"},
['master_ph']= {"Master", "PHANTASM", "???"}, ['master_n']= {"Master", "NORMAL", "For 20G beginners"},
['master_g']= {"Master", "GRADED", "Get the highest grade you can!"}, ['master_h']= {"Master", "HARD", "For 20G pros"},
['master_ex']= {"GrandMaster", "EXTRA", "An eternity shorter than an instant"}, ['master_m']= {"Master", "M21", "For 20G Masters"},
['master_instinct']={"Master", "INSTINCT", "What if the active piece turned invisible?"}, ['master_final']= {"Master", "FINAL", "20G and beyond"},
['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"}, ['master_ph']= {"Master", "PHANTASM", "???"},
['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"}, ['master_g']= {"Master", "GRADED", "Get the highest grade you can!"},
['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"}, ['master_ex']= {"GrandMaster", "EXTRA", "An eternity shorter than an instant"},
['strategy_e_plus']={"Strategy", "EASY+", "Holdless strategy!"}, ['master_instinct']={"Master", "INSTINCT", "What if the active piece turned invisible?"},
['strategy_h_plus']={"Strategy", "HARD+", "Holdless strategy!"}, ['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
['strategy_u_plus']={"Strategy", "ULTIMATE+", "Holdless strategy!"}, ['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
['blind_e']= {"Invisible", "HALF", "For novices"}, ['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
['blind_n']= {"Invisible", "ALL", "For intermediates"}, ['strategy_e_plus']={"Strategy", "EASY+", "Holdless strategy!"},
['blind_h']= {"Invisible", "SUDDEN", "For the experienced"}, ['strategy_h_plus']={"Strategy", "HARD+", "Holdless strategy!"},
['blind_l']= {"Invisible", "SUDDEN+", "For professionals"}, ['strategy_u_plus']={"Strategy", "ULTIMATE+", "Holdless strategy!"},
['blind_u']= {"Invisible", "?", "Are you ready?"}, ['blind_e']= {"Invisible", "HALF", "For novices"},
['blind_wtf']= {"Invisible", "WTF", "Youre not ready"}, ['blind_n']= {"Invisible", "ALL", "For intermediates"},
['classic_e']= {"Classic", "EASY", "A low-speed recreation from the 80s"}, ['blind_h']= {"Invisible", "SUDDEN", "For the experienced"},
['classic_h']= {"Classic", "HARD", "A medium-speed recreation from the 80s"}, ['blind_l']= {"Invisible", "SUDDEN+", "For professionals"},
['classic_l']= {"Classic", "LUNATIC", "A high-speed recreation from the 80s"}, ['blind_u']= {"Invisible", "?", "Are you ready?"},
['classic_u']= {"Classic", "ULTIMATE", "A very high-speed recreation from the 80s"}, ['blind_wtf']= {"Invisible", "WTF", "Youre not ready"},
['survivor_e']= {"Survival", "EASY", "How long can you survive?"}, ['classic_e']= {"Classic", "EASY", "A low-speed recreation from the 80s"},
['survivor_n']= {"Survival", "NORMAL", "How long can you survive?"}, ['classic_h']= {"Classic", "HARD", "A medium-speed recreation from the 80s"},
['survivor_h']= {"Survival", "HARD", "How long can you survive?"}, ['classic_l']= {"Classic", "LUNATIC", "A high-speed recreation from the 80s"},
['survivor_l']= {"Survival", "LUNATIC", "How long can you survive?"}, ['classic_u']= {"Classic", "ULTIMATE", "A very high-speed recreation from the 80s"},
['survivor_u']= {"Survival", "ULTIMATE", "How long can you survive?"}, ['survivor_e']= {"Survival", "EASY", "How long can you survive?"},
['attacker_h']= {"Attacker", "HARD", "Practice your attacking skills!"}, ['survivor_n']= {"Survival", "NORMAL", "How long can you survive?"},
['attacker_u']= {"Attacker", "ULTIMATE", "Practice your attacking skills!"}, ['survivor_h']= {"Survival", "HARD", "How long can you survive?"},
['defender_n']= {"Defender", "NORMAL", "Practice your defencing skills!"}, ['survivor_l']= {"Survival", "LUNATIC", "How long can you survive?"},
['defender_l']= {"Defender", "LUNATIC", "Practice your defencing skills!"}, ['survivor_u']= {"Survival", "ULTIMATE", "How long can you survive?"},
['dig_h']= {"Driller", "HARD", "Digging practice!"}, ['attacker_h']= {"Attacker", "HARD", "Practice your attacking skills!"},
['dig_u']= {"Driller", "ULTIMATE", "Digging practice!"}, ['attacker_u']= {"Attacker", "ULTIMATE", "Practice your attacking skills!"},
['clearRush']= {"Clear Rush", "NORMAL", "All-spin tutorial!\n[Under construction]"}, ['defender_n']= {"Defender", "NORMAL", "Practice your defensing skills!"},
['c4wtrain_n']= {"C4W Training", "NORMAL", "Infinite combos"}, ['defender_l']= {"Defender", "LUNATIC", "Practice your defensing skills!"},
['c4wtrain_l']= {"C4W Training", "LUNATIC", "Infinite combos"}, ['dig_h']= {"Driller", "HARD", "Digging practice!"},
['pctrain_n']= {"PC Training", "NORMAL", "Perfect Clear practice"}, ['dig_u']= {"Driller", "ULTIMATE", "Digging practice!"},
['pctrain_l']= {"PC Training", "LUNATIC", "A harder Perfect Clear practice"}, ['clearRush']= {"Clear Rush", "NORMAL", "All-spin tutorial!\n[Under construction]"},
['pc_n']= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"}, ['c4wtrain_n']= {"C4W Training", "NORMAL", "Infinite combos"},
['pc_h']= {"PC Challenge", "HARD", "Get PCs within 100 lines!"}, ['c4wtrain_l']= {"C4W Training", "LUNATIC", "Infinite combos"},
['pc_l']= {"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"}, ['pctrain_n']= {"PC Training", "NORMAL", "Perfect Clear practice"},
['pc_inf']= {"Inf. PC Challenge", "", "Get PCs as much as you can"}, ['pctrain_l']= {"PC Training", "LUNATIC", "A harder Perfect Clear practice"},
['tech_n']= {"Tech", "NORMAL", "Try to keep the\nBack-to-Back chain!"}, ['pc_n']= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
['tech_n_plus']= {"Tech", "NORMAL+", "Spins & PCs only"}, ['pc_h']= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
['tech_h']= {"Tech", "HARD", "Try to keep the\nBack-to-Back chain!"}, ['pc_l']= {"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
['tech_h_plus']= {"Tech", "HARD+", "Spins & PCs only"}, ['pc_inf']= {"Inf. PC Challenge", "", "Get PCs as much as you can"},
['tech_l']= {"Tech", "LUNATIC", "Try to keep the\nBack-to-Back chain!"}, ['tech_n']= {"Tech", "NORMAL", "Try to keep the\nBack-to-Back chain!"},
['tech_l_plus']= {"Tech", "LUNATIC+", "Spins & PCs only"}, ['tech_n_plus']= {"Tech", "NORMAL+", "Spins & PCs only"},
['tech_finesse']= {"Tech", "FINESSE", "No finesse faults!"}, ['tech_h']= {"Tech", "HARD", "Try to keep the\nBack-to-Back chain!"},
['tech_finesse_f']= {"Tech", "FINESSE+", "No normal clears and finesse faults!"}, ['tech_h_plus']= {"Tech", "HARD+", "Spins & PCs only"},
['tsd_e']= {"TSD Challenge", "EASY", "T-Spin Doubles only!"}, ['tech_l']= {"Tech", "LUNATIC", "Try to keep the\nBack-to-Back chain!"},
['tsd_h']= {"TSD Challenge", "HARD", "T-Spin Doubles only!"}, ['tech_l_plus']= {"Tech", "LUNATIC+", "Spins & PCs only"},
['tsd_u']= {"TSD Challenge", "ULTIMATE", "T-Spin Doubles only!"}, ['tech_finesse']= {"Tech", "FINESSE", "No finesse faults!"},
['backfire_n']= {"Backfire", "NORMAL", "Hold back the backfiring garbage lines"}, ['tech_finesse_f']= {"Tech", "FINESSE+", "No normal clears and finesse faults!"},
['backfire_h']= {"Backfire", "HARD", "Hold back the backfiring garbage lines"}, ['tsd_e']= {"TSD Challenge", "EASY", "T-Spin Doubles only!"},
['backfire_l']= {"Backfire", "LUNATIC", "Hold back the backfiring garbage lines"}, ['tsd_h']= {"TSD Challenge", "HARD", "T-Spin Doubles only!"},
['backfire_u']= {"Backfire", "ULTIMATE", "Hold back the backfiring garbage lines"}, ['tsd_u']= {"TSD Challenge", "ULTIMATE", "T-Spin Doubles only!"},
['sprintAtk']= {"Sprint", "100 Attack", "Send 100 lines!"}, ['backfire_n']= {"Backfire", "NORMAL", "Hold back the backfiring garbage lines"},
['sprintEff']= {"Sprint", "Efficiency", "Send more attack in 40lines!"}, ['backfire_h']= {"Backfire", "HARD", "Hold back the backfiring garbage lines"},
['zen']= {'Zen', "200", "A 200-line run without a time limit"}, ['backfire_l']= {"Backfire", "LUNATIC", "Hold back the backfiring garbage lines"},
['ultra']= {'Ultra', "EXTRA", "A 2-minute score attack"}, ['backfire_u']= {"Backfire", "ULTIMATE", "Hold back the backfiring garbage lines"},
['infinite']= {"Infinite", "", "Just a sandbox"}, ['sprintAtk']= {"Sprint", "100 Attack", "Send 100 lines!"},
['infinite_dig']= {"Infinite: Dig", "", "Dig-diggin-dug"}, ['sprintEff']= {"Sprint", "Efficiency", "Send more attack in 40lines!"},
['marathon_inf']= {"Marathon", "INFINITE", "Infinite marathon."}, ['zen']= {'Zen', "200", "A 200-line run without a time limit"},
['ultra']= {'Ultra', "EXTRA", "A 2-minute score attack"},
['infinite']= {"Infinite", "", "Just a sandbox"},
['infinite_dig']= {"Infinite: Dig", "", "Dig-diggin-dug"},
['marathon_inf']= {"Marathon", "INFINITE", "Infinite marathon."},
['custom_clear']= {"Custom", "NORMAL"}, ['custom_clear']= {"Custom", "NORMAL"},
['custom_puzzle']= {"Custom", "PUZZLE"}, ['custom_puzzle']= {"Custom", "PUZZLE"},
@@ -890,7 +894,7 @@ return{
"Bridge clear coming soon!", "Bridge clear coming soon!",
"Can you master this modern yet familiar stacker?", "Can you master this modern yet familiar stacker?",
"Certainly within this heart lies my M@STERPIECE.", "Certainly within this heart lies my M@STERPIECE.",
"Change logs in English can be found on Discord.", "Changelogs in English can be found on Discord.",
"Color clear coming soon!", "Color clear coming soon!",
"Decreasing DAS and ARR makes your game faster but harder to control.", "Decreasing DAS and ARR makes your game faster but harder to control.",
"Did I just see a Back-to-Back-to-Back?", "Did I just see a Back-to-Back-to-Back?",
@@ -935,7 +939,7 @@ return{
"pps-0.01", "pps-0.01",
"Server down randomly", "Server down randomly",
"Some requirements to achieve rank X are intentionally set to be difficult for even the best players.", "Some requirements to achieve rank X are intentionally set to be difficult for even the best players.",
"Soon youll be able to play against friends and foes all over the world.", "Soon, youll be able to play against friends and foes all over the world.",
"Split clear coming soon!", "Split clear coming soon!",
"sudo rm -rf /*", "sudo rm -rf /*",
"Techmino is a portmanteau of “technique” and “tetromino”.", "Techmino is a portmanteau of “technique” and “tetromino”.",

View File

@@ -330,7 +330,6 @@ return{
atkFX="FX Vis. de Ataque", atkFX="FX Vis. de Ataque",
frame="Ratio de FPSs(%)", frame="Ratio de FPSs(%)",
FTlock="Bloqueo por frames",
text="Texto de Acciones", text="Texto de Acciones",
score="Puntaje en Pantalla", score="Puntaje en Pantalla",
@@ -551,6 +550,7 @@ return{
register="Registrarse", register="Registrarse",
email="Correo Elec.", email="Correo Elec.",
password="Contraseña", password="Contraseña",
-- showEmail="Show Email",
keepPW="Recordar credenciales", keepPW="Recordar credenciales",
login="Entrar", login="Entrar",
}, },

View File

@@ -423,7 +423,6 @@ return{
atkFX="Effets d'attaque", atkFX="Effets d'attaque",
frame="Montrer les FPS(%)", frame="Montrer les FPS(%)",
-- FTlock="Frame-Time Lock",
text="Texte d'action", text="Texte d'action",
score="Pop-up de score", score="Pop-up de score",
@@ -642,6 +641,7 @@ return{
register="Enregistrement", register="Enregistrement",
email="E-mail", email="E-mail",
password="Mot de passe", password="Mot de passe",
-- showEmail="Show Email",
-- keepPW="Remember me", -- keepPW="Remember me",
login="Connexion", login="Connexion",
}, },

View File

@@ -461,7 +461,6 @@ return{
atkFX="Efek Serang", atkFX="Efek Serang",
frame="Kecepatan Bingkai (%)", frame="Kecepatan Bingkai (%)",
FTlock="Lewat Bingkai",
text="Teks Baris", text="Teks Baris",
score="Teks Nilai", score="Teks Nilai",
@@ -690,6 +689,7 @@ return{
register="Daftar", register="Daftar",
email="Alamat Email", email="Alamat Email",
password="Password", password="Password",
-- showEmail="Show Email",
keepPW="Ingat Saya", keepPW="Ingat Saya",
login="Masuk", login="Masuk",
}, },
@@ -758,103 +758,107 @@ return{
}, },
}, },
modes={ modes={
['sprint_10l']= {"Balapan", "10L", "Buat 10 baris!"}, ['sprint_10l']= {"Balapan", "10L", "Buat 10 baris!"},
['sprint_20l']= {"Balapan", "20L", "Buat 20 baris!"}, ['sprint_20l']= {"Balapan", "20L", "Buat 20 baris!"},
['sprint_40l']= {"Balapan", "40L", "Buat 40 baris!"}, ['sprint_40l']= {"Balapan", "40L", "Buat 40 baris!"},
['sprint_100l']= {"Balapan", "100L", "Buat 100 baris!"}, ['sprint_100l']= {"Balapan", "100L", "Buat 100 baris!"},
['sprint_400l']= {"Balapan", "400L", "Buat 400 baris!"}, ['sprint_400l']= {"Balapan", "400L", "Buat 400 baris!"},
['sprint_1000l']= {"Balapan", "1.000L", "Buat 1.000 baris!"}, ['sprint_1000l']= {"Balapan", "1.000L", "Buat 1.000 baris!"},
['sprintPenta']= {"Balapan", "PENTOMINO", "40L dengan pentomino!"}, ['sprintPenta']= {"Balapan", "PENTOMINO", "40L dengan pentomino!"},
['sprintMPH']= {"Balapan", "MPH", "Tanpa ingatan\nTanpa pratinjau\nTanpa simpan"}, ['sprintMPH']= {"Balapan", "MPH", "Tanpa ingatan\nTanpa pratinjau\nTanpa simpan"},
['dig_10l']= {"Gali", "10L", "Gali 10 baris!"}, ['dig_10l']= {"Gali", "10L", "Gali 10 baris!"},
['dig_40l']= {"Gali", "40L", "Gali 40 baris!"}, ['dig_40l']= {"Gali", "40L", "Gali 40 baris!"},
['dig_100l']= {"Gali", "100L", "Gali 100 baris!"}, ['dig_100l']= {"Gali", "100L", "Gali 100 baris!"},
['dig_400l']= {"Gali", "400L", "Gali 400 baris!"}, ['dig_400l']= {"Gali", "400L", "Gali 400 baris!"},
['drought_n']= {"Nasib Buruk", "100L", "Tidak ada blok I..."}, ['dig_eff_10l']= {"Gali", "EFISIENSI 10L", "Gali 10 baris!"},
['drought_l']= {"Nasib Buruk+", "100L", "Nasib sangat buruk..."}, ['dig_eff_40l']= {"Gali", "EFISIENSI 40L", "Gali 40 baris!"},
['marathon_n']= {"Maraton", "NORMAL", "200-baris maraton dengan kecepatan meningkat"}, ['dig_eff_100l']= {"Gali", "EFISIENSI 100L","Gali 100 baris!"},
['marathon_h']= {"Maraton", "SULIT", "200-baris maraton dengan kecepatan tinggi"}, ['dig_eff_400l']= {"Gali", "EFISIENSI 400L","Gali 400 baris!"},
['solo_e']= {"Tarung", "MUDAH", "Kalahkan AInya!"}, ['drought_n']= {"Nasib Buruk", "100L", "Tidak ada blok I..."},
['solo_n']= {"Tarung", "NORMAL", "Kalahkan AInya!"}, ['drought_l']= {"Nasib Buruk+", "100L", "Nasib sangat buruk..."},
['solo_h']= {"Tarung", "SULIT", "Kalahkan AInya!"}, ['marathon_n']= {"Maraton", "NORMAL", "200-baris maraton dengan kecepatan meningkat"},
['solo_l']= {"Tarung", "GILA", "Kalahkan AInya!"}, ['marathon_h']= {"Maraton", "SULIT", "200-baris maraton dengan kecepatan tinggi"},
['solo_u']= {"Tarung", "TERAKHIR", "Kalahkan AInya!"}, ['solo_e']= {"Tarung", "MUDAH", "Kalahkan AInya!"},
['techmino49_e']= {"Tech 49", "MUDAH", "Pertarungan dengan 49 pemain."}, ['solo_n']= {"Tarung", "NORMAL", "Kalahkan AInya!"},
['techmino49_h']= {"Tech 49", "SULIT", "Pertarungan dengan 49 pemain."}, ['solo_h']= {"Tarung", "SULIT", "Kalahkan AInya!"},
['techmino49_u']= {"Tech 49", "TERAKHIR", "Pertarungan dengan 49 pemain."}, ['solo_l']= {"Tarung", "GILA", "Kalahkan AInya!"},
['techmino99_e']= {"Tech 99", "MUDAH", "Pertarungan dengan 99 pemain."}, ['solo_u']= {"Tarung", "TERAKHIR", "Kalahkan AInya!"},
['techmino99_h']= {"Tech 99", "SULIT", "Pertarungan dengan 99 pemain."}, ['techmino49_e']= {"Tech 49", "MUDAH", "Pertarungan dengan 49 pemain."},
['techmino99_u']= {"Tech 99", "TERAKHIR", "Pertarungan dengan 99 pemain."}, ['techmino49_h']= {"Tech 49", "SULIT", "Pertarungan dengan 49 pemain."},
['round_e']= {"Giliran", "MUDAH", "Giliran main melawan AI!"}, ['techmino49_u']= {"Tech 49", "TERAKHIR", "Pertarungan dengan 49 pemain."},
['round_n']= {"Giliran", "NORMAL", "Giliran main melawan AI!"}, ['techmino99_e']= {"Tech 99", "MUDAH", "Pertarungan dengan 99 pemain."},
['round_h']= {"Giliran", "SULIT", "Giliran main melawan AI!"}, ['techmino99_h']= {"Tech 99", "SULIT", "Pertarungan dengan 99 pemain."},
['round_l']= {"Giliran", "GILA", "Giliran main melawan AI!"}, ['techmino99_u']= {"Tech 99", "TERAKHIR", "Pertarungan dengan 99 pemain."},
['round_u']= {"Giliran", "TERAKHIR", "Giliran main melawan AI!"}, ['round_e']= {"Giliran", "MUDAH", "Giliran main melawan AI!"},
['master_n']= {"Jago", "NORMAL", "Untuk pemula 20G"}, ['round_n']= {"Giliran", "NORMAL", "Giliran main melawan AI!"},
['master_h']= {"Jago", "SULIT", "Untuk pro 20G"}, ['round_h']= {"Giliran", "SULIT", "Giliran main melawan AI!"},
['master_m']= {"Jago", "M21", "Untuk jago 20G"}, ['round_l']= {"Giliran", "GILA", "Giliran main melawan AI!"},
['master_final']= {"Jago", "TERAKHIR", "Lebih dari 20G"}, ['round_u']= {"Giliran", "TERAKHIR", "Giliran main melawan AI!"},
['master_ph']= {"Jago", "KHAYALAN", "???"}, ['master_n']= {"Jago", "NORMAL", "Untuk pemula 20G"},
['master_ex']= {"Sangat Jago", "EKSTRA", "Blok tidak kelihatan"}, ['master_h']= {"Jago", "SULIT", "Untuk pro 20G"},
['master_instinct']={"Jago", "INSTINK", "Bagaimana jika blok terkontrol tersembunyi?"}, ['master_m']= {"Jago", "M21", "Untuk jago 20G"},
['strategy_e']= {"Strategi", "MUDAH", "Keputusan 20G cepat"}, ['master_final']= {"Jago", "TERAKHIR", "Lebih dari 20G"},
['strategy_h']= {"Strategi", "SULIT", "Keputusan 20G cepat"}, ['master_ph']= {"Jago", "KHAYALAN", "???"},
['strategy_u']= {"Strategi", "TERAKHIR", "Keputusan 20G cepat"}, ['master_ex']= {"Sangat Jago", "EKSTRA", "Blok tidak kelihatan"},
['strategy_e_plus']={"Strategi", "MUDAH+", "Mode strategi, tetapi tanpa menyimpan"}, ['master_instinct']={"Jago", "INSTINK", "Bagaimana jika blok terkontrol tersembunyi?"},
['strategy_h_plus']={"Strategi", "SULIT+", "Mode strategi, tetapi tanpa menyimpan"}, ['strategy_e']= {"Strategi", "MUDAH", "Keputusan 20G cepat"},
['strategy_u_plus']={"Strategi", "TERAKHIR+", "Mode strategi, tetapi tanpa menyimpan"}, ['strategy_h']= {"Strategi", "SULIT", "Keputusan 20G cepat"},
['blind_e']= {"Tak Terlihat", "MUDAH", "Untuk pemula"}, ['strategy_u']= {"Strategi", "TERAKHIR", "Keputusan 20G cepat"},
['blind_n']= {"Tak Terlihat", "NORMAL", "Untuk amatir"}, ['strategy_e_plus']={"Strategi", "MUDAH+", "Mode strategi, tetapi tanpa menyimpan"},
['blind_h']= {"Tak Terlihat", "SULIT", "Untuk orang berpengalaman"}, ['strategy_h_plus']={"Strategi", "SULIT+", "Mode strategi, tetapi tanpa menyimpan"},
['blind_l']= {"Tak Terlihat", "GILA", "Untuk profesional"}, ['strategy_u_plus']={"Strategi", "TERAKHIR+", "Mode strategi, tetapi tanpa menyimpan"},
['blind_u']= {"Tak Terlihat", "???", "Apakah Anda siap?"}, ['blind_e']= {"Tak Terlihat", "MUDAH", "Untuk pemula"},
['blind_wtf']= {"Tak Terlihat", "TERAKHIR", "Anda belum siap"}, ['blind_n']= {"Tak Terlihat", "NORMAL", "Untuk amatir"},
['classic_e']= {"Klasik", "MUDAH", "Rekreasi berkecepatan rendah dari tahun 80-an"}, ['blind_h']= {"Tak Terlihat", "SULIT", "Untuk orang berpengalaman"},
['classic_h']= {"Klasik", "SULIT", "Rekreasi berkecepatan medium dari tahun 80-an"}, ['blind_l']= {"Tak Terlihat", "GILA", "Untuk profesional"},
['classic_l']= {"Klasik", "GILA", "Rekreasi berkecepatan medium-tinggi dari tahun 80-an"}, ['blind_u']= {"Tak Terlihat", "???", "Apakah Anda siap?"},
['classic_u']= {"Klasik", "TERAKHIR", "Rekreasi berkecepatan tinggi dari tahun 80-an"}, ['blind_wtf']= {"Tak Terlihat", "TERAKHIR", "Anda belum siap"},
['survivor_e']= {"Bertahan", "MUDAH", "Berapa lama Anda bisa bertahan?"}, ['classic_e']= {"Klasik", "MUDAH", "Rekreasi berkecepatan rendah dari tahun 80-an"},
['survivor_n']= {"Bertahan", "NORMAL", "Berapa lama Anda bisa bertahan?"}, ['classic_h']= {"Klasik", "SULIT", "Rekreasi berkecepatan medium dari tahun 80-an"},
['survivor_h']= {"Bertahan", "SULIT", "Berapa lama Anda bisa bertahan?"}, ['classic_l']= {"Klasik", "GILA", "Rekreasi berkecepatan medium-tinggi dari tahun 80-an"},
['survivor_l']= {"Bertahan", "GILA", "Berapa lama Anda bisa bertahan?"}, ['classic_u']= {"Klasik", "TERAKHIR", "Rekreasi berkecepatan tinggi dari tahun 80-an"},
['survivor_u']= {"Bertahan", "TERAKHIR", "Berapa lama Anda bisa bertahan?"}, ['survivor_e']= {"Bertahan", "MUDAH", "Berapa lama Anda bisa bertahan?"},
['attacker_h']= {"Penyerang", "SULIT", "Praktekkan keahlian menyerang Anda!"}, ['survivor_n']= {"Bertahan", "NORMAL", "Berapa lama Anda bisa bertahan?"},
['attacker_u']= {"Penyerang", "TERAKHIR", "Praktekkan keahlian menyerang Anda!"}, ['survivor_h']= {"Bertahan", "SULIT", "Berapa lama Anda bisa bertahan?"},
['defender_n']= {"Pembela", "NORMAL", "Praktekkan keahlian membela Anda!"}, ['survivor_l']= {"Bertahan", "GILA", "Berapa lama Anda bisa bertahan?"},
['defender_l']= {"Pembela", "GILA", "Praktekkan keahlian membela Anda!"}, ['survivor_u']= {"Bertahan", "TERAKHIR", "Berapa lama Anda bisa bertahan?"},
['dig_h']= {"Pembor", "SULIT", "Praktekkan keahlian menggali Anda!"}, ['attacker_h']= {"Penyerang", "SULIT", "Praktekkan keahlian menyerang Anda!"},
['dig_u']= {"Pembor", "TERAKHIR", "Praktekkan keahlian menggali Anda!"}, ['attacker_u']= {"Penyerang", "TERAKHIR", "Praktekkan keahlian menyerang Anda!"},
['clearRush']= {"Gegas Baris", "NORMAL", "Tutorial all-spin!\n[Dalam pengembangan]"}, ['defender_n']= {"Pembela", "NORMAL", "Praktekkan keahlian membela Anda!"},
['c4wtrain_n']= {"Latihan C4W", "NORMAL", "Kombo tidak terbatas."}, ['defender_l']= {"Pembela", "GILA", "Praktekkan keahlian membela Anda!"},
['c4wtrain_l']= {"Latihan C4W", "GILA", "Kombo tidak terbatas."}, ['dig_h']= {"Pembor", "SULIT", "Praktekkan keahlian menggali Anda!"},
['pctrain_n']= {"Latihan PC", "NORMAL", "Latihan PC"}, ['dig_u']= {"Pembor", "TERAKHIR", "Praktekkan keahlian menggali Anda!"},
['pctrain_l']= {"Latihan PC", "GILA", "Latihan PC yang lebih sulit"}, ['clearRush']= {"Gegas Baris", "NORMAL", "Tutorial all-spin!\n[Dalam pengembangan]"},
['pc_n']= {"Tantangan PC", "NORMAL", "Dapatkan PC sampai 100 baris!"}, ['c4wtrain_n']= {"Latihan C4W", "NORMAL", "Kombo tidak terbatas."},
['pc_h']= {"Tantangan PC", "SULIT", "Dapatkan PC sampai 100 baris!"}, ['c4wtrain_l']= {"Latihan C4W", "GILA", "Kombo tidak terbatas."},
['pc_l']= {"Tantangan PC", "GILA", "Dapatkan PC sampai 100 baris!"}, ['pctrain_n']= {"Latihan PC", "NORMAL", "Latihan PC"},
['pc_inf']= {"Tantangan PC", "TAK TERBATAS", "Dapatkan PC sebanyaknya!"}, ['pctrain_l']= {"Latihan PC", "GILA", "Latihan PC yang lebih sulit"},
['tech_n']= {"Tech", "NORMAL", "Coba jaga deret Back-To-Back!"}, ['pc_n']= {"Tantangan PC", "NORMAL", "Dapatkan PC sampai 100 baris!"},
['tech_n_plus']= {"Tech", "NORMAL+", "Hanya Spins & PCs dibolehkan"}, ['pc_h']= {"Tantangan PC", "SULIT", "Dapatkan PC sampai 100 baris!"},
['tech_h']= {"Tech", "SULIT", "Coba jaga deret Back-To-Back!"}, ['pc_l']= {"Tantangan PC", "GILA", "Dapatkan PC sampai 100 baris!"},
['tech_h_plus']= {"Tech", "SULIT+", "Hanya Spins & PCs dibolehkan"}, ['pc_inf']= {"Tantangan PC", "TAK TERBATAS", "Dapatkan PC sebanyaknya!"},
['tech_l']= {"Tech", "GILA", "Coba jaga deret Back-To-Back!"}, ['tech_n']= {"Tech", "NORMAL", "Coba jaga deret Back-To-Back!"},
['tech_l_plus']= {"Tech", "GILA+", "Hanya Spins & PCs dibolehkan"}, ['tech_n_plus']= {"Tech", "NORMAL+", "Hanya Spins & PCs dibolehkan"},
['tech_finesse']= {"Tech", "EF. TOMBOL", "Efisiensi tombol harus maksimal!"}, ['tech_h']= {"Tech", "SULIT", "Coba jaga deret Back-To-Back!"},
['tech_finesse_f']= {"Tech", "EF. TOMBOL+", "Efisiensi tombol maksimal dan tidak ada garis normal!"}, ['tech_h_plus']= {"Tech", "SULIT+", "Hanya Spins & PCs dibolehkan"},
['tsd_e']= {"Tantangan TSD", "MUDAH", "Hanya T-Spin Double dibolehkan!"}, ['tech_l']= {"Tech", "GILA", "Coba jaga deret Back-To-Back!"},
['tsd_h']= {"Tantangan TSD", "SULIT", "Hanya T-Spin Double dibolehkan!"}, ['tech_l_plus']= {"Tech", "GILA+", "Hanya Spins & PCs dibolehkan"},
['tsd_u']= {"Tantangan TSD", "TERAKHIR", "Hanya T-Spin Double dibolehkan!"}, ['tech_finesse']= {"Tech", "EF. TOMBOL", "Efisiensi tombol harus maksimal!"},
['backfire_n']= {"Serangan Balik", "NORMAL", "Tahankan serang baliknya!"}, ['tech_finesse_f']= {"Tech", "EF. TOMBOL+", "Efisiensi tombol maksimal dan tidak ada garis normal!"},
['backfire_h']= {"Serangan Balik", "SULIT", "Tahankan serang baliknya!"}, ['tsd_e']= {"Tantangan TSD", "MUDAH", "Hanya T-Spin Double dibolehkan!"},
['backfire_l']= {"Serangan Balik", "GILA", "Tahankan serang baliknya!"}, ['tsd_h']= {"Tantangan TSD", "SULIT", "Hanya T-Spin Double dibolehkan!"},
['backfire_u']= {"Serangan Balik", "TERAKHIR", "Tahankan serang baliknya!"}, ['tsd_u']= {"Tantangan TSD", "TERAKHIR", "Hanya T-Spin Double dibolehkan!"},
['sprintAtk']= {"Balapan", "100 Serangan", "Kirim 100 baris serangan!"}, ['backfire_n']= {"Serangan Balik", "NORMAL", "Tahankan serang baliknya!"},
['sprintEff']= {"Balapan", "Efisiensi", "Kirim lebih banyak serangan sampai 40 baris!"}, ['backfire_h']= {"Serangan Balik", "SULIT", "Tahankan serang baliknya!"},
['zen']= {"Zen", "200L", "Permainan 200-garis tanpa batas waktu"}, ['backfire_l']= {"Serangan Balik", "GILA", "Tahankan serang baliknya!"},
['ultra']= {"Ultra", "EKSTRA", "Permainan 2 menit. Dapatkan nilai sebanyaknya!"}, ['backfire_u']= {"Serangan Balik", "TERAKHIR", "Tahankan serang baliknya!"},
['infinite']= {"Tak Terbatas", "", "Bak pasir"}, ['sprintAtk']= {"Balapan", "100 Serangan", "Kirim 100 baris serangan!"},
['infinite_dig']= {"Tak Terbatas: Gali","", "Gali, gali, gali"}, ['sprintEff']= {"Balapan", "Efisiensi", "Kirim lebih banyak serangan sampai 40 baris!"},
['marathon_inf']= {"Maraton", "TAK TERBATAS", "Maraton tanpa akhir."}, ['zen']= {"Zen", "200L", "Permainan 200-garis tanpa batas waktu"},
['ultra']= {"Ultra", "EKSTRA", "Permainan 2 menit. Dapatkan nilai sebanyaknya!"},
['infinite']= {"Tak Terbatas", "", "Bak pasir"},
['infinite_dig']= {"Tak Terbatas: Gali","", "Gali, gali, gali"},
['marathon_inf']= {"Maraton", "TAK TERBATAS", "Maraton tanpa akhir."},
['custom_clear']= {"Tersesuai", "NORMAL"}, ['custom_clear']= {"Tersesuai", "NORMAL"},
['custom_puzzle']= {"Tersesuai", "TEKA-TEKI"}, ['custom_puzzle']= {"Tersesuai", "TEKA-TEKI"},

View File

@@ -461,7 +461,6 @@ return{
atkFX="攻撃演出", atkFX="攻撃演出",
frame="レンダリングフレームレート(%)", frame="レンダリングフレームレート(%)",
FTlock="フレームスキップ",
text="ライン消去ポップ", text="ライン消去ポップ",
score="スコアポップ", score="スコアポップ",
@@ -690,6 +689,7 @@ return{
register="サインアップ", register="サインアップ",
email="Eメールアドレス", email="Eメールアドレス",
password="パスワード", password="パスワード",
-- showEmail="Show Email",
keepPW="常にログイン", keepPW="常にログイン",
login="ログイン", login="ログイン",
}, },

View File

@@ -448,7 +448,6 @@ return{
atkFX="Nível FX Atk.", atkFX="Nível FX Atk.",
frame="Render Frame Rate(%)", frame="Render Frame Rate(%)",
-- FTlock="Frame-Time Lock",
text="Texto de ação", text="Texto de ação",
score="Pop-up de pontos", score="Pop-up de pontos",
@@ -678,6 +677,7 @@ return{
register="Registrar", register="Registrar",
email="Endereço De Email", email="Endereço De Email",
password="Senha", password="Senha",
-- showEmail="Show Email",
-- keepPW="Remember me", -- keepPW="Remember me",
login="Log in", login="Log in",
}, },

View File

@@ -269,7 +269,6 @@ return{
atkFX="→→~", atkFX="→→~",
frame="|=|%", frame="|=|%",
FTlock="||=|→→|=||",
text="ABC", text="ABC",
score="+123", score="+123",
@@ -489,7 +488,8 @@ return{
register="Sign up", register="Sign up",
email="@", email="@",
password="*", password="*",
-- keepPW="I", showEmail="?",
keepPW="!",
login="Log in", login="Log in",
}, },
register={ register={

View File

@@ -198,7 +198,7 @@ return{
"多余操作/极简率:", "多余操作/极简率:",
}, },
aboutTexts={ aboutTexts={
"这只是一个普通的方块游戏,请勿将此与某带国家名的事物强行联系", "这只是一个普通的方块游戏",
"从C2/IO/JS/WWC/KOS等方块获得过灵感", "从C2/IO/JS/WWC/KOS等方块获得过灵感",
"", "",
"使用LÖVE引擎", "使用LÖVE引擎",
@@ -420,13 +420,13 @@ return{
title="游戏设置", title="游戏设置",
graphic="←画面", graphic="←画面",
sound="声音→", sound="声音→",
style="风格", style="方块风格",
ctrl="控制设置", ctrl="控制设置",
key="键位设置", key="键位设置",
touch="触屏设置", touch="触屏设置",
showVK="显示虚拟按键", showVK="显示虚拟按键",
reTime="开局等待时间", reTime="开局等待时间:",
RS="旋转系统", RS="旋转系统",
menuPos="菜单按钮位置", menuPos="菜单按钮位置",
sysCursor="使用系统光标", sysCursor="使用系统光标",
@@ -446,21 +446,20 @@ return{
bagLine="包分界线", bagLine="包分界线",
ghostType="阴影样式", ghostType="阴影样式",
ghost="阴影不透明度", ghost="阴影不透明度:",
center="旋转中心不透明度", center="旋转中心不透明度:",
grid="网格不透明度", grid="网格不透明度:",
lineNum="行号透明度", lineNum="行号透明度:",
lockFX="锁定特效", lockFX="锁定特效:",
dropFX="下落特效", dropFX="下落特效:",
moveFX="移动特效", moveFX="移动特效:",
clearFX="消除特效", clearFX="消除特效:",
splashFX="溅射特效", splashFX="溅射特效:",
shakeFX="晃动特效", shakeFX="晃动特效:",
atkFX="攻击特效", atkFX="攻击特效:",
frame="绘制帧率(%)", frame="绘制帧率(%):",
FTlock="逻辑追帧",
text="消行文本", text="消行文本",
score="分数动画", score="分数动画",
@@ -471,7 +470,7 @@ return{
warn="死亡预警", warn="死亡预警",
clickFX="点按特效", clickFX="点按特效",
power="电量显示", power="电量和时间",
clean="绘制优化", clean="绘制优化",
fullscreen="全屏", fullscreen="全屏",
@@ -487,14 +486,14 @@ return{
game="←游戏", game="←游戏",
graphic="画面→", graphic="画面→",
mainVol="总音量", mainVol="总音量:",
bgm="音乐", bgm="音乐:",
sfx="音效", sfx="音效:",
stereo="立体声", stereo="立体声:",
spawn="方块生成", spawn="方块生成:",
warn="危险警告", warn="危险警告:",
vib="振动", vib="振动强度:",
voc="语音", voc="语音:",
autoMute="失去焦点自动静音", autoMute="失去焦点自动静音",
fine="非极简操作时播放提示音", fine="非极简操作时播放提示音",
@@ -506,10 +505,10 @@ return{
title="控制设置", title="控制设置",
preview="预览", preview="预览",
das="DAS",arr="ARR", das="DAS:",arr="ARR:",
dascut="DAS打断", dascut="DAS打断:",
dropcut="误硬降打断", dropcut="误硬降打断:",
sddas="软降DAS",sdarr="软降ARR", sddas="软降DAS:",sdarr="软降ARR:",
ihs="提前Hold", ihs="提前Hold",
irs="提前旋转", irs="提前旋转",
ims="提前移动", ims="提前移动",
@@ -560,9 +559,9 @@ return{
norm="标准", norm="标准",
pro="专业", pro="专业",
icon="图标", icon="图标",
sfx="按键音效", sfx="按键音效:",
vib="按键振动", vib="按键振动:",
alpha="不透明度", alpha="不透明度:",
track="按键自动跟踪", track="按键自动跟踪",
dodge="自动避让", dodge="自动避让",
@@ -597,8 +596,8 @@ return{
eventSet="规则包", eventSet="规则包",
holdMode="Hold模式", holdMode="Hold模式",
nextCount="Next", nextCount="Next数:",
holdCount="Hold", holdCount="Hold数:",
infHold="无限Hold", infHold="无限Hold",
phyHold="物理Hold", phyHold="物理Hold",
@@ -634,8 +633,8 @@ return{
newPg="新页面(N)", newPg="新页面(N)",
delPg="删除页面(M)", delPg="删除页面(M)",
prevPg="上一页", prevPg="上一页",
nextPg="下一页", nextPg="下一页",
}, },
custom_sequence={ custom_sequence={
title="自定义游戏", title="自定义游戏",
@@ -688,6 +687,7 @@ return{
register="注册", register="注册",
email="邮箱", email="邮箱",
password="密码", password="密码",
showEmail="显示邮箱",
keepPW="保存密码", keepPW="保存密码",
login="登录", login="登录",
}, },
@@ -695,9 +695,9 @@ return{
title="注册", title="注册",
login="登录", login="登录",
username="用户名", username="用户名",
email="邮箱", email="邮箱:",
password="密码", password="密码:",
password2="确认密码", password2="确认密码:",
register="注册", register="注册",
registering="等待服务器响应……", registering="等待服务器响应……",
}, },
@@ -770,6 +770,10 @@ return{
['dig_40l']= {"挖掘", "40L", "挖掘40行"}, ['dig_40l']= {"挖掘", "40L", "挖掘40行"},
['dig_100l']= {"挖掘", "100L", "挖掘100行"}, ['dig_100l']= {"挖掘", "100L", "挖掘100行"},
['dig_400l']= {"挖掘", "400L", "挖掘400行"}, ['dig_400l']= {"挖掘", "400L", "挖掘400行"},
['dig_eff_10l']= {"挖掘", "效率 10L", "挖掘10行用最少的件数"},
['dig_eff_40l']= {"挖掘", "效率 40L", "挖掘40行用最少的件数"},
['dig_eff_100l']= {"挖掘", "效率 100L","挖掘100行用最少的件数"},
['dig_eff_400l']= {"挖掘", "效率 400L","挖掘400行用最少的件数"},
['drought_n']= {"干旱", "100L", "你I没了"}, ['drought_n']= {"干旱", "100L", "你I没了"},
['drought_l']= {"干旱+", "100L", "后 妈 发 牌"}, ['drought_l']= {"干旱+", "100L", "后 妈 发 牌"},
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"}, ['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},

View File

@@ -458,7 +458,6 @@ return{
atkFX="攻击外汇", atkFX="攻击外汇",
frame="渲染帧率(%)", frame="渲染帧率(%)",
FTlock="逻辑追帧",
text="行清除弹出窗口", text="行清除弹出窗口",
score="分数弹出", score="分数弹出",
@@ -686,6 +685,7 @@ return{
register="登记", register="登记",
email="电子邮件地址", email="电子邮件地址",
password="密码", password="密码",
showEmail="显示电子邮件",
keepPW="记得我吗", keepPW="记得我吗",
login="登录", login="登录",
}, },
@@ -766,6 +766,10 @@ return{
['dig_40l']= {"挖掘", "40升", "挖40条垃圾线"}, ['dig_40l']= {"挖掘", "40升", "挖40条垃圾线"},
['dig_100l']= {"挖掘", "100升", "挖100条垃圾线"}, ['dig_100l']= {"挖掘", "100升", "挖100条垃圾线"},
['dig_400l']= {"挖掘", "400升", "挖400条垃圾线"}, ['dig_400l']= {"挖掘", "400升", "挖400条垃圾线"},
['dig_eff_10l']= {"挖掘", "管理 10升", "挖掘10条数量最少的线路"},
['dig_eff_40l']= {"挖掘", "管理 40升", "挖掘40条数量最少的线路"},
['dig_eff_100l']= {"挖掘", "管理 100升", "挖掘100条数量最少的线路"},
['dig_eff_400l']= {"挖掘", "管理 400升", "挖掘400条数量最少的线路"},
['drought_n']= {"干旱", "100升", "没有工装"}, ['drought_n']= {"干旱", "100升", "没有工装"},
['drought_l']= {"干旱+", "100升", "搞什么呀"}, ['drought_l']= {"干旱+", "100升", "搞什么呀"},
['marathon_n']= {"马拉松赛跑", "正常", "200线加速马拉松"}, ['marathon_n']= {"马拉松赛跑", "正常", "200线加速马拉松"},

View File

@@ -460,7 +460,6 @@ return{
atkFX="攻擊特效", atkFX="攻擊特效",
frame="渲染幀率(%)", frame="渲染幀率(%)",
FTlock="跳幀",
text="清除文本", text="清除文本",
score="分數動畫", score="分數動畫",
@@ -688,6 +687,7 @@ return{
register="註冊", register="註冊",
email="電郵", email="電郵",
password="密碼", password="密碼",
showEmail="顯示郵箱",
keepPW="保存密碼", keepPW="保存密碼",
login="登錄", login="登錄",
}, },
@@ -770,6 +770,10 @@ return{
['dig_40l']= {"挖掘", "40L", "挖掘40行"}, ['dig_40l']= {"挖掘", "40L", "挖掘40行"},
['dig_100l']= {"挖掘", "100L", "挖掘100行"}, ['dig_100l']= {"挖掘", "100L", "挖掘100行"},
['dig_400l']= {"挖掘", "400L", "挖掘400行"}, ['dig_400l']= {"挖掘", "400L", "挖掘400行"},
['dig_eff_10l']= {"挖掘", "效率 10L", "挖掘10行用最少的件數"},
['dig_eff_40l']= {"挖掘", "效率 40L", "挖掘40行用最少的件數"},
['dig_eff_100l']= {"挖掘", "效率 100L","挖掘100行用最少的件數"},
['dig_eff_400l']= {"挖掘", "效率 400L","挖掘400行用最少的件數"},
['drought_n']= {"乾旱", "100L", "你I沒了"}, ['drought_n']= {"乾旱", "100L", "你I沒了"},
['drought_l']= {"乾旱+", "100L", "後 媽 發 牌"}, ['drought_l']= {"乾旱+", "100L", "後 媽 發 牌"},
['marathon_n']= {"馬拉松", "普通", "200行加速馬拉松"}, ['marathon_n']= {"馬拉松", "普通", "200行加速馬拉松"},

View File

@@ -2,16 +2,16 @@ Gameplay:
The system will provide you with tetrominoes (4-block pieces), The system will provide you with tetrominoes (4-block pieces),
with a total of 7 types, and the player needs to control them with a total of 7 types, and the player needs to control them
(move left and right, rotate 90, 180, or 270 degrees). (move left and right, rotate 90, 180, or 270 degrees).
each row filled with the field will be cleared. Each row filled with the field will be cleared.
If there is an opponent, an attack will be sent depending on the line clear type If there is an opponent, an attack will be sent depending on the type of line clear.
Play until the end or achieve the level's goal to win. Play until the end or achieve the levels goal to win.
Rotation system: Rotation system:
Uses TRS (Techmino Rotation System) by default. The game allows players to choose other commonly used rotation systems (generally unnecessary) Uses TRS (Techmino Rotation System) by default. The game allows players to choose other commonly used rotation systems (generally unnecessary)
Spin detection: Spin detection:
Satisfies "3 corner" rule +2 points Satisfies “3-corner rule +2 points
Satisfies "immobile" rule +2 points Satisfies immobile rule +2 points
- As long as one of the above is true, it is a Spin - As long as one of the above is true, it is a Spin
If the rotation was not using the second check in the kick table, +1 point If the rotation was not using the second check in the kick table, +1 point
@@ -37,19 +37,19 @@ Attack system:
send (attack-0.5) attack. send (attack-0.5) attack.
Combos (REN): Combos (REN):
The numbers of the combos are equal to (the numbers you clear lines consecutively 1). All damage above (except attack from PC/HPC) will be given a (combo ×25%) bonus, or (combo ×15%) for Single clear (capped at 12 combo), +1 more attack for 3 Combo or more. The numbers of the combos are equal to (the numbers you clear lines consecutively 1). All damage above (except attack from PC/HPC) will be given a (combo ×25%) bonus, or (combo ×15%) for Single clear (capped at 12 combos), +1 more attack for 3 Combo or more.
Hemi Perfect Clear (a P.C. "with blocks left below". If it's an I clearing 1 line, the remaining blocks must not be player-placed): Hemi Perfect Clear (a P.C. with blocks left below. If its an I clearing 1 line, the remaining blocks must not be player-placed):
- Attack +4, Extra Blocking +2 - Attack +4, Extra Blocking +2
Perfect Clear (All Clear): Perfect Clear (All Clear):
- Sends 8 to 16 (increments within a game by 2 for every PC) OR every other damage above, whichever is higher, and +2 extra blocking. - Sends 8 to 16 (increments within a game by 2 for every PC) OR every other damage above, whichever is higher, and +2 extra blocking.
After calculating all the above, the damage value will be rounded down and sent. After calculating the above, the damage value will be rounded down and sent.
Back to Back (B2B) gauge: Back to Back (B2B) gauge:
The B2B gauge ranges from 0 to 1,000. Special line clears are B2B if the gauge is >=50, B2B2B if >800. The B2B gauge ranges from 0 to 1,000. Special line clears are B2B if the gauge is 50, B2B2B if >800.
Line cleared: Line cleared:
Special clears: Special clears:
@@ -60,7 +60,7 @@ Back to Back (B2B) gauge:
- A regular line clear -250 - A regular line clear -250
No lines cleared: No lines cleared:
- Spin (0 lines) +20. Do note that the B2B gauge cannot exceed 800 using this method. - Spin (0 lines) +20. Note that the B2B gauge cannot exceed 800 using this method.
Score system: Score system:
The better you play, the higher the score. The better you play, the higher the score.
@@ -70,21 +70,21 @@ Attack delay:
Followed by Techrash, Spins, which send slower attacks; Followed by Techrash, Spins, which send slower attacks;
High combos are the slowest; High combos are the slowest;
For B2B or B2B2B, they also increase the attack delay while they increase lines sent; For B2B or B2B2B, they also increase the attack delay while they increase lines sent;
Minis will greatly increase the delay. Minis will significantly increase the delay.
Countering: Countering:
When you send attacks, if there is garbage in the queue, When you send attacks, if there is garbage in the queue,
extra blocking will be used first, then attack, countering the earliest attack at a 1:1 ratio. extra blocking will be used first, then attack, countering the earliest attack at a 1 : 1 ratio.
Any extra blocking you didn't use will be discarded, and finally, the remaining attack power will be sent to your opponent. Any additional blocking you didnt use will be discarded, and finally, the remaining attack power will be sent to your opponent.
Battle Royale modes: Battle Royale modes:
Many players play a game at the same time (against AI bots, not real players). Many players play a game simultaneously (against AI bots, not actual players).
As players get eliminated, blocks fall faster, and garbage takes effect faster, as well as rises faster. As players get eliminated, blocks fall faster, and garbage takes effect and rises faster.
Eliminate other players to gain a badge and the player's badge to increase your attack power. Eliminate other players to gain a badge and the players badge to increase your attack power.
Players can choose between four attack modes: Players can choose between four attack modes:
1. Random: Every time you attack, 10% chance to lock onto a random player. 1. Random: Every time you attack, 10% chance to lock onto a random player.
2. Badges: After you attack or when your target dies, lock onto the player with the most badges. 2. Badges: After you attack or when your target dies, lock onto the player with the most badges.
3. KOs: After you attack or when your target dies, lock onto the player with the highest field. (Refreshes every second) 3. KOs: Lock onto the player with the highest field after you attack or when your target dies. (Refreshes every second)
4. Attackers: attack all players locking onto yourself. 4. Attackers: attack all players locking onto yourself.
Your attack will be sent to all of them. If you are not targeted, you attack a random player (not locking). Your attack will be sent to all of them. If you are not targeted, you attack a random player (not locking).
When all opponents have been eliminated, the last player in the match is the winner. When all opponents have been eliminated, the last player in the match is the winner.
@@ -97,4 +97,4 @@ Custom mode:
empty cells can be in any state; empty cells can be in any state;
regular colored cells have to be made of the corresponding block; regular colored cells have to be made of the corresponding block;
garbage-colored cells can be any block but not air. garbage-colored cells can be any block but not air.
Once you make the shape, you will win. Once you make the shape, you will win.

View File

@@ -1,33 +1,33 @@
游戏方法: 游戏方法:
系统会提供的一个个四连骨牌("方块",总共7种) 系统会提供的一个个四连骨牌( “方块”, 总共7种)
玩家需要控制(左右移动和旋转90,180,270度)这些骨牌直到下落到场地底部,锁定 玩家需要控制(左右移动和旋转90, 180, 270度)这些骨牌直到下落到场地底部, 锁定
每填满场地的一行就会将其消除(如果有对手的话根据消除方式会给对手攻击) 每填满场地的一行就会将其消除(如果有对手的话根据消除方式会给对手攻击)
尝试存活更久,或者完成目标即胜利. 尝试存活更久, 或者完成目标即胜利.
旋转系统: 旋转系统:
默认使用Techmino专属旋转系统TRS,允许玩家自选其他较常用的旋转系统(一般不必要) 默认使用Techmino专属旋转系统TRS, 允许玩家自选其他较常用的旋转系统(一般不必要)
spin判定: Spin判定:
满足三角判定+2分 满足三角判定+2分
满足不可移动判定+2分 满足不可移动判定+2分
--满足以上之一就算是spin --满足以上之一就算是Spin
满足非第二个test+1分 满足非第二个test+1分
--如果分数只有2,方块是SZJLT之一,并且没有把当前方块整个消除那么就是mini --如果分数只有2,方块是SZJLT之一,并且没有把当前方块整个消除那么就是mini
攻击系统: 攻击系统:
概念说明[高级消除]: 概念说明[高级消除]:
spin/消四及以上,会受到B2B(点数>=50)或B3B(点数>800)加成 Spin/消四及以上,会受到B2B(点数>=50)或B3B(点数>800)加成
反之称为低级消除 反之称为低级消除
概念说明[特殊消除]: 概念说明[特殊消除]:
spin/消四及以上/pc/hpc,可以增加B2B点数 Spin/消四及以上/PC/HPC,可以增加B2B点数
反之称为普通消除 反之称为普通消除
高级消除(spin): 高级消除(Spin):
打出[2*消行数]攻击,然后 打出[2*消行数]攻击,然后
- B2B攻击+[1/1/2/4/8/14(spin1~6)] - B2B攻击+[1/1/2/4/8/14(Spin1~6)]
- B3B攻击在B2B基础上+消行数*0.5,+1额外抵挡 - B3B攻击在B2B基础上+消行数*0.5,+1额外抵挡
- mini减至25% - mini减至25%
高级消除(非spin但是消四及以上): 高级消除(非Spin但是消四及以上):
打出[消行数]攻击,然后 打出[消行数]攻击,然后
- B2B攻击+1 - B2B攻击+1
- B3B攻击+50%,+1额外抵挡 - B3B攻击+50%,+1额外抵挡
@@ -48,21 +48,21 @@ back to back(B2B)点数说明:
落块后消行了: 落块后消行了:
特殊消除: 特殊消除:
spin1~5:+[50/100/180/800/1000](mini变为原来50%) Spin1~5:+[50/100/180/800/1000](mini变为原来50%)
消四/五/六:+[150/200/...] 消四/五/六:+[150/200/...]
本局内消行数>4时全消:+800 本局内消行数>4时全消:+800
半全消:+100 半全消:+100
普通消除: 普通消除:
-250 -250
落块后没消行: 落块后没消行:
spin:+20 Spin:+20
点数在800以上会-40(不低于800) 点数在800以上会-40(不低于800)
分数系统: 分数系统:
分数计算系统非常复杂,而且随时可能更改所以不写在这里,并且计算只跟消除方式等信息有关,和模式设定无关 分数计算系统非常复杂,而且随时可能更改所以不写在这里,并且计算只跟消除方式等信息有关,和模式设定无关
攻击延迟: 攻击延迟:
消2/3的攻击生效最快,消四其次,spin攻击生效较慢,高连击生效最慢 消2/3的攻击生效最快,消四其次,Spin攻击生效较慢,高连击生效最慢
B2B或者B3B增加攻击力的同时也会减缓一点生效速度,mini大幅减缓生效速度 B2B或者B3B增加攻击力的同时也会减缓一点生效速度,mini大幅减缓生效速度
抵消逻辑: 抵消逻辑:

View File

@@ -2,9 +2,9 @@ return{
{name='sprint_10l', x=0, y=0, size=40,shape=1,icon="sprint1", unlock={'sprint_20l','sprint_40l'}}, {name='sprint_10l', x=0, y=0, size=40,shape=1,icon="sprint1", unlock={'sprint_20l','sprint_40l'}},
{name='sprint_20l', x=-200, y=200, size=50,shape=1,icon="sprint1"}, {name='sprint_20l', x=-200, y=200, size=50,shape=1,icon="sprint1"},
{name='sprint_40l', x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={'dig_10l','sprint_100l','marathon_n','sprintPenta','sprintMPH','sprint123','secret_grade'}}, {name='sprint_40l', x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={'dig_10l','sprint_100l','marathon_n','sprintPenta','sprintMPH','sprint123','secret_grade'}},
{name='sprint_100l', x=-200, y=0, size=50,shape=1,icon="sprint2", unlock={'sprint_400l','drought_n'}}, {name='sprint_100l', x=-400, y=200, size=50,shape=1,icon="sprint2", unlock={'sprint_400l','drought_n'}},
{name='sprint_400l', x=-400, y=0, size=40,shape=1,icon="sprint3", unlock={'sprint_1000l'}}, {name='sprint_400l', x=-600, y=200, size=40,shape=1,icon="sprint3", unlock={'sprint_1000l'}},
{name='sprint_1000l', x=-600, y=0, size=40,shape=1,icon="sprint3"}, {name='sprint_1000l', x=-800, y=200, size=40,shape=1,icon="sprint3"},
{name='sprintPenta', x=180, y=-160, size=40,shape=3,icon="sprint_pento"}, {name='sprintPenta', x=180, y=-160, size=40,shape=3,icon="sprint_pento"},
{name='sprintMPH', x=220, y=-300, size=40,shape=3,icon="sprint2"}, {name='sprintMPH', x=220, y=-300, size=40,shape=3,icon="sprint2"},
@@ -12,13 +12,18 @@ return{
{name='secret_grade', x=-200, y=-400, size=40,shape=1,icon="secret_grade"}, {name='secret_grade', x=-200, y=-400, size=40,shape=1,icon="secret_grade"},
{name='drought_n', x=-400, y=200, size=40,shape=1,icon="drought", unlock={'drought_l'}}, {name='drought_n', x=-600, y=400, size=40,shape=1,icon="drought", unlock={'drought_l'}},
{name='drought_l', x=-600, y=200, size=40,shape=1,icon="drought"}, {name='drought_l', x=-800, y=400, size=40,shape=1,icon="drought"},
{name='dig_10l', x=-200, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_40l'}}, {name='dig_10l', x=-200, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_40l','dig_eff_10l'}},
{name='dig_40l', x=-400, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_100l'}}, {name='dig_40l', x=-400, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_100l'}},
{name='dig_100l', x=-600, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_400l'}}, {name='dig_100l', x=-600, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_400l'}},
{name='dig_400l', x=-800, y=-200, size=40,shape=1,icon="dig_sprint"}, {name='dig_400l', x=-800, y=-200, size=40,shape=1,icon="dig_sprint"},
{name='dig_eff_10l', x=-400, y=0, size=40,shape=1,icon="dig_sprint", unlock={'dig_eff_40l'}},
{name='dig_eff_40l', x=-600, y=0, size=40,shape=1,icon="dig_sprint", unlock={'dig_eff_100l'}},
{name='dig_eff_100l', x=-800, y=0, size=40,shape=1,icon="dig_sprint", unlock={'dig_eff_400l'}},
{name='dig_eff_400l', x=-1000, y=0, size=40,shape=1,icon="dig_sprint"},
{name='marathon_n', x=0, y=-600, size=60,shape=1,icon="marathon", unlock={'marathon_h','solo_e','round_e','big_n','blind_e','classic_e','survivor_e','clearRush','zen'}}, {name='marathon_n', x=0, y=-600, size=60,shape=1,icon="marathon", unlock={'marathon_h','solo_e','round_e','big_n','blind_e','classic_e','survivor_e','clearRush','zen'}},
{name='marathon_h', x=0, y=-800, size=50,shape=1,icon="marathon", unlock={'master_n','strategy_e'}}, {name='marathon_h', x=0, y=-800, size=50,shape=1,icon="marathon", unlock={'master_n','strategy_e'}},

View File

@@ -0,0 +1,21 @@
return{
env={
pushSpeed=6,
eventSet='dig_100l',
bg='bg2',bgm='way',
},
score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..STRING.time(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)
if P.stat.dig<100 then return end
local P=P.stat.piece
return
P<=260 and 5 or
P<=320 and 4 or
P<=420 and 3 or
P<=520 and 2 or
P<=620 and 1 or
0
end,
}

View File

@@ -0,0 +1,21 @@
return{
env={
pushSpeed=6,
eventSet='dig_10l',
bg='bg1',bgm='way',
},
score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..STRING.time(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)
if P.stat.dig<10 then return end
local P=P.stat.piece
return
P<=12 and 5 or
P<=18 and 4 or
P<=25 and 3 or
P<=30 and 2 or
P<=40 and 1 or
0
end,
}

View File

@@ -0,0 +1,21 @@
return{
env={
pushSpeed=6,
eventSet='dig_400l',
bg='bg2',bgm='way',
},
score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..STRING.time(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)
if P.stat.dig<400 then return end
local P=P.stat.piece
return
P<=1200 and 5 or
P<=1400 and 4 or
P<=1500 and 3 or
P<=1800 and 2 or
P<=2000 and 1 or
0
end,
}

View File

@@ -0,0 +1,21 @@
return{
env={
pushSpeed=6,
eventSet='dig_40l',
bg='bg1',bgm='way',
},
score=function(P)return{P.stat.piece,P.stat.time}end,
scoreDisp=function(D)return D[1].." Pieces "..STRING.time(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)
if P.stat.dig<40 then return end
local P=P.stat.piece
return
P<=80 and 5 or
P<=100 and 4 or
P<=120 and 3 or
P<=160 and 2 or
P<=220 and 1 or
0
end,
}

View File

@@ -179,6 +179,8 @@ local function _drawField(P,showInvis)
--</drawRow> --</drawRow>
gc_setShader(shader_fieldSatur) gc_setShader(shader_fieldSatur)
gc_translate(0,4) gc_translate(0,4)
else
gc_setShader(shader_fieldSatur)
end end
--<drawRow> --<drawRow>
@@ -204,6 +206,8 @@ local function _drawField(P,showInvis)
gc_setShader(shader_fieldSatur) gc_setShader(shader_fieldSatur)
gc_pop() gc_pop()
h=1 h=1
else
gc_setShader(shader_fieldSatur)
end end
gc_push('transform') gc_push('transform')

View File

@@ -70,5 +70,4 @@ return{
bg='none',bgm='race', bg='none',bgm='race',
allowMod=true, allowMod=true,
FTLock=true,
} }

View File

@@ -377,7 +377,6 @@ local DemoEnv={
life=1e99, life=1e99,
allowMod=false, allowMod=false,
fine=false, fine=false,
FTLock=false,
} }
function PLY.newDemoPlayer(id) function PLY.newDemoPlayer(id)
local P=_newEmptyPlayer(id) local P=_newEmptyPlayer(id)

View File

@@ -2671,7 +2671,7 @@ function Player:_die()
end end
end end
function Player:update(dt) function Player:update(dt)
self.trigFrame=self.trigFrame+(self.gameEnv.FTLock and dt*60 or 1) self.trigFrame=self.trigFrame+dt*60
if self.alive then if self.alive then
local S=self.stat local S=self.stat
if self.type=='computer'then self.bot:update(dt)end if self.type=='computer'then self.bot:update(dt)end

View File

@@ -2,6 +2,7 @@ local emailBox=WIDGET.newInputBox{name='email',x=380,y=200,w=500,h=60,limit=128}
local passwordBox=WIDGET.newInputBox{name='password',x=380,y=300,w=620,h=60,secret=true,regex="[ -~]",limit=64} local passwordBox=WIDGET.newInputBox{name='password',x=380,y=300,w=620,h=60,secret=true,regex="[ -~]",limit=64}
local savePW=false local savePW=false
local showEmail=true
local function _login() local function _login()
local email,password=emailBox:getText(),passwordBox:getText() local email,password=emailBox:getText(),passwordBox:getText()
@@ -25,19 +26,22 @@ function scene.sceneInit()
local data=loadFile('conf/account','-canSkip') local data=loadFile('conf/account','-canSkip')
if data then if data then
savePW=true savePW=true
showEmail=false
emailBox.secret=true
emailBox:setText(data[1]) emailBox:setText(data[1])
passwordBox:setText(data[2]) passwordBox:setText(data[2])
end end
end end
scene.widgetList={ scene.widgetList={
WIDGET.newText{name='title', x=80, y=50,font=70,align='L'}, WIDGET.newText{name='title', x=80, y=50,font=70,align='L'},
WIDGET.newButton{name='register',x=1140,y=100,w=170,h=80,color='lY',code=function()SCN.swapTo('register','swipeR')end}, WIDGET.newButton{name='register', x=1140,y=100,w=170,h=80,color='lY',code=function()SCN.swapTo('register','swipeR')end},
emailBox, emailBox,
passwordBox, passwordBox,
WIDGET.newSwitch{name='keepPW', x=900, y=420,disp=function()return savePW end,code=function()savePW=not savePW end}, WIDGET.newSwitch{name='showEmail',x=550, y=420,disp=function()return showEmail end,code=function()showEmail=not showEmail emailBox.secret=not showEmail end},
WIDGET.newKey{name='login', x=1140,y=540,w=170,h=80,font=40,code=_login}, WIDGET.newSwitch{name='keepPW', x=900, y=420,disp=function()return savePW end,code=function()savePW=not savePW end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene}, WIDGET.newKey{name='login', x=1140,y=540,w=170,h=80,font=40,code=_login},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
} }
return scene return scene

View File

@@ -69,7 +69,6 @@ scene.widgetList={
WIDGET.newSlider{name='atkFX', x=330,y=820,lim=280,w=540,axis={0,5,1},disp=SETval('atkFX'), code=SETsto('atkFX')}, WIDGET.newSlider{name='atkFX', x=330,y=820,lim=280,w=540,axis={0,5,1},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=function(v)SETTING.frameMul=v;Z.setFrameMul(SETTING.frameMul)end}, 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')}, WIDGET.newSwitch{name='text', x=450,y=980,lim=360,disp=SETval('text'), code=SETrev('text')},
WIDGET.newSwitch{name='score', x=450,y=1030,lim=360,disp=SETval('score'), code=SETrev('score')}, WIDGET.newSwitch{name='score', x=450,y=1030,lim=360,disp=SETval('score'), code=SETrev('score')},

View File

@@ -2,12 +2,16 @@ return[=[
未来计划: 未来计划:
R E M A K E R E M A K E
0.17.2: 0.17.2 0.17.2: 服务区 Service Area
新增: 新增:
把一些模式加入到大地图上(by NOT_A_ROBOT) #640 把一些模式加入到大地图上(by NOT_A_ROBOT) #640
登录界面会隐藏自动填充的邮箱防止信息泄露 #639
改动: 改动:
大幅下调高级机器人速度 移除FTLock设置全局开启
大幅度调低高级机器人速度
词典新增一条比较详细的新人指引
master_g模式不再限定旋转系统 master_g模式不再限定旋转系统
改进几个经典模式(by NOT_A_ROBOT) #661
完善当前的攻击系统,进入稳定状态 完善当前的攻击系统,进入稳定状态
更新说明书的攻击系统章节 更新说明书的攻击系统章节
麻将小程序更像麻将 麻将小程序更像麻将
@@ -24,6 +28,7 @@ return[=[
倒计时时不能充das #610 倒计时时不能充das #610
几个音效的音量不太对 #572 几个音效的音量不太对 #572
master_g没开锁定特效报错和一些细节问题 master_g没开锁定特效报错和一些细节问题
关闭3D方块选项后场地方块饱和度设置无效 #656
0.17.1: 苏醒 Wake Up 0.17.1: 苏醒 Wake Up
新增: 新增:

View File

@@ -1,5 +1,5 @@
return{ return{
["apkCode"]=434, ["apkCode"]=436,
["code"]=1702, ["code"]=1702,
["string"]="V0.17.2", ["string"]="V0.17.2",
["room"]="ver A-7", ["room"]="ver A-7",