Compare commits

...

46 Commits

Author SHA1 Message Date
MrZ626
7f9c9248ce 版本推进 2021-11-19 17:36:12 +08:00
MrZ626
9c1db48804 整理代码 2021-11-19 17:35:53 +08:00
C₂₉H₂₅N₃O₅
0628830f0c 继续调词典(嗯) 2021-11-19 01:21:48 -06:00
C₂₉H₂₅N₃O₅
9436f2f5fb 微调词典 大改legals (#472) 2021-11-19 01:17:12 -06:00
MrZ626
c5e1b5617f 再调整词典两个词条 2021-11-19 14:21:42 +08:00
MrZ626
298c417aa3 更新部分词条(英文待翻译) 2021-11-19 02:40:46 +08:00
MrZ626
fc74831700 添加lockout判负规则(默认关闭) 2021-11-19 02:33:21 +08:00
MrZ626
d9db55de44 整理代码,修正一处多余代码忘了删 2021-11-19 02:16:34 +08:00
MrZ626
3fd205e8c2 bgm模块添加可调节的最大加载数限制,更不容易达到引擎加载音频数上限 close #447 2021-11-19 01:47:14 +08:00
MrZ626
5cb828fb92 修改策略堆叠模式的解锁路径 2021-11-19 00:59:16 +08:00
MrZ626
5f7a3fd53f 版本推进 2021-11-18 19:54:31 +08:00
MrZ626
8e3e598753 词典添加cambridge词条(翻译自tetris wiki) 2021-11-18 19:52:42 +08:00
MrZ626
2a0a0f60f8 策略堆叠的das和arr参数移到规则包 2021-11-18 19:43:18 +08:00
MrZ626
6b7d1fdf9f 策略堆叠模式添加到地图 2021-11-18 19:41:27 +08:00
MrZ626
65199a40f7 修复40行效率左侧信息颜色问题 2021-11-18 19:27:27 +08:00
MrZ626
f9082a8800 整理代码 2021-11-18 19:16:06 +08:00
NOT_A_ROBOT
1670c6e7d6 Add strategy modes (#468)
* Add strategy mode
2021-11-18 19:08:46 +08:00
NOT_A_ROBOT
ff2073ed4d fix numpadenter on console (#469)
made numpadenter do the same thing as enter on console
2021-11-18 19:08:46 +08:00
MrZ626
f14aaac635 微调staff页面 close #470 2021-11-18 19:08:46 +08:00
MrZ626
c709fa622f 修正hold模式没有英文文本 2021-11-18 19:08:45 +08:00
MrZ626
c752556bf3 微调pc联系模式左侧信息位置
继续推进大爆炸模式框架
2021-11-18 03:54:42 +08:00
MrZ626
e7d9703fcc 修复向玩家场地里塞入垃圾行时如果不存在当前方块会报错 2021-11-18 03:54:42 +08:00
C29H25N3O5
1ed52a84b0 增加半隐和全隐的英文词条 2021-11-17 11:50:04 -06:00
C29H25N3O5
4fdb278751 微调dmg背景图片 2021-11-17 11:29:41 -06:00
MrZ626
8318803923 修改一首bgm名称和一个赞助id 2021-11-18 01:07:27 +08:00
MrZ626
42de7e3676 纠正一个帮助开发的网友id 2021-11-17 22:14:40 +08:00
MrZ626
3efa646ee3 再增加堆积模式的窒息延迟 2021-11-17 22:11:50 +08:00
MrZ626
b414c2ab42 版本推进 2021-11-17 22:08:00 +08:00
MrZ626
205dea3db7 TRS的S/Z添加四个踢墙防止在一些地方卡死 2021-11-17 21:49:37 +08:00
MrZ626
6cac688555 完善提前移动词条 2021-11-17 20:48:40 +08:00
MrZ626
09b1b08c1e 堆积模式添加8f窒息延迟 2021-11-17 20:29:42 +08:00
MrZ626
b61a1270e9 生成位置预览开启后hold的生成位置也可见 2021-11-17 16:47:25 +08:00
MrZ626
b85cee7e1f 修复机翻语言超级消除没有行数显示 close #462 2021-11-17 16:30:00 +08:00
MrZ626
8e674e3e29 版本推进 2021-11-17 16:25:38 +08:00
MrZ626
aa2812c874 大爆炸模式框架完成,等待具体关卡生成算法 2021-11-17 16:24:18 +08:00
MrZ626
6f282431c4 pc训练的序列模式和旋转系统参数放入规则包 2021-11-17 16:01:09 +08:00
MrZ626
470e54cdd0 两个pc练习模式添加胜利条件,不再无尽
略微降低pc练习-普通的X评级标准
2021-11-17 16:01:08 +08:00
MrZ626
da3ef1c2a6 pc训练代码整理,开局就能看到关卡并且没有提前硬降不会死的bug了 2021-11-17 16:01:08 +08:00
MrZ626
9efe0e62d5 词典添加半隐和全隐词条(英文待翻译) 2021-11-17 16:01:08 +08:00
MrZ626
7038f81b46 调整一些tip
整理代码
2021-11-17 10:59:38 +08:00
MrZ626
de972a60df blackhole背景改名blockhole 2021-11-17 10:59:34 +08:00
MrZ626
6a87787d6f 微调github issue模板 2021-11-17 10:59:30 +08:00
MrZ626
6dc9a4b507 安全,安全!(嗯嗯嗯 2021-11-17 10:59:27 +08:00
MrZ626
5b7c888d57 修正经典模式显示的速度等级 2021-11-17 10:59:01 +08:00
MrZ626
a1f761b83e 修正一处拼写错误 2021-11-17 10:58:51 +08:00
C₂₉H₂₅N₃O₅
c40a6bfaa0 换行 (#463) 2021-11-16 14:28:30 -06:00
59 changed files with 586 additions and 283 deletions

View File

@@ -2,8 +2,7 @@
name: Bug report (bluescreen crash) Bug报告 (蓝屏报错)
about: Create a report of problems which made the crash with a bluescreen
---
Screenshot with crash information: (delete this line before submitting)
*Image Here*
Screenshot with crash information (*Image(s) Here*):
If you can reproduce it, write the steps here. If you can't, try to describe the exactly time the game crash, like pressing which key or which button: (delete this line before submitting)
*Details Here*
If you can reproduce it, write the steps here. If you can't, try to describe the exactly time the game crash, like pressing which key or which button (*Details Here*)

View File

@@ -2,8 +2,7 @@
name: Bug report (unintended behaviors) Bug报告 (奇怪的现象)
about: Create a report of unintended behaviors
---
Screenshot with unintended behaviors: (delete this line before submitting)
*Image(s) Here*
Screenshot with unintended behaviors (*Image(s) Here*):
If you can reproduce it, write the steps here. If you can't, try to describe the exactly time the game crash, like pressing which key or which button: (delete this line before submitting)
*Details Here*
If you can reproduce it, write the steps here. If you can't, try to describe the exactly time the game crash, like pressing which key or which button (*Details Here*):

Binary file not shown.

View File

@@ -1,4 +1,6 @@
local Sources={}
local lastLoaded={}
local maxLoadedCount=3
local SourceObjList={}
local volume=1
local BGM={
@@ -37,9 +39,20 @@ end
local function check_curFadeOut(task,code,src)
return task.code==code and task.args[1]==src
end
local function _tryReleaseSources()
while #lastLoaded>maxLoadedCount do
local n=lastLoaded[#lastLoaded]
SourceObjList[n].source=SourceObjList[n].source:release()and nil
table.remove(lastLoaded)
end
end
function BGM.setDefault(bgm)
BGM.default=bgm
end
function BGM.setMaxSources(count)
maxLoadedCount=count
_tryReleaseSources()
end
function BGM.setChange(func)
BGM.onChange=func
end
@@ -53,7 +66,7 @@ function BGM.init(list)
local simpList={}
for _,v in next,list do
table.insert(simpList,v.name)
Sources[v.name]=v.path
SourceObjList[v.name]={path=v.path,source=false}
end
table.sort(simpList)
function BGM.getList()return simpList end
@@ -61,18 +74,20 @@ function BGM.init(list)
LOG(count.." BGM files added")
function BGM.getCount()return count end
local function _load(name)
if type(Sources[name])=='string'then
if love.filesystem.getInfo(Sources[name])then
Sources[name]=love.audio.newSource(Sources[name],'stream')
Sources[name]:setLooping(true)
Sources[name]:setVolume(0)
local function _tryLoad(name)
if SourceObjList[name]then
if SourceObjList[name].source then
return true
elseif love.filesystem.getInfo(SourceObjList[name].path)then
SourceObjList[name].source=love.audio.newSource(SourceObjList[name].path,'stream')
SourceObjList[name].source:setLooping(true)
SourceObjList[name].source:setVolume(0)
table.insert(lastLoaded,1,name)
_tryReleaseSources()
return true
else
LOG("No BGM: "..Sources[name],5)
LOG("No BGM: "..SourceObjList[name],5)
end
elseif Sources[name]then
return true
elseif name then
LOG("No BGM: "..name,5)
end
@@ -89,30 +104,25 @@ function BGM.init(list)
end
end
end
function BGM.loadAll()--Not neccessary, unless you want avoid the lag when playing something for the first time
for name in next,Sources do
_load(name)
end
end
function BGM.play(name)
name=name or BGM.default
if not _load(name)then return end
if not _tryLoad(name)then return end
if volume==0 then
BGM.nowPlay=name
BGM.playing=Sources[name]
BGM.playing=SourceObjList[name].source
return true
end
if name and Sources[name]then
if name and SourceObjList[name].source then
if BGM.nowPlay~=name then
if BGM.nowPlay then
TASK.new(task_fadeOut,BGM.playing)
end
TASK.removeTask_iterate(check_curFadeOut,task_fadeOut,Sources[name])
TASK.removeTask_iterate(check_curFadeOut,task_fadeOut,SourceObjList[name].source)
TASK.removeTask_code(task_fadeIn)
TASK.new(task_fadeIn,Sources[name])
TASK.new(task_fadeIn,SourceObjList[name].source)
BGM.nowPlay=name
BGM.playing=Sources[name]
BGM.playing=SourceObjList[name].source
BGM.lastPlayed=BGM.nowPlay
BGM.playing:seek(0)
BGM.playing:play()
@@ -128,8 +138,8 @@ function BGM.init(list)
end
function BGM.continue()
if BGM.lastPlayed then
BGM.nowPlay,BGM.playing=BGM.lastPlayed,Sources[BGM.lastPlayed]
TASK.removeTask_iterate(check_curFadeOut,task_fadeOut,Sources[BGM.nowPlay])
BGM.nowPlay,BGM.playing=BGM.lastPlayed,SourceObjList[BGM.lastPlayed].source
TASK.removeTask_iterate(check_curFadeOut,task_fadeOut,SourceObjList[BGM.nowPlay].source)
TASK.removeTask_code(task_fadeIn)
TASK.new(task_fadeIn,BGM.playing)
BGM.playing:play()

View File

@@ -112,7 +112,7 @@ function SFX.playSample(pack,...)--vol-1, sampSet1, vol-2, sampSet2
end
end
end
function SFX.play(name,vol,pos,pitch)
local function _play(name,vol,pos,pitch)
if volume==0 or vol==0 then return end
local S=Sources[name]--Source list
if not S then return end
@@ -134,33 +134,13 @@ function SFX.play(name,vol,pos,pitch)
S:setPosition(0,0,0)
end
end
S:setVolume(((vol or 1)*volume)^1.626)
S:setVolume(vol^1.626)
S:setPitch(pitch and 1.0594630943592953^pitch or 1)
S:play()
end
function SFX.fplay(name,vol,pos)
local S=Sources[name]--Source list
if not S then return end
local n=1
while S[n]:isPlaying()do
n=n+1
if not S[n]then
S[n]=S[1]:clone()
S[n]:seek(0)
break
end
end
S=S[n]--AU_SRC
if S:getChannelCount()==1 then
if pos then
pos=pos*stereo
S:setPosition(pos,1-pos^2,0)
else
S:setPosition(0,0,0)
end
end
S:setVolume(vol^1.626)
S:play()
SFX.fplay=_play--Play sounds without apply module's volume setting
function SFX.play(name,vol,pos,pitch)
_play(name,(vol or 1)*volume,pos,pitch)
end
function SFX.reset()
for _,L in next,Sources do

View File

@@ -1,26 +1,23 @@
**TECHMINO © 2019-2021 26F Studio. Some rights reserved.**
TECHMINO and "26F Studio" are trademarks of 26F Studio.
The TECHMINO game and source code are under a GNU Lesser General Public License Version 3.
TECHMINO © 2019-2021 26F Studio. Some rights reserved.
TECHMINO and "26F Studio" are trademarks of 26F Studio. The TECHMINO game and source code are under a GNU Lesser General Public License Version 3.
"Tetris" is the registered trademark of The Tetris Holding, LLC, licensed to The Tetris Company, Inc. TECHMINO is not a fan game of Tetris. TECHMINO and 26F Studio are not affiliated with Tetris Holding, LLC or The Tetris Company, Inc. in any way.
Powered by LÖVE, © 2006-2021 LÖVE Development Team.
Lua is free software distributed under the terms of the MIT license. Copyright © 1994-2021 by Lua.org, PUC-Rio.
Lua is free software distributed under the terms of the MIT license. Copyright © 1994~2021 by Lua.org, PUC-Rio.
SIMPLE LOVE LIGHTS is under a MIT License. Created by Dylan Hunn.
json.lua is copyrighted by rxi. © 2021 rxi.
IBM Plex is copyrighted by the International Business Machines Corporation. IBM and IBM Plex are trademarks of IBM Corp, registered in many jurisdictions worldwide. IBM Plex is licensed under the SIL Open Font License, Version 1.1.
The Apple logo, "Apple Inc.," iOS, iPadOS, macOS, iPhone, and Mac are registered trademarks of Apple Inc. in the United States of America and other countries or regions.
"Windows", the Windows logo, "Xbox", Xbox logo, and "Microsoft" are registered trademarks of Microsoft Corporation in the United States of America and other countries or regions.
Source Han Sans is copyrighted by Adobe Inc. Source Han Sans and Adobe are registered trademarks of Adobe Inc. in United States and other countries or regions. Source Han Sans is licensed under the SIL Open Font License.
IBM Plex is copyrighted by the International Business Machines Corporation. IBM and IBM Plex are trademarks of IBM Corp, registered in many jurisdictions worldwide. IBM Plex is licensed under the SIL Open Font License.
Source Han Sans is copyrighted by Adobe Inc. Source Han Sans and Adobe are registered trademarks of Adobe Inc. in United States and other countries or regions. Source Han Sans is licensed under the SIL Open Font License, Version 1.1.
JetBrains Mono is copyrighted by the JetBrains Mono Project authors. JetBrains Mono is a trademark of JetBrains s.r.o. JetBrains Mono is licensed under the SIL Open Font License, Version 1.1.
@@ -29,22 +26,26 @@ JetBrains Mono is copyrighted by the JetBrains Mono Project authors. JetBrains M
"PlayStation", "PS", "PlayStation Family Mark", "PS logo", "DualSense" and "Play Has No Limits" are registered trademarks or trademarks of Sony Interactive Entertainment Inc. "SONY" is a registered trademark of Sony Corporation. © 2021 Sony Interactive Entertainment LLC.
N3TWORK is a registered trademark of N3TWORK Inc. © 2021 N3TWORK Inc.
"Windows", the Windows logo, "Xbox", Xbox logo, and "Microsoft" are registered trademarks of Microsoft Corporation in the United States of America and other countries or regions.
The Apple logo, "Apple Inc.," iOS, iPadOS, macOS, iPhone, and Mac are registered trademarks of Apple Inc. in the United States of America and other countries or regions.
"EA" and "Electronic Arts" are registered trademarks of Electronic Arts Inc. © 2021 Electronic Arts Inc.
SEGA and the SEGA logo are registered trademarks of Sega Corporation. © 2021 Sega Corporation.
Oculus Quest is a registered trademark of Facebook Technologies, LLC. © Facebook, Inc.
Oculus Quest is a registered trademark of Facebook Technologies, LLC. © Meta Platforms, Inc.
"Nintendo" is a registered trademarks of Nintendo Co., Ltd. © 2021 Nintendo Co., Ltd.
N3TWORK is a registered trademark of N3TWORK Inc. © 2021 N3TWORK Inc.
GoldWave is a registered trademark of GoldWave, Inc.
Linux is a registered trademark of Linus Torvalds.
Touhou Project © Team Shanghai Alice 2002-2021.
All other trademarks are the properties of their respective owners.
All other trademarks, logos, and copyrights are the properties of their respective owners.

View File

@@ -52,6 +52,7 @@ local _LOADTIME_=TIME()
Z=require'Zframework'
FONT.load('parts/fonts/proportional.ttf')
SCR.setSize(1280,720)--Initialize Screen size
BGM.setMaxSources(5)
BGM.setChange(function(name)MES.new('music',text.nowPlaying..name,5)end)
table.insert(_LOADTIMELIST_,("Load Zframework: %.3fs"):format(TIME()-_LOADTIME_))

View File

@@ -129,10 +129,10 @@ do
[10]={'+0+0','+1+0','+1-1','+0+2','+1-2','+1-2'},
[03]={'+0+0','+1+0','+1+1','+0-2','+1-1','+1-2'},
[30]={'+0+0','-1+0','-1-1','+0+2','-1+2','+0-1'},
[12]={'+0+0','+1+0','+1-1','+0+2','+1+2'},
[21]={'+0+0','-1+0','-1+1','+0-2','-1-2'},
[32]={'+0+0','-1+0','-1-1','+0+2','-1+2'},
[23]={'+0+0','+1+0','+1+1','+0-2','+1-2'},
[12]={'+0+0','+1+0','+1-1','+0+2','+1+2','+1+1'},
[21]={'+0+0','-1+0','-1+1','+0-2','-1-2','-1-1'},
[32]={'+0+0','-1+0','-1-1','+0+2','-1+2','+0-1'},
[23]={'+0+0','+1+0','+1+1','+0-2','+1-2','+0+1'},
[02]={'+0+0','+1+0','-1+0','+0-1','+0+1'},
[20]={'+0+0','-1+0','+1+0','+0+1','+0-1'},
[13]={'+0+0','+0-1','+0+1','+0-2'},

View File

@@ -1,4 +1,4 @@
--Blackhole
--blockhole
local gc=love.graphics
local gc_clear,gc_replaceTransform=gc.clear,gc.replaceTransform
local gc_setColor,gc_setLineWidth=gc.setColor,gc.setLineWidth
@@ -51,7 +51,7 @@ function back.draw()
gc_draw(S.texture,S.d*cos(S.ang),S.d*sin(S.ang),S.rotate,S.size*.026,nil,15,15)
end
--Blackhole
--blockhole
gc_setColor(.07,.07,.07)
gc_circle('fill',0,0,157)
gc_setLineWidth(6)

View File

@@ -20,6 +20,7 @@ return{
--Rule
sequence='bag',
lockout=false,
fieldH=20,
heightLimit=1e99,
bufferLimit=1e99,

View File

@@ -0,0 +1,35 @@
local function task_newBoard(P,init)
local F,L={},{1}
--TODO
P:pushNextList(L)
P.control=false
if not init then for _=1,26 do YIELD()end end
P.control=true
P.gameEnv.heightLimit=#F
P:pushLineList(F)
end
local function _check(P)
P.gameEnv.heightLimit=P.gameEnv.heightLimit-P.lastPiece.row
if P.gameEnv.heightLimit==0 then
P.modeData.stage=P.modeData.stage+1
if P.modeData.stage>=100 then
P:win('finish')
else
P:newTask(task_newBoard)
end
end
end
return{
sequence='none',
RS="SRS",
pushSpeed=5,
mesDisp=function(P)
setFont(60)
mStr(P.modeData.stage,63,280)
mText(TEXTOBJ.wave,63,350)
end,
hook_drop=_check,
task=function(P)task_newBoard(P,true)P.fieldBeneath=0 end,--Just run one time at first to start first level
}

View File

@@ -16,7 +16,7 @@ return{
mesDisp=function(P)
setFont(75)
local r=P.modeData.target/10
mStr(r<10 and 9 or r<30 and r or("%02x"):format(r*10-300),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)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
if P.modeData.drought>7 then

View File

@@ -16,7 +16,7 @@ return{
mesDisp=function(P)
setFont(75)
local r=P.modeData.target/10
mStr(r<10 and 9 or r<30 and r or("%02x"):format(r*10-300),63,210)
mStr(r==1 and 29 or("%02x"):format(r*10-20),63,210)
mText(TEXTOBJ.speedLV,63,290)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
if P.modeData.drought>7 then

View File

@@ -1,51 +1,54 @@
local pc_drop={50,45,40,35,30,26,22,18,15,12}
local pc_lock={55,50,46,42,39,36,33,31,29,27}
local pc_lock={55,50,46,42,40,38,36,34,32,30}
local pc_fall={18,16,14,12,10,9,8,7,6,5}
local PCbase=require"parts.modes.PCbase"
local PClist=require"parts.modes.PClist"
local function task_PC(P)
if P.frameRun>180 then
P.control=false
for _=1,26 do YIELD()end
P.control=true
end
local base=PCbase[P.modeData.type]
P:pushLineList(base[P.holeRND:random(#base)],P.modeData.symmetry)
local difficulty=P.stat.pc<10 and 4 or 5
local L=PClist[difficulty][P.holeRND:random(#PClist[difficulty])]
local symmetry=P.holeRND:random()>.5
P:pushNextList(L,symmetry)
P.control=false
if P.frameRun>180 then for _=1,26 do YIELD()end end
P.control=true
local base=PCbase[difficulty]
P:pushLineList(base[P.holeRND:random(#base)],symmetry)
end
local function check(P)
local f=P.field
if #f>0 then
if #f+P.stat.row%4>4 then
local function _check(P)
if #P.field>0 then
if #P.field+P.stat.row%4>4 then
P:lose()
end
else
local type=P.stat.pc<10 and 4 or 5
local L=PClist[type][P.holeRND:random(#PClist[type])]
local symmetry=P.holeRND:random()>.5
P.modeData.type=type
P.modeData.symmetry=symmetry
P:pushNextList(L,symmetry)
P.modeData.counter=P.stat.piece==0 and 20 or 0
P:newTask(task_PC)
if P.stat.pc>=100 then
P:win('finish')
else
P:newTask(task_PC)
if P.frameRun<180 then P.fieldBeneath=0 end
local s=P.stat.pc*.25
if math.floor(s)==s and s>0 then
P.gameEnv.drop=pc_drop[s]or 10
P.gameEnv.lock=pc_lock[s]or 25
P.gameEnv.fall=pc_fall[s]or 4
if s==10 then
P:_showText(text.maxspeed,0,-140,100,'appear',.6)
if P.stat.pc%4==0 and P.stat.pc>0 and P.stat.pc<=40 then
local s=P.stat.pc/4
P.gameEnv.drop=pc_drop[s]or 10
P.gameEnv.lock=pc_lock[s]or 25
P.gameEnv.fall=pc_fall[s]or 4
if s==10 then
P:_showText(text.maxspeed,0,-140,100,'appear',.6)
end
end
end
end
end
return{
sequence='none',
RS="SRS",
mesDisp=function(P)
setFont(60)
mStr(P.stat.pc,63,340)
mText(TEXTOBJ.pc,63,410)
mStr(P.stat.pc,63,260)
mText(TEXTOBJ.pc,63,330)
end,
hook_drop=check,
task=check,
hook_drop=_check,
task=_check,--Just run one time at first to start first level
}

View File

@@ -8,35 +8,40 @@ local PCtype={
1,2,3,
}
local function task_PC(P)
local difficulty=PCtype[P.stat.pc+1]or 3
local L=PClist[difficulty][P.holeRND:random(#PClist[difficulty])]
local symmetry=P.holeRND:random()>.5
P:pushNextList(L,symmetry)
P.control=false
for _=1,26 do YIELD()end
if P.frameRun>180 then for _=1,26 do YIELD()end end
P.control=true
local base=PCbase[P.modeData.type]
P:pushLineList(base[P.holeRND:random(#base)],P.modeData.symmetry)
local base=PCbase[difficulty]
P:pushLineList(base[P.holeRND:random(#base)],symmetry)
end
local function check(P)
local r=P.field
if #r>0 then
if #r+P.stat.row%4>4 then
local function _check(P)
if #P.field>0 then
if #P.field+P.stat.row%4>4 then
P:lose()
end
else
local type=PCtype[P.stat.pc+1]or 3
local L=PClist[type][P.holeRND:random(#PClist[type])]
local symmetry=P.holeRND:random()>.5
P.modeData.type=type
P.modeData.symmetry=symmetry
P:pushNextList(L,symmetry)
P.modeData.counter=P.stat.piece==0 and 20 or 0
P:newTask(task_PC)
if P.stat.pc>=60 then
P:win('finish')
else
P:newTask(task_PC)
if P.frameRun<180 then P.fieldBeneath=0 end
end
end
end
return{
sequence='none',
RS="SRS",
mesDisp=function(P)
setFont(60)
mStr(P.stat.pc,63,340)
mText(TEXTOBJ.pc,63,410)
mStr(P.stat.pc,63,260)
mText(TEXTOBJ.pc,63,330)
end,
hook_drop=check,
task=check,
hook_drop=_check,
task=_check,--Just run one time at first to start first level
}

View File

@@ -1,15 +1,16 @@
return{
mesDisp=function(P)
setFont(55)
local r=40-P.stat.row
if r<0 then r=0 end
mStr(r,63,170)
PLY.draw.drawTargetLine(P,r)
setFont(45)
mStr(("%.1f"):format(P.stat.atk),63,270)
mText(TEXTOBJ.atk,63,323)
mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,370)
mText(TEXTOBJ.eff,63,423)
setFont(55)
local r=40-P.stat.row
if r<0 then r=0 end
mStr(r,63,170)
PLY.draw.drawTargetLine(P,r)
end,
hook_drop=function(P)
if P.stat.row>=40 then

View File

@@ -0,0 +1,30 @@
local waitSpeed={60,59,58,57,56,55,54,52,50,48,46,44,42,40,38,36,34,32,30}
return
{
das=5,arr=1,
drop=0,lock=7,
wait=60,fall=0,
freshLimit=12,
mesDisp=function(P)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
PLY.draw.drawTargetLine(P,200-P.stat.row)
end,
task=function(P)
P.modeData.target=10
end,
hook_drop=function(P)
if P.stat.row>=P.modeData.target then
if P.modeData.target==200 then
P:win('finish')
else
if P.modeData.target==100 then
P.modeData.lock=6
end
P.gameEnv.wait=waitSpeed[P.modeData.target/10]
P.modeData.target=P.modeData.target+10
SFX.play('reach')
end
end
end
}

View File

@@ -0,0 +1,30 @@
local waitSpeed={30,29,28,27,26,25,24,23,22,21,20,19,18,18,17,17,16,16,15}
return
{
das=4,arr=1,
drop=0,lock=6,
wait=30,fall=0,
freshLimit=12,
mesDisp=function(P)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
PLY.draw.drawTargetLine(P,200-P.stat.row)
end,
task=function(P)
P.modeData.target=10
end,
hook_drop=function(P)
if P.stat.row>=P.modeData.target then
if P.modeData.target==200 then
P:win('finish')
else
if P.modeData.target==100 then
P.modeData.lock=5
end
P.gameEnv.wait=waitSpeed[P.modeData.target/10]
P.modeData.target=P.modeData.target+10
SFX.play('reach')
end
end
end
}

View File

@@ -0,0 +1,30 @@
local waitSpeed={15,15,14,14,13,13,12,12,11,11,10,10,9,9,8,8,7,7,7}
return
{
das=3,arr=1,
drop=0,lock=5,
wait=15,fall=0,
freshLimit=12,
mesDisp=function(P)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
PLY.draw.drawTargetLine(P,200-P.stat.row)
end,
task=function(P)
P.modeData.target=10
end,
hook_drop=function(P)
if P.stat.row>=P.modeData.target then
if P.modeData.target==200 then
P:win('finish')
else
if P.modeData.target==100 then
P.modeData.lock=4
end
P.gameEnv.wait=waitSpeed[P.modeData.target/10]
P.modeData.target=P.modeData.target+10
SFX.play('reach')
end
end
end
}

View File

@@ -80,11 +80,11 @@ return{
"Google \"Tetris Online Poland\" for the Poland server.\nClick on the globe icon for information about the Tetris Online Study server.",
"http://teatube.ltd/tos",
},
{"P\97\116\114\111\110",
"p\97\116\114\111\110 support",
{"P\97\116\114\101\111\110",
"p\97\116\114\101\111\110 support",
"org",
"Techmino's P\97\116\114\111\110 Page",
FNSF and"https://www.youtube.com/watch?v=DVl0IiUKX_g"or"https://www.p\97\116\114\111\110.com/techmino",
"Techmino's P\97\116\114\101\111\110 Page",
FNSF and"https://www.youtube.com/watch?v=DVl0IiUKX_g"or"https://www.p\97\116\114\101\111\110.com/techmino",
},
--Games
{"TTT",
@@ -167,7 +167,7 @@ return{
{"Tetris Gems",
"tetris online official gem",
"game",
"Another Tetris game from tetris.com. It has the gravity mechanism, and each game lasts for 2 minutes. There are three kinds of gem blocks with different abilities.",
"Another Tetris game from tetris.com. It has the gravity mechanism, and each game lasts for 1 minute. There are three kinds of gem blocks with different abilities.",
},
{"Tetris Mind Bender",
"tetris online official gem",
@@ -195,6 +195,11 @@ return{
"game",
"*Windows | Single-player*\nA game with all modes from TGM which you can use to practice. Has better controls than actual TGM. The world rule is slightly different, however (eg, instant-lock soft drops, and slightly different kick tables)",
},
{"Cambridge",
"cambridge",
"game",
"*Windows, macOS, Linux | Single-player*\nA Lua-based game engine dedicated to creating a robust, easily customizable platform for creating new, custom game modes. It was originally made by Joe Zeng, and starting with version 0.1.5 on October 8, 2020, Milla took over development of the game.\n--Tetris Wiki",
},
{"Tetris99",
"t99 tetris99",
@@ -254,7 +259,7 @@ return{
{"Tetris Blitz",
"blitz ea mobile phone",
"game",
"A mobile Tetris game by Electronic Arts (EA). It has the gravity mechanism, and each game lasts for 2 minutes. A bunch of minoes fall down to the field at the beginning of the game, and you can enter the \"Frenzy\" mode by performing Tetris line clears continuously. There are many different power-ups available.\n\nThis game is no longer available since January 2020.",
"A mobile Tetris game by Electronic Arts (EA). It has the gravity mechanism, and each game lasts for 2 minutes. A bunch of minoes fall down to the field at the beginning of the game, and you can enter the \"Frenzy\" mode by performing line clears continuously. There are many different power-ups available. Also, this game has no top-out mechanism. When an incoming block overlaps with existing blocks in the field, the top lines will be cleared automatically. \n\nThis game is no longer available since April 2020.",
},
{"Tetris (EA)",
"tetris ea galaxy universe cosmos mobile phone",
@@ -264,7 +269,7 @@ return{
{"Tetris (N3TWORK)",
"tetris n3twork mobile phone",
"game",
"The latest mobile Tetris from N3TWORK Inc. It has a 3-minute ultra mode, a marathon mode and a Royale mode. The UI is great but its controls are not so good.",
"The latest mobile Tetris from N3TWORK Inc. It has a 3-minute ultra mode, a marathon mode and a 100-player Royale mode. The UI is great but its controls are not so good.",
},
{"Tetris Beat",
"tetris beat n3twork rhythm",
@@ -373,7 +378,7 @@ return{
{"Tetris",
"tetris",
"term",
"The name of the game (and its trademark). Also the name for clearing 4 lines at one time in official games.\nCoined from Tetra (greek for \"four\") and Tennis (favorite sport of the creator of Tetris).",--Thanks to Alexey Pajitnov!
"The name of the game (and its trademark). Also the name for clearing 4 lines at one time in official games.\nCoined from Tetra (greek for \"four\") and Tennis (favorite sport of the creator of Tetris). Also, the Tetris games developed by Nintendo and SEGA was licensed by TTC and these two companies do not have the copyright of Tetris.",--Thanks to Alexey Pajitnov!
},
{"All Clear",
"pc perfectclear ac allclear",
@@ -540,7 +545,7 @@ return{
{"IMS",
"ims initialmovesystem",
"term",
"*Techmino-exclusive*\nInitial Movement System\nHolding a sideways movement key during spawn delay to spawn the piece one block off to the side. Sometimes prevents death.",
"*Techmino-exclusive*\nInitial Movement System\nHolding a sideways movement key during spawn delay to spawn the piece one block off to the side. Sometimes prevents death.\nNote that DAS need to be full charged when new piece appear",
},
{"Next",
"nextpreview",
@@ -657,10 +662,10 @@ return{
"term",
"A way of stacking where you have a 6-block-wide stack on the left, and a 3-block-wide stack on the right.\nFor a skilled player, this method of stacking might reduce the keypresses needed for stacking, and is a popular Sprint stacking method. The reason why it works has to do with the fact that pieces spawn with a bias to the left.",
},
{"20G",
"20g",
{"Freestyle",
"freestyle ziyou",
"term",
"The fastest falling speed of modern Tetris. In 20G, pieces do not have a falling process and instantly appear on the bottom. This sometimes also limits a piece's sideways movements, as it is not always possible to make a piece climb over a bump or out of a well in 20G.",
"This term is usually used in 20TSDs. Freestyle means finishing 20 TSDs without using static stacking modes. Freestyle 20TSDs is more difficult than static tsacking modes such as LST, and the performance can represent the T-spin skills a player has in battles.",
},
{"Topping out",
"die death topout toppingout",
@@ -679,9 +684,14 @@ return{
"https://youtu.be/z4WtWISkrdU",
},
{"Falling speed",
"fallingspeed",
"fallingspeed gravity",
"term",
"Falling speed is often described in terms of G, i.e. how many lines it falls in one frame (often assuming 60 frames per second).\nG is a large unit. The speed of Lv 1 in a regular Marathon (one second per line) is 1/60 G, and 1G is about Lv 13 speed. G usually caps at 20G, for there are only 20 (visible) blocks in the matrix's height.",
"Falling speed is often described in terms of \"G\", i.e. how many lines the blocks fall in one frame (usually assuming 60 fps).\nG is a relatively large unit. The speed of Lv 1 in a regular Marathon (one second per line) is 1/60 G, and 1G is about Lv 13 speed. The highest speed of modern Tetris is 20G because the field height is 20 lines. In fact, the real meaning of 20G is \"Infinite falling speed\", and even when the field height is more than 20 lines, 20G modes force all the blocks to fall down to the bottom instantly. You can learn more about 20G at the \"20G\" entry.",
},
{"20G",
"20g gravity instant",
"term",
"The fastest falling speed of modern Tetris. In 20G modes, pieces appear instantly on the bottom of the field without the actual process of \"falling down\". This sometimes also limits a piece's sideways movements, as it is not always possible to make a piece climb over a bump or out of a well in 20G. You can learn more at the unit \"G\" at the \"falling speed\" entry. ",
},
{"Lockdown Delay",
"lockdelay lockdowndelay lockdowntimer",
@@ -701,7 +711,7 @@ return{
{"Death ARE",
"death are die delay",
"term",
"(Techmino exclusive) When the spawn location of the next piece is blocked by an existing block in the field, a delay will be added in addition to the spawn ARE, and this delay is referred to as the death ARE. This mechanism can be used along with IHS and IRS to prevent death. \nOriginal idea by Not-A-Normal-Bot",
"(Techmino exclusive) When the spawn location of the next piece is blocked by an existing block in the field, a delay will be added in addition to the spawn ARE, and this delay is referred to as the death ARE. This mechanism can be used along with IHS and IRS to prevent death. \nOriginal idea by NOT_A_ROBOT",
},
{"Finesse",
"finesse",
@@ -823,6 +833,16 @@ return{
"term",
"The block skin used by the earliest version of Tetris.\nIn the early times, computers were all using Command Line Interface instead of Graphical User Interface, so at that time a single mino in the game of Tetris is represented using two enclosing square brackets [ ]. It looks kinds of like bones so it is sometimes called the bone blocks.\nIn Techmino, bone blocks are defined as \"A single, fancy block skin that all of the blocks use.\". Different block skins may have different types of bone block styles.",
},
{"Semi-invisible",
"half invisible semi",
"term",
"Refers to a rule where the tetrominoes will become invisible after a period of time.\nThis time interval is not definite and it is acceptable to describe it as \"disappear after a few seconds\".",
},
{"Invisible",
"invisible",
"term",
"Refers to a rule where blocks will disappear instantly when locked onto the field. \nN.B. It is also acceptable to refer to an invisible mode where a disappearing animation is shown. However, this makes the game a lot easier, so in this game, the invisible mode without such animations is referred to as \"Sudden Invisible\".",
},
{"MPH mode",
"mph",
"term",

View File

@@ -73,11 +73,11 @@ return{
"TO-S的添加方法、说明等关于茶服的一切",
"http://teatube.ltd/tos",
},
{"P\97\116\114\111\110",
"赞助 p\97\116\114\111\110 support zanzhu daqian",
{"P\97\116\114\101\111\110",
"赞助 p\97\116\114\101\111\110 support zanzhu daqian",
"org",
"Techmino的P\97\116\114\111\110",
FNSF and"https://www.youtube.com/watch?v=DVl0IiUKX_g"or"https://www.p\97\116\114\111\110.com/techmino",
"Techmino的P\97\116\114\101\111\110",
FNSF and"https://www.youtube.com/watch?v=DVl0IiUKX_g"or"https://www.p\97\116\114\101\111\110.com/techmino",
},
--游戏(题库)
@@ -163,7 +163,7 @@ return{
{"Tetris Gems",
"宝石 tetris online official gems",
"game",
"tetris.com官网上的俄罗斯方块限时2分钟挖掘,有重力机制。\n有三种消除后可以获得不同功能的宝石方块。",
"tetris.com官网上的俄罗斯方块限时1分钟挖掘,有重力机制。\n有三种消除后可以获得不同功能的宝石方块。",
},
{"Tetris Mind Bender",
"技能 tetris online official mindbender",
@@ -173,7 +173,7 @@ return{
--游戏(街机/类街机)
{"TGM",
"俄罗斯方块大师 tgm tetrisgrandmaster",
"俄罗斯方块大师 tgm3 tetrisgrandmaster",
"game",
"全称Tetris The Grand Master一个街机平台方块系列S13/GM等称号出自该系列可以在Windows平台运行。\n\n其中TGM3目前玩得最普遍部分模式说明\n\nMaster大师模式有段位评价拿到更高段位点的要求非消一的连击和消四字幕战中消除和通关每100的前70小于【标准时间上一个0~70秒数+2】中小的一个每100总用时不能超过限定值不然取消上一个方法的加分并反扣点数到500若没有进标准时间会强制结束游戏称为铁门字幕战有两个难度半隐和全隐后者必须拿到几乎全部的段位点才能进消除奖励的段位点也更多。\n\nShirase死亡模式类似于techmino中的20G-极限开局就是高速20G500和1000有铁门500开始底下开始涨垃圾行1000开始出现骨块1300通关进入大方块字幕战段位结算每通100加1段从S1到S13如果通关了字幕战就会有金色的S13\n\n更多内容详见链接",
"http://teatube.ltd/TGMGUIDE/",
@@ -193,6 +193,11 @@ return{
"game",
"简称Tex一个Windows平台方块包含TGM的所有模式可以用来练习TGM手感比真版较好不足的是World规则不完全一样如软降到底无锁延踢墙表有细节不同等",
},
{"Cambridge",
"剑桥 cambridge",
"game",
"一个Windows/macOS/Linux平台方块是基于Lua的方块游戏引擎致力于创建一个轻松高度自定义新模式的方块平台。最初由Joe Zeng开发于2020.10.8日的0.1.5版开始Milla接管了开发。\n--Tetris Wiki",
},
--游戏PC/主机/手机)
{"Techmino",
@@ -243,7 +248,7 @@ return{
{"Tetris Blitz",
"闪电战 tetris blitz ea",
"game",
"简称闪电战EA代理的一款移动端方块有重力连锁机制限时2分钟游戏开始会掉下一堆小方块持续消会进入Frenzy模式场地下方会不断冒出垃圾行帮助玩家制造大连锁)。有非常多的道具\n\n已于2020年1月下架。",
"简称闪电战EA代理的一款移动端方块有重力连锁机制限时2分钟游戏开始会掉下一堆小方块持续消会进入Frenzy模式场地下方会不断冒出垃圾行帮助玩家制造大连锁如果多次落块没有消行会强制结束Frenzy。有非常多的道具。\n此外这款游戏似乎没有top-out机制。当新出现的方块与场地现有方块重叠时场地最上方的几行会被自动清除。\n\n已于2020年4月下架。",
},
{"Tetris (EA)",
"tetris ea",
@@ -253,7 +258,7 @@ return{
{"Tetris Beat",
"节奏 tetris beat n3twork",
"game",
"N3TWORK代理的一款移动端方块按钮、滑动和点击三种操控模式。除了马拉松模式外还有一个“节奏”模式,玩家根据音乐节奏落块可以得到额外分数奖励。特效比较花眼,操控手感不是很好。",
"N3TWORK代理的一款移动端方块马拉松、3分钟限时打分和Royale最多100人对战模式。UI比较好看但不支持自定义键位而且默认的按钮很小手感不好。",
},
{"Tetris (N3TWORK)",
"Tetris n3twork",
@@ -261,7 +266,7 @@ return{
"N3TWORK代理的一款移动端方块有马拉松、限时打分和Royale最多99人对战模式。UI比较好看但不支持自定义键位而且默认的按钮很小手感不好。"
},
{"Touhoumino",
"东方 车万 touhoumino chewan dongfang touhou th",
"东方 车万 偷猴 touhoumino chewan dongfang touhou th",
"game",
"玩家自制Windows平台方块东方主题其实就是一个Nullpomino的自带资源包的改版将东方Project元素结合到俄罗斯方块的游戏好玩但是难度较大适合有方块基础并且各项能力都较强的玩家游玩不然都不知道自己怎么死的",
},
@@ -556,7 +561,7 @@ return{
{"IMS",
"提前 ims initialmovesystem",
"term",
"Initial Move System\n提前移动系统方块出现前提前按住移动后出现时会朝移动方向偏一格有时可以避免死亡Techmino限定",
"Initial Move System\n提前移动系统方块出现前提前按住移动后出现时会朝移动方向偏一格有时可以避免死亡Techmino限定\n需要块出现时das已充满",
},
{"Next",
"预览 下一个 next yulan xiayige",
@@ -573,7 +578,7 @@ return{
"term",
"交换功能Hold的另一种表现形式将手里的方块和Next槽中的第一个交换一般同样不能连续使用。",
},
{"Deepdrop",
{"深降",
"深降 deepdrop shenjiang",
"term",
"开启后当方块触底时,再次按下软降会让方块尝试向下穿墙寻找放得下的地方,如果有就会直接瞬移到那\n该功能更偏向用于技术研究对于ai来说有了它可以完全不用再考虑旋转系统形状能容得下的地方一定都能到达",
@@ -681,17 +686,12 @@ return{
{"Freestyle",
"freestyle ziyou",
"term",
"自由发挥的意思常用于freestyle TSDT2指不用固定的堆叠方式而是随机应变完成20TSD。比用LST或者垃圾分类完成的20 TSD的含金量高不少",
},
{"20G",
"高重力 20g",
"term",
"现代方块的最高下落速度,表观就是方块瞬间到底,不存在中间的下落过程,可能会让方块无法跨越壕沟/从山谷爬出。",
"自由发挥的意思常用于freestyle TSDT2指不用固定的堆叠方式而是随机应变完成20TSD。比用LST或者垃圾分类完成的20 TSD的难度要大,成绩也更能代表实战水平",
},
{"死亡判定",
"死亡判定 die death siwang",
"term",
"现代方块普遍使用的死亡判定:\n1. 新出现的方块和场地方块有重叠窒息Block Outc4w比s4w强的原因因为被打进18行都不会窒息\n2. 方块锁定时完全在场地的外面Lock Out\n3. 场地内现存方块总高度大于40。超高Top Out\n\n注:本游戏使用的死亡判定不包含上述的第二条和第三条。",
"现代方块普遍使用的死亡判定:\n1. 新出现的方块和场地方块有重叠窒息Block Outc4w比s4w强的原因因为被打进18行都不会窒息\n2. 方块锁定时完全在场地的外面Lock Out\n3. 场地内现存方块总高度大于40。超高Top Out\n\n注:本游戏使用的死亡判定默认不开启第二、三条。",
},
{"缓冲区",
"缓冲区 buffer zone huanchongqu",
@@ -707,7 +707,12 @@ return{
{"下落速度",
"下落速度 重力 drop speed zhongli gravity",
"term",
"一般用*G表示方块的下落速度意思是每一帧方块往下移动多少格一秒下落一格就是1/60G默认60fpsG是一个很大的单位20G即为上限因为场地就20格",
"一般用*G表示方块的下落速度意思是每一帧方块往下移动多少格一秒下落一格就是1/60G默认60fps可以看出G是一个很大的单位。因为场地就20格所以一般认为20G即为上限详见20G词条",
},
{"20G",
"高重力 20g",
"term",
"现代方块的最高下落速度,表观就是方块瞬间到底,不存在中间的下落过程,可能会让方块无法跨越壕沟/从山谷爬出。\n20G一般指的其实是“无限下落速度”就算场地不止20格“20G”也会让方块瞬间到底。\n本游戏和部分其他游戏推荐这么设计中20G的优先级比其他玩家操作都高即使是0arr的水平方向“瞬间移动”中途也会受到20G的影响。",
},
{"锁定延迟",
"锁定延迟 重力 lock delay suoyan zhongli gravity",
@@ -727,7 +732,7 @@ return{
{"窒息延迟",
"窒息延迟 choke are delay zhixiyanchi",
"term",
"当前方块锁定后如果下一块的生成位置被阻挡,那么下一块的出块延迟会被再额外加上这个延迟的值,方便使用提前系统来避免死亡\n想法来自Not-A-Normal-Bot",
"当前方块锁定后如果下一块的生成位置被阻挡,那么下一块的出块延迟会被再额外加上这个延迟的值,方便使用提前系统来避免死亡\n想法来自NOT_A_ROBOT",
},
{"Finesse",
"极简操作 最简操作 finesse jijiancaozuo zuijiancaozuo",
@@ -845,12 +850,22 @@ return{
"经典块术语指长时间不来I方块长条。现代方块使用的Bag7出块规则下干旱几乎不可能平均7块就会有一个I理论极限两个I最远中间隔12块。",
},
{"骨块",
"gukuai bone tgm",
"骨块 gukuai bone tgm",
"term",
"最早的方块游戏使用的方块样式。\n很久以前的电脑没有可以显示复杂图案的屏幕,只能往上打字,所以一格方块用两个方括号[ ]表示,长得像骨头所以叫骨块。\n基于骨块的特点,本游戏把骨块重新定义为,“所有形状使用的同一个比较花眼的贴图”,不同的皮肤有不同的骨块样式。",
},
{"半隐",
"半隐 banyin half semi invisible",
"term",
"指方块锁定经过一段时间后会变隐形的规则\n注:从锁定开始到消失的具体时长不定,可以描述为“过几秒种后消失”",
},
{"全隐",
"全隐 quanyin invisible",
"term",
"指方块锁定后会马上完全隐藏\n注:锁定时有消失动画的话也可以叫全隐,但其实难度会小一点,故本游戏中没有动画的隐形模式叫瞬隐",
},
{"场地重力",
"zhongli liansuo cascade chain",
"重力 zhongli liansuo cascade chain",
"term",
"(由于“重力”有歧义所以本词典里称为场地重力,也有重力连锁等叫法。)\n部分游戏的部分模式可能包含此规则。此规则下玩家的四格方块四个方向有连接关系连起来的几个格整体会受到重力影响悬空了会往下落。在这个规则下可以构造复杂的连锁消除一个主打连锁消除对战的游戏是Qudra老游戏现在基本没人玩",
},

View File

@@ -196,7 +196,7 @@ return{
"The author is not responsible for any modifications.",
FNSF and"/"or"While the game is free, donations are appreciated.",
FNSF and"/"or"If you are unable to use both WeChat Pay and AliPay,",
FNSF and"/"or"you can go to our P\97\116\114\111\110 page (Link in Zictionary) to support us!",
FNSF and"/"or"you can go to our P\97\116\114\101\111\110 page (Link in Zictionary) to support us!",
},
staff={
"Author: MrZ Email: 1046101471@qq.com",
@@ -210,7 +210,7 @@ return{
"Translations: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅",
"",
"Special Thanks:",
"Flyz, Big_True, NOT-A-ROBOT, 思竣, yuhao7370",
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
"Farter, Teatube, 蕴空之灵, T9972, [All test staff]",
},
used=[[
@@ -303,12 +303,14 @@ return{
ospin="O-spin",
fineKill="100% Finesse",
b2bKill="No B2B break",
lockout="Fail when lock out",
easyFresh="Normal Lock Reset",
deepDrop="Deep Drop",
bone="Bone Blocks",
eventSet="Rule Set",
holdMode="Hold Mode",
nextCount="Next",
holdCount="Hold",
infHold="Infinite Hold",
@@ -368,7 +370,7 @@ return{
score="Score Pop-Ups",
bufferWarn="Buffer Alerts",
showSpike="Spike Counter",
nextPos="Next Preview",
nextPos="Spawn Preview",
highCam="Screen Scrolling",
warn="Danger Alerts",
@@ -514,6 +516,7 @@ return{
ospin="O-Spin",
fineKill="100% Finesse",
b2bKill="No B2B break",
lockout="Fail when lock out",
easyFresh="Normal Lock Reset",
deepDrop="Deep Drop",
bone="Bone Blocks",
@@ -703,6 +706,9 @@ return{
['master_final']= {"Master", "FINAL", "20G and beyond"},
['master_ph']= {"Master", "PHANTASM", "???"},
['master_ex']= {"GrandMaster", "EXTRA", "An eternity shorter than an instant"},
['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
['blind_e']= {"Invisible", "HALF", "For novices"},
['blind_n']= {"Invisible", "ALL", "For intermediates"},
['blind_h']= {"Invisible", "SUDDEN", "For the experienced"},

View File

@@ -162,7 +162,7 @@ return{
"El autor no se responabiliza por daños ocasionados debido a modificaciones del juego.",
FNSF and"/"or"Por favor descarga las últimas versiones desde los sitios oficiales. El juego es gratuito",
FNSF and"/"or"Si no puede usar WeChat Pay y AliPay,",
FNSF and"/"or"puede ir a nuestra página de P\97\116\114\111\110 para apoyarnos.",
FNSF and"/"or"puede ir a nuestra página de P\97\116\114\101\111\110 para apoyarnos.",
},
staff={
"Autor:MrZ Email: 1046101471@qq.com",
@@ -176,7 +176,7 @@ return{
"Traducción: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅",
"",
"Agradecimientos:",
"Flyz, Big_True, NOT-A-ROBOT, 思竣, yuhao7370",
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
"Farter, Teatube, 蕴空之灵, T9972, [Todo el Staff de Testeo]",
},
used=[[
@@ -269,6 +269,7 @@ return{
ospin="O-Spin",
fineKill="100% Finesse",
b2bKill="No Romper B2B ",
-- lockout="Fail when lock out",
easyFresh="Reinicio de Bloqueo Normal",
deepDrop="Deep Drop",
bone="Bone Block",
@@ -335,7 +336,7 @@ return{
score="Puntaje en Pantalla",
bufferWarn="Alerta de Búfer",
showSpike="Contador de Spike",
nextPos="Ver Spawn de Pza. Sig.",
-- nextPos="Spawn Preview",
highCam="Cám. Vista Aérea",
warn="Alerta de Peligro",
@@ -481,6 +482,7 @@ return{
ospin="O-Spin",
fineKill="100% Finesse",
b2bKill="No Romper B2B ",
-- lockout="Fail when lock out",
easyFresh="Reinicio de Bloqueo Normal",
deepDrop="Deep Drop",
bone="Bone Block",
@@ -661,6 +663,9 @@ return{
-- ['master_m']= {"Master", "M21", "For 20G Masters."},
['master_final']= {"Master", "FINAL", "El verdadero 20G Supremo: el final es inalcanzable."},
['master_ex']= {"GrandMaster", "EXTRA", "Para ser un gran maestro, acepta este desafío"},
-- ['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
-- ['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
-- ['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
['blind_e']= {"A Ciegas", "Parcial", "Para novatos."},
['blind_n']= {"A Ciegas", "Total", "Para jugadores intermedios."},
['blind_h']= {"A Ciegas", "Inmediato", "Para jugadores experimentados"},

View File

@@ -162,7 +162,7 @@ return{
"et vous n'avez besoin que des permissions de vibration et de communication réseau pour les versions mobiles !",
FNSF and"/"or"Le créateur n'est pas responsable pour n'importe quel type de perte de données suite à une modification du jeu.",
FNSF and"/"or"Si vous ne parvenez pas à utiliser à la fois WeChat Pay et AliPay,",
FNSF and"/"or"vous pouvez vous rendre sur notre page P\97\116\114\111\110 pour nous soutenir !",
FNSF and"/"or"vous pouvez vous rendre sur notre page P\97\116\114\101\111\110 pour nous soutenir !",
},
staff={
"Author: MrZ E-mail: 1046101471@qq.com",
@@ -176,7 +176,7 @@ return{
"Traduction: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅",
"",
"Merci à:",
"Flyz, Big_True, NOT-A-ROBOT, 思竣, yuhao7370",
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
"Farter, Teatube, 蕴空之灵, T9972, [All test staff]",
},
used=[[
@@ -265,6 +265,7 @@ return{
ospin="O-spin",
fineKill="100% Finesse",
b2bKill="Sans perte de B2B",
-- lockout="Fail when lock out",
easyFresh="Réinit. de verrouillage normale",
-- deepDrop="Deep Drop",
bone="Crochets",
@@ -333,7 +334,7 @@ return{
score="Pop-up de score",
-- bufferWarn="Buffer Alert",
-- showSpike="Spike Counter",
nextPos="Prévisualisation de position",
-- nextPos="Spawn Preview",
highCam="Vue d'oiseau",
warn="Alerte de danger",
@@ -482,6 +483,7 @@ return{
ospin="O-spin",
fineKill="100% Finesse",
b2bKill="Sans perte de B2B",
-- lockout="Fail when lock out",
easyFresh="Réinit. de verrouillage normale",
-- deepDrop="Deep Drop",
bone="Crochets",
@@ -665,6 +667,9 @@ return{
['master_final']= {"Master", "FINAL", "20G : Un point final impossible à atteindre !"},
-- ['master_ph']= {"Mester", "FANTASMA", "20G: ???"},
['master_ex']= {"GrandMaster", "EXTRA", "Tentez de devenir un Grandmaster."},
-- ['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
-- ['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
-- ['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
['blind_e']= {"Aveugle", "MOITIE", "Pour les novices."},
['blind_n']= {"Aveugle", "TOUT", "Pour les joueurs intermédiaires."},
['blind_h']= {"Aveugle", "SOUDAIN", "Pour les bons jooeurs."},

View File

@@ -184,7 +184,7 @@ return{
"O autor não é responsável por qualquer binários modificados",
FNSF and"/"or"O jogo é gratis, mas doações são apreciadas.",
FNSF and"/"or"Se você não conseguir usar o WeChat Pay e o AliPay,",
FNSF and"/"or"pode acessar a página do P\97\116\114\111\110 para nos ajudar!",
FNSF and"/"or"pode acessar a página do P\97\116\114\101\111\110 para nos ajudar!",
},
staff={
"Author: MrZ E-mail: 1046101471@qq.com",
@@ -198,7 +198,7 @@ return{
"Traduzir: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅",
"",
"Special Thanks:",
"Flyz, Big_True, NOT-A-ROBOT, 思竣, yuhao7370",
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
"Farter, Teatube, 蕴空之灵, T9972, [All test staff]",
},
used=[[
@@ -291,6 +291,7 @@ return{
ospin="O-Spin",
fineKill="100% Finesse",
b2bKill="Sem Quebrar B2B",
-- lockout="Fail when lock out",
easyFresh="Reset De Trava Normal",
-- deepDrop="Deep Drop",
bone="Bone Blocks",
@@ -357,7 +358,7 @@ return{
score="Pop-up de pontos",
-- bufferWarn="Buffer Alert",
-- showSpike="Spike Counter",
nextPos="Próxima Pos.",
-- nextPos="Spawn Preview",
highCam="Vista Olho-de-pássaro",
warn="Alerta de perigo",
@@ -504,6 +505,7 @@ return{
ospin="O-Spin",
fineKill="100% Finesse",
b2bKill="Sem Quebrar B2B",
-- lockout="Fail when lock out",
easyFresh="Reset De Trava Normal",
-- deepDrop="Deep Drop",
bone="Bone Blocks",
@@ -695,6 +697,9 @@ return{
['master_final']= {"Mestre", "FINAL", "20G: Final inalcançável!"},
['master_ph']= {"Mestre", "FANTASMA", "20G: ???"},
['master_ex']= {"GrandMaster", "EXTRA", "Para ser um Grand Master, aceite \nesse desafio."},
-- ['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
-- ['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
-- ['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
['blind_e']= {"Cego", "METADE", "Para novatos."},
['blind_n']= {"Cego", "TUDO", "Para intermediários."},
['blind_h']= {"Cego", "DE REPENTE", "Para experientes."},

View File

@@ -197,6 +197,7 @@ return{
ospin="O→Any",
fineKill="12 XX 21",
b2bKill="_1 XX",
lockout="X ↑_↓_↑",
easyFresh="↓_↓_↓_",
deepDrop="\\↓↓/",
bone="[]",
@@ -409,6 +410,7 @@ return{
ospin="O→Any",
fineKill="12 XX 21",
b2bKill="_1 XX",
lockout="X ↑_↓_↑",
easyFresh="↓_↓_↓_",
deepDrop="\\↓↓/",
bone="[]",

View File

@@ -226,10 +226,13 @@ return{fallback='zh',
['round_u']= {"回合制", "极限", "下棋"},
['master_n']= {"大师", "普通", "无脑20G"},
['master_h']= {"大师", "困难", "简单20G"},
['master_m']= {"大师", "M21", "一般20G"},
['master_m']= {"大师", "M21", "一般20G"},
['master_final']= {"大师", "终点", "真正的20G"},
['master_ph']= {"大师", "虚幻", "好玩的20G"},
['master_ex']= {"宗师", "EX", "考试20G"},
['master_ex']= {"宗师", "EX", "考试20G"},
['strategy_e']= {"策略堆叠", "简单", "有区别吗"},
['strategy_h']= {"策略堆叠", "困难", "没区别吧"},
['strategy_u']= {"策略堆叠", "极限", "没区别"},
['blind_e']= {"隐形", "半隐", "谁都能玩"},
['blind_n']= {"隐形", "全隐", "稍加练习即可"},
['blind_h']= {"隐形", "瞬隐", "和上一个一样"},

View File

@@ -196,7 +196,7 @@ return{
"若由于被修改的本游戏产生的各种损失作者不负责(怎么负责啊我又没法管)",
FNSF and"/"or"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
FNSF and"/"or"记得备注id备注id备注id不然可能会没法记录到赞助列表",
FNSF and"/"or"你也可以去我们的P\97\116\114\111\110页面(链接见小Z词典)来支持我们!",
FNSF and"/"or"你也可以去我们的P\97\116\114\101\111\110页面(链接见小Z词典)来支持我们!",
},
staff={
"作者:MrZ 邮箱:1046101471@qq.com",
@@ -210,7 +210,7 @@ return{
"翻译: User670MattMayugaMizuMr.FaqScFC₂₉H₂₅N₃O₅",
"",
"特别感谢:",
"FlyzBig_TrueNOT-A-ROBOT思竣yuhao7370",
"FlyzBig_TrueNOT_A_ROBOT思竣yuhao7370",
"FarterTeatube蕴空之灵T9972[All test staff]",
},
used=[[
@@ -303,6 +303,7 @@ return{
ospin="O-spin",
fineKill="强制极简",
b2bKill="强制B2B",
lockout="锁定在外时失败",
easyFresh="普通刷新锁延",
deepDrop="深降",
bone="骨块",
@@ -515,6 +516,7 @@ return{
ospin="O-spin",
fineKill="强制极简",
b2bKill="强制B2B",
lockout="锁定在外时失败",
easyFresh="普通刷新锁延",
deepDrop="深降",
bone="骨块",
@@ -707,6 +709,9 @@ return{
['master_final']= {"大师", "终点", "究极20G:无法触及的终点"},
['master_ph']= {"大师", "虚幻", "虚幻20G:"},
['master_ex']= {"宗师", "EX", "成为方块大师"},
['strategy_e']= {"策略堆叠", "简单", "20G堆叠中速决策练习"},
['strategy_h']= {"策略堆叠", "困难", "20G堆叠快速决策练习"},
['strategy_u']= {"策略堆叠", "极限", "20G堆叠极速决策练习"},
['blind_e']= {"隐形", "半隐", "不强大脑"},
['blind_n']= {"隐形", "全隐", "挺强大脑"},
['blind_h']= {"隐形", "瞬隐", "很强大脑"},
@@ -812,7 +817,7 @@ return{
"别看攻击效率不高,其实消四还是很强的",
"别问游戏名怎么取的,问就是随便想的",
"不同人打40行最合适的方式不一样s1w/63/散消/s2w……",
"不同游戏(甚至不同模式)中不同战术的能力都不一样,并没有绝对的强弱之分",
"不同游戏(甚至不同模式)中不同战术的强度都不一样,并不能简单的按顺序排名",
"不希望激烈的零和竞争充斥整个游戏",
"不要悲伤,不要心急",
"不要大力拍打或滑动哦",
@@ -828,8 +833,8 @@ return{
"触发游戏报错后日志文件会越来越大不过顶多几百K",
"触摸板打osu也很好",
"凑数tip什么时候能站起来",
"打对战前请确认自己有一定的水平,不然会毫无游戏体验的",
"打好块跟学习一样没有捷径,多练。",
"打网络对战前请确认自己有一定的水平,不然会毫无游戏体验的",
"大概还是有人会看tip的",
"大量使用开局定式的数据是不准的",
"大陆的方块社区起步晚,所以世界级高手很少……下一个会是你吗?",
@@ -841,7 +846,7 @@ return{
"电脑游玩自带按键显示~",
"对编程有真·兴趣推荐Lua安装无脑 语法简单 执行速度快 远离枯燥学校编程(雾",
"对战模式跟单机模式有本质区别timing等能力需要专门练习",
"多年小游戏玩家表示痛恨假加载,启动动画主要是在加载资源",
"多年小游戏玩家表示痛恨故意拖时间的假加载",
"多hold现代块又回来了",
"俄罗斯方块完全可以作为电竞游戏",
"发现有个“隐形”皮肤了吗",
@@ -849,14 +854,14 @@ return{
"方块不能吃",
"方块不是你生活的全部,适当走出去看看",
"方块教会我们,合群了就会消失,……",
"方块默认出现的方向都是重心在下哦",
"方块默认出现的方向都是重心在下哦(如果你没乱动设置",
"方块能吃吗",
"分数一般只是好看的没有实际用途,建议只关心关卡要求",
"服务器随时爆炸",
"感觉明明按键了但是没反应?你真的按到了吗?",
"感觉自己速度到上限了试着把das调低一点",
"感谢群友帮忙想tip",
"感谢Orzmic为这个tip显示框提出意见",
"感谢Orzmic为这个tip框提供修改意见",
"感谢Phigros提供部分tip模板",
"刚接触方块的话多玩玩就行40行两分钟以外没啥好针对性练习的",
"刚开始练全隐形可以尽量堆平,留一列消四",
@@ -897,8 +902,9 @@ return{
"快去打一把100%极简看看会怎样",
"锟斤拷锟斤拷锟斤拷",
"来学编程,好玩的",
"老牌益智游戏了属于是",
"连续pc有大量知识要背不过背出来后随手10连pc不是问题",
"六连块总共有……?那不重要,不会做的",
"六连块总共有……?那不重要,不会做的(大概",
"论如何正确使用Unicode私用区定制字体",
"卖弱和谦虚不是一回事,发言前三思呀",
"卖弱禁言警告",

View File

@@ -119,6 +119,9 @@ return{
['master_final']= {"大师", "终点", "究极20G:无法触及的终点"},
['master_ph']= {"大师", "虚幻", "虚幻20G:???"},
['master_ex']= {"宗师", "EX", "成为方块大师"},
['strategy_e']= {"策略堆叠", "简单", "20G堆叠中速决策练习"},
['strategy_h']= {"策略堆叠", "困难", "20G堆叠快速决策练习"},
['strategy_u']= {"策略堆叠", "极限", "20G堆叠极速决策练习"},
['blind_e']= {"隐形", "半隐", "不强大脑"},
['blind_n']= {"隐形", "全隐", "挺强大脑"},
['blind_h']= {"隐形", "瞬隐", "很强大脑"},

View File

@@ -22,7 +22,7 @@ return{
cmb={nil,"1连击","2连击","3连击","4连击","5连击","6连击","7连击","8连击","9连击","10连击","11连击","12连击","13连击","14连击","15连击","16连击","17连击","18连击","19连击","巨大连击"},
spin="-旋转",
clear={"单身的","双重的","三倍的","技术崩溃","五角碰撞","六面体碎裂","七冲击","八度碰撞","非碰撞","十点崩溃","不祥","十二面体碰撞","三十年代的崩溃","十四烷","十五烷碰撞","十六进制","七烷酸","十八进制崩溃","非十进制碰撞","超级崩溃","冒牌货"},
cleared="",
cleared="$1 线",
mini="迷你",b2b="背靠背",b3b="背靠背靠背",
PC="清清楚楚",HPC="半完美清晰",
replaying="[重播]",
@@ -192,8 +192,9 @@ return{
"确保只从官方渠道获得游戏,",
"因为如果你在别处找到它,我们无法确保你的安全",
"作者不对任何修改负责",
"虽然游戏是免费的,但我们会感谢捐赠.",
"如果您无法同时使用我们的聊天支付和阿里支付,你可以去我们的P\97\116\114\111\110页面(连接到四联词典)支持我们!",
FNSF and"/"or"虽然游戏是免费的,但我们会感谢捐赠.",
FNSF and"/"or"如果您无法同时使用我们的聊天支付和阿里支付,",
FNSF and"/"or"你可以去我们的P\97\116\114\111\110页面(连接到四联词典)支持我们!",
},
staff={
"作者:Z先生 邮箱:1046101471@qq.com",
@@ -300,6 +301,7 @@ return{
ospin="O型自旋",
fineKill="100%精巧",
b2bKill="没有背靠背中断",
lockout="锁定时失败",
easyFresh="正常锁复位",
deepDrop="深滴",
bone="骨块",
@@ -366,7 +368,7 @@ return{
score="分数弹出",
bufferWarn="缓冲区警报",
showSpike="尖峰计数器",
nextPos="下次预览",
nextPos="繁殖预览",
highCam="屏幕滚动",
warn="危险警报",
@@ -513,6 +515,7 @@ return{
ospin="O型自旋",
fineKill="100%精巧",
b2bKill="没有背靠背中断",
lockout="锁定时失败",
easyFresh="正常锁复位",
deepDrop="深滴",
bone="骨块",
@@ -702,6 +705,9 @@ return{
['master_final']= {"主人", "最终", "20G及以上"},
['master_ph']= {"主人", "幻觉", ""},
['master_ex']= {"大师", "额外的", "比瞬间还短的永恒"},
['strategy_e']= {"策略堆叠", "简单", "20G堆叠中速决策练习"},
['strategy_h']= {"策略堆叠", "困难", "20G堆叠快速决策练习"},
['strategy_u']= {"策略堆叠", "极限", "20G堆叠极速决策练习"},
['blind_e']= {"看不见的", "一半", "对于新手来说"},
['blind_n']= {"看不见的", "全部", "对于中间产品"},
['blind_h']= {"看不见的", "突然", "对于有经验的人"},

View File

@@ -195,7 +195,7 @@ return{
"從其他渠道獲得遊戲皆有被修改/加入廣告/植入病毒的風險,程序只申請了振動&網路權限!",
"若由於被修改的本遊戲產生的各種損失作者概不負責(我怎麼負責啊跟我有什麼關係)",
FNSF and"/"or"請從正規途徑獲得最新版,遊戲現為免費,不過有讚賞當然感謝啦~ 記得備註用戶名,方便記錄!",
FNSF and"/"or"如果你不使用微信或支付寶你可以前往我們的P\97\116\114\111\110頁面來贊助我們!"
FNSF and"/"or"如果你不使用微信或支付寶你可以前往我們的P\97\116\114\101\111\110頁面來贊助我們!"
},
staff={
"作者:MrZ 電郵:1046101471@qq.com",
@@ -209,7 +209,7 @@ return{
"翻譯: User670MattMayugaMizuMr.FaqScFC₂₉H₂₅N₃O₅",
"",
"特別感謝:",
"FlyzBig_TrueNOT-A-ROBOT思竣yuhao7370",
"FlyzBig_TrueNOT_A_ROBOT思竣yuhao7370",
"FarterTeatube蕴空之灵T9972[All test staff]",
},
used=[[
@@ -302,6 +302,7 @@ return{
ospin="O-spin",
fineKill="100% finesse",
b2bKill="強制B2B",
lockout="鎖定在外時失敗",
easyFresh="普通刷新鎖延",
deepDrop="深降",
bone="骨塊",
@@ -514,6 +515,7 @@ return{
ospin="O-spin",
fineKill="強制finesse",
b2bKill="強制B2B",
lockout="鎖定在外時失敗",
easyFresh="普通刷新鎖延",
deepDrop="深降",
bone="骨塊",
@@ -706,6 +708,9 @@ return{
['master_final']= {"大師", "究極", "究極20G:無法觸及的終點"},
['master_ph']= {"大師", "虛幻", "虛幻20G:"},
['master_ex']= {"宗師", "EX", "成為方塊大師"},
['strategy_e']= {"策略堆疊", "簡單", "20G堆疊中速決策練習"},
['strategy_h']= {"策略堆疊", "困難", "20G堆疊快速決策練習"},
['strategy_u']= {"策略堆疊", "極限", "20G堆疊極速決策練習"},
['blind_e']= {"隱形", "半隱", "不強大腦"},
['blind_n']= {"隱形", "全隱", "挺強大腦"},
['blind_h']= {"隱形", "瞬隱", "很強大腦"},

View File

@@ -18,7 +18,7 @@ return{
{name='dig_400l', x=-800, y=-200, 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','blind_e','classic_e','survivor_e','bigbang','zen'}},
{name='marathon_h', x=0, y=-800, size=50,shape=1,icon="marathon", unlock={'master_n'}},
{name='marathon_h', x=0, y=-800, size=50,shape=1,icon="marathon", unlock={'master_n','strategy_e'}},
{name='solo_e', x=-600, y=-1000, size=40,shape=1,icon="solo", unlock={'solo_n'}},
{name='solo_n', x=-800, y=-1000, size=40,shape=1,icon="solo", unlock={'solo_h'}},
@@ -39,13 +39,17 @@ return{
{name='round_l', x=-1200, y=-800, size=40,shape=1,icon="round", unlock={'round_u'}},
{name='round_u', x=-1400, y=-800, size=40,shape=1,icon="round"},
{name='master_n', x=0, y=-1000, size=40,shape=1,icon="master", unlock={'master_h'}},
{name='master_h', x=0, y=-1200, size=40,shape=3,icon="master", unlock={'master_final','master_ex','master_ph','master_m'}},
{name='master_n', x=0, y=-1000, size=40,shape=1,icon="master", unlock={'master_h','strategy_h'}},
{name='master_h', x=0, y=-1200, size=40,shape=3,icon="master", unlock={'master_final','master_ex','master_ph','master_m','strategy_u'}},
{name='master_m', x=150, y=-1320, size=30,shape=3,icon="master"},
{name='master_final', x=0, y=-1600, size=40,shape=2,icon="master"},
{name='master_ph', x=-150, y=-1500, size=40,shape=2,icon="master"},
{name='master_ex', x=150, y=-1500, size=40,shape=2,icon="master_ex"},
{name='strategy_e', x=-150, y=-1030, size=40,shape=3,icon="master"},
{name='strategy_h', x=-200, y=-1160, size=35,shape=3,icon="master"},
{name='strategy_u', x=-250, y=-1290, size=30,shape=3,icon="master"},
{name='blind_e', x=150, y=-700, size=40,shape=1,icon="hidden", unlock={'blind_n'}},
{name='blind_n', x=150, y=-800, size=40,shape=1,icon="hidden", unlock={'blind_h'}},
{name='blind_h', x=150, y=-900, size=35,shape=1,icon="hidden", unlock={'blind_l'}},
@@ -53,9 +57,9 @@ return{
{name='blind_u', x=150, y=-1100, size=30,shape=3,icon="hidden", unlock={'blind_wtf'}},
{name='blind_wtf', x=150, y=-1200, size=25,shape=2,icon="hidden"},
{name='classic_e', x=-170, y=-850, size=40,shape=1,icon="classic", unlock={'classic_h'}},
{name='classic_h', x=-180, y=-1000, size=35,shape=2,icon="classic", unlock={'classic_u'}},
{name='classic_u', x=-190, y=-1150, size=30,shape=2,icon="classic"},
{name='classic_e', x=-200, y=-850, size=40,shape=1,icon="classic", unlock={'classic_h'}},
{name='classic_h', x=-300, y=-950, size=35,shape=2,icon="classic", unlock={'classic_u'}},
{name='classic_u', x=-400, y=-1050, size=30,shape=2,icon="classic"},
{name='survivor_e', x=300, y=-600, size=40,shape=1,icon="survivor", unlock={'survivor_n'}},
{name='survivor_n', x=500, y=-600, size=40,shape=1,icon="survivor", unlock={'survivor_h','attacker_h','defender_n','dig_h'}},

View File

@@ -11,7 +11,7 @@ return{
mStr(P.stat.atk,63,280)
mText(TEXTOBJ.atk,63,350)
end,
bg='blackhole',bgm='echo',
bg='blockhole',bgm='echo',
},
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end,

View File

@@ -11,7 +11,7 @@ return{
mStr(P.stat.atk,63,280)
mText(TEXTOBJ.atk,63,350)
end,
bg='blackhole',bgm='echo',
bg='blockhole',bgm='echo',
},
score=function(P)return{math.min(math.floor(P.stat.atk),100),P.stat.time}end,
scoreDisp=function(D)return D[1].." Attack "..STRING.time(D[2])end,

View File

@@ -1,18 +1,23 @@
return{
env={
drop=1e99,lock=1e99,
das=8,arr=1,
drop=30,lock=30,
holdCount=0,
task=function(P)
while not P.control do YIELD()end
P:pressKey(6)
P:lose()
end,
bg='bg1',bgm='new era',
eventSet='bigbang',
bg='blockhole',bgm='peak',
},
score=function(P)return{P.modeData.event,P.stat.finesseRate*.2/P.stat.piece}end,
scoreDisp=function(D)return("%d Stage %.2f%%"):format(D[1],D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]>b[2]end,
getRank=function()
return 1
score=function(P)return{P.modeData.stage,P.stat.time}end,
scoreDisp=function(D)return D[1].." Stage "..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)
do return 1 end
local L=P.modeData.stage
return
L>=100 and 5 or
L>=70 and 4 or
L>=40 and 3 or
L>=20 and 2 or
L>=10 and 1 or
L>=3 and 0
end,
}

View File

@@ -4,7 +4,7 @@ return{
smooth=false,
face={0,0,2,2,2,0,0},
eventSet='classic_e',
bg='rgb',bgm='1989',
bg='rgb',bgm='1980s',
},
slowMark=true,
score=function(P)return{P.stat.score,P.stat.row}end,

View File

@@ -4,7 +4,7 @@ return{
smooth=false,
face={0,0,2,2,2,0,0},
eventSet='classic_h',
bg='rgb',bgm='1989',
bg='rgb',bgm='1980s',
},
slowMark=true,
score=function(P)return{P.stat.score,P.stat.row}end,

View File

@@ -4,7 +4,7 @@ return{
smooth=false,
face={0,0,2,2,2,0,0},
eventSet='classic_u',
bg='rgb',bgm='1989',
bg='rgb',bgm='1980s',
},
slowMark=true,
score=function(P)return{P.stat.score,P.stat.row}end,

View File

@@ -8,7 +8,7 @@ local function marginTask(P)
end
return{
env={
bg={'bg1','bg2','blackhole','blockfall','blockrain','blockspace','cubes','fan','flink','glow','matrix','rainbow','rainbow2','tunnel'},
bg={'bg1','bg2','blockhole','blockfall','blockrain','blockspace','cubes','fan','flink','glow','matrix','rainbow','rainbow2','tunnel'},
bgm={'battle','beat5th','cruelty','distortion','echo','far','final','here','hope','memory','moonbeam','push','rectification','secret7th remix','secret7th','secret8th remix','secret8th','shift','shining terminal','storm','super7th','there','truth','vapor','waterfall'},
},
load=function()

View File

@@ -4,9 +4,7 @@ return{
holdCount=0,
drop=60,lock=60,
fall=20,
sequence='none',
freshLimit=15,
RS="SRS",
eventSet='pctrain_l',
bg='rgb',bgm='memory',
},

View File

@@ -4,8 +4,6 @@ return{
holdCount=0,
drop=120,lock=180,
fall=20,
sequence='none',
RS="SRS",
eventSet='pctrain_n',
bg='rgb',bgm='memory',
},
@@ -15,7 +13,7 @@ return{
getRank=function(P)
local L=P.stat.pc
return
L>=62 and 5 or
L>=60 and 5 or
L>=42 and 4 or
L>=26 and 3 or
L>=18 and 2 or

View File

@@ -2,6 +2,7 @@ return{
env={
drop=60,lock=60,
wait=0,fall=50,
hang=15,
garbageSpeed=30,
seqData={1,2,3,4,5,6,7},
eventSet='stack_e',

View File

@@ -2,6 +2,7 @@ return{
env={
drop=60,lock=60,
wait=0,fall=50,
hang=15,
garbageSpeed=30,
seqData={8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25},
eventSet='stack_u',

View File

@@ -0,0 +1,21 @@
return{
env={
sequence="bagES",
eventSet='strategy_e',
bg='bg2',bgm='push',
},
slowMark=true,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..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)
local L=P.stat.row
return
L>=200 and 5 or
L>=170 and 4 or
L>=150 and 3 or
L>=120 and 2 or
L>=60 and 1 or
L>=26 and 0
end,
}

View File

@@ -0,0 +1,21 @@
return{
env={
sequence="bagES",
eventSet='strategy_h',
bg='bg2',bgm='secret8th',
},
slowMark=true,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..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)
local L=P.stat.row
return
L>=200 and 5 or
L>=160 and 4 or
L>=120 and 3 or
L>=70 and 2 or
L>=40 and 1 or
L>=26 and 0
end,
}

View File

@@ -0,0 +1,21 @@
return{
env={
sequence="bagES",
eventSet='strategy_u',
bg='bg2',bgm='secret7th',
},
slowMark=true,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..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)
local L=P.stat.row
return
L>=200 and 5 or
L>=150 and 4 or
L>=80 and 3 or
L>=40 and 2 or
L>=20 and 1 or
L>=26 and 0
end,
}

View File

@@ -119,6 +119,6 @@ return{
{font=25,name="[w*o]"},
{font=25,name="蚂蚁"},
{font=25,name="小丘"},
{font=25,name="[*)]"},
{font=25,name="Techtris"},
{font=25,name="费尔特林"},
}

View File

@@ -360,6 +360,18 @@ local function _drawNextPreview(B,fieldH,fieldBeneath)
end
end end
end
local function _drawHoldPreview(B,fieldH,fieldBeneath)
gc_setColor(1,1,1,.3)
local y=int(fieldH+1-modf(B.RS.centerPos[B.id][B.dir][1]))+ceil(fieldBeneath/30)+.14
B=B.bk
local x=int(6-#B[1]*.5)
local cross=TEXTURE.puzzleMark[-1]
for i=1,#B do for j=1,#B[1]do
if B[i][j]then
gc_draw(cross,30*(x+j-2),30*(1-y-i))
end
end end
end
local function _drawBuffer(atkBuffer,bufferWarn,atkBufferSum1,atkBufferSum)
local h=0
for i=1,#atkBuffer do
@@ -807,8 +819,9 @@ function draw.norm(P,repMode)
end
--Draw next preview
if ENV.nextPos and P.nextQueue[1]then
_drawNextPreview(P.nextQueue[1],ENV.fieldH,P.fieldBeneath)
if ENV.nextPos then
if P.nextQueue[1]then _drawNextPreview(P.nextQueue[1],ENV.fieldH,P.fieldBeneath)end
if P.holdQueue[1]then _drawHoldPreview(P.holdQueue[1],ENV.fieldH,P.fieldBeneath)end
end
--Draw AI's drop destination

View File

@@ -31,6 +31,7 @@ return{
drop=60,lock=60,
wait=0,fall=0,
bone=false,
lockout=false,
fieldH=20,heightLimit=1e99,
nextCount=6,nextStartPos=1,
holdMode='hold',holdCount=1,

View File

@@ -387,16 +387,8 @@ function Player:garbageRise(color,amount,line)--Release n-lines garbage to field
#self.field>self.gameEnv.heightLimit
)
then
self:lock()
self:lose()
end
if #self.field>self.gameEnv.heightLimit then
self:_triggerEvent('hook_die')
if #self.field>self.gameEnv.heightLimit then
self:lose()
end
end
end
local invList={2,1,4,3,5,6,7}
@@ -418,8 +410,10 @@ function Player:pushLineList(L,mir)--Push some lines to field
ins(self.visTime,1,FREEROW.new(20))
end
self.fieldBeneath=self.fieldBeneath+30*l
self.curY=self.curY+l
self.ghoY=self.ghoY+l
if self.cur then
self.curY=self.curY+l
self.ghoY=self.ghoY+l
end
self:freshBlock('push')
end
function Player:pushNextList(L,mir)--Push some nexts to nextQueue
@@ -1643,7 +1637,7 @@ do
end
end
--Prevent sudden death if hang>0
--Prevent sudden death if hang>0
if ENV.hang>ENV.wait and self.nextQueue[1]then
local B=self.nextQueue[1]
if self:ifoverlap(B.bk,int(6-#B.bk[1]*.5),int(ENV.fieldH+1-modf(B.RS.centerPos[B.id][B.dir][1]))+ceil(self.fieldBeneath/30))then
@@ -1659,7 +1653,7 @@ do
end
--Check height limit
if cc==0 and #self.field>ENV.heightLimit then
if cc==0 and(#self.field>ENV.heightLimit or ENV.lockout and CY>ENV.fieldH)then
finish='lose'
end

View File

@@ -979,7 +979,7 @@ function scene.wheelMoved(_,y)
end
function scene.keyDown(key)
if key=="return"then
if key=="return" or key=="kpenter"then
local input=STRING.trim(inputBox:getText())
if input==""then return end

View File

@@ -181,7 +181,7 @@ function scene.draw()
gc.translate(0,WIDGET.scrollPos)
end
scene.widgetScrollHeight=400
scene.widgetScrollHeight=450
scene.widgetList={
WIDGET.newText{name='title', x=520,y=15,font=70,align='R'},
@@ -225,12 +225,13 @@ scene.widgetList={
WIDGET.newSelector{name='eventSet', x=1050,y=740,w=340,color='H',list=sList.eventSet,disp=CUSval('eventSet'),code=CUSsto('eventSet')},
--Special rules
WIDGET.newSwitch{name='ospin', x=850, y=810,lim=210,disp=CUSval('ospin'), code=CUSrev('ospin')},
WIDGET.newSwitch{name='fineKill', x=850, y=870,lim=210,disp=CUSval('fineKill'), code=CUSrev('fineKill')},
WIDGET.newSwitch{name='b2bKill', x=850, y=930,lim=210,disp=CUSval('b2bKill'), code=CUSrev('b2bKill')},
WIDGET.newSwitch{name='easyFresh', x=1170,y=810,lim=250,disp=CUSval('easyFresh'),code=CUSrev('easyFresh')},
WIDGET.newSwitch{name='deepDrop', x=1170,y=870,lim=250,disp=CUSval('deepDrop'), code=CUSrev('deepDrop')},
WIDGET.newSwitch{name='bone', x=1170,y=930,lim=250,disp=CUSval('bone'), code=CUSrev('bone')},
WIDGET.newSwitch{name='ospin', x=850, y=820 ,lim=210,disp=CUSval('ospin'), code=CUSrev('ospin')},
WIDGET.newSwitch{name='fineKill', x=850, y=880 ,lim=210,disp=CUSval('fineKill'), code=CUSrev('fineKill')},
WIDGET.newSwitch{name='b2bKill', x=850, y=940 ,lim=210,disp=CUSval('b2bKill'), code=CUSrev('b2bKill')},
WIDGET.newSwitch{name='lockout', x=850, y=1000,lim=210,disp=CUSval('lockout'), code=CUSrev('lockout')},
WIDGET.newSwitch{name='easyFresh', x=1170,y=820 ,lim=250,disp=CUSval('easyFresh'),code=CUSrev('easyFresh')},
WIDGET.newSwitch{name='deepDrop', x=1170,y=880 ,lim=250,disp=CUSval('deepDrop'), code=CUSrev('deepDrop')},
WIDGET.newSwitch{name='bone', x=1170,y=940 ,lim=250,disp=CUSval('bone'), code=CUSrev('bone')},
--Next & Hold
WIDGET.newSelector{name='holdMode', x=310, y=890, w=300,color='lY',list=sList.holdMode,disp=CUSval('holdMode'),code=CUSsto('holdMode')},
@@ -240,8 +241,8 @@ scene.widgetList={
WIDGET.newSwitch{name='phyHold', x=560, y=1030,lim=200, disp=CUSval('phyHold'),code=CUSrev('phyHold'),hideF=function()return CUSTOMENV.holdCount==0 end},
--BG & BGM
WIDGET.newSelector{name='bg', x=840, y=1030,w=250,color='Y',list=BG.getList(),disp=CUSval('bg'),code=function(i)CUSTOMENV.bg=i BG.set(i)end},
WIDGET.newSelector{name='bgm', x=1120,y=1030,w=250,color='Y',list=BGM.getList(),disp=CUSval('bgm'),code=function(i)CUSTOMENV.bgm=i BGM.play(i)end},
WIDGET.newSelector{name='bg', x=840, y=1090,w=250,color='Y',list=BG.getList(),disp=CUSval('bg'),code=function(i)CUSTOMENV.bg=i BG.set(i)end},
WIDGET.newSelector{name='bgm', x=1120,y=1090,w=250,color='Y',list=BGM.getList(),disp=CUSval('bgm'),code=function(i)CUSTOMENV.bgm=i BGM.play(i)end},
}
return scene

View File

@@ -32,7 +32,7 @@ local typeColor={
local function _filter(word_org)
local word=word_org
word=word:gsub("[Tt]etris",CHAR.zChan.thinking)
if FNSF then word=word:gsub("[Pp]\97\116\114\111\110",CHAR.zChan.qualified)end
if FNSF then word=word:gsub("[Pp]\97\116\114\101\111\110",CHAR.zChan.qualified)end
return word,word_org
end
local function _scanDict(D)

View File

@@ -21,7 +21,7 @@ local author={
["jazz nihilism"]="Trebor",
["race remix"]="柒栎流星",
["sakura"]="ZUN & C₂₉H₂₅N₃O₅",
["1989"]="C₂₉H₂₅N₃O₅",
["1980s"]="C₂₉H₂₅N₃O₅",
}
local scene={}

View File

@@ -94,12 +94,13 @@ scene.widgetList={
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
--Special rules
WIDGET.newSwitch{name='ospin', x=850, y=750,lim=210,disp=ROOMval('ospin'), code=ROOMrev('ospin')},
WIDGET.newSwitch{name='fineKill', x=850, y=840,lim=210,disp=ROOMval('fineKill'), code=ROOMrev('fineKill')},
WIDGET.newSwitch{name='b2bKill', x=850, y=930,lim=210,disp=ROOMval('b2bKill'), code=ROOMrev('b2bKill')},
WIDGET.newSwitch{name='easyFresh', x=1170,y=750,lim=250,disp=ROOMval('easyFresh'),code=ROOMrev('easyFresh')},
WIDGET.newSwitch{name='deepDrop', x=1170,y=840,lim=250,disp=ROOMval('deepDrop'), code=ROOMrev('deepDrop')},
WIDGET.newSwitch{name='bone', x=1170,y=930,lim=250,disp=ROOMval('bone'), code=ROOMrev('bone')},
WIDGET.newSwitch{name='ospin', x=850, y=760 ,lim=210,disp=ROOMval('ospin'), code=ROOMrev('ospin')},
WIDGET.newSwitch{name='fineKill', x=850, y=850 ,lim=210,disp=ROOMval('fineKill'), code=ROOMrev('fineKill')},
WIDGET.newSwitch{name='b2bKill', x=850, y=940 ,lim=210,disp=ROOMval('b2bKill'), code=ROOMrev('b2bKill')},
WIDGET.newSwitch{name='lockout', x=850, y=1030,lim=210,disp=ROOMval('lockout'), code=ROOMval('lockout')},
WIDGET.newSwitch{name='easyFresh', x=1170,y=760 ,lim=250,disp=ROOMval('easyFresh'),code=ROOMrev('easyFresh')},
WIDGET.newSwitch{name='deepDrop', x=1170,y=850 ,lim=250,disp=ROOMval('deepDrop'), code=ROOMrev('deepDrop')},
WIDGET.newSwitch{name='bone', x=1170,y=940 ,lim=250,disp=ROOMval('bone'), code=ROOMrev('bone')},
--Rule set
WIDGET.newSelector{name='eventSet', x=310,y=880,w=360,color='H',list=sList.eventSet,disp=ROOMval('eventSet'),code=ROOMsto('eventSet')},

View File

@@ -79,15 +79,16 @@ function scene.draw()
end
gc.replaceTransform(SCR.xOy)
gc.setColor(COLOR.Z)
local T=40*math.min(time,45)
gc.setColor(.97,.97,.97,45-math.min(time,45))
local L=text.staff
setFont(40)
for i=1,#L do
mStr(L[i],640,800+70*i-T)
end
gc.setColor(1,1,1)
mDraw(TEXTURE.title_color,640,800-T,nil,.6)
mDraw(TEXTURE.title_color,640,2160-T,nil,.6)
mDraw(TEXTURE.title,640,2160-T,nil,.6)
if time>50 then
gc.print("CLICK ME →",50,550,-.5)
end

View File

@@ -11,6 +11,22 @@ return[=[
可调攻击系统; 更多消除方式; 可调场地宽度; 新联网游戏场景切换逻辑
工程编译到字节码; task-Z(新AI); 自适应UI; 多方块
0.17.0: 硬着陆 Hard Landing
新增:
新模式:大爆炸
新模式:策略堆叠(原版设计来自Cambridge游戏, by NOT_A_ROBOT)
添加lockout判负规则(默认关闭)
改动:
TRS的S/Z添加四个踢墙防止在一些地方卡死
生成位置预览开启后hold的生成位置也可见 #453
优化pc训练模式体验,添加胜利条件,不再无尽
堆积模式添加15帧的窒息延迟 #465
代码:
bgm模块可限制最大加载数不容易达到上限导致没声 #447
修复:
机翻语言超级消除无行数显示 #462
竞速-效率左侧信息颜色问题
0.16.5: 新世界 New World
新增:
新模式:竞速-效率
@@ -18,10 +34,10 @@ return[=[
新增场地抖动特效
新增繁中语言,新语言设置菜单布局
新BGM:peak(暂未使用)
新BGM:1989(用于经典模式,by C₂₉H₂₅N₃O₅)
新BGM:1980s(用于经典模式, by C₂₉H₂₅N₃O₅)
删除节奏模式(之后会有全新音游模式)
音乐室输入首字母自动跳转
新增窒息延迟(by Not-A-Normal-Bot) #459
新增窒息延迟(by NOT_A_ROBOT) #459
移除模式标题的颜色
改动:
移动音效改为触地音效,在方块因重力或旋转触地时也会播放
@@ -84,16 +100,16 @@ return[=[
新增:
新系统:规则包,自定义游戏和联网对战可以有更多玩法了
新系统:音效包(暂无其他可选,正在制作)
新模式:更多难度的经典模式(by not-a-normal-bot) #285
新模式:更多难度的经典模式(by NOT_A_ROBOT) #285
新模式:大师-M
新序列模式:bagES(easy start)开局第一个不会出难受的块
新机制:逻辑追帧(单机可关闭),联网强制启用防止低帧率设备影响其他玩家游戏体验
新旋转系统:ARS_Z,简化复杂的测试逻辑,统一使用{右,左}(i块为{上,上2},五连块风格模仿)
新旋转系统:SRS_X,基于SRS,I块和除了PQ的非四连块使用TRS的表
新语音包:miku(by vocaloidvictory)
新BGM:Jazz nihilism(用于节日主题,by Trebor)
新BGM:Race remix(用于大师-ph,by 柒栎流星)
新BGM:Sakura(用于限时打分,by C₂₉H₂₅N₃O₅)
新BGM:Jazz nihilism(用于节日主题, by Trebor)
新BGM:Race remix(用于大师-ph, by 柒栎流星)
新BGM:Sakura(用于限时打分, by C₂₉H₂₅N₃O₅)
新BGM:Null(用于节日主题)
新音效:单次消5/6行
新机制:swap(hold的另一种实现)
@@ -267,7 +283,7 @@ return[=[
0.15.6: 强化装甲 Reinforced Armor
新增:
新BGM:Nil(用于主菜单)
新BGM:Secret7th Remix(用于master-ultimate,by 柒栎流星)
新BGM:Secret7th Remix(用于master-ultimate, by 柒栎流星)
新模式:Attack竞速
master-ultimate模式新增500~1000
支持调整录像回放速度和逐帧播放
@@ -540,8 +556,8 @@ return[=[
0.14.5: 晨 Morn
新增:
新增BGM:Empty(用于节日主题,by ERM)
新增BGM:Battle(用于单挑L/U难度,by Aether)
新增BGM:Empty(用于节日主题, by ERM)
新增BGM:Battle(用于单挑L/U难度, by Aether)
增加玩家个人信息显示框
音乐室显示音乐作者
新增开5人房的按钮

View File

@@ -1,7 +1,7 @@
return{
["apkCode"]=401,
["code"]=1605,
["string"]="V0.16.5",
["room"]="ver A-0",
["name"]="新世界 New World",
["apkCode"]=405,
["code"]=1700,
["string"]="V0.17.0",
["room"]="ver A-1",
["name"]="硬着陆 Hard Landing",
}