Compare commits
121 Commits
pre0.17.1-
...
pre0.17.3-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
f22c188753 | ||
|
|
7df55b1584 | ||
|
|
f9d5e054d4 | ||
|
|
a17a3f9ba4 | ||
|
|
f3945b9afe | ||
|
|
e3fffc5d7c | ||
|
|
54175a6ee8 | ||
|
|
9ddee1059c | ||
|
|
0e965eaaae | ||
|
|
e66c5c41ee | ||
|
|
da1ec35a55 | ||
|
|
d919812f44 | ||
|
|
eddcd726ca | ||
|
|
190e64de92 | ||
|
|
6ee2833cf7 | ||
|
|
beaaac6892 | ||
|
|
f4e0cabcf3 | ||
|
|
3b60590f8a | ||
|
|
96a695819e | ||
|
|
0a11d2cf47 | ||
|
|
f932005ea0 | ||
|
|
fedce2ae2b | ||
|
|
85cf77f15d | ||
|
|
fa3d7ff199 | ||
|
|
1da6c0c8a9 | ||
|
|
83349707d5 | ||
|
|
d4090dea6f | ||
|
|
ea83add8fa | ||
|
|
7687fb2c12 | ||
|
|
1fb741d7c2 | ||
|
|
157f8cc7d5 | ||
|
|
846d477e9d | ||
|
|
452cdf6ab0 | ||
|
|
e9396c43c9 | ||
|
|
dd726e75e8 | ||
|
|
a66bb9013a | ||
|
|
ea0448af5a | ||
|
|
44735cd6cd | ||
|
|
3956d1d7bc | ||
|
|
a7a2124bb6 | ||
|
|
9399938be0 | ||
|
|
195f9b2c46 | ||
|
|
d7546e5f41 | ||
|
|
888909b48c | ||
|
|
d68f732884 | ||
|
|
5243ed0c6b | ||
|
|
856c490a2b | ||
|
|
5e9dcc27aa | ||
|
|
3f129a9585 | ||
|
|
e682ff1de5 | ||
|
|
2c064d5809 | ||
|
|
e0573382e8 | ||
|
|
5a514ce495 | ||
|
|
ba4fb00c85 | ||
|
|
ab02d2063f | ||
|
|
a6c87d3a1a | ||
|
|
f15541db4a | ||
|
|
dadd09d25a | ||
|
|
a7dea4dafe | ||
|
|
34ac5eed93 | ||
|
|
89134d4f07 | ||
|
|
58d068b776 | ||
|
|
dacefb2b01 | ||
|
|
efe4f5a210 | ||
|
|
000188ac86 | ||
|
|
de6814bd34 | ||
|
|
fac020db8c | ||
|
|
d4ec3eefbb | ||
|
|
d43e58f450 | ||
|
|
6e9bf97d89 | ||
|
|
e41aefd17c | ||
|
|
d96c5ca0fa | ||
|
|
4953abbb8c | ||
|
|
637e1a7602 | ||
|
|
55cc3c48be | ||
|
|
d7d9e60b1e | ||
|
|
61218bb942 | ||
|
|
d24888cff5 | ||
|
|
79cf1cf238 | ||
|
|
1aa0d4927f | ||
|
|
59ded87cee | ||
|
|
6496dc824c | ||
|
|
6c7aff8fd5 | ||
|
|
ed171186a3 | ||
|
|
e3a1c9114a | ||
|
|
4ba05ae80c | ||
|
|
30a700d0be | ||
|
|
d2ba8b5aa9 | ||
|
|
db17575ca3 |
2
.github/actions/get-cc/action.yml
vendored
@@ -3,7 +3,7 @@ description: 'download cc into specific dir'
|
||||
inputs:
|
||||
tag:
|
||||
required: false
|
||||
default:
|
||||
default: techmino-alize-2
|
||||
arch:
|
||||
required: true
|
||||
dir:
|
||||
|
||||
4
.gitmodules
vendored
@@ -1,3 +1,3 @@
|
||||
[submodule "Zframework"]
|
||||
path = Zframework
|
||||
url = git@github.com:26F-Studio/Zframework.git
|
||||
path = Zframework
|
||||
url = git@github.com:26F-Studio/Zframework.git
|
||||
|
||||
22
legals.md
@@ -1,4 +1,4 @@
|
||||
TECHMINO © 2019-2021 26F Studio. Some rights reserved.
|
||||
TECHMINO © 2019–2022 26F Studio. Some rights reserved.
|
||||
|
||||
TECHMINO and "26F Studio" are trademarks of 26F Studio. The TECHMINO game and source code are under a GNU Lesser General Public License Version 3.
|
||||
|
||||
@@ -6,13 +6,11 @@ TECHMINO and "26F Studio" are trademarks of 26F Studio. The TECHMINO game and so
|
||||
"Tetris" is the registered trademark of The Tetris Holding, LLC, licensed to The Tetris Company, Inc. TECHMINO is not a fan game of Tetris. TECHMINO and 26F Studio are not affiliated with Tetris Holding, LLC or The Tetris Company, Inc. in any way.
|
||||
|
||||
|
||||
Powered by LÖVE, © 2006-2021 LÖVE Development Team.
|
||||
Powered by LÖVE, © 2006–2022 LÖVE Development Team.
|
||||
|
||||
Lua is free software distributed under the terms of the MIT license. Copyright © 1994-2021 by Lua.org, PUC-Rio.
|
||||
Lua is free software distributed under the terms of the MIT license. Copyright © 1994–2022 by Lua.org, PUC-Rio.
|
||||
|
||||
SIMPLE LOVE LIGHTS is under a MIT License. Created by Dylan Hunn.
|
||||
|
||||
json.lua is copyrighted by rxi. © 2021 rxi.
|
||||
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.
|
||||
|
||||
@@ -23,7 +21,7 @@ Source Han Sans is copyrighted by Adobe Inc. Source Han Sans and Adobe are regis
|
||||
JetBrains Mono is copyrighted by the JetBrains Mono Project authors. JetBrains Mono is a trademark of JetBrains s.r.o. JetBrains Mono is licensed under the SIL Open Font License, Version 1.1.
|
||||
|
||||
|
||||
"PlayStation", "PS", "PlayStation Family Mark", "PS logo", "DualSense" and "Play Has No Limits" are registered trademarks or trademarks of Sony Interactive Entertainment Inc. "SONY" is a registered trademark of Sony Corporation. © 2021 Sony Interactive Entertainment LLC.
|
||||
"PlayStation", "PS", "PlayStation Family Mark", "PS logo", "DualSense" and "Play Has No Limits" are registered trademarks or trademarks of Sony Interactive Entertainment Inc. "SONY" is a registered trademark of Sony Corporation. © 2022 Sony Interactive Entertainment LLC.
|
||||
|
||||
|
||||
"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.
|
||||
@@ -32,20 +30,20 @@ JetBrains Mono is copyrighted by the JetBrains Mono Project authors. JetBrains M
|
||||
The Apple logo, "Apple Inc.," iOS, iPadOS, macOS, iPhone, and Mac are registered trademarks of Apple Inc. in the United States of America and other countries or regions.
|
||||
|
||||
|
||||
"EA" and "Electronic Arts" are registered trademarks of Electronic Arts Inc. © 2021 Electronic Arts Inc.
|
||||
"EA" and "Electronic Arts" are registered trademarks of Electronic Arts Inc. © 2022 Electronic Arts Inc.
|
||||
|
||||
SEGA and the SEGA logo are registered trademarks of Sega Corporation. © 2021 Sega Corporation.
|
||||
SEGA and the SEGA logo are registered trademarks of Sega Corporation. © 2022 Sega Corporation.
|
||||
|
||||
Oculus Quest is a registered trademark of Facebook Technologies, LLC. © Meta Platforms, Inc.
|
||||
|
||||
"Nintendo" is a registered trademarks of Nintendo Co., Ltd. © 2021 Nintendo Co., Ltd.
|
||||
"Nintendo" is a registered trademarks of Nintendo Co., Ltd. © 2022 Nintendo Co., Ltd.
|
||||
|
||||
N3TWORK is a registered trademark of N3TWORK Inc. © 2021 N3TWORK Inc.
|
||||
N3TWORK is a registered trademark of N3TWORK Inc. © 2022 N3TWORK Inc.
|
||||
|
||||
GoldWave is a registered trademark of GoldWave, Inc.
|
||||
|
||||
Linux is a registered trademark of Linus Torvalds.
|
||||
|
||||
Touhou Project © Team Shanghai Alice 2002-2021.
|
||||
Touhou Project © Team Shanghai Alice 2002–2022.
|
||||
|
||||
All other trademarks, logos, and copyrights are the properties of their respective owners.
|
||||
|
||||
24
main.lua
@@ -51,8 +51,8 @@ local _LOADTIME_=TIME()
|
||||
--Load modules
|
||||
Z=require'Zframework'
|
||||
FONT.load{
|
||||
norm='parts/fonts/proportional.ttf',
|
||||
mono='parts/fonts/monospaced.ttf',
|
||||
norm='parts/fonts/proportional.otf',
|
||||
mono='parts/fonts/monospaced.otf',
|
||||
}
|
||||
FONT.setDefault('norm')
|
||||
FONT.setFallback('norm')
|
||||
@@ -159,7 +159,7 @@ do--Z.setCursor
|
||||
_=BLOCK_COLORS[SETTING.skin[R]]
|
||||
gc_setColor(_[1],_[2],_[3],min(abs(1-time%2),.3))
|
||||
_=DSCP[R][0]
|
||||
gc_draw(TEXTURE.miniBlock[R],x,y,time%3.14159265359*4,16,16,_[2]+.5,#BLOCKS[R][0]-_[1]-.5)
|
||||
gc_draw(TEXTURE.miniBlock[R],x,y,time%3.14159265359*4,8,8,2*_[2]+1,2*(#BLOCKS[R][0]-_[1])-1)
|
||||
gc_setColor(1,1,1)
|
||||
gc_draw(ms.isDown(1)and holdImg or normImg,x,y,nil,nil,nil,8,8)
|
||||
end
|
||||
@@ -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
|
||||
@@ -288,6 +285,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',
|
||||
|
||||
@@ -321,6 +327,7 @@ SKIN.load{
|
||||
{name="yinyang_scf",path='media/image/skin/yinyang_scf.png'},
|
||||
{name="cartooncup_earety",path='media/image/skin/cartooncup_earety.png'},
|
||||
{name="jelly_miya",path='media/image/skin/jelly_miya.png'},
|
||||
{name="guidetris_xmiao_lusisi",path='media/image/skin/guidetris_xmiao_lusisi.png'},
|
||||
{name="brick_notypey",path='media/image/skin/brick_notypey.png'},
|
||||
{name="gem_notypey",path='media/image/skin/gem_notypey.png'},
|
||||
{name="classic",path='media/image/skin/classic_unknown.png'},
|
||||
@@ -366,7 +373,6 @@ LANG.init('zh',
|
||||
{
|
||||
zh=require'parts.language.lang_zh',
|
||||
zh_trad=require'parts.language.lang_zh_trad',
|
||||
zh_full=require'parts.language.lang_zh_full',
|
||||
en=require'parts.language.lang_en',
|
||||
fr=require'parts.language.lang_fr',
|
||||
es=require'parts.language.lang_es',
|
||||
@@ -550,6 +556,7 @@ do
|
||||
if type(SETTING.bg)~='string'then SETTING.bg='on'end
|
||||
if SETTING.skin[18]==10 then SETTING.skin[18]=4 end
|
||||
if SETTING.reTime>3 or SETTING.reTime<.5 then SETTING.reTime=2 end
|
||||
if SETTING.locale=='zh_full' then SETTING.locale='zh' end
|
||||
if RANKS.infinite then RANKS.infinite=0 end
|
||||
if RANKS.infinite_dig then RANKS.infinite_dig=0 end
|
||||
if not RANKS.sprint_10l then RANKS.sprint_10l=0 end
|
||||
@@ -683,3 +690,4 @@ if TABLE.find(arg,'--test')then
|
||||
love.event.quit(1)
|
||||
end)
|
||||
end
|
||||
WS.switchHost('101.43.110.22','10026','/tech/socket/v1')
|
||||
|
||||
BIN
media/effect/chiptune/achievement.ogg
Normal file
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/big.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
media/image/modeicon/dig_eff.png
Normal file
|
After Width: | Height: | Size: 969 B |
BIN
media/image/modeicon/secret_grade.png
Normal file
|
After Width: | Height: | Size: 488 B |
BIN
media/image/modeicon/sprint_pento.png
Normal file
|
After Width: | Height: | Size: 5.1 KiB |
BIN
media/image/modeicon/sprint_tri.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
media/image/skin/guidetris_xmiao_lusisi.png
Normal file
|
After Width: | Height: | Size: 2.1 KiB |
@@ -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()
|
||||
|
||||
@@ -20,7 +20,7 @@ function back.update()
|
||||
color=BLOCK_COLORS[SETTING.skin[r]],
|
||||
x=SCR.w*rnd(),
|
||||
y=SCR.h*-.05,
|
||||
k=SCR.rad/100,
|
||||
k=SCR.rad/200,
|
||||
ang=rnd()*6.2832,
|
||||
vy=.5+rnd()*.4,
|
||||
vx=rnd()*.4-.2,
|
||||
|
||||
@@ -47,7 +47,7 @@ function back.draw()
|
||||
local M=mino[i]
|
||||
local c=M.color
|
||||
gc_setColor(c[1],c[2],c[3],.2)
|
||||
gc_draw(M.block,M.d*cos(M.ang),M.d*sin(M.ang),M.rotate,(18*M.d/SCR.rad)^1.6,nil,M.block:getWidth()/2,M.block:getHeight()/2)
|
||||
gc_draw(M.block,M.d*cos(M.ang),M.d*sin(M.ang),M.rotate,(12*M.d/SCR.rad)^1.6,nil,M.block:getWidth()/2,M.block:getHeight()/2)
|
||||
end
|
||||
gc_translate(-SCR.cx,-SCR.cy)
|
||||
end
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
--Customizable grey background
|
||||
local gc=love.graphics
|
||||
local back={}
|
||||
local brightness=.26
|
||||
local r,g,b=.26,.26,.26
|
||||
function back.draw()
|
||||
gc.clear(brightness,brightness,brightness)
|
||||
gc.clear(r,g,b)
|
||||
end
|
||||
function back.event(b)
|
||||
brightness=b
|
||||
function back.event(_r,_g,_b)
|
||||
r,g,b=_r,_g,_b
|
||||
end
|
||||
return back
|
||||
@@ -6,7 +6,6 @@ local back={}
|
||||
local t
|
||||
local colorLib=BLOCK_COLORS
|
||||
local blocks=BLOCKS
|
||||
local scs=RSlist.TRS.centerPos
|
||||
function back.init()
|
||||
t=rnd()*2600
|
||||
end
|
||||
@@ -21,6 +20,6 @@ function back.draw()
|
||||
end
|
||||
local _=colorLib[SETTING.skin[R]]
|
||||
gc.setColor(_[1],_[2],_[3],.12)
|
||||
gc.draw(TEXTURE.miniBlock[R],SCR.cx,SCR.cy,t%3.1416*6,400*SCR.k,nil,scs[R][0][2]+.5,#blocks[R][0]-scs[R][0][1]-.5)
|
||||
gc.draw(TEXTURE.miniBlock[R],SCR.cx,SCR.cy,t%3.1416*6,200*SCR.k,nil,2*DSCP[R][0][2]+1,2*(#blocks[R][0]-DSCP[R][0][1])-1)
|
||||
end
|
||||
return back
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -7,18 +7,36 @@ local pcall=pcall
|
||||
local ins,rem=table.insert,table.remove
|
||||
local yield=coroutine.yield
|
||||
local bot_cc={}
|
||||
function bot_cc:checkDest()
|
||||
function bot_cc:checkDest(b2b,atk,exblock,yomi)
|
||||
local dest=self.P.destFX
|
||||
if not dest then return end
|
||||
if not (dest.b2b==b2b and dest.attack==atk and dest.extra==exblock) then
|
||||
print('hope: '..dest.b2b..' '..dest.attack..' '..dest.extra)
|
||||
print('real: '..b2b..' '..atk..' '..exblock)
|
||||
print(yomi)
|
||||
self:lockWrongPlace()
|
||||
self.P.destFX=nil
|
||||
return
|
||||
end
|
||||
local CB=self.P.cur.bk
|
||||
for k=1,#dest,2 do
|
||||
local r=CB[dest[k+1]-self.P.curY+2]
|
||||
if not r or not r[dest[k]-self.P.curX+2]then
|
||||
print('wrong place')
|
||||
self:lockWrongPlace()
|
||||
self.P.destFX=nil
|
||||
return
|
||||
end
|
||||
end
|
||||
local should_spawn = self.P:getNextSpawn() - 1
|
||||
if dest.spawn ~= should_spawn then
|
||||
assert(dest.spawn > should_spawn)
|
||||
print('wrong spawn: should be '..dest.spawn..' but '..should_spawn)
|
||||
print('-- should only happen when camera is going down')
|
||||
self:lockWrongPlace()
|
||||
self.P.destFX=nil
|
||||
return
|
||||
end
|
||||
end
|
||||
function bot_cc:revive()
|
||||
TABLE.cut(self.P.holdQueue)
|
||||
@@ -37,10 +55,10 @@ function bot_cc:thread()
|
||||
ccBot:think()
|
||||
|
||||
--Poll keys
|
||||
local success,result,dest,hold,move
|
||||
local success,result,dest,hold,move,b2b,attack,extra,spawn
|
||||
repeat
|
||||
yield()
|
||||
success,result,dest,hold,move=pcall(ccBot.getMove,ccBot)
|
||||
success,result,dest,hold,move,b2b,attack,extra,spawn=pcall(ccBot.getMove,ccBot)
|
||||
until not success or result==0 or result==2
|
||||
if not success then break end
|
||||
if result==2 then
|
||||
@@ -50,6 +68,10 @@ function bot_cc:thread()
|
||||
dest[7],dest[8]=dest[2][1],dest[2][2]
|
||||
dest[1],dest[2]=dest[3][1],dest[3][2]
|
||||
dest[3],dest[4]=dest[4][1],dest[4][2]
|
||||
dest.b2b = b2b
|
||||
dest.attack = attack
|
||||
dest.extra = extra
|
||||
dest.spawn = spawn
|
||||
P.destFX=dest
|
||||
if hold then--Hold
|
||||
keys[1]=8
|
||||
@@ -82,8 +104,16 @@ function bot_cc:updateField()
|
||||
F[i],i=F0[y][x]>0,i+1
|
||||
end end
|
||||
while i<=400 do F[i],i=false,i+1 end
|
||||
if not pcall(self.ccBot.reset,self.ccBot,F,P.b2b>=100,P.combo)then
|
||||
local y = P:getNextSpawn()-1
|
||||
if not pcall(self.ccBot.reset,self.ccBot,F,P.b2b,P.combo,P.stat.pc,P.stat.row,y)then
|
||||
print("CC is dead ("..P.id..")","error")
|
||||
for y=#F0,1,-1 do
|
||||
local s=""
|
||||
for x=1,10 do
|
||||
s=s..(F[(y-1)*10+x] and "[]" or "..")
|
||||
end
|
||||
print(s)
|
||||
end
|
||||
end
|
||||
end
|
||||
function bot_cc:switch20G()
|
||||
|
||||
@@ -49,7 +49,7 @@ local botMeta={__index=_undefMethod}
|
||||
|
||||
local BOT={}
|
||||
|
||||
local AISpeed={60,50,40,30,20,14,10,6,4,3}
|
||||
local AISpeed={60,50,42,34,27,21,16,12,9,6}
|
||||
--[[
|
||||
arg={
|
||||
next: number of nexts
|
||||
|
||||
170
parts/char.lua
@@ -213,91 +213,93 @@ local L={
|
||||
psOption= 0xF01A5,
|
||||
},
|
||||
mahjong={--F0200~F027F
|
||||
wan1= 0xF0200,
|
||||
wan2= 0xF0201,
|
||||
wan3= 0xF0202,
|
||||
wan4= 0xF0203,
|
||||
wan5= 0xF0204,
|
||||
wan6= 0xF0205,
|
||||
wan7= 0xF0206,
|
||||
wan8= 0xF0207,
|
||||
wan9= 0xF0208,
|
||||
tiao1= 0xF0209,
|
||||
tiao2= 0xF020A,
|
||||
tiao3= 0xF020B,
|
||||
tiao4= 0xF020C,
|
||||
tiao5= 0xF020D,
|
||||
tiao6= 0xF020E,
|
||||
tiao7= 0xF020F,
|
||||
tiao8= 0xF0210,
|
||||
tiao9= 0xF0211,
|
||||
tong1= 0xF0212,
|
||||
tong2= 0xF0213,
|
||||
tong3= 0xF0214,
|
||||
tong4= 0xF0215,
|
||||
tong5= 0xF0216,
|
||||
tong6= 0xF0217,
|
||||
tong7= 0xF0218,
|
||||
tong8= 0xF0219,
|
||||
tong9= 0xF021A,
|
||||
east= 0xF021B,
|
||||
south= 0xF021C,
|
||||
west= 0xF021D,
|
||||
north= 0xF021E,
|
||||
center= 0xF021F,
|
||||
fortune= 0xF0220,
|
||||
soap= 0xF0221,
|
||||
fortuneAlt= 0xF0222,
|
||||
soapAlt= 0xF0223,
|
||||
spring= 0xF0224,
|
||||
summer= 0xF0225,
|
||||
autumn= 0xF0226,
|
||||
winter= 0xF0227,
|
||||
plum= 0xF0228,
|
||||
orchid= 0xF0229,
|
||||
chry= 0xF022A,
|
||||
bamboo= 0xF022B,
|
||||
wan5Red= 0xF022C,
|
||||
tiao5Red= 0xF022D,
|
||||
tong5Red= 0xF022E,
|
||||
wan1Base= 0xF022F,
|
||||
wan2Base= 0xF0230,
|
||||
wan3Base= 0xF0231,
|
||||
wan4Base= 0xF0232,
|
||||
wan5Base= 0xF0233,
|
||||
wan6Base= 0xF0234,
|
||||
wan7Base= 0xF0235,
|
||||
wan8Base= 0xF0236,
|
||||
wan9Base= 0xF0237,
|
||||
wanComb= 0xF0238,
|
||||
tiao1Base= 0xF0239,
|
||||
tiao1Comb= 0xF023A,
|
||||
tiao5Base= 0xF023B,
|
||||
tiao5Comb= 0xF023C,
|
||||
tiao7Base= 0xF023D,
|
||||
tiao7Comb= 0xF023E,
|
||||
tiao9Base= 0xF023F,
|
||||
tiao9Comb= 0xF0240,
|
||||
tong2Base= 0xF0241,
|
||||
tong2Comb= 0xF0242,
|
||||
tong3Base= 0xF0243,
|
||||
tong3Comb1= 0xF0244,
|
||||
tong3Comb2= 0xF0245,
|
||||
tong4Base= 0xF0246,
|
||||
tong4Comb= 0xF0247,
|
||||
tong5Base= 0xF0248,
|
||||
tong5Comb1= 0xF0249,
|
||||
tong5Comb2= 0xF024A,
|
||||
tong6Base= 0xF024B,
|
||||
tong6Comb= 0xF024C,
|
||||
tong7Base= 0xF024D,
|
||||
tong7Comb= 0xF024E,
|
||||
tong9Base= 0xF024F,
|
||||
tong9Comb1= 0xF0250,
|
||||
tong9Comb2= 0xF0251,
|
||||
frameComb= 0xF0252,
|
||||
m1= 0xF0200,
|
||||
m2= 0xF0201,
|
||||
m3= 0xF0202,
|
||||
m4= 0xF0203,
|
||||
m5= 0xF0204,
|
||||
m6= 0xF0205,
|
||||
m7= 0xF0206,
|
||||
m8= 0xF0207,
|
||||
m9= 0xF0208,
|
||||
s1= 0xF0209,
|
||||
s2= 0xF020A,
|
||||
s3= 0xF020B,
|
||||
s4= 0xF020C,
|
||||
s5= 0xF020D,
|
||||
s6= 0xF020E,
|
||||
s7= 0xF020F,
|
||||
s8= 0xF0210,
|
||||
s9= 0xF0211,
|
||||
p1= 0xF0212,
|
||||
p2= 0xF0213,
|
||||
p3= 0xF0214,
|
||||
p4= 0xF0215,
|
||||
p5= 0xF0216,
|
||||
p6= 0xF0217,
|
||||
p7= 0xF0218,
|
||||
p8= 0xF0219,
|
||||
p9= 0xF021A,
|
||||
ton= 0xF021B,
|
||||
nan= 0xF021C,
|
||||
sha= 0xF021D,
|
||||
pe= 0xF021E,
|
||||
chun= 0xF021F,
|
||||
hatsu= 0xF0220,
|
||||
haku= 0xF0221,
|
||||
hatsuAlt= 0xF0222,
|
||||
hakuAlt= 0xF0223,
|
||||
haru= 0xF0224,
|
||||
natsu= 0xF0225,
|
||||
aki= 0xF0226,
|
||||
fuyu= 0xF0227,
|
||||
ume= 0xF0228,
|
||||
ran= 0xF0229,
|
||||
kiku= 0xF022A,
|
||||
take= 0xF022B,
|
||||
m5Red= 0xF022C,
|
||||
s5Red= 0xF022D,
|
||||
p5Red= 0xF022E,
|
||||
m1Base= 0xF022F,
|
||||
m2Base= 0xF0230,
|
||||
m3Base= 0xF0231,
|
||||
m4Base= 0xF0232,
|
||||
m5Base= 0xF0233,
|
||||
m6Base= 0xF0234,
|
||||
m7Base= 0xF0235,
|
||||
m8Base= 0xF0236,
|
||||
m9Base= 0xF0237,
|
||||
mComb= 0xF0238,
|
||||
s1Base= 0xF0239,
|
||||
s1Comb= 0xF023A,
|
||||
s5Base= 0xF023B,
|
||||
s5Comb= 0xF023C,
|
||||
s7Base= 0xF023D,
|
||||
s7Comb= 0xF023E,
|
||||
s9Base= 0xF023F,
|
||||
s9Comb= 0xF0240,
|
||||
p2Base= 0xF0241,
|
||||
p2Comb= 0xF0242,
|
||||
p3Base= 0xF0243,
|
||||
p3Comb1= 0xF0244,
|
||||
p3Comb2= 0xF0245,
|
||||
p4Base= 0xF0246,
|
||||
p4Comb= 0xF0247,
|
||||
p5Base= 0xF0248,
|
||||
p5Comb1= 0xF0249,
|
||||
p5Comb2= 0xF024A,
|
||||
p6Base= 0xF024B,
|
||||
p6Comb= 0xF024C,
|
||||
p7Base= 0xF024D,
|
||||
p7Comb= 0xF024E,
|
||||
p9Base= 0xF024F,
|
||||
p9Comb1= 0xF0250,
|
||||
p9Comb2= 0xF0251,
|
||||
frameComb= 0xF0252,
|
||||
s1j= 0xF0253,
|
||||
s1jBase= 0xF0254,
|
||||
s1jComb= 0xF0255,
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
for _,pack in next,L do
|
||||
|
||||
@@ -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==110 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
|
||||
|
||||
80
parts/eventsets/classic_l.lua
Normal file
@@ -0,0 +1,80 @@
|
||||
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,
|
||||
irs=false,ims=false,
|
||||
drop=2,lock=2,
|
||||
wait=10,fall=25,
|
||||
freshLimit=0,
|
||||
fieldH=19,
|
||||
nextCount=1,
|
||||
holdCount=0,
|
||||
RS='Classic',
|
||||
sequence='rnd',
|
||||
noTele=true,
|
||||
keyCancel={5,6},
|
||||
mesDisp=function(P)
|
||||
setFont(75)
|
||||
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
|
||||
if P.modeData.drought<=14 then
|
||||
gc_setColor(1,1,1,P.modeData.drought/7-1)
|
||||
else
|
||||
local gb=P.modeData.drought<=21 and 2-P.modeData.drought/14 or .5
|
||||
gc_setColor(1,gb,gb)
|
||||
end
|
||||
setFont(50)
|
||||
mStr(P.modeData.drought,63,130)
|
||||
mDraw(MODES.drought_l.icon,63,200,nil,.5)
|
||||
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
|
||||
--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
|
||||
}
|
||||
@@ -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 P.stat.row>=D.target then
|
||||
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,
|
||||
}
|
||||
|
||||
326
parts/eventsets/master_g.lua
Normal file
@@ -0,0 +1,326 @@
|
||||
local gc=love.graphics
|
||||
local regretDelay=-1
|
||||
local int_grade=0
|
||||
local grade_points=0
|
||||
local int_grade_boosts={0,1,2,3,4,5,5,6,6,7,7,7,8,8,8,9,9,9,10,11,12,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26}
|
||||
local coolList={false,false,false,false,false,false,false,false,false}
|
||||
local regretList={false,false,false,false,false,false,false,false,false,false}
|
||||
local gradeList={
|
||||
"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+"
|
||||
}
|
||||
local spd_lvl=0
|
||||
local cools=0
|
||||
local regrets=0
|
||||
local prevSectTime=0
|
||||
local isInRoll=false
|
||||
local rollGrades=0
|
||||
local cool_time={3120,3120,2940,2700,2700,2520,2520,2280,2280,0}
|
||||
local reg_time= {5400,4500,4500,4080,3600,3600,3000,3000,3000,3000}
|
||||
local prevDrop70=false --determines if previous piece has level less than __70
|
||||
local nextSpeedUp=false --determines if the next section speed should be boosted by 100
|
||||
local isInRollTrans=false
|
||||
local function getGrav(l)
|
||||
return
|
||||
l<30 and 64 or
|
||||
l<35 and 43 or
|
||||
l<40 and 32 or
|
||||
l<50 and 26 or
|
||||
l<60 and 21 or
|
||||
l<70 and 16 or
|
||||
l<80 and 8 or
|
||||
l<90 and 6 or
|
||||
l<120 and 4 or
|
||||
l<160 and 3 or
|
||||
l<200 and 2 or
|
||||
l<220 and 64 or
|
||||
l<230 and 8 or
|
||||
l<233 and 4 or
|
||||
l<236 and 3 or
|
||||
l<243 and 2 or
|
||||
l<300 and 1 or
|
||||
l<360 and 0.5 or
|
||||
l<450 and 0.25 or
|
||||
0
|
||||
end
|
||||
local function getLock(l)
|
||||
return
|
||||
l<900 and 30 or
|
||||
l<1100 and 19 or
|
||||
15
|
||||
end
|
||||
local function getWait(l)
|
||||
return
|
||||
l<700 and 23 or
|
||||
l<800 and 16 or
|
||||
l<1000 and 12 or
|
||||
l<1100 and 7 or
|
||||
6
|
||||
end
|
||||
local function getFall(l)
|
||||
return
|
||||
l<500 and 25 or
|
||||
l<600 and 18 or
|
||||
l<700 and 12 or
|
||||
l<800 and 8 or
|
||||
4
|
||||
end
|
||||
local function getDas(l)
|
||||
return
|
||||
l<500 and 10 or
|
||||
l<900 and 8 or
|
||||
6
|
||||
end
|
||||
local function getGrade()
|
||||
if int_grade==nil then int_grade=0 end
|
||||
if rollGrades==nil then rollGrades=0 end
|
||||
return gradeList[math.max(math.min(math.floor(int_grade_boosts[math.min(int_grade+1,#int_grade_boosts)]+rollGrades+cools+1-regrets),#gradeList),1)]
|
||||
end
|
||||
local function addGrade(row, cmb, lvl) -- IGS = internal grade system
|
||||
if row<1 then return end
|
||||
local pts=0
|
||||
local cmb_mult=1.0
|
||||
local lvl_mult=math.floor(lvl/250)+1
|
||||
|
||||
if row==1 then
|
||||
pts=int_grade<5 and 10 or int_grade<10 and 5 or 2
|
||||
cmb_mult=1.0
|
||||
elseif row==2 then
|
||||
pts=int_grade<3 and 20 or int_grade<6 and 15 or int_grade<10 and 10 or 12
|
||||
cmb_mult=cmb==1 and 1 or cmb<4 and 1.2 or cmb<8 and 1.4 or cmb<10 and 1.5 or 2.0
|
||||
elseif row==3 then
|
||||
pts=int_grade==0 and 40 or int_grade<4 and 30 or int_grade<7 and 20 or int_grade<10 and 15 or 13
|
||||
cmb_mult=cmb==1 and 1 or cmb<10 and 1+(cmb+2)*0.1 or 2
|
||||
else
|
||||
pts=int_grade==0 and 50 or int_grade<5 and 40 or 30
|
||||
cmb_mult=cmb==1 and 1 or cmb==2 and 1.5 or cmb<6 and (0.2*cmb)+1.2 or cmb<10 and (0.1*cmb)+1.7 or 3
|
||||
end
|
||||
|
||||
grade_points=grade_points+(pts*cmb_mult*lvl_mult)
|
||||
if grade_points>=100 then
|
||||
grade_points=0
|
||||
int_grade=int_grade+1
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
drop=64,
|
||||
lock=30,
|
||||
wait=23,
|
||||
fall=25,
|
||||
keyCancel={10,11,12,14,15,16,17,18,19,20},
|
||||
das=16,arr=1,
|
||||
minsdarr=1,
|
||||
ihs=true,irs=true,ims=false,
|
||||
mesDisp=function(P)
|
||||
gc.setColor(1,1,1,1)
|
||||
setFont(45)
|
||||
mText(TEXTOBJ.grade,63,180)
|
||||
setFont(60)
|
||||
mStr(getGrade(),63,110) -- draw grade
|
||||
for i=1,10 do -- draw cool/regret history
|
||||
if not (coolList[i] or regretList[i]) then -- neither cool nor regret
|
||||
gc.setColor(0.6,0.6,0.6,P.modeData.pt<(i-1)*100 and 0.25 or 0.6)
|
||||
else
|
||||
gc.setColor(regretList[i] and 1 or 0, coolList[i] and 1 or 0, 0, 1)
|
||||
end
|
||||
gc.circle('fill',-10,150+i*25,10)
|
||||
gc.setColor(1,1,1,1)
|
||||
end
|
||||
if isInRoll then
|
||||
setFont(20)
|
||||
mStr(("%.1f"):format(rollGrades),63,208) -- draw roll grades
|
||||
gc.setLineWidth(2)
|
||||
gc.setColor(.98,.98,.98,.8)
|
||||
gc.rectangle('line',0,240,126,80,4)
|
||||
gc.setColor(.98,.98,.98,.4)
|
||||
gc.rectangle('fill',0+2,240+2,126-4,80-4,2) -- draw time box
|
||||
setFont(45)
|
||||
local t=(P.stat.frame-prevSectTime)/60
|
||||
local T=("%.1f"):format(60-t)
|
||||
gc.setColor(COLOR.dH)
|
||||
mStr(T,65,250) -- draw time
|
||||
t=t/60
|
||||
gc.setColor(1.7*t,2.3-2*t,.3)
|
||||
mStr(T,63,248)
|
||||
else
|
||||
-- draw level counter
|
||||
setFont(20)
|
||||
mStr(grade_points,63,208)
|
||||
setFont(45)
|
||||
if coolList[math.ceil(P.modeData.pt/100+0.01)] then
|
||||
gc.setColor(0,1,0,1)
|
||||
elseif P.stat.frame-prevSectTime > cool_time[math.ceil(P.modeData.pt/100+0.01)] then
|
||||
gc.setColor(0.7,0.7,0.7,1)
|
||||
end
|
||||
if coolList[math.ceil(P.modeData.pt/100+0.01)] and regretList[math.ceil(P.modeData.pt/100+0.01)] then
|
||||
gc.setColor(1,1,0,1)
|
||||
elseif regretList[math.ceil(P.modeData.pt/100+0.01)] then
|
||||
gc.setColor(1,0,0,1)
|
||||
end
|
||||
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
|
||||
end
|
||||
end,
|
||||
hook_drop=function(P)
|
||||
local D=P.modeData
|
||||
|
||||
local c=#P.clearedRow
|
||||
|
||||
if cools>8 and isInRoll then
|
||||
rollGrades=rollGrades+(c==4 and 1 or 0.1*c)
|
||||
return
|
||||
elseif isInRoll then
|
||||
rollGrades=rollGrades+(c==4 and 0.26 or 0.04*c)
|
||||
return
|
||||
end
|
||||
|
||||
if c==0 and D.pt+1>=D.target then return end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
elseif P.combo>3 then s=s+1
|
||||
end
|
||||
|
||||
addGrade(c,P.combo,D.pt)
|
||||
|
||||
D.pt=D.pt+s
|
||||
spd_lvl=spd_lvl+1
|
||||
|
||||
P.gameEnv.drop=getGrav(spd_lvl)
|
||||
|
||||
if(P.gameEnv.drop==0) then
|
||||
P:set20G(true)
|
||||
end
|
||||
|
||||
if D.pt%100>70 and not prevDrop70 then
|
||||
if P.stat.frame-prevSectTime < cool_time[math.ceil(D.pt/100)] then
|
||||
cools=cools+1
|
||||
coolList[math.ceil(D.pt/100)]=true
|
||||
P:_showText("COOL!",0,-120,80,'fly',.8)
|
||||
nextSpeedUp=true
|
||||
end
|
||||
prevDrop70=true
|
||||
end
|
||||
|
||||
if D.pt+1==D.target then
|
||||
SFX.play('warn_1')
|
||||
elseif D.pt>=D.target then--Level up!
|
||||
spd_lvl=nextSpeedUp and spd_lvl+100 or spd_lvl
|
||||
nextSpeedUp=false
|
||||
prevDrop70=false
|
||||
s=D.target/100
|
||||
local E=P.gameEnv
|
||||
E.lock=getLock(spd_lvl)
|
||||
E.wait=getWait(spd_lvl)
|
||||
E.fall=getFall(spd_lvl)
|
||||
E.das=getDas(spd_lvl)
|
||||
|
||||
if P.stat.frame-prevSectTime > reg_time[math.ceil(s)] then
|
||||
regrets=regrets+1
|
||||
regretDelay=60
|
||||
end
|
||||
prevSectTime=P.stat.frame
|
||||
if s==2 then
|
||||
BG.set('rainbow')
|
||||
elseif s==4 then
|
||||
BG.set('rainbow2')
|
||||
elseif s==5 then
|
||||
if P.stat.frame>420*60 then
|
||||
D.pt=500
|
||||
P:win('finish')
|
||||
return
|
||||
else
|
||||
BG.set('glow')
|
||||
BGM.play('secret7th remix')
|
||||
end
|
||||
elseif s==6 then
|
||||
BG.set('lightning')
|
||||
elseif s>9 then
|
||||
if cools>8 then
|
||||
if E.lockFX and E.lockFX>1 then E.lockFX=1 end
|
||||
P:setInvisible(5)
|
||||
else
|
||||
P:setInvisible(300)
|
||||
end
|
||||
D.pt=999
|
||||
P.waiting=240
|
||||
BGM.stop()
|
||||
isInRollTrans=true
|
||||
return
|
||||
end
|
||||
D.target=D.target<900 and D.target+100 or 999
|
||||
P:stageComplete(s)
|
||||
SFX.play('reach')
|
||||
end
|
||||
end,
|
||||
task=function(P)
|
||||
regretDelay=-1
|
||||
P.modeData.pt=0
|
||||
P.modeData.target=100
|
||||
int_grade=0
|
||||
grade_points=0
|
||||
rollGrades=0
|
||||
spd_lvl=0
|
||||
cools=0
|
||||
regrets=0
|
||||
prevSectTime=0
|
||||
isInRoll=false
|
||||
isInRollTrans=false
|
||||
prevDrop70=false
|
||||
nextSpeedUp=false
|
||||
coolList={false,false,false,false,false,false,false,false,false}
|
||||
regretList={false,false,false,false,false,false,false,false,false,false}
|
||||
local decayRate={125,80,80,50,45,45,45,40,40,40,40,40,30,30,30,20,20,20,20,20,15,15,15,15,15,15,15,15,15,15,10,10,10,9,9,9,8,8,8,7,7,7,6}
|
||||
local decayTimer=0
|
||||
while true do
|
||||
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)] and not (isInRoll or isInRollTrans) then
|
||||
regretList[math.ceil(P.modeData.pt/100)]=true
|
||||
end
|
||||
if regretDelay>-1 then
|
||||
regretDelay=regretDelay-1
|
||||
if regretDelay==-1 then P:_showText("REGRET!!",0,-120,80,'beat',.8) end
|
||||
end
|
||||
if isInRollTrans then
|
||||
if P.waiting>=220 then
|
||||
--Make field invisible
|
||||
for y=1,#P.field do for x=1,10 do
|
||||
P.visTime[y][x]=P.waiting-220
|
||||
end end
|
||||
elseif P.waiting==190 then
|
||||
TABLE.cut(P.field)
|
||||
TABLE.cut(P.visTime)
|
||||
elseif P.waiting==180 then
|
||||
playReadySFX(3,3)
|
||||
elseif P.waiting==120 then
|
||||
playReadySFX(2,1)
|
||||
elseif P.waiting==60 then
|
||||
playReadySFX(1,1)
|
||||
elseif P.waiting==1 then
|
||||
playReadySFX(0,1)
|
||||
isInRollTrans=false
|
||||
isInRoll=true
|
||||
BGM.play('hope')
|
||||
BG.set('blockspace')
|
||||
prevSectTime=P.stat.frame
|
||||
end
|
||||
end
|
||||
if P.waiting<=0 and grade_points>0 and not isInRoll then
|
||||
decayTimer=decayTimer+1
|
||||
if decayTimer>=decayRate[math.min(int_grade+1,#decayRate)] then
|
||||
decayTimer=0
|
||||
grade_points=grade_points-1
|
||||
end
|
||||
elseif isInRoll and P.stat.frame>=prevSectTime+3599 then
|
||||
rollGrades=rollGrades+(cools>8 and 1.6 or 0.5)
|
||||
P.modeData.grade=getGrade()
|
||||
P.modeData.gradePts=math.min(math.floor(int_grade_boosts[math.min(int_grade+1,#int_grade_boosts)]+rollGrades+cools+1-regrets),#gradeList)
|
||||
YIELD()
|
||||
P:win('finish')
|
||||
end
|
||||
end
|
||||
end,
|
||||
}
|
||||
@@ -20,7 +20,13 @@ return{
|
||||
local D=P.modeData
|
||||
|
||||
local c=#P.clearedRow
|
||||
if c==0 and D.pt%100==99 then return end
|
||||
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
|
||||
end
|
||||
return
|
||||
end
|
||||
local s=c<3 and c+1 or c==3 and 5 or 7
|
||||
if P.combo>7 then s=s+2
|
||||
elseif P.combo>3 then s=s+1
|
||||
@@ -50,6 +56,8 @@ return{
|
||||
elseif s==7 then
|
||||
E.das=6
|
||||
BGM.play('far')
|
||||
elseif s==8 then
|
||||
BG.set('none')
|
||||
elseif s==10 then
|
||||
D.pt=1000
|
||||
P:win('finish')
|
||||
|
||||
@@ -6,7 +6,7 @@ return{
|
||||
mText(TEXTOBJ.pc,63,410)
|
||||
end,
|
||||
hook_drop=function(P)
|
||||
if P.lastPiece.pc and P.stat.row%4==0 then
|
||||
if P.lastPiece.pc then
|
||||
P.gameEnv.heightLimit=4
|
||||
if P.stat.pc%5==0 then
|
||||
P.gameEnv.drop=math.max(P.gameEnv.drop-1,1)
|
||||
|
||||
54
parts/eventsets/secret_grade.lua
Normal file
@@ -0,0 +1,54 @@
|
||||
local gc_setColor,gc_draw=love.graphics.setColor,love.graphics.draw
|
||||
local ply_applyField=PLY.draw.applyField
|
||||
local function GetOpenHole(num)
|
||||
return -math.abs(((num-1) % 18)-9)+10
|
||||
end
|
||||
local F={}
|
||||
local ranks={"10","9","8","7","6","5","4","3","2","1","S1","S2","S3","S4","S5","S6","S7","S8","S9","GM","GM+","TM","TM+","TM+₂","TM+₃", "TM+₄","TM+₅"}
|
||||
-- lines: 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
|
||||
return{
|
||||
fkey1=function(P)P.modeData.showGuide=not P.modeData.showGuide end,
|
||||
mesDisp=function(P)
|
||||
mText(TEXTOBJ.grade,63,190)
|
||||
setFont(55)
|
||||
mStr(ranks[P.modeData.rankPts],63,125)
|
||||
|
||||
ply_applyField(P)
|
||||
local mark=TEXTURE.puzzleMark
|
||||
gc_setColor(1,1,1)
|
||||
if P.modeData.showGuide then
|
||||
for y=1,P.modeData.rankPts+1 do for x=1,10 do
|
||||
local T=F[y][x]
|
||||
if T~=0 then
|
||||
gc_draw(mark[T],30*x-30,600-30*y)
|
||||
end
|
||||
end end
|
||||
end
|
||||
PLY.draw.cancelField(P)
|
||||
end,
|
||||
task=function(P)
|
||||
P.modeData.rankPts=1
|
||||
P.modeData.showGuide=true
|
||||
for i=1,50 do
|
||||
F[i] = {}
|
||||
local h=GetOpenHole(i)
|
||||
for j=1,10 do
|
||||
F[i][j]=h==j and -1 or 21
|
||||
end
|
||||
end
|
||||
end,
|
||||
hook_drop=function(P)
|
||||
local D=P.modeData
|
||||
D.rankPts=1
|
||||
for i=1,#P.field do
|
||||
local h=GetOpenHole(i)
|
||||
for j=1,10 do
|
||||
if P.field[i][j]>0 and h==j then return end
|
||||
if P.field[i][j]==0 and h~=j then return end
|
||||
end
|
||||
if i==#P.field then return end
|
||||
if P.field[i+1][h]==0 then return end
|
||||
D.rankPts=D.rankPts+1
|
||||
end
|
||||
end
|
||||
}
|
||||
BIN
parts/fonts/japan.otf
Normal file
BIN
parts/fonts/monospaced.otf
Normal file
BIN
parts/fonts/proportional.otf
Normal file
@@ -165,17 +165,15 @@ do--function applySettings()
|
||||
BG.set()
|
||||
elseif SETTING.bg=='off'then
|
||||
BG.unlock()
|
||||
BG.set('gray')
|
||||
BG.send(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('gray')
|
||||
BG.send(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',
|
||||
}
|
||||
|
||||
@@ -327,7 +327,7 @@ EVENTSETS={
|
||||
'backfire_120','backfire_60','backfire_30','backfire_0',
|
||||
'checkAttack_100',
|
||||
'checkLine_10','checkLine_20','checkLine_40','checkLine_100','checkLine_200','checkLine_400','checkLine_1000',
|
||||
'classic_e','classic_h','classic_u',
|
||||
'classic_e','classic_h','classic_l','classic_u',
|
||||
'defender_n','defender_l',
|
||||
'dig_10l','dig_40l','dig_100l','dig_400l',
|
||||
'dig_h','dig_u',
|
||||
@@ -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,
|
||||
|
||||
1375
parts/language/dict_ja.lua
Normal file
@@ -1,12 +1,17 @@
|
||||
local HDsearch="https://harddrop.com/wiki?search="
|
||||
local HDwiki="\t更多内容见Hard Drop Wiki。"
|
||||
local HDwiki="\n更多内容见Hard Drop Wiki。"
|
||||
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\n以下给出几个新手时期的主线任务树,前期主要就应该练习以下内容,学定式和T-Spin什么的对实力帮助很小(我们不认为靠定式对战秒其他萌新是有效实力):\n(注意,三段应当同时进行,不是A→B→C)\n\nA. 堆叠能力练习方法\n\tA1. 决定手上的块放哪的时候先别,看看下一块有没有地方放,如果放不下去,重新想手上的\n\tA2. 尝试把地形尽量控制得平整,因为比较平的地形来啥块都比较容易放得下去\n\nB. 操作效率与速度练习方法\n\tB1. 不要每一块都拿影子去对形状对位置,要自己想象这个块转一下是什么方向,想好了再开始按按键\n\tB2. 学习双旋,能逆时针转一次就不要顺时针转三次,费手\n\tB3. 学习极简,刚开始不用管速度,保证正确率最重要,养成良好习惯以后再提速快得很\n\nC. 堆叠能力考核\n\tC1. 稳定完成40行不死\n\tC2. 稳定不用hold完成40行\n\tC3. 稳定全消四完成40行\n\tC4. 稳定不用hold全消四完成40行\n\n以上都是根据社区和个人经验总结的模糊方法与目标,所以C的考核可以根据自身情况调整严格程度(例如“稳定”的具体成功率)。\n注:完成C的考核后,需要在未来一直注意没有上限的A1,这是方块的根本元素之一,强大的读next能力可以让你快速上手任何变种玩法。",
|
||||
},
|
||||
{"关于T-spin学习",
|
||||
"T旋 T转 tspin",
|
||||
"help",
|
||||
@@ -59,7 +64,7 @@ return{
|
||||
{"研究群",
|
||||
"yanjiu study research",
|
||||
"org",
|
||||
"俄罗斯方块·[研究]群QQ号112897780,“中国俄罗斯方块总群”",
|
||||
"俄罗斯方块·[研究]群QQ号112897780, “中国俄罗斯方块总群” ",
|
||||
},
|
||||
{"Mew据点",
|
||||
"mew tieba forum",
|
||||
@@ -115,7 +120,7 @@ return{
|
||||
{"注[1]",
|
||||
"备注 notice",
|
||||
"game",
|
||||
"以下内容是为部分官方和较高人气同人方块游戏的简介。\n其中可能包含一些只代表个人观点的主观评价,写在方括号里面,请不要根据这些评论直接认定游戏的好坏。",
|
||||
"以下内容是为部分官方和较高人气同人方块游戏的简介。\n其中可能包含一些只代表个人观点的主观评价写在方括号里仅供参考,顺便也请不要因为某个方面有欠缺就直接认为 “这个游戏不好” 。",
|
||||
},
|
||||
{"King of Stackers",
|
||||
"回合制 网页 手机 kos kingofstackers",
|
||||
@@ -277,7 +282,7 @@ return{
|
||||
{"Touhoumino",
|
||||
"东方 车万 偷猴 chewan dongfang th",
|
||||
"game",
|
||||
"Windows | 单机\n块圈玩家自制方块,一个Nullpomino的自带资源包的改版,将东方Project元素与俄罗斯方块结合。马拉松模式结合了东方Project里的”符卡”机制,需要在一定时间内达成目标分数才能击破。\n[难度较大,适合有方块基础并且各项能力都较强的玩家游玩(不然都不知道自己怎么死的)。]",
|
||||
"Windows | 单机\n块圈玩家自制方块,一个Nullpomino的自带资源包的改版,将东方Project元素与俄罗斯方块结合。马拉松模式结合了东方Project里的” 符卡” 机制,需要在一定时间内达成目标分数才能击破。\n[难度较大,适合有方块基础并且各项能力都较强的玩家游玩(不然都不知道自己怎么死的)。]",
|
||||
},
|
||||
{"Tetris Blitz",
|
||||
"闪电战 ea",
|
||||
@@ -292,7 +297,7 @@ return{
|
||||
{"Tetris Beat",
|
||||
"节奏 n3twork",
|
||||
"game",
|
||||
"iOS | 单机\nN3TWORK代理的一款移动端方块。除了马拉松以外游戏还有一个“Beat”模式,但只需根据BGM的节奏落块就可以得到额外分数。\n[特效比较瞎眼,不支持自定义键位,而且默认的按钮也很小导致控制也不是很舒服]",
|
||||
"iOS | 单机\nN3TWORK代理的一款移动端方块。除了马拉松以外游戏还有一个 “Beat” 模式,但只需根据BGM的节奏落块就可以得到额外分数。\n[特效比较瞎眼,不支持自定义键位,而且默认的按钮也很小导致控制也不是很舒服]",
|
||||
},
|
||||
{"Tetris (N3TWORK)",
|
||||
"Tetris n3twork",
|
||||
@@ -307,7 +312,7 @@ return{
|
||||
{"JJ块",
|
||||
"手机 gougou",
|
||||
"game",
|
||||
"Android | 单机/多人\nJJ棋牌平台下一个休闲游戏,Android端百度“JJ比赛”官网下载平台后可以找到(找不到的原因是iOS系统或者没在官网下载或者被限制不可直接访问游戏)。竖屏,输入延迟很小,可自定义DAS/ARR/20G软降,简单自定义键位,无Hold,没有B2B,无攻击缓冲不可抵消,每次攻击上限为4,连击较强,其他同现代方块。",
|
||||
"Android | 单机/多人\nJJ棋牌平台下一个休闲游戏,Android端百度 “JJ比赛” 官网下载平台后可以找到(找不到的原因是iOS系统或者没在官网下载或者被限制不可直接访问游戏)。竖屏,输入延迟很小,可自定义DAS/ARR/20G软降,简单自定义键位,无Hold,没有B2B,无攻击缓冲不可抵消,每次攻击上限为4,连击较强,其他同现代方块。",
|
||||
},
|
||||
{"火拼俄罗斯",
|
||||
"huopin qq",
|
||||
@@ -317,57 +322,57 @@ 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,忽略掉了垃圾行的影响,不再是字面意思,本游戏中使用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一定程度体现玩家给对手实际造成的攻击力。",
|
||||
},
|
||||
{"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)",
|
||||
},
|
||||
{"APL",
|
||||
"xiaolv",
|
||||
"效率 xiaolv",
|
||||
"term",
|
||||
"Attack Per Line\n攻击每行,也叫效率,体现玩家攻击的行利用率。",
|
||||
},
|
||||
@@ -406,7 +411,7 @@ return{
|
||||
{"HPC",
|
||||
"hc clear banqing banquanqing banquanxiao",
|
||||
"term",
|
||||
"Half-PC\nPC(全消)的外延,“下方有剩余方块”的全消(特别地,如果只消1行则必须不剩余玩家放置的方块),能打出一些攻击和防御(Techmino限定)。",
|
||||
"Half-PC\nPC(全消)的外延, “下方有剩余方块” 的全消(特别地,如果只消1行则必须不剩余玩家放置的方块),能打出一些攻击和防御(Techmino限定)。",
|
||||
},
|
||||
|
||||
--术语(旋转相关)
|
||||
@@ -448,7 +453,7 @@ return{
|
||||
{"MTSS",
|
||||
"mini tspin",
|
||||
"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",
|
||||
@@ -468,7 +473,7 @@ return{
|
||||
{"方块朝向",
|
||||
"旋转 朝向 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",
|
||||
@@ -534,7 +539,7 @@ return{
|
||||
{"XRS",
|
||||
"旋转系统 rotate",
|
||||
"term",
|
||||
"X Rotation System\nT-ex原创旋转系统,引入了“按住方向键换一套踢墙表”的设定(在对应的方向需要顶住墙),让“想去哪”能被游戏捕获从而转到玩家希望到达的位置。\n\n其他旋转系统无论踢墙表怎么设计,块处在某个位置时旋转后最终只能按固定顺序测试,这导致不同的踢墙是竞争的,若存在两个可能想去的位置就只能二选一,XRS解决了这个问题。",
|
||||
"X Rotation System\nT-ex原创旋转系统,引入了 “按住方向键换一套踢墙表” 的设定(在对应的方向需要顶住墙),让 “想去哪” 能被游戏捕获从而转到玩家希望到达的位置。\n\n其他旋转系统无论踢墙表怎么设计,块处在某个位置时旋转后最终只能按固定顺序测试,这导致不同的踢墙是竞争的,若存在两个可能想去的位置就只能二选一,XRS解决了这个问题。",
|
||||
},
|
||||
|
||||
--术语(其他)
|
||||
@@ -556,17 +561,17 @@ 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是本游戏特有。",
|
||||
},
|
||||
{"方块形状",
|
||||
"xingzhuang shape tetromino tetrimino",
|
||||
"term",
|
||||
"在标准的方块游戏中,用到的方块是所有的“四连块”,即四个正方形共用边连接成的形状。\n在不允许翻转,只允许旋转的情况下,四连块一共有七种,根据它们的形状一般分别叫做Z、S、J、L、T、O、I。",
|
||||
"在标准的方块游戏中,用到的方块是所有的 “四连块” ,即四个正方形共用边连接成的形状。\n在不允许翻转,只允许旋转的情况下,四连块一共有七种,根据它们的形状一般分别叫做Z、S、J、L、T、O、I。",
|
||||
},
|
||||
{"方块颜色",
|
||||
"yanse color colour tetromino tetrimino",
|
||||
"term",
|
||||
"主流方块游戏中七种块的颜色会使用同一套彩虹配色:\nZ:红 S:绿 J:蓝 L:橙 T:紫 O:黄 I:青\n\nTechmino默认也使用这一套“标准”配色。",
|
||||
"主流方块游戏中七种块的颜色会使用同一套彩虹配色:\nZ:红 S:绿 J:蓝 L:橙 T:紫 O:黄 I:青\n\nTechmino默认也使用这一套 “标准” 配色。",
|
||||
},
|
||||
{"提前旋转 IRS",
|
||||
"irs initialrotatesystem",
|
||||
@@ -586,12 +591,12 @@ return{
|
||||
{"预览 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 zancun",
|
||||
"term",
|
||||
"将手里的方块和Hold槽中的交换,一般不能连续使用。\n用来调整块序,更容易摆出你想要的形状。\n本游戏中有一个“物理Hold”机制,开启后Hold换出的方块会直接出现在当前方块所在的位置\n\n用不用Hold各有好处,不用的话看到序列是什么就是什么,减少了思考量;并且减少了按键的种类,操作简单容易提升KPS,有些人的40L记录就是不用Hold打出的。用Hold可以灵活地调整序列,减少高重力等规则带来的难度,算力足够的情况下可以达成更复杂的目标,甚至反过来显著减少总按键数。",
|
||||
"将手里的方块和Hold槽中的交换,一般不能连续使用。\n用来调整块序,更容易摆出你想要的形状。\n本游戏中有一个 “物理Hold” 机制,开启后Hold换出的方块会直接出现在当前方块所在的位置\n\n用不用Hold各有好处,不用的话看到序列是什么就是什么,减少了思考量;并且减少了按键的种类,操作简单容易提升KPS,有些人的40L记录就是不用Hold打出的。用Hold可以灵活地调整序列,减少高重力等规则带来的难度,算力足够的情况下可以达成更复杂的目标,甚至反过来显著减少总按键数。",
|
||||
},
|
||||
{"置换 Swap",
|
||||
"交换 swap hold jiaohuan zancun",
|
||||
@@ -619,7 +624,7 @@ return{
|
||||
"在……之下\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",
|
||||
"挖掘 downstack ds wajue",
|
||||
"term",
|
||||
"指消除从场地底部进入的垃圾行(对手攻击打过来或者模式中自动生成)。也叫downstack(DS)。",
|
||||
},
|
||||
@@ -641,7 +646,7 @@ return{
|
||||
{"连击 Combo",
|
||||
"ren",
|
||||
"term",
|
||||
"从第二次消除起叫1 REN/Combo,打出的攻击根据游戏设计的不同也不同。“REN”这个名称来源于日语中的”連”(れん)。",
|
||||
"从第二次消除起叫1 REN/Combo,打出的攻击根据游戏设计的不同也不同。 “REN” 这个名称来源于日语中的” 連” (れん)。",
|
||||
},
|
||||
{"Spike",
|
||||
"baofa xingbao",
|
||||
@@ -691,7 +696,7 @@ return{
|
||||
{"C4W",
|
||||
"连击 ·center4wide centre4wide",
|
||||
"term",
|
||||
"Center 4 Wide\n中间空四列,一种连击打法,能打出很高的连击,利用了大多数专业对战方块游戏的死亡判定机制,可以放心堆高不担心被顶死,然后开始连击。是一种利用游戏机制的不平衡策略(尤其在开局时),观赏性不是很强还可以以弱胜强,成本太低所以成为了部分游戏中约定的类似“禁招”的东西,请在了解情况后再使用,不然可能会被别人骂。\n本游戏里考虑到了平衡问题,所以c4w的强度没有别的游戏那么夸张。",
|
||||
"Center 4 Wide\n中间空四列,一种连击打法,能打出很高的连击,利用了大多数专业对战方块游戏的死亡判定机制,可以放心堆高不担心被顶死,然后开始连击。是一种利用游戏机制的不平衡策略(尤其在开局时),观赏性不是很强还可以以弱胜强,成本太低所以成为了部分游戏中约定的类似 “禁招” 的东西,请在了解情况后再使用,不然可能会被别人骂。\n本游戏里考虑到了平衡问题,所以c4w的强度没有别的游戏那么夸张。",
|
||||
},
|
||||
{"N-Res",
|
||||
"连击 ·residual c4w s4w",
|
||||
@@ -716,7 +721,7 @@ return{
|
||||
{"缓冲区",
|
||||
"buffer zone huanchongqu",
|
||||
"term",
|
||||
"(不是所有游戏都有这个概念)指10×20可见场地之上的21~40行。因为垃圾行顶起后两边堆高的方块可能会超出屏幕,消行后这些方块要重新回到场地内所以需要保存下来,由于程序上要求场地尺寸有限(部分游戏可以无限),故设定为40,一般都够用。\n\n另见“消失区”词条。",
|
||||
"(不是所有游戏都有这个概念)指10×20可见场地之上的21~40行。因为垃圾行顶起后两边堆高的方块可能会超出屏幕,消行后这些方块要重新回到场地内所以需要保存下来,由于程序上要求场地尺寸有限(部分游戏可以无限),故设定为40,一般都够用。\n\n另见 “消失区” 词条。",
|
||||
},
|
||||
{"消失区",
|
||||
"vanish zone xiaoshiqu",
|
||||
@@ -732,7 +737,7 @@ return{
|
||||
{"20G",
|
||||
"高重力",
|
||||
"term",
|
||||
"现代方块的最高下落速度,表观就是方块瞬间到底,不存在中间的下落过程,可能会让方块无法跨越壕沟/从山谷爬出。\n20G一般指的其实是“无限下落速度”,就算场地不止20格,“20G”也会让方块瞬间到底。\n本游戏(和部分其他游戏,推荐这么设计)中20G的优先级比其他玩家操作都高,即使是0arr的水平方向“瞬间移动”中途也会受到20G的影响。",
|
||||
"现代方块的最高下落速度,表观就是方块瞬间到底,不存在中间的下落过程,可能会让方块无法跨越壕沟/从山谷爬出。\n20G一般指的其实是 “无限下落速度” ,就算场地不止20格, “20G” 也会让方块瞬间到底。\n本游戏(和部分其他游戏,推荐这么设计)中20G的优先级比其他玩家操作都高,即使是0arr的水平方向 “瞬间移动” 中途也会受到20G的影响。",
|
||||
},
|
||||
{"锁定延迟 LD",
|
||||
"重力 lock delay lockdown delay suoyan zhongli gravity",
|
||||
@@ -787,7 +792,7 @@ return{
|
||||
{"DAS打断 DCD",
|
||||
"dascut dcd daduan",
|
||||
"term",
|
||||
"本游戏中指玩家的操作焦点转移到新方块的瞬间,此时减小(重置)DAS计时器,让自动移动不会立刻生效,减少“移动键松开晚了导致下一块一出来就立即开始移动”的情况\n注:其他游戏中的DAS打断机制可能和本游戏的有区别,仅供参考。",
|
||||
"本游戏中指玩家的操作焦点转移到新方块的瞬间,此时减小(重置)DAS计时器,让自动移动不会立刻生效,减少 “移动键松开晚了导致下一块一出来就立即开始移动” 的情况\n注:其他游戏中的DAS打断机制可能和本游戏的有区别,仅供参考。",
|
||||
},
|
||||
{"误硬降打断 HCD",
|
||||
"autolockcut mdcut daduan",
|
||||
@@ -799,6 +804,11 @@ return{
|
||||
"term",
|
||||
"Soft Drop Factor,软降速度因子(倍率)\n部分游戏中的软降机制就是在按住软降键时方块受到的重力变为原来的若干倍,SDF就是这个变大的倍数。\n基本所有官块和TETR.IO使用这个机制,但本游戏不使用。",
|
||||
},
|
||||
{"方块名称",
|
||||
"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出块",
|
||||
"bag出块 bag7bag",
|
||||
"term",
|
||||
@@ -827,17 +837,17 @@ return{
|
||||
{"超连点 Hypertap",
|
||||
"chaoliandian",
|
||||
"term",
|
||||
"快速震动手指,实现比长按更快速+灵活的高速单点移动,主要在经典块的高难度下(因为DAS不可调而且特别慢,高速下很容易md导致失败,此时手动连点就比自动移动更快)或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人称为“Hypertapper”。",
|
||||
"快速震动手指,实现比长按更快速+灵活的高速单点移动,主要在经典块的高难度下(因为DAS不可调而且特别慢,高速下很容易md导致失败,此时手动连点就比自动移动更快)或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人称为 “Hypertapper” 。",
|
||||
},
|
||||
{"轮指 Rolling",
|
||||
"lunzhi liandian",
|
||||
"term",
|
||||
"另一种快速连点方法,用于DAS/ARR设置非常慢时的高重力(1G左右)模式。\n先把手柄(键盘……可能也行吧)悬空摆好,比如架在腿上,要连点某个键的时候一只手虚按按键,另外一只手的几根手指轮流敲打手柄背面,“反向按键”实现连点。这种控制方法可以让玩家更轻松地获得比直接抖动手指的Hypertap(详见超连点词条)更快的控制速度。\n此方法最先由Cheez-fish发明,他本人则使用Rolling达到过超过20Hz的点击频率。",
|
||||
"另一种快速连点方法,用于DAS/ARR设置非常慢时的高重力(1G左右)模式。\n先把手柄(键盘……可能也行吧)悬空摆好,比如架在腿上,要连点某个键的时候一只手虚按按键,另外一只手的几根手指轮流敲打手柄背面, “反向按键” 实现连点。这种控制方法可以让玩家更轻松地获得比直接抖动手指的Hypertap(详见超连点词条)更快的控制速度。\n此方法最先由Cheez-fish发明,他本人则使用Rolling达到过超过20Hz的点击频率。",
|
||||
},
|
||||
{"穿透 Passthrough",
|
||||
"pingthrough chuantou",
|
||||
"term",
|
||||
"(攻击)穿透,指双方的攻击打出后没有抵消,互相都收到的现象。\nTETR.IO中自定义房间如果开启Passthrough规则(曾经天梯默认开启),那么对手消行攻击的瞬间能看到自己的红条出现但其处于“无敌时间”内,不会触发也不能抵消,此时你的攻击会直接打给对手。(应该是给攻击的飞行动画预留时间,同时也让玩家能反应过来并主动选择要不要抵消,要的话就再等一会)\n另有pingthrough的说法,只是原因是由于不可避免的网络传输延迟,效果同passthrough,设计比较简单的联网对战块没有特殊考虑的话可能自然就会带有这个机制。",
|
||||
"(攻击)穿透,指双方的攻击打出后没有抵消,互相都收到的现象。\nTETR.IO中自定义房间如果开启Passthrough规则(曾经天梯默认开启),那么对手消行攻击的瞬间能看到自己的红条出现但其处于 “无敌时间” 内,不会触发也不能抵消,此时你的攻击会直接打给对手。(应该是给攻击的飞行动画预留时间,同时也让玩家能反应过来并主动选择要不要抵消,要的话就再等一会)\n另有pingthrough的说法,只是原因是由于不可避免的网络传输延迟,效果同passthrough,设计比较简单的联网对战块没有特殊考虑的话可能自然就会带有这个机制。",
|
||||
},
|
||||
{"TOP攻击表",
|
||||
"攻击表 top attack",
|
||||
@@ -854,11 +864,6 @@ return{
|
||||
"term",
|
||||
"(七个块初始权重设为0)\n要取块的时候,\n先把七个数都除以2然后加上0~1的随机数,\n最大的数字是第几个的就出对应的块,然后将其权重除以3.5\n循环。",--Discovered by zxc
|
||||
},
|
||||
{"C2踢墙",
|
||||
"kick",
|
||||
"term",
|
||||
"左,右,下,左下,右下,左2,右2\n(任何方块的任何旋转都使用这个表)。",
|
||||
},
|
||||
{"堆叠 Stack",
|
||||
"duidie stacking",
|
||||
"term",
|
||||
@@ -882,12 +887,12 @@ return{
|
||||
{"骨块 Bone",
|
||||
"gukuai bone tgm",
|
||||
"term",
|
||||
"最早的方块游戏使用的方块样式。\n很久以前的电脑没有可以显示复杂图案的屏幕,只能往上打字,所以一格方块用两个方括号[ ]表示,长得像骨头所以叫骨块。\n基于骨块的特点,本游戏把骨块重新定义为,“所有形状使用的同一个比较花眼的贴图”,不同的皮肤有不同的骨块样式。",
|
||||
"最早的方块游戏使用的方块样式。\n很久以前的电脑没有可以显示复杂图案的屏幕,只能往上打字,所以一格方块用两个方括号[ ]表示,长得像骨头所以叫骨块。\n基于骨块的特点,本游戏把骨块重新定义为, “所有形状使用的同一个比较花眼的贴图” ,不同的皮肤有不同的骨块样式。",
|
||||
},
|
||||
{"半隐",
|
||||
"banyin half semi invisible",
|
||||
"term",
|
||||
"指方块锁定经过一段时间后会变隐形的规则\n注:从锁定开始到消失的具体时长不定,可以描述为“过几秒种后消失”。",
|
||||
"指方块锁定经过一段时间后会变隐形的规则\n注:从锁定开始到消失的具体时长不定,可以描述为 “过几秒种后消失” 。",
|
||||
},
|
||||
{"全隐",
|
||||
"quanyin invisible",
|
||||
@@ -897,7 +902,7 @@ return{
|
||||
{"场地重力",
|
||||
"重力 zhongli liansuo cascade chain",
|
||||
"term",
|
||||
"(由于“重力”有歧义所以本词典里称为场地重力,也有重力连锁等叫法。)\n部分游戏的部分模式可能包含此规则。此规则下玩家的四格方块四个方向有连接关系,连起来的几个格整体会受到重力影响,悬空了会往下落。在这个规则下可以构造复杂的连锁消除,一个主打连锁消除对战的游戏是Qudra(老游戏,现在基本没人玩)。",
|
||||
"(由于 “重力” 有歧义所以本词典里称为场地重力,也有重力连锁等叫法。)\n部分游戏的部分模式可能包含此规则。此规则下玩家的四格方块四个方向有连接关系,连起来的几个格整体会受到重力影响,悬空了会往下落。在这个规则下可以构造复杂的连锁消除,一个主打连锁消除对战的游戏是Qudra(老游戏,现在基本没人玩)。",
|
||||
},
|
||||
{"MPH模式",
|
||||
"",
|
||||
@@ -909,6 +914,12 @@ return{
|
||||
"term",
|
||||
"用任何设备玩任何游戏时,所有的操作(按键盘,点鼠标等)都会晚一点点(很短,几毫秒到几十毫秒)才到达游戏,如果过长就会很影响游戏手感,作用效果类似于你拿QQ远程控制打FPS游戏\nTOP、TE等游戏比较明显\n这个延迟一般由硬件性能,硬件状态影响,通常来说不可设置,开启性能模式(或者关闭节能模式)可能会好一点。",
|
||||
},
|
||||
{"秘密段位",
|
||||
"大于号 secret grade dayuhao",
|
||||
"term",
|
||||
"出自TGM系列的彩蛋玩法。不按照TGM的一般目标去玩,而是去拼图拼出 “每行仅有一个洞的大于号” 图形(不能是小于号),拼得越多获得的秘密段位越高(没特殊功能,只是好玩),最高目标是完成19行并封顶"..HDwiki,
|
||||
HDsearch.."Secret_Grade_Techniques",
|
||||
},
|
||||
{"Cold Clear",
|
||||
"机器人 电脑 cc coldclear ai bot jiqiren",
|
||||
"term",
|
||||
@@ -929,37 +940,38 @@ return{
|
||||
{"DT炮",
|
||||
"dt cannon",
|
||||
"setup",
|
||||
"Double-Triple Cannon。\n"..HDwiki,
|
||||
"Double-Triple Cannon。"..HDwiki,
|
||||
HDsearch.."dt",
|
||||
},
|
||||
{"DTPC",
|
||||
"dtpc",
|
||||
"setup",
|
||||
"DT炮一个能接PC的分支。\n"..HDwiki,
|
||||
"DT炮一个能接PC的分支。"..HDwiki,
|
||||
HDsearch.."dt",
|
||||
},
|
||||
{"BT炮",
|
||||
"bt cannon",
|
||||
"setup",
|
||||
"β炮(Beta炮)。\n"..HDwiki,
|
||||
"β炮(Beta炮)。"..HDwiki,
|
||||
HDsearch.."bt_cannon",
|
||||
},
|
||||
{"BTPC",
|
||||
"btpc",
|
||||
"setup",
|
||||
"BT炮一个能接PC的分支。\n"..HDwiki,
|
||||
"BT炮一个能接PC的分支。"..HDwiki,
|
||||
HDsearch.."bt_cannon",
|
||||
},
|
||||
{"DDPC",
|
||||
"ddpc",
|
||||
"setup",
|
||||
"开局TSD的一个能接Double-Double-PC的分支。\n"..HDwiki,
|
||||
"开局TSD的一个能接Double-Double-PC的分支。"..HDwiki,
|
||||
HDsearch.."TKI_3_Perfect_Clear",
|
||||
},
|
||||
{"QT炮",
|
||||
"qt cannon",
|
||||
"setup",
|
||||
"QT炮,细节未知。",
|
||||
"一种能以更高的概率搭出开局DT Attack的类似DT炮的定式。"..HDwiki,
|
||||
HDsearch.."dt",
|
||||
},
|
||||
{"MT",
|
||||
"mt",
|
||||
@@ -970,7 +982,7 @@ return{
|
||||
{"狼月炮",
|
||||
"wolfmoon",
|
||||
"setup",
|
||||
"狼月炮。\n"..HDwiki,
|
||||
"狼月炮。"..HDwiki,
|
||||
HDsearch.."wolfmoon_cannon",
|
||||
},
|
||||
{"ASC",
|
||||
@@ -981,25 +993,26 @@ return{
|
||||
{"Sewer",
|
||||
"sewer",
|
||||
"setup",
|
||||
"Sewer开局。\n"..HDwiki,
|
||||
"Sewer开局。"..HDwiki,
|
||||
HDsearch.."sewer",
|
||||
},
|
||||
{"TKI",
|
||||
"tki",
|
||||
"setup",
|
||||
"TKI开局\n有两种解释,一个是TSD开局,另一个是Cspin开局。\n"..HDwiki,
|
||||
"TKI开局\n有两种解释,一个是TSD开局,另一个是Cspin开局。"..HDwiki,
|
||||
HDsearch.."tki",
|
||||
},
|
||||
{"God Spin",
|
||||
"god",
|
||||
"setup",
|
||||
"God Spin\nwindkey发明的一个观赏性很强但实战没啥用的炫酷特殊T2+T3开局定式。\n"..HDwiki,
|
||||
"God Spin\nwindkey发明的一个观赏性很强但实战没啥用的炫酷特殊T2+T3开局定式。"..HDwiki,
|
||||
HDsearch.."godspin",
|
||||
},
|
||||
{"信天翁",
|
||||
"xintianweng",
|
||||
"xintianweng albatross",
|
||||
"setup",
|
||||
"一种高观赏性几乎不浪费T的快节奏强力T2-T3-T2-PC开局。",
|
||||
"一种高观赏性几乎不浪费T的快节奏强力T2-T3-T2-PC开局。"..HDwiki,
|
||||
HDsearch.."Albatross_Special",
|
||||
},
|
||||
{"鹈鹕",
|
||||
"tihu",
|
||||
@@ -1007,9 +1020,22 @@ return{
|
||||
"一种类似信天翁的定式,在块序不能信天翁的时候可以用。",
|
||||
},
|
||||
{"七巧板",
|
||||
"qiqiaoban",
|
||||
"qiqiaoban tangram",
|
||||
"setup",
|
||||
"一种极大概率能摆出来并且很大概率能做到PC的定式,本游戏中的pc练习中空出不规则区域的那个就是七巧板。",
|
||||
"一种极大概率能摆出来并且很大概率能做到PC的定式,本游戏中的pc练习中空出不规则区域的那个就是七巧板。"..HDwiki,
|
||||
HDsearch.."Perfect_Clear_Opener",
|
||||
},
|
||||
{"DPC",
|
||||
"DPC",
|
||||
"setup",
|
||||
"在场地空白,1bag还剩一块的情况下,能够100%搭成的TSD+PC的定式。常见于开局三包PC的后续。"..HDwiki,
|
||||
HDsearch.."DPC_Setups",
|
||||
},
|
||||
{"Gamushiro堆叠",
|
||||
"gamushiro",
|
||||
"setup",
|
||||
"ガムシロ積み(Gamushiro堆叠),一种开局TD-Attack的定式。"..HDwiki,
|
||||
HDsearch.."Gamushiro_Stacking",
|
||||
},
|
||||
|
||||
--形状
|
||||
@@ -1021,21 +1047,27 @@ return{
|
||||
{"Cspin",
|
||||
"cspin",
|
||||
"pattern",
|
||||
"JL脚对脚立起来形成一个C形,缺口做适当的填充后可以打T3+T2。\n"..HDwiki,
|
||||
"JL脚对脚立起来形成一个C形,缺口做适当的填充后可以打T3+T2。"..HDwiki,
|
||||
HDsearch.."c-spin",
|
||||
},
|
||||
{"STSD",
|
||||
"stsd",
|
||||
"pattern",
|
||||
"Super T-spin Double\n一种能做两个T2的形状。\n如果垃圾行正好空在STSD正下方会暴毙。\n"..HDwiki,
|
||||
"Super T-spin Double\n一种能做两个T2的形状。\n如果垃圾行正好空在STSD正下方会暴毙。"..HDwiki,
|
||||
HDsearch.."stsd",
|
||||
},
|
||||
{"STMB",
|
||||
"stmb",
|
||||
"pattern",
|
||||
"STMB cave\n在高空3宽坑架SZ捐一个T2的形状。\n"..HDwiki,
|
||||
"STMB cave\n在高空3宽坑架SZ捐一个T2的形状。"..HDwiki,
|
||||
HDsearch.."stmb_cave",
|
||||
},
|
||||
{"双刃剑",
|
||||
"shuangrenjian fractal spider",
|
||||
"pattern",
|
||||
"两个T2形状叠在一起。"..HDwiki,
|
||||
HDsearch.."Fractal",
|
||||
},
|
||||
{"LST堆叠",
|
||||
"lst",
|
||||
"pattern",
|
||||
@@ -1045,24 +1077,25 @@ return{
|
||||
{"汉堡包",
|
||||
"hamburger hanbaobao",
|
||||
"pattern",
|
||||
"一种边缘捐T不影响消四的堆叠法。\n"..HDwiki,
|
||||
"一种边缘捐T不影响消四的堆叠法。"..HDwiki,
|
||||
HDsearch.."hamburger",
|
||||
},
|
||||
{"皇家十字",
|
||||
"皇十 imperial cross huangjiashizi huangshi",
|
||||
"pattern",
|
||||
"在一个十字形洞口盖屋檐后可以做两个T2的形状。\n"..HDwiki,
|
||||
"在一个十字形洞口盖屋檐后可以做两个T2的形状。"..HDwiki,
|
||||
HDsearch.."imperial_cross",
|
||||
},
|
||||
{"雨宫炮",
|
||||
"yugong",
|
||||
"yugong amemiya",
|
||||
"pattern",
|
||||
"一种捐T2后可消四的形状,常见于DT的一个分支。",
|
||||
},
|
||||
{"千鸟格子",
|
||||
"qianniaoge",
|
||||
"pattern",
|
||||
"一种在小洞上捐一个T2后还能做一个T2的形状。",
|
||||
"一种在小洞上捐一个T2后还能做一个T2的形状。"..HDwiki,
|
||||
HDsearch.."Cut_copy",
|
||||
},
|
||||
{"六巧板",
|
||||
"liuqiaoban",
|
||||
@@ -1070,9 +1103,10 @@ return{
|
||||
"一种常用于增加中局PC概率的形状,本游戏中的PC练习中空出4×4方形区域就是六巧板。",
|
||||
},
|
||||
{"绯红之王",
|
||||
"feihongzhiwang",
|
||||
"feihongzhiwang king crimson",
|
||||
"pattern",
|
||||
"在STSD上叠若干个T3的形状。",
|
||||
"在STSD上叠若干个T3的形状。"..HDwiki,
|
||||
HDsearch.."King_Crimson",
|
||||
},
|
||||
|
||||
--存档管理
|
||||
@@ -1084,37 +1118,37 @@ return{
|
||||
{"重置设置",
|
||||
"reset setting chongzhi qingkong shezhi",
|
||||
"command",
|
||||
"前往控制台输入“rm conf/setting”并回车\n需要重启游戏生效,若反悔,进入设置菜单再退出即可恢复文件。",
|
||||
"前往控制台输入 “rm conf/setting” 并回车\n需要重启游戏生效,若反悔,进入设置菜单再退出即可恢复文件。",
|
||||
},
|
||||
{"重置统计数据",
|
||||
"reset statistic data chongzhi tongji shuju",
|
||||
"command",
|
||||
"前往控制台输入“rm conf/data”并回车\n需要重启游戏生效,若反悔,玩一局并触发结算即可恢复文件。",
|
||||
"前往控制台输入 “rm conf/data” 并回车\n需要重启游戏生效,若反悔,玩一局并触发结算即可恢复文件。",
|
||||
},
|
||||
{"重置解锁状态",
|
||||
"reset unlock chongzhi qingkong jiesuo",
|
||||
"command",
|
||||
"前往控制台输入“rm conf/unlock”并回车\n需要重启游戏生效,若反悔,刷新任意一个模式在地图上的状态即可恢复文件。",
|
||||
"前往控制台输入 “rm conf/unlock” 并回车\n需要重启游戏生效,若反悔,刷新任意一个模式在地图上的状态即可恢复文件。",
|
||||
},
|
||||
{"重置本地排行榜",
|
||||
"reset chongzhi paihangbang",
|
||||
"command",
|
||||
"前往控制台输入“rm -s record”并回车\n需要重启游戏生效,若反悔,玩一局并更新模式排行榜即可恢复对应模式的单个排行榜文件。",
|
||||
"前往控制台输入 “rm -s record” 并回车\n需要重启游戏生效,若反悔,玩一局并更新模式排行榜即可恢复对应模式的单个排行榜文件。",
|
||||
},
|
||||
{"删除键位",
|
||||
"reset virtualkey",
|
||||
"command",
|
||||
"前往控制台输入“rm conf/键位文件”并回车\n键盘是key,虚拟按键是virtualkey,虚拟按键预设是vkSave1(2)\n前两者重启生效,若反悔,进入对应的设置菜单再返回即可恢复文件。",
|
||||
"前往控制台输入 “rm conf/键位文件” 并回车\n键盘是key,虚拟按键是virtualkey,虚拟按键预设是vkSave1(2)\n前两者重启生效,若反悔,进入对应的设置菜单再返回即可恢复文件。",
|
||||
},
|
||||
{"删除录像",
|
||||
"reset replay luxiang",
|
||||
"command",
|
||||
"前往控制台输入“rm -s replay”并回车。\n立即生效。",
|
||||
"前往控制台输入 “rm -s replay” 并回车。\n立即生效。",
|
||||
},
|
||||
{"删除缓存",
|
||||
"reset cache huancun touxiang",
|
||||
"command",
|
||||
"前往控制台输入“rm -s cache”并回车。\n立即生效。",
|
||||
"前往控制台输入 “rm -s cache” 并回车。\n立即生效。",
|
||||
},
|
||||
|
||||
--英文
|
||||
@@ -1198,7 +1232,7 @@ return{
|
||||
{"Kazu",
|
||||
"mdking",
|
||||
"name",
|
||||
"(也叫“GAMEOVER” “GAMAOVER” “GAME_OVER_RETRY”)\n一流玩家,以熟练md转捐赠闻名(雾)。",
|
||||
"(也叫 “GAMEOVER” “GAMAOVER” “GAME_OVER_RETRY” )\n一流玩家,以熟练md转捐赠闻名(雾)。",
|
||||
},
|
||||
{"Microblizz",
|
||||
"",
|
||||
|
||||
@@ -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.",
|
||||
@@ -114,11 +114,11 @@ return{
|
||||
noUsername="Please enter your username",
|
||||
wrongEmail="Invalid email address",
|
||||
noPassword="Please enter your password",
|
||||
diffPassword="Passwords don't match",
|
||||
diffPassword="Passwords don’t match",
|
||||
registerRequestSent="A sign up request has been sent.",
|
||||
registerSuccessed="Sign up successful!",
|
||||
loginSuccessed="You are now logged in!",
|
||||
accessSuccessed="Access granted",
|
||||
registerOK="Sign up successful!",
|
||||
loginOK="You are now logged in!",
|
||||
accessOK="Access granted",
|
||||
|
||||
wsConnecting="Websocket connecting…",
|
||||
wsFailed="WebSocket connection failed",
|
||||
@@ -143,7 +143,6 @@ return{
|
||||
customBGloadFailed="Unsupport image format for custom background",
|
||||
|
||||
errorMsg="Techmino ran into a problem and needs to restart.\nYou can send the error log to the developers.",
|
||||
tryAnotherBuild="[Invalid UTF-8] If you are on Windows, try downloading Techmino-win32 or Techmino-win64 (different from what you are using now).",
|
||||
|
||||
modInstruction="Choose your modifiers!\nMods allow you to change the game,\nbut they may also crash the game.\nScores will not be saved when using mods.",
|
||||
modInfo={
|
||||
@@ -183,7 +182,7 @@ return{
|
||||
"Finesse:",
|
||||
},
|
||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||
radarData={"D'PM","ADPM","APM","SPM","L'PM","DPM"},
|
||||
radarData={"D’PM","ADPM","APM","SPM","L’PM","DPM"},
|
||||
stat={
|
||||
"Times Launched:",
|
||||
"Play Count:",
|
||||
@@ -198,13 +197,13 @@ return{
|
||||
"Fns. Errs/Rate:",
|
||||
},
|
||||
aboutTexts={
|
||||
"This is just an *ordinary* block stacker. Really, that's it.",
|
||||
"This is just an *ordinary* block stacker. Really, that’s it.",
|
||||
"Inspired by C2/IO/JS/WWC/KOS etc.",
|
||||
"",
|
||||
"Powered by LÖVE",
|
||||
"Any suggestions or bug reports are appreciated!",
|
||||
"Make sure to get the game only from official sources,",
|
||||
"as we can't make sure you're safe if you got it elsewhere.",
|
||||
"as we can’t make sure you’re safe if you got it elsewhere.",
|
||||
"The author is not responsible for any modifications.",
|
||||
FNNS and"/"or"While the game is free, donations are appreciated.",
|
||||
FNNS and"/"or"Check Zictionary for more",
|
||||
@@ -276,6 +275,8 @@ return{
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"NOT_A_ROBOT",
|
||||
"sakurw",
|
||||
"Airun",
|
||||
"幽灵3383",
|
||||
"",
|
||||
"Performances",
|
||||
"Electric283",
|
||||
@@ -314,7 +315,6 @@ return{
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="Support the author",
|
||||
WidgetText={
|
||||
@@ -369,7 +369,7 @@ return{
|
||||
},
|
||||
net_newRoom={
|
||||
title="Room Config",
|
||||
roomName="Room name (Default: \"[username]'s room\")",
|
||||
roomName="Room name (Default: “[username]'s room”)",
|
||||
password="Password",
|
||||
description="Room Description",
|
||||
|
||||
@@ -458,7 +458,6 @@ return{
|
||||
atkFX="Atk FX",
|
||||
|
||||
frame="Render Frame Rate (%)",
|
||||
FTlock="Frame skip",
|
||||
|
||||
text="Line Clear Pop-Ups",
|
||||
score="Score Pop-Ups",
|
||||
@@ -629,7 +628,7 @@ return{
|
||||
push="Add Line (K)",
|
||||
del="Del Line (L)",
|
||||
|
||||
demo="Don't Show ×",
|
||||
demo="Don’t Show “×”",
|
||||
|
||||
newPg="New Page (N)",
|
||||
delPg="Del Page (M)",
|
||||
@@ -687,6 +686,7 @@ return{
|
||||
register="Sign Up",
|
||||
email="Email Address",
|
||||
password="Password",
|
||||
showEmail="Show Email",
|
||||
keepPW="Remember me",
|
||||
login="Log In",
|
||||
},
|
||||
@@ -755,112 +755,122 @@ 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"},
|
||||
['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!"},
|
||||
['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_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+", "Fast 20G decision"},
|
||||
['strategy_h_plus']={"Strategy", "HARD+", "Fast 20G decision"},
|
||||
['strategy_u_plus']={"Strategy", "ULTIMATE+", "Fast 20G decision"},
|
||||
['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 very low-speed recreation from the 80s"},
|
||||
['classic_h']= {"Classic", "HARD", "A medium 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"},
|
||||
},
|
||||
getTip={refuseCopy=true,
|
||||
":pog:",
|
||||
"(RUR'U')R'FR2U'R'U'(RUR'F')",
|
||||
"\"Techmino.app\" cannot be opened because the developer cannot be verified.",
|
||||
"\"Techmino.app\" will damage your computer. You should move it to the Bin.",
|
||||
"\"TechminOS\"",
|
||||
"(RUR’U’)R’FR2U’R’U’(RUR’F’)",
|
||||
"“Techmino.app” cannot be opened because the developer cannot be verified.",
|
||||
"“Techmino.app” will damage your computer. You should move it to the Bin.",
|
||||
"“TechminOS”",
|
||||
"\\jezevec/\\jezevec/\\jezevec/",
|
||||
"\\osk/\\osk/\\osk/",
|
||||
"↑↑↓↓←→←→BA",
|
||||
@@ -883,22 +893,22 @@ 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?",
|
||||
"Does B2B2B2B exist?",
|
||||
"Don't let a small glitch ruin your entire day!",
|
||||
"Don't look directly at the bugs!",
|
||||
"Don’t let a small glitch ruin your entire day!",
|
||||
"Don’t look directly at the bugs!",
|
||||
"Enjoy the Techmino rotation system!",
|
||||
"Excellent, but let's go better next time…",
|
||||
"Find out what's in the settings!",
|
||||
"Excellent, but let’s go better next time…",
|
||||
"Find out what’s in the settings!",
|
||||
"Found any bugs? Open up an issue in our GitHub page!",
|
||||
"Free-to-play block stacking game with a Battle Royale mode!",
|
||||
"git commit",
|
||||
"git push -f",
|
||||
"Got any suggestions? Post them in our Discord!",
|
||||
"Have you noticed what \"rotating\" does do to a block?",
|
||||
"Have you noticed what “rotating” does do to a block?",
|
||||
"Headphones recommended for a better experience.",
|
||||
"Hello world!",
|
||||
"I3 and L3 are the only two unique triminoes.",
|
||||
@@ -907,8 +917,8 @@ return{
|
||||
"Initial [insert action] system can save you.",
|
||||
"Is B2B2B2B possible?",
|
||||
"It is loading! Not just a cutscene!",
|
||||
"It's possible to finish 40L without left/right buttons.",
|
||||
"It's possible to finish 40L without rotation buttons.",
|
||||
"It’s possible to finish 40L without left/right buttons.",
|
||||
"It’s possible to finish 40L without rotation buttons.",
|
||||
"Join our Discord!",
|
||||
"l-=-1",
|
||||
"Let the bass kick!",
|
||||
@@ -928,12 +938,12 @@ 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\".",
|
||||
"Techmino is a portmanteau of “technique” and “tetromino”.",
|
||||
"Techmino is so fun!",
|
||||
"Techmino on Nspire-CX: yes it exists, no it's not the same game.",
|
||||
"Techmino on Nspire-CX: yes it exists, no it’s not the same game.",
|
||||
"TetroDictionary is now available in English.",
|
||||
"Most of the music tracks in this game are made using Beepbox.",
|
||||
"The names that appeared in the background of the Staff page is a list of our sponsors.",
|
||||
@@ -966,7 +976,7 @@ return{
|
||||
{C.C,"Also try osu!"},
|
||||
{C.C,"Also try Phigros!"},
|
||||
{C.C,"Also try Puyo Puyo!"},
|
||||
{C.C,"Also try Rubik's cube!"},
|
||||
{C.C,"Also try Rubik’s cube!"},
|
||||
{C.C,"Also try Terraria!"},
|
||||
{C.C,"Also try Touhou Project!"},
|
||||
{C.C,"Also try VVVVVV!"},
|
||||
@@ -978,8 +988,8 @@ return{
|
||||
{C.lY,"COOL!!"},
|
||||
{C.N,"Lua",C.Z," No.1"},
|
||||
{C.P,"T-spin!"},
|
||||
{C.R,"\"DMCA abusing\""},
|
||||
{C.R,"\"Intellectual property law\""},
|
||||
{C.R,"“DMCA abusing”"},
|
||||
{C.R,"“Intellectual property law”"},
|
||||
{C.R,"DD",C.Z," Cannon=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"D",C.Z," Cannon"},
|
||||
{C.R,"DT",C.Z," Cannon=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"T",C.Z," Cannon"},
|
||||
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR ",C.P,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"},
|
||||
|
||||
@@ -105,9 +105,9 @@ return{
|
||||
noPassword="Por favor ingresa una contraseña",
|
||||
diffPassword="Las contraseñas no coinciden",
|
||||
registerRequestSent="Petición de registro enviada con éxito",
|
||||
registerSuccessed="¡Registro exitoso!",
|
||||
loginSuccessed="¡Ingreso con éxito!",
|
||||
accessSuccessed="¡Autorizado exitoso!",
|
||||
registerOK="¡Registro exitoso!",
|
||||
loginOK="¡Ingreso con éxito!",
|
||||
accessOK="¡Autorizado exitoso!",
|
||||
|
||||
wsConnecting="Websocket Conectando",
|
||||
wsFailed="WebSocket conexión fallida",
|
||||
@@ -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",
|
||||
},
|
||||
@@ -655,20 +654,21 @@ return{
|
||||
['master_m']= {"Master", "M21", "Para Maestros del 20G."},
|
||||
['master_final']= {"Master", "FINAL", "El verdadero 20G Supremo:\nel final es inalcanzable."},
|
||||
['master_ex']= {"GrandMaster", "EXTRA", "Para ser un gran maestro,\nacepta este desafío"},
|
||||
['strategy_e']= {"Strategy", "EASY", "Decisiones rápidas en 20G."},
|
||||
['strategy_h']= {"Strategy", "HARD", "Decisiones rápidas en 20G."},
|
||||
['strategy_u']= {"Strategy", "ULTIMATE", "Decisiones rápidas en 20G."},
|
||||
['strategy_e_plus']={"Strategi", "MUDAH+", "Decisiones rápidas en 20G."},
|
||||
['strategy_h_plus']={"Strategi", "SULIT+", "Decisiones rápidas en 20G."},
|
||||
['strategy_u_plus']={"Strategi", "TERAKHIR+", "Decisiones rápidas en 20G."},
|
||||
['strategy_e']= {"Strategy", "Fácil", "Decisiones rápidas en 20G."},
|
||||
['strategy_h']= {"Strategy", "Difícil", "Decisiones rápidas en 20G."},
|
||||
['strategy_u']= {"Strategy", "Supremo", "Decisiones rápidas en 20G."},
|
||||
['strategy_e_plus']={"Strategy", "Fácil+", "Estrategia sin bodega."},
|
||||
['strategy_h_plus']={"Strategy", "Difícil+", "Estrategia sin bodega."},
|
||||
['strategy_u_plus']={"Strategy", "Supremo+", "Estrategia sin bodega."},
|
||||
['blind_e']= {"A Ciegas", "Parcial", "Para novatos."},
|
||||
['blind_n']= {"A Ciegas", "Total", "Para jugadores intermedios."},
|
||||
['blind_h']= {"A Ciegas", "Inmediato", "Para jugadores experimentados"},
|
||||
['blind_l']= {"A Ciegas", "Inmediato+", "Para profesionales."},
|
||||
['blind_u']= {"A Ciegas", "?", "¿Estás preparado?"},
|
||||
['blind_wtf']= {"A Ciegas", "ELFUF", "No, no lo estás."},
|
||||
['classic_e']= {"Classic", "EASY", "Modo clásico con alta velocidad."},
|
||||
['classic_e']= {"Clásico", "EASY", "Modo clásico con alta velocidad."},
|
||||
['classic_h']= {"Clásico", "Difícil", "Modo clásico con alta velocidad."},
|
||||
['classic_l']= {"Clásico", "Lunático", "Modo clásico con alta velocidad."},
|
||||
['classic_u']= {"Clásico", "Supremo", "Modo clásico con alta velocidad."},
|
||||
['survivor_e']= {"Supervivencia", "Fácil", "¿Cuánto tiempo podrás sobrevivir?"},
|
||||
['survivor_n']= {"Supervivencia", "Normal", "¿Cuánto tiempo podrás sobrevivir?"},
|
||||
|
||||
@@ -106,9 +106,9 @@ return{
|
||||
noPassword="Entrez votre mot de passe",
|
||||
diffPassword="Les mots de passe ne se correspondent pas",
|
||||
-- registerRequestSent="Registration request sent",
|
||||
registerSuccessed="Enregistré avec succès !",
|
||||
loginSuccessed="Connecté avec succès !",
|
||||
accessSuccessed="Autorisé avec succès !",
|
||||
registerOK="Enregistré avec succès !",
|
||||
loginOK="Connecté avec succès !",
|
||||
accessOK="Autorisé avec succès !",
|
||||
|
||||
-- wsConnecting="Websocket Connecting",
|
||||
wsFailed="WebSocket connection échouée",
|
||||
@@ -242,6 +242,8 @@ return{
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"NOT_A_ROBOT",
|
||||
"sakurw",
|
||||
"Airun",
|
||||
"幽灵3383",
|
||||
"",
|
||||
"Performance",
|
||||
"Electric283",
|
||||
@@ -280,7 +282,6 @@ return{
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="Aider le créateur",
|
||||
WidgetText={
|
||||
@@ -421,7 +422,6 @@ return{
|
||||
atkFX="Effets d'attaque",
|
||||
|
||||
frame="Montrer les FPS(%)",
|
||||
-- FTlock="Frame-Time Lock",
|
||||
|
||||
text="Texte d'action",
|
||||
score="Pop-up de score",
|
||||
@@ -640,6 +640,7 @@ return{
|
||||
register="Enregistrement",
|
||||
email="E-mail",
|
||||
password="Mot de passe",
|
||||
-- showEmail="Show Email",
|
||||
-- keepPW="Remember me",
|
||||
login="Connexion",
|
||||
},
|
||||
@@ -740,7 +741,7 @@ return{
|
||||
['techmino49_u']= {"Tech 49", "ULTIME", "Bataille de 49 joueurs.\nLe dernier en vie gagne."},
|
||||
['techmino99_e']= {"Tech 99", "FACILE", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
|
||||
['techmino99_h']= {"Tech 99", "DIFFICILE", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
|
||||
['techmino99_u']= {"Tech 99", "ULTIMe", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
|
||||
['techmino99_u']= {"Tech 99", "ULTIME", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
|
||||
['round_e']= {"Tour à tour", "FACILE", "Mode échecs"},
|
||||
['round_n']= {"Tour à tour", "NORMAL", "Mode échecs"},
|
||||
['round_h']= {"Tour à tour", "DIFFICILE", "Mode échecs"},
|
||||
@@ -750,14 +751,14 @@ return{
|
||||
['master_h']= {"Master", "DIFFICILE", "Challenge 20G pro !"},
|
||||
-- ['master_m']= {"Master", "M21", "For 20G Masters."},
|
||||
['master_final']= {"Master", "FINAL", "20G : Un point final impossible à atteindre !"},
|
||||
-- ['master_ph']= {"Mester", "FANTASMA", "20G: ???"},
|
||||
-- ['master_ph']= {"Master", "FANTASMA", "20G: ???"},
|
||||
['master_ex']= {"GrandMaster", "EXTRA", "Tentez de devenir un Grandmaster."},
|
||||
['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
|
||||
['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
|
||||
['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
|
||||
-- ['strategy_e_plus']={"Strategi", "MUDAH+", "Keputusan 20G cepat"},
|
||||
-- ['strategy_h_plus']={"Strategi", "SULIT+", "Keputusan 20G cepat"},
|
||||
-- ['strategy_u_plus']={"Strategi", "TERAKHIR+", "Keputusan 20G cepat"},
|
||||
['strategy_e']= {"Stratégie", "FACILE", "Décision rapide 20G"},
|
||||
['strategy_h']= {"Stratégie", "DIFFICILE", "Décision rapide 20G"},
|
||||
['strategy_u']= {"Stratégie", "ULTIME", "Décision rapide 20G"},
|
||||
['strategy_e_plus']={"Stratégie", "FACILE+", "Stratégie sans retenue"},
|
||||
['strategy_h_plus']={"Stratégie", "DIFFICILE+", "Stratégie sans retenue"},
|
||||
['strategy_u_plus']={"Stratégie", "ULTIME+", "Stratégie sans retenue"},
|
||||
['blind_e']= {"Aveugle", "MOITIE", "Pour les novices."},
|
||||
['blind_n']= {"Aveugle", "TOUT", "Pour les joueurs intermédiaires."},
|
||||
['blind_h']= {"Aveugle", "SOUDAIN", "Pour les bons jooeurs."},
|
||||
@@ -766,6 +767,7 @@ return{
|
||||
['blind_wtf']= {"Aveugle", "WTF", "Vous n'êtes pas prêt."},
|
||||
['classic_e']= {"Classic", "EASY", "Un mode classique rapide."},
|
||||
['classic_h']= {"Classic", "DIFFICILE", "Un mode classique rapide."},
|
||||
['classic_l']= {"Classic", "LUNATIQUE", "Un mode classique rapide."},
|
||||
['classic_u']= {"Classic", "ULTIME", "Un mode classique rapide."},
|
||||
['survivor_e']= {"Survivor", "FACILE", "Pendant combien de temps survivrez-vous ?"},
|
||||
['survivor_n']= {"Survivor", "NORMAL", "Pendant combien de temps survivrez-vous ?"},
|
||||
@@ -798,10 +800,10 @@ return{
|
||||
['tsd_e']= {"TSD Challenge", "FACILE", "T-spin doubles uniquement !"},
|
||||
['tsd_h']= {"TSD Challenge", "DIFFICILE", "T-spin doubles uniquement !"},
|
||||
['tsd_u']= {"TSD Challenge", "ULTIME", "T-spin doubles uniquement !"},
|
||||
-- ['backfire_n']= {"Backfire", "NORMAL", "Self-send garbages"},
|
||||
-- ['backfire_h']= {"Backfire", "HARD", "Self-send garbages"},
|
||||
-- ['backfire_l']= {"Backfire", "LUNATIC", "Self-send garbages"},
|
||||
-- ['backfire_u']= {"Backfire", "ULTIMATE", "Self-send garbages"},
|
||||
-- ['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", "200 lignes sans limites de temps."},
|
||||
|
||||
@@ -27,11 +27,11 @@ return{
|
||||
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
|
||||
cleared="$1 baris",
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
PC="PC",HPC="Hampir PC",
|
||||
PC="PC",HPC="Setengah PC",
|
||||
replaying="[Diulang]",
|
||||
tasUsing="[TAS]",
|
||||
|
||||
stage="Tahap $1 selesai!",
|
||||
stage="Bagian $1 selesai!",
|
||||
great="Bagus!",
|
||||
awesome="Luar biasa!",
|
||||
almost="Hampir!",
|
||||
@@ -40,7 +40,7 @@ return{
|
||||
speedup="Percepatkan!",
|
||||
missionFailed="Salah",
|
||||
|
||||
speedLV="Kecepatan lvl",
|
||||
speedLV="Kecptn lvl",
|
||||
piece="Blok",line="Baris",atk="Baris Terkirim",eff="Efisiensi",
|
||||
rpm="RPM",tsd="TSD",
|
||||
grade="Nilai",techrash="Techrash",
|
||||
@@ -56,7 +56,7 @@ return{
|
||||
gameover="Tamat",
|
||||
|
||||
pause="Terjeda",
|
||||
pauseCount="Jeda-jeda",
|
||||
pauseCount="Jeda",
|
||||
finesse_ap="Semua sempurna",
|
||||
finesse_fc="Kombo penuh",
|
||||
|
||||
@@ -75,7 +75,7 @@ return{
|
||||
loadError_other="'$1' eror memuat: $2",
|
||||
loadError_unknown="'$1' eror memuat: alasan tidak diketahui",
|
||||
|
||||
saveError_duplicate="'$1' eror menyimpan: nama file tergAnda",
|
||||
saveError_duplicate="'$1' eror menyimpan: nama file terganda",
|
||||
saveError_encode="'$1' eror menyimpan: gagal menyandi",
|
||||
saveError_other="'$1' eror menyimpan: $2",
|
||||
saveError_unknown="'$1' eror menyimpan: alasan tidak diketahui",
|
||||
@@ -85,10 +85,10 @@ return{
|
||||
exportSuccess="Ekspor berhasil",
|
||||
importSuccess="Impor berhasil",
|
||||
dataCorrupted="Data rusak",
|
||||
pasteWrongPlace="Menempel di tempat yang salah?",
|
||||
pasteWrongPlace="Apakah Anda menempelkannya di tempat yang salah?",
|
||||
noFile="File tidak ada",
|
||||
|
||||
nowPlaying="Sekarang mendengarkan:",
|
||||
nowPlaying="Musik:",
|
||||
|
||||
VKTchW="Berat sentuhan",
|
||||
VKOrgW="Berat asal",
|
||||
@@ -117,9 +117,9 @@ return{
|
||||
noPassword="Silahkan masukki kata sandi Anda",
|
||||
diffPassword="Kata sandi tidak sama",
|
||||
registerRequestSent="Permintaan daftar telah terkirim.",
|
||||
registerSuccessed="Pendaftaran sukses!",
|
||||
loginSuccessed="Anda sekarang tergabung!",
|
||||
accessSuccessed="Akses diberikan",
|
||||
registerOK="Pendaftaran sukses!",
|
||||
loginOK="Anda sekarang tergabung!",
|
||||
accessOK="Akses diberikan",
|
||||
|
||||
wsConnecting="Menghubungkan websocket…",
|
||||
wsFailed="Koneksi websocket gagal",
|
||||
@@ -151,7 +151,7 @@ return{
|
||||
next="BLOK LANJUT\nMengubah jumlah blok lanjut yang ditampilkan.",
|
||||
hold="SIMPAN\nMengubah jumlah blok yang bisa disimpan.",
|
||||
hideNext="BLOK LANJUT Tersembunyi\nMenyembunyikan beberapa blok lanjut.",
|
||||
infHold="SIMPAN SELAMANYA\nMemungkinkan Anda untuk menyimpan blok-blok selamanya.",
|
||||
infHold="SIMPAN TAK TERBATAS\nMemungkinkan Anda untuk menyimpan blok-blok tidak terbatas.",
|
||||
hideBlock="Sembunyikan Blok Aktif\nMenyembunyikan blok yang Anda mengontrol.",
|
||||
hideGhost="Sembunyikan Blok Hantu\nMenyembunyikan blok yang menunjukkan tempat blok yang sedang dikontrol akan jatuh.",
|
||||
hidden="Sembunyikan Blok Terdarat\nMenyembunyikan blok yang sudah mendarat setelah waktu yang tertentu.",
|
||||
@@ -180,7 +180,7 @@ return{
|
||||
"Diterima:",
|
||||
"Jumlah Tindakan Membuat Baris:",
|
||||
"Spins:",
|
||||
"B2B/B3B/PC/Hampir PC:",
|
||||
"B2B/B3B/PC/Setengah PC:",
|
||||
"Efisiensi Tombol:",
|
||||
},
|
||||
radar={"BLOK","SERANGAN","SRGN + BLOK","SRGN TERKIRIM","KECEPATAN","GALI"},
|
||||
@@ -191,12 +191,12 @@ return{
|
||||
"Jumlah Waktu Bermain:",
|
||||
"Tombol/Putar/Simpan:",
|
||||
"Blok/Baris/Serangan:",
|
||||
"Serangan Diterima/Ditolak/Muncul:", -- what is this
|
||||
"Serangan Diterima/Ditolak/Muncul:",
|
||||
"Gali/Serangan Gali:",
|
||||
"Efisiensi/Efisiensi Gali:",
|
||||
"B2B/B2B2B:",
|
||||
"PC/Hampir PC:",
|
||||
"Efisiensi Tombol Tidak Maksimal/Nilai:",
|
||||
"PC/Setengah PC:",
|
||||
"Kesalahan Efisiensi Tombol/Nilai:",
|
||||
},
|
||||
aboutTexts={
|
||||
"Ini hanya penyusun blok *normal*. Sungguh, hanya itu saja.",
|
||||
@@ -277,6 +277,8 @@ return{
|
||||
"C₂₉H₂₅N₃O₅",
|
||||
"NOT_A_ROBOT",
|
||||
"sakurw",
|
||||
"Airun",
|
||||
"幽灵3383",
|
||||
"",
|
||||
"Pertunjukan",
|
||||
"Electric283",
|
||||
@@ -302,8 +304,8 @@ return{
|
||||
"huaji2369",
|
||||
"Lexitik",
|
||||
"Tourahi Anime",
|
||||
"[All other test staff]",
|
||||
"…And You!",
|
||||
"[Semua staf penguji lainnya]",
|
||||
"…Dan Anda!",
|
||||
},
|
||||
used=[[
|
||||
Alat-alat yang digunakan:
|
||||
@@ -315,7 +317,6 @@ return{
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="Dukung pencipta",
|
||||
WidgetText={
|
||||
@@ -345,7 +346,7 @@ return{
|
||||
pause={
|
||||
setting="Pengaturan (S)",
|
||||
replay="Ulang (P)",
|
||||
save="Simpan Pengulangan (O)",
|
||||
save="Simpan (O)",
|
||||
resume="Lanjut (esc)",
|
||||
restart="Coba lagi (R)",
|
||||
quit="Berhenti (Q)",
|
||||
@@ -459,7 +460,6 @@ return{
|
||||
atkFX="Efek Serang",
|
||||
|
||||
frame="Kecepatan Bingkai (%)",
|
||||
FTlock="Lewat Bingkai",
|
||||
|
||||
text="Teks Baris",
|
||||
score="Teks Nilai",
|
||||
@@ -688,6 +688,7 @@ return{
|
||||
register="Daftar",
|
||||
email="Alamat Email",
|
||||
password="Password",
|
||||
-- showEmail="Show Email",
|
||||
keepPW="Ingat Saya",
|
||||
login="Masuk",
|
||||
},
|
||||
@@ -756,110 +757,115 @@ 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+", "Keputusan 20G cepat"},
|
||||
['strategy_h_plus']={"Strategi", "SULIT+", "Keputusan 20G cepat"},
|
||||
['strategy_u_plus']={"Strategi", "TERAKHIR+", "Keputusan 20G cepat"},
|
||||
['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_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"},
|
||||
},
|
||||
getTip={refuseCopy=true,
|
||||
"(RUR'U')R'FR2U'R'U'(RUR'F')",
|
||||
"\"Techmino.app\" tidak bisa dibuka karena penciptanya tidak bisa diverifikasi.",
|
||||
"\"Techmino.app\" akan merusak komputer Anda. Anda sebaiknya memindah itu ke tempat sampah.",
|
||||
"\"Techmino.app\" tidak bisa dibuka karena pengembang tidak bisa diverifikasi.",
|
||||
"\"Techmino.app\" akan merusak komputer Anda. Anda harus memindahnya ke tong sampah.",
|
||||
"\"TechminOS\"",
|
||||
"\\jezevec/\\jezevec/\\jezevec/",
|
||||
"\\osk/\\osk/\\osk/",
|
||||
@@ -916,8 +922,8 @@ return{
|
||||
"OHHHHHHHHHHHHHH",
|
||||
"Main dengan satu tangan!",
|
||||
"Bermain bagus membutuhkan waktu!",
|
||||
"dipersembahkan oleh LÖVE",
|
||||
"dipersembahkan oleh Un..LÖVE",
|
||||
"Dipersembahkan oleh LÖVE",
|
||||
"Dipersembahkan oleh Un..LÖVE",
|
||||
"Server kadang tidak berfungsi",
|
||||
"Beberapa persyaratan untuk mencapai peringkat X sengaja dibuat sulit bahkan untuk pemain terbaik.",
|
||||
"Segera Anda akan dapat bermain melawan teman dan musuh di seluruh dunia.",
|
||||
|
||||