Compare commits
45 Commits
pre0.17.2-
...
v0.17.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d987008cf6 | ||
|
|
73fc7c037d | ||
|
|
718540db5a | ||
|
|
9c2b09e589 | ||
|
|
0c2f0904ef | ||
|
|
2ae34bded1 | ||
|
|
30b1d2ddfd | ||
|
|
d769604724 | ||
|
|
573366fed9 | ||
|
|
6f3667e65a | ||
|
|
9426dcdc69 | ||
|
|
bdb117c0df | ||
|
|
8fd4391549 | ||
|
|
373c8a8a5f | ||
|
|
2207f7e414 | ||
|
|
984bb7d6a6 | ||
|
|
664afb0bb3 | ||
|
|
716a08b31d | ||
|
|
a6c63c41b6 | ||
|
|
286e330077 | ||
|
|
5e8af423f2 | ||
|
|
5f539a2d4f | ||
|
|
73f63cfd0a | ||
|
|
11422bee5a | ||
|
|
baf36ac86b | ||
|
|
d8c058b0e1 | ||
|
|
6c69c38b32 | ||
|
|
d17e62e36b | ||
|
|
3a2ec3a5dd | ||
|
|
ce25f17676 | ||
|
|
61fe4a5897 | ||
|
|
f50e90b29b | ||
|
|
c151c1176f | ||
|
|
69491e2f8b | ||
|
|
4f4988d7ef | ||
|
|
9ee4af48da | ||
|
|
566ebbf213 | ||
|
|
b1ea222b90 | ||
|
|
d85f77b480 | ||
|
|
20f5d07d05 | ||
|
|
9864a75e0f | ||
|
|
af4cf9fc0d | ||
|
|
d0597e6836 | ||
|
|
61fb504b21 | ||
|
|
bd055a7c60 |
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
||||
* text=auto
|
||||
2
.github/.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
actions/**/*.yml text eol=lf
|
||||
workflows/*.yml text eol=lf
|
||||
1
.github/build/Linux/.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.template text eol=lf
|
||||
1
.github/build/Windows/.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.template text eol=crlf
|
||||
1
.github/build/macOS/.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
||||
*.template text eol=lf
|
||||
56
.github/workflows/getVersion.lua
vendored
@@ -1,28 +1,28 @@
|
||||
local arg=arg[1]
|
||||
if arg=="-apkCode"then
|
||||
local code=require"version".apkCode
|
||||
print(code)
|
||||
elseif arg=="-code"then
|
||||
local str=require"version".code
|
||||
print(str)
|
||||
elseif arg=="-name"then
|
||||
local str=require"version".string
|
||||
print(str)
|
||||
elseif arg=="-release"then
|
||||
local str=require"version".string:gsub("V","",1)
|
||||
print(str)
|
||||
elseif arg=="-updateTitle"then
|
||||
local note=require"parts.updateLog"
|
||||
local p1=note:find("\n%d")+1
|
||||
local p2=note:find("\n",p1)-1
|
||||
note=note:sub(p1,p2)
|
||||
print(note)
|
||||
elseif arg=="-updateNote"then
|
||||
local note=require"parts.updateLog"
|
||||
local p1=note:find("\n",note:find("\n%d")+1)+1
|
||||
local p2=note:find("\n%d",p1+1)
|
||||
note=note:sub(p1,p2-2)
|
||||
:gsub(" ","- ")
|
||||
:gsub(" ","# ")
|
||||
print(note)
|
||||
end
|
||||
local arg=arg[1]
|
||||
if arg=="-apkCode"then
|
||||
local code=require"version".apkCode
|
||||
print(code)
|
||||
elseif arg=="-code"then
|
||||
local str=require"version".code
|
||||
print(str)
|
||||
elseif arg=="-name"then
|
||||
local str=require"version".string
|
||||
print(str)
|
||||
elseif arg=="-release"then
|
||||
local str=require"version".string:gsub("V","",1)
|
||||
print(str)
|
||||
elseif arg=="-updateTitle"then
|
||||
local note=require"parts.updateLog"
|
||||
local p1=note:find("\n%d")+1
|
||||
local p2=note:find("\n",p1)-1
|
||||
note=note:sub(p1,p2)
|
||||
print(note)
|
||||
elseif arg=="-updateNote"then
|
||||
local note=require"parts.updateLog"
|
||||
local p1=note:find("\n",note:find("\n%d")+1)+1
|
||||
local p2=note:find("\n%d",p1+1)
|
||||
note=note:sub(p1,p2-2)
|
||||
:gsub(" ","- ")
|
||||
:gsub(" ","# ")
|
||||
print(note)
|
||||
end
|
||||
|
||||
@@ -10,8 +10,6 @@ Powered by LÖVE, © 2006–2022 LÖVE Development Team.
|
||||
|
||||
Lua is free software distributed under the terms of the MIT license. Copyright © 1994–2022 by Lua.org, PUC-Rio.
|
||||
|
||||
SIMPLE LOVE LIGHTS is under a MIT License. Created by Dylan Hunn.
|
||||
|
||||
json.lua is copyrighted by rxi. © 2022 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.
|
||||
@@ -29,7 +27,7 @@ JetBrains Mono is copyrighted by the JetBrains Mono Project authors. JetBrains M
|
||||
"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.
|
||||
The Apple logo, "Apple Inc.," iOS, iPadOS, macOS, iPhone, Mac, and Apple Arcade 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. © 2022 Electronic Arts Inc.
|
||||
@@ -38,7 +36,7 @@ SEGA and the SEGA logo are registered trademarks of Sega Corporation. © 2022 Se
|
||||
|
||||
Oculus Quest is a registered trademark of Facebook Technologies, LLC. © Meta Platforms, Inc.
|
||||
|
||||
"Nintendo" is a registered trademarks of Nintendo Co., Ltd. © 2022 Nintendo Co., Ltd.
|
||||
"Nintendo" is a registered trademark of Nintendo Co., Ltd. © 2022 Nintendo Co., Ltd.
|
||||
|
||||
N3TWORK is a registered trademark of N3TWORK Inc. © 2022 N3TWORK Inc.
|
||||
|
||||
@@ -46,6 +44,8 @@ GoldWave is a registered trademark of GoldWave, Inc.
|
||||
|
||||
Linux is a registered trademark of Linus Torvalds.
|
||||
|
||||
Google is a registered trademark of Google LLC.
|
||||
|
||||
Touhou Project © Team Shanghai Alice 2002–2022.
|
||||
|
||||
All other trademarks, logos, and copyrights are the properties of their respective owners.
|
||||
|
||||
34
main.lua
@@ -30,7 +30,7 @@ SAVEDIR=fs.getSaveDirectory()
|
||||
|
||||
--Global Vars & Settings
|
||||
SFXPACKS={'chiptune'}
|
||||
VOCPACKS={'miya',--[['mono',]]'xiaoya','miku'}
|
||||
VOCPACKS={'miya','mono','xiaoya','miku'}
|
||||
FIRSTLAUNCH=false
|
||||
DAILYLAUNCH=false
|
||||
|
||||
@@ -180,7 +180,7 @@ Z.setOnFnKeys({
|
||||
end
|
||||
end
|
||||
end,
|
||||
function()print(WIDGET.getSelected()or"no widget selected")end,
|
||||
function()print(BG.locked)end,
|
||||
function()for k,v in next,_G do print(k,v)end end,
|
||||
function()if love['_openConsole']then love['_openConsole']()end end,
|
||||
})
|
||||
@@ -190,9 +190,6 @@ Z.setDebugInfo{
|
||||
{"Voices",VOC.getQueueCount},
|
||||
{"Audios",love.audio.getSourceCount},
|
||||
}
|
||||
Z.setOnResize(function(w,_)
|
||||
SHADER.warning:send('w',w*SCR.dpi)
|
||||
end)
|
||||
do--Z.setOnFocus
|
||||
local function task_autoSoundOff()
|
||||
while true do
|
||||
@@ -234,12 +231,18 @@ end
|
||||
Z.setOnQuit(destroyPlayers)
|
||||
|
||||
--Load settings and statistics
|
||||
TABLE.cover (loadFile('conf/user','-canSkip')or{},USER)
|
||||
TABLE.cover (loadFile('conf/unlock','-canSkip')or{},RANKS)
|
||||
TABLE.update(loadFile('conf/settings','-canSkip')or{},SETTING)
|
||||
TABLE.coverR(loadFile('conf/data','-canSkip')or{},STAT)
|
||||
TABLE.cover (loadFile('conf/key','-canSkip')or{},KEY_MAP)
|
||||
TABLE.cover (loadFile('conf/virtualkey','-json -canSkip')or{},VK_ORG)
|
||||
if
|
||||
not(
|
||||
pcall(TABLE.cover, loadFile('conf/user', '-json -canSkip')or loadFile('conf/user', '-luaon -canSkip')or{},USER) and
|
||||
pcall(TABLE.cover, loadFile('conf/unlock', '-json -canSkip')or loadFile('conf/unlock', '-luaon -canSkip')or{},RANKS) and
|
||||
pcall(TABLE.update,loadFile('conf/settings', '-json -canSkip')or loadFile('conf/settings', '-luaon -canSkip')or{},SETTING) and
|
||||
pcall(TABLE.coverR,loadFile('conf/data', '-json -canSkip')or loadFile('conf/data', '-luaon -canSkip')or{},STAT) and
|
||||
pcall(TABLE.cover, loadFile('conf/key', '-json -canSkip')or loadFile('conf/key', '-luaon -canSkip')or{},KEY_MAP) and
|
||||
pcall(TABLE.cover, loadFile('conf/virtualkey','-json -canSkip')or loadFile('conf/virtualkey','-luaon -canSkip')or{},VK_ORG)
|
||||
)
|
||||
then
|
||||
MES.new('error',"Be careful, an error accured when loading saving, some data was lost")
|
||||
end
|
||||
|
||||
--Initialize fields, sequence, missions, gameEnv for cutsom game
|
||||
local fieldData=loadFile('conf/customBoards','-string -canSkip')
|
||||
@@ -288,6 +291,15 @@ IMG.init{
|
||||
xiaoyaCH='media/image/characters/xiaoya.png',
|
||||
xiaoyaOmino='media/image/characters/xiaoya_Omino.png',
|
||||
mikuCH='media/image/characters/miku.png',
|
||||
z={
|
||||
character='media/image/characters/z_character.png',
|
||||
screen1='media/image/characters/z_screen1.png',
|
||||
screen2='media/image/characters/z_screen2.png',
|
||||
particle1='media/image/characters/z_particle1.png',
|
||||
particle2='media/image/characters/z_particle2.png',
|
||||
particle3='media/image/characters/z_particle3.png',
|
||||
particle4='media/image/characters/z_particle4.png',
|
||||
},
|
||||
electric='media/image/characters/electric.png',
|
||||
hbm='media/image/characters/hbm.png',
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 140 KiB |
BIN
media/image/characters/z_character.png
Normal file
|
After Width: | Height: | Size: 131 KiB |
BIN
media/image/characters/z_particle1.png
Normal file
|
After Width: | Height: | Size: 418 B |
BIN
media/image/characters/z_particle2.png
Normal file
|
After Width: | Height: | Size: 693 B |
BIN
media/image/characters/z_particle3.png
Normal file
|
After Width: | Height: | Size: 458 B |
BIN
media/image/characters/z_particle4.png
Normal file
|
After Width: | Height: | Size: 491 B |
BIN
media/image/characters/z_screen1.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
media/image/characters/z_screen2.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
media/image/modeicon/dig_eff.png
Normal file
|
After Width: | Height: | Size: 969 B |
@@ -5,19 +5,15 @@ local shader=SHADER.aura
|
||||
local t
|
||||
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
t=math.random()*260
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
end
|
||||
function back.resize(_,h)
|
||||
shader:send('w',SCR.W)
|
||||
shader:send('h',h*SCR.dpi)
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=(t+dt)%2600
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
shader:send('phase',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
|
||||
@@ -5,18 +5,14 @@ local shader=SHADER.grad1
|
||||
|
||||
local t
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
back.resize()
|
||||
end
|
||||
function back.resize()
|
||||
shader:send('w',SCR.W)
|
||||
t=math.random()*260
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=(t+dt)%2600
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
shader:send('phase',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
|
||||
@@ -5,18 +5,15 @@ local shader=SHADER.grad2
|
||||
|
||||
local t
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
t=math.random()*260
|
||||
BG.resize(nil,SCR.h)
|
||||
end
|
||||
function back.resize(_,h)
|
||||
shader:send('h',h*SCR.dpi)
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=(t+dt)%2600
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
shader:send('phase',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
|
||||
@@ -5,19 +5,15 @@ local shader=SHADER.rgb1
|
||||
|
||||
local t
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
t=math.random()*260
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
end
|
||||
function back.resize(_,h)
|
||||
shader:send('w',SCR.W)
|
||||
shader:send('h',h*SCR.dpi)
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=(t+dt)%2600
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
shader:send('phase',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
|
||||
@@ -5,19 +5,15 @@ local shader=SHADER.rgb2
|
||||
|
||||
local t
|
||||
function back.init()
|
||||
t=math.random()*2600
|
||||
t=math.random()*260
|
||||
BG.resize(SCR.w,SCR.h)
|
||||
end
|
||||
function back.resize(_,h)
|
||||
shader:send('w',SCR.W)
|
||||
shader:send('h',h*SCR.dpi)
|
||||
end
|
||||
function back.update(dt)
|
||||
t=t+dt
|
||||
t=(t+dt)%2600
|
||||
end
|
||||
function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
shader:send('t',t)
|
||||
shader:send('phase',t)
|
||||
gc.setShader(shader)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.setShader()
|
||||
|
||||
@@ -19,8 +19,8 @@ function back.draw()
|
||||
gc.clear(.08,.08,.084)
|
||||
end
|
||||
gc.push('transform')
|
||||
gc.translate(SCR.cx,SCR.cy+20*sin(t*.02))
|
||||
gc.scale(SCR.k)
|
||||
gc.replaceTransform(SCR.xOy_m)
|
||||
gc.translate(0,20*sin(t*.02))
|
||||
gc.scale(1.26,1.36)
|
||||
if -t%6.26<.1355 then
|
||||
gc.translate(60*sin(t*.26),100*sin(t*.626))
|
||||
|
||||
@@ -1,3 +1,28 @@
|
||||
local function GetLevelStr(lvl)
|
||||
local list={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","00","0A","14","1E","28","32","3C","46","50","5A","64","6E","78","82","8C","96","A0","AA","B4","BE","C6","20","E6","20","06","21","26","21","46","21","66","21","86","21","A6","21","C6","21","E6","21","06","22","26","22","46","22","66","22","86","22","A6","22","C6","22","E6","22","06","23","26","23","85","A8","29","F0","4A","4A","4A","4A","8D","07","20","A5","A8","29","0F","8D","07","20","60","A6","49","E0","15","10","53","BD","D6","96","A8","8A","0A","AA","E8","BD","EA","96","8D","06","20","CA","A5","BE","C9","01","F0","1E","A5","B9","C9","05","F0","0C","BD","EA","96","38","E9","02","8D","06","20","4C","67","97","BD","EA","96","18","69","0C","8D","06","20","4C","67","97","BD","EA","96","18","69","06","8D","06","20","A2","0A","B1","B8","8D","07","20","C8","CA","D0","F7","E6","49","A5","49","C9","14","30","04","A9","20","85","49","60","A5","B1","29","03","D0","78","A9","00","85","AA","A6","AA","B5","4A","F0","5C","0A","A8","B9","EA","96","85","A8","A5","BE","C9","01","D0","0A","A5","A8","18","69","06","85","A8","4C","BD","97","A5","B9","C9","04","D0","0A","A5","A8","38","E9","02","85","A8","4C","BD","97","A5","A8"}
|
||||
list[0]="00"
|
||||
lvl=lvl%256
|
||||
return list[lvl]
|
||||
end
|
||||
local function GetGravity(lvl)
|
||||
lvl=lvl%256
|
||||
return
|
||||
lvl==0 and 48 or
|
||||
lvl==1 and 43 or
|
||||
lvl==2 and 38 or
|
||||
lvl==3 and 33 or
|
||||
lvl==4 and 28 or
|
||||
lvl==5 and 23 or
|
||||
lvl==6 and 18 or
|
||||
lvl==7 and 13 or
|
||||
lvl==8 and 8 or
|
||||
lvl==9 and 6 or
|
||||
lvl<13 and 5 or
|
||||
lvl<16 and 4 or
|
||||
lvl<19 and 3 or
|
||||
lvl<29 and 2 or
|
||||
1
|
||||
end
|
||||
local gc_setColor=love.graphics.setColor
|
||||
return{
|
||||
das=16,arr=6,
|
||||
@@ -15,8 +40,7 @@ return{
|
||||
keyCancel={5,6},
|
||||
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(GetLevelStr(P.modeData.lvl),63,210)
|
||||
mText(TEXTOBJ.speedLV,63,290)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
if P.modeData.drought>7 then
|
||||
@@ -32,27 +56,22 @@ return{
|
||||
end
|
||||
end,
|
||||
task=function(P)
|
||||
P.modeData.lvl=9
|
||||
P.modeData.target=10
|
||||
end,
|
||||
hook_drop=function(P)
|
||||
local D=P.modeData
|
||||
D.drought=P.lastPiece.id==7 and 0 or D.drought+1
|
||||
if P.stat.row>=D.target then
|
||||
if D.target==110 then
|
||||
P.gameEnv.drop,P.gameEnv.lock=5,5
|
||||
P.gameEnv.sddas,P.gameEnv.sdarr=5,5
|
||||
if D.target>=100 then
|
||||
D.lvl=D.lvl+1
|
||||
end
|
||||
local dropSpd=GetGravity(D.lvl)
|
||||
if D.target==200 then P:win('finish') return
|
||||
elseif dropSpd~=P.gameEnv.drop then
|
||||
P.gameEnv.drop,P.gameEnv.lock=dropSpd,dropSpd
|
||||
P.gameEnv.sddas,P.gameEnv.sdarr=dropSpd,dropSpd
|
||||
SFX.play('warn_2',.7)
|
||||
elseif D.target==140 then
|
||||
P.gameEnv.drop,P.gameEnv.lock=4,4
|
||||
P.gameEnv.sddas,P.gameEnv.sdarr=4,4
|
||||
SFX.play('warn_2',.7)
|
||||
elseif D.target==170 then
|
||||
P.gameEnv.drop,P.gameEnv.lock=3,3
|
||||
P.gameEnv.sddas,P.gameEnv.sdarr=3,3
|
||||
SFX.play('warn_2',.7)
|
||||
elseif D.target==200 then
|
||||
P:win('finish')
|
||||
return
|
||||
else
|
||||
SFX.play('reach')
|
||||
end
|
||||
|
||||
@@ -1,3 +1,28 @@
|
||||
local function GetLevelStr(lvl)
|
||||
local list={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","00","0A","14","1E","28","32","3C","46","50","5A","64","6E","78","82","8C","96","A0","AA","B4","BE","C6","20","E6","20","06","21","26","21","46","21","66","21","86","21","A6","21","C6","21","E6","21","06","22","26","22","46","22","66","22","86","22","A6","22","C6","22","E6","22","06","23","26","23","85","A8","29","F0","4A","4A","4A","4A","8D","07","20","A5","A8","29","0F","8D","07","20","60","A6","49","E0","15","10","53","BD","D6","96","A8","8A","0A","AA","E8","BD","EA","96","8D","06","20","CA","A5","BE","C9","01","F0","1E","A5","B9","C9","05","F0","0C","BD","EA","96","38","E9","02","8D","06","20","4C","67","97","BD","EA","96","18","69","0C","8D","06","20","4C","67","97","BD","EA","96","18","69","06","8D","06","20","A2","0A","B1","B8","8D","07","20","C8","CA","D0","F7","E6","49","A5","49","C9","14","30","04","A9","20","85","49","60","A5","B1","29","03","D0","78","A9","00","85","AA","A6","AA","B5","4A","F0","5C","0A","A8","B9","EA","96","85","A8","A5","BE","C9","01","D0","0A","A5","A8","18","69","06","85","A8","4C","BD","97","A5","B9","C9","04","D0","0A","A5","A8","38","E9","02","85","A8","4C","BD","97","A5","A8"}
|
||||
list[0]="00"
|
||||
lvl=lvl%256
|
||||
return list[lvl]
|
||||
end
|
||||
local function GetGravity(lvl)
|
||||
lvl=lvl%256
|
||||
return
|
||||
lvl==0 and 48 or
|
||||
lvl==1 and 43 or
|
||||
lvl==2 and 38 or
|
||||
lvl==3 and 33 or
|
||||
lvl==4 and 28 or
|
||||
lvl==5 and 23 or
|
||||
lvl==6 and 18 or
|
||||
lvl==7 and 13 or
|
||||
lvl==8 and 8 or
|
||||
lvl==9 and 6 or
|
||||
lvl<13 and 5 or
|
||||
lvl<16 and 4 or
|
||||
lvl<19 and 3 or
|
||||
lvl<29 and 2 or
|
||||
1
|
||||
end
|
||||
local gc_setColor=love.graphics.setColor
|
||||
return{
|
||||
das=16,arr=6,
|
||||
@@ -15,8 +40,7 @@ return{
|
||||
keyCancel={5,6},
|
||||
mesDisp=function(P)
|
||||
setFont(75)
|
||||
local r=P.modeData.target/10
|
||||
mStr(r<11 and 18 or r<22 and r+8 or("%02x"):format(r*10-220),63,210)
|
||||
mStr(GetLevelStr(P.modeData.lvl),63,210)
|
||||
mText(TEXTOBJ.speedLV,63,290)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
if P.modeData.drought>7 then
|
||||
@@ -32,19 +56,22 @@ return{
|
||||
end
|
||||
end,
|
||||
task=function(P)
|
||||
P.modeData.lvl=18
|
||||
P.modeData.target=10
|
||||
end,
|
||||
hook_drop=function(P)
|
||||
local D=P.modeData
|
||||
D.drought=P.lastPiece.id==7 and 0 or D.drought+1
|
||||
if P.stat.row>=D.target then
|
||||
if D.target==100 then
|
||||
P.gameEnv.drop,P.gameEnv.lock=2,2
|
||||
P.gameEnv.sddas,P.gameEnv.sdarr=2,2
|
||||
if D.target>=100 then
|
||||
D.lvl=D.lvl+1
|
||||
end
|
||||
local dropSpd=GetGravity(D.lvl)
|
||||
if D.target==200 then P:win('finish') return
|
||||
elseif dropSpd~=P.gameEnv.drop then
|
||||
P.gameEnv.drop,P.gameEnv.lock=dropSpd,dropSpd
|
||||
P.gameEnv.sddas,P.gameEnv.sdarr=dropSpd,dropSpd
|
||||
SFX.play('warn_1')
|
||||
elseif D.target==200 then
|
||||
P:win('finish')
|
||||
return
|
||||
else
|
||||
SFX.play('reach')
|
||||
end
|
||||
|
||||
@@ -1,23 +1,46 @@
|
||||
local function GetLevelStr(lvl)
|
||||
local list={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","00","0A","14","1E","28","32","3C","46","50","5A","64","6E","78","82","8C","96","A0","AA","B4","BE","C6","20","E6","20","06","21","26","21","46","21","66","21","86","21","A6","21","C6","21","E6","21","06","22","26","22","46","22","66","22","86","22","A6","22","C6","22","E6","22","06","23","26","23","85","A8","29","F0","4A","4A","4A","4A","8D","07","20","A5","A8","29","0F","8D","07","20","60","A6","49","E0","15","10","53","BD","D6","96","A8","8A","0A","AA","E8","BD","EA","96","8D","06","20","CA","A5","BE","C9","01","F0","1E","A5","B9","C9","05","F0","0C","BD","EA","96","38","E9","02","8D","06","20","4C","67","97","BD","EA","96","18","69","0C","8D","06","20","4C","67","97","BD","EA","96","18","69","06","8D","06","20","A2","0A","B1","B8","8D","07","20","C8","CA","D0","F7","E6","49","A5","49","C9","14","30","04","A9","20","85","49","60","A5","B1","29","03","D0","78","A9","00","85","AA","A6","AA","B5","4A","F0","5C","0A","A8","B9","EA","96","85","A8","A5","BE","C9","01","D0","0A","A5","A8","18","69","06","85","A8","4C","BD","97","A5","B9","C9","04","D0","0A","A5","A8","38","E9","02","85","A8","4C","BD","97","A5","A8"}
|
||||
list[0]="00"
|
||||
lvl=lvl%256
|
||||
return list[lvl]
|
||||
end
|
||||
local function GetGravity(lvl)
|
||||
lvl=lvl%256
|
||||
return
|
||||
lvl==0 and 48 or
|
||||
lvl==1 and 43 or
|
||||
lvl==2 and 38 or
|
||||
lvl==3 and 33 or
|
||||
lvl==4 and 28 or
|
||||
lvl==5 and 23 or
|
||||
lvl==6 and 18 or
|
||||
lvl==7 and 13 or
|
||||
lvl==8 and 8 or
|
||||
lvl==9 and 6 or
|
||||
lvl<13 and 5 or
|
||||
lvl<16 and 4 or
|
||||
lvl<19 and 3 or
|
||||
lvl<29 and 2 or
|
||||
1
|
||||
end
|
||||
local gc_setColor=love.graphics.setColor
|
||||
return{
|
||||
das=16,arr=6,
|
||||
sddas=2,sdarr=2,
|
||||
sddas=2,sdarr=2,
|
||||
irs=false,ims=false,
|
||||
drop=2,
|
||||
lock=2,
|
||||
wait=10,
|
||||
fall=25,
|
||||
drop=2,lock=2,
|
||||
wait=10,fall=25,
|
||||
freshLimit=0,
|
||||
fieldH=19,
|
||||
nextCount=1,holdCount=0,
|
||||
nextCount=1,
|
||||
holdCount=0,
|
||||
RS='Classic',
|
||||
sequence='rnd',
|
||||
noTele=true,
|
||||
keyCancel={5,6},
|
||||
mesDisp=function(P)
|
||||
setFont(75)
|
||||
local r=P.modeData.target/10
|
||||
mStr(r<11 and 19 or r<22 and r+9 or("%02x"):format(r*10-220),63,210)
|
||||
mStr(GetLevelStr(P.modeData.lvl),63,210)
|
||||
mText(TEXTOBJ.speedLV,63,290)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
if P.modeData.drought>7 then
|
||||
@@ -33,19 +56,25 @@ return{
|
||||
end
|
||||
end,
|
||||
task=function(P)
|
||||
P.modeData.lvl=19
|
||||
P.modeData.target=10
|
||||
end,
|
||||
hook_drop=function(P)
|
||||
local D=P.modeData
|
||||
D.drought=P.lastPiece.id==7 and 0 or D.drought+1
|
||||
if P.stat.row>=D.target then
|
||||
D.target=D.target+10
|
||||
if D.target==200 then
|
||||
P.gameEnv.drop,P.gameEnv.lock=1,1
|
||||
SFX.play('blip_1')
|
||||
--if D.target>=200 then
|
||||
D.lvl=D.lvl+1
|
||||
--end
|
||||
local dropSpd=GetGravity(D.lvl)
|
||||
if dropSpd~=P.gameEnv.drop then
|
||||
P.gameEnv.drop,P.gameEnv.lock=dropSpd,dropSpd
|
||||
P.gameEnv.sddas,P.gameEnv.sdarr=dropSpd,dropSpd
|
||||
SFX.play('warn_1')
|
||||
else
|
||||
SFX.play('reach')
|
||||
end
|
||||
D.target=D.target+10
|
||||
end
|
||||
end,
|
||||
}
|
||||
end
|
||||
}
|
||||
|
||||
@@ -1,3 +1,28 @@
|
||||
local function GetLevelStr(lvl)
|
||||
local list={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","00","0A","14","1E","28","32","3C","46","50","5A","64","6E","78","82","8C","96","A0","AA","B4","BE","C6","20","E6","20","06","21","26","21","46","21","66","21","86","21","A6","21","C6","21","E6","21","06","22","26","22","46","22","66","22","86","22","A6","22","C6","22","E6","22","06","23","26","23","85","A8","29","F0","4A","4A","4A","4A","8D","07","20","A5","A8","29","0F","8D","07","20","60","A6","49","E0","15","10","53","BD","D6","96","A8","8A","0A","AA","E8","BD","EA","96","8D","06","20","CA","A5","BE","C9","01","F0","1E","A5","B9","C9","05","F0","0C","BD","EA","96","38","E9","02","8D","06","20","4C","67","97","BD","EA","96","18","69","0C","8D","06","20","4C","67","97","BD","EA","96","18","69","06","8D","06","20","A2","0A","B1","B8","8D","07","20","C8","CA","D0","F7","E6","49","A5","49","C9","14","30","04","A9","20","85","49","60","A5","B1","29","03","D0","78","A9","00","85","AA","A6","AA","B5","4A","F0","5C","0A","A8","B9","EA","96","85","A8","A5","BE","C9","01","D0","0A","A5","A8","18","69","06","85","A8","4C","BD","97","A5","B9","C9","04","D0","0A","A5","A8","38","E9","02","85","A8","4C","BD","97","A5","A8"}
|
||||
list[0]="00"
|
||||
lvl=lvl%256
|
||||
return list[lvl]
|
||||
end
|
||||
local function GetGravity(lvl)
|
||||
lvl=lvl%256
|
||||
return
|
||||
lvl==0 and 48 or
|
||||
lvl==1 and 43 or
|
||||
lvl==2 and 38 or
|
||||
lvl==3 and 33 or
|
||||
lvl==4 and 28 or
|
||||
lvl==5 and 23 or
|
||||
lvl==6 and 18 or
|
||||
lvl==7 and 13 or
|
||||
lvl==8 and 8 or
|
||||
lvl==9 and 6 or
|
||||
lvl<13 and 5 or
|
||||
lvl<16 and 4 or
|
||||
lvl<19 and 3 or
|
||||
lvl<29 and 2 or
|
||||
1
|
||||
end
|
||||
local gc_setColor=love.graphics.setColor
|
||||
return{
|
||||
das=16,arr=6,
|
||||
@@ -15,8 +40,7 @@ return{
|
||||
keyCancel={5,6},
|
||||
mesDisp=function(P)
|
||||
setFont(75)
|
||||
local r=P.modeData.target/10
|
||||
mStr(r==1 and 29 or("%02x"):format(r*10-20),63,210)
|
||||
mStr(GetLevelStr(P.modeData.lvl),63,210)
|
||||
mText(TEXTOBJ.speedLV,63,290)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
if P.modeData.drought>7 then
|
||||
@@ -32,18 +56,17 @@ return{
|
||||
end
|
||||
end,
|
||||
task=function(P)
|
||||
P.modeData.lvl=29
|
||||
P.modeData.target=10
|
||||
end,
|
||||
hook_drop=function(P)
|
||||
local D=P.modeData
|
||||
D.drought=P.lastPiece.id==7 and 0 or D.drought+1
|
||||
if P.stat.row>=D.target then
|
||||
if D.target==100 then
|
||||
P:win('finish')
|
||||
return
|
||||
end
|
||||
D.target=D.target+10
|
||||
if D.target>=200 then P:win('finish') return end
|
||||
SFX.play('reach')
|
||||
D.lvl=D.lvl+1
|
||||
D.target=D.target+10
|
||||
end
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -110,7 +110,7 @@ return{
|
||||
lock=30,
|
||||
wait=23,
|
||||
fall=25,
|
||||
noTele=true,
|
||||
keyCancel={10,11,12,14,15,16,17,18,19,20},
|
||||
das=16,arr=1,
|
||||
minsdarr=1,
|
||||
ihs=true,irs=true,ims=false,
|
||||
@@ -277,7 +277,7 @@ return{
|
||||
YIELD()
|
||||
P.modeData.grade=getGrade()
|
||||
P.modeData.gradePts=math.max(math.min(math.floor(int_grade_boosts[math.min(int_grade+1,#int_grade_boosts)]+rollGrades+cools+1-regrets),#gradeList),1)
|
||||
if P.stat.frame-prevSectTime > reg_time[math.ceil(P.modeData.pt/100+0.01)] then
|
||||
if P.stat.frame-prevSectTime > reg_time[math.ceil(P.modeData.pt/100+0.01)] and not (isInRoll or isInRollTrans) then
|
||||
regretList[math.ceil(P.modeData.pt/100)]=true
|
||||
end
|
||||
if regretDelay>-1 then
|
||||
|
||||
@@ -20,7 +20,7 @@ return{
|
||||
local D=P.modeData
|
||||
|
||||
local c=#P.clearedRow
|
||||
if c==0 and D.pt%100==99 then
|
||||
if c==0 and D.pt%100==99 then
|
||||
if D.pt<1000 then
|
||||
hidetimer=0-inv_wait[(P.modeData.pt/100-(P.modeData.pt%100)/100)+1]
|
||||
if c>0 then hidetimer=hidetimer-inv_fall[(P.modeData.pt/100-(P.modeData.pt%100)/100)+1]end
|
||||
|
||||
@@ -165,17 +165,15 @@ do--function applySettings()
|
||||
BG.set()
|
||||
elseif SETTING.bg=='off'then
|
||||
BG.unlock()
|
||||
BG.set('fixColor')
|
||||
BG.send(SETTING.bgAlpha,SETTING.bgAlpha,SETTING.bgAlpha)
|
||||
BG.set('fixColor',SETTING.bgAlpha,SETTING.bgAlpha,SETTING.bgAlpha)
|
||||
BG.lock()
|
||||
elseif SETTING.bg=='custom'then
|
||||
if love.filesystem.getInfo('conf/customBG')then
|
||||
local res,image=pcall(gc.newImage,love.filesystem.newFile('conf/customBG'))
|
||||
if res then
|
||||
BG.unlock()
|
||||
BG.set('custom')
|
||||
gc.setDefaultFilter('linear','linear')
|
||||
BG.send(SETTING.bgAlpha,image)
|
||||
BG.set('custom',SETTING.bgAlpha,image)
|
||||
gc.setDefaultFilter('nearest','nearest')
|
||||
BG.lock()
|
||||
else
|
||||
@@ -184,8 +182,7 @@ do--function applySettings()
|
||||
else--Switch off when custom BG not found
|
||||
SETTING.bg='off'
|
||||
BG.unlock()
|
||||
BG.set('fixColor')
|
||||
BG.send(SETTING.bgAlpha,SETTING.bgAlpha,SETTING.bgAlpha)
|
||||
BG.set('fixColor',SETTING.bgAlpha,SETTING.bgAlpha,SETTING.bgAlpha)
|
||||
BG.lock()
|
||||
end
|
||||
end
|
||||
@@ -714,7 +711,7 @@ do--function resetGameData(args)
|
||||
local gameSetting={
|
||||
--Tuning
|
||||
'das','arr','dascut','dropcut','sddas','sdarr',
|
||||
'ihs','irs','ims','RS','FTLock',
|
||||
'ihs','irs','ims','RS',
|
||||
|
||||
--System
|
||||
'skin','face',
|
||||
@@ -943,7 +940,7 @@ do--CUS/SETXXX(k)
|
||||
local warnList={
|
||||
'das','arr','dascut','dropcut','sddas','sdarr',
|
||||
'ihs','irs','ims','RS',
|
||||
'FTLock','frameMul','highCam',
|
||||
'frameMul','highCam',
|
||||
'VKSwitch','VKIcon','VKTrack','VKDodge',
|
||||
'simpMode',
|
||||
}
|
||||
|
||||
@@ -536,7 +536,6 @@ do--Game data tables
|
||||
ROOMENV={
|
||||
--Room config
|
||||
capacity=10,
|
||||
FTLock=true,
|
||||
|
||||
--Basic
|
||||
drop=30,lock=60,
|
||||
@@ -591,7 +590,6 @@ do--Userdata tables
|
||||
ihs=true,irs=true,ims=true,
|
||||
holdMode='hold',
|
||||
RS='TRS',
|
||||
FTLock=true,
|
||||
|
||||
--System
|
||||
reTime=2,
|
||||
|
||||
@@ -785,6 +785,11 @@ return{
|
||||
"term",
|
||||
"Soft Drop Factor\n\nA way to define soft drop speed as a multiple of natural falling speed. In guideline games, the soft drop is usually 20x the speed of natural falling, i.e. it has an SDF of 20. Techmino does not use SDF to define soft drop speed.",
|
||||
},
|
||||
{"Shape & Names",
|
||||
"mino",
|
||||
"term",
|
||||
"Z"..CHAR.mino.Z.." S"..CHAR.mino.S.." J"..CHAR.mino.J.." L"..CHAR.mino.L.." T"..CHAR.mino.T.." O"..CHAR.mino.O.." I"..CHAR.mino.I.." Z5"..CHAR.mino.Z5.." S5"..CHAR.mino.S5.." P"..CHAR.mino.P.." Q"..CHAR.mino.Q.." F"..CHAR.mino.F.." E"..CHAR.mino.E.." T5"..CHAR.mino.T5.." U"..CHAR.mino.U.." V"..CHAR.mino.V.." W"..CHAR.mino.W.." X"..CHAR.mino.X.." J5"..CHAR.mino.J5.." L5"..CHAR.mino.L5.." R"..CHAR.mino.R.." Y"..CHAR.mino.Y.." N"..CHAR.mino.N.." H"..CHAR.mino.H.." I5"..CHAR.mino.I5.." I3"..CHAR.mino.I3.." C"..CHAR.mino.C.." I2"..CHAR.mino.I2.." O1"..CHAR.mino.O1,
|
||||
},
|
||||
{"Bag7 generator",
|
||||
"bag7bag randomgenerator",
|
||||
"term",
|
||||
|
||||
@@ -4,18 +4,23 @@ return{
|
||||
{"新人须知",
|
||||
"读我 必读 萌新 xinren new noob readme",
|
||||
"help",
|
||||
"致想深入玩下去的新人:\n\n\t两大根本原则:\n\t\t1. 选手感好的版本(Tech/Tetr.io/Jstris/TOP/Tetr.js),别用编程练习渣版本\n\t\t2. 踏实打好基础(预判next稳定消四等),别总想着炫酷T旋,对未来发展没好处。\n\t两大主要技巧:\n\t\t1. 熟悉初始位置以及到各个位置的初始操作;\n\t\t2. 提前计算好下一块能放哪。\n\n推荐阅读专栏《给TOP新人的几点建议》\n\n[点击右下角地球按钮打开链接]",
|
||||
"致想深入玩下去的新人:\n\n\t两大根本原则:\n\t\t1. 选手感好的版本(Tech/Tetr.io/Jstris/TOP/Tetr.js),别用编程练习渣版本\n\t\t2. 踏实打好基础(预判next稳定消四等),别总想着炫酷T旋,对未来实力提升没好处。\n\t两大主要技巧:\n\t\t1. 熟悉初始位置以及到各个位置的初始操作;\n\t\t2. 提前计算好下一块能放哪。\n\n推荐阅读专栏《给TOP新人的几点建议》\n\n[点击右下角地球按钮打开链接]",
|
||||
"https://bilibili.com/read/cv2352939",
|
||||
},
|
||||
{"新人学习/练习路线",
|
||||
"读我 必读 萌新 xinren new noob readme",
|
||||
"help",
|
||||
"以下是关于提升真正打块能力的指引,如果在以下任何项目练习过程中感到有困难,可以适当回去玩玩自己喜欢的项目。别忘了你是来 “玩” 游戏的,兴趣最重要。\n以下给出几个新手时期的主线任务树,前期主要就应该练习以下内容,学定式和T-Spin什么的对实力帮助很小(我们不认为靠定式对战秒其他萌新是有效实力):\n(注意,三段应当同时进行,不是A→B→C)\nA. 堆叠能力练习方法\n\tA1. 决定手上的块放哪的时候先别,看看下一块有没有地方放,如果放不下去,重新想手上的\n\tA2. 尝试把地形尽量控制得平整,因为比较平的地形来啥块都比较容易放得下去\nB. 操作效率与速度练习方法\n\tB1. 不要每一块都拿影子去对形状对位置,要自己想象这个块转一下是什么方向,想好了再开始按按键\n\tB2. 学习双旋,能逆时针转一次就不要顺时针转三次,费手\n\tB3. 学习极简,刚开始不用管速度,保证正确率最重要,养成良好习惯以后再提速快得很\nC. 堆叠能力考核\n\tC1. 稳定完成40行不死\n\tC2. 稳定不用hold完成40行\n\tC3. 稳定全消四完成40行\n\tC4. 稳定不用hold全消四完成40行\n以上都是根据社区和个人经验总结的模糊方法与目标,所以C的考核可以根据自身情况调整严格程度(例如 “稳定” 的具体成功率)。\n注:完成C的考核后,需要在未来一直注意没有上限的A1,这是方块的根本元素之一,强大的读next能力可以让你快速上手任何变种玩法。",
|
||||
},
|
||||
{"关于T-spin学习",
|
||||
"T旋 T转 tspin",
|
||||
"T旋 T转 tspins",
|
||||
"help",
|
||||
"首先指出:要能熟练做出各种T-spin并不是只看着T-spin的那一小部分地形就可以玩好的,对玩家堆叠能力和计算next能力同样也有较高的要求。\n\n如果不只是出于娱乐、随便玩玩的目的,是真的想不断提升T-spin能力变强,请在基础能力达到一定要求前不要刻意去学习太多的T-spin,而先把重点放在堆叠等基本功上。\n\n参考学T门槛水平:40L达到60s以内(可以视个人情况调整为40~120s)、能够轻松完成全消四的40L、不使用Hold不降太多速度的前提下比较轻松完成全消四的40L。",
|
||||
},
|
||||
{"游戏官网",
|
||||
"official website homepage mainpage guanwang",
|
||||
"help",
|
||||
"Techmino的官网!\n可以在上面下载游戏本体,或者修改头像以及个人信息。\n\n游戏作者的一些话:强烈不建议在任何公开场合提及甚至宣传本游戏,更不要随便就对外公布我们的官网链接!请务必只在私下里向有基础或真的很有兴趣入坑认真玩的玩家推荐,不然很容易拉低社群质量破坏交流氛围,非常难处理,甚至有可能影响游戏的未来发展。为了保证游戏未来会变得越来越好玩,千万慎重考虑您对游戏的推广方式!感谢您对Techmino的支持!!感谢配合!!!",
|
||||
"Techmino的官网!\n可以在上面下载游戏本体,或者修改头像以及个人信息。\n\n游戏作者的一些话:强烈不建议在任何公开场合提及甚至宣传Techmino,更不要随便就对外公布我们的官网链接!请务必只在私下里向有基础或真的很有兴趣入坑认真玩的玩家推荐,不然很容易拉低社群质量破坏交流氛围,非常难处理,甚至有可能影响游戏的未来发展。为了保证游戏未来会变得越来越好玩,千万慎重考虑您对游戏的推广方式!感谢您对Techmino的支持!!感谢配合!!!",
|
||||
"http://home.techmino.org",
|
||||
},
|
||||
{"灰机Wiki",
|
||||
@@ -45,13 +50,43 @@ return{
|
||||
{"Four.lol",
|
||||
"",
|
||||
"help",
|
||||
"(英文,很可能打不开)一个开局定式收集网站,界面很简洁,包含超详细连续PC路线分析(新人勿学,要背的东西超乎你的想象)。",
|
||||
"(英文,很可能打不开)一个开局定式收集网站",
|
||||
"https://four.lol",
|
||||
},
|
||||
{"テトリス堂",
|
||||
"",
|
||||
"help",
|
||||
"(日文)包含很多定式、教程和小游戏。内涵2nd、3rd、4th、7th PC的详细说明",
|
||||
"https://shiwehi.com/tetris/"
|
||||
},
|
||||
{"テトリステンプレ集",
|
||||
"",
|
||||
"help",
|
||||
"(日文)テトリステンプレ集@テト譜,包含非常多定式,有很详细的分类。大部分定式带有图片,可以很方便的分享给别人。",
|
||||
"https://w.atwiki.jp/tetrismaps/"
|
||||
},
|
||||
{"tetristemplate.info",
|
||||
"",
|
||||
"help",
|
||||
"(日文)テトリスブログ - PerfectClear,一个收集了定式的网站,量很少但是内容很精细。",
|
||||
"https://tetristemplate.info/"
|
||||
},
|
||||
{"Fumen",
|
||||
"fumen",
|
||||
"help",
|
||||
"(日文)一个方块版面编辑器,可以用于分享定式,PC解法等,用处很多。设置里可以启用英文版。",
|
||||
"http://fumen.zui.jp"
|
||||
},
|
||||
{"Fumen for Mobile",
|
||||
"fumenformobile fm",
|
||||
"help",
|
||||
"(英文)一个方块版面编辑器,添加了对触屏的控制,可以用于分享定式,PC解法等,用处很多。",
|
||||
"https://knewjade.github.io/fumen-for-mobile/"
|
||||
},
|
||||
|
||||
--相关网页/组织
|
||||
{"GitHub仓库",
|
||||
"源代码 源码 github git sourcecode yuandaima",
|
||||
"源代码 源码 github git sourcecode yuandaima src",
|
||||
"org",
|
||||
"Techmino的GitHub仓库地址,欢迎Star",
|
||||
"https://github.com/26F-Studio/Techmino",
|
||||
@@ -59,7 +94,7 @@ return{
|
||||
{"研究群",
|
||||
"yanjiu study research",
|
||||
"org",
|
||||
"俄罗斯方块·[研究]群QQ号112897780, “中国俄罗斯方块总群” ",
|
||||
"俄罗斯方块·[研究]群QQ号112897780,“中国俄罗斯方块总群”",
|
||||
},
|
||||
{"Mew据点",
|
||||
"mew tieba forum",
|
||||
@@ -95,27 +130,33 @@ return{
|
||||
{"TTT",
|
||||
"教程 trainer tres bien",
|
||||
"game",
|
||||
"Tetris Trainer Très-Bien。现代方块特殊操作手把手教程(推荐使用电脑,移动设备需要外接键盘)\n\t推荐能无Hold纯消四完成40L挑战的人学习\n\t内含T-spin、极简、SRS、部分对战定式介绍等教程\n注:提供的链接是翻译后挂在茶服的版本",
|
||||
"全称Tetris Trainer Très-Bien (by こな)。现代方块特殊操作手把手教程(只能键盘操作)\n\t推荐能纯消四完成40L挑战的人学习\n\t内含T-spin、极简、SRS、部分对战定式介绍等教程\n注:提供的链接是翻译后挂在茶服的版本",
|
||||
"http://teatube.ltd/ttt",
|
||||
},
|
||||
{"TTPC",
|
||||
"pc教程",
|
||||
"game",
|
||||
"SRS+Bag7方块游戏开局PC教程(推荐使用电脑,移动设备需要外接键盘)\n\t推荐完成了TTT的人学习(必须先学会SRS)\n\t(不包括六巧板等其它PC定式)\n\n注:提供的链接是翻译后挂在茶服的版本。",
|
||||
"全称TETRIS Perfect Clear Challenge (by chokotia)。SRS+Bag7方块游戏Perfect Clear Opener教程(只能键盘操作)。推荐完成了TTT的人学习(必须先学会SRS)\n\n注:提供的链接是翻译后挂在茶服的版本。",
|
||||
"http://teatube.ltd/ttpc",
|
||||
},
|
||||
{"NAZO",
|
||||
"题库",
|
||||
"game",
|
||||
"各类SRS试题(手机触屏玩不了)\n\t推荐能通过TTT的玩家尝试。\n\t内含各种T-spin/All spin题目,简单到极难题目都有。\n\n注:提供的链接是翻译后挂在茶服的版本。",
|
||||
"各类SRS试题\n\t推荐能通过TTT的玩家尝试。\n\t内含各种T-spin/All spin题目,简单到极难题目都有。\n\n注:提供的链接是翻译后挂在茶服的版本。",
|
||||
"http://teatube.ltd/nazo",
|
||||
},
|
||||
{"TPO",
|
||||
"题库 nazo",
|
||||
"game",
|
||||
"全称Tetris Puzzle O。由TCV100制作的题库网站,内含nazo的部分题库。",
|
||||
"http://121.36.2.245:3000/tpo"
|
||||
},
|
||||
|
||||
--游戏(网页)
|
||||
{"注[1]",
|
||||
"备注 notice",
|
||||
"game",
|
||||
"以下内容是为部分官方和较高人气同人方块游戏的简介。\n其中可能包含一些只代表个人观点的主观评价写在方括号里仅供参考,顺便也请不要因为某个方面有欠缺就直接认为 “这个游戏不好” 。",
|
||||
"以下内容是为部分官方和较高人气同人方块游戏的简介。\n其中可能包含一些只代表个人观点的主观评价写在方括号里仅供参考,顺便也请不要因为某个方面有欠缺就直接认为 “这个游戏不好”。",
|
||||
},
|
||||
{"King of Stackers",
|
||||
"回合制 网页 手机 kos kingofstackers",
|
||||
@@ -138,13 +179,13 @@ return{
|
||||
{"Ascension",
|
||||
"网页",
|
||||
"game",
|
||||
"网页游戏 | 单机/多人 | [服务器在国外可能卡]\n简称ASC,使用自己的ASC旋转系统,有不少单机模式(本游戏的堆积模式就来自ASC),对战模式目前处在测试阶段(2021/12/15)",
|
||||
"网页游戏 | 单机/多人 | [服务器在国外可能卡]\n简称ASC,使用自己的ASC旋转系统,有不少单机模式(Techmino的堆积模式就来自ASC),对战模式目前处在测试阶段(2022/04/16)",
|
||||
"https://asc.winternebs.com",
|
||||
},
|
||||
{"Jstris",
|
||||
"网页 手机",
|
||||
"game",
|
||||
"网页游戏 | 单机/多人 | 支持移动端 | [服务器在国外可能卡]\n简称JS,有常用的科研向单机模式和自定义各种参数的功能,允许拖放固定尺寸的正方形虚拟按键,但没有任何动画效果。",
|
||||
"网页游戏 | 单机/多人 | 支持移动端 | [服务器在国外可能卡]\n简称JS,有常用的科研向单机模式和自定义各种参数的功能,允许拖放固定尺寸的正方形虚拟按键,没有任何动画效果",
|
||||
"https://jstris.jezevec10.com",
|
||||
},
|
||||
{"TETR.IO",
|
||||
@@ -157,7 +198,7 @@ return{
|
||||
"网页 核 he",
|
||||
"game",
|
||||
"网页游戏 | 单机/多人 | [服务器在国外可能卡]\n有几个基础单机模式和1V1排位。",
|
||||
"https://nuketris.herokuapp.com/",
|
||||
"https://nuketris.com/",
|
||||
},
|
||||
{"Worldwide Combos",
|
||||
"网页 wwc",
|
||||
@@ -171,7 +212,7 @@ return{
|
||||
"网页游戏 | 单机/多人\n简称TF,已经关服了的网页版方块。以前人比较多,后来官服倒闭了热度下去了,不过现在有人架了私服还可以体验到。",
|
||||
"https://notrisfoes.com",
|
||||
},
|
||||
{"Tetris.com",
|
||||
{"tetris.com",
|
||||
"网页 手机",
|
||||
"game",
|
||||
"网页游戏 | 单机 | 支持移动端\ntetris.com官网上的俄罗斯方块,只有马拉松一种模式,特色是支持基于鼠标指针位置的智能控制。",
|
||||
@@ -251,7 +292,7 @@ return{
|
||||
{"Tetris Online",
|
||||
"top study",
|
||||
"game",
|
||||
"Windows | 单机/多人\n简称TO,主要用来6人内对战/单挑/刷每日40L榜/挖掘模式/打机器人。支持自定义DAS/ARR但都不能到0。\n现在还开着的服务器有:\nTO-P(波兰服,服务器在波兰,可能会卡顿)\nTO-S(研究服,研究群群友自己开的服,很稳定,需要进群注册)\nTO-X(千雪服,VUP星月千雪于20年9月开的服,还处于实验阶段)",
|
||||
"Windows | 单机/多人\n简称TO,主要用来6人内对战/单挑/刷每日40L榜/挖掘模式/打机器人。支持自定义DAS/ARR但都不能到0。\n现在还开着的服务器有:\nTO-P(波兰服,服务器在波兰,可能会卡顿)\nTO-S(研究服,研究群群友自己开的服,很稳定,需要进群注册)",
|
||||
},
|
||||
{"Tetra Online",
|
||||
"to",
|
||||
@@ -277,7 +318,7 @@ return{
|
||||
{"Touhoumino",
|
||||
"东方 车万 偷猴 chewan dongfang th",
|
||||
"game",
|
||||
"Windows | 单机\n块圈玩家自制方块,一个Nullpomino的自带资源包的改版,将东方Project元素与俄罗斯方块结合。马拉松模式结合了东方Project里的” 符卡” 机制,需要在一定时间内达成目标分数才能击破。\n[难度较大,适合有方块基础并且各项能力都较强的玩家游玩(不然都不知道自己怎么死的)。]",
|
||||
"Windows | 单机\n块圈玩家自制方块,一个Nullpomino的自带资源包的改版,将东方Project元素与俄罗斯方块结合。马拉松模式结合了东方Project里的 “符卡” 机制,需要在一定时间内达成目标分数才能击破。\n[难度较大,适合有方块基础并且各项能力都较强的玩家游玩(不然都不知道自己怎么死的)。]",
|
||||
},
|
||||
{"Tetris Blitz",
|
||||
"闪电战 ea",
|
||||
@@ -317,59 +358,59 @@ return{
|
||||
|
||||
--术语(缩写)
|
||||
{"LPM",
|
||||
"sudu",
|
||||
"速度 sudu",
|
||||
"term",
|
||||
"Line Per Minute\n行每分,体现玩家下块速度。\n\n注:不同游戏中显示的LPM算法可能不一样,例如TO中的LPM是用PPS换算的,每1PPS=24LPM,忽略掉了垃圾行的影响,不再是字面意思,本游戏中使用L’PM代表这种换算后的LPM。",
|
||||
"Line Per Minute\n行每分,体现玩家下块速度。\n\n注:不同游戏中显示的LPM算法可能不一样,例如TO中的LPM是用PPS换算的,每1PPS=24LPM,忽略掉了垃圾行的影响,不再是字面意思,Techmino中使用L’PM代表这种换算后的LPM。",
|
||||
},
|
||||
{"PPS",
|
||||
"sudu",
|
||||
"速度 sudu",
|
||||
"term",
|
||||
"Piece Per Second\n块每秒,体现玩家下块速度。",
|
||||
},
|
||||
{"BPM",
|
||||
"sudu",
|
||||
"速度 sudu",
|
||||
"term",
|
||||
"Block Per Minute\n块每分,体现玩家下块速度\n又称PPM(Piece Per Minute)",
|
||||
},
|
||||
{"KPM",
|
||||
"sudu",
|
||||
"速度 sudu",
|
||||
"term",
|
||||
"Key Per Minute\n按键每分,体现玩家按键速度。",
|
||||
},
|
||||
{"KPP",
|
||||
"anjian",
|
||||
"按键 anjian",
|
||||
"term",
|
||||
"Key Per Piece\n按键每块,体现玩家操作是否繁琐。\n学会极简提升操作效率以减少此数字。",
|
||||
},
|
||||
{"APM",
|
||||
"attack gongji",
|
||||
"攻击 attack gongji",
|
||||
"term",
|
||||
"Attack Per Minute\n攻击每分,即玩家每分钟能打出的垃圾行数。\n一定程度体现玩家攻击力。",
|
||||
},
|
||||
{"SPM",
|
||||
"send gongji",
|
||||
"发送 送出 发出 send gongji",
|
||||
"term",
|
||||
"Send Per Minute\n送出每分,即玩家每分钟实际打出去给对手的垃圾行数。\n一定程度体现玩家给对手实际造成的攻击力。",
|
||||
"[lines] Sent per minute\n送出每分,即玩家每分钟实际打出去给对手的垃圾行数。\n一定程度体现玩家给对手实际造成的攻击力。",
|
||||
},
|
||||
{"DPM",
|
||||
"dig defend",
|
||||
"挖掘 防御 防守 dig defend",
|
||||
"term",
|
||||
"Dig/Defend Per Minute\n挖掘每分,即玩家每分钟向下挖掘的垃圾行数。\n某些时候可以体现玩家生存能力。\n\n或:防御(抵消+挖掘)每分。",
|
||||
},
|
||||
{"RPM",
|
||||
"receive jieshou",
|
||||
"接收 接受 receive jieshou",
|
||||
"term",
|
||||
"Receive Per Minute\n接收每分,即玩家每分钟收到来自对手的垃圾行数。\n一定程度体现玩家被对手施加的压力。",
|
||||
},
|
||||
{"ADPM",
|
||||
"attack defend vs",
|
||||
"攻击 防御 防守 attack defend vs",
|
||||
"term",
|
||||
"Atk+Dig Per Minute\n攻击+挖掘每分,用于在同一局游戏内对比玩家间水平差距,比APM更准确一些。在TETR.IO中叫VS的数据就是ADPM(调整过比例,具体是Atk + Dig per 100s)",
|
||||
"Atk & Dig Per Minute\n攻击+挖掘每分,用于在同一局游戏内对比玩家间水平差距,比APM更准确一些。在TETR.IO中叫 “VS” 的数据就是ADPM(调整过比例,具体是Atk & Dig per 100s)",
|
||||
},
|
||||
{"APL",
|
||||
"xiaolv",
|
||||
"效率 xiaolv xiaolyu",
|
||||
"term",
|
||||
"Attack Per Line\n攻击每行,也叫效率,体现玩家攻击的行利用率。",
|
||||
"Attack Per Line\n攻击每行,也叫效率,体现玩家攻击的行利用率。例如消四和T旋的效率就比消二和消三高。",
|
||||
},
|
||||
|
||||
--术语(消除名)
|
||||
@@ -391,12 +432,12 @@ return{
|
||||
{"Techrash",
|
||||
"4 tetris xiaosi",
|
||||
"term",
|
||||
"一次消除四行(Techmino限定名称)。",
|
||||
"一次消除四行(Techmino限定)。",
|
||||
},
|
||||
{"Tetris",
|
||||
"4 xiaosi",
|
||||
"term",
|
||||
"商标,Tetris游戏名,同时也是别的方块游戏里消四行的名字。\n含义是Tetra(古希腊语 四)+Tennis(游戏原作者喜欢的运动)。\n现在版权在TTC(The Tetris Company) 手上, 任天堂和世嘉开发游戏是 TTC 授权的, 它们自己并没有Tetris的版权。",
|
||||
"商标,Tetris游戏名,同时也是别的方块游戏里消四行的名字。\n含义是Tetra(古希腊语, 四 <τέτταρες>)+ Tennis(网球 游戏原作者喜欢的运动)。\n现在版权在TTC(The Tetris Company)手上,任天堂和世嘉开发游戏是 TTC 授权的, 它们自己并没有Tetris的版权。",
|
||||
},
|
||||
{"PC",
|
||||
"全消 全清 perfectclear ac allclear quanxiao quanqing",
|
||||
@@ -406,7 +447,7 @@ return{
|
||||
{"HPC",
|
||||
"hc clear banqing banquanqing banquanxiao",
|
||||
"term",
|
||||
"Half-PC\nPC(全消)的外延, “下方有剩余方块” 的全消(特别地,如果只消1行则必须不剩余玩家放置的方块),能打出一些攻击和防御(Techmino限定)。",
|
||||
"Half-PC\nPC(全消)的外延,“下方有剩余方块” 的全消(特别地,如果只消1行则必须不剩余玩家放置的方块),能打出一些攻击和防御(Techmino限定)。",
|
||||
},
|
||||
|
||||
--术语(旋转相关)
|
||||
@@ -423,9 +464,9 @@ return{
|
||||
{"All Spin",
|
||||
"allspin",
|
||||
"term",
|
||||
"一种规则,指所有方块的Spin都有攻击力,而不止是T-spin才有攻击(即T-spin Only)。",
|
||||
"一种规则,指所有方块的Spin都有攻击力,而不止是T-spin才有攻击(即T-Spin Only)。",
|
||||
},
|
||||
{"T-spin",
|
||||
{"T-Spin",
|
||||
"T转 T旋 旋转 tspin txuan",
|
||||
"term",
|
||||
"在官方规则中,当T方块在锁定前的最后一个操作是旋转,并且锁定后旋转中心对应的四个斜角位置有三个不是空气,那么这就是一个T-spin。\nPS:如果满足一些额外条件会被打上mini标签减少攻击力。",
|
||||
@@ -433,25 +474,25 @@ return{
|
||||
{"TSS",
|
||||
"t1 tspin",
|
||||
"term",
|
||||
"T-Spin Single\n指T方块Spin消1行。简称T1。",
|
||||
"T-Spin Single\n指使用T方块Spin并一次消除1行。简称T1。",
|
||||
},
|
||||
{"TSD",
|
||||
"t2 tspin",
|
||||
"term",
|
||||
"T-spin Double\n指T方块Spin消2行。简称T2。",
|
||||
"T-spin Double\n指使用T方块Spin并一次消除2行。简称T2。",
|
||||
},
|
||||
{"TST",
|
||||
"t3 tspin",
|
||||
"term",
|
||||
"T-spin Triple\n指T方块Spin消3行。简称T3。",
|
||||
"T-spin Triple\n指使用T方块Spin并一次消除3行。简称T3。",
|
||||
},
|
||||
{"MTSS",
|
||||
"mini tspin",
|
||||
"mini tspin minitspinsingle tsms tspinminisingle",
|
||||
"term",
|
||||
"Mini T-spin Single\n指T方块Mini Spin消1行(不同游戏判定不一样)。\n部分游戏中可能叫做 “T-Spin Mini” 。",
|
||||
"Mini T-spin Single\n指T方块Mini Spin消1行(不同游戏判定不一样)。\n部分游戏中可能叫做 “T-Spin Mini”。",
|
||||
},
|
||||
{"MTSD",
|
||||
"mini tspin",
|
||||
"mini tspin minitspindouble tsmd tspinminidouble",
|
||||
"term",
|
||||
"Mini T-spin Double\n指T方块Mini Spin消2行(仅部分游戏内存在且判定不一样)。",
|
||||
},
|
||||
@@ -460,15 +501,15 @@ return{
|
||||
"term",
|
||||
"由于O方块旋转后形状不变,只能左右移动,所以经常被卡住,于是方块圈就有了O-spin的梗:\n有人做过T99/TF中的O变形的特效视频且广为流传;\nT-ex设计的旋转系统可以用spin使O传送进坑;\nTech设计的变形系统中可以旋转O来变形/传送进入一些特定形状的洞。",
|
||||
},
|
||||
{"旋转系统(踢墙)",
|
||||
{"旋转系统 (踢墙)",
|
||||
"旋转系统 踢墙 xuanzhuanxitong wallkick tiqiang",
|
||||
"term",
|
||||
"现代方块游戏中,方块可以绕着旋转中心(在本游戏中可见)旋转(部分游戏没有固定中心),如果旋转后和场地或墙壁有重合,会根据<从哪个方向转到哪个方向>进行一些偏移测试(这个偏移称为踢墙),不会卡住转不动,同时也可以让方块钻进入一些特定形状的洞。",
|
||||
"现代方块游戏中,方块可以绕着旋转中心(Techmino中可见)旋转(部分游戏没有固定中心),如果旋转后和场地或墙壁有重合,会根据<从哪个方向转到哪个方向>进行一些偏移测试(这个偏移称为踢墙),不会卡住转不动,同时也可以让方块钻进入一些特定形状的洞。",
|
||||
},
|
||||
{"方块朝向",
|
||||
"旋转 朝向 xuanzhuan chaoxiang orientation direction 0r2l 02 20 rl lr",
|
||||
"term",
|
||||
"在SRS或者类SRS的旋转系统中需要说明方块朝向的时候, “朝下” “竖着” 等词描述太模糊。\nSRS中每种方块的初始状态固定,所以我们使用0(原位)、R(右,即顺时针转一次)、2(转两下,即180°)、L(左,即逆时针转一次)四个字符表示方块的四种状态,从原位(0)开始顺时针转一圈四个状态是0R2L。\n最早见于SRS踢墙表的行首,0→L表示原位逆时针转一次到L状态,0→R表示原位顺时针转一次到R状态,2→R代表从180°状态逆时针转一次到R状态。",
|
||||
"在SRS或者类SRS的旋转系统中需要说明方块朝向的时候,“朝下” “竖着” 等词描述太模糊。\nSRS中每种方块的初始状态固定,所以我们使用0(原位)、R(右,即顺时针转一次)、2(转两下,即180°)、L(左,即逆时针转一次)四个字符表示方块的四种状态,从原位(0)开始顺时针转一圈四个状态是0R2L。\n最早见于SRS踢墙表的行首,0→L表示原位逆时针转一次到L状态,0→R表示原位顺时针转一次到R状态,2→R代表从180°状态逆时针转一次到R状态。",
|
||||
},
|
||||
{"ARS",
|
||||
"旋转系统 rotate",
|
||||
@@ -483,7 +524,7 @@ return{
|
||||
{"ASC+ RS",
|
||||
"旋转系统 asc+rs ascplusrs rotate",
|
||||
"term",
|
||||
"Techmino中对ASC的修改版本,添加了180°转的踢墙表。",
|
||||
"Techmino中ASC的修改版本,添加了180°转的踢墙表。",
|
||||
},
|
||||
{"BRS",
|
||||
"旋转系统 rotate",
|
||||
@@ -503,7 +544,7 @@ return{
|
||||
{"C2sym",
|
||||
"旋转系统 rotate",
|
||||
"term",
|
||||
"Techmino中对C2RS的修改版本,根据不同的方块形状和状态,各自选择优先测试左还是右。",
|
||||
"Techmino中C2RS的修改版本,根据不同的方块形状和状态,各自选择优先测试左还是右。",
|
||||
},
|
||||
{"DRS",
|
||||
"旋转系统 rotate",
|
||||
@@ -513,7 +554,7 @@ return{
|
||||
{"NRS",
|
||||
"旋转系统 rotate",
|
||||
"term",
|
||||
"Nintendo Rotation System.",
|
||||
"Nintendo Rotation System,NES和GB块使用的旋转系统。NRS有两个互为镜像的版本,左旋版用于GB,右旋版用于NES。",
|
||||
},
|
||||
{"SRS",
|
||||
"超级旋转系统 rotate",
|
||||
@@ -556,44 +597,44 @@ return{
|
||||
{"现代方块",
|
||||
"modern xiandaikuai tetris",
|
||||
"term",
|
||||
"现代方块是一个模糊的概念,这里列出一部分 “标准” 规则,满足大部分的都可以认为是现代方块:\n1.可见场地大小是10×20,不过上方空间也是存在的,上限可以自己定,一些游戏用的是40;\n2.七种方块从顶部正中间出现(奇数宽方块偏左,高度可以是方块底部或顶部贴着场地顶),同一种方块的朝向(一般是平的面朝下)和颜色都一致;\n3.一个合适的随机出块机制(常见的详见Bag7词条和His词条);\n4.一个合适的的旋转系统(至少有双旋,详见双旋词条)(最好是SRS或类SRS,详见SRS词条);\n5.一个合适的锁定延迟系统,详见锁定延迟词条;\n6.一个合适的死亡判定,详见死亡判定词条;\n7.有Next功能(一般是3~6个,也有1个的),详见Next词条,并且方向和出现时候的方向一致;\n8.有Hold功能,详见Hold词条;\n9.有DAS系统负责精密并且快速的左右移动,详见DAS词条;\n10.如果有出块延迟和消行延迟,那么需要有提前旋转/Hold系统,详见IRS和IHS词条,IMS是本游戏特有。",
|
||||
"现代方块是一个模糊的概念,这里列出一部分 “标准” 规则,满足大部分的都可以认为是现代方块:\n1.可见场地大小是10×20,不过上方空间也是存在的,上限可以自己定,一些游戏用的是40;\n2.七种方块从顶部正中间出现(奇数宽方块偏左,高度可以是方块底部或顶部贴着场地顶),同一种方块的朝向(一般是平的面朝下)和颜色都一致;\n3.一个合适的随机出块机制(常见的详见Bag7词条和His词条);\n4.一个合适的的旋转系统(至少有双旋,详见双旋词条)(最好是SRS或类SRS,详见SRS词条);\n5.一个合适的锁定延迟系统,详见锁定延迟词条;\n6.一个合适的死亡判定,详见死亡判定词条;\n7.有Next功能(一般是3~6个,也有1个的),详见Next词条,并且方向和出现时候的方向一致;\n8.有Hold功能,详见Hold词条;\n9.有DAS系统负责精密并且快速的左右移动,详见DAS词条;\n10.如果有出块延迟和消行延迟,那么需要有提前旋转/Hold系统,详见IRS和IHS词条,IMS是Techmino特有。",
|
||||
},
|
||||
{"方块形状",
|
||||
"xingzhuang shape tetromino tetrimino",
|
||||
"term",
|
||||
"在标准的方块游戏中,用到的方块是所有的 “四连块” ,即四个正方形共用边连接成的形状。\n在不允许翻转,只允许旋转的情况下,四连块一共有七种,根据它们的形状一般分别叫做Z、S、J、L、T、O、I。",
|
||||
"在标准的方块游戏中,用到的方块是所有的 “四连块”,即四个正方形共用边连接成的形状。\n在不允许翻转,只允许旋转的情况下,四连块一共有七种,根据它们的形状一般分别叫做Z、S、J、L、T、O、I。\n\n详见下方 “方块名称”。",
|
||||
},
|
||||
{"方块颜色",
|
||||
"yanse color colour tetromino tetrimino",
|
||||
"term",
|
||||
"主流方块游戏中七种块的颜色会使用同一套彩虹配色:\nZ:红 S:绿 J:蓝 L:橙 T:紫 O:黄 I:青\n\nTechmino默认也使用这一套 “标准” 配色。",
|
||||
},
|
||||
{"提前旋转 IRS",
|
||||
{"提前旋转(IRS)",
|
||||
"irs initialrotatesystem",
|
||||
"term",
|
||||
"Initial Rotation System 提前旋转系统\n方块出现前提前按下旋转后,出现时就是转好的形状,有时可以避免死亡。",
|
||||
},
|
||||
{"提前暂存 IHS",
|
||||
{"提前暂存(IHS)",
|
||||
"ihs initialholdsystem",
|
||||
"term",
|
||||
"Initial Hold System 提前Hold系统\n方块出现前提前按下hold后,直接出现hold里的方块,有时可以避免死亡。",
|
||||
},
|
||||
{"提前移动 IMS",
|
||||
{"提前移动(IMS)",
|
||||
"ims initialmovesystem",
|
||||
"term",
|
||||
"Initial Move System 提前移动系统\n方块出现前提前按住移动后,出现时会朝移动方向偏一格,有时可以避免死亡(Techmino限定)。\n注:需要块出现时das已充满",
|
||||
},
|
||||
{"预览 Next",
|
||||
{"预览(Next)",
|
||||
"下一个 next yulan xiayige",
|
||||
"term",
|
||||
"指示后边几个块的顺序。\n提前思考手上这块怎么摆可以让后面轻松是玩家提升的必需技能。\n\n关于玩家玩的时候到底看了几个Next:这个数字并不固定,不同玩家、不同模式、不同局面,计算next的数量都不一样,通过调整可见Next数量打40L比较时间等方式测得的数据并不准确。\n\n具体例如,一个比较熟练的玩家几乎永远会提前算好一个Next,不然不会锁定手里的块;场地上将要出现或可以构造消四洞(T坑)的时候会找最近的I(T)什么时候来,如果太远了就会直接挖掉放弃本次攻击以防被对手偷袭。这两种情况并不独立,有很多介于中间的情况。所以,一个玩家看的Next数量是时刻在变的, “某人看几个Next” 没有精确答案,必须在指明情况的时候数字才能作为参考。",
|
||||
"指示后边几个块的顺序。\n提前思考手上这块怎么摆可以让后面轻松是玩家提升的必需技能。\n\n关于玩家玩的时候到底看了几个Next:这个数字并不固定,不同玩家、不同模式、不同局面,计算next的数量都不一样,通过调整可见Next数量打40L比较时间等方式测得的数据并不准确。\n\n具体例如,一个比较熟练的玩家几乎永远会提前算好一个Next,不然不会锁定手里的块;场地上将要出现或可以构造消四洞(T坑)的时候会找最近的I(T)什么时候来,如果太远了就会直接挖掉放弃本次攻击以防被对手偷袭。这两种情况并不独立,有很多介于中间的情况。所以,一个玩家看的Next数量是时刻在变的,“某人看几个Next” 没有精确答案,必须在指明情况的时候数字才能作为参考。",
|
||||
},
|
||||
{"暂存 Hold",
|
||||
{"暂存(Hold)",
|
||||
"交换 hold zancun",
|
||||
"term",
|
||||
"将手里的方块和Hold槽中的交换,一般不能连续使用。\n用来调整块序,更容易摆出你想要的形状。\n本游戏中有一个 “物理Hold” 机制,开启后Hold换出的方块会直接出现在当前方块所在的位置\n\n用不用Hold各有好处,不用的话看到序列是什么就是什么,减少了思考量;并且减少了按键的种类,操作简单容易提升KPS,有些人的40L记录就是不用Hold打出的。用Hold可以灵活地调整序列,减少高重力等规则带来的难度,算力足够的情况下可以达成更复杂的目标,甚至反过来显著减少总按键数。",
|
||||
"将手里的方块和Hold槽中的交换,一般不能连续使用。\n用来调整块序,更容易摆出你想要的形状。\nTechmino中有一个 “物理Hold” 机制,开启后Hold换出的方块会直接出现在当前方块所在的位置\n\n用不用Hold各有好处,不用的话看到序列是什么就是什么,减少了思考量;并且减少了按键的种类,操作简单容易提升KPS,有些人的40L记录就是不用Hold打出的。用Hold可以灵活地调整序列,减少高重力等规则带来的难度,算力足够的情况下可以达成更复杂的目标,甚至反过来显著减少总按键数。",
|
||||
},
|
||||
{"置换 Swap",
|
||||
{"置换(Swap)",
|
||||
"交换 swap hold jiaohuan zancun",
|
||||
"term",
|
||||
"Hold的另一种表现形式,将手里的方块和Next槽中的第一个交换,一般同样不能连续使用。",
|
||||
@@ -618,12 +659,12 @@ return{
|
||||
"term",
|
||||
"在……之下\n用于表示成绩,单位一般可不写,比如40L成绩Sub 30是秒,1000行Sub 15是分钟,不写项目默认是40L\n\n例:39.95s是Sub 40,40.###s不是Sub 40。\n请不要使用Sub 62之类的词,因为sub本身就是表示大约, 一分钟左右的成绩精确到5~10s就可以了,一般30s以内的成绩用sub## 的时候才会精确到1s。",
|
||||
},
|
||||
{"挖掘 Dig",
|
||||
"downstack ds wajue",
|
||||
{"挖掘(Dig)",
|
||||
"挖掘 downstack ds wajue",
|
||||
"term",
|
||||
"指消除从场地底部进入的垃圾行(对手攻击打过来或者模式中自动生成)。也叫downstack(DS)。",
|
||||
},
|
||||
{"捐赠 Donate",
|
||||
{"捐赠(Donate)",
|
||||
"捐献 juanzeng",
|
||||
"term",
|
||||
"指刻意临时堵住(可以消四的)洞做T-spin,打出T-spin后就会解开,是比较进阶的保持/提升火力的技巧。\n不标准用法:有时候只要堵住了个坑,即使不是消四洞也会用这个词。",
|
||||
@@ -638,18 +679,18 @@ return{
|
||||
"term",
|
||||
"攻击指通过消除给对手发送垃圾行;\n防御(相杀)指别人打过来攻击之后用攻击抵消;\n反击指抵消/吃下所有攻击后打出攻击。\n\n注:大多数方块游戏的攻防是1:1的,4行攻击抵消对手的4行攻击。",
|
||||
},
|
||||
{"连击 Combo",
|
||||
{"连击(Combo)",
|
||||
"ren",
|
||||
"term",
|
||||
"从第二次消除起叫1 REN/Combo,打出的攻击根据游戏设计的不同也不同。 “REN” 这个名称来源于日语中的” 連” (れん)。",
|
||||
"从第二次消除起叫1 REN/Combo,打出的攻击根据游戏设计的不同也不同。“REN” 这个名称来源于日语中的 “連”(れん)。",
|
||||
},
|
||||
{"Spike",
|
||||
"baofa xingbao",
|
||||
"term",
|
||||
"爆发攻击\n指短时间内打出大量的攻击,本游戏和TETR.IO中有Spike计数器,可以看到自己短时间内打出了多少攻击。\n注意,网络卡顿导致的累计攻击瞬间释放不算Spike。",
|
||||
"爆发攻击\n指短时间内打出大量的攻击,Techmino和TETR.IO中有Spike计数器,可以看到自己短时间内打出了多少攻击。\n注意,网络卡顿导致的累计攻击瞬间释放不算Spike。",
|
||||
},
|
||||
{"Side",
|
||||
"连击",
|
||||
"连击 sidewell",
|
||||
"term",
|
||||
"在场地旁边空出几列的堆叠法\n用来制造连击,对于新人是一个不错的进攻方法。但由于起楼的时候可能会被顶死而且总效率不高,导致高端玩家不会单独做Wide,更可能会在中局堆好炮并且观察到对手短时间内不会打出伤害的时候可以造,用来大幅加强瞬时火力。",
|
||||
},
|
||||
@@ -691,14 +732,14 @@ return{
|
||||
{"C4W",
|
||||
"连击 ·center4wide centre4wide",
|
||||
"term",
|
||||
"Center 4 Wide\n中间空四列,一种连击打法,能打出很高的连击,利用了大多数专业对战方块游戏的死亡判定机制,可以放心堆高不担心被顶死,然后开始连击。是一种利用游戏机制的不平衡策略(尤其在开局时),观赏性不是很强还可以以弱胜强,成本太低所以成为了部分游戏中约定的类似 “禁招” 的东西,请在了解情况后再使用,不然可能会被别人骂。\n本游戏里考虑到了平衡问题,所以c4w的强度没有别的游戏那么夸张。",
|
||||
"Center 4 Wide\n中间空四列,一种连击打法,能打出很高的连击,利用了大多数专业对战方块游戏的死亡判定机制,可以放心堆高不担心被顶死,然后开始连击。是一种利用游戏机制的不平衡策略(尤其在开局时),观赏性不是很强还可以以弱胜强,成本太低所以成为了部分游戏中约定的类似 “禁招” 的东西,请在了解情况后再使用,不然可能会被别人骂。\nTechmino中虑到了平衡问题,所以c4w的强度没有别的游戏那么夸张。",
|
||||
},
|
||||
{"N-Res",
|
||||
"连击 ·residual c4w s4w",
|
||||
"term",
|
||||
"N-Residual\nN-剩余,指4w连击楼底部留几个方格,常用的是3-Res和6-Res。\n3-Res路线少比较好学,成功率也很高,实战完全够用\n6-Res路线多更难用,但是计算力很强的话比3-Res更稳,也可以用来完成特殊挑战(比如本游戏的c4w练习要求100连击通关)",
|
||||
"N-Residual\nN-剩余,指4w连击楼底部留几个方格,常用的是3-Res和6-Res。\n3-Res路线少比较好学,成功率也很高,实战完全够用\n6-Res路线多更难用,但是计算力很强的话比3-Res更稳,也可以用来完成特殊挑战(比如Techmino的c4w练习要求100连击通关)。\n\n注:优先使用6-Res,然后是3-res和5-Res,最后是4-Res",
|
||||
},
|
||||
{"6-3堆叠法",
|
||||
{"6–3堆叠法",
|
||||
"六三 63",
|
||||
"term",
|
||||
"指左边6列右边3列的堆叠方式。在玩家有足够的计算能力后可以减少堆叠所用的按键数(反之可能甚至会增加),是主流的用于减少操作数的高端40L堆叠方式,原理跟出块位置是中间偏左有关。",
|
||||
@@ -711,7 +752,7 @@ return{
|
||||
{"死亡判定",
|
||||
"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注:Techmino使用的死亡判定默认不开启第二、三条。",
|
||||
},
|
||||
{"缓冲区",
|
||||
"buffer zone huanchongqu",
|
||||
@@ -727,44 +768,44 @@ return{
|
||||
{"下落速度",
|
||||
"重力 drop speed zhongli gravity",
|
||||
"term",
|
||||
"一般用*G表示方块的下落速度,意思是每一帧方块往下移动多少格,一秒下落一格就是1/60G(默认60fps),可以看出G是一个很大的单位。因为场地就20格,所以一般认为20G即为上限,详见20G词条。",
|
||||
"一般用*G表示方块的下落速度,意思是每一帧方块往下移动多少格,一秒下落一格就是1/60G(默认60fps),可以看出G是一个很大的单位。因为场地就20格,所以一般认为20G即为上限,详见20G词条。\n在Techmino中描述重力的方式是 “每过多少帧下落一格”,例如一秒落一格就对应60(默认60fps)",
|
||||
},
|
||||
{"20G",
|
||||
"高重力",
|
||||
"term",
|
||||
"现代方块的最高下落速度,表观就是方块瞬间到底,不存在中间的下落过程,可能会让方块无法跨越壕沟/从山谷爬出。\n20G一般指的其实是 “无限下落速度” ,就算场地不止20格, “20G” 也会让方块瞬间到底。\n本游戏(和部分其他游戏,推荐这么设计)中20G的优先级比其他玩家操作都高,即使是0arr的水平方向 “瞬间移动” 中途也会受到20G的影响。",
|
||||
"现代方块的最高下落速度,表观就是方块瞬间到底,不存在中间的下落过程,可能会让方块无法跨越壕沟/从山谷爬出。\n20G一般指的其实是 “无限下落速度” ,就算场地不止20格,“20G” 也会让方块瞬间到底。\nTechmino(和部分其他游戏,推荐这么设计)中20G的优先级比其他玩家操作都高,即使是0arr的水平方向 “瞬间移动” 中途也会受到20G的影响。",
|
||||
},
|
||||
{"锁定延迟 LD",
|
||||
{"锁定延迟(LD)",
|
||||
"重力 lock delay lockdown delay suoyan zhongli gravity",
|
||||
"term",
|
||||
"方块<碰到地面到锁定>之间的时间。经典块仅方块下落一格时刷新倒计时,而现代方块中往往任何操作都将重置该倒计时(但是方块本身必须可以移动/旋转),所以连续移动和操作可以让方块不马上锁定,拖一会时间(本游戏和部分游戏重置次数有限,一般是15)。",
|
||||
"方块<碰到地面到锁定>之间的时间。经典块仅方块下落一格时刷新倒计时,而现代方块中往往任何操作都将重置该倒计时(但是方块本身必须可以移动/旋转),所以连续移动和操作可以让方块不马上锁定,拖一会时间(Techmino和部分游戏重置次数有限,一般是15)。",
|
||||
},
|
||||
{"出块延迟 ARE",
|
||||
{"出块延迟(ARE)",
|
||||
"delay chukuaiyanchi",
|
||||
"term",
|
||||
"ARE。方块<锁定完成到下一个方块出现>之间的时间。",
|
||||
},
|
||||
{"消行延迟 ARE",
|
||||
{"消行延迟(ARE)",
|
||||
"line delay xiaohangyanchi",
|
||||
"term",
|
||||
"Line ARE。方块<锁定完成能消行时的消行动画>占据的时间。",
|
||||
},
|
||||
{"窒息延迟 DD",
|
||||
{"窒息延迟(DD)",
|
||||
"choke are delay zhixiyanchi",
|
||||
"term",
|
||||
"当前方块锁定后如果下一块的生成位置被阻挡,那么下一块的出块延迟会被再额外加上这个延迟的值,方便使用提前系统来避免死亡\n想法来自NOT_A_ROBOT",
|
||||
},
|
||||
{"极简 Finesse",
|
||||
{"极简(Finesse)",
|
||||
"极简操作 最简操作 finesse jijiancaozuo zuijiancaozuo",
|
||||
"term",
|
||||
"用最少的按键数将方块移到想去的位置的技术(大多数时候只考虑纯硬降的落点),节约时间和减少Misdrop。\n\n该技能学习越早越好,建议先去找教程视频,看懂了然后自己多练习,开始以准确率第一,速度快慢不重要,熟练后自然就快了。\n\n注意,本游戏使用的极简判定系统不是说完全和理论最少操作数一样,而是不需要软降就能达到的位置才会按照标准出块方向和你的按键次数执行极简检测,故在此不像js存在软降后误杀。但是多了一些新的条件,比如【手上和Hold一样/已经按了超过3次按键后】再hold后按键次数不重置(让下一块极简失误)。\n极简率计算:\n没有超过标准极简法操作数的为Perfect计100%,超出一步为Great计50%,超出两步为Bad计25%,两步以上为Miss计0%,其中Bad和Miss会断连\n\n注:20G下极简系统和0G一样工作,所以得到的数值不准确,参考价值偏低。",
|
||||
"用最少的按键数将方块移到想去的位置的技术(大多数时候只考虑纯硬降的落点),节约时间和减少Misdrop。\n\n该技能学习越早越好,建议先去找教程视频,看懂了然后自己多练习,开始以准确率第一,速度快慢不重要,熟练后自然就快了。\n\n注意,Techmino使用的极简判定系统不是说完全和理论最少操作数一样,而是不需要软降就能达到的位置才会按照标准出块方向和你的按键次数执行极简检测,故在此不像js存在软降后误杀。但是多了一些新的条件,比如【手上和Hold一样/已经按了超过3次按键后】再hold后按键次数不重置(让下一块极简失误)。\n极简率计算:\n没有超过标准极简法操作数的为Perfect计100%,超出一步为Great计50%,超出两步为Bad计25%,两步以上为Miss计0%,其中Bad和Miss会断连\n\n注:20G下极简系统和0G一样工作,所以得到的数值不准确,参考价值偏低。",
|
||||
},
|
||||
{"科研",
|
||||
"keyan",
|
||||
"term",
|
||||
"常用语,指在低重力的单人模式里减速研究怎么做各种T-spin,本游戏中拓展了含义,用于称呼几乎需要全程Spin的游戏模式。",
|
||||
"常用语,指在低重力的单人模式里减速研究怎么做各种T-spin,Techmino中拓展了含义,用于称呼几乎需要全程Spin的游戏模式。",
|
||||
},
|
||||
{"手感 Handling",
|
||||
{"手感(Handling)",
|
||||
"feel shougan",
|
||||
"term",
|
||||
"决定手感的几个主要因素:\n1. 输入延迟受设备配置或者设备状况影响。可以重启/换设备解决;\n2. 程序运行稳定性程序设计或.实现)得不好,时不时会卡一下。把设置画面效果拉低可能可以缓解;\n3. 游戏设计故意的。自己适应;\n4. 参数设置设置不当。去改设置;\n5. 游玩姿势姿势不当。不便用力,换个姿势;\n6. 换键位或者换设备后不适应,操作不习惯。多习惯习惯,改改设置;\n7. 肌肉疲劳反应和协调能力下降。睡一觉或者做点体育运动,过段时间(也可能要几天)再来玩。",
|
||||
@@ -772,7 +813,7 @@ return{
|
||||
{"DAS通俗",
|
||||
"arr simple",
|
||||
"term",
|
||||
"打字时按住o,你会看到:ooooooooooo\n在时间轴上:o-----------o-o-o-o-o-o-o-o-o-o\n-----------就是das长度,-就是arr长度。\n详见 DAS & ARR 词条。",
|
||||
"打字时按住o,你会看到:ooooooooooo…\n在时间轴上:o—————o-o-o-o-o-o-o-o-o…\n—————就是das长度,-就是arr长度。\n详见 DAS & ARR 词条。",
|
||||
},
|
||||
{"DAS & ARR",
|
||||
"灵敏度 arr",
|
||||
@@ -784,20 +825,25 @@ return{
|
||||
"term",
|
||||
"对于不是刚入门的并且了解极简操作的玩家来说推荐ARR=0,DAS=4~6(具体看个人手部协调性,只要能控制区别就不大)。\n新人如果实在觉得太快可以适当增加一点DAS,ARR要改的话强烈建议不要超过2\n\n最佳调整方法:DAS越小越好,小到依然能准确区分单点/长按为止;ARR能0就0,游戏不允许的话就能拉多小拉多小。",
|
||||
},
|
||||
{"DAS打断 DCD",
|
||||
{"DAS打断(DCD)",
|
||||
"dascut dcd daduan",
|
||||
"term",
|
||||
"本游戏中指玩家的操作焦点转移到新方块的瞬间,此时减小(重置)DAS计时器,让自动移动不会立刻生效,减少 “移动键松开晚了导致下一块一出来就立即开始移动” 的情况\n注:其他游戏中的DAS打断机制可能和本游戏的有区别,仅供参考。",
|
||||
"Techmino中指玩家的操作焦点转移到新方块的瞬间,此时减小(重置)DAS计时器,让自动移动不会立刻生效,减少 “移动键松开晚了导致下一块一出来就立即开始移动” 的情况\n注:其他游戏中的DAS打断机制可能和Techmino的有区别,仅供参考。",
|
||||
},
|
||||
{"误硬降打断 HCD",
|
||||
{"误硬降打断(HCD)",
|
||||
"autolockcut mdcut daduan",
|
||||
"term",
|
||||
"为了防止玩家硬降时当前方块已经锁定,下一块出现就被立刻硬降导致严重md,所以设计了此打断参数。\n方块自然锁定之后几帧内硬降键是无效的,具体看设置了多久。\n注:其他游戏中的防误硬降机制可能和本游戏的有区别,仅供参考。",
|
||||
"为了防止玩家硬降时当前方块已经锁定,下一块出现就被立刻硬降导致严重md,所以设计了此打断参数。\n方块自然锁定之后几帧内硬降键是无效的,具体看设置了多久。\n注:其他游戏中的防误硬降机制可能和Techmino的有区别,仅供参考。",
|
||||
},
|
||||
{"软降倍率 SDF",
|
||||
{"软降倍率(SDF)",
|
||||
"软降速度 sdf softdropfactor",
|
||||
"term",
|
||||
"Soft Drop Factor,软降速度因子(倍率)\n部分游戏中的软降机制就是在按住软降键时方块受到的重力变为原来的若干倍,SDF就是这个变大的倍数。\n基本所有官块和TETR.IO使用这个机制,但本游戏不使用。",
|
||||
"Soft Drop Factor,软降速度因子(倍率)\n部分游戏中的软降机制就是在按住软降键时方块受到的重力变为原来的若干倍,SDF就是这个变大的倍数。\n基本所有官块和TETR.IO使用这个机制,但Techmino不使用。",
|
||||
},
|
||||
{"方块名称",
|
||||
"mino",
|
||||
"term",
|
||||
"这是一个Techmino使用的所有方块的名称和其对应的形状:\n四连块:\nZ: "..CHAR.mino.Z..", S: "..CHAR.mino.S..", J: "..CHAR.mino.J..", L: "..CHAR.mino.L..", T: "..CHAR.mino.T..", O: "..CHAR.mino.O..", I: "..CHAR.mino.I..";\n\n五连块:\nZ5: "..CHAR.mino.Z5..", S5: "..CHAR.mino.S5..", P: "..CHAR.mino.P..", Q: "..CHAR.mino.Q..", F: "..CHAR.mino.F..", E: "..CHAR.mino.E..", T5: "..CHAR.mino.T5..", U: "..CHAR.mino.U..", V: "..CHAR.mino.V..", W: "..CHAR.mino.W..", X: "..CHAR.mino.X..", J5: "..CHAR.mino.J5..", L5: "..CHAR.mino.L5..", R: "..CHAR.mino.R..", Y: "..CHAR.mino.Y..", N: "..CHAR.mino.N..", H: "..CHAR.mino.H..", I5: "..CHAR.mino.I5..";\n\n一至三连块:\nI3: "..CHAR.mino.I3..", C: "..CHAR.mino.C..", I2: "..CHAR.mino.I2..", O1: "..CHAR.mino.O1..".",
|
||||
},
|
||||
{"Bag7出块",
|
||||
"bag出块 bag7bag",
|
||||
@@ -807,7 +853,7 @@ return{
|
||||
{"His出块",
|
||||
"history",
|
||||
"term",
|
||||
"一种的出块方式,例如His4 Roll6 (h4r6)就是在随机生成新的 Next 的时候,随机一个跟最后4次生成的Next中有一样的,就重新随机,直到已经尝试6次或和那4个都不一样。\n本游戏的His序列模式中最大Roll次数为序列长度的一半(向上取整)\n\n是纯随机出块的一大改进,大大减小了连续出几个SZ(洪水)的概率。",
|
||||
"一种的出块方式,例如His4 Roll6 (h4r6)就是在随机生成新的 Next 的时候,随机一个跟最后4次生成的Next中有一样的,就重新随机,直到已经尝试6次或和那4个都不一样。\nTechmino的His序列模式中最大Roll次数为序列长度的一半(向上取整)\n\n是纯随机出块的一大改进,大大减小了连续出几个SZ(洪水)的概率。",
|
||||
},
|
||||
{"HisPool出块",
|
||||
"history pool hispool",
|
||||
@@ -817,24 +863,24 @@ return{
|
||||
{"bagES出块",
|
||||
"bages出块",
|
||||
"term",
|
||||
"(该词仅在本游戏内使用)Bag Easy-Start(Bag简单开局),Bag算法的分支,开局第一包的第一块不会是S/Z/O/S5/Z5/F/E/W/X/N/H。",
|
||||
"(该词仅在Techmino内使用)Bag Easy-Start(Bag简单开局),Bag算法的分支,开局第一包的第一块不会是S/Z/O/S5/Z5/F/E/W/X/N/H。",
|
||||
},
|
||||
{"Reverb出块",
|
||||
"reverb出块",
|
||||
"term",
|
||||
"(该词仅在本游戏内使用)回声出块,Bag算法的分支,把Bag的每一块重复随机次数(重复越多概率越小,理论范围是0~6,具体比较复杂这里不展开)",
|
||||
"(该词仅在Techmino内使用)回声出块,Bag算法的分支,把Bag的每一块重复随机次数(重复越多概率越小,理论范围是0~6,具体比较复杂这里不展开)",
|
||||
},
|
||||
{"超连点 Hypertap",
|
||||
{"超连点(Hypertap)",
|
||||
"chaoliandian",
|
||||
"term",
|
||||
"快速震动手指,实现比长按更快速+灵活的高速单点移动,主要在经典块的高难度下(因为DAS不可调而且特别慢,高速下很容易md导致失败,此时手动连点就比自动移动更快)或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人称为 “Hypertapper” 。",
|
||||
"快速震动手指,实现比长按更快速+灵活的高速单点移动,主要在经典块的高难度下(因为DAS不可调而且特别慢,高速下很容易md导致失败,此时手动连点就比自动移动更快)或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人称为 “Hypertapper”。",
|
||||
},
|
||||
{"轮指 Rolling",
|
||||
{"轮指(Rolling)",
|
||||
"lunzhi liandian",
|
||||
"term",
|
||||
"另一种快速连点方法,用于DAS/ARR设置非常慢时的高重力(1G左右)模式。\n先把手柄(键盘……可能也行吧)悬空摆好,比如架在腿上,要连点某个键的时候一只手虚按按键,另外一只手的几根手指轮流敲打手柄背面, “反向按键” 实现连点。这种控制方法可以让玩家更轻松地获得比直接抖动手指的Hypertap(详见超连点词条)更快的控制速度。\n此方法最先由Cheez-fish发明,他本人则使用Rolling达到过超过20Hz的点击频率。",
|
||||
},
|
||||
{"穿透 Passthrough",
|
||||
{"穿透(Passthrough)",
|
||||
"pingthrough chuantou",
|
||||
"term",
|
||||
"(攻击)穿透,指双方的攻击打出后没有抵消,互相都收到的现象。\nTETR.IO中自定义房间如果开启Passthrough规则(曾经天梯默认开启),那么对手消行攻击的瞬间能看到自己的红条出现但其处于 “无敌时间” 内,不会触发也不能抵消,此时你的攻击会直接打给对手。(应该是给攻击的飞行动画预留时间,同时也让玩家能反应过来并主动选择要不要抵消,要的话就再等一会)\n另有pingthrough的说法,只是原因是由于不可避免的网络传输延迟,效果同passthrough,设计比较简单的联网对战块没有特殊考虑的话可能自然就会带有这个机制。",
|
||||
@@ -854,12 +900,7 @@ return{
|
||||
"term",
|
||||
"(七个块初始权重设为0)\n要取块的时候,\n先把七个数都除以2然后加上0~1的随机数,\n最大的数字是第几个的就出对应的块,然后将其权重除以3.5\n循环。",--Discovered by zxc
|
||||
},
|
||||
{"C2踢墙",
|
||||
"kick",
|
||||
"term",
|
||||
"左,右,下,左下,右下,左2,右2\n(任何方块的任何旋转都使用这个表)。",
|
||||
},
|
||||
{"堆叠 Stack",
|
||||
{"堆叠(Stack)",
|
||||
"duidie stacking",
|
||||
"term",
|
||||
"将方块无缝隙地堆起来,需要玩家有预读Next的能力,可以通过不使用Hold并且用十个消四完成40L模式进行练习。\n这项能力从入坑到封神都是非常重要的。",
|
||||
@@ -874,25 +915,25 @@ return{
|
||||
"term",
|
||||
"指能够使用顺+逆时针+180°旋转三个旋转键的技术,任何方块放哪只需要旋转一次即可(Spin不算)。\n但由于只有部分游戏有180°旋转所以改操作并不通用,而且对速度提升的效果不如从单旋转双旋显著,不追求极限速度的玩家可不学。",
|
||||
},
|
||||
{"干旱 Drought",
|
||||
{"干旱(Drought)",
|
||||
"ganhan",
|
||||
"term",
|
||||
"经典块术语,指长时间不来I方块(长条)。现代方块使用的Bag7出块规则下干旱几乎不可能,平均7块就会有一个I,理论极限两个I最远中间隔12块。",
|
||||
},
|
||||
{"骨块 Bone",
|
||||
{"骨块(Bone)",
|
||||
"gukuai bone tgm",
|
||||
"term",
|
||||
"最早的方块游戏使用的方块样式。\n很久以前的电脑没有可以显示复杂图案的屏幕,只能往上打字,所以一格方块用两个方括号[ ]表示,长得像骨头所以叫骨块。\n基于骨块的特点,本游戏把骨块重新定义为, “所有形状使用的同一个比较花眼的贴图” ,不同的皮肤有不同的骨块样式。",
|
||||
"最早的方块游戏使用的方块样式。\n很久以前的电脑没有可以显示复杂图案的屏幕,只能往上打字,所以一格方块用两个方括号[ ]表示,长得像骨头所以叫骨块。\n基于骨块的特点,Techmino把骨块重新定义为, “所有形状使用的同一个比较花眼的贴图”,不同的皮肤有不同的骨块样式。",
|
||||
},
|
||||
{"半隐",
|
||||
"banyin half semi invisible",
|
||||
"term",
|
||||
"指方块锁定经过一段时间后会变隐形的规则\n注:从锁定开始到消失的具体时长不定,可以描述为 “过几秒种后消失” 。",
|
||||
"指方块锁定经过一段时间后会变隐形的规则\n注:从锁定开始到消失的具体时长不定,可以描述为 “过几秒种后消失”。",
|
||||
},
|
||||
{"全隐",
|
||||
"quanyin invisible",
|
||||
"term",
|
||||
"指方块锁定后会马上完全隐藏\n注:锁定时有消失动画的话也可以叫全隐,但其实难度会小一点,故本游戏中没有动画的隐形模式叫瞬隐。",
|
||||
"指方块锁定后会马上完全隐藏\n注:锁定时有消失动画的话也可以叫全隐,但其实难度会小一点,故Techmino中没有动画的隐形模式叫瞬隐。",
|
||||
},
|
||||
{"场地重力",
|
||||
"重力 zhongli liansuo cascade chain",
|
||||
@@ -902,7 +943,7 @@ return{
|
||||
{"MPH模式",
|
||||
"",
|
||||
"term",
|
||||
"一个游戏模式:\nMemoryless,Previewless,Holdless\n纯随机+无Next+无Hold完成40L,一个非常考验玩家反应速度的模式。",
|
||||
"一个游戏模式:\nMemoryless,Previewless,Holdless\n纯随机块序+无Next+无Hold完成40L,一个非常考验玩家反应速度的模式。",
|
||||
},
|
||||
{"输入延迟",
|
||||
"input delay yanchi",
|
||||
@@ -918,16 +959,16 @@ return{
|
||||
{"Cold Clear",
|
||||
"机器人 电脑 cc coldclear ai bot jiqiren",
|
||||
"term",
|
||||
"一个AI的名字(就跟AlphaGo一样)\n本身是为PPT开发,故在本游戏中使用效果欠佳,版本也较旧。",
|
||||
"一个AI的名字(就跟AlphaGo一样)\n由MinusKelvin开发,本来是用于PPT的。在Techmino中经过调整后支持all-spin和TRS旋转系统",
|
||||
},
|
||||
{"ZZZbot",
|
||||
"机器人 电脑 ai bot jiqiren",
|
||||
"机器人 电脑 ai bot jiqiren zzztoj",
|
||||
"term",
|
||||
"一个AI的名字(就跟AlphaGo一样)\n由研究群群友奏之章开发,重新调参后在各个游戏平台上的表现都很不错。",
|
||||
},
|
||||
|
||||
--定式
|
||||
{"开局定式 Setup",
|
||||
{"开局定式(Setup)",
|
||||
"opening kaijudingshi opener",
|
||||
"setup",
|
||||
"开局定式,定式一般指开局定式这个概念。\n指开局后可以使用的套路摆法。局中情况合适的时候也可以摆出同样的形状,但是和摆法开局一般都不一样。\n\n能称为定式的摆法要尽量满足以下至少2~3条:\n能适应大多数块序\n输出高,尽量不浪费T块\n很多方块无需软降,极简操作数少\n有明确后续,分支尽量少。\n\n注:绝大多数定式基于bag7,序列规律性强才有发明定式的可能。",
|
||||
@@ -965,7 +1006,8 @@ return{
|
||||
{"QT炮",
|
||||
"qt cannon",
|
||||
"setup",
|
||||
"QT炮,细节未知。",
|
||||
"一种能以更高的概率搭出开局DT Attack的类似DT炮的定式。"..HDwiki,
|
||||
HDsearch.."dt",
|
||||
},
|
||||
{"MT",
|
||||
"mt",
|
||||
@@ -973,17 +1015,18 @@ return{
|
||||
"Mini-Triple\n一个TSM+TST的结构。",
|
||||
HDsearch.."mt",
|
||||
},
|
||||
{"Trinity",
|
||||
"trinity",
|
||||
"setup",
|
||||
"Trinity\n一个TSD+TSD+TSD或TSM+TST+TSD的结构。",
|
||||
HDsearch.."trinity",
|
||||
},
|
||||
{"狼月炮",
|
||||
"wolfmoon",
|
||||
"setup",
|
||||
"狼月炮。"..HDwiki,
|
||||
HDsearch.."wolfmoon_cannon",
|
||||
},
|
||||
{"ASC",
|
||||
"asc",
|
||||
"setup",
|
||||
"ASC开局,细节未知。",
|
||||
},
|
||||
{"Sewer",
|
||||
"sewer",
|
||||
"setup",
|
||||
@@ -991,10 +1034,10 @@ return{
|
||||
HDsearch.."sewer",
|
||||
},
|
||||
{"TKI",
|
||||
"tki",
|
||||
"tki-3 ",
|
||||
"setup",
|
||||
"TKI开局\n有两种解释,一个是TSD开局,另一个是Cspin开局。"..HDwiki,
|
||||
HDsearch.."tki",
|
||||
"TKI-3开局\n有两种解释,一个是TSD开局的TKI-3,另一个是TST开局的TKI堆积(C-Spin)。"..HDwiki,
|
||||
HDsearch.."TKI_3_Opening",
|
||||
},
|
||||
{"God Spin",
|
||||
"god",
|
||||
@@ -1003,19 +1046,39 @@ return{
|
||||
HDsearch.."godspin",
|
||||
},
|
||||
{"信天翁",
|
||||
"xintianweng",
|
||||
"xintianweng albatrosssp albatrossspecial",
|
||||
"setup",
|
||||
"一种高观赏性几乎不浪费T的快节奏强力T2-T3-T2-PC开局。",
|
||||
"一种高观赏性几乎不浪费T的快节奏强力T2-T3-T2-PC开局。"..HDwiki,
|
||||
HDsearch.."Albatross_Special",
|
||||
},
|
||||
{"鹈鹕",
|
||||
"tihu",
|
||||
"tihu pelican",
|
||||
"setup",
|
||||
"一种类似信天翁的定式,在块序不能信天翁的时候可以用。",
|
||||
HDsearch.."Pelican"
|
||||
},
|
||||
{"七巧板",
|
||||
"qiqiaoban",
|
||||
{"全清开局",
|
||||
"qiqiaoban tangram pco 1stpc",
|
||||
"setup",
|
||||
"一种极大概率能摆出来并且很大概率能做到PC的定式,本游戏中的pc练习中空出不规则区域的那个就是七巧板。",
|
||||
"Perfect Clear Opener,一种极大概率能摆出来,有概率(hold I约84.6%,不hold I约61.2%)能做到PC的定式,Techmino中的pc练习中空出不规则区域的那个就是PCO。"..HDwiki,
|
||||
HDsearch.."Perfect_Clear_Opener",
|
||||
},
|
||||
{"六巧板",
|
||||
"liuqiaoban gracesystem 1stpc",
|
||||
"setup",
|
||||
"Grace System,大约有88.57%概率能做到PC的定式,Techmino中的PC练习中空出4×4方形区域就是六巧板。",
|
||||
},
|
||||
{"DPC",
|
||||
"DPC",
|
||||
"setup",
|
||||
"在场地空白,7bag还剩一块的情况下,能在很多情况下达到100%搭建率的TSD+PC的定式。更多信息见tetristemplate.info",
|
||||
"https://tetristemplate.info/dpc/",
|
||||
},
|
||||
{"Gamushiro堆叠",
|
||||
"gamushiro",
|
||||
"setup",
|
||||
"ガムシロ積み(Gamushiro堆叠),一种开局TD-Attack的定式。"..HDwiki,
|
||||
HDsearch.."Gamushiro_Stacking",
|
||||
},
|
||||
|
||||
--形状
|
||||
@@ -1024,10 +1087,10 @@ return{
|
||||
"pattern",
|
||||
"指一些特定的能打出较高伤害的常见典型形状,是中局输出的途径之一,部分也可以在开局做不过不是很有必要,主要见于中局\n另见开局定式,只说定式两个字一般指开局定式而非中局。",
|
||||
},
|
||||
{"Cspin",
|
||||
"cspin",
|
||||
{"C-Spin",
|
||||
"cspin tki tdattack",
|
||||
"pattern",
|
||||
"JL脚对脚立起来形成一个C形,缺口做适当的填充后可以打T3+T2。"..HDwiki,
|
||||
"也被称为TKI堆积,TD-Attack。"..HDwiki,
|
||||
HDsearch.."c-spin",
|
||||
},
|
||||
{"STSD",
|
||||
@@ -1039,9 +1102,15 @@ return{
|
||||
{"STMB",
|
||||
"stmb",
|
||||
"pattern",
|
||||
"STMB cave\n在高空3宽坑架SZ捐一个T2的形状。"..HDwiki,
|
||||
"STMB cave\n在3宽坑架SZ捐一个T2的形状。"..HDwiki,
|
||||
HDsearch.."stmb_cave",
|
||||
},
|
||||
{"双刃剑",
|
||||
"shuangrenjian fractal spider",
|
||||
"pattern",
|
||||
"两个T2形状叠在一起。"..HDwiki,
|
||||
HDsearch.."Fractal",
|
||||
},
|
||||
{"LST堆叠",
|
||||
"lst",
|
||||
"pattern",
|
||||
@@ -1060,25 +1129,41 @@ return{
|
||||
"在一个十字形洞口盖屋檐后可以做两个T2的形状。"..HDwiki,
|
||||
HDsearch.."imperial_cross",
|
||||
},
|
||||
{"雨宫炮",
|
||||
"yugong",
|
||||
{"阶梯捐",
|
||||
"jieti kaidan stairs",
|
||||
"pattern",
|
||||
"一种捐T2后可消四的形状,常见于DT的一个分支。",
|
||||
"一种在看起来像阶梯的洞口捐一个T2的形状。"..HDwiki,
|
||||
HDsearch.."kaidan",
|
||||
},
|
||||
{"社畜train",
|
||||
"shachikutrain shechu",
|
||||
"pattern",
|
||||
"一种在常见T3屋檐上捐两个T2的形状。"..HDwiki,
|
||||
HDsearch.."Shachiku_Train",
|
||||
},
|
||||
{"千鸟格子",
|
||||
"qianniaoge",
|
||||
"qianniaoge cutcopy",
|
||||
"pattern",
|
||||
"一种在小洞上捐一个T2后还能做一个T2的形状。",
|
||||
},
|
||||
{"六巧板",
|
||||
"liuqiaoban",
|
||||
"pattern",
|
||||
"一种常用于增加中局PC概率的形状,本游戏中的PC练习中空出4×4方形区域就是六巧板。",
|
||||
"一种在小洞上捐一个T2后还能做一个T2的形状。"..HDwiki,
|
||||
HDsearch.."Cut_copy",
|
||||
},
|
||||
{"绯红之王",
|
||||
"feihongzhiwang",
|
||||
"feihongzhiwang king crimson",
|
||||
"pattern",
|
||||
"在STSD上叠若干个T3的形状。",
|
||||
"在STSD上叠若干个T3的形状。"..HDwiki,
|
||||
HDsearch.."King_Crimson",
|
||||
},
|
||||
{"连续PC (1/2)",
|
||||
"pcloop",
|
||||
"pattern",
|
||||
"テトリス堂的从开局起第1、2、3、4、7个4行pc的开局整理。第七个pc做完总共用掉70块,相当于回到游戏开始阶段可以做1st pc\n\n第5和第6详见下一个词条",
|
||||
"https://shiwehi.com/tetris/template/consecutivepc.php"
|
||||
},
|
||||
{"连续PC (2/2)",
|
||||
"pcloop",
|
||||
"pattern",
|
||||
"four.lol的从开局起第5、6个4行pc的开局整理。\n(链接点开是5th,可以到6th,其他的推荐看上一个词条)",
|
||||
"https://four.lol/perfect-clears/5th"
|
||||
},
|
||||
|
||||
--存档管理
|
||||
@@ -1137,7 +1222,7 @@ return{
|
||||
{"TAS",
|
||||
"",
|
||||
"english",
|
||||
"Tool-Assisted Speedrun(Supergaming)\n使用特殊工具在不破坏游戏规则(允许超越人类操作,只是在程序层面不作弊)进行的游戏。\n一般用于冲击理论值或者达成各种有趣的目标用来观赏。\n本游戏中内置了非常简单的TAS工具。",
|
||||
"Tool-Assisted Speedrun(Supergaming)\n使用特殊工具在不破坏游戏规则(允许超越人类操作,只是在程序层面不作弊)进行的游戏。\n一般用于冲击理论值或者达成各种有趣的目标用来观赏。\nTechmino中内置了非常简单的TAS工具。",
|
||||
},
|
||||
{"AFK",
|
||||
"",
|
||||
@@ -1146,6 +1231,11 @@ return{
|
||||
},
|
||||
|
||||
--人物
|
||||
{"注[2]",
|
||||
"备注 notice",
|
||||
"name",
|
||||
"描述不保证一直是最新的,知道有这么个人就好。",
|
||||
},
|
||||
{"吉备宏纯",
|
||||
"hebomai hbm jibei",
|
||||
"name",
|
||||
@@ -1194,7 +1284,7 @@ return{
|
||||
{"Jonas",
|
||||
"",
|
||||
"name",
|
||||
"(1981-2021)经典块一流玩家,曾经的经典块第一,CTWC4连冠。",
|
||||
"(1981–2021)经典块一流玩家,曾经的经典块第一,CTWC4连冠。",
|
||||
},
|
||||
{"Joseph",
|
||||
"",
|
||||
@@ -1204,7 +1294,7 @@ return{
|
||||
{"Kazu",
|
||||
"mdking",
|
||||
"name",
|
||||
"(也叫 “GAMEOVER” “GAMAOVER” “GAME_OVER_RETRY” )\n一流玩家,以熟练md转捐赠闻名(雾)。",
|
||||
"(也叫 “GAMEOVER” “GAMAOVER” “GAME_OVER_RETRY”)\n一流玩家,以熟练md转捐赠闻名(雾)。",
|
||||
},
|
||||
{"Microblizz",
|
||||
"",
|
||||
@@ -1246,13 +1336,13 @@ return{
|
||||
"https://space.bilibili.com/557547205",
|
||||
},
|
||||
{"Farter",
|
||||
"pi TTT t000",
|
||||
"pi TTT t000 t222",
|
||||
"name",
|
||||
"【研究群】「TTTT」\n40L 26.193s\nCN块圈元老之一,T-ex和屁块的作者。",
|
||||
"https://space.bilibili.com/132966",
|
||||
},
|
||||
{"Teatube",
|
||||
"ttb chaguan chanaiye sifangchaye t022",
|
||||
"ttb chaguan chanaiye sifangchaye qiqiupu t022",
|
||||
"name",
|
||||
"【研究群】「T022」\n40L 33s top数据高峰约50L70A\n研究群管理,探索群群主,茶服服主,人形方块百科史书,现中文方块维基主催。\n自2011年正式加入CN方块社区以来,以探索方块有趣的思想作为主动力,茶茶今天也在茶馆里当着茶房管理员——\n\n其他名称:TTB,永远旋转的炸弹,茶乃叶,四方茶叶\n明明茶管是蓝孩子却被群友叫茶娘…怎么想都很奇怪啊!嘛大家喜欢的话就随便啦——",
|
||||
"https://space.bilibili.com/834903",
|
||||
|
||||
@@ -14,9 +14,9 @@ return{
|
||||
sureReset="Press again to reset",
|
||||
sureDelete="Press again to delete",
|
||||
newDay="A new day, a new beginning!",
|
||||
playedLong="You have been playing for a long time. Time to a break!",
|
||||
playedLong="You have been playing for a long time. Time to take a break!",
|
||||
playedTooMuch="You have been playing for far too long! Techmino is fun, but remember to take some rests!",
|
||||
settingWarn="Careful - you’re about to change some uncommon settings!",
|
||||
settingWarn="Careful — you’re about to change some uncommon settings!",
|
||||
|
||||
atkModeName={"Random","Badges","K.O.s","Attackers"},
|
||||
royale_remain="$1 Players Left",
|
||||
@@ -59,7 +59,7 @@ return{
|
||||
finesse_ap="All Perfect",
|
||||
finesse_fc="Full Combo",
|
||||
|
||||
page="Page:",
|
||||
page="Page ",
|
||||
|
||||
cc_fixed="CC is incompatible with fixed sequences.",
|
||||
cc_swap="CC is incompatible when the hold mode is set to Swap.",
|
||||
@@ -249,6 +249,12 @@ return{
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"Illustrations",
|
||||
"Miya",
|
||||
"Mono",
|
||||
"Xiaoya",
|
||||
"葉枭",
|
||||
"",
|
||||
"Musical Designs",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
@@ -315,7 +321,6 @@ return{
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="Support the author",
|
||||
WidgetText={
|
||||
@@ -459,7 +464,6 @@ return{
|
||||
atkFX="Atk FX",
|
||||
|
||||
frame="Render Frame Rate (%)",
|
||||
FTlock="Frame skip",
|
||||
|
||||
text="Line Clear Pop-Ups",
|
||||
score="Score Pop-Ups",
|
||||
@@ -688,6 +692,7 @@ return{
|
||||
register="Sign Up",
|
||||
email="Email Address",
|
||||
password="Password",
|
||||
showEmail="Show Email",
|
||||
keepPW="Remember me",
|
||||
login="Log In",
|
||||
},
|
||||
@@ -756,108 +761,112 @@ return{
|
||||
},
|
||||
},
|
||||
modes={
|
||||
['sprint_10l']= {"Sprint", "10L", "Clear 10 lines!"},
|
||||
['sprint_20l']= {"Sprint", "20L", "Clear 20 lines!"},
|
||||
['sprint_40l']= {"Sprint", "40L", "Clear 40 lines!"},
|
||||
['sprint_100l']= {"Sprint", "100L", "Clear 100 lines!"},
|
||||
['sprint_400l']= {"Sprint", "400L", "Clear 400 lines!"},
|
||||
['sprint_1000l']= {"Sprint", "1,000L", "Clear 1,000 lines!"},
|
||||
['sprintPenta']= {"Sprint", "PENTOMINO", "40L with 18 pentominoes"},
|
||||
['sprintMPH']= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"},
|
||||
['sprint123']= {"Sprint", "M123", "40L with only monominoes, dominoes, and triminoes"},
|
||||
['secret_grade']= {"Secret Grade", "", "Build a zig-zag hole formation, following to the guide!"},
|
||||
['dig_10l']= {"Dig", "10L", "Dig 10 garbage lines"},
|
||||
['dig_40l']= {"Dig", "40L", "Dig 40 garbage lines"},
|
||||
['dig_100l']= {"Dig", "100L", "Dig 100 garbage lines"},
|
||||
['dig_400l']= {"Dig", "400L", "Dig 400 garbage lines"},
|
||||
['drought_n']= {"Drought", "100L", "No I-pieces available"},
|
||||
['drought_l']= {"Drought+", "100L", "W T F"},
|
||||
['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with increasing speed"},
|
||||
['marathon_h']= {"Marathon", "HARD", "200-line high-speed marathon"},
|
||||
['solo_e']= {"Battle", "EASY", "Defeat the AI!"},
|
||||
['solo_n']= {"Battle", "NORMAL", "Defeat the AI!"},
|
||||
['solo_h']= {"Battle", "HARD", "Defeat the AI!"},
|
||||
['solo_l']= {"Battle", "LUNATIC", "Defeat the AI!"},
|
||||
['solo_u']= {"Battle", "ULTIMATE", "Defeat the AI!"},
|
||||
['techmino49_e']= {"Tech 49", "EASY", "49-player battle.\nThe last one standing wins"},
|
||||
['techmino49_h']= {"Tech 49", "HARD", "49-player battle.\nThe last one standing wins"},
|
||||
['techmino49_u']= {"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins"},
|
||||
['techmino99_e']= {"Tech 99", "EASY", "99-player battle.\nThe last one standing wins"},
|
||||
['techmino99_h']= {"Tech 99", "HARD", "99-player battle.\nThe last one standing wins"},
|
||||
['techmino99_u']= {"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins"},
|
||||
['round_e']= {"Turn-Based", "EASY", "Take turns to play against the AI!"},
|
||||
['round_n']= {"Turn-Based", "NORMAL", "Take turns to play against the AI!"},
|
||||
['round_h']= {"Turn-Based", "HARD", "Take turns to play against the AI!"},
|
||||
['round_l']= {"Turn-Based", "LUNATIC", "Take turns to play against the AI!"},
|
||||
['round_u']= {"Turn-Based", "ULTIMATE", "Take turns to play against the AI!"},
|
||||
['big_n']= {"Big", "NORMAL", "Play in a smaller field!"},
|
||||
['big_h']= {"Big", "HARD", "Play in a smaller field!"},
|
||||
['master_n']= {"Master", "NORMAL", "For 20G beginners"},
|
||||
['master_h']= {"Master", "HARD", "For 20G pros"},
|
||||
['master_m']= {"Master", "M21", "For 20G Masters"},
|
||||
['master_final']= {"Master", "FINAL", "20G and beyond"},
|
||||
['master_ph']= {"Master", "PHANTASM", "???"},
|
||||
['master_g']= {"Master", "GRADED", "Get the highest grade you can!"},
|
||||
['master_ex']= {"GrandMaster", "EXTRA", "An eternity shorter than an instant"},
|
||||
['master_instinct']={"Master", "INSTINCT", "What if the active piece turned invisible?"},
|
||||
['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
|
||||
['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
|
||||
['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
|
||||
['strategy_e_plus']={"Strategy", "EASY+", "Holdless strategy!"},
|
||||
['strategy_h_plus']={"Strategy", "HARD+", "Holdless strategy!"},
|
||||
['strategy_u_plus']={"Strategy", "ULTIMATE+", "Holdless strategy!"},
|
||||
['blind_e']= {"Invisible", "HALF", "For novices"},
|
||||
['blind_n']= {"Invisible", "ALL", "For intermediates"},
|
||||
['blind_h']= {"Invisible", "SUDDEN", "For the experienced"},
|
||||
['blind_l']= {"Invisible", "SUDDEN+", "For professionals"},
|
||||
['blind_u']= {"Invisible", "?", "Are you ready?"},
|
||||
['blind_wtf']= {"Invisible", "WTF", "You’re not ready"},
|
||||
['classic_e']= {"Classic", "EASY", "A low-speed recreation from the 80s"},
|
||||
['classic_h']= {"Classic", "HARD", "A medium-speed recreation from the 80s"},
|
||||
['classic_l']= {"Classic", "LUNATIC", "A high-speed recreation from the 80s"},
|
||||
['classic_u']= {"Classic", "ULTIMATE", "A very high-speed recreation from the 80s"},
|
||||
['survivor_e']= {"Survival", "EASY", "How long can you survive?"},
|
||||
['survivor_n']= {"Survival", "NORMAL", "How long can you survive?"},
|
||||
['survivor_h']= {"Survival", "HARD", "How long can you survive?"},
|
||||
['survivor_l']= {"Survival", "LUNATIC", "How long can you survive?"},
|
||||
['survivor_u']= {"Survival", "ULTIMATE", "How long can you survive?"},
|
||||
['attacker_h']= {"Attacker", "HARD", "Practice your attacking skills!"},
|
||||
['attacker_u']= {"Attacker", "ULTIMATE", "Practice your attacking skills!"},
|
||||
['defender_n']= {"Defender", "NORMAL", "Practice your defencing skills!"},
|
||||
['defender_l']= {"Defender", "LUNATIC", "Practice your defencing skills!"},
|
||||
['dig_h']= {"Driller", "HARD", "Digging practice!"},
|
||||
['dig_u']= {"Driller", "ULTIMATE", "Digging practice!"},
|
||||
['clearRush']= {"Clear Rush", "NORMAL", "All-spin tutorial!\n[Under construction]"},
|
||||
['c4wtrain_n']= {"C4W Training", "NORMAL", "Infinite combos"},
|
||||
['c4wtrain_l']= {"C4W Training", "LUNATIC", "Infinite combos"},
|
||||
['pctrain_n']= {"PC Training", "NORMAL", "Perfect Clear practice"},
|
||||
['pctrain_l']= {"PC Training", "LUNATIC", "A harder Perfect Clear practice"},
|
||||
['pc_n']= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
|
||||
['pc_h']= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
|
||||
['pc_l']= {"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
|
||||
['pc_inf']= {"Inf. PC Challenge", "", "Get PCs as much as you can"},
|
||||
['tech_n']= {"Tech", "NORMAL", "Try to keep the\nBack-to-Back chain!"},
|
||||
['tech_n_plus']= {"Tech", "NORMAL+", "Spins & PCs only"},
|
||||
['tech_h']= {"Tech", "HARD", "Try to keep the\nBack-to-Back chain!"},
|
||||
['tech_h_plus']= {"Tech", "HARD+", "Spins & PCs only"},
|
||||
['tech_l']= {"Tech", "LUNATIC", "Try to keep the\nBack-to-Back chain!"},
|
||||
['tech_l_plus']= {"Tech", "LUNATIC+", "Spins & PCs only"},
|
||||
['tech_finesse']= {"Tech", "FINESSE", "No finesse faults!"},
|
||||
['tech_finesse_f']= {"Tech", "FINESSE+", "No normal clears and finesse faults!"},
|
||||
['tsd_e']= {"TSD Challenge", "EASY", "T-Spin Doubles only!"},
|
||||
['tsd_h']= {"TSD Challenge", "HARD", "T-Spin Doubles only!"},
|
||||
['tsd_u']= {"TSD Challenge", "ULTIMATE", "T-Spin Doubles only!"},
|
||||
['backfire_n']= {"Backfire", "NORMAL", "Hold back the backfiring garbage lines"},
|
||||
['backfire_h']= {"Backfire", "HARD", "Hold back the backfiring garbage lines"},
|
||||
['backfire_l']= {"Backfire", "LUNATIC", "Hold back the backfiring garbage lines"},
|
||||
['backfire_u']= {"Backfire", "ULTIMATE", "Hold back the backfiring garbage lines"},
|
||||
['sprintAtk']= {"Sprint", "100 Attack", "Send 100 lines!"},
|
||||
['sprintEff']= {"Sprint", "Efficiency", "Send more attack in 40lines!"},
|
||||
['zen']= {'Zen', "200", "A 200-line run without a time limit"},
|
||||
['ultra']= {'Ultra', "EXTRA", "A 2-minute score attack"},
|
||||
['infinite']= {"Infinite", "", "Just a sandbox"},
|
||||
['infinite_dig']= {"Infinite: Dig", "", "Dig-diggin’-dug"},
|
||||
['marathon_inf']= {"Marathon", "INFINITE", "Infinite marathon."},
|
||||
['sprint_10l']= {"Sprint", "10L", "Clear 10 lines!"},
|
||||
['sprint_20l']= {"Sprint", "20L", "Clear 20 lines!"},
|
||||
['sprint_40l']= {"Sprint", "40L", "Clear 40 lines!"},
|
||||
['sprint_100l']= {"Sprint", "100L", "Clear 100 lines!"},
|
||||
['sprint_400l']= {"Sprint", "400L", "Clear 400 lines!"},
|
||||
['sprint_1000l']= {"Sprint", "1,000L", "Clear 1,000 lines!"},
|
||||
['sprintPenta']= {"Sprint", "PENTOMINO", "40L with 18 pentominoes"},
|
||||
['sprintMPH']= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"},
|
||||
['sprint123']= {"Sprint", "M123", "40L with only monominoes, dominoes, and triminoes"},
|
||||
['secret_grade']= {"Secret Grade", "", "Build a zig-zag hole formation, following to the guide!"},
|
||||
['dig_10l']= {"Dig", "10L", "Dig 10 garbage lines as fast as you can!"},
|
||||
['dig_40l']= {"Dig", "40L", "Dig 40 garbage lines as fast as you can!"},
|
||||
['dig_100l']= {"Dig", "100L", "Dig 100 garbage lines as fast as you can!"},
|
||||
['dig_400l']= {"Dig", "400L", "Dig 400 garbage lines as fast as you can!"},
|
||||
['dig_eff_10l']= {"Dig", "EFFICIENCY 10L", "Dig 10 garbage lines with the least pieces!"},
|
||||
['dig_eff_40l']= {"Dig", "EFFICIENCY 40L", "Dig 40 garbage lines with the least pieces!"},
|
||||
['dig_eff_100l']= {"Dig", "EFFICIENCY 100L","Dig 100 garbage lines with the least pieces!"},
|
||||
['dig_eff_400l']= {"Dig", "EFFICIENCY 400L","Dig 400 garbage lines with the least pieces!"},
|
||||
['drought_n']= {"Drought", "100L", "No I-pieces available"},
|
||||
['drought_l']= {"Drought+", "100L", "W T F"},
|
||||
['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with increasing speed"},
|
||||
['marathon_h']= {"Marathon", "HARD", "200-line high-speed marathon"},
|
||||
['solo_e']= {"Battle", "EASY", "Defeat the AI!"},
|
||||
['solo_n']= {"Battle", "NORMAL", "Defeat the AI!"},
|
||||
['solo_h']= {"Battle", "HARD", "Defeat the AI!"},
|
||||
['solo_l']= {"Battle", "LUNATIC", "Defeat the AI!"},
|
||||
['solo_u']= {"Battle", "ULTIMATE", "Defeat the AI!"},
|
||||
['techmino49_e']= {"Tech 49", "EASY", "49-player battle.\nThe last one standing wins"},
|
||||
['techmino49_h']= {"Tech 49", "HARD", "49-player battle.\nThe last one standing wins"},
|
||||
['techmino49_u']= {"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins"},
|
||||
['techmino99_e']= {"Tech 99", "EASY", "99-player battle.\nThe last one standing wins"},
|
||||
['techmino99_h']= {"Tech 99", "HARD", "99-player battle.\nThe last one standing wins"},
|
||||
['techmino99_u']= {"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins"},
|
||||
['round_e']= {"Turn-Based", "EASY", "Take turns to play against the AI!"},
|
||||
['round_n']= {"Turn-Based", "NORMAL", "Take turns to play against the AI!"},
|
||||
['round_h']= {"Turn-Based", "HARD", "Take turns to play against the AI!"},
|
||||
['round_l']= {"Turn-Based", "LUNATIC", "Take turns to play against the AI!"},
|
||||
['round_u']= {"Turn-Based", "ULTIMATE", "Take turns to play against the AI!"},
|
||||
['big_n']= {"Big", "NORMAL", "Play in a smaller field!"},
|
||||
['big_h']= {"Big", "HARD", "Play in a smaller field!"},
|
||||
['master_n']= {"Master", "NORMAL", "For 20G beginners"},
|
||||
['master_h']= {"Master", "HARD", "For 20G pros"},
|
||||
['master_m']= {"Master", "M21", "For 20G Masters"},
|
||||
['master_final']= {"Master", "FINAL", "20G and beyond"},
|
||||
['master_ph']= {"Master", "PHANTASM", "???"},
|
||||
['master_g']= {"Master", "GRADED", "Get the highest grade you can!"},
|
||||
['master_ex']= {"GrandMaster", "EXTRA", "An eternity shorter than an instant"},
|
||||
['master_instinct']={"Master", "INSTINCT", "What if the active piece turned invisible?"},
|
||||
['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
|
||||
['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
|
||||
['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
|
||||
['strategy_e_plus']={"Strategy", "EASY+", "Holdless strategy!"},
|
||||
['strategy_h_plus']={"Strategy", "HARD+", "Holdless strategy!"},
|
||||
['strategy_u_plus']={"Strategy", "ULTIMATE+", "Holdless strategy!"},
|
||||
['blind_e']= {"Invisible", "HALF", "For novices"},
|
||||
['blind_n']= {"Invisible", "ALL", "For intermediates"},
|
||||
['blind_h']= {"Invisible", "SUDDEN", "For the experienced"},
|
||||
['blind_l']= {"Invisible", "SUDDEN+", "For professionals"},
|
||||
['blind_u']= {"Invisible", "?", "Are you ready?"},
|
||||
['blind_wtf']= {"Invisible", "WTF", "You’re not ready"},
|
||||
['classic_e']= {"Classic", "EASY", "A low-speed recreation from the 80s"},
|
||||
['classic_h']= {"Classic", "HARD", "A medium-speed recreation from the 80s"},
|
||||
['classic_l']= {"Classic", "LUNATIC", "A high-speed recreation from the 80s"},
|
||||
['classic_u']= {"Classic", "ULTIMATE", "A very high-speed recreation from the 80s"},
|
||||
['survivor_e']= {"Survival", "EASY", "How long can you survive?"},
|
||||
['survivor_n']= {"Survival", "NORMAL", "How long can you survive?"},
|
||||
['survivor_h']= {"Survival", "HARD", "How long can you survive?"},
|
||||
['survivor_l']= {"Survival", "LUNATIC", "How long can you survive?"},
|
||||
['survivor_u']= {"Survival", "ULTIMATE", "How long can you survive?"},
|
||||
['attacker_h']= {"Attacker", "HARD", "Practice your attacking skills!"},
|
||||
['attacker_u']= {"Attacker", "ULTIMATE", "Practice your attacking skills!"},
|
||||
['defender_n']= {"Defender", "NORMAL", "Practice your defensing skills!"},
|
||||
['defender_l']= {"Defender", "LUNATIC", "Practice your defensing skills!"},
|
||||
['dig_h']= {"Driller", "HARD", "Digging practice!"},
|
||||
['dig_u']= {"Driller", "ULTIMATE", "Digging practice!"},
|
||||
['clearRush']= {"Clear Rush", "NORMAL", "All-spin tutorial!\n[Under construction]"},
|
||||
['c4wtrain_n']= {"C4W Training", "NORMAL", "Infinite combos"},
|
||||
['c4wtrain_l']= {"C4W Training", "LUNATIC", "Infinite combos"},
|
||||
['pctrain_n']= {"PC Training", "NORMAL", "Perfect Clear practice"},
|
||||
['pctrain_l']= {"PC Training", "LUNATIC", "A harder Perfect Clear practice"},
|
||||
['pc_n']= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
|
||||
['pc_h']= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
|
||||
['pc_l']= {"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
|
||||
['pc_inf']= {"Inf. PC Challenge", "", "Get PCs as much as you can"},
|
||||
['tech_n']= {"Tech", "NORMAL", "Try to keep the\nBack-to-Back chain!"},
|
||||
['tech_n_plus']= {"Tech", "NORMAL+", "Spins & PCs only"},
|
||||
['tech_h']= {"Tech", "HARD", "Try to keep the\nBack-to-Back chain!"},
|
||||
['tech_h_plus']= {"Tech", "HARD+", "Spins & PCs only"},
|
||||
['tech_l']= {"Tech", "LUNATIC", "Try to keep the\nBack-to-Back chain!"},
|
||||
['tech_l_plus']= {"Tech", "LUNATIC+", "Spins & PCs only"},
|
||||
['tech_finesse']= {"Tech", "FINESSE", "No finesse faults!"},
|
||||
['tech_finesse_f']= {"Tech", "FINESSE+", "No normal clears and finesse faults!"},
|
||||
['tsd_e']= {"TSD Challenge", "EASY", "T-Spin Doubles only!"},
|
||||
['tsd_h']= {"TSD Challenge", "HARD", "T-Spin Doubles only!"},
|
||||
['tsd_u']= {"TSD Challenge", "ULTIMATE", "T-Spin Doubles only!"},
|
||||
['backfire_n']= {"Backfire", "NORMAL", "Hold back the backfiring garbage lines"},
|
||||
['backfire_h']= {"Backfire", "HARD", "Hold back the backfiring garbage lines"},
|
||||
['backfire_l']= {"Backfire", "LUNATIC", "Hold back the backfiring garbage lines"},
|
||||
['backfire_u']= {"Backfire", "ULTIMATE", "Hold back the backfiring garbage lines"},
|
||||
['sprintAtk']= {"Sprint", "100 Attack", "Send 100 lines!"},
|
||||
['sprintEff']= {"Sprint", "Efficiency", "Send more attack in 40lines!"},
|
||||
['zen']= {'Zen', "200", "A 200-line run without a time limit"},
|
||||
['ultra']= {'Ultra', "EXTRA", "A 2-minute score attack"},
|
||||
['infinite']= {"Infinite", "", "Just a sandbox"},
|
||||
['infinite_dig']= {"Infinite: Dig", "", "Dig-diggin’-dug"},
|
||||
['marathon_inf']= {"Marathon", "INFINITE", "Infinite marathon."},
|
||||
|
||||
['custom_clear']= {"Custom", "NORMAL"},
|
||||
['custom_puzzle']= {"Custom", "PUZZLE"},
|
||||
@@ -890,7 +899,7 @@ return{
|
||||
"Bridge clear coming soon!",
|
||||
"Can you master this modern yet familiar stacker?",
|
||||
"Certainly within this heart lies my M@STERPIECE.",
|
||||
"Change logs in English can be found on Discord.",
|
||||
"Changelogs in English can be found on Discord.",
|
||||
"Color clear coming soon!",
|
||||
"Decreasing DAS and ARR makes your game faster but harder to control.",
|
||||
"Did I just see a Back-to-Back-to-Back?",
|
||||
@@ -935,7 +944,7 @@ return{
|
||||
"pps-0.01",
|
||||
"Server down randomly",
|
||||
"Some requirements to achieve rank X are intentionally set to be difficult for even the best players.",
|
||||
"Soon you’ll be able to play against friends and foes all over the world.",
|
||||
"Soon, you’ll be able to play against friends and foes all over the world.",
|
||||
"Split clear coming soon!",
|
||||
"sudo rm -rf /*",
|
||||
"Techmino is a portmanteau of “technique” and “tetromino”.",
|
||||
|
||||
@@ -186,7 +186,6 @@ return{
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="Apoyen al Autor",
|
||||
WidgetText={
|
||||
@@ -330,7 +329,6 @@ return{
|
||||
atkFX="FX Vis. de Ataque",
|
||||
|
||||
frame="Ratio de FPSs(%)",
|
||||
FTlock="Bloqueo por frames",
|
||||
|
||||
text="Texto de Acciones",
|
||||
score="Puntaje en Pantalla",
|
||||
@@ -551,6 +549,7 @@ return{
|
||||
register="Registrarse",
|
||||
email="Correo Elec.",
|
||||
password="Contraseña",
|
||||
-- showEmail="Show Email",
|
||||
keepPW="Recordar credenciales",
|
||||
login="Entrar",
|
||||
},
|
||||
|
||||
@@ -216,6 +216,12 @@ return{
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"Illustrations",
|
||||
"Miya",
|
||||
"Mono",
|
||||
"Xiaoya",
|
||||
"葉枭",
|
||||
"",
|
||||
"Conceptions Musicales",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
@@ -282,7 +288,6 @@ return{
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="Aider le créateur",
|
||||
WidgetText={
|
||||
@@ -423,7 +428,6 @@ return{
|
||||
atkFX="Effets d'attaque",
|
||||
|
||||
frame="Montrer les FPS(%)",
|
||||
-- FTlock="Frame-Time Lock",
|
||||
|
||||
text="Texte d'action",
|
||||
score="Pop-up de score",
|
||||
@@ -642,6 +646,7 @@ return{
|
||||
register="Enregistrement",
|
||||
email="E-mail",
|
||||
password="Mot de passe",
|
||||
-- showEmail="Show Email",
|
||||
-- keepPW="Remember me",
|
||||
login="Connexion",
|
||||
},
|
||||
|
||||
@@ -251,6 +251,12 @@ return{
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"Illustrasi",
|
||||
"Miya",
|
||||
"Mono",
|
||||
"Xiaoya",
|
||||
"葉枭",
|
||||
"",
|
||||
"Desain Musik",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
@@ -317,7 +323,6 @@ return{
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="Dukung pencipta",
|
||||
WidgetText={
|
||||
@@ -461,7 +466,6 @@ return{
|
||||
atkFX="Efek Serang",
|
||||
|
||||
frame="Kecepatan Bingkai (%)",
|
||||
FTlock="Lewat Bingkai",
|
||||
|
||||
text="Teks Baris",
|
||||
score="Teks Nilai",
|
||||
@@ -690,6 +694,7 @@ return{
|
||||
register="Daftar",
|
||||
email="Alamat Email",
|
||||
password="Password",
|
||||
-- showEmail="Show Email",
|
||||
keepPW="Ingat Saya",
|
||||
login="Masuk",
|
||||
},
|
||||
@@ -758,103 +763,107 @@ return{
|
||||
},
|
||||
},
|
||||
modes={
|
||||
['sprint_10l']= {"Balapan", "10L", "Buat 10 baris!"},
|
||||
['sprint_20l']= {"Balapan", "20L", "Buat 20 baris!"},
|
||||
['sprint_40l']= {"Balapan", "40L", "Buat 40 baris!"},
|
||||
['sprint_100l']= {"Balapan", "100L", "Buat 100 baris!"},
|
||||
['sprint_400l']= {"Balapan", "400L", "Buat 400 baris!"},
|
||||
['sprint_1000l']= {"Balapan", "1.000L", "Buat 1.000 baris!"},
|
||||
['sprintPenta']= {"Balapan", "PENTOMINO", "40L dengan pentomino!"},
|
||||
['sprintMPH']= {"Balapan", "MPH", "Tanpa ingatan\nTanpa pratinjau\nTanpa simpan"},
|
||||
['dig_10l']= {"Gali", "10L", "Gali 10 baris!"},
|
||||
['dig_40l']= {"Gali", "40L", "Gali 40 baris!"},
|
||||
['dig_100l']= {"Gali", "100L", "Gali 100 baris!"},
|
||||
['dig_400l']= {"Gali", "400L", "Gali 400 baris!"},
|
||||
['drought_n']= {"Nasib Buruk", "100L", "Tidak ada blok I..."},
|
||||
['drought_l']= {"Nasib Buruk+", "100L", "Nasib sangat buruk..."},
|
||||
['marathon_n']= {"Maraton", "NORMAL", "200-baris maraton dengan kecepatan meningkat"},
|
||||
['marathon_h']= {"Maraton", "SULIT", "200-baris maraton dengan kecepatan tinggi"},
|
||||
['solo_e']= {"Tarung", "MUDAH", "Kalahkan AInya!"},
|
||||
['solo_n']= {"Tarung", "NORMAL", "Kalahkan AInya!"},
|
||||
['solo_h']= {"Tarung", "SULIT", "Kalahkan AInya!"},
|
||||
['solo_l']= {"Tarung", "GILA", "Kalahkan AInya!"},
|
||||
['solo_u']= {"Tarung", "TERAKHIR", "Kalahkan AInya!"},
|
||||
['techmino49_e']= {"Tech 49", "MUDAH", "Pertarungan dengan 49 pemain."},
|
||||
['techmino49_h']= {"Tech 49", "SULIT", "Pertarungan dengan 49 pemain."},
|
||||
['techmino49_u']= {"Tech 49", "TERAKHIR", "Pertarungan dengan 49 pemain."},
|
||||
['techmino99_e']= {"Tech 99", "MUDAH", "Pertarungan dengan 99 pemain."},
|
||||
['techmino99_h']= {"Tech 99", "SULIT", "Pertarungan dengan 99 pemain."},
|
||||
['techmino99_u']= {"Tech 99", "TERAKHIR", "Pertarungan dengan 99 pemain."},
|
||||
['round_e']= {"Giliran", "MUDAH", "Giliran main melawan AI!"},
|
||||
['round_n']= {"Giliran", "NORMAL", "Giliran main melawan AI!"},
|
||||
['round_h']= {"Giliran", "SULIT", "Giliran main melawan AI!"},
|
||||
['round_l']= {"Giliran", "GILA", "Giliran main melawan AI!"},
|
||||
['round_u']= {"Giliran", "TERAKHIR", "Giliran main melawan AI!"},
|
||||
['master_n']= {"Jago", "NORMAL", "Untuk pemula 20G"},
|
||||
['master_h']= {"Jago", "SULIT", "Untuk pro 20G"},
|
||||
['master_m']= {"Jago", "M21", "Untuk jago 20G"},
|
||||
['master_final']= {"Jago", "TERAKHIR", "Lebih dari 20G"},
|
||||
['master_ph']= {"Jago", "KHAYALAN", "???"},
|
||||
['master_ex']= {"Sangat Jago", "EKSTRA", "Blok tidak kelihatan"},
|
||||
['master_instinct']={"Jago", "INSTINK", "Bagaimana jika blok terkontrol tersembunyi?"},
|
||||
['strategy_e']= {"Strategi", "MUDAH", "Keputusan 20G cepat"},
|
||||
['strategy_h']= {"Strategi", "SULIT", "Keputusan 20G cepat"},
|
||||
['strategy_u']= {"Strategi", "TERAKHIR", "Keputusan 20G cepat"},
|
||||
['strategy_e_plus']={"Strategi", "MUDAH+", "Mode strategi, tetapi tanpa menyimpan"},
|
||||
['strategy_h_plus']={"Strategi", "SULIT+", "Mode strategi, tetapi tanpa menyimpan"},
|
||||
['strategy_u_plus']={"Strategi", "TERAKHIR+", "Mode strategi, tetapi tanpa menyimpan"},
|
||||
['blind_e']= {"Tak Terlihat", "MUDAH", "Untuk pemula"},
|
||||
['blind_n']= {"Tak Terlihat", "NORMAL", "Untuk amatir"},
|
||||
['blind_h']= {"Tak Terlihat", "SULIT", "Untuk orang berpengalaman"},
|
||||
['blind_l']= {"Tak Terlihat", "GILA", "Untuk profesional"},
|
||||
['blind_u']= {"Tak Terlihat", "???", "Apakah Anda siap?"},
|
||||
['blind_wtf']= {"Tak Terlihat", "TERAKHIR", "Anda belum siap"},
|
||||
['classic_e']= {"Klasik", "MUDAH", "Rekreasi berkecepatan rendah dari tahun 80-an"},
|
||||
['classic_h']= {"Klasik", "SULIT", "Rekreasi berkecepatan medium dari tahun 80-an"},
|
||||
['classic_l']= {"Klasik", "GILA", "Rekreasi berkecepatan medium-tinggi dari tahun 80-an"},
|
||||
['classic_u']= {"Klasik", "TERAKHIR", "Rekreasi berkecepatan tinggi dari tahun 80-an"},
|
||||
['survivor_e']= {"Bertahan", "MUDAH", "Berapa lama Anda bisa bertahan?"},
|
||||
['survivor_n']= {"Bertahan", "NORMAL", "Berapa lama Anda bisa bertahan?"},
|
||||
['survivor_h']= {"Bertahan", "SULIT", "Berapa lama Anda bisa bertahan?"},
|
||||
['survivor_l']= {"Bertahan", "GILA", "Berapa lama Anda bisa bertahan?"},
|
||||
['survivor_u']= {"Bertahan", "TERAKHIR", "Berapa lama Anda bisa bertahan?"},
|
||||
['attacker_h']= {"Penyerang", "SULIT", "Praktekkan keahlian menyerang Anda!"},
|
||||
['attacker_u']= {"Penyerang", "TERAKHIR", "Praktekkan keahlian menyerang Anda!"},
|
||||
['defender_n']= {"Pembela", "NORMAL", "Praktekkan keahlian membela Anda!"},
|
||||
['defender_l']= {"Pembela", "GILA", "Praktekkan keahlian membela Anda!"},
|
||||
['dig_h']= {"Pembor", "SULIT", "Praktekkan keahlian menggali Anda!"},
|
||||
['dig_u']= {"Pembor", "TERAKHIR", "Praktekkan keahlian menggali Anda!"},
|
||||
['clearRush']= {"Gegas Baris", "NORMAL", "Tutorial all-spin!\n[Dalam pengembangan]"},
|
||||
['c4wtrain_n']= {"Latihan C4W", "NORMAL", "Kombo tidak terbatas."},
|
||||
['c4wtrain_l']= {"Latihan C4W", "GILA", "Kombo tidak terbatas."},
|
||||
['pctrain_n']= {"Latihan PC", "NORMAL", "Latihan PC"},
|
||||
['pctrain_l']= {"Latihan PC", "GILA", "Latihan PC yang lebih sulit"},
|
||||
['pc_n']= {"Tantangan PC", "NORMAL", "Dapatkan PC sampai 100 baris!"},
|
||||
['pc_h']= {"Tantangan PC", "SULIT", "Dapatkan PC sampai 100 baris!"},
|
||||
['pc_l']= {"Tantangan PC", "GILA", "Dapatkan PC sampai 100 baris!"},
|
||||
['pc_inf']= {"Tantangan PC", "TAK TERBATAS", "Dapatkan PC sebanyaknya!"},
|
||||
['tech_n']= {"Tech", "NORMAL", "Coba jaga deret Back-To-Back!"},
|
||||
['tech_n_plus']= {"Tech", "NORMAL+", "Hanya Spins & PCs dibolehkan"},
|
||||
['tech_h']= {"Tech", "SULIT", "Coba jaga deret Back-To-Back!"},
|
||||
['tech_h_plus']= {"Tech", "SULIT+", "Hanya Spins & PCs dibolehkan"},
|
||||
['tech_l']= {"Tech", "GILA", "Coba jaga deret Back-To-Back!"},
|
||||
['tech_l_plus']= {"Tech", "GILA+", "Hanya Spins & PCs dibolehkan"},
|
||||
['tech_finesse']= {"Tech", "EF. TOMBOL", "Efisiensi tombol harus maksimal!"},
|
||||
['tech_finesse_f']= {"Tech", "EF. TOMBOL+", "Efisiensi tombol maksimal dan tidak ada garis normal!"},
|
||||
['tsd_e']= {"Tantangan TSD", "MUDAH", "Hanya T-Spin Double dibolehkan!"},
|
||||
['tsd_h']= {"Tantangan TSD", "SULIT", "Hanya T-Spin Double dibolehkan!"},
|
||||
['tsd_u']= {"Tantangan TSD", "TERAKHIR", "Hanya T-Spin Double dibolehkan!"},
|
||||
['backfire_n']= {"Serangan Balik", "NORMAL", "Tahankan serang baliknya!"},
|
||||
['backfire_h']= {"Serangan Balik", "SULIT", "Tahankan serang baliknya!"},
|
||||
['backfire_l']= {"Serangan Balik", "GILA", "Tahankan serang baliknya!"},
|
||||
['backfire_u']= {"Serangan Balik", "TERAKHIR", "Tahankan serang baliknya!"},
|
||||
['sprintAtk']= {"Balapan", "100 Serangan", "Kirim 100 baris serangan!"},
|
||||
['sprintEff']= {"Balapan", "Efisiensi", "Kirim lebih banyak serangan sampai 40 baris!"},
|
||||
['zen']= {"Zen", "200L", "Permainan 200-garis tanpa batas waktu"},
|
||||
['ultra']= {"Ultra", "EKSTRA", "Permainan 2 menit. Dapatkan nilai sebanyaknya!"},
|
||||
['infinite']= {"Tak Terbatas", "", "Bak pasir"},
|
||||
['infinite_dig']= {"Tak Terbatas: Gali","", "Gali, gali, gali"},
|
||||
['marathon_inf']= {"Maraton", "TAK TERBATAS", "Maraton tanpa akhir."},
|
||||
['sprint_10l']= {"Balapan", "10L", "Buat 10 baris!"},
|
||||
['sprint_20l']= {"Balapan", "20L", "Buat 20 baris!"},
|
||||
['sprint_40l']= {"Balapan", "40L", "Buat 40 baris!"},
|
||||
['sprint_100l']= {"Balapan", "100L", "Buat 100 baris!"},
|
||||
['sprint_400l']= {"Balapan", "400L", "Buat 400 baris!"},
|
||||
['sprint_1000l']= {"Balapan", "1.000L", "Buat 1.000 baris!"},
|
||||
['sprintPenta']= {"Balapan", "PENTOMINO", "40L dengan pentomino!"},
|
||||
['sprintMPH']= {"Balapan", "MPH", "Tanpa ingatan\nTanpa pratinjau\nTanpa simpan"},
|
||||
['dig_10l']= {"Gali", "10L", "Gali 10 baris!"},
|
||||
['dig_40l']= {"Gali", "40L", "Gali 40 baris!"},
|
||||
['dig_100l']= {"Gali", "100L", "Gali 100 baris!"},
|
||||
['dig_400l']= {"Gali", "400L", "Gali 400 baris!"},
|
||||
['dig_eff_10l']= {"Gali", "EFISIENSI 10L", "Gali 10 baris!"},
|
||||
['dig_eff_40l']= {"Gali", "EFISIENSI 40L", "Gali 40 baris!"},
|
||||
['dig_eff_100l']= {"Gali", "EFISIENSI 100L","Gali 100 baris!"},
|
||||
['dig_eff_400l']= {"Gali", "EFISIENSI 400L","Gali 400 baris!"},
|
||||
['drought_n']= {"Nasib Buruk", "100L", "Tidak ada blok I..."},
|
||||
['drought_l']= {"Nasib Buruk+", "100L", "Nasib sangat buruk..."},
|
||||
['marathon_n']= {"Maraton", "NORMAL", "200-baris maraton dengan kecepatan meningkat"},
|
||||
['marathon_h']= {"Maraton", "SULIT", "200-baris maraton dengan kecepatan tinggi"},
|
||||
['solo_e']= {"Tarung", "MUDAH", "Kalahkan AInya!"},
|
||||
['solo_n']= {"Tarung", "NORMAL", "Kalahkan AInya!"},
|
||||
['solo_h']= {"Tarung", "SULIT", "Kalahkan AInya!"},
|
||||
['solo_l']= {"Tarung", "GILA", "Kalahkan AInya!"},
|
||||
['solo_u']= {"Tarung", "TERAKHIR", "Kalahkan AInya!"},
|
||||
['techmino49_e']= {"Tech 49", "MUDAH", "Pertarungan dengan 49 pemain."},
|
||||
['techmino49_h']= {"Tech 49", "SULIT", "Pertarungan dengan 49 pemain."},
|
||||
['techmino49_u']= {"Tech 49", "TERAKHIR", "Pertarungan dengan 49 pemain."},
|
||||
['techmino99_e']= {"Tech 99", "MUDAH", "Pertarungan dengan 99 pemain."},
|
||||
['techmino99_h']= {"Tech 99", "SULIT", "Pertarungan dengan 99 pemain."},
|
||||
['techmino99_u']= {"Tech 99", "TERAKHIR", "Pertarungan dengan 99 pemain."},
|
||||
['round_e']= {"Giliran", "MUDAH", "Giliran main melawan AI!"},
|
||||
['round_n']= {"Giliran", "NORMAL", "Giliran main melawan AI!"},
|
||||
['round_h']= {"Giliran", "SULIT", "Giliran main melawan AI!"},
|
||||
['round_l']= {"Giliran", "GILA", "Giliran main melawan AI!"},
|
||||
['round_u']= {"Giliran", "TERAKHIR", "Giliran main melawan AI!"},
|
||||
['master_n']= {"Jago", "NORMAL", "Untuk pemula 20G"},
|
||||
['master_h']= {"Jago", "SULIT", "Untuk pro 20G"},
|
||||
['master_m']= {"Jago", "M21", "Untuk jago 20G"},
|
||||
['master_final']= {"Jago", "TERAKHIR", "Lebih dari 20G"},
|
||||
['master_ph']= {"Jago", "KHAYALAN", "???"},
|
||||
['master_ex']= {"Sangat Jago", "EKSTRA", "Blok tidak kelihatan"},
|
||||
['master_instinct']={"Jago", "INSTINK", "Bagaimana jika blok terkontrol tersembunyi?"},
|
||||
['strategy_e']= {"Strategi", "MUDAH", "Keputusan 20G cepat"},
|
||||
['strategy_h']= {"Strategi", "SULIT", "Keputusan 20G cepat"},
|
||||
['strategy_u']= {"Strategi", "TERAKHIR", "Keputusan 20G cepat"},
|
||||
['strategy_e_plus']={"Strategi", "MUDAH+", "Mode strategi, tetapi tanpa menyimpan"},
|
||||
['strategy_h_plus']={"Strategi", "SULIT+", "Mode strategi, tetapi tanpa menyimpan"},
|
||||
['strategy_u_plus']={"Strategi", "TERAKHIR+", "Mode strategi, tetapi tanpa menyimpan"},
|
||||
['blind_e']= {"Tak Terlihat", "MUDAH", "Untuk pemula"},
|
||||
['blind_n']= {"Tak Terlihat", "NORMAL", "Untuk amatir"},
|
||||
['blind_h']= {"Tak Terlihat", "SULIT", "Untuk orang berpengalaman"},
|
||||
['blind_l']= {"Tak Terlihat", "GILA", "Untuk profesional"},
|
||||
['blind_u']= {"Tak Terlihat", "???", "Apakah Anda siap?"},
|
||||
['blind_wtf']= {"Tak Terlihat", "TERAKHIR", "Anda belum siap"},
|
||||
['classic_e']= {"Klasik", "MUDAH", "Rekreasi berkecepatan rendah dari tahun 80-an"},
|
||||
['classic_h']= {"Klasik", "SULIT", "Rekreasi berkecepatan medium dari tahun 80-an"},
|
||||
['classic_l']= {"Klasik", "GILA", "Rekreasi berkecepatan medium-tinggi dari tahun 80-an"},
|
||||
['classic_u']= {"Klasik", "TERAKHIR", "Rekreasi berkecepatan tinggi dari tahun 80-an"},
|
||||
['survivor_e']= {"Bertahan", "MUDAH", "Berapa lama Anda bisa bertahan?"},
|
||||
['survivor_n']= {"Bertahan", "NORMAL", "Berapa lama Anda bisa bertahan?"},
|
||||
['survivor_h']= {"Bertahan", "SULIT", "Berapa lama Anda bisa bertahan?"},
|
||||
['survivor_l']= {"Bertahan", "GILA", "Berapa lama Anda bisa bertahan?"},
|
||||
['survivor_u']= {"Bertahan", "TERAKHIR", "Berapa lama Anda bisa bertahan?"},
|
||||
['attacker_h']= {"Penyerang", "SULIT", "Praktekkan keahlian menyerang Anda!"},
|
||||
['attacker_u']= {"Penyerang", "TERAKHIR", "Praktekkan keahlian menyerang Anda!"},
|
||||
['defender_n']= {"Pembela", "NORMAL", "Praktekkan keahlian membela Anda!"},
|
||||
['defender_l']= {"Pembela", "GILA", "Praktekkan keahlian membela Anda!"},
|
||||
['dig_h']= {"Pembor", "SULIT", "Praktekkan keahlian menggali Anda!"},
|
||||
['dig_u']= {"Pembor", "TERAKHIR", "Praktekkan keahlian menggali Anda!"},
|
||||
['clearRush']= {"Gegas Baris", "NORMAL", "Tutorial all-spin!\n[Dalam pengembangan]"},
|
||||
['c4wtrain_n']= {"Latihan C4W", "NORMAL", "Kombo tidak terbatas."},
|
||||
['c4wtrain_l']= {"Latihan C4W", "GILA", "Kombo tidak terbatas."},
|
||||
['pctrain_n']= {"Latihan PC", "NORMAL", "Latihan PC"},
|
||||
['pctrain_l']= {"Latihan PC", "GILA", "Latihan PC yang lebih sulit"},
|
||||
['pc_n']= {"Tantangan PC", "NORMAL", "Dapatkan PC sampai 100 baris!"},
|
||||
['pc_h']= {"Tantangan PC", "SULIT", "Dapatkan PC sampai 100 baris!"},
|
||||
['pc_l']= {"Tantangan PC", "GILA", "Dapatkan PC sampai 100 baris!"},
|
||||
['pc_inf']= {"Tantangan PC", "TAK TERBATAS", "Dapatkan PC sebanyaknya!"},
|
||||
['tech_n']= {"Tech", "NORMAL", "Coba jaga deret Back-To-Back!"},
|
||||
['tech_n_plus']= {"Tech", "NORMAL+", "Hanya Spins & PCs dibolehkan"},
|
||||
['tech_h']= {"Tech", "SULIT", "Coba jaga deret Back-To-Back!"},
|
||||
['tech_h_plus']= {"Tech", "SULIT+", "Hanya Spins & PCs dibolehkan"},
|
||||
['tech_l']= {"Tech", "GILA", "Coba jaga deret Back-To-Back!"},
|
||||
['tech_l_plus']= {"Tech", "GILA+", "Hanya Spins & PCs dibolehkan"},
|
||||
['tech_finesse']= {"Tech", "EF. TOMBOL", "Efisiensi tombol harus maksimal!"},
|
||||
['tech_finesse_f']= {"Tech", "EF. TOMBOL+", "Efisiensi tombol maksimal dan tidak ada garis normal!"},
|
||||
['tsd_e']= {"Tantangan TSD", "MUDAH", "Hanya T-Spin Double dibolehkan!"},
|
||||
['tsd_h']= {"Tantangan TSD", "SULIT", "Hanya T-Spin Double dibolehkan!"},
|
||||
['tsd_u']= {"Tantangan TSD", "TERAKHIR", "Hanya T-Spin Double dibolehkan!"},
|
||||
['backfire_n']= {"Serangan Balik", "NORMAL", "Tahankan serang baliknya!"},
|
||||
['backfire_h']= {"Serangan Balik", "SULIT", "Tahankan serang baliknya!"},
|
||||
['backfire_l']= {"Serangan Balik", "GILA", "Tahankan serang baliknya!"},
|
||||
['backfire_u']= {"Serangan Balik", "TERAKHIR", "Tahankan serang baliknya!"},
|
||||
['sprintAtk']= {"Balapan", "100 Serangan", "Kirim 100 baris serangan!"},
|
||||
['sprintEff']= {"Balapan", "Efisiensi", "Kirim lebih banyak serangan sampai 40 baris!"},
|
||||
['zen']= {"Zen", "200L", "Permainan 200-garis tanpa batas waktu"},
|
||||
['ultra']= {"Ultra", "EKSTRA", "Permainan 2 menit. Dapatkan nilai sebanyaknya!"},
|
||||
['infinite']= {"Tak Terbatas", "", "Bak pasir"},
|
||||
['infinite_dig']= {"Tak Terbatas: Gali","", "Gali, gali, gali"},
|
||||
['marathon_inf']= {"Maraton", "TAK TERBATAS", "Maraton tanpa akhir."},
|
||||
|
||||
['custom_clear']= {"Tersesuai", "NORMAL"},
|
||||
['custom_puzzle']= {"Tersesuai", "TEKA-TEKI"},
|
||||
|
||||
@@ -96,7 +96,7 @@ return{
|
||||
|
||||
noScore="スコア無し",
|
||||
modeLocked="ロック",
|
||||
unlockHint="ランクB以上を取得すると解放されるよ!",
|
||||
unlockHint="ランクB以上を取得すると解放されるよ!",
|
||||
highScore="最高得点",
|
||||
newRecord="新記録!",
|
||||
|
||||
@@ -251,6 +251,12 @@ return{
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"イラスト",
|
||||
"Miya",
|
||||
"Mono",
|
||||
"Xiaoya",
|
||||
"葉枭",
|
||||
"",
|
||||
"ミュージカルデザイン",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
@@ -317,7 +323,6 @@ return{
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="Support the Author",
|
||||
WidgetText={
|
||||
@@ -461,7 +466,6 @@ return{
|
||||
atkFX="攻撃演出",
|
||||
|
||||
frame="レンダリングフレームレート(%)",
|
||||
FTlock="フレームスキップ",
|
||||
|
||||
text="ライン消去ポップ",
|
||||
score="スコアポップ",
|
||||
@@ -690,6 +694,7 @@ return{
|
||||
register="サインアップ",
|
||||
email="Eメールアドレス",
|
||||
password="パスワード",
|
||||
-- showEmail="Show Email",
|
||||
keepPW="常にログイン",
|
||||
login="ログイン",
|
||||
},
|
||||
|
||||
@@ -238,6 +238,12 @@ return{
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"Ilustrações",
|
||||
"Miya",
|
||||
"Mono",
|
||||
"Xiaoya",
|
||||
"葉枭",
|
||||
"",
|
||||
"Desenhos Musicais",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
@@ -304,7 +310,6 @@ return{
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="Support author",
|
||||
WidgetText={
|
||||
@@ -448,7 +453,6 @@ return{
|
||||
atkFX="Nível FX Atk.",
|
||||
|
||||
frame="Render Frame Rate(%)",
|
||||
-- FTlock="Frame-Time Lock",
|
||||
|
||||
text="Texto de ação",
|
||||
score="Pop-up de pontos",
|
||||
@@ -678,6 +682,7 @@ return{
|
||||
register="Registrar",
|
||||
email="Endereço De Email",
|
||||
password="Senha",
|
||||
-- showEmail="Show Email",
|
||||
-- keepPW="Remember me",
|
||||
login="Log in",
|
||||
},
|
||||
|
||||
@@ -269,7 +269,6 @@ return{
|
||||
atkFX="→→~",
|
||||
|
||||
frame="|=|%",
|
||||
FTlock="||=|→→|=||",
|
||||
|
||||
text="ABC",
|
||||
score="+123",
|
||||
@@ -489,7 +488,8 @@ return{
|
||||
register="Sign up",
|
||||
email="@",
|
||||
password="*",
|
||||
-- keepPW="I",
|
||||
showEmail="?",
|
||||
keepPW="!",
|
||||
login="Log in",
|
||||
},
|
||||
register={
|
||||
|
||||
@@ -198,7 +198,7 @@ return{
|
||||
"多余操作/极简率:",
|
||||
},
|
||||
aboutTexts={
|
||||
"这只是一个普通的方块游戏,请勿将此与某带国家名的事物强行联系",
|
||||
"这只是一个普通的方块游戏",
|
||||
"从C2/IO/JS/WWC/KOS等方块获得过灵感",
|
||||
"",
|
||||
"使用LÖVE引擎",
|
||||
@@ -250,6 +250,12 @@ return{
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"插图",
|
||||
"Miya",
|
||||
"Mono",
|
||||
"Xiaoya",
|
||||
"葉枭",
|
||||
"",
|
||||
"音乐设计",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
@@ -316,7 +322,6 @@ return{
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="支持作者",
|
||||
WidgetText={
|
||||
@@ -420,13 +425,13 @@ return{
|
||||
title="游戏设置",
|
||||
graphic="←画面",
|
||||
sound="声音→",
|
||||
style="风格",
|
||||
style="方块风格…",
|
||||
|
||||
ctrl="控制设置",
|
||||
key="键位设置",
|
||||
touch="触屏设置",
|
||||
ctrl="控制设置…",
|
||||
key="键位设置…",
|
||||
touch="触屏设置…",
|
||||
showVK="显示虚拟按键",
|
||||
reTime="开局等待时间",
|
||||
reTime="开局等待时间:",
|
||||
RS="旋转系统",
|
||||
menuPos="菜单按钮位置",
|
||||
sysCursor="使用系统光标",
|
||||
@@ -446,21 +451,20 @@ return{
|
||||
bagLine="包分界线",
|
||||
|
||||
ghostType="阴影样式",
|
||||
ghost="阴影不透明度",
|
||||
center="旋转中心不透明度",
|
||||
grid="网格不透明度",
|
||||
lineNum="行号透明度",
|
||||
ghost="阴影不透明度:",
|
||||
center="旋转中心不透明度:",
|
||||
grid="网格不透明度:",
|
||||
lineNum="行号透明度:",
|
||||
|
||||
lockFX="锁定特效",
|
||||
dropFX="下落特效",
|
||||
moveFX="移动特效",
|
||||
clearFX="消除特效",
|
||||
splashFX="溅射特效",
|
||||
shakeFX="晃动特效",
|
||||
atkFX="攻击特效",
|
||||
lockFX="锁定特效:",
|
||||
dropFX="下落特效:",
|
||||
moveFX="移动特效:",
|
||||
clearFX="消除特效:",
|
||||
splashFX="溅射特效:",
|
||||
shakeFX="晃动特效:",
|
||||
atkFX="攻击特效:",
|
||||
|
||||
frame="绘制帧率(%)",
|
||||
FTlock="逻辑追帧",
|
||||
frame="绘制帧率(%):",
|
||||
|
||||
text="消行文本",
|
||||
score="分数动画",
|
||||
@@ -471,7 +475,7 @@ return{
|
||||
warn="死亡预警",
|
||||
|
||||
clickFX="点按特效",
|
||||
power="电量显示",
|
||||
power="电量和时间",
|
||||
clean="绘制优化",
|
||||
fullscreen="全屏",
|
||||
|
||||
@@ -487,14 +491,14 @@ return{
|
||||
game="←游戏",
|
||||
graphic="画面→",
|
||||
|
||||
mainVol="总音量",
|
||||
bgm="音乐",
|
||||
sfx="音效",
|
||||
stereo="立体声",
|
||||
spawn="方块生成",
|
||||
warn="危险警告",
|
||||
vib="振动",
|
||||
voc="语音",
|
||||
mainVol="总音量:",
|
||||
bgm="音乐:",
|
||||
sfx="音效:",
|
||||
stereo="立体声:",
|
||||
spawn="方块生成:",
|
||||
warn="危险警告:",
|
||||
vib="振动强度:",
|
||||
voc="语音:",
|
||||
|
||||
autoMute="失去焦点自动静音",
|
||||
fine="非极简操作时播放提示音",
|
||||
@@ -506,10 +510,10 @@ return{
|
||||
title="控制设置",
|
||||
preview="预览",
|
||||
|
||||
das="DAS",arr="ARR",
|
||||
dascut="DAS打断",
|
||||
dropcut="误硬降打断",
|
||||
sddas="软降DAS",sdarr="软降ARR",
|
||||
das="DAS:",arr="ARR:",
|
||||
dascut="DAS打断:",
|
||||
dropcut="误硬降打断:",
|
||||
sddas="软降DAS:",sdarr="软降ARR:",
|
||||
ihs="提前Hold",
|
||||
irs="提前旋转",
|
||||
ims="提前移动",
|
||||
@@ -560,9 +564,9 @@ return{
|
||||
norm="标准",
|
||||
pro="专业",
|
||||
icon="图标",
|
||||
sfx="按键音效",
|
||||
vib="按键振动",
|
||||
alpha="不透明度",
|
||||
sfx="按键音效:",
|
||||
vib="按键振动:",
|
||||
alpha="不透明度:",
|
||||
|
||||
track="按键自动跟踪",
|
||||
dodge="自动避让",
|
||||
@@ -597,8 +601,8 @@ return{
|
||||
eventSet="规则包",
|
||||
|
||||
holdMode="Hold模式",
|
||||
nextCount="Next",
|
||||
holdCount="Hold",
|
||||
nextCount="Next数:",
|
||||
holdCount="Hold数:",
|
||||
infHold="无限Hold",
|
||||
phyHold="物理Hold",
|
||||
|
||||
@@ -634,8 +638,8 @@ return{
|
||||
|
||||
newPg="新页面(N)",
|
||||
delPg="删除页面(M)",
|
||||
prevPg="上一页面",
|
||||
nextPg="下一页面",
|
||||
prevPg="上一页",
|
||||
nextPg="下一页",
|
||||
},
|
||||
custom_sequence={
|
||||
title="自定义游戏",
|
||||
@@ -688,6 +692,7 @@ return{
|
||||
register="注册",
|
||||
email="邮箱",
|
||||
password="密码",
|
||||
showEmail="显示邮箱",
|
||||
keepPW="保存密码",
|
||||
login="登录",
|
||||
},
|
||||
@@ -695,9 +700,9 @@ return{
|
||||
title="注册",
|
||||
login="登录",
|
||||
username="用户名",
|
||||
email="邮箱",
|
||||
password="密码",
|
||||
password2="确认密码",
|
||||
email="邮箱:",
|
||||
password="密码:",
|
||||
password2="确认密码:",
|
||||
register="注册",
|
||||
registering="等待服务器响应……",
|
||||
},
|
||||
@@ -770,6 +775,10 @@ return{
|
||||
['dig_40l']= {"挖掘", "40L", "挖掘40行"},
|
||||
['dig_100l']= {"挖掘", "100L", "挖掘100行"},
|
||||
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
||||
['dig_eff_10l']= {"挖掘", "效率 10L", "挖掘10行用最少的件数"},
|
||||
['dig_eff_40l']= {"挖掘", "效率 40L", "挖掘40行用最少的件数"},
|
||||
['dig_eff_100l']= {"挖掘", "效率 100L","挖掘100行用最少的件数"},
|
||||
['dig_eff_400l']= {"挖掘", "效率 400L","挖掘400行用最少的件数"},
|
||||
['drought_n']= {"干旱", "100L", "你I没了"},
|
||||
['drought_l']= {"干旱+", "100L", "后 妈 发 牌"},
|
||||
['marathon_n']= {"马拉松", "普通", "200行加速马拉松"},
|
||||
|
||||
@@ -248,6 +248,12 @@ return{
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"插图",
|
||||
"米娅",
|
||||
"东西",
|
||||
"小亚",
|
||||
"葉枭",
|
||||
"",
|
||||
"音乐设计",
|
||||
"Z先生",
|
||||
"柒栎流星",
|
||||
@@ -314,7 +320,6 @@ return{
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="供养作者!",
|
||||
WidgetText={
|
||||
@@ -458,7 +463,6 @@ return{
|
||||
atkFX="攻击外汇",
|
||||
|
||||
frame="渲染帧率(%)",
|
||||
FTlock="逻辑追帧",
|
||||
|
||||
text="行清除弹出窗口",
|
||||
score="分数弹出",
|
||||
@@ -686,6 +690,7 @@ return{
|
||||
register="登记",
|
||||
email="电子邮件地址",
|
||||
password="密码",
|
||||
showEmail="显示电子邮件",
|
||||
keepPW="记得我吗",
|
||||
login="登录",
|
||||
},
|
||||
@@ -766,6 +771,10 @@ return{
|
||||
['dig_40l']= {"挖掘", "40升", "挖40条垃圾线"},
|
||||
['dig_100l']= {"挖掘", "100升", "挖100条垃圾线"},
|
||||
['dig_400l']= {"挖掘", "400升", "挖400条垃圾线"},
|
||||
['dig_eff_10l']= {"挖掘", "管理 10升", "挖掘10条数量最少的线路"},
|
||||
['dig_eff_40l']= {"挖掘", "管理 40升", "挖掘40条数量最少的线路"},
|
||||
['dig_eff_100l']= {"挖掘", "管理 100升", "挖掘100条数量最少的线路"},
|
||||
['dig_eff_400l']= {"挖掘", "管理 400升", "挖掘400条数量最少的线路"},
|
||||
['drought_n']= {"干旱", "100升", "没有工装"},
|
||||
['drought_l']= {"干旱+", "100升", "搞什么呀"},
|
||||
['marathon_n']= {"马拉松赛跑", "正常", "200线加速马拉松"},
|
||||
|
||||
@@ -250,6 +250,12 @@ return{
|
||||
"(旋律星萤)",
|
||||
"(T0722)",
|
||||
"",
|
||||
"插圖",
|
||||
"Miya",
|
||||
"Mono",
|
||||
"Xiaoya",
|
||||
"葉枭",
|
||||
"",
|
||||
"音樂設計",
|
||||
"MrZ",
|
||||
"柒栎流星",
|
||||
@@ -316,7 +322,6 @@ return{
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="支持作者",
|
||||
WidgetText={
|
||||
@@ -460,7 +465,6 @@ return{
|
||||
atkFX="攻擊特效",
|
||||
|
||||
frame="渲染幀率(%)",
|
||||
FTlock="跳幀",
|
||||
|
||||
text="清除文本",
|
||||
score="分數動畫",
|
||||
@@ -688,6 +692,7 @@ return{
|
||||
register="註冊",
|
||||
email="電郵",
|
||||
password="密碼",
|
||||
showEmail="顯示郵箱",
|
||||
keepPW="保存密碼",
|
||||
login="登錄",
|
||||
},
|
||||
@@ -770,6 +775,10 @@ return{
|
||||
['dig_40l']= {"挖掘", "40L", "挖掘40行"},
|
||||
['dig_100l']= {"挖掘", "100L", "挖掘100行"},
|
||||
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
||||
['dig_eff_10l']= {"挖掘", "效率 10L", "挖掘10行用最少的件數"},
|
||||
['dig_eff_40l']= {"挖掘", "效率 40L", "挖掘40行用最少的件數"},
|
||||
['dig_eff_100l']= {"挖掘", "效率 100L","挖掘100行用最少的件數"},
|
||||
['dig_eff_400l']= {"挖掘", "效率 400L","挖掘400行用最少的件數"},
|
||||
['drought_n']= {"乾旱", "100L", "你I沒了"},
|
||||
['drought_l']= {"乾旱+", "100L", "後 媽 發 牌"},
|
||||
['marathon_n']= {"馬拉松", "普通", "200行加速馬拉松"},
|
||||
|
||||
@@ -2,16 +2,16 @@ Gameplay:
|
||||
The system will provide you with tetrominoes (4-block pieces),
|
||||
with a total of 7 types, and the player needs to control them
|
||||
(move left and right, rotate 90, 180, or 270 degrees).
|
||||
each row filled with the field will be cleared.
|
||||
If there is an opponent, an attack will be sent depending on the line clear type
|
||||
Play until the end or achieve the level's goal to win.
|
||||
Each row filled with the field will be cleared.
|
||||
If there is an opponent, an attack will be sent depending on the type of line clear.
|
||||
Play until the end or achieve the level’s goal to win.
|
||||
|
||||
Rotation system:
|
||||
Uses TRS (Techmino Rotation System) by default. The game allows players to choose other commonly used rotation systems (generally unnecessary)
|
||||
|
||||
Spin detection:
|
||||
Satisfies "3 corner" rule +2 points
|
||||
Satisfies "immobile" rule +2 points
|
||||
Satisfies “3-corner” rule +2 points
|
||||
Satisfies “immobile” rule +2 points
|
||||
- As long as one of the above is true, it is a Spin
|
||||
|
||||
If the rotation was not using the second check in the kick table, +1 point
|
||||
@@ -37,19 +37,19 @@ Attack system:
|
||||
send (attack-0.5) attack.
|
||||
|
||||
Combos (REN):
|
||||
The numbers of the combos are equal to (the numbers you clear lines consecutively –1). All damage above (except attack from PC/HPC) will be given a (combo ×25%) bonus, or (combo ×15%) for Single clear (capped at 12 combo), +1 more attack for 3 Combo or more.
|
||||
The numbers of the combos are equal to (the numbers you clear lines consecutively –1). All damage above (except attack from PC/HPC) will be given a (combo ×25%) bonus, or (combo ×15%) for Single clear (capped at 12 combos), +1 more attack for 3 Combo or more.
|
||||
|
||||
Hemi Perfect Clear (a P.C. "with blocks left below". If it's an I clearing 1 line, the remaining blocks must not be player-placed):
|
||||
Hemi Perfect Clear (a P.C. “with blocks left below.” If just one line cleared, the remaining blocks must not be player-placed):
|
||||
- Attack +4, Extra Blocking +2
|
||||
|
||||
Perfect Clear (All Clear):
|
||||
- Sends 8 to 16 (increments within a game by 2 for every PC) OR every other damage above, whichever is higher, and +2 extra blocking.
|
||||
|
||||
After calculating all the above, the damage value will be rounded down and sent.
|
||||
After calculating the above, the damage value will be rounded down and sent.
|
||||
|
||||
|
||||
Back to Back (B2B) gauge:
|
||||
The B2B gauge ranges from 0 to 1,000. Special line clears are B2B if the gauge is >=50, B2B2B if >800.
|
||||
The B2B gauge ranges from 0 to 1,000. Special line clears are B2B if the gauge is ≥ 50, B2B2B if >800.
|
||||
|
||||
Line cleared:
|
||||
Special clears:
|
||||
@@ -60,7 +60,7 @@ Back to Back (B2B) gauge:
|
||||
- A regular line clear -250
|
||||
|
||||
No lines cleared:
|
||||
- Spin (0 lines) +20. Do note that the B2B gauge cannot exceed 800 using this method.
|
||||
- Spin (0 lines) +20. Note that the B2B gauge cannot exceed 800 using this method.
|
||||
|
||||
Score system:
|
||||
The better you play, the higher the score.
|
||||
@@ -70,21 +70,21 @@ Attack delay:
|
||||
Followed by Techrash, Spins, which send slower attacks;
|
||||
High combos are the slowest;
|
||||
For B2B or B2B2B, they also increase the attack delay while they increase lines sent;
|
||||
Minis will greatly increase the delay.
|
||||
Minis will significantly increase the delay.
|
||||
|
||||
Countering:
|
||||
When you send attacks, if there is garbage in the queue,
|
||||
extra blocking will be used first, then attack, countering the earliest attack at a 1:1 ratio.
|
||||
Any extra blocking you didn't use will be discarded, and finally, the remaining attack power will be sent to your opponent.
|
||||
extra blocking will be used first, then attack, countering the earliest attack at a 1 : 1 ratio.
|
||||
Any additional blocking you didn’t use will be discarded, and finally, the remaining attack power will be sent to your opponent.
|
||||
|
||||
Battle Royale modes:
|
||||
Many players play a game at the same time (against AI bots, not real players).
|
||||
As players get eliminated, blocks fall faster, and garbage takes effect faster, as well as rises faster.
|
||||
Eliminate other players to gain a badge and the player's badge to increase your attack power.
|
||||
Many players play a game simultaneously (against AI bots, not actual players).
|
||||
As players get eliminated, blocks fall faster, and garbage takes effect and rises faster.
|
||||
Eliminate other players to gain a badge and the player’s badge to increase your attack power.
|
||||
Players can choose between four attack modes:
|
||||
1. Random: Every time you attack, 10% chance to lock onto a random player.
|
||||
2. Badges: After you attack or when your target dies, lock onto the player with the most badges.
|
||||
3. KOs: After you attack or when your target dies, lock onto the player with the highest field. (Refreshes every second)
|
||||
3. KOs: Lock onto the player with the highest field after you attack or when your target dies. (Refreshes every second)
|
||||
4. Attackers: attack all players locking onto yourself.
|
||||
Your attack will be sent to all of them. If you are not targeted, you attack a random player (not locking).
|
||||
When all opponents have been eliminated, the last player in the match is the winner.
|
||||
@@ -97,4 +97,4 @@ Custom mode:
|
||||
empty cells can be in any state;
|
||||
regular colored cells have to be made of the corresponding block;
|
||||
garbage-colored cells can be any block but not air.
|
||||
Once you make the shape, you will win.
|
||||
Once you make the shape, you will win.
|
||||
@@ -1,33 +1,33 @@
|
||||
游戏方法:
|
||||
系统会提供的一个个四连骨牌("方块",总共7种)
|
||||
玩家需要控制(左右移动和旋转90,180,270度)这些骨牌直到下落到场地底部,锁定
|
||||
系统会提供的一个个四连骨牌( “方块”, 总共7种)
|
||||
玩家需要控制(左右移动和旋转90, 180, 270度)这些骨牌直到下落到场地底部, 锁定
|
||||
每填满场地的一行就会将其消除(如果有对手的话根据消除方式会给对手攻击)
|
||||
尝试存活更久,或者完成目标即胜利.
|
||||
尝试存活更久, 或者完成目标即胜利.
|
||||
|
||||
旋转系统:
|
||||
默认使用Techmino专属旋转系统TRS,允许玩家自选其他较常用的旋转系统(一般不必要)
|
||||
默认使用Techmino专属旋转系统TRS, 允许玩家自选其他较常用的旋转系统(一般不必要)
|
||||
|
||||
spin判定:
|
||||
Spin判定:
|
||||
满足三角判定+2分
|
||||
满足不可移动判定+2分
|
||||
--满足以上之一就算是spin
|
||||
--满足以上之一就算是Spin
|
||||
满足非第二个test+1分
|
||||
--如果分数只有2,方块是SZJLT之一,并且没有把当前方块整个消除那么就是mini
|
||||
|
||||
攻击系统:
|
||||
概念说明[高级消除]:
|
||||
spin/消四及以上,会受到B2B(点数>=50)或B3B(点数>800)加成
|
||||
Spin/消四及以上,会受到B2B(点数>=50)或B3B(点数>800)加成
|
||||
反之称为低级消除
|
||||
概念说明[特殊消除]:
|
||||
spin/消四及以上/pc/hpc,可以增加B2B点数
|
||||
Spin/消四及以上/PC/HPC,可以增加B2B点数
|
||||
反之称为普通消除
|
||||
|
||||
高级消除(spin):
|
||||
高级消除(Spin):
|
||||
打出[2*消行数]攻击,然后
|
||||
- B2B攻击+[1/1/2/4/8/14(spin1~6)]
|
||||
- B2B攻击+[1/1/2/4/8/14(Spin1~6)]
|
||||
- B3B攻击在B2B基础上+消行数*0.5,+1额外抵挡
|
||||
- mini减至25%
|
||||
高级消除(非spin但是消四及以上):
|
||||
高级消除(非Spin但是消四及以上):
|
||||
打出[消行数]攻击,然后
|
||||
- B2B攻击+1
|
||||
- B3B攻击+50%,+1额外抵挡
|
||||
@@ -37,7 +37,7 @@ spin判定:
|
||||
(注:连击数为连续消除次数-1)
|
||||
把上述高级消除/低级消除的攻击直接乘以"连击倍率", 公式为 "连击倍率"=[连击数(上限12)]*[消一行以上25%,只消一行15%]
|
||||
如果消除>=3次时再额外加1攻击
|
||||
半全消("下方有剩余方块"的全消,如果是I消1行则必须不剩余玩家放置的方块):
|
||||
半全消("下方有剩余方块"的全消,如果只消了1行则必须不剩余玩家放置的方块):
|
||||
伤害+4,额外抵挡+2
|
||||
全消:
|
||||
伤害为8~16(本局内递增2),和上述其他伤害取大,+2额外抵挡
|
||||
@@ -48,21 +48,21 @@ back to back(B2B)点数说明:
|
||||
|
||||
落块后消行了:
|
||||
特殊消除:
|
||||
spin1~5:+[50/100/180/800/1000](mini变为原来50%)
|
||||
Spin1~5:+[50/100/180/800/1000](mini变为原来50%)
|
||||
消四/五/六:+[150/200/...]
|
||||
本局内消行数>4时全消:+800
|
||||
半全消:+100
|
||||
普通消除:
|
||||
-250
|
||||
落块后没消行:
|
||||
空spin:+20
|
||||
空Spin:+20
|
||||
点数在800以上会-40(不低于800)
|
||||
|
||||
分数系统:
|
||||
分数计算系统非常复杂,而且随时可能更改所以不写在这里,并且计算只跟消除方式等信息有关,和模式设定无关
|
||||
|
||||
攻击延迟:
|
||||
消2/3的攻击生效最快,消四其次,spin攻击生效较慢,高连击生效最慢
|
||||
消2/3的攻击生效最快,消四其次,Spin攻击生效较慢,高连击生效最慢
|
||||
B2B或者B3B增加攻击力的同时也会减缓一点生效速度,mini大幅减缓生效速度
|
||||
|
||||
抵消逻辑:
|
||||
|
||||
@@ -2,24 +2,29 @@ return{
|
||||
{name='sprint_10l', x=0, y=0, size=40,shape=1,icon="sprint1", unlock={'sprint_20l','sprint_40l'}},
|
||||
{name='sprint_20l', x=-200, y=200, size=50,shape=1,icon="sprint1"},
|
||||
{name='sprint_40l', x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={'dig_10l','sprint_100l','marathon_n','sprintPenta','sprintMPH','sprint123','secret_grade'}},
|
||||
{name='sprint_100l', x=-200, y=0, size=50,shape=1,icon="sprint2", unlock={'sprint_400l','drought_n'}},
|
||||
{name='sprint_400l', x=-400, y=0, size=40,shape=1,icon="sprint3", unlock={'sprint_1000l'}},
|
||||
{name='sprint_1000l', x=-600, y=0, size=40,shape=1,icon="sprint3"},
|
||||
{name='sprint_100l', x=-400, y=200, size=50,shape=1,icon="sprint2", unlock={'sprint_400l','drought_n'}},
|
||||
{name='sprint_400l', x=-600, y=200, size=40,shape=1,icon="sprint3", unlock={'sprint_1000l'}},
|
||||
{name='sprint_1000l', x=-800, y=200, size=40,shape=1,icon="sprint3"},
|
||||
|
||||
{name='sprintPenta', x=180, y=-160, size=40,shape=3,icon="sprint_pento"},
|
||||
{name='sprintMPH', x=220, y=-300, size=40,shape=3,icon="sprint2"},
|
||||
{name='sprint123', x=180, y=-440, size=40,shape=1,icon="sprint_tri"},
|
||||
|
||||
|
||||
{name='secret_grade', x=-200, y=-400, size=40,shape=1,icon="secret_grade"},
|
||||
|
||||
{name='drought_n', x=-400, y=200, size=40,shape=1,icon="drought", unlock={'drought_l'}},
|
||||
{name='drought_l', x=-600, y=200, size=40,shape=1,icon="drought"},
|
||||
{name='drought_n', x=-600, y=400, size=40,shape=1,icon="drought", unlock={'drought_l'}},
|
||||
{name='drought_l', x=-800, y=400, size=40,shape=1,icon="drought"},
|
||||
|
||||
{name='dig_10l', x=-200, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_40l'}},
|
||||
{name='dig_10l', x=-200, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_40l','dig_eff_10l'}},
|
||||
{name='dig_40l', x=-400, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_100l'}},
|
||||
{name='dig_100l', x=-600, y=-200, size=40,shape=1,icon="dig_sprint", unlock={'dig_400l'}},
|
||||
{name='dig_400l', x=-800, y=-200, size=40,shape=1,icon="dig_sprint"},
|
||||
|
||||
{name='dig_eff_10l', x=-400, y=0, size=40,shape=1,icon="dig_sprint", unlock={'dig_eff_40l'}},
|
||||
{name='dig_eff_40l', x=-600, y=0, size=40,shape=1,icon="dig_sprint", unlock={'dig_eff_100l'}},
|
||||
{name='dig_eff_100l', x=-800, y=0, size=40,shape=1,icon="dig_sprint", unlock={'dig_eff_400l'}},
|
||||
{name='dig_eff_400l', x=-1000, y=0, size=40,shape=1,icon="dig_sprint"},
|
||||
|
||||
{name='marathon_n', x=0, y=-600, size=60,shape=1,icon="marathon", unlock={'marathon_h','solo_e','round_e','big_n','blind_e','classic_e','survivor_e','clearRush','zen'}},
|
||||
{name='marathon_h', x=0, y=-800, size=50,shape=1,icon="marathon", unlock={'master_n','strategy_e'}},
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ return{
|
||||
eventSet='big_h',
|
||||
bg='cubes',bgm='push',
|
||||
},
|
||||
score=function(P)return{P.stat.row,P.stat.time}end,
|
||||
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)
|
||||
|
||||
@@ -7,7 +7,7 @@ return{
|
||||
eventSet='big_n',
|
||||
bg='bg2',bgm='push',
|
||||
},
|
||||
score=function(P)return{P.stat.row,P.stat.time}end,
|
||||
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)
|
||||
|
||||
21
parts/modes/dig_eff_100l.lua
Normal file
@@ -0,0 +1,21 @@
|
||||
return{
|
||||
env={
|
||||
pushSpeed=6,
|
||||
eventSet='dig_100l',
|
||||
bg='bg2',bgm='way',
|
||||
},
|
||||
score=function(P)return{P.stat.piece,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Pieces "..STRING.time(D[2]) end,
|
||||
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
if P.stat.dig<100 then return end
|
||||
local P=P.stat.piece
|
||||
return
|
||||
P<=260 and 5 or
|
||||
P<=320 and 4 or
|
||||
P<=420 and 3 or
|
||||
P<=520 and 2 or
|
||||
P<=620 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
21
parts/modes/dig_eff_10l.lua
Normal file
@@ -0,0 +1,21 @@
|
||||
return{
|
||||
env={
|
||||
pushSpeed=6,
|
||||
eventSet='dig_10l',
|
||||
bg='bg1',bgm='way',
|
||||
},
|
||||
score=function(P)return{P.stat.piece,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Pieces "..STRING.time(D[2]) end,
|
||||
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
if P.stat.dig<10 then return end
|
||||
local P=P.stat.piece
|
||||
return
|
||||
P<=12 and 5 or
|
||||
P<=18 and 4 or
|
||||
P<=25 and 3 or
|
||||
P<=30 and 2 or
|
||||
P<=40 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
21
parts/modes/dig_eff_400l.lua
Normal file
@@ -0,0 +1,21 @@
|
||||
return{
|
||||
env={
|
||||
pushSpeed=6,
|
||||
eventSet='dig_400l',
|
||||
bg='bg2',bgm='way',
|
||||
},
|
||||
score=function(P)return{P.stat.piece,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Pieces "..STRING.time(D[2]) end,
|
||||
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
if P.stat.dig<400 then return end
|
||||
local P=P.stat.piece
|
||||
return
|
||||
P<=1200 and 5 or
|
||||
P<=1400 and 4 or
|
||||
P<=1500 and 3 or
|
||||
P<=1800 and 2 or
|
||||
P<=2000 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
21
parts/modes/dig_eff_40l.lua
Normal file
@@ -0,0 +1,21 @@
|
||||
return{
|
||||
env={
|
||||
pushSpeed=6,
|
||||
eventSet='dig_40l',
|
||||
bg='bg1',bgm='way',
|
||||
},
|
||||
score=function(P)return{P.stat.piece,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Pieces "..STRING.time(D[2]) end,
|
||||
comp=function(a,b)return a[1]<b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
if P.stat.dig<40 then return end
|
||||
local P=P.stat.piece
|
||||
return
|
||||
P<=80 and 5 or
|
||||
P<=100 and 4 or
|
||||
P<=120 and 3 or
|
||||
P<=160 and 2 or
|
||||
P<=220 and 1 or
|
||||
0
|
||||
end,
|
||||
}
|
||||
@@ -20,15 +20,15 @@ return{
|
||||
getRank=function(P)
|
||||
local G=P.modeData.gradePts
|
||||
return
|
||||
G>=39 and 5 or -- TM+
|
||||
G>=31 and 4 or -- MM- - TM
|
||||
G>=25 and 3 or -- m8 - MO
|
||||
G>=18 and 2 or -- m1 - m7
|
||||
G>=9 and 1 or -- S1 - S9
|
||||
G>=40 and 5 or -- TM+
|
||||
G>=32 and 4 or -- MM- - TM
|
||||
G>=26 and 3 or -- m8 - MO
|
||||
G>=19 and 2 or -- m1 - m7
|
||||
G>=10 and 1 or -- S1 - S9
|
||||
0
|
||||
|
||||
-- Table of grades vs values
|
||||
-- 9 8 7 6 5 4 3 2 1 S1 S2 S3 S4 S5 S6 S7 S8 S9 m1 m2 m3 m4 m5 m6 m7 m8 m9 M MK MV MO MM- MM MM+ GM- GM GM+ TM- TM TM+
|
||||
-- 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
||||
-- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -179,6 +179,8 @@ local function _drawField(P,showInvis)
|
||||
--</drawRow>
|
||||
gc_setShader(shader_fieldSatur)
|
||||
gc_translate(0,4)
|
||||
else
|
||||
gc_setShader(shader_fieldSatur)
|
||||
end
|
||||
|
||||
--<drawRow>
|
||||
@@ -204,6 +206,8 @@ local function _drawField(P,showInvis)
|
||||
gc_setShader(shader_fieldSatur)
|
||||
gc_pop()
|
||||
h=1
|
||||
else
|
||||
gc_setShader(shader_fieldSatur)
|
||||
end
|
||||
|
||||
gc_push('transform')
|
||||
|
||||
@@ -70,5 +70,4 @@ return{
|
||||
|
||||
bg='none',bgm='race',
|
||||
allowMod=true,
|
||||
FTLock=true,
|
||||
}
|
||||
|
||||
@@ -377,7 +377,6 @@ local DemoEnv={
|
||||
life=1e99,
|
||||
allowMod=false,
|
||||
fine=false,
|
||||
FTLock=false,
|
||||
}
|
||||
function PLY.newDemoPlayer(id)
|
||||
local P=_newEmptyPlayer(id)
|
||||
|
||||
@@ -2671,7 +2671,7 @@ function Player:_die()
|
||||
end
|
||||
end
|
||||
function Player:update(dt)
|
||||
self.trigFrame=self.trigFrame+(self.gameEnv.FTLock and dt*60 or 1)
|
||||
self.trigFrame=self.trigFrame+dt*60
|
||||
if self.alive then
|
||||
local S=self.stat
|
||||
if self.type=='computer'then self.bot:update(dt)end
|
||||
|
||||
@@ -199,8 +199,7 @@ local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
reset()
|
||||
BG.set('fixColor')
|
||||
BG.send(.26,.26,.26)
|
||||
BG.set('fixColor',.26,.26,.26)
|
||||
BGM.play(bgm)
|
||||
end
|
||||
|
||||
|
||||
@@ -106,8 +106,7 @@ end
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
BG.set('fixColor')
|
||||
BG.send(.26,.62,.26)
|
||||
BG.set('fixColor',.26,.62,.26)
|
||||
_newGame()
|
||||
selected=false
|
||||
end
|
||||
|
||||
@@ -35,6 +35,14 @@ end
|
||||
function scene.mouseUp()
|
||||
release()
|
||||
end
|
||||
function scene.touchDown()
|
||||
press()
|
||||
end
|
||||
function scene.touchUp()
|
||||
if #love.touch.getTouches()==0 then
|
||||
release()
|
||||
end
|
||||
end
|
||||
function scene.keyDown(key,isRep)
|
||||
if isRep then return end
|
||||
if key=='escape'then
|
||||
|
||||
@@ -12,8 +12,7 @@ function scene.sceneInit()
|
||||
lastKey=nil
|
||||
speed=0
|
||||
keyTime={}for i=1,40 do keyTime[i]=-1e99 end
|
||||
BG.set('fixColor')
|
||||
BG.send(.26,.26,.26)
|
||||
BG.set('fixColor',.26,.26,.26)
|
||||
BGM.play('push')
|
||||
end
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ local penKey={
|
||||
['1']=1,['2']=2,['3']=3,['4']=4,['5']=5,['6']=6,['7']=7,['8']=8,
|
||||
q=9,w=10,e=11,r=12,t=13,y=14,u=15,i=16,
|
||||
a=17,s=18,d=19,f=20,g=21,h=22,j=23,k=24,
|
||||
z=0,x=-1,
|
||||
z=0,x=-1,c=-2,
|
||||
}
|
||||
local minoPosCode={
|
||||
[102]=1,[1121]=1,--Z
|
||||
@@ -250,8 +250,8 @@ function scene.keyDown(key)
|
||||
else
|
||||
SCN.back()
|
||||
end
|
||||
else
|
||||
pens[curPen]=penKey[key]or pens[curPen]
|
||||
elseif penKey[key] then
|
||||
pens[1]=penKey[key]
|
||||
end
|
||||
end
|
||||
function scene.keyUp(key)
|
||||
|
||||
@@ -2,6 +2,7 @@ local emailBox=WIDGET.newInputBox{name='email',x=380,y=200,w=500,h=60,limit=128}
|
||||
local passwordBox=WIDGET.newInputBox{name='password',x=380,y=300,w=620,h=60,secret=true,regex="[ -~]",limit=64}
|
||||
|
||||
local savePW=false
|
||||
local showEmail=true
|
||||
|
||||
local function _login()
|
||||
local email,password=emailBox:getText(),passwordBox:getText()
|
||||
@@ -25,19 +26,22 @@ function scene.sceneInit()
|
||||
local data=loadFile('conf/account','-canSkip')
|
||||
if data then
|
||||
savePW=true
|
||||
showEmail=false
|
||||
emailBox.secret=true
|
||||
emailBox:setText(data[1])
|
||||
passwordBox:setText(data[2])
|
||||
end
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newText{name='title', x=80, y=50,font=70,align='L'},
|
||||
WIDGET.newButton{name='register',x=1140,y=100,w=170,h=80,color='lY',code=function()SCN.swapTo('register','swipeR')end},
|
||||
WIDGET.newText{name='title', x=80, y=50,font=70,align='L'},
|
||||
WIDGET.newButton{name='register', x=1140,y=100,w=170,h=80,color='lY',code=function()SCN.swapTo('register','swipeR')end},
|
||||
emailBox,
|
||||
passwordBox,
|
||||
WIDGET.newSwitch{name='keepPW', x=900, y=420,disp=function()return savePW end,code=function()savePW=not savePW end},
|
||||
WIDGET.newKey{name='login', x=1140,y=540,w=170,h=80,font=40,code=_login},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
|
||||
WIDGET.newSwitch{name='showEmail',x=550, y=420,disp=function()return showEmail end,code=function()showEmail=not showEmail emailBox.secret=not showEmail end},
|
||||
WIDGET.newSwitch{name='keepPW', x=900, y=420,disp=function()return savePW end,code=function()savePW=not savePW end},
|
||||
WIDGET.newKey{name='login', x=1140,y=540,w=170,h=80,font=40,code=_login},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -4,15 +4,6 @@ local sin=math.sin
|
||||
local setFont=FONT.set
|
||||
|
||||
local author={
|
||||
blank="MrZ (old works)",
|
||||
["end"]="MrZ (old works)",
|
||||
cruelty="MrZ (old works)",
|
||||
final="MrZ (old works)",
|
||||
infinite="MrZ (old works)",
|
||||
push="MrZ (old works)",
|
||||
race="MrZ (old works)",
|
||||
reason="MrZ (old works)",
|
||||
way="MrZ (old works)",
|
||||
battle="Aether & MrZ",
|
||||
moonbeam="Beethoven & MrZ",
|
||||
empty="ERM",
|
||||
@@ -75,6 +66,22 @@ function scene.keyDown(key,isRep)
|
||||
end
|
||||
|
||||
function scene.draw()
|
||||
local t=TIME()
|
||||
|
||||
--Character
|
||||
gc.push('transform')
|
||||
gc.setColor(1,1,1)
|
||||
gc.translate(906,456)
|
||||
gc.scale(.6)
|
||||
GC.draw(IMG.z.character)
|
||||
GC.draw(IMG.z.screen1, -91, -157+16*math.sin(t))
|
||||
GC.draw(IMG.z.screen2, 120, -166+16*math.sin(t+1))
|
||||
gc.setColor(1,1,1,.7+.3*math.sin(.6*t)) GC.draw(IMG.z.particle1, -50, 42+6*math.sin(t*0.36))
|
||||
gc.setColor(1,1,1,.7+.3*math.sin(.7*t)) GC.draw(IMG.z.particle2, 110+6*math.sin(t*0.92), 55)
|
||||
gc.setColor(1,1,1,.7+.3*math.sin(.8*t)) GC.draw(IMG.z.particle3, -54+6*math.sin(t*0.48), -248)
|
||||
gc.setColor(1,1,1,.7+.3*math.sin(.9*t)) GC.draw(IMG.z.particle4, 133, -305+6*math.sin(t*0.40))
|
||||
gc.pop()
|
||||
|
||||
gc_setColor(COLOR.Z)
|
||||
|
||||
--Scroller
|
||||
@@ -89,23 +96,24 @@ function scene.draw()
|
||||
if selected>2 then gc_print(bgmList[selected-2],322,350-50)end
|
||||
if selected<#bgmList-1 then gc_print(bgmList[selected+2],322,350+110)end
|
||||
|
||||
--Music player
|
||||
gc.draw(TEXTURE.title,840,220,nil,.5,nil,580,118)
|
||||
--Title
|
||||
if BGM.nowPlay then
|
||||
GC.draw(TEXTURE.title,570,190,nil,.42)
|
||||
local a=-t%2.3/2.3
|
||||
gc_setColor(1,1,1,math.min(a,1))
|
||||
GC.draw(TEXTURE.title_color,570,190,nil,.42+.062-.062*a)
|
||||
end
|
||||
|
||||
--Music player
|
||||
if BGM.nowPlay then
|
||||
local t=TIME()
|
||||
setFont(45)
|
||||
GC.shadedPrint(BGM.nowPlay,710,508,'left',2)
|
||||
gc_setColor(sin(t*.5)*.2+.8,sin(t*.7)*.2+.8,sin(t)*.2+.8)
|
||||
gc_print(BGM.nowPlay,710,508)
|
||||
setFont(35)
|
||||
gc_setColor(1,sin(t*2.6)*.5+.5,sin(t*2.6)*.5+.5)
|
||||
gc_print(author[BGM.nowPlay]or"MrZ",670,465)
|
||||
|
||||
local a=-t%2.3/2
|
||||
if a<1 then
|
||||
gc_setColor(1,1,1,a)
|
||||
gc.draw(TEXTURE.title_color,840,220,nil,.5+.062-.062*a,.5+.126-.126*a,580,118)
|
||||
end
|
||||
|
||||
setFont(20)
|
||||
gc_setColor(COLOR.Z)
|
||||
local cur=BGM.playing:tell()
|
||||
|
||||
@@ -65,7 +65,7 @@ function scene.draw()
|
||||
gc.draw(IMG.miyaHeart,162,52,nil,.3)
|
||||
elseif vocPack=="mono"then
|
||||
local jump=math.max(30-(TIME()-last1)*60,0)%10
|
||||
gc.translate(800,340+6*sin(TIME()*.5)+(jump-10)*jump*.3)
|
||||
gc.translate(760,340+6*sin(TIME()*.5)+(jump-10)*jump*.3)
|
||||
gc.draw(IMG.monoCH,-30)
|
||||
elseif vocPack=="xiaoya"then
|
||||
gc.translate(770,340+4*sin(TIME()*.5))
|
||||
|
||||
@@ -69,7 +69,6 @@ scene.widgetList={
|
||||
WIDGET.newSlider{name='atkFX', x=330,y=820,lim=280,w=540,axis={0,5,1},disp=SETval('atkFX'), code=SETsto('atkFX')},
|
||||
|
||||
WIDGET.newSelector{name='frame', x=400,y=890,lim=280,w=460,list={8,10,13,17,22,29,37,47,62,80,100},disp=SETval('frameMul'),code=function(v)SETTING.frameMul=v;Z.setFrameMul(SETTING.frameMul)end},
|
||||
WIDGET.newSwitch{name='FTlock', x=950,y=890,lim=290,disp=SETval('FTLock'), code=SETrev('FTLock')},
|
||||
|
||||
WIDGET.newSwitch{name='text', x=450,y=980,lim=360,disp=SETval('text'), code=SETrev('text')},
|
||||
WIDGET.newSwitch{name='score', x=450,y=1030,lim=360,disp=SETval('score'), code=SETrev('score')},
|
||||
@@ -98,7 +97,14 @@ scene.widgetList={
|
||||
},
|
||||
WIDGET.newSlider{name='bgAlpha', x=1020,y=1430,w=200,
|
||||
axis={0,.8},disp=SETval('bgAlpha'),
|
||||
code=function(v)SETTING.bgAlpha=v BG.send(v,v,v)end,
|
||||
code=function(v)
|
||||
SETTING.bgAlpha=v
|
||||
if BG.cur=='fixColor' then
|
||||
BG.send(v,v,v)
|
||||
else
|
||||
BG.send(v)
|
||||
end
|
||||
end,
|
||||
hideF=function()return SETTING.bg=='on'end
|
||||
},
|
||||
|
||||
|
||||
@@ -84,7 +84,7 @@ function scene.draw()
|
||||
local L=text.staff
|
||||
setFont(40)
|
||||
for i=1,#L do
|
||||
mStr(L[i],640,950+70*i-T)
|
||||
mStr(L[i],640,950+65*i-T)
|
||||
end
|
||||
gc.setColor(1,1,1)
|
||||
mDraw(TEXTURE.title_color,640,900-T,nil,.6)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
extern float a;
|
||||
vec4 effect(vec4 color,Image tex,vec2 tex_coords,vec2 scr_coords){
|
||||
return vec4(1.,1.,1.,sign(Texel(tex,tex_coords).a)*a);
|
||||
uniform float a;
|
||||
vec4 effect(vec4 color,sampler2D tex,vec2 texCoord,vec2 scrCoord){
|
||||
return vec4(1.,1.,1.,sign(texture2D(tex,texCoord).a)*a);
|
||||
}
|
||||
|
||||
@@ -1,42 +1,14 @@
|
||||
#define PI 3.1415926535897932384626
|
||||
extern float w,h;
|
||||
extern float t;
|
||||
vec4 effect(vec4 color,Image tex,vec2 tex_coords,vec2 scr_coords){
|
||||
float x=scr_coords.x/w;
|
||||
float y=scr_coords.y/h;
|
||||
float dx,dy;
|
||||
uniform float phase;
|
||||
vec4 effect(vec4 color,sampler2D tex,vec2 texCoord,vec2 scrCoord){
|
||||
float x=scrCoord.x/love_ScreenSize.x;
|
||||
float y=scrCoord.y/love_ScreenSize.y;
|
||||
vec3 V=vec3(0.);
|
||||
V.r=V.r+smoothstep(1.26,0.,length(vec2(0.5+cos(phase*3.*0.26)*0.4-x,0.5-sin(phase*3.*0.62)*0.4-y)));
|
||||
V.g=V.g+smoothstep(1.26,0.,length(vec2((0.5+cos(phase*3.*0.32)*0.4)-x,(0.5-sin(phase*3.*0.80)*0.4)-y)));
|
||||
V.b=V.b+smoothstep(1.26,0.,length(vec2((0.5-cos(phase*3.*0.49)*0.4)-x,(0.5+sin(phase*3.*0.18)*0.4)-y)));
|
||||
V.rg+=vec2(smoothstep(0.626,0.,length(vec2((0.5+cos(phase*0.53)*0.4)-x,(0.5-sin(phase*0.46)*0.4)-y))));
|
||||
V.rb+=vec2(smoothstep(0.626,0.,length(vec2((0.5+cos(phase*0.98)*0.4)-x,(0.5+sin(phase*0.57)*0.4)-y))));
|
||||
V.gb+=vec2(smoothstep(0.626,0.,length(vec2((0.5-cos(phase*0.86)*0.4)-x,(0.5-sin(phase*0.32)*0.4)-y))));
|
||||
|
||||
dx=0.5+cos(t*3.*0.26)*0.4-x;
|
||||
dy=0.5-sin(t*3.*0.62)*0.4-y;
|
||||
dx=sqrt(dx*dx+dy*dy);
|
||||
V.r=V.r+smoothstep(1.26,0.,dx);
|
||||
|
||||
dx=(0.5+cos(t*3.*0.32)*0.4)-x;
|
||||
dy=(0.5-sin(t*3.*0.80)*0.4)-y;
|
||||
dx=sqrt(dx*dx+dy*dy);
|
||||
V.g=V.g+smoothstep(1.26,0.,dx);
|
||||
|
||||
dx=(0.5-cos(t*3.*0.49)*0.4)-x;
|
||||
dy=(0.5+sin(t*3.*0.18)*0.4)-y;
|
||||
dx=sqrt(dx*dx+dy*dy);
|
||||
V.b=V.b+smoothstep(1.26,0.,dx);
|
||||
|
||||
dx=(0.5+cos(t*0.53)*0.4)-x;
|
||||
dy=(0.5-sin(t*0.46)*0.4)-y;
|
||||
dx=sqrt(dx*dx+dy*dy);
|
||||
V.rg+=vec2(smoothstep(0.626,0.,dx));
|
||||
|
||||
dx=(0.5+cos(t*0.98)*0.4)-x;
|
||||
dy=(0.5+sin(t*0.57)*0.4)-y;
|
||||
dx=sqrt(dx*dx+dy*dy);
|
||||
V.rb+=vec2(smoothstep(0.626,0.,dx));
|
||||
|
||||
dx=(0.5-cos(t*0.86)*0.4)-x;
|
||||
dy=(0.5-sin(t*0.32)*0.4)-y;
|
||||
dx=sqrt(dx*dx+dy*dy);
|
||||
V.gb+=vec2(smoothstep(0.626,0.,dx));
|
||||
|
||||
dx=1.626*max(max(V.r,V.g),V.b);
|
||||
return vec4(V/dx,0.4);
|
||||
return vec4(V/max(max(V.r,V.g),V.b)/1.626,0.4);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
extern float k,b;
|
||||
vec4 effect(vec4 color,Image tex,vec2 tex_coords,vec2 scr_coords){
|
||||
vec4 texcolor=Texel(tex,tex_coords);
|
||||
uniform float k,b;
|
||||
vec4 effect(vec4 color,sampler2D tex,vec2 texCoord,vec2 scrCoord){
|
||||
vec4 texcolor=texture2D(tex,texCoord);
|
||||
return vec4(
|
||||
(b+texcolor.r*k)*color.r,
|
||||
(b+texcolor.g*k)*color.g,
|
||||
(b+texcolor.b*k)*color.b,
|
||||
(texcolor.r*k+b)*color.r,
|
||||
(texcolor.g*k+b)*color.g,
|
||||
(texcolor.b*k+b)*color.b,
|
||||
texcolor.a*color.a
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
extern float k,b;
|
||||
vec4 effect(vec4 color,Image tex,vec2 tex_coords,vec2 scr_coords){
|
||||
vec4 texcolor=Texel(tex,tex_coords);
|
||||
uniform float k,b;
|
||||
vec4 effect(vec4 color,sampler2D tex,vec2 texCoord,vec2 scrCoord){
|
||||
vec4 texcolor=texture2D(tex,texCoord);
|
||||
return vec4(
|
||||
(b+texcolor.r*k)*color.r,
|
||||
(b+texcolor.g*k)*color.g,
|
||||
(b+texcolor.b*k)*color.b,
|
||||
(texcolor.r*k+b)*color.r,
|
||||
(texcolor.g*k+b)*color.g,
|
||||
(texcolor.b*k+b)*color.b,
|
||||
texcolor.a*color.a
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
extern float t,w;
|
||||
vec4 effect(vec4 color,Image tex,vec2 tex_coords,vec2 scr_coords){
|
||||
float x=scr_coords.x/w;
|
||||
uniform float phase;
|
||||
vec4 effect(vec4 color,sampler2D tex,vec2 texCoord,vec2 scrCoord){
|
||||
float x=scrCoord.x/love_ScreenSize.x;
|
||||
return vec4(
|
||||
.8-x*.6,
|
||||
.3+.2*sin(t),
|
||||
.3+.2*sin(phase),
|
||||
.15+x*.7,
|
||||
.4
|
||||
);
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
extern float t,h;
|
||||
vec4 effect(vec4 color,Image tex,vec2 tex_coords,vec2 scr_coords){
|
||||
float y=scr_coords.y/h;
|
||||
uniform float phase;
|
||||
vec4 effect(vec4 color,sampler2D tex,vec2 texCoord,vec2 scrCoord){
|
||||
float y=scrCoord.y/love_ScreenSize.y;
|
||||
return vec4(
|
||||
.8-y*.6,
|
||||
.2+y*.4,
|
||||
.3+.1*sin(t),
|
||||
.3+.1*sin(phase),
|
||||
.4
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
vec4 effect(vec4 color,Image tex,vec2 tex_coords,vec2 scr_coords){
|
||||
vec4 texcolor=Texel(tex,tex_coords);
|
||||
vec4 effect(vec4 color,sampler2D tex,vec2 texCoord,vec2 scrCoord){
|
||||
vec4 texcolor=texture2D(tex,texCoord);
|
||||
return vec4(
|
||||
pow(texcolor.r+.26,.7023),
|
||||
pow(texcolor.g+.26,.7023),
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
extern float t,w,h;
|
||||
vec4 effect(vec4 color,Image tex,vec2 tex_coords,vec2 scr_coords){
|
||||
float x=scr_coords.x/w;
|
||||
float y=scr_coords.y/h;
|
||||
uniform float phase;
|
||||
vec4 effect(vec4 color,sampler2D tex,vec2 texCoord,vec2 scrCoord){
|
||||
float x=scrCoord.x/love_ScreenSize.x;
|
||||
float y=scrCoord.y/love_ScreenSize.y;
|
||||
return vec4(
|
||||
.8-y*.7+.2*sin(t/6.26),
|
||||
.2+y*.5+.15*sin(t/4.),
|
||||
.2+x*.6-.1*sin(t/2.83),
|
||||
.8-y*.7+.2*sin(phase/6.26),
|
||||
.2+y*.5+.15*sin(phase/4.),
|
||||
.2+x*.6-.1*sin(phase/2.83),
|
||||
.4
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
extern float t,w,h;
|
||||
vec4 effect(vec4 color,Image tex,vec2 tex_coords,vec2 scr_coords){
|
||||
float x=scr_coords.x/w;
|
||||
float y=scr_coords.y/h;
|
||||
uniform float phase;
|
||||
vec4 effect(vec4 color,sampler2D tex,vec2 texCoord,vec2 scrCoord){
|
||||
float x=scrCoord.x/love_ScreenSize.x;
|
||||
float y=scrCoord.y/love_ScreenSize.y;
|
||||
return vec4(
|
||||
.8-y*.8-.1*sin(t/6.26),
|
||||
.4+.1*sin(t/4.)*(y+2.)/(y+5.),
|
||||
abs(.7-x*1.4+y*.5*sin(t/16.)),
|
||||
.8-y*.8-.1*sin(phase/6.26),
|
||||
.4+.1*sin(phase/4.)*(y+2.)/(y+5.),
|
||||
abs(.7-x*1.4+y*.5*sin(phase/16.)),
|
||||
.4
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
extern float w,level;
|
||||
vec4 effect(vec4 color,Image tex,vec2 tex_coords,vec2 scr_coords){
|
||||
float dx=abs(scr_coords.x/w-0.5);
|
||||
uniform float level;
|
||||
vec4 effect(vec4 color,sampler2D tex,vec2 texCoord,vec2 scrCoord){
|
||||
float dx=abs(scrCoord.x/love_ScreenSize.x-0.5);
|
||||
float a=(dx*2.6-.626)*level;
|
||||
return vec4(1.,0.,0.,a);
|
||||
}
|
||||
|
||||
@@ -2,12 +2,29 @@ return[=[
|
||||
未来计划:
|
||||
R E M A K E
|
||||
|
||||
0.17.2: 0.17.2
|
||||
0.17.3: 矿井 Mine
|
||||
改动:
|
||||
一点魔法
|
||||
重新开放mono语音包选择
|
||||
代码:
|
||||
升级着色器相关(aura背景表现应该好多了)
|
||||
移除一个没用到的库(虽然也没一点点大)
|
||||
修复:
|
||||
Master-G一些问题
|
||||
一些背景相关的问题 #672
|
||||
键盘编辑自定义场地不能切换画笔(顺便补充智能画笔快捷键c)
|
||||
big模式统计行数可能超出200 #682
|
||||
|
||||
0.17.2: 服务区 Service Area
|
||||
新增:
|
||||
把一些模式加入到大地图上(by NOT_A_ROBOT) #640
|
||||
登录界面会隐藏自动填充的邮箱防止信息泄露 #639
|
||||
改动:
|
||||
大幅下调高级机器人速度
|
||||
移除FTLock设置,全局开启
|
||||
大幅度调低高级机器人速度
|
||||
词典新增一条比较详细的新人指引
|
||||
master_g模式不再限定旋转系统
|
||||
改进几个经典模式(by NOT_A_ROBOT) #661
|
||||
完善当前的攻击系统,进入稳定状态
|
||||
更新说明书的攻击系统章节
|
||||
麻将小程序更像麻将
|
||||
@@ -24,6 +41,7 @@ return[=[
|
||||
倒计时时不能充das #610
|
||||
几个音效的音量不太对 #572
|
||||
master_g没开锁定特效报错和一些细节问题
|
||||
关闭3D方块选项后场地方块饱和度设置无效 #656
|
||||
|
||||
0.17.1: 苏醒 Wake Up
|
||||
新增:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
return{
|
||||
["apkCode"]=434,
|
||||
["code"]=1702,
|
||||
["string"]="V0.17.2",
|
||||
["apkCode"]=439,
|
||||
["code"]=1703,
|
||||
["string"]="V0.17.3",
|
||||
["room"]="ver A-7",
|
||||
["name"]="0.17.2",
|
||||
["name"]="矿井 Mine",
|
||||
}
|
||||
|
||||