Compare commits
46 Commits
v0.16.5
...
pre0.17.0-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7f9c9248ce | ||
|
|
9c1db48804 | ||
|
|
0628830f0c | ||
|
|
9436f2f5fb | ||
|
|
c5e1b5617f | ||
|
|
298c417aa3 | ||
|
|
fc74831700 | ||
|
|
d9db55de44 | ||
|
|
3fd205e8c2 | ||
|
|
5cb828fb92 | ||
|
|
5f7a3fd53f | ||
|
|
8e3e598753 | ||
|
|
2a0a0f60f8 | ||
|
|
6b7d1fdf9f | ||
|
|
65199a40f7 | ||
|
|
f9082a8800 | ||
|
|
1670c6e7d6 | ||
|
|
ff2073ed4d | ||
|
|
f14aaac635 | ||
|
|
c709fa622f | ||
|
|
c752556bf3 | ||
|
|
e7d9703fcc | ||
|
|
1ed52a84b0 | ||
|
|
4fdb278751 | ||
|
|
8318803923 | ||
|
|
42de7e3676 | ||
|
|
3efa646ee3 | ||
|
|
b414c2ab42 | ||
|
|
205dea3db7 | ||
|
|
6cac688555 | ||
|
|
09b1b08c1e | ||
|
|
b61a1270e9 | ||
|
|
b85cee7e1f | ||
|
|
8e674e3e29 | ||
|
|
aa2812c874 | ||
|
|
6f282431c4 | ||
|
|
470e54cdd0 | ||
|
|
da3ef1c2a6 | ||
|
|
9efe0e62d5 | ||
|
|
7038f81b46 | ||
|
|
de972a60df | ||
|
|
6a87787d6f | ||
|
|
6dc9a4b507 | ||
|
|
5b7c888d57 | ||
|
|
a1f761b83e | ||
|
|
c40a6bfaa0 |
7
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_1.md
vendored
7
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_1.md
vendored
@@ -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*)
|
||||
7
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_2.md
vendored
7
.github/ISSUE_TEMPLATE/ISSUE_TEMPLATE_2.md
vendored
@@ -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*):
|
||||
|
||||
BIN
.github/build/macOS/backgroundImage.tiff
vendored
BIN
.github/build/macOS/backgroundImage.tiff
vendored
Binary file not shown.
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
41
legals.md
41
legals.md
@@ -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.
|
||||
|
||||
1
main.lua
1
main.lua
@@ -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_))
|
||||
|
||||
@@ -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'},
|
||||
|
||||
@@ -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)
|
||||
@@ -20,6 +20,7 @@ return{
|
||||
|
||||
--Rule
|
||||
sequence='bag',
|
||||
lockout=false,
|
||||
fieldH=20,
|
||||
heightLimit=1e99,
|
||||
bufferLimit=1e99,
|
||||
|
||||
35
parts/eventsets/bigbang.lua
Normal file
35
parts/eventsets/bigbang.lua
Normal 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
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
30
parts/eventsets/strategy_e.lua
Normal file
30
parts/eventsets/strategy_e.lua
Normal 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
|
||||
}
|
||||
30
parts/eventsets/strategy_h.lua
Normal file
30
parts/eventsets/strategy_h.lua
Normal 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
|
||||
}
|
||||
30
parts/eventsets/strategy_u.lua
Normal file
30
parts/eventsets/strategy_u.lua
Normal 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
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -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-极限,开局就是高速20G,500和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 TSD(T2),指不用固定的堆叠方式而是随机应变完成20TSD。比用LST或者垃圾分类完成的20 TSD的含金量高不少",
|
||||
},
|
||||
{"20G",
|
||||
"高重力 20g",
|
||||
"term",
|
||||
"现代方块的最高下落速度,表观就是方块瞬间到底,不存在中间的下落过程,可能会让方块无法跨越壕沟/从山谷爬出。",
|
||||
"自由发挥的意思,常用于freestyle TSD(T2),指不用固定的堆叠方式而是随机应变完成20TSD。比用LST或者垃圾分类完成的20 TSD的难度要大,成绩也更能代表实战水平",
|
||||
},
|
||||
{"死亡判定",
|
||||
"死亡判定 die death siwang",
|
||||
"term",
|
||||
"现代方块普遍使用的死亡判定:\n1. 新出现的方块和场地方块有重叠(窒息,Block Out)(c4w比s4w强的原因,因为被打进18行都不会窒息);\n2. 方块锁定时完全在场地的外面(Lock Out);\n3. 场地内现存方块总高度大于40。(超高,Top Out)\n\n注:本游戏使用的死亡判定不包含上述的第二条和第三条。",
|
||||
"现代方块普遍使用的死亡判定:\n1. 新出现的方块和场地方块有重叠(窒息,Block Out)(c4w比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(默认60fps),故G是一个很大的单位,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(老游戏,现在基本没人玩)",
|
||||
},
|
||||
|
||||
@@ -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"},
|
||||
|
||||
@@ -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"},
|
||||
|
||||
@@ -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."},
|
||||
|
||||
@@ -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."},
|
||||
|
||||
@@ -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="[]",
|
||||
|
||||
@@ -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']= {"隐形", "瞬隐", "和上一个一样"},
|
||||
|
||||
@@ -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{
|
||||
"翻译: User670,MattMayuga,Mizu,Mr.Faq,ScF,C₂₉H₂₅N₃O₅",
|
||||
"",
|
||||
"特别感谢:",
|
||||
"Flyz,Big_True,NOT-A-ROBOT,思竣,yuhao7370",
|
||||
"Flyz,Big_True,NOT_A_ROBOT,思竣,yuhao7370",
|
||||
"Farter,Teatube,蕴空之灵,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私用区定制字体",
|
||||
"卖弱和谦虚不是一回事,发言前三思呀",
|
||||
"卖弱禁言警告",
|
||||
|
||||
@@ -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']= {"隐形", "瞬隐", "很强大脑"},
|
||||
|
||||
@@ -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']= {"看不见的", "突然", "对于有经验的人"},
|
||||
|
||||
@@ -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{
|
||||
"翻譯: User670,MattMayuga,Mizu,Mr.Faq,ScF,C₂₉H₂₅N₃O₅",
|
||||
"",
|
||||
"特別感謝:",
|
||||
"Flyz,Big_True,NOT-A-ROBOT,思竣,yuhao7370",
|
||||
"Flyz,Big_True,NOT_A_ROBOT,思竣,yuhao7370",
|
||||
"Farter,Teatube,蕴空之灵,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']= {"隱形", "瞬隱", "很強大腦"},
|
||||
|
||||
@@ -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'}},
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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',
|
||||
},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
21
parts/modes/strategy_e.lua
Normal file
21
parts/modes/strategy_e.lua
Normal 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,
|
||||
}
|
||||
21
parts/modes/strategy_h.lua
Normal file
21
parts/modes/strategy_h.lua
Normal 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,
|
||||
}
|
||||
21
parts/modes/strategy_u.lua
Normal file
21
parts/modes/strategy_u.lua
Normal 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,
|
||||
}
|
||||
@@ -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="费尔特林"},
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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={}
|
||||
|
||||
@@ -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')},
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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人房的按钮
|
||||
|
||||
10
version.lua
10
version.lua
@@ -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",
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user