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",
}, },
@@ -766,10 +766,14 @@ return{
['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!"},
['dig_eff_10l']= {"Dig", "EFFICIENCY 10L", "Dig 10 garbage lines with the least pieces!"},
['dig_eff_40l']= {"Dig", "EFFICIENCY 40L", "Dig 40 garbage lines with the least pieces!"},
['dig_eff_100l']= {"Dig", "EFFICIENCY 100L","Dig 100 garbage lines with the least pieces!"},
['dig_eff_400l']= {"Dig", "EFFICIENCY 400L","Dig 400 garbage lines with the least pieces!"},
['drought_n']= {"Drought", "100L", "No I-pieces available"}, ['drought_n']= {"Drought", "100L", "No I-pieces available"},
['drought_l']= {"Drought+", "100L", "W T F"}, ['drought_l']= {"Drought+", "100L", "W T F"},
['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with increasing speed"}, ['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with increasing speed"},
@@ -823,8 +827,8 @@ return{
['survivor_u']= {"Survival", "ULTIMATE", "How long can you survive?"}, ['survivor_u']= {"Survival", "ULTIMATE", "How long can you survive?"},
['attacker_h']= {"Attacker", "HARD", "Practice your attacking skills!"}, ['attacker_h']= {"Attacker", "HARD", "Practice your attacking skills!"},
['attacker_u']= {"Attacker", "ULTIMATE", "Practice your attacking skills!"}, ['attacker_u']= {"Attacker", "ULTIMATE", "Practice your attacking skills!"},
['defender_n']= {"Defender", "NORMAL", "Practice your defencing skills!"}, ['defender_n']= {"Defender", "NORMAL", "Practice your defensing skills!"},
['defender_l']= {"Defender", "LUNATIC", "Practice your defencing skills!"}, ['defender_l']= {"Defender", "LUNATIC", "Practice your defensing skills!"},
['dig_h']= {"Driller", "HARD", "Digging practice!"}, ['dig_h']= {"Driller", "HARD", "Digging practice!"},
['dig_u']= {"Driller", "ULTIMATE", "Digging practice!"}, ['dig_u']= {"Driller", "ULTIMATE", "Digging practice!"},
['clearRush']= {"Clear Rush", "NORMAL", "All-spin tutorial!\n[Under construction]"}, ['clearRush']= {"Clear Rush", "NORMAL", "All-spin tutorial!\n[Under construction]"},
@@ -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",
}, },
@@ -770,6 +770,10 @@ return{
['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!"},
['dig_eff_10l']= {"Gali", "EFISIENSI 10L", "Gali 10 baris!"},
['dig_eff_40l']= {"Gali", "EFISIENSI 40L", "Gali 40 baris!"},
['dig_eff_100l']= {"Gali", "EFISIENSI 100L","Gali 100 baris!"},
['dig_eff_400l']= {"Gali", "EFISIENSI 400L","Gali 400 baris!"},
['drought_n']= {"Nasib Buruk", "100L", "Tidak ada blok I..."}, ['drought_n']= {"Nasib Buruk", "100L", "Tidak ada blok I..."},
['drought_l']= {"Nasib Buruk+", "100L", "Nasib sangat buruk..."}, ['drought_l']= {"Nasib Buruk+", "100L", "Nasib sangat buruk..."},
['marathon_n']= {"Maraton", "NORMAL", "200-baris maraton dengan kecepatan meningkat"}, ['marathon_n']= {"Maraton", "NORMAL", "200-baris maraton dengan kecepatan meningkat"},

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.

View File

@@ -1,5 +1,5 @@
游戏方法: 游戏方法:
系统会提供的一个个四连骨牌("方块",总共7种) 系统会提供的一个个四连骨牌( “方块”, 总共7种)
玩家需要控制(左右移动和旋转90, 180, 270度)这些骨牌直到下落到场地底部, 锁定 玩家需要控制(左右移动和旋转90, 180, 270度)这些骨牌直到下落到场地底部, 锁定
每填满场地的一行就会将其消除(如果有对手的话根据消除方式会给对手攻击) 每填满场地的一行就会将其消除(如果有对手的话根据消除方式会给对手攻击)
尝试存活更久, 或者完成目标即胜利. 尝试存活更久, 或者完成目标即胜利.
@@ -7,27 +7,27 @@
旋转系统: 旋转系统:
默认使用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,14 +12,19 @@ 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,6 +26,8 @@ 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
@@ -35,6 +38,7 @@ scene.widgetList={
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='showEmail',x=550, y=420,disp=function()return showEmail end,code=function()showEmail=not showEmail emailBox.secret=not showEmail end},
WIDGET.newSwitch{name='keepPW', x=900, y=420,disp=function()return savePW end,code=function()savePW=not savePW end}, WIDGET.newSwitch{name='keepPW', x=900, y=420,disp=function()return savePW end,code=function()savePW=not savePW end},
WIDGET.newKey{name='login', x=1140,y=540,w=170,h=80,font=40,code=_login}, 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}, WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},

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