Compare commits

..

20 Commits

Author SHA1 Message Date
MrZ626
41e7b8e0f4 版本推进 2021-12-07 22:43:53 +08:00
MrZ626
4bd723a7ee 整理代码 2021-12-07 22:43:48 +08:00
MrZ626
66d5bd5490 更多场景的大标题添加最大显示长度 2021-12-07 22:40:16 +08:00
MrZ626
351d0258b2 再优化miya立绘 2021-12-07 22:40:16 +08:00
NOT_A_ROBOT
26fb9a7052 Add Strategy+ (#539) 2021-12-07 22:39:00 +08:00
MrZ626
307fd637fa 换新miya立绘
给不同立绘添加不同点击动画
2021-12-07 20:25:14 +08:00
MrZ626
93fb716f89 fix 2021-12-07 17:10:02 +08:00
MrZ626
7b41551e2d xitonglai 2021-12-07 16:57:47 +08:00
MrZ626
4806af5f7d 重做关于页面,赞助二维码搬家 2021-12-07 16:00:52 +08:00
MrZ626
85cb55cdd0 文本控件也支持设置最大宽度了 2021-12-07 15:51:19 +08:00
MrZ626
27a9697e47 修改scene模块,支持在切换场景的时候传参了 2021-12-07 15:04:27 +08:00
MrZ626
7d230cc3b0 修正印尼语按钮文本错误 close #536 2021-12-07 14:33:04 +08:00
MrZ626
0db2fffad1 版本推进 2021-12-07 01:43:17 +08:00
MrZ626
2a3296a0e8 调整pixel皮肤,修改x块的默认色为黄色 2021-12-07 01:26:46 +08:00
MrZ626
941b875afa 再微调语言设置界面
整理代码
2021-12-07 01:05:46 +08:00
MrZ626
99155bb9cf 更新macOS安装包用图
Co-authored-by: C₂₉H₂₅N₃O₅ <cgu52@wisc.edu>
2021-12-07 01:00:22 +08:00
MrZ626
0701dd2ad3 新皮肤:pixel(by C₂₉H₂₅N₃O₅) 2021-12-07 00:59:19 +08:00
MrZ626
5570c19e1f 调整颜色表
调整语言选择菜单
整理代码
2021-12-07 00:59:19 +08:00
NOT_A_ROBOT
a728c91476 Add Indonesian Translation (#535)
- Added Indonesian language file
- Added Indonesian button in language select menu
- Added Indonesian variant of the word "language" on the language select menu
- Added credit to me for translating (applies to all languages)
2021-12-07 00:00:51 +08:00
MrZ626
6a43481067 优化小程序triple体验 2021-12-06 22:42:49 +08:00
100 changed files with 1593 additions and 425 deletions

Binary file not shown.

View File

@@ -19,11 +19,11 @@ local COLOR={
red= {hsv(0.00, 0.89, 0.91)},
fire= {hsv(0.04, 0.93, 0.94)},
orange= {hsv(0.09, 0.99, 0.96)},
yellow= {hsv(0.16, 0.82, 0.90)},
lime= {hsv(0.18, 0.89, 0.88)},
jade= {hsv(0.23, 1.00, 0.82)},
yellow= {hsv(0.15, 0.82, 0.90)},
lime= {hsv(0.20, 0.89, 0.88)},
jade= {hsv(0.25, 1.00, 0.82)},
green= {hsv(0.33, 1.00, 0.81)},
aqua= {hsv(0.48, 1.00, 0.74)},
aqua= {hsv(0.47, 1.00, 0.76)},
cyan= {hsv(0.53, 1.00, 0.88)},
navy= {hsv(0.56, 1.00, 1.00)},
sea= {hsv(0.61, 1.00, 1.00)},
@@ -36,14 +36,14 @@ local COLOR={
lRed= {hsv(0.00, 0.38, 0.93)},
lFire= {hsv(0.04, 0.45, 0.91)},
lOrange= {hsv(0.10, 0.53, 0.92)},
lYellow= {hsv(0.15, 0.61, 0.95)},
lLime= {hsv(0.19, 0.66, 0.92)},
lJade= {hsv(0.24, 0.56, 0.90)},
lYellow= {hsv(0.14, 0.61, 0.95)},
lLime= {hsv(0.20, 0.66, 0.92)},
lJade= {hsv(0.26, 0.56, 0.90)},
lGreen= {hsv(0.34, 0.49, 0.89)},
lAqua= {hsv(0.49, 0.59, 0.85)},
lAqua= {hsv(0.47, 0.59, 0.86)},
lCyan= {hsv(0.51, 0.77, 0.88)},
lNavy= {hsv(0.54, 0.80, 0.95)},
lSea= {hsv(0.56, 0.72, 0.97)},
lSea= {hsv(0.57, 0.72, 0.97)},
lBlue= {hsv(0.64, 0.44, 0.96)},
lViolet= {hsv(0.72, 0.47, 0.95)},
lPurple= {hsv(0.80, 0.62, 0.89)},
@@ -53,13 +53,13 @@ local COLOR={
dRed= {hsv(0.00, 0.80, 0.48)},
dFire= {hsv(0.04, 0.80, 0.34)},
dOrange= {hsv(0.07, 0.80, 0.39)},
dYellow= {hsv(0.11, 0.80, 0.37)},
dLime= {hsv(0.17, 0.80, 0.26)},
dJade= {hsv(0.31, 0.80, 0.27)},
dYellow= {hsv(0.12, 0.80, 0.37)},
dLime= {hsv(0.20, 0.80, 0.26)},
dJade= {hsv(0.29, 0.80, 0.27)},
dGreen= {hsv(0.33, 0.80, 0.26)},
dAqua= {hsv(0.47, 0.80, 0.23)},
dAqua= {hsv(0.46, 0.80, 0.24)},
dCyan= {hsv(0.50, 0.80, 0.30)},
dNavy= {hsv(0.59, 0.80, 0.42)},
dNavy= {hsv(0.58, 0.80, 0.42)},
dSea= {hsv(0.64, 0.80, 0.40)},
dBlue= {hsv(0.67, 0.80, 0.34)},
dViolet= {hsv(0.71, 0.80, 0.35)},

View File

@@ -15,6 +15,8 @@ local SCN={
draw=false, --Swap draw func
},
stack={},--Scene stack
prev=false,
args={},--Arguments from previous scene
scenes=scenes,
@@ -52,14 +54,15 @@ function SCN.swapUpdate(dt)
S.time=S.time-dt
if S.time<S.changeTime and S.time+dt>=S.changeTime then
--Scene swapped this frame
SCN.init(S.tar,SCN.cur)
SCN.prev=SCN.cur
SCN.init(S.tar)
SCN.mainTouchID=nil
end
if S.time<0 then
SCN.swapping=false
end
end
function SCN.init(s,org)
function SCN.init(s)
love.keyboard.setTextInput(false)
local S=scenes[s]
@@ -89,7 +92,7 @@ function SCN.init(s,org)
SCN.update=S.update
SCN.draw=S.draw
if S.sceneInit then
S.sceneInit(org)
S.sceneInit()
end
end
function SCN.push(tar,style)
@@ -165,11 +168,12 @@ local swap={
end
},
}--Scene swapping animations
function SCN.swapTo(tar,style)--Parallel scene swapping, cannot back
function SCN.swapTo(tar,style,...)--Parallel scene swapping, cannot back
if scenes[tar]then
if not SCN.swapping and tar~=SCN.cur then
style=style or'fade'
SCN.swapping=true
SCN.args={...}
local S=SCN.stat
S.tar,S.style=tar,style
S.time=swap[style].duration
@@ -180,15 +184,15 @@ function SCN.swapTo(tar,style)--Parallel scene swapping, cannot back
MES.new('warn',"No Scene: "..tar)
end
end
function SCN.go(tar,style)--Normal scene swapping, can back
function SCN.go(tar,style,...)--Normal scene swapping, can back
if scenes[tar]then
SCN.push()
SCN.swapTo(tar,style)
SCN.swapTo(tar,style,...)
else
MES.new('warn',"No Scene: "..tar)
end
end
function SCN.back()
function SCN.back(...)
if SCN.swapping then return end
--Leave scene
@@ -199,7 +203,7 @@ function SCN.back()
--Poll&Back to previous Scene
local m=#SCN.stack
if m>0 then
SCN.swapTo(SCN.stack[m-1],SCN.stack[m])
SCN.swapTo(SCN.stack[m-1],SCN.stack[m],...)
SCN.stack[m],SCN.stack[m-1]=nil
end
end

View File

@@ -72,20 +72,23 @@ function text:draw()
if self.alpha>0 then
local c=self.color
gc_setColor(c[1],c[2],c[3],self.alpha)
local w=self.obj:getWidth()
local k=min(self.lim/self.obj:getWidth(),1)
if self.align=='M'then
gc_draw(self.obj,self.x-self.obj:getWidth()*.5,self.y)
gc_draw(self.obj,self.x,self.y,nil,k,1,w*.5,0)
elseif self.align=='L'then
gc_draw(self.obj,self.x,self.y)
gc_draw(self.obj,self.x,self.y,nil,k,1)
elseif self.align=='R'then
gc_draw(self.obj,self.x-self.obj:getWidth(),self.y)
gc_draw(self.obj,self.x,self.y,nil,k,1,w,0)
end
end
end
function WIDGET.newText(D)--name,x,y[,fText][,color][,font=30][,fType][,align='M'][,hideF][,hide]
function WIDGET.newText(D)--name,x,y[,lim][,fText][,color][,font=30][,fType][,align='M'][,hideF][,hide]
local _={
name= D.name or"_",
x= D.x,
y= D.y,
lim= D.lim or 1e99,
fText=D.fText,
color=D.color and(COLOR[D.color]or D.color)or COLOR.Z,

View File

@@ -24,7 +24,7 @@ VERSION=require"version"
TIME=love.timer.getTime
YIELD=coroutine.yield
SYSTEM=love.system.getOS()if SYSTEM=='OS X'then SYSTEM='macOS'end
FNSF=SYSTEM:find'\79\83'--What does FNSF stand for? IDK so don't ask me lol
FNNS=true or SYSTEM:find'\79\83'--What does FNSF stand for? IDK so don't ask me lol
MOBILE=SYSTEM=='Android'or SYSTEM=='iOS'
SAVEDIR=fs.getSaveDirectory()
@@ -256,13 +256,15 @@ IMG.init{
pay1='media/image/mess/pay1.png',
pay2='media/image/mess/pay2.png',
miyaCH='media/image/characters/miya.png',
miyaF1='media/image/characters/miya_f1.png',
miyaF2='media/image/characters/miya_f2.png',
miyaF3='media/image/characters/miya_f3.png',
miyaF4='media/image/characters/miya_f4.png',
miyaCH1='media/image/characters/miya1.png',
miyaCH2='media/image/characters/miya2.png',
miyaCH3='media/image/characters/miya3.png',
miyaCH4='media/image/characters/miya4.png',
miyaHeart='media/image/characters/miya_heart.png',
miyaGlow='media/image/characters/miya_glow.png',
monoCH='media/image/characters/mono.png',
xiaoyaCH='media/image/characters/xiaoya.png',
xiaoyaOmino='media/image/characters/xiaoya_Omino.png',
mikuCH='media/image/characters/miku.png',
electric='media/image/characters/electric.png',
hbm='media/image/characters/hbm.png',
@@ -279,7 +281,7 @@ IMG.init{
SKIN.load{
{name="crystal_scf",path='media/image/skin/crystal_scf.png'},
{name="matte_mrz",path='media/image/skin/matte_mrz.png'},
{name="shiny_cho",path='media/image/skin/shiny_cho.png'},
{name="shiny_chno",path='media/image/skin/shiny_chno.png'},
{name="contrast_mrz",path='media/image/skin/contrast_mrz.png'},
{name="polkadots_scf",path='media/image/skin/polkadots_scf.png'},
{name="toy_scf",path='media/image/skin/toy_scf.png'},
@@ -302,6 +304,7 @@ SKIN.load{
{name="classic",path='media/image/skin/classic_unknown.png'},
{name="ball_shaw",path='media/image/skin/ball_shaw.png'},
{name="retro_notypey",path='media/image/skin/retro_notypey.png'},
{name="pixel_chno",path='media/image/skin/pixel_chno.png'},
{name="textbone_mrz",path='media/image/skin/textbone_mrz.png'},
{name="coloredbone_mrz",path='media/image/skin/coloredbone_mrz.png'},
{name="wtf",path='media/image/skin/wtf_mrz.png'},
@@ -346,6 +349,7 @@ LANG.init('zh',
fr=require'parts.language.lang_fr',
es=require'parts.language.lang_es',
pt=require'parts.language.lang_pt',
id=require'parts.language.lang_id',
zh_grass=require'parts.language.lang_zh_grass',
zh_yygq=require'parts.language.lang_yygq',
symbol=require'parts.language.lang_symbol',
@@ -519,6 +523,7 @@ do
if not TABLE.find({8,10,13,17,22,29,37,47,62,80,100},SETTING.frameMul)then SETTING.frameMul=100 end
if SETTING.cv then SETTING.vocPack,SETTING.cv=SETTING.cv end
if type(SETTING.bg)~='string'then SETTING.bg='on'end
if SETTING.skin[18]==10 then SETTING.skin[18]=4 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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -9,7 +9,7 @@ return
PLY.draw.drawTargetLine(P,200-P.stat.row)
end,
task=function(P)
local F=P.field
local F=P.field
for i=1,24 do
F[i]=LINE.new(20)
P.visTime[i]=LINE.new(20)
@@ -31,7 +31,7 @@ return
P:set20G(true)
P.modeData.target=200
SFX.play('reach')
else
else
P:win('finish')
end
end

View File

@@ -11,7 +11,7 @@ return
PLY.draw.drawTargetLine(P,200-P.stat.row)
end,
task=function(P)
local F=P.field
local F=P.field
for i=1,24 do
F[i]=LINE.new(20)
P.visTime[i]=LINE.new(20)

View File

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

View File

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

View File

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

View File

@@ -607,7 +607,7 @@ do--Userdata tables
skinSet='crystal_scf',
skin={
1,7,11,3,14,4,9,
1,7,2,6,10,2,13,5,9,15,10,11,3,12,2,16,8,4,
1,7,2,6,10,2,13,5,9,15,4,11,3,12,2,16,8,4,
10,13,2,8
},
face={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},

View File

@@ -80,11 +80,22 @@ return{
"Google \"Tetris Online Poland\" for the Poland server.\nClick on the globe icon for information about the Tetris Online Study server.",
"http://teatube.ltd/tos",
},
{"P\97\116\114\101\111\110",
"p\97\116\114\101\111\110 support",
{"Support 1",
"support wechat vx alipay zfb",
"org",
"Techmino's P\97\116\114\101\111\110 Page",
FNSF and"https://www.youtube.com/watch?v=DVl0IiUKX_g"or"https://www.p\97\116\114\101\111\110.com/techmino",
"vx/zfb-console-support",
},
{"Support 2",
"support afdian",
"org",
"Afdian",
FNNS and"https://www.bilibili.com/video/BV1GJ411x7h7"or"https://afdian.net/@MrZ_26",
},
{"Support 3",
"support p\97\116\114\101\111\110",
"org",
"P\97\116\114\101\111\110",
FNNS and"https://www.bilibili.com/video/BV1GJ411x7h7"or"https://www.p\97\116\114\101\111\110.com/techmino",
},
--Games
{"TTT",

View File

@@ -73,11 +73,22 @@ return{
"TO-S的添加方法、说明等关于茶服的一切",
"http://teatube.ltd/tos",
},
{"P\97\116\114\101\111\110",
"赞助 p\97\116\114\101\111\110 support zanzhu daqian",
{"赞助1",
"赞助 support weixin vx zhifubao zfb zanzhu daqian qia",
"org",
"Techmino的P\97\116\114\101\111\110",
FNSF and"https://www.youtube.com/watch?v=DVl0IiUKX_g"or"https://www.p\97\116\114\101\111\110.com/techmino",
"vx/zfb-控制台-support",
},
{"赞助2",
"赞助 support aifadian afdian zanzhu daqian qia",
"org",
"Afdian",
FNNS and"https://www.bilibili.com/video/BV1GJ411x7h7"or"https://afdian.net/@MrZ_26",
},
{"赞助3",
"赞助 support zanzhu daqian qia",
"org",
"P\97\116\114\101\111\110",
FNNS and"https://www.bilibili.com/video/BV1GJ411x7h7"or"https://www.p\97\116\114\101\111\110.com/techmino",
},
--游戏(题库)

View File

@@ -206,9 +206,8 @@ return{
"Make sure to get the game only from official sources,",
"as we can't make sure you're safe if you got it elsewhere.",
"The author is not responsible for any modifications.",
FNSF and"/"or"While the game is free, donations are appreciated.",
FNSF and"/"or"If you are unable to use both WeChat Pay and AliPay,",
FNSF and"/"or"you can go to our P\97\116\114\101\111\110 page (Link in Zictionary) to support us!",
FNNS and"/"or"While the game is free, donations are appreciated.",
FNNS and"/"or"Check Zictionary for more",
},
staff={
"Author: MrZ Email: 1046101471@qq.com",
@@ -219,7 +218,7 @@ return{
"Music: MrZ, 柒栎流星, ERM, Trebor, C₂₉H₂₅N₃O₅, [T0722, Aether]",
"Voice & Sound: Miya, Xiaoya, Mono, MrZ, Trebor",
"Performance: 模电, HBM",
"Translations: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅",
"Translations: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅, NOT_A_ROBOT",
"",
"Special Thanks:",
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
@@ -339,7 +338,7 @@ return{
title="Game Settings",
graphic="←Video",
sound="Audio→",
-- style="Style",
style="Style",
ctrl="Control Settings",
key="Key Mappings",
@@ -676,101 +675,104 @@ 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"},
['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
['blind_e']= {"Invisible", "HALF", "For novices"},
['blind_n']= {"Invisible", "ALL", "For intermediates"},
['blind_h']= {"Invisible", "SUDDEN", "For the experienced"},
['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"},
['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"},
['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."},
['custom_clear']= {"Custom", "NORMAL"},
['custom_puzzle']= {"Custom", "PUZZLE"},
['custom_clear']= {"Custom", "NORMAL"},
['custom_puzzle']= {"Custom", "PUZZLE"},
},
getTip={refuseCopy=true,
":pog:",

View File

@@ -172,9 +172,8 @@ return{
"Descarga disponible únicamente vía el grupo de testeo y discord.gg/f9pUvkh",
"Descargas desde otros sitios pueden contener malware/viruses, y en smartphones sólo requiere permisos de internet y vibración.",
"El autor no se responabiliza por daños ocasionados debido a modificaciones del juego.",
FNSF and"/"or"Por favor descarga las últimas versiones desde los sitios oficiales. El juego es gratuito",
FNSF and"/"or"Si no puede usar WeChat Pay y AliPay,",
FNSF and"/"or"puede ir a nuestra página de P\97\116\114\101\111\110 para apoyarnos.",
FNNS and"/"or"Por favor descarga las últimas versiones desde los sitios oficiales. El juego es gratuito",
-- FNNS and"/"or"Check Zictionary for more",
},
staff={
"Autor:MrZ Email: 1046101471@qq.com",
@@ -185,7 +184,7 @@ return{
"Música: MrZ, 柒栎流星, ERM, Trebor, C₂₉H₂₅N₃O₅, [T0722, Aether]",
"Voces/Sonidos: Miya, Xiaoya, Mono, MrZ, Trebor",
"Performance: 模电, HBM",
"Traducción: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅",
"Traducción: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅, NOT_A_ROBOT",
"",
"Agradecimientos:",
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
@@ -670,9 +669,12 @@ return{
-- ['master_m']= {"Master", "M21", "For 20G Masters."},
['master_final']= {"Master", "FINAL", "El verdadero 20G Supremo: el final es inalcanzable."},
['master_ex']= {"GrandMaster", "EXTRA", "Para ser un gran maestro, acepta este desafío"},
-- ['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
-- ['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
-- ['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
['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"},
['blind_e']= {"A Ciegas", "Parcial", "Para novatos."},
['blind_n']= {"A Ciegas", "Total", "Para jugadores intermedios."},
['blind_h']= {"A Ciegas", "Inmediato", "Para jugadores experimentados"},

View File

@@ -172,9 +172,8 @@ return{
"Ce jeu est gratuit et est uniquement disponible via discord.gg/f9pUvkh",
"Ne téléchargez pas ce jeu depuis une autre source au risque d'avoir des virus,",
"et vous n'avez besoin que des permissions de vibration et de communication réseau pour les versions mobiles !",
FNSF and"/"or"Le créateur n'est pas responsable pour n'importe quel type de perte de données suite à une modification du jeu.",
FNSF and"/"or"Si vous ne parvenez pas à utiliser à la fois WeChat Pay et AliPay,",
FNSF and"/"or"vous pouvez vous rendre sur notre page P\97\116\114\101\111\110 pour nous soutenir !",
FNNS and"/"or"Le créateur n'est pas responsable pour n'importe quel type de perte de données suite à une modification du jeu.",
-- FNNS and"/"or"Check Zictionary for more",
},
staff={
"Author: MrZ E-mail: 1046101471@qq.com",
@@ -185,7 +184,7 @@ return{
"Musique : MrZ, 柒栎流星, ERM, Trebor, C₂₉H₂₅N₃O₅, [T0722, Aether]",
"Voix & Sons: Miya, Xiaoya, Mono, MrZ, Trebor",
"Performance: 模电, HBM",
"Traduction: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅",
"Traduction: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅, NOT_A_ROBOT",
"",
"Merci à:",
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
@@ -673,9 +672,12 @@ return{
['master_final']= {"Master", "FINAL", "20G : Un point final impossible à atteindre !"},
-- ['master_ph']= {"Mester", "FANTASMA", "20G: ???"},
['master_ex']= {"GrandMaster", "EXTRA", "Tentez de devenir un Grandmaster."},
-- ['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
-- ['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
-- ['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
['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"},
['blind_e']= {"Aveugle", "MOITIE", "Pour les novices."},
['blind_n']= {"Aveugle", "TOUT", "Pour les joueurs intermédiaires."},
['blind_h']= {"Aveugle", "SOUDAIN", "Pour les bons jooeurs."},

898
parts/language/lang_id.lua Normal file
View File

@@ -0,0 +1,898 @@
local C=COLOR
return{
loadText={
loadSFX="Memuat efek suara",
loadSample="Memuat sampel-sampel instrumen",
loadVoice="Memuat kumpulan suara",
loadFont="Memuat fon",
loadModeIcon="Memuat ikon-ikon mode",
loadMode="Memuat mode-mode",
loadOther="Memuat aset-aset yang lain",
finish="Tekan tombol apapun untuk memulai!",
},
sureQuit="Tekan lagi untuk keluar",
sureReset="Tekan lagi untuk mereset",
sureDelete="Tekan lagi untuk menghapus",
newDay="Hari baru, awal baru!",
playedLong="Anda telah bermain lama. Waktunya istirahat!",
playedTooMuch="Anda telah bermain terlalu lama! Techmino sangat menyenangkan, tetapi jangan lupa istirahat!",
settingWarn="Awas, Anda akan mengubah beberapa pengaturan yang tidak biasanya diubah!",
atkModeName={"Acak","Badge","K.O.","Penyerang"},
royale_remain="$1 Pemain Tersisa",
powerUp={[0]="+000%","+025%","+050%","+075%","+100%"},
cmb={nil,"1 Kombo","2 Kombo","3 Kombo","4 Kombo","5 Kombo","6 Kombo","7 Kombo","8 Kombo","9 Kombo","10 Kombo!","11 Kombo!","12 Kombo!","13 Kombo!","14 Kombo!!","15 Kombo!!","16 Kombo!!","17 Kombo!!!","18 Kombo!!!","19 Kombo!!!","MEGA KOMBO"},
spin=" spin",
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",
replaying="[Diulang]",
tasUsing="[TAS]",
stage="Tahap $1 selesai!",
great="Bagus!",
awesome="Luar biasa!",
almost="Hampir!",
continue="Lanjut!",
maxspeed="KECEPATAN MAXIMUM!",
speedup="Percepatkan!",
missionFailed="Salah",
speedLV="Kecepatan lvl",
piece="Blok",line="Baris",atk="Baris Terkirim",eff="Efisiensi",
rpm="RPM",tsd="TSD",
grade="Nilai",techrash="Techrash",
wave="Gelombang",nextWave="Lanjutan",
combo="Kombo",maxcmb="Max Kombo",
pc="PC",ko="KOs",
win="Menang!",
lose="Kalah",
finish="Selesai",
gamewin="Anda menang!",
gameover="Tamat",
pause="Terjeda",
pauseCount="Jeda-jeda",
finesse_ap="Semua sempurna",
finesse_fc="Kombo penuh",
page="Halaman:",
cc_fixed="CC tidak cocok dengan urutan tetap.",
cc_swap="CC tidak cocok dengan mode simpan tukar.",
ai_prebag="AI tidak cocok dengan urutan terubah yang memiliki non-tetromino.",
ai_mission="AI tidak cocok dengan misi terubah.",
switchSpawnSFX="Nyalakan efek suara munculan blok!",
needRestart="Ulangi untuk menerapkan perubahan.",
loadError_errorMode="'$1' eror memuat: tidak ada mode memuat '$2'",
loadError_read="'$1' eror memuat: gagal membaca",
loadError_noFile="'$1' eror memuat: tidak ada file:",
loadError_other="'$1' eror memuat: $2",
loadError_unknown="'$1' eror memuat: alasan tidak diketahui",
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",
copyDone="Tersalin!",
saveDone="Data disimpan",
exportSuccess="Ekspor berhasil",
importSuccess="Impor berhasil",
dataCorrupted="Data rusak",
pasteWrongPlace="Menempel di tempat yang salah?",
noFile="File tidak ada",
nowPlaying="Sekarang mendengarkan:",
VKTchW="Berat sentuhan",
VKOrgW="Berat asal",
VKCurW="Berat posisi saat ini",
noScore="Tidak ada nilai",
modeLocked="Terkunci",
unlockHint="Raih nilai B keatas dalam mode sebelumnya untuk membuka kunci.",
highScore="Nilai-nilai tertinggi",
newRecord="Rekor baru!",
replayBroken="Tidak bisa memuat ulangan permainan",
dictNote="==Tersalin dari TetroDictionary==",
getNoticeFail="Gagal mengambil pengumuman-pengumuman",
oldVersion="Versi $1 sekarang tersedia",
needUpdate="Butuh versi lebih baru!",
versionNotMatch="Versi tidak sama!",
notFinished="Segera akan datang!",
jsonError="Eror JSON",
noUsername="Silahkan masukki username Anda",
wrongEmail="Alamat email tidak sah",
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",
wsConnecting="Menghubungkan websocket…",
wsFailed="Koneksi websocket gagal",
wsClose="Websocket tertutup:",
netTimeout="Koneksi waktu habis",
onlinePlayerCount="Online",
createRoomSuccessed="Ruang dibuat",
started="Bermain",
joinRoom="telah memasuki ruangan.",
leaveRoom="telah keluar dari ruangan.",
ready="Siap",
connStream="Menghubungi",
waitStream="Menunggu",
spectating="Menonton",
chatRemain="Online",
chatStart="------Awal percakapan------",
chatHistory="------Pesan-pesan baru di bawah ini------",
keySettingInstruction="Tekan untuk menghubung tombol ke aksi tertentu\nescape: batal\nbackspace: hapus",
customBGhelp="Seret file gambar di sini untuk memasangkan background",
customBGloadFailed="Format file gambar tidak didukung untuk background",
errorMsg="Techmino mengalami eror dan harus memuat ulang.\nAnda bisa mengirim log eror ke developer.",
tryAnotherBuild="[Invalid UTF-8] Jika Anda di Windows, coba download Techmino-win32 atau Techmino-win64 (berbeda dari yang Anda menggunakan sekarang).",
modInstruction="Pilih mod Anda!\nMod memungkinkan Anda untuk mengubah permainan,\ntetapi juga bisa menghancur permainan.\nNilai-nilai tidak akan disimpan saat menggunakan mod.",
modInfo={
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.",
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.",
hideBoard="Sembunyikan Tempat Main\nMenyembunyikan bagian atau seluruh tempat main.",
flipBoard="Putar Tempat Main\nMembalik atau memutar tempat main.",
dropDelay="Gravitasi\nMengubah gravitasi dalam frame per blok.",
lockDelay="Tunda Mengunci\nMengubah tunda mengunci dalam frame.",
waitDelay="Tunda Muncul\nMengubah tunda muncul blok dalam frame.",
fallDelay="Tunda Baris\nMengubah tunda saat membuat baris dalam frame.",
life="Nyawa\nMengubah nomor awal nyawa.",
forceB2B="Hanya B2B\nMengakhirkan permainan jika meter B2B jatuh ke 0.",
forceFinesse="Efisiensi Tombol Maximum\nMengakhirkan permainan jika efisiensi tombol tidak maksimum.",
tele="Teleport\nMengubah DAS dan ARR ke 0.",
noRotation="Tidak berputar\nMematikan pemutaran blok.",
noMove="Tidak bergerak\nMematikan pergerakan kiri dan kanan blok.",
customSeq="Pengacak\nMengganti pengacak blok.",
pushSpeed="Kecepatan blok serangan\nMengubah kecepatan muncul blok serangan (blok/frame).",
boneBlock="[ ]\nMain dengan blok [ ].",
},
pauseStat={
"Waktu:",
"Tombol/Putar/Simpan:",
"Blok:",
"Baris/Baris Gali:",
"Serangan/Serangan Gali:",
"Diterima:",
"Jumlah Tindakan Membuat Baris:",
"Spins:",
"B2B/B3B/PC/Hampir PC:",
"Efisiensi Tombol:",
},
radar={"BLOK","SERANGAN","SRGN + BLOK","SRGN TERKIRIM","KECEPATAN","GALI"},
radarData={"D'PM","ADPM","APM","SPM","L'PM","DPM"},
stat={
"Jumlah Pembukaan:",
"Jumlah Permainan:",
"Jumlah Waktu Bermain:",
"Tombol/Putar/Simpan:",
"Blok/Baris/Serangan:",
"Serangan Diterima/Ditolak/Muncul:", -- what is this
"Gali/Serangan Gali:",
"Efisiensi/Efisiensi Gali:",
"B2B/B2B2B:",
"PC/Hampir PC:",
"Efisiensi Tombol Tidak Maksimal/Nilai:",
},
aboutTexts={
"Ini hanya penyusun blok *normal*. Sungguh, hanya itu saja.",
"Terinspirasi oleh C2, IO, JS, WWC, KOS, dll.",
"",
"Dipersembahkan oleh kerangka permainan LÖVE",
"Saran dan laporan bug dihargai!",
"Pastikan untuk mendapat permainan ini hanya dari sumber resmi,",
"karena kita tidak bisa meyakinkan Anda aman jika Anda mendapat permainan ini dari sumber lain.",
"Penciptanya tidak bertanggung jawab untuk modifikasi.",
FNNS and"/"or"Permainan ini gratis, tetapi sumbangan sangat dihargai.",
-- FNNS and"/"or"Check Zictionary for more",
},
staff={
"Pencipta: MrZ Email: 1046101471@qq.com",
"Dipersembahkan oleh kerangka permainan LÖVE",
"",
"Program: MrZ, Particle_G, [scdhh, FinnTenzor]",
"Penggambar: MrZ, Gnyar, C₂₉H₂₅N₃O₅, ScF, [旋律星萤, T0722]",
"Musik: MrZ, 柒栎流星, ERM, Trebor, C₂₉H₂₅N₃O₅, [T0722, Aether]",
"Suara: Miya, Xiaoya, Mono, MrZ, Trebor",
"Pertunjukan: 模电, HBM",
"Translasi: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅, NOT_A_ROBOT",
"",
"Terima Kasih Khusus:",
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
"Farter, Teatube, 蕴空之灵, T9972, [All test staff]",
},
used=[[
Alat-alat yang digunakan:
BeepBox
GoldWave
GFIE
FL Mobile
Library yang digunakan:
Cold_Clear [MinusKelvin]
json.lua [rxi]
profile.lua [itraykov]
simple-love-lights [dylhunn]
]],
support="Dukung pencipta",
WidgetText={
main={
offline="Main Sendiri",
qplay="Terakhir Dimain",
online="Multipemain",
custom="Permainan Tersesuai",
setting="Pengaturan",
stat="Statistik",
dict="Zictionary",
replays="Permainan Terulang",
},
main_simple={
sprint="Balapan",
marathon="Maraton",
},
mode={
mod="Mod (F1)",
start="Mulai",
},
mod={
title="Mod",
reset="Reset (tab)",
unranked="Tidak Berperingkat",
},
pause={
setting="Pengaturan (S)",
replay="Ulang (P)",
save="Simpan Pengulangan (O)",
resume="Lanjut (esc)",
restart="Coba lagi (R)",
quit="Berhenti (Q)",
tas="TAS (T)",
},
net_menu={
league="Tech League",
ffa="FFA",
rooms="Ruang-ruang",
logout="Log out",
},
net_league={
match="Cari Tandingan",
},
net_rooms={
password="Password",
refreshing="Merefresh daftar",
noRoom="Tidak ada ruangan",
refresh="Refresh",
new="Ruangan Baru",
join="Masuk",
},
net_newRoom={
title="Pengaturan Ruangan",
roomName="Nama ruangan (Jika kosong: \"[username]'s room\")",
password="Password (opsional)",
description="Deskripsi Ruangan",
life="Nyawa",
pushSpeed="Kcptn. Dorongan",
garbageSpeed="Kcptn. Serangan",
visible="Visibilitas",
freshLimit="Batas Reset Tunda Kunci",
fieldH="Ketinggian",
bufferLimit="Batas Serangan",
heightLimit="Batas Tinggi",
drop="Tunda Jatuh",
lock="Tunda Kunci",
wait="Tunda Muncul",
fall="Tunda Baris",
hang="Tunda Kalah",
hurry="Menggangu Tunda",
capacity="Kapasitas",
create="Buat",
ospin="O-spin",
fineKill="100% Efisiensi Tombol",
b2bKill="Akhirkan Permainan Jika Tidak B2B",
lockout="Akhirkan Permainan Jika Lock Out",
easyFresh="Reset Tunda Kunci Normal",
deepDrop="Jatuh Dalam",
bone="Blok [ ]",
eventSet="Aturan",
holdMode="Mode Simpan",
nextCount="Pratinjau Blok Lanjut",
holdCount="Blok Simpan",
infHold="Simpan Selamanya",
phyHold="Simpan Di Tempat",
},
net_game={
ready="Siap",
spectate="Nonton",
cancel="Batal Siap",
},
setting_game={
title="Pengaturan Permainan",
graphic="←Video",
sound="Audio→",
layout="Ubah Blok-blok",
ctrl="Ubah Kontrol",
key="Ubah Tindakan Tombol",
touch="Pengaturan Sentuhan",
showVK="Tunjuk Tombol Sentuh",
reTime="Tunda Mulai",
RS="Sistem Putar",
menuPos="Pos. Tombol Menu",
sysCursor="Guna Mouse Bawaan",
autoPause="Jeda Jika Tidak Difokus",
autoSave="Simpan Rekor Otomatis",
autoLogin="Auto-login Saat Membuka",
simpMode="Mode Sederhana",
},
setting_video={
title="Pengaturan Video",
sound="←Audio",
game="Permainan→",
block="Gambarkan Blok",
smooth="Jatuh Halus",
upEdge="Blok 3D",
bagLine="Pemisah Kantong",
ghostType="Tipe Hantu",
ghost="Kegelapan Hantu",
center="Kegelapan Tengah Pemutaran",
grid="Kegelapan Kisi",
lineNum="Kegelapan Nomor Baris",
lockFX="Efek Kunci",
dropFX="Efek Jatuh",
moveFX="Efek Pindah",
clearFX="Efek Baris",
splashFX="Efek Guyuran Baris",
shakeFX="Goyang Tempat Main",
atkFX="Efek Serang",
frame="Kecepatan Bingkai (%)",
FTlock="Lewat Bingkai",
text="Teks Baris",
score="Teks Nilai",
bufferWarn="Peringatan Serangan",
showSpike="Teks Serang",
nextPos="Pratinjau Muncul Blok",
highCam="Scroll Tempat Main",
warn="Peringatan Bahaya",
clickFX="Efek Klik",
power="Info Baterai",
clean="Gambar Cepat",
fullscreen="Layar Penuh",
bg_on="B.G. Normal",
bg_off="Tidak Ada B.G.",
bg_custom="Ubah B.G.",
blockSatur="Kejenuhan Blok Aktif",
fieldSatur="Kejenuhan Blok Terkunci",
},
setting_sound={
title="Pengaturan Audio",
game="←Permainan",
graphic="Video→",
mainVol="Volume Utama",
bgm="Musik",
sfx="Efek Suara",
stereo="Stereo",
spawn="Efek Muncul Blok",
warn="Efek Bahaya",
vib="Getaran",
voc="Suara",
autoMute="Bisukan Bila Tidak Fokus",
fine="Efek Efisiensi Tombol Tidak Maksimum",
sfxPack="Kumpulan Efek Suara",
vocPack="Kumpulan Suara",
apply="Terapkan",
},
setting_control={
title="Pengaturan Kontrol",
preview="Pratinjau",
das="DAS",arr="ARR",
dascut="Gangguan DAS",
dropcut="Gangguan Auto-kunci",
sddas="DAS Jatuh",sdarr="ARR Jatuh",
ihs="Simpan Saat Tunda",
irs="Putar Saat Tunda",
ims="Pindah Saat Tunda",
reset="Reset",
},
setting_key={
a1="Pindah Kiri",
a2="Pindah Kanan",
a3="Putar Kanan",
a4="Putar Kiri",
a5="Putar 180°",
a6="Jatuh Cepat",
a7="Jatuh Pelan",
a8="Simpan",
a9="Fungsi 1",
a10="Fungsi 2",
a11="Kiri Instan",
a12="Kanan Instan",
a13="Jatuh Instan",
a14="Jatuh 1",
a15="Jatuh 4",
a16="Jatuh 10",
a17="Jatuh Kiri",
a18="Jatuh Kanan",
a19="Zangi Kiri",
a20="Zangi Kanan",
restart="Coba Lagi",
},
setting_skin={
skinSet="Tekstur Blok",
title="Pengaturan Ragam",
skinR="Reset Warna",
faceR="Reset Arah",
},
setting_touch={
default="Bawaan",
snap="Kisi",
size="Ukuran",
shape="Bentuk",
},
setting_touchSwitch={
b1= "Pindah Kiri:", b2="Pindah Kanan:",b3="Putar Kanan:", b4="Putar Kiri:",
b5= "Putar 180°:", b6="Jatuh Cepat:", b7="Jatuh Pelan:", b8="Simpan:",
b9= "Fungsi 1:", b10="Fungsi 2:", b11="Kiri Instan:",b12="Kanan Instan:",
b13="Jatuh Instan:",b14="Jatuh 1:", b15="Jatuh 4:", b16="Jatuh 10:",
b17="Jatuh Kiri:", b18="Jatuh Kanan:",b19="Zangi Kiri:", b20="Zangi Kanan:",
norm="Normal",
pro="Canggih",
icon="Ikon",
sfx="Efek Suara",
vib="Getaran",
alpha="Kegelapan",
track="Auto Lacak",
dodge="Auto Hindar",
},
customGame={
title="Permainan Tersesuai",
defSeq="Urutan Bawaan",
noMsn="Tidak Ada Misi",
drop="Tunda Jatuh",
lock="Tunda Kunci",
wait="Tunda Muncul",
fall="Tunda Garis",
hang="Tunda Kalah",
hurry="Gangguan Tunda",
bg="Latar Belakang",
bgm="Musik",
copy="Salin Permainan",
paste="Tempel Permainan",
play_clear="Mulai Normal",
play_puzzle="Mulai Membangun",
reset="Reset (del)",
advance="More (A)",
mod="Mod (F1)",
field="Ubah Blok (F)",
sequence="Ubah Urutan (S)",
mission="Ubah Misi (M)",
eventSet="Aturan",
holdMode="Mode Simpan",
nextCount="Pratinjau Blok Lanjut",
holdCount="Simpan Blok",
infHold="Simpan Selamanya",
phyHold="Simpan Di Tempat",
fieldH="Ketinggian",
visible="Visibilitas",
freshLimit="Batas Reset Tunda Kunci",
opponent="Lawan",
life="Nyawa",
pushSpeed="Kcptn. Dorongan",
garbageSpeed="Kcptn. Serangan",
bufferLimit="Batas Serangan",
heightLimit="Batas Tinggi",
ospin="O-Spin",
fineKill="Maksimum Efisiensi Tombol",
b2bKill="Akhirkan Permainan Jika Tidak B2B",
lockout="Akhirkan Permainan Jika Lock Out",
easyFresh="Reset Tunda Kunci Normal",
deepDrop="Jatuh Dalam",
bone="Blok []",
},
custom_field={
title="Permainan Tersesuai",
subTitle="Blok Awalan",
any="Hapus",
smart="Auto",
push="Tambah Baris (K)",
del="Hapus Garis (L)",
demo="Jangan Menunjukkan ×",
newPg="Hal. Baru (N)",
delPg="Hapus Hal. (M)",
prevPg="Hal. Sebelumnya",
nextPg="Hal. Selanjuynya",
},
custom_sequence={
title="Permainan Tersesuai",
subTitle="Urutan Blok",
sequence="Urutan Blok",
},
custom_mission={
title="Permainan Tersesuai",
subTitle="Misi",
_1="1",_2="2",_3="3",_4="4",
any1="apapun-1",any2="apapun-2",any3="apapun-3",any4="apapun-4",
PC="PC",
Z1="Z1",S1="S1",J1="J1",L1="L1",T1="T1",O1="O1",I1="I1",
Z2="Z2",S2="S2",J2="J2",L2="L2",T2="T2",O2="O2",I2="I2",
Z3="Z3",S3="S3",J3="J3",L3="L3",T3="T3",O3="O3",I3="I3",
O4="O4",I4="I4",
mission="Paksa Misi",
},
about={
staff="Staf",
his="Riwayat",
legals="Info Legal",
},
dict={
title="TetroKamus",
},
stat={
path="Buka Folder Data",
save="Kelola Data",
},
music={
title="Ruang Musik",
arrow="",
now="Sekarang bermain:",
bgm="Volume",
sound="Efek Suara",
},
launchpad={
title="Ruang Efek Suara",
bgm="Volume Musik",
sfx="Volume Efek",
voc="Volume Suara",
music="Musik",
label="label",
},
login={
title="Masuk",
register="Daftar",
email="Alamat Email",
password="Password",
keepPW="Ingat Saya",
login="Masuk",
},
register={
title="Daftar",
login="Masuk",
username="Username",
email="Alamat Email",
password="Password",
password2="Ulangi Password",
register="Daftar",
registering="Menunggu respon…",
},
account={
title="Akun",
},
app_15p={
color="Warna",
invis="Sembunyi",
slide="Geser",
pathVis="Tunjuk Jalur",
revKB="Dibalik",
},
app_schulteG={
rank="Ukuran",
invis="Sembunyi",
disappear="Hilangkan",
tapFX="Efek Sentuh",
},
app_AtoZ={
level="Level",
keyboard="Keyboard",
},
app_2048={
invis="Sembunyi",
tapControl="Kontrol Sentuh",
skip="Lewati Ronde",
},
app_ten={
next="Pratinjau",
invis="Sembunyi",
fast="Cepat",
},
app_dtw={
color="Warna",
mode="Mode",
bgm="Musik",
arcade="Arcade",
},
app_link={
invis="Sembunyi",
},
savedata={
export="Expor ke papan klip",
import="Impor dari papan klip",
unlock="Kemajuan",
data="Statistik",
setting="Pengaturan",
vk="Aturan Tombol Sentuh",
couldSave="Penyimpanan Cloud (PERINGATAN: HANYA PERCOBAAN)",
notLogin="[Masuk ke akun untuk mengakses penyimpanan cloud",
upload="Unggah ke Cloud",
download="Unduh dari Cloud",
},
},
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"},
['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."},
['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.",
"\"TechminOS\"",
"\\jezevec/\\jezevec/\\jezevec/",
"\\osk/\\osk/\\osk/",
"↑↑↓↓←→←→BA",
"$include<studio.h>",
"20G sebenarnya peraturan permainan baru!",
"Rekor dunia 40L: 14.915s dari Reset_",
"Sistem pencapaian segera akan datang!",
"ALL SPIN!",
"Am G F G",
"B2B2B???",
"B2B2B2B tidak ada.",
"Back-to-Back Techrash, 10 Kombo, PC!",
"Pastikan untuk memberikan yang terbaik lagi hari ini!",
"Bridge clear segera akan datang!",
"Bisakah Anda menguasai penyusun modern namun akrab ini?",
"Changelog dalam Bahasa Inggris bisa ditemukan di Discord.",
"Color clear segera akan datang!",
"Menurunkan DAS dan ARR membuat permainannya lebih cepat tetapi lebih sulit untuk mengontrol.",
"Apakah saya baru saja melihat Back-to-Back-to-Back?",
"Apakah B2B2B2B ada?",
"Jangan biarkan bug kecil menghancur harimu!",
"Jangan melihat langsung ke bug!",
"Nikmati sistem rotasi Techmino!",
"Luar biasa, tapi mari kita pergi lebih baik lain kali…",
"Cari tahu apa yang ada di pengaturan!",
"Apakah Anda menemukan bug? Buka issue di halaman GitHub kami!",
"Permainan penyusun blok gratis dengan mode Battle Royale!",
"git commit",
"git push -f",
"Punya saran? Post sarannya di Discord kami!",
"Pernahkah Anda memperhatikan apa \"memutar\" melakukan ke blok?",
"Headphone direkomendasikan untuk pengalaman yang lebih baik.",
"Hello world!",
"Hanya ada 2 jenis trimino, yaitu I3 dan L3.",
"if a==true",
"Tingkatkan frekuensi gambar Anda untuk pengalaman yang lebih baik.",
"Sistem [tindakan] awal dapat menyelamatkan Anda.",
"Apakah B2B2B2B mungkin?",
"Ini sedang memuat! Bukan sekedar cutscene!",
"Anda dapat menyelesaikan 40L tanpa tombol kiri/kanan.",
"Anda dapat menyelesaikan 40L tanpa tombol putar.",
"Bergabunglah server Discord kami!",
"l-=-1",
"Biarkan bass menendang!",
"Kecepatan bingkai rendah mengurangi pengalaman bermain game Anda.",
"LrL RlR LLr RRl RRR LLL FFF RfR RRf rFF",
"Lua No.1",
"Mix clear segera akan datang!",
"Sebagian besar ikon tombol dibuat oleh mesin terbang yang digambar sendiri di Unicode Private Use Area.",
"Apakah musiknya terlalu mengganggu? Anda dapat mematikannya.",
"Tidak ada easter egg di menu ini jika Anda menyalakan gaya sederhana!",
"O-Spin Triple!",
"OHHHHHHHHHHHHHH",
"Main dengan satu tangan!",
"Bermain bagus membutuhkan waktu!",
"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.",
"Split Clear segera akan datang!",
"sudo rm -rf /*",
"Techmino merupakan kombinasi dari Technique dan Tetromino.",
"Techmino memiliki edisi Nspire-CX!",
"Techmino sangat menyenangkan!",
"TetroDictionary sekarang tersedia dalam bahasa Inggris.",
"Sebagian besar musik dalam permainan ini dibuat menggunakan Beepbox.",
"Nama-nama yang muncul di latar belakang halaman Staf adalah daftar pendukung kami.",
"Masa depan penyusun blok milik Anda di Techmino!",
"Ada beberapa mode tersembunyi dalam permainan ini yang tidak dapat dimasuki menggunakan peta.",
"Ada total 18 pentomino yang berbeda.",
"Ada total 7 tetromino yang berbeda.",
"Coba gunakan beberapa slot simpan!",
"Try using two rotation buttons. Using all three of them is better.",
"Peringatan: Seni Programmer",
"Bagaimana dengan 20 PCs?",
"Bagaimana dengan 23 PCs dalam 100 baris?",
"Bagaimana dengan 26 TSDs?",
"while(false)",
"Anda adalah seorang jago!",
"Anda dipersilakan untuk membantu kami membuat musik dan efek suara!",
"Anda dapat menghubungkan keyboard ke ponsel atau tablet Anda (tetapi tidak berfungsi di iOS).",
"Anda bisa mengubah tindakan tombol di pengaturan!",
"Anda bisa menavigasi menu dengan keyboard.",
"Anda bisa membuka folder penyimpanan data dari halaman Statistik.",
"Anda bisa melakukan spin dengan semua blok di permainan ini kecuali blok O1.",
"Anda bisa mengubah arah muncul blok.",
"ZS JL T O I",
{C.C,"Coba juga 15puzzle!"},
{C.C,"Coba juga Ballance!"},
{C.C,"Coba juga Minecraft!"},
{C.C,"Coba juga Minesweeper!"},
{C.C,"Coba juga Orzmic!"},
{C.C,"Coba juga osu!"},
{C.C,"Coba juga Phigros!"},
{C.C,"Coba juga Puyo Puyo!"},
{C.C,"Coba juga Rubik's cube!"},
{C.C,"Coba juga Terraria!"},
{C.C,"Coba juga Touhou Project!"},
{C.C,"Coba juga VVVVVV!"},
{C.C,"Coba juga World of goo!"},
{C.C,"Coba juga Zuma!"},
{C.H,"REGRET!!"},
{C.lP,"Nomor rahasia: 626"},
{C.lR,"Z ",C.lG,"S ",C.lS,"J ",C.lO,"L ",C.lP,"T ",C.lY,"O ",C.lC,"I"},
{C.lY,"COOL!!"},
{C.N,"Lua",C.Z," No.1"},
{C.P,"T-spin!"},
{C.R,"\"Penyalahgunaan DMCA\""},
{C.R,"\"Hukum kekayaan intelektual\""},
{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"},
{C.Y,"O-Spin Triple!"},
{C.Z,"Apa? ",C.lC,"X-spin?"},
}
}

View File

@@ -194,9 +194,8 @@ return{
"certifique-se de pegar o jogo de fontes oficiais;",
"binários obtidos em outros lugares pode conter malware.",
"O autor não é responsável por qualquer binários modificados",
FNSF and"/"or"O jogo é gratis, mas doações são apreciadas.",
FNSF and"/"or"Se você não conseguir usar o WeChat Pay e o AliPay,",
FNSF and"/"or"pode acessar a página do P\97\116\114\101\111\110 para nos ajudar!",
FNNS and"/"or"O jogo é gratis, mas doações são apreciadas.",
-- FNNS and"/"or"Check Zictionary for more",
},
staff={
"Author: MrZ E-mail: 1046101471@qq.com",
@@ -207,7 +206,7 @@ return{
"Music: MrZ, 柒栎流星, ERM, Trebor, C₂₉H₂₅N₃O₅, [T0722, Aether]",
"Voice & Sound: Miya, Xiaoya, Mono, MrZ, Trebor",
"Performance: 模电, HBM",
"Traduzir: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅",
"Traduzir: User670, MattMayuga, Mizu, Mr.Faq, ScF, C₂₉H₂₅N₃O₅, NOT_A_ROBOT",
"",
"Special Thanks:",
"Flyz, Big_True, NOT_A_ROBOT, 思竣, yuhao7370",
@@ -707,6 +706,9 @@ return{
-- ['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"},
['blind_e']= {"Cego", "METADE", "Para novatos."},
['blind_n']= {"Cego", "TUDO", "Para intermediários."},
['blind_h']= {"Cego", "DE REPENTE", "Para experientes."},

View File

@@ -130,8 +130,7 @@ return{
"MrZ XXX A→B",
"",
"□$X, ↑$↑ XD!",
"C0, 支 XXX,",
"|^O : )",
"[z]~~~",
},
WidgetText={
main={

View File

@@ -232,6 +232,9 @@ return{fallback='zh',
['strategy_e']= {"策略堆叠", "简单", "有区别吗"},
['strategy_h']= {"策略堆叠", "困难", "没区别吧"},
['strategy_u']= {"策略堆叠", "极限", "没区别"},
['strategy_e_plus']={"策略堆叠", "简单+", "有区别吗"},
['strategy_h_plus']={"策略堆叠", "困难+", "没区别吧"},
['strategy_u_plus']={"策略堆叠", "极限+", "没区别"},
['blind_e']= {"隐形", "半隐", "谁都能玩"},
['blind_n']= {"隐形", "全隐", "稍加练习即可"},
['blind_h']= {"隐形", "瞬隐", "和上一个一样"},

View File

@@ -206,9 +206,8 @@ return{
"仅通过官网 home.techmino.org 免费下载/更新",
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
"若由于被修改的本游戏产生的各种损失作者不负责(怎么负责啊我又没法管)",
FNSF and"/"or"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
FNSF and"/"or"记得备注id备注id备注id不然可能会没法记录到赞助列表",
FNSF and"/"or"你也可以去我们的P\97\116\114\101\111\110页面(链接见小Z词典)来支持我们!",
FNNS and"/"or"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
FNNS and"/"or"更多信息见小z词典",
},
staff={
"作者:MrZ 邮箱:1046101471@qq.com",
@@ -219,7 +218,7 @@ return{
"音乐: MrZ柒栎流星ERMTreborC₂₉H₂₅N₃O₅[T0722Aether]",
"音效/语音: MiyaXiaoyaMonoMrZTrebor",
"演出: 模电HBM",
"翻译: User670MattMayugaMizuMr.FaqScFC₂₉H₂₅N₃O₅",
"翻译: User670MattMayugaMizuMr.FaqScFC₂₉H₂₅N₃O₅NOT_A_ROBOT",
"",
"特别感谢:",
"FlyzBig_TrueNOT_A_ROBOT思竣yuhao7370",
@@ -716,6 +715,9 @@ return{
['strategy_e']= {"策略堆叠", "简单", "20G堆叠中速决策练习"},
['strategy_h']= {"策略堆叠", "困难", "20G堆叠快速决策练习"},
['strategy_u']= {"策略堆叠", "极限", "20G堆叠极速决策练习"},
['strategy_e_plus']={"策略堆叠", "简单+", "20G堆叠中速决策练习"},
['strategy_h_plus']={"策略堆叠", "困难+", "20G堆叠快速决策练习"},
['strategy_u_plus']={"策略堆叠", "极限+", "20G堆叠极速决策练习"},
['blind_e']= {"隐形", "半隐", "不强大脑"},
['blind_n']= {"隐形", "全隐", "挺强大脑"},
['blind_h']= {"隐形", "瞬隐", "很强大脑"},

View File

@@ -122,6 +122,9 @@ return{
['strategy_e']= {"策略堆叠", "简单", "20G堆叠中速决策练习"},
['strategy_h']= {"策略堆叠", "困难", "20G堆叠快速决策练习"},
['strategy_u']= {"策略堆叠", "极限", "20G堆叠极速决策练习"},
['strategy_e_plus']={"策略堆叠", "简单+", "20G堆叠中速决策练习"},
['strategy_h_plus']={"策略堆叠", "困难+", "20G堆叠快速决策练习"},
['strategy_u_plus']={"策略堆叠", "极限+", "20G堆叠极速决策练习"},
['blind_e']= {"隐形", "半隐", "不强大脑"},
['blind_n']= {"隐形", "全隐", "挺强大脑"},
['blind_h']= {"隐形", "瞬隐", "很强大脑"},

View File

@@ -204,9 +204,8 @@ return{
"确保只从官方渠道获得游戏,",
"因为如果你在别处找到它,我们无法确保你的安全",
"作者不对任何修改负责",
FNSF and"/"or"虽然游戏是免费的,但我们感谢捐赠.",
FNSF and"/"or"如果您无法同时使用我们的聊天支付和阿里支付,",
FNSF and"/"or"你可以去我们的P\97\116\114\111\110页面(连接到四联词典)支持我们!",
FNNS and"/"or"虽然游戏是免费的,但我们感谢捐款。",
FNNS and"/"or"查看Zictionary以了解更多信息",
},
staff={
"作者:Z先生 邮箱:1046101471@qq.com",
@@ -217,7 +216,7 @@ return{
"音乐: Z先生柒栎流星ERM特雷伯尔蛋白激酶G抑制剂[T0722以太]",
"音效/语音: 米娅小亚东西Z先生特雷伯尔",
"演出: 模电HBM",
"翻译: 用户670马特·马尤加法克先生氟化钪蛋白激酶G抑制剂",
"翻译: 用户670马特·马尤加法克先生氟化钪蛋白激酶G抑制剂,不是机器人",
"",
"特别感谢:",
"飞天大真不是机器人思竣yuhao7370",
@@ -673,100 +672,103 @@ return{
},
},
modes={
['sprint_10l']= {"冲刺", "10升", "清除10行"},
['sprint_20l']= {"冲刺", "20升", "清除20行"},
['sprint_40l']= {"冲刺", "40升", "清除40行"},
['sprint_100l']= {"冲刺", "100升", "清除100行"},
['sprint_400l']= {"冲刺", "400升", "清除400行"},
['sprint_1000l']= {"冲刺", "1000升", "清除1000行"},
['sprintPenta']= {"冲刺", "五联骨牌", "40升配18个五分钟"},
['sprintMPH']= {"冲刺", "每小时英里数", "无记忆\n无先前\n无记忆"},
['dig_10l']= {"挖掘", "10升", "挖10条垃圾线"},
['dig_40l']= {"挖掘", "40升", "挖40条垃圾线"},
['dig_100l']= {"挖掘", "100升", "挖100条垃圾线"},
['dig_400l']= {"挖掘", "400升", "挖400条垃圾线"},
['drought_n']= {"干旱", "100升", "没有工装"},
['drought_l']= {"干旱+", "100升", "搞什么呀"},
['marathon_n']= {"马拉松赛跑", "正常", "200线加速马拉松"},
['marathon_h']= {"马拉松赛跑", "硬的", "200线高速马拉松"},
['solo_e']= {"战争", "容易", "打败AI"},
['solo_n']= {"战争", "正常", "打败AI"},
['solo_h']= {"战争", "硬的", "打败AI"},
['solo_l']= {"战争", "疯子", "打败AI"},
['solo_u']= {"战争", "终极", "打败AI"},
['techmino49_e']= {"技术49", "容易", "49人战斗\n最后一个站着的人获胜"},
['techmino49_h']= {"技术49", "硬的", "49人战斗\n最后一个站着的人获胜"},
['techmino49_u']= {"技术49", "终极", "49人战斗\n最后一个站着的人获胜"},
['techmino99_e']= {"科技99", "容易", "99人战斗\n最后一个站着的人获胜"},
['techmino99_h']= {"科技99", "硬的", "99人战斗\n最后一个站着的人获胜"},
['techmino99_u']= {"科技99", "终极", "99人战斗\n最后一个站着的人获胜"},
['round_e']= {"回合制", "容易", "轮流玩AI"},
['round_n']= {"回合制", "正常", "轮流玩AI"},
['round_h']= {"回合制", "硬的", "轮流玩AI"},
['round_l']= {"回合制", "疯子", "轮流玩AI"},
['round_u']= {"回合制", "终极", "轮流玩AI"},
['master_n']= {"主人", "正常", "适合20G初学者"},
['master_h']= {"主人", "硬的", "20克的职业选手"},
['master_m']= {"主人", "M21", "20克大师赛"},
['master_final']= {"主人", "最终", "20G及以上"},
['master_ph']= {"主人", "幻觉", ""},
['master_ex']= {"大师", "额外的", "比瞬间还短的永恒"},
['strategy_e']= {"策略堆叠", "简单", "20G堆叠中速决策练习"},
['strategy_h']= {"策略堆叠", "困难", "20G堆叠快速决策练习"},
['strategy_u']= {"策略堆叠", "极限", "20G堆叠极速决策练习"},
['blind_e']= {"看不见的", "一半", "对于新手来说"},
['blind_n']= {"看不见的", "全部", "对于中间产品"},
['blind_h']= {"看不见的", "突然", "对于有经验的人"},
['blind_l']= {"看不见的", "突然+", "对于专业人士"},
['blind_u']= {"看不见的", "", "你准备好了吗?"},
['blind_wtf']= {"看不见的", "世界跆拳道联盟", "你还没准备好"},
['classic_e']= {"经典", "容易", "80年代的低速娱乐"},
['classic_h']= {"经典", "困难", "80年代的中速娱乐"},
['classic_u']= {"经典", "终极", "80年代的高速娱乐"},
['survivor_e']= {"幸存者", "容易", "你能活多久?"},
['survivor_n']= {"幸存者", "正常", "你能活多久?"},
['survivor_h']= {"幸存者", "硬的", "你能活多久?"},
['survivor_l']= {"幸存者", "疯子", "你能活多久?"},
['survivor_u']= {"幸存者", "终极", "你能活多久?"},
['attacker_h']= {"攻击", "硬的", "练习你的进攻技巧!"},
['attacker_u']= {"攻击", "终极", "练习你的进攻技巧!"},
['defender_n']= {"防守", "正常", "练习你的防守技巧!"},
['defender_l']= {"防守", "疯子", "练习你的防守技巧!"},
['dig_h']= {"钻机", "硬的", "挖掘练习!"},
['dig_u']= {"钻机", "终极", "挖掘练习!"},
['clearRush']= {"清晰的冲", "普通", "所有旋转教程\n[在建]"},
['c4wtrain_n']= {"C4W训练", "正常", "无限组合"},
['c4wtrain_l']= {"C4W训练", "疯子", "无限组合"},
['pctrain_n']= {"电脑培训", "正常", "完美清晰的实践"},
['pctrain_l']= {"电脑培训", "疯子", "更难的完美清晰的练习"},
['pc_n']= {"电脑挑战", "正常", "让电脑在100线以内"},
['pc_h']= {"电脑挑战", "硬的", "让电脑在100线以内"},
['pc_l']= {"电脑挑战", "疯子", "让电脑在100线以内"},
['pc_inf']= {"无尽个人电脑挑战", "", "尽可能多地获取个人电脑"},
['tech_n']= {"技术人员", "正常", "试着保持背靠背的链条"},
['tech_n_plus']= {"技术人员", "正常+", "仅限旋转和个人电脑"},
['tech_h']= {"技术人员", "硬的", "试着保持背靠背的链条!"},
['tech_h_plus']= {"技术人员", "硬的+", "仅限旋转和个人电脑"},
['tech_l']= {"技术人员", "疯子", "试着保持背靠背的链条!"},
['tech_l_plus']= {"技术人员", "疯子+", "仅限旋转和个人电脑"},
['tech_finesse']= {"技术人员", "手腕", "没有技巧错误!"},
['tech_finesse_f']={"技术人员", "技巧+", "没有正常的清除和技巧错误"},
['tsd_e']= {"热关断挑战赛", "容易", "只有T-Spin双打"},
['tsd_h']= {"热关断挑战赛", "硬的", "只有T-Spin双打"},
['tsd_u']= {"热关断挑战赛", "终极", "只有T-Spin双打"},
['backfire_n']= {"适得其反", "正常", "挡住回火的垃圾管道"},
['backfire_h']= {"适得其反", "硬的", "挡住回火的垃圾管道"},
['backfire_l']= {"适得其反", "疯子", "挡住回火的垃圾管道"},
['backfire_u']= {"适得其反", "终极", "挡住回火的垃圾管道"},
['sprintAtk']= {"冲刺", "100次攻击", "发送100行"},
['sprintEff']= {"竞速", "效率", "在40行内发动更多攻击"},
['zen']= {"禅宗", "200", "没有时间限制的200线跑步"},
['ultra']= {"Ultra", "额外", "2分钟的得分进攻"},
['infinite']= {"无限", "", "这只是一个沙箱"},
['infinite_dig']= {"无限:挖掘", "", "挖,挖,挖"},
['marathon_inf']= {"马拉松", "无尽", "无尽马拉松"},
['sprint_10l']= {"冲刺", "10升", "清除10行"},
['sprint_20l']= {"冲刺", "20升", "清除20行"},
['sprint_40l']= {"冲刺", "40升", "清除40行"},
['sprint_100l']= {"冲刺", "100升", "清除100行"},
['sprint_400l']= {"冲刺", "400升", "清除400行"},
['sprint_1000l']= {"冲刺", "1000升", "清除1000行"},
['sprintPenta']= {"冲刺", "五联骨牌", "40升配18个五分钟"},
['sprintMPH']= {"冲刺", "每小时英里数", "无记忆\n无先前\n无记忆"},
['dig_10l']= {"挖掘", "10升", "挖10条垃圾线"},
['dig_40l']= {"挖掘", "40升", "挖40条垃圾线"},
['dig_100l']= {"挖掘", "100升", "挖100条垃圾线"},
['dig_400l']= {"挖掘", "400升", "挖400条垃圾线"},
['drought_n']= {"干旱", "100升", "没有工装"},
['drought_l']= {"干旱+", "100升", "搞什么呀"},
['marathon_n']= {"马拉松赛跑", "正常", "200线加速马拉松"},
['marathon_h']= {"马拉松赛跑", "硬的", "200线高速马拉松"},
['solo_e']= {"战争", "容易", "打败AI"},
['solo_n']= {"战争", "正常", "打败AI"},
['solo_h']= {"战争", "硬的", "打败AI"},
['solo_l']= {"战争", "疯子", "打败AI"},
['solo_u']= {"战争", "终极", "打败AI"},
['techmino49_e']= {"技术49", "容易", "49人战斗\n最后一个站着的人获胜"},
['techmino49_h']= {"技术49", "硬的", "49人战斗\n最后一个站着的人获胜"},
['techmino49_u']= {"技术49", "终极", "49人战斗\n最后一个站着的人获胜"},
['techmino99_e']= {"科技99", "容易", "99人战斗\n最后一个站着的人获胜"},
['techmino99_h']= {"科技99", "硬的", "99人战斗\n最后一个站着的人获胜"},
['techmino99_u']= {"科技99", "终极", "99人战斗\n最后一个站着的人获胜"},
['round_e']= {"回合制", "容易", "轮流玩AI"},
['round_n']= {"回合制", "正常", "轮流玩AI"},
['round_h']= {"回合制", "硬的", "轮流玩AI"},
['round_l']= {"回合制", "疯子", "轮流玩AI"},
['round_u']= {"回合制", "终极", "轮流玩AI"},
['master_n']= {"主人", "正常", "适合20G初学者"},
['master_h']= {"主人", "硬的", "20克的职业选手"},
['master_m']= {"主人", "M21", "20克大师赛"},
['master_final']= {"主人", "最终", "20G及以上"},
['master_ph']= {"主人", "幻觉", ""},
['master_ex']= {"大师", "额外的", "比瞬间还短的永恒"},
['strategy_e']= {"策略堆叠", "简单", "20G堆叠中速决策练习"},
['strategy_h']= {"策略堆叠", "困难", "20G堆叠快速决策练习"},
['strategy_u']= {"策略堆叠", "极限", "20G堆叠极速决策练习"},
['strategy_e_plus']={"策略堆叠", "简单", "20G堆叠中速决策练习"},
['strategy_h_plus']={"策略堆叠", "困难", "20G堆叠快速决策练习"},
['strategy_u_plus']={"策略堆叠", "极限", "20G堆叠极速决策练习"},
['blind_e']= {"看不见的", "一半", "对于新手来说"},
['blind_n']= {"看不见的", "全部", "对于中间产品"},
['blind_h']= {"看不见的", "突然", "对于有经验的人"},
['blind_l']= {"看不见的", "突然+", "对于专业人士"},
['blind_u']= {"看不见的", "", "你准备好了吗?"},
['blind_wtf']= {"看不见的", "世界跆拳道联盟", "你还没准备好"},
['classic_e']= {"经典", "容易", "80年代的低速娱乐"},
['classic_h']= {"经典", "困难", "80年代的中速娱乐"},
['classic_u']= {"经典", "终极", "80年代的高速娱乐"},
['survivor_e']= {"幸存者", "容易", "你能活多久?"},
['survivor_n']= {"幸存者", "正常", "你能活多久?"},
['survivor_h']= {"幸存", "硬的", "你能活多久?"},
['survivor_l']= {"幸存", "疯子", "你能活多久?"},
['survivor_u']= {"幸存", "终极", "你能活多久?"},
['attacker_h']= {"攻击", "硬的", "练习你的进攻技巧!"},
['attacker_u']= {"攻击者", "终极", "练习你的进攻技巧"},
['defender_n']= {"防守者", "正常", "练习你的防守技巧"},
['defender_l']= {"防守者", "疯子", "练习你的防守技巧!"},
['dig_h']= {"钻机", "硬的", "挖掘练习!"},
['dig_u']= {"钻机", "终极", "挖掘练习!"},
['clearRush']= {"清晰的冲", "普通", "所有旋转教程\n[在建]"},
['c4wtrain_n']= {"C4W训练", "正常", "无限组合"},
['c4wtrain_l']= {"C4W训练", "疯子", "无限组合"},
['pctrain_n']= {"电脑培训", "正常", "完美清晰的实践"},
['pctrain_l']= {"电脑培训", "疯子", "更难的完美清晰的练习"},
['pc_n']= {"电脑挑战", "正常", "让电脑在100线以内"},
['pc_h']= {"电脑挑战", "硬的", "让电脑在100线以内"},
['pc_l']= {"电脑挑战", "疯子", "让电脑在100线以内"},
['pc_inf']= {"无尽个人电脑挑战", "", "尽可能多地获取个人电脑"},
['tech_n']= {"技术人员", "正常", "试着保持背靠背的链条!"},
['tech_n_plus']= {"技术人员", "正常+", "仅限旋转和个人电脑"},
['tech_h']= {"技术人员", "硬的", "试着保持背靠背的链条!"},
['tech_h_plus']= {"技术人员", "硬的+", "仅限旋转和个人电脑"},
['tech_l']= {"技术人员", "疯子", "试着保持背靠背的链条"},
['tech_l_plus']= {"技术人员", "疯子+", "仅限旋转和个人电脑"},
['tech_finesse']= {"技术人员", "手腕", "没有技巧错误"},
['tech_finesse_f']= {"技术人员", "技巧+", "没有正常的清除和技巧错误"},
['tsd_e']= {"热关断挑战赛", "容易", "只有T-Spin双打"},
['tsd_h']= {"热关断挑战赛", "硬的", "只有T-Spin双打"},
['tsd_u']= {"热关断挑战赛", "终极", "只有T-Spin双打"},
['backfire_n']= {"适得其反", "正常", "挡住回火的垃圾管道"},
['backfire_h']= {"适得其反", "硬的", "挡住回火的垃圾管道"},
['backfire_l']= {"适得其反", "疯子", "挡住回火的垃圾管道"},
['backfire_u']= {"适得其反", "终极", "挡住回火的垃圾管道"},
['sprintAtk']= {"冲刺", "100次攻击", "发送100行"},
['sprintEff']= {"竞速", "效率", "在40行内发动更多攻击"},
['zen']= {"禅宗", "200", "没有时间限制的200线跑步"},
['ultra']= {"Ultra", "额外", "2分钟的得分进攻"},
['infinite']= {"无限", "", "这只是一个沙箱"},
['infinite_dig']= {"无限:挖掘", "", "挖,挖,挖"},
['marathon_inf']= {"马拉松", "无尽", "无尽马拉松"},
['custom_clear']= {"习俗", "正常"},
['custom_puzzle']= {"习俗", "令人费解的"},
['custom_clear']= {"习俗", "正常"},
['custom_puzzle']= {"习俗", "令人费解的"},
},
}

View File

@@ -206,8 +206,8 @@ return{
"僅透過內測QQ群/discord伺服器進行免費下載/更新",
"從其他渠道獲得遊戲皆有被修改/加入廣告/植入病毒的風險,程序只申請了振動&網路權限!",
"若由於被修改的本遊戲產生的各種損失作者概不負責(我怎麼負責啊跟我有什麼關係)",
FNSF and"/"or"請從正規途徑獲得最新版,遊戲現為免費,不過有賞當然感謝啦~ 記得備註用戶名,方便記錄!",
FNSF and"/"or"如果你不使用微信或支付寶你可以前往我們的P\97\116\114\101\111\110頁面來贊助我們!"
FNNS and"/"or"請從正規途徑獲得最新版,遊戲現為免費,不過有賞當然感謝啦~",
FNNS and"/"or"更多資訊見小z詞典"
},
staff={
"作者:MrZ 電郵:1046101471@qq.com",
@@ -218,7 +218,7 @@ return{
"音樂: MrZ柒栎流星ERMTreborC₂₉H₂₅N₃O₅[T0722Aether]",
"音效/語音: MiyaXiaoyaMonoMrZTrebor",
"演出: 模电HBM",
"翻譯: User670MattMayugaMizuMr.FaqScFC₂₉H₂₅N₃O₅",
"翻譯: User670MattMayugaMizuMr.FaqScFC₂₉H₂₅N₃O₅, NOT_A_ROBOT",
"",
"特別感謝:",
"FlyzBig_TrueNOT_A_ROBOT思竣yuhao7370",
@@ -715,6 +715,9 @@ return{
['strategy_e']= {"策略堆疊", "簡單", "20G堆疊中速決策練習"},
['strategy_h']= {"策略堆疊", "困難", "20G堆疊快速決策練習"},
['strategy_u']= {"策略堆疊", "極限", "20G堆疊極速決策練習"},
['strategy_e_plus']={"策略堆疊", "簡單+", "20G堆疊中速決策練習"},
['strategy_h_plus']={"策略堆疊", "困難+", "20G堆疊快速決策練習"},
['strategy_u_plus']={"策略堆疊", "極限+", "20G堆疊極速決策練習"},
['blind_e']= {"隱形", "半隱", "不強大腦"},
['blind_n']= {"隱形", "全隱", "挺強大腦"},
['blind_h']= {"隱形", "瞬隱", "很強大腦"},

View File

@@ -4,7 +4,7 @@ return{
mindas=7,minarr=1,minsdarr=1,
sequence="bagES",
hook_drop=require'parts.eventsets.bigWallGen'.hook_drop,
eventSet='big_h',
eventSet='big_h',
bg='cubes',bgm='push',
},
score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}end,

View File

@@ -4,7 +4,7 @@ return{
mindas=7,minarr=1,minsdarr=1,
sequence="bagES",
hook_drop=require'parts.eventsets.bigWallGen'.hook_drop,
eventSet='big_n',
eventSet='big_n',
bg='bg2',bgm='push',
},
score=function(P)return{math.min(P.modeData.maxCombo,100),P.stat.time}end,

View File

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

View File

@@ -0,0 +1,21 @@
return{
env={
sequence="bagES",
eventSet='strategy_h_plus',
bg='bg2',bgm='secret8th',
},
slowMark=true,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P)
local L=P.stat.row
return
L>=200 and 5 or
L>=160 and 4 or
L>=120 and 3 or
L>=70 and 2 or
L>=40 and 1 or
L>=16 and 0
end,
}

View File

@@ -0,0 +1,21 @@
return{
env={
sequence="bagES",
eventSet='strategy_u_plus',
bg='bg2',bgm='secret7th',
},
slowMark=true,
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
getRank=function(P)
local L=P.stat.row
return
L>=200 and 5 or
L>=150 and 4 or
L>=80 and 3 or
L>=40 and 2 or
L>=20 and 1 or
L>=10 and 0
end,
}

View File

@@ -28,38 +28,22 @@ function scene.draw()
setFont(20)
gc.setColor(COLOR.Z)
for i=1,#text.aboutTexts do
gc.printf(text.aboutTexts[i],150,35*i+50,1000,'center')
gc.print(text.aboutTexts[i],62,35*i)
end
--Lib used
setFont(15)
gc.print(text.used,50,325)
gc.print(text.used,495,462)--❤Flandre❤
--Logo
local t=TIME()
gc.draw(TEXTURE.title,280,610,.1,.4+.03*sin(t*2.6),nil,580,118)
gc.setLineWidth(3)
if SYSTEM~='iOS'then
--QR Code frame
gc.rectangle('line',18,18,263,263)
gc.rectangle('line',1012,18,250,250)
--Support text
gc.setColor(1,1,1,sin(t*20)*.3+.6)
setFont(30)
mStr(text.support,150+sin(t*4)*20,283)
mStr(text.support,1138-sin(t*4)*20,270)
end
gc.draw(TEXTURE.title,280,610,.1,.4+.03*sin(TIME()*2.6),nil,580,118)
end
scene.widgetList={
WIDGET.newImage{name='pay1', x=20, y=20,hide=SYSTEM=='iOS'},
WIDGET.newImage{name='pay2', x=1014,y=20,hide=SYSTEM=='iOS'},
WIDGET.newButton{name='staff', x=1140,y=380,w=220,h=80,font=35,code=goScene'staff'},
WIDGET.newButton{name='his', x=1140,y=480,w=220,h=80,font=35,code=goScene'history'},
WIDGET.newButton{name='legals', x=1140,y=580,w=220,h=80,font=35,code=goScene'legals'},
WIDGET.newButton{name='back', x=640, y=600,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='staff', x=1140,y=340,w=200,h=80,font=35,code=goScene'staff'},
WIDGET.newButton{name='his', x=1140,y=440,w=200,h=80,font=35,code=goScene'history'},
WIDGET.newButton{name='legals', x=1140,y=540,w=200,h=80,font=35,code=goScene'legals'},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -8,7 +8,7 @@ end
scene.widgetList={
WIDGET.newText{name='title',x=80,y=50,font=70,align='L'},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -315,7 +315,7 @@ scene.widgetList={
WIDGET.newSwitch{name='slide', x=240, y=420,lim=200,font=40,disp=function()return slide end, code=pressKey'e',hideF=ifGaming},
WIDGET.newSwitch{name='pathVis',x=240, y=510,lim=200,font=40,disp=function()return pathVis end,code=pressKey'r',hideF=function()return state==1 or not slide end},
WIDGET.newSwitch{name='revKB', x=240, y=600,lim=200,font=40,disp=function()return revKB end, code=pressKey't',hideF=ifGaming},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -493,7 +493,7 @@ scene.widgetList={
WIDGET.newKey{name='record2', x=1100,y=450,w=220,h=50,fText="", color='H',code=pressKey'2', hideF=function()return state==2 end},
WIDGET.newKey{name='replay1', x=1245,y=390,w=50,fText="!", color='G',code=pressKey'c1', hideF=function()return state==2 or #repeater.seq[1]==0 end},
WIDGET.newKey{name='replay2', x=1245,y=450,w=50,fText="!", color='G',code=pressKey'c2', hideF=function()return state==2 or #repeater.seq[2]==0 end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -119,7 +119,7 @@ scene.widgetList={
WIDGET.newSelector{name='level', x=640,y=640,w=200,list={'A_Z','Z_A','Tech1','Tech2','KeyTest1','KeyTest2','Hello','Roll1','Roll2','Roll3','ZZZ','ZXZX','ZMZM','Stair','Stair2','Stair3','BPW'},disp=function()return levelName end,code=function(i)levelName=i;targetString=levels[i]end,hideF=function()return state>0 end},
WIDGET.newButton{name='reset', x=160,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'space'},
WIDGET.newButton{name='keyboard',x=160,y=210,w=180,h=100,code=function()love.keyboard.setTextInput(true,0,select(2,SCR.xOy:transformPoint(0,500)),1,1)end,hide=not MOBILE},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -232,7 +232,7 @@ end
scene.widgetList={
WIDGET.newButton{name='reset',x=1140,y=540,w=170,h=80,font=50,fText=CHAR.icon.retry_spin,color='lG',code=restart},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -165,7 +165,7 @@ scene.widgetList={
WIDGET.newKey{name='/',x=445,y=600,w=90,sound=false,fText="/",color='lB',font=50,code=pressKey'/'},
WIDGET.newKey{name='<',x=545,y=300,w=90,sound=false,fText=CHAR.key.backspace,color='lR',font=50,code=pressKey'backspace'},
WIDGET.newKey{name='=',x=545,y=400,w=90,sound=false,fText="=",color='lY',font=50,code=pressKey'return'},
WIDGET.newKey{name='back',x=1135,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newKey{name='back',x=1135,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -127,7 +127,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -526,6 +526,25 @@ local commands={}do
"Usage: test",
},
}
commands.support={
code=function(arg)
if FNNS then
if arg:find"pl"and arg:find"fk"then
SCN.go('support','none')
else
love.system.openURL("https://www.bilibili.com/video/BV1GJ411x7h7?secretcode=fkpl")
end
else
SCN.go('support','none')
end
end,
description="Enter support scene",
details={
"Go to an support scene",
"",
"Usage: support",
},
}
do--app
local APPs={
{

View File

@@ -318,7 +318,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newKey{name='back',x=1140,y=80,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newKey{name='back',x=1140,y=80,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -236,7 +236,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name='back',x=1140,y=60,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back',x=1140,y=60,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -383,7 +383,7 @@ scene.widgetList={
WIDGET.newButton{name='reset',x=155,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'r'},
modeSelector,bgmSelector,colorSelector,
arcadeSwitch,
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -48,6 +48,6 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -165,7 +165,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newKey{name='back',x=1140,y=60,w=170,h=80,color='D',font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newKey{name='back',x=1140,y=60,w=170,h=80,color='D',sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -175,7 +175,7 @@ scene.widgetList={
WIDGET.newSwitch{name='invis', x=240,y=330,lim=200,font=40,disp=function()return invis end, code=pressKey'q',hideF=function()return state==1 end},
WIDGET.newSwitch{name='disappear',x=240,y=420,lim=200,font=40,disp=function()return disappear end,code=pressKey'w',hideF=function()return state==1 end},
WIDGET.newSwitch{name='tapFX', x=240,y=510,lim=200,font=40,disp=function()return tapFX end, code=pressKey'e',hideF=function()return state==1 end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -43,6 +43,6 @@ end
scene.widgetList={
WIDGET.newButton{name="spin", x=1140,y=360,w=120,font=60,fText=CHAR.icon.retry_spin,code=pressKey'space'},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -72,7 +72,7 @@ end
scene.widgetList={
WIDGET.newKey{name='tap',x=640,y=540,w=626,h=260,sound='touch',fText="TAP",color='Z',font=100,code=function(i)love.keypressed('b'..i)end},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -308,7 +308,7 @@ scene.widgetList={
WIDGET.newSwitch{name='next', x=240,y=235,lim=200,font=40,disp=function()return nexts end,code=pressKey'q',hideF=function()return state==1 end},
WIDGET.newSwitch{name='invis',x=240,y=305,lim=200,font=40,disp=function()return invis end,code=pressKey'w',hideF=function()return state==1 end},
WIDGET.newSwitch{name='fast', x=240,y=375,lim=200,font=30,disp=function()return fast end,code=pressKey'e',hideF=function()return state==1 end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -39,6 +39,7 @@ local textColor={
{.08, .80, .34},
}
local tileTexts=setmetatable({
[-2]="B",
[-1]="×",
},{__index=function(self,k)self[k]=k return k end})
@@ -172,7 +173,7 @@ function player:click(y,x)
local getScore=4^cur*count
self.score=self.score+getScore
TEXT.show(getScore,player.x+self.selectX*100-50,player.y+self.selectY*100-50,40,'score')
TEXT.show(getScore,player.x+self.selectX*100-50,player.y+self.selectY*100-50,40,'score',1.626/math.log(getScore,3))
for i=1,#self.mergedTiles do
newMergeFX(self.mergedTiles[i][1],self.mergedTiles[i][2],cur+1)
end
@@ -268,12 +269,15 @@ function scene.sceneInit()
BGM.play('truth')
end
function scene.mouseDown(x,y)
function scene.mouseClick(x,y)
x,y=int((x-player.x)/100)+1,int((y-player.y)/100)+1
if x>=1 and x<=6 and y>=1 and y<=6 then
player:click(y,x)
end
end
function scene.touchClick(x,y)
scene.mouseClick(x,y)
end
function scene.keyDown(key,isRep)
if isRep then return end
if key=='up'or key=='down'or key=='left'or key=='right'then
@@ -286,7 +290,7 @@ function scene.keyDown(key,isRep)
elseif key=='right'then player.selectX=math.min(player.selectX+1,6)
end
end
elseif key=='z'or key=='space'then
elseif key=='x'or key=='space'then
if not player.selectX then
player.selectX,player.selectY=3,3
else
@@ -294,7 +298,9 @@ function scene.keyDown(key,isRep)
player:click(player.selectY,player.selectX)
player.selectY,player.selectX=y,x
end
elseif key=='x'then
elseif key=='w'then
love.mousepressed(love.mouse.getPosition())
elseif key=='z'or key=='q'then
player:click(1,1)
elseif key=='r'then
if player.state~=1 or tryReset()then
@@ -345,6 +351,6 @@ end
scene.widgetList={
WIDGET.newButton{name='reset',x=160,y=100,w=180,h=100,color='lG',font=50,fText=CHAR.icon.retry_spin,code=pressKey'r'},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -173,7 +173,7 @@ end
scene.widgetScrollHeight=450
scene.widgetList={
WIDGET.newText{name='title', x=520,y=15,font=70,align='R'},
WIDGET.newText{name='title', x=40,y=15,lim=900,font=70,align='L'},
WIDGET.newKey{name='reset', x=1110,y=90,w=230,h=90,color='R',code=pressKey'delete'},
WIDGET.newKey{name='mod', x=1110,y=200,w=230,h=90,color='Z',code=pressKey'f1'},
@@ -210,7 +210,7 @@ scene.widgetList={
WIDGET.newButton{name='paste', x=1070,y=380,w=310,h=70,color='lB',font=25,code=pressKey'cV'},
WIDGET.newButton{name='play_clear', x=1070,y=460,w=310,h=70,color='lY',font=35,code=pressKey'play1'},
WIDGET.newButton{name='play_puzzle', x=1070,y=540,w=310,h=70,color='lM',font=35,code=pressKey'play2',hideF=function()return #FIELD[1]==0 end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=pressKey'escape'},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=pressKey'escape'},
--Rule set
WIDGET.newSelector{name='eventSet', x=1050,y=760,w=340,color='H',list=sList.eventSet,disp=CUSval('eventSet'),code=CUSsto('eventSet')},

View File

@@ -435,8 +435,8 @@ end
local function _setPen(i)return function(k)pens[k]=i end end
scene.widgetList={
WIDGET.newText{name='title', x=1020,y=5,font=70,align='R'},
WIDGET.newText{name='subTitle', x=1030,y=50,font=35,align='L',color='H'},
WIDGET.newText{name='title', x=1020,y=5,lim=480,font=70,align='R'},
WIDGET.newText{name='subTitle', x=1030,y=50,lim=170,font=35,align='L',color='H'},
WIDGET.newButton{name='b1', x=580, y=130,w=73,fText="",color='R',code=_setPen(1)},--B1
WIDGET.newButton{name='b2', x=660, y=130,w=73,fText="",color='F',code=_setPen(2)},--B2
@@ -481,7 +481,7 @@ scene.widgetList={
WIDGET.newButton{name='prevPg', x=100, y=350,w=160,h=110,color='lG',font=20,code=pressKey'pageup',hideF=function()return page==1 end},
WIDGET.newButton{name='nextPg', x=100, y=470,w=160,h=110,color='lG',font=20,code=pressKey'pagedown',hideF=function()return page==#FIELD end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -175,8 +175,8 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newText{name='title', x=520,y=5,font=70,align='R'},
WIDGET.newText{name='subTitle',x=530,y=50,font=35,align='L',color='H'},
WIDGET.newText{name='title', x=520,y=5,lim=460,font=70,align='R'},
WIDGET.newText{name='subTitle',x=530,y=50,lim=170,font=35,align='L',color='H'},
WIDGET.newKey{name='_1', x=800,y=540,w=90,font=50,code=pressKey(01)},
WIDGET.newKey{name='_2', x=900,y=540,w=90,font=50,code=pressKey(02)},
@@ -224,7 +224,7 @@ scene.widgetList={
WIDGET.newButton{name='paste', x=1140,y=540,w=170,h=80,color='lB',font=50,code=pressKey'cV', fText=CHAR.icon.import},
WIDGET.newSwitch{name='mission',x=1150,y=340,lim=280,disp=CUSval('missionKill'),code=CUSrev('missionKill')},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -171,8 +171,8 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newText{name='title',x=520,y=5,font=70,align='R'},
WIDGET.newText{name='subTitle',x=530,y=50,font=35,align='L',color='H'},
WIDGET.newText{name='title',x=520,y=5,lim=460,font=70,align='R'},
WIDGET.newText{name='subTitle',x=530,y=50,lim=170,font=35,align='L',color='H'},
WIDGET.newSelector{name='sequence',x=1080,y=60,w=200,color='Y',
list={'bag','bagES','his','hisPool','c2','rnd','mess','reverb','loop','fixed'},
@@ -220,7 +220,7 @@ scene.widgetList={
WIDGET.newButton{name='copy', x=1140,y=460,w=170,h=80,color='lR',font=50,fText=CHAR.icon.export,code=pressKey'cC',hideF=function()return #BAG==0 end},
WIDGET.newButton{name='paste',x=1140,y=550,w=170,h=80,color='lB',font=50,fText=CHAR.icon.import,code=pressKey'cV'},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -32,7 +32,7 @@ local typeColor={
local function _filter(word_org)
local word=word_org
word=word:gsub("[Tt]etris",CHAR.zChan.thinking)
if FNSF then word=word:gsub("[Pp]\97\116\114\101\111\110",CHAR.zChan.qualified)end
if FNNS then word=word:gsub("[Pp]\97\116\114\101\111\110",CHAR.zChan.qualified)end
return word,word_org
end
local function _scanDict(D)
@@ -221,7 +221,7 @@ scene.widgetList={
WIDGET.newKey{name='down', x=1120,y=565,w=80,font=50,fText=CHAR.key.down, code=pressKey'down',hide=not MOBILE},
WIDGET.newKey{name='pageup', x=1210,y=475,w=80,font=50,fText=CHAR.icon.toUp, code=pressKey'pageup',hide=not MOBILE},
WIDGET.newKey{name='pagedown',x=1210,y=565,w=80,font=50,fText=CHAR.icon.toDown,code=pressKey'pagedown',hide=not MOBILE},
WIDGET.newButton{name='back', x=1165,y=60,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1165,y=60,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -135,7 +135,7 @@ local function _checkGameKeyDown(key)
return true--No key pressed
end
function scene.sceneInit(org)
function scene.sceneInit()
if GAME.init then
resetGameData()
GAME.init=false
@@ -145,7 +145,7 @@ function scene.sceneInit(org)
noKey=replaying
noTouch=not SETTING.VKSwitch or replaying
if org~='depause'and org~='pause'then
if SCN.prev~='depause'and SCN.prev~='pause'then
trigGameRate,gameRate=0,1
elseif not replaying then
if GAME.tasUsed then

View File

@@ -24,7 +24,7 @@ end
scene.widgetList={
WIDGET.newTextBox{name='texts',x=30,y=45,w=1000,h=640,font=20,fix=true},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -6,23 +6,16 @@ local langList={
fr="Français",
es=" Español\n(Castellano)",
pt="Português",
id="Bahasa Indonesia",
zh_grass="机翻",
zh_yygq="就这?",
symbol="?????",
}
local languages={
"Language",
"语言",
"言語",
"Langue",
"Idioma",
"Línguas",
"Sprache",
"Lingua",
"Язык",
"Γλώσσα",
"언어",
"Language Langue Lingua",
"语言 言語 언어",
"Idioma Línguas Sprache",
"Язык Γλώσσα Bahasa",
}
local curLang=1
@@ -33,7 +26,7 @@ function scene.sceneBack()
end
function scene.update(dt)
curLang=curLang+dt*1.626
curLang=curLang+dt*1.26
if curLang>=#languages+1 then
curLang=1
end
@@ -57,20 +50,21 @@ local function _setLang(lid)
end
scene.widgetList={
WIDGET.newButton{x=271,y=210,w=346,h=100,font=40, fText=langList.en, color='R',code=function()_setLang('en')end},
WIDGET.newButton{x=271,y=329,w=346,h=100,font=40, fText=langList.fr, color='F',code=function()_setLang('fr')end},
WIDGET.newButton{x=271,y=508,w=346,h=220,font=40, fText=langList.es, color='O',code=function()_setLang('es')end},
WIDGET.newButton{x=271,y=210,w=346,h=100,font=40, fText=langList.en, color='R',sound='click',code=function()_setLang('en')end},
WIDGET.newButton{x=271,y=329,w=346,h=100,font=40, fText=langList.fr, color='F',sound='click',code=function()_setLang('fr')end},
WIDGET.newButton{x=271,y=449,w=346,h=100,font=35, fText=langList.es, color='O',sound='click',code=function()_setLang('es')end},
WIDGET.newButton{x=271,y=568,w=346,h=100,font=35, fText=langList.id, color='Y',sound='click',code=function()_setLang('id')end},
WIDGET.newButton{x=637,y=210,w=346,h=100,font=40, fText=langList.pt, color='G',code=function()_setLang('pt')end},
WIDGET.newButton{x=637,y=329,w=346,h=100,font=40, fText=langList.symbol, color='J',code=function()_setLang('symbol')end},
WIDGET.newButton{x=637,y=449,w=346,h=100,font=40, fText=langList.zh_yygq, color='L',code=function()_setLang('zh_yygq')end},
WIDGET.newButton{x=637,y=568,w=346,h=100,font=40, fText=langList.zh_grass,color='Y',code=function()_setLang('zh_grass')end},
WIDGET.newButton{x=637,y=210,w=346,h=100,font=40, fText=langList.pt, color='A',sound='click',code=function()_setLang('pt')end},
WIDGET.newButton{x=637,y=329,w=346,h=100,font=40, fText=langList.symbol, color='G',sound='click',code=function()_setLang('symbol')end},
WIDGET.newButton{x=637,y=449,w=346,h=100,font=40, fText=langList.zh_yygq, color='J',sound='click',code=function()_setLang('zh_yygq')end},
WIDGET.newButton{x=637,y=568,w=346,h=100,font=40, fText=langList.zh_grass,color='L',sound='click',code=function()_setLang('zh_grass')end},
WIDGET.newButton{x=1003,y=210,w=346,h=100,font=40,fText=langList.zh, color='B',code=function()_setLang('zh')end},
WIDGET.newButton{x=1003,y=329,w=346,h=100,font=40,fText=langList.zh_full, color='S',code=function()_setLang('zh_full')end},
WIDGET.newButton{x=1003,y=449,w=346,h=100,font=40,fText=langList.zh_trad, color='N',code=function()_setLang('zh_trad')end},
WIDGET.newButton{x=1003,y=210,w=346,h=100,font=40,fText=langList.zh, color='C',sound='click',code=function()_setLang('zh')end},
WIDGET.newButton{x=1003,y=329,w=346,h=100,font=40,fText=langList.zh_full, color='N',sound='click',code=function()_setLang('zh_full')end},
WIDGET.newButton{x=1003,y=449,w=346,h=100,font=40,fText=langList.zh_trad, color='S',sound='click',code=function()_setLang('zh_trad')end},
WIDGET.newButton{name='back',x=1003,y=568,w=346,h=100,font=60,fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back',x=1003,y=568,w=346,h=100,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -287,7 +287,7 @@ scene.widgetList={
WIDGET.newSlider{name='voc', x=1000,y=220,lim=130,w=250,disp=SETval('voc'),code=function(v)SETTING.voc=v VOC.setVol(SETTING.voc)end},
WIDGET.newSwitch{name='label',x=1200,y=290,lim=160,disp=function()return showLabel end,code=pressKey'space',},
WIDGET.newButton{name='music',x=1140,y=540,w=170,h=80,font=40,code=pressKey'tab'},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -28,7 +28,7 @@ end
scene.widgetList={
WIDGET.newTextBox{name='texts',x=30,y=45,w=1000,h=640,font=15,fix=true},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -37,7 +37,7 @@ scene.widgetList={
passwordBox,
WIDGET.newSwitch{name='keepPW', x=900, y=420,disp=function()return savePW end,code=function()savePW=not savePW end},
WIDGET.newKey{name='login', x=1140,y=540,w=170,h=80,font=40,code=_login},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -30,7 +30,7 @@ end
scene.widgetList={
WIDGET.newTextBox{name='texts',x=30,y=45,w=1000,h=640,font=15,fix=true},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -158,7 +158,7 @@ scene.widgetList={
WIDGET.newText{name='title', x=80,y=50,font=70,align='L'},
WIDGET.newText{name='unranked',x=1200,y=60,color='Y',font=50,align='R'},
WIDGET.newButton{name='reset', x=1140,y=540,w=170,h=80,font=25,code=pressKey'tab'},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -28,9 +28,9 @@ local touchDist
local scene={}
function scene.sceneInit(org)
function scene.sceneInit()
BG.set()
mapCam.zoomK=org=='main'and 5 or 1
mapCam.zoomK=SCN.prev=='main'and 5 or 1
visibleModes={}--1=unlocked, 2=locked but visible
for name,M in next,MODES do
if RANKS[name]and M.x then
@@ -331,7 +331,7 @@ end
scene.widgetList={
WIDGET.newKey{name='mod', x=140,y=655,w=220,h=80,font=35,code=goScene'mod'},
WIDGET.newButton{name='start',x=1040,y=655,w=180,h=80,font=40,code=pressKey'return',hideF=function()return not mapCam.sel end},
WIDGET.newButton{name='back', x=1200,y=655,w=120,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1200,y=655,w=120,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -128,7 +128,7 @@ scene.widgetList={
WIDGET.newButton{name='play', x=200,y=390,w=120,code=pressKey'space',sound=false,font=65,fText=CHAR.icon.play_pause},
WIDGET.newButton{name='down', x=200,y=530,w=120,code=pressKey'down',hideF=function()return selected==#bgmList end,font=60,fText=CHAR.key.down},
WIDGET.newButton{name='sound',x=1140,y=540,w=170,h=80,font=40,code=pressKey'tab'},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -57,7 +57,7 @@ end
local scene={}
function scene.sceneInit(org)
function scene.sceneInit()
textBox.hide=true
textBox:clear()
inputBox.hide=true
@@ -68,7 +68,7 @@ function scene.sceneInit(org)
upstreamProgress=1
newMessageTimer=0
if org=='setting_game'then
if SCN.prev=='setting_game'then
NET.changeConfig()
end
if GAME.prevBG then

View File

@@ -17,7 +17,7 @@ end
scene.widgetList={
WIDGET.newKey{name='setting',x=1200,y=160,w=90,h=90,font=60,fText=CHAR.icon.settings,code=goScene'setting_game'},
WIDGET.newKey{name='match',x=640,y=500,w=760,h=140,font=60,code=function()MES.new('warn',text.notFinished)end},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -30,7 +30,7 @@ scene.widgetList={
end
end
end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -86,7 +86,7 @@ scene.widgetList={
--Capacity & Create & Back
WIDGET.newSelector{name='capacity', x=1070,y=330,w=310,color='lY',list={2,3,4,5,7,10,17,31,49,99},disp=ROOMval('capacity'),code=ROOMsto('capacity')},
WIDGET.newButton{name='create', x=1070,y=480,w=310,h=140,color='lN',font=40,code=_createRoom},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
--Special rules
WIDGET.newSwitch{name='ospin', x=850, y=850, lim=210,disp=ROOMval('ospin'), code=ROOMrev('ospin')},

View File

@@ -140,7 +140,7 @@ scene.widgetList={
WIDGET.newKey{name='refresh', x=250,y=630,w=140,h=120,code=_fetchRoom,hideF=function()return fetchTimer>7 end},
WIDGET.newKey{name='new', x=510,y=630,w=260,h=120,code=goScene'net_newRoom'},
WIDGET.newKey{name='join', x=780,y=630,w=140,h=120,code=pressKey'join',hideF=function()return roomList:getLen()==0 or NET.getlock('enterRoom')end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=pressKey'escape'},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=pressKey'escape'},
}
return scene

View File

@@ -17,15 +17,15 @@ local rank--Current rank
local trophy--Current trophy
local trophyColor--Current trophy color
function scene.sceneInit(org)
function scene.sceneInit()
page=0
if org:find("setting")then
if SCN.prev:find("setting")then
TEXT.show(text.needRestart,640,410,50,'fly',.6)
end
local P1=PLAYERS[1]
local S=P1.stat
timer1=org=='game'and 0 or 50
timer1=SCN.prev=='game'and 0 or 50
timer2=timer1
local frameLostRate=(S.frame/S.time/60-1)*100

View File

@@ -28,7 +28,7 @@ scene.widgetList={
WIDGET.newKey{name='register', x=640, y=640,w=300,h=80,font=40,code=_register,hideF=function()return NET.getlock('register')end},
WIDGET.newText{name='registering', x=640, y=605,font=50,hideF=function()return not NET.getlock('register')end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -143,7 +143,7 @@ scene.widgetList={
WIDGET.newButton{name='import',x=350,y=640,w=140,h=80,color='lN',code=pressKey'cV',font=50,fText=CHAR.icon.import},
WIDGET.newButton{name='play', x=700,y=640,w=170,h=80,color='lY',code=pressKey'return',font=65,fText=CHAR.icon.play},
WIDGET.newButton{name='delete',x=850,y=640,w=80,h=80,color='lR',code=pressKey'delete',font=50,fText=CHAR.icon.trash},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -82,7 +82,7 @@ scene.widgetList={
WIDGET.newText{name='notLogin', x=55,y=550,color='dB',align='L',font=30,hideF=function()return WS.status('user')=='running'end},
WIDGET.newButton{name='upload', x=190,y=610,w=280,h=90,color='lB',font=25,code=NET.uploadSave,hideF=function()return WS.status('user')~='running'end},
WIDGET.newButton{name='download', x=490,y=610,w=280,h=90,color='lB',font=25,code=NET.downloadSave,hideF=function()return WS.status('user')~='running'end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -86,7 +86,7 @@ local function _sliderShow(S)
return S.."F "..math.floor(S*16.67).."ms"
end
scene.widgetList={
WIDGET.newText{name='title', x=80, y=50,font=70,align='L'},
WIDGET.newText{name='title', x=100, y=50,lim=500,font=70,align='L'},
WIDGET.newText{name='preview', x=520, y=610,font=40,align='R'},
WIDGET.newSlider{name='das', x=250, y=190,lim=230,w=600,unit=20,disp=SETval('das'), show=_sliderShow,code=SETsto('das')},
@@ -105,7 +105,7 @@ scene.widgetList={
_.sddas,_.sdarr=0,2
_.ihs,_.irs,_.ims=false,false,false
end},
WIDGET.newButton{name='back', x=1140, y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140, y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -31,7 +31,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newText{name='title', x=640,y=15,font=80},
WIDGET.newText{name='title', x=640,y=15,lim=630,font=80},
WIDGET.newButton{name='graphic', x=200, y=80, w=240,h=80,color='lC',font=35,code=swapScene('setting_video','swipeR')},
WIDGET.newButton{name='sound', x=1080, y=80, w=240,h=80,color='lC',font=35,code=swapScene('setting_sound','swipeL')},
@@ -59,7 +59,7 @@ scene.widgetList={
end
end
end},
WIDGET.newButton{name='back', x=1140, y=640, w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140, y=640, w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -231,7 +231,7 @@ scene.widgetList={
WIDGET.newKey{name='restart',x=150,y=670,w=180,h=60,code=function()_setSel(0)end},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -81,7 +81,7 @@ local function _nextDir(i)
end
scene.widgetList={
WIDGET.newText{name='title', x=80,y=50,font=70,align='L'},
WIDGET.newText{name='title', x=80,y=50,lim=500,font=70,align='L'},
WIDGET.newSelector{name='skinSet',x=780,y=100,w=320,list=SKIN.getList(),disp=SETval('skinSet'),code=SETsto('skinSet')},
WIDGET.newButton{name='prev1', x=130,y=220,w=80,h=65,sound='hold',font=40,fText="",code=function()_prevSkin(1)end},
@@ -123,7 +123,7 @@ scene.widgetList={
end
SFX.play('hold')
end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
playEgg,
}

View File

@@ -4,13 +4,12 @@ local sin=math.sin
local scene={}
local last--Last touch time
local jump--Animation timer(10 to 0)
local last1,last2--Last touch/sound time
local sfxPack=SETTING.sfxPack
local vocPack=SETTING.vocPack
function scene.sceneInit()
last,jump=0,0
last1,last2=0,0
sfxPack=SETTING.sfxPack
vocPack=SETTING.vocPack
WIDGET.active.sfxPack:reset()
@@ -22,16 +21,15 @@ function scene.sceneBack()
end
function scene.mouseDown(x,y)
if x>780 and x<980 and y>470 and y<720 and jump==0 then
jump=10
local t=TIME()-last
if t>1 then
if t>2.6 and t<3 and not GAME.playing then
loadGame('sprintSmooth',true)
else
VOC.play((t<1.26 or t>6.26)and'doubt'or'happy')
last=TIME()
end
local t1=TIME()-last1
if x>780 and x<980 and y>470 and y<720 and t1>.626 then
last1=TIME()
local t2=TIME()-last2
if t2>2.6 and t2<3 and not GAME.playing then
loadGame('sprintSmooth',true)
else
VOC.play((t2<1.26 or t2>6.26)and'doubt'or'happy')
last2=TIME()
end
end
end
@@ -45,36 +43,43 @@ function scene.keyDown(key)
end
end
function scene.update()
if jump>0 then
jump=jump-1
end
end
function scene.draw()
gc.setColor(1,1,1)
local t=TIME()
local x,y=800,340+10*sin(t*.5)+(jump-10)*jump*.3
gc.translate(x,y)
gc.push('transform')
if vocPack=="miya"then
gc.draw(IMG.miyaCH)
gc.setColor(1,1,1,.7)
gc.draw(IMG.miyaF1,4,47+4*sin(t*.9))
gc.draw(IMG.miyaF2,42,107+5*sin(t))
gc.draw(IMG.miyaF3,93,126+3*sin(t*.7))
gc.draw(IMG.miyaF4,129,98+3*sin(t*.5))
gc.translate(780,340+6*sin(TIME()*.5))
gc.draw(IMG.miyaGlow,-4,-4)
if TIME()-last1<1 then
if TIME()%60>30 then
gc.draw(IMG.miyaCH3)
else
gc.draw(IMG.miyaCH4)
end
elseif TIME()%2>.126 then
gc.draw(IMG.miyaCH1)
else
gc.draw(IMG.miyaCH2)
end
gc.translate(0,-6*sin(TIME()*.5))
gc.setColor(1,1,1,1-(TIME()-last1))
gc.draw(IMG.miyaHeart,162,52,nil,.3)
elseif vocPack=="mono"then
local jump=math.max(30-(TIME()-last1)*60,0)%10
gc.translate(800,340+6*sin(TIME()*.5)+(jump-10)*jump*.3)
gc.draw(IMG.monoCH,-30)
elseif vocPack=="xiaoya"then
gc.draw(IMG.xiaoyaCH,-30)
gc.translate(770,340+4*sin(TIME()*.5))
gc.draw(IMG.xiaoyaCH)
gc.draw(IMG.xiaoyaOmino,16,168,26/(1+TIME()-last1),.36,.36,33,37)
elseif vocPack=="miku"then
gc.translate(800,340+12*sin(TIME()*.5))
gc.draw(IMG.mikuCH,-30)
end
gc.translate(-x,-y)
gc.pop()
end
scene.widgetList={
WIDGET.newText{name='title', x=640, y=15,font=80},
WIDGET.newText{name='title', x=640, y=15,lim=630,font=80},
WIDGET.newButton{name='game', x=200, y=80,w=240,h=80,color='lC',font=35,code=swapScene('setting_game','swipeR')},
WIDGET.newButton{name='graphic', x=1080,y=80,w=240,h=80,color='lC',font=35,code=swapScene('setting_video','swipeL')},
@@ -95,7 +100,7 @@ scene.widgetList={
WIDGET.newButton{name='apply', x=1100,y=400,w=180,h=60,code=function()SETTING.sfxPack=sfxPack SFX.load('media/effect/'..sfxPack..'/')end,hideF=function()return SETTING.sfxPack==sfxPack end},
WIDGET.newSelector{name='vocPack',x=1100,y=470,w=200,color='lV',list=VOCPACKS,disp=function()return vocPack end,code=function(i)vocPack=i end},
WIDGET.newButton{name='apply', x=1100,y=540,w=180,h=60,code=function()SETTING.vocPack=vocPack VOC.load('media/vocal/'..vocPack..'/')end,hideF=function()return SETTING.vocPack==vocPack end},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -115,7 +115,7 @@ scene.widgetList={
end},
WIDGET.newSelector{name='snap', x=750,y=90,w=200,h=80,color='Y',list={1,10,20,40,60,80},disp=function()return snapUnit end,code=function(i)snapUnit=i end},
WIDGET.newButton{name='option', x=530,y=190,w=200,h=80,font=60,fText=CHAR.icon.menu,code=function()SCN.go('setting_touchSwitch')end},
WIDGET.newButton{name='back', x=750,y=190,w=200,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=750,y=190,w=200,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
WIDGET.newKey{name='save1', x=475,y=290,w=90,h=70,code=_save1,font=45,fText=CHAR.icon.saveOne},
WIDGET.newKey{name='load1', x=585,y=290,w=90,h=70,code=_load1,font=45,fText=CHAR.icon.loadOne},
WIDGET.newKey{name='save2', x=695,y=290,w=90,h=70,code=_save2,font=45,fText=CHAR.icon.saveTwo},

View File

@@ -62,7 +62,7 @@ scene.widgetList={
WIDGET.newSlider{name='tchW', x=140, y=860, w=1000, font=35,disp=SETval('VKTchW'),code=function(i)SETTING.VKTchW=i SETTING.VKCurW=math.max(SETTING.VKCurW,i)end,hideF=_notTrack},
WIDGET.newSlider{name='curW', x=140, y=930, w=1000, font=35,disp=SETval('VKCurW'),code=function(i)SETTING.VKCurW=i SETTING.VKTchW=math.min(SETTING.VKTchW,i)end,hideF=_notTrack},
WIDGET.newButton{name='back', x=1140, y=640, w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140, y=640, w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -44,7 +44,7 @@ end
scene.widgetScrollHeight=900
scene.widgetList={
WIDGET.newText{name='title', x=640,y=15,font=80},
WIDGET.newText{name='title', x=640,y=15,lim=630,font=80},
WIDGET.newButton{name='sound', x=200,y=80,w=240,h=80,color='lC',font=35,code=swapScene('setting_sound','swipeR')},
WIDGET.newButton{name='game', x=1080,y=80,w=240,h=80,color='lC',font=35,code=swapScene('setting_game','swipeL')},
@@ -113,7 +113,7 @@ scene.widgetList={
code=function(v)SETTING.fieldSatur=v;applyFieldSatur(SETTING.fieldSatur)end
},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -95,7 +95,7 @@ function scene.draw()
end
scene.widgetList={
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -131,7 +131,7 @@ scene.widgetList={
end
},
WIDGET.newButton{name='save',x=820,y=640,w=250,h=80,font=25,code=goScene'savedata'},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,sound='back',fText=CHAR.icon.back,code=backScene},
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

23
parts/scenes/support.lua Normal file
View File

@@ -0,0 +1,23 @@
local gc=love.graphics
local scene={}
function scene.draw()
--QR Code frame
gc.setLineWidth(2)
gc.rectangle('line',298,98,263,263)
gc.rectangle('line',718,318,250,250)
--Support text
gc.setColor(1,1,1,MATH.sin(TIME()*20)*.3+.6)
setFont(30)
mStr(text.support,430+MATH.sin(TIME()*4)*20,363)
mStr(text.support,844-MATH.sin(TIME()*4)*20,570)
end
scene.widgetList={
WIDGET.newImage{name='pay1', x=300,y=100},
WIDGET.newImage{name='pay2', x=720,y=320},
WIDGET.newButton{name="back", x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
}
return scene

View File

@@ -12,18 +12,24 @@ return[=[
更自由的攻击系统; 更多消除方式; 可调场地宽度;
task-Z(新AI); 自适应UI; 新联网游戏场景切换逻辑
0.17.1: 醒 Wake Up
0.17.1: 醒 Wake Up
新增:
--TODO
新皮肤:pixel(by C₂₉H₂₅N₃O₅)
新语言:Bahasa Indonesia(by NOT_A_ROBOT)
改动:
修改选择模式音效
优化皮肤设置页面交互效果
重做关于页面
换新miya立绘,给不同立绘添加不同点击动画
略微降低master-h模式骨块出现后的难度
X块的默认色改为黄色
微调全局颜色表
修复:
自定义场地16号色的方块名位置显示错误
登录界面读取本地账号密码数据错误
策略堆叠模式评级标准不当
云存档/读档的一处小问题
部分场景文本重叠问题
0.17.0: 硬着陆 Hard Landing
新增:

View File

@@ -1,7 +1,7 @@
return{
["apkCode"]=419,
["apkCode"]=420,
["code"]=1701,
["string"]="V0.17.1",
["room"]="ver A-2",
["name"]=" Wake Up",
["name"]="醒 Wake Up",
}