Compare commits

..

121 Commits

Author SHA1 Message Date
MrZ_26
373c8a8a5f 版本推进 2022-04-04 05:29:54 +08:00
MrZ_26
2207f7e414 添加少许魔法
框架跟进
2022-04-04 05:25:42 +08:00
MrZ_26
984bb7d6a6 词典调整 2022-04-04 04:57:20 +08:00
Richard969
664afb0bb3 Added a mino list in Zictionary (#679) 2022-04-04 04:53:02 +08:00
MrZ_26
716a08b31d 着色器技术飞跃
框架跟进
2022-04-03 02:41:49 +08:00
MrZ_26
a6c63c41b6 限制着色器们输入的时间范围防止精度问题导致掉帧(略暴力,会导致一个背景连续40分钟左右后会闪烁一次) 2022-04-03 00:40:21 +08:00
MrZ_26
286e330077 版本推进 2022-03-31 17:04:29 +08:00
MrZ_26
5e8af423f2 修复一些背景相关问题,框架跟进 2022-03-31 17:04:29 +08:00
NOT_A_ROBOT
5f539a2d4f Fixed off-by-one error in rank calculation in Master Graded (#678) 2022-03-31 13:58:04 +08:00
MrZ_26
73f63cfd0a 修复秒表小程序不能用触屏 2022-03-27 00:35:28 +08:00
MrZ_26
11422bee5a 微调说明书里对于HPC的说明 2022-03-26 21:12:48 +08:00
MrZ_26
baf36ac86b 版本推进 2022-03-22 14:14:03 +08:00
MrZ_26
d8c058b0e1 修正词典文件语法错误 2022-03-22 14:14:03 +08:00
MrZ_26
6c69c38b32 登录界面可选隐藏邮箱 close #639 2022-03-22 02:39:26 +08:00
Untitled_unrevised
d17e62e36b Update dict_zh.lua (#675)
added "DPC", "Gamushiro Stacking", "Fractal"
added some link of setups and patterns
2022-03-22 02:19:40 +08:00
MrZ_26
3a2ec3a5dd 移除FTLock,全局强制开启 2022-03-22 02:15:48 +08:00
MrZ_26
ce25f17676 修正一个背景代码细节 2022-03-14 04:27:47 +08:00
MrZ_26
61fe4a5897 版本推进 2022-03-11 19:36:02 +08:00
MrZ_26
f50e90b29b 删除一个重复词条 2022-03-11 19:33:27 +08:00
MrZ_26
c151c1176f 简化部分中文文本 2022-03-11 19:22:01 +08:00
C₂₉H₂₅N₃O₅
69491e2f8b Good grammar makes reading easier (#668)
- 英语使用typesetting quotation marks
- 引号使用美式规则排版
- 重做IPA相关符号

* Good grammar makes reading easier

* 改细节 顺便改下中文文本准备下新UI
2022-03-11 19:21:12 +08:00
NOT_A_ROBOT
4f4988d7ef Fix incorrect score order in Dig Efficiency modes 2022-03-10 02:13:49 +08:00
MrZ_26
9ee4af48da 修正中文词典几个词条缺少中文关键词 2022-03-08 00:03:27 +08:00
NOT_A_ROBOT
566ebbf213 Added new icon and added the modes to the map 2022-03-07 00:44:15 +08:00
NOT_A_ROBOT
b1ea222b90 Added entry to language files 2022-03-07 00:44:15 +08:00
NOT_A_ROBOT
d85f77b480 Added efficiency-based Dig modes 2022-03-07 00:44:15 +08:00
NOT_A_ROBOT
20f5d07d05 Add Sonic Drop to Master Graded, closes #641 2022-03-07 00:42:33 +08:00
NOT_A_ROBOT
9864a75e0f Fixed Master Graded final section counted as regret during roll 2022-03-07 00:42:17 +08:00
NOT_A_ROBOT
af4cf9fc0d Made level counter more readable + added level overflow mechanic 2022-03-05 01:03:38 +08:00
MrZ_26
d0597e6836 修正一处拼写错误 close #663 2022-03-05 01:00:38 +08:00
MrZ_26
61fb504b21 中文词典新增一条新人指引 2022-03-01 18:43:23 +08:00
MrZ_26
bd055a7c60 修复关闭3D方块选项后场地方块饱和度设置无效 close #656 2022-02-28 03:56:27 +08:00
MrZ_26
f22c188753 版本推进 2022-02-28 03:50:48 +08:00
MrZ_26
7df55b1584 整理代码 2022-02-28 03:42:46 +08:00
C29H25N3O5
f9d5e054d4 大改标点和更新字体
- 英语使用typesetting quotation marks
- 引号使用美式规则排版
- 重做IPA相关符号
2022-02-28 03:32:13 +08:00
NOT_A_ROBOT
a17a3f9ba4 Add comments and cool/regret history 2022-02-28 03:31:29 +08:00
Chumo2791
f3945b9afe Add a new skin: guidetris by lusisi 2022-02-28 03:30:54 +08:00
NOT_A_ROBOT
e3fffc5d7c Add strategy_plus to world map 2022-02-28 03:29:08 +08:00
Imple Lee
54175a6ee8 change default cc branch 2022-02-20 18:26:22 +08:00
Imple Lee
9ddee1059c cc techmino-alize 2
- builtin b2b gauge, attack and extra block systen
- builtin spawn position integration
2022-02-20 18:26:22 +08:00
MrZ_26
0e965eaaae 不再允许防沉迷时间到后创建房间 2022-02-20 15:46:23 +08:00
MrZ_26
e66c5c41ee 修复master_g没开锁定特效报错 2022-02-15 17:25:02 +08:00
MrZ_26
da1ec35a55 调整几个中文tips 2022-02-15 00:09:35 +08:00
MrZ_26
d919812f44 新增两个赞助者 2022-02-08 16:35:12 +08:00
MrZ_26
eddcd726ca 补充地图新增模式的一点翻译
整理代码
2022-02-08 13:41:44 +08:00
MrZ_26
190e64de92 修正master_g老版本成绩在模式地图报错 2022-02-08 13:18:39 +08:00
MrZ_26
6ee2833cf7 框架跟进 2022-02-08 13:05:43 +08:00
NOT_A_ROBOT
beaaac6892 Update documentation on theme command in console (#643)
- Make list of themes appear when `name` is empty instead of `[ThemeList]`
2022-02-08 13:01:16 +08:00
MrZ_26
f4e0cabcf3 版本推进 2022-02-06 18:37:01 +08:00
MrZ_26
3b60590f8a 删除”全简体中文“语言 2022-02-06 18:30:09 +08:00
MrZ_26
96a695819e 修复关闭背景时设置背景亮度报错 2022-02-06 18:07:33 +08:00
MrZ_26
0a11d2cf47 暴力修复联网对战时不知道怎么触发的一个错误,能用,不懂,不理解,but it works,等重构 2022-02-06 18:07:30 +08:00
NOT_A_ROBOT
f932005ea0 Add some hidden modes + misc changes (#640)
* Added secret_grade and sprint123 to map and added some icons

* Add master_g to map

* add classic_u and master_instinct and misc changes

* added big modes

* Fix some bugs on master_instinct

* fix bugs on big mode

* Simplified Grade Display
2022-02-06 17:51:38 +08:00
MrZ_26
fedce2ae2b 更新char与mj小程序里1s的显示 2022-01-30 14:20:28 +08:00
MrZ_26
85cf77f15d 更新字体文件
Co-authored-by: C₂₉H₂₅N₃O₅ <cgu52@wisc.edu>
2022-01-30 14:20:28 +08:00
MrZ_26
fa3d7ff199 暴力修复物理hold可能导致的一个错误,能用,不懂,不理解,but it works,等重构 2022-01-30 14:20:27 +08:00
Airun
1da6c0c8a9 More Translations (Before I pull off the official version) (#633) 2022-01-30 14:18:42 +08:00
NOT_A_ROBOT
83349707d5 Add secret grade mode (#631) 2022-01-28 20:19:45 +08:00
NOT_A_ROBOT
d4090dea6f Update lang_id.lua (#629) 2022-01-28 20:19:02 +08:00
MrZ_26
ea83add8fa 词典添加secret grade词条 close #628
微调中文词典部分格式
2022-01-26 15:23:54 +08:00
MrZ_26
7687fb2c12 版本推进 2022-01-26 00:10:45 +08:00
MrZ_26
1fb741d7c2 大幅降低高难ai速度 2022-01-25 23:00:24 +08:00
MrZ_26
157f8cc7d5 算数小程序进制更明显 close #624 2022-01-25 03:27:40 +08:00
MrZ_26
846d477e9d 不再限定master_g模式的旋转系统 close #626 2022-01-25 00:54:39 +08:00
Chumo2791
452cdf6ab0 add AUR badge (#627) 2022-01-24 16:51:50 +08:00
NOT_A_ROBOT
e9396c43c9 Improved master_g (#622)
Fixed mroll ending not giving you points in the record, fixed crash when you got a negative grade, added colors that indicate cool/regret
2022-01-24 08:46:01 +08:00
MrZ_26
dd726e75e8 麻将小程序使用自制字符(有些小问题,等之后字体修改) 2022-01-22 17:38:13 +08:00
MrZ_26
a66bb9013a gray背景改名fixColor,允许自定义颜色 2022-01-22 17:16:48 +08:00
MrZ_26
ea0448af5a 修改字体文件名大小写(step 2) 2022-01-21 16:02:54 +08:00
MrZ_26
44735cd6cd 修改字体文件名大小写(step 1) 2022-01-21 16:02:41 +08:00
NOT_A_ROBOT
3956d1d7bc Add Classic Lunatic mode (#619) 2022-01-21 03:09:50 +08:00
MrZ_26
a7a2124bb6 版本推进 2022-01-20 13:27:23 +08:00
sakurw
9399938be0 Update lang_ja.lua (#616) 2022-01-20 13:10:39 +08:00
C₂₉H₂₅N₃O₅
195f9b2c46 字体格式转换为OTF (#615)
* 字体格式转换为OTF

**HERE COMES THE OPENTYPE**
* 更改几个自定义图标的样式
2022-01-20 13:10:11 +08:00
C₂₉H₂₅N₃O₅
d7546e5f41 更新英文说明书 (#614) 2022-01-20 01:39:21 +08:00
NOT_A_ROBOT
888909b48c Re-add classic_l (#612) 2022-01-19 23:46:36 +08:00
MrZ_26
d68f732884 重写说明书的攻击和b2b点数段落,英文和日文需要重翻 2022-01-19 23:43:08 +08:00
MrZ_26
5243ed0c6b 再整理落块后结算顺序 2022-01-19 23:04:46 +08:00
MrZ_26
856c490a2b 再修正master_g的一些细节 2022-01-19 20:02:30 +08:00
MrZ_26
5e9dcc27aa 再更新所有的音效文件 2022-01-19 19:46:27 +08:00
NOT_A_ROBOT
3f129a9585 Fix crash bug on graded master when reaching a very high internal grade 2 (#611)
* Fix crash bug on graded master when reaching a very high internal grade 2
2022-01-19 19:45:59 +08:00
MrZ_26
e682ff1de5 提前修改好更新历史和版本号 2022-01-19 18:46:40 +08:00
MrZ_26
2c064d5809 修复倒计时时不能充das close #610 2022-01-19 18:43:08 +08:00
MrZ_26
e0573382e8 更新manual关于攻击系统的说明 2022-01-19 18:38:57 +08:00
MrZ_26
5a514ce495 修正master_g的规则 2022-01-19 18:10:15 +08:00
MrZ_26
ba4fb00c85 版本推进 2022-01-19 03:51:53 +08:00
MrZ_26
ab02d2063f 修正刚刚合并的日文翻译pr的相关小问题,可以用了 2022-01-19 03:50:07 +08:00
MrZ_26
a6c87d3a1a 替换一处缩进为空格 2022-01-19 03:48:07 +08:00
MrZ_26
f15541db4a master_g模式的cool和regret强制使用英文 2022-01-19 03:48:07 +08:00
Airun
dadd09d25a Done with manual_jp.txt (#605)
* Added draft for jp files (editing)

* Manual_JP.txt Done
2022-01-19 03:47:28 +08:00
C₂₉H₂₅N₃O₅
a7dea4dafe 紧急更新字体 (#606)
* 麻将字符采用立直麻将式命名

* 补上两个缺少的符号
2022-01-19 03:47:10 +08:00
MrZ_26
34ac5eed93 版本推进 2022-01-19 02:43:08 +08:00
MrZ_26
89134d4f07 整理刚增加的模式的代码 2022-01-19 02:43:08 +08:00
NOT_A_ROBOT
58d068b776 Add graded Master mode (#594) 2022-01-19 02:21:34 +08:00
NOT_A_ROBOT
dacefb2b01 classic_h 0.5G now starts on lvl19 (#601)
resolves #598
2022-01-15 22:28:37 +08:00
MrZ_26
efe4f5a210 版本推进 2022-01-15 19:36:26 +08:00
MrZ_26
000188ac86 修正pc是特殊消除但还是会扣因为最后是普通消除的b2b点数 2022-01-15 17:09:17 +08:00
MrZ_26
de6814bd34 修正说明书攻击系统一处顺序问题 2022-01-15 17:07:27 +08:00
MrZ_26
fac020db8c 新增一个赞助者 2022-01-15 15:51:12 +08:00
MrZ_26
d4ec3eefbb 控制台#代码环境微调 2022-01-14 01:02:57 +08:00
MrZ_26
d43e58f450 跟进调整GC模块用法 2022-01-14 01:02:40 +08:00
MrZ_26
6e9bf97d89 更新框架 2022-01-14 01:01:04 +08:00
MrZ_26
e41aefd17c 再更新staff表的翻译人员 2022-01-12 16:56:45 +08:00
MrZ_26
d96c5ca0fa 修改mini方块的实现 2022-01-12 16:24:18 +08:00
MrZ_26
4953abbb8c 更新字体
Co-authored-by: C₂₉H₂₅N₃O₅ <cgu52@wisc.edu>
2022-01-12 13:06:56 +08:00
MrZ_26
637e1a7602 staff表添加一个翻译人员 2022-01-12 12:43:33 +08:00
MrZ_26
55cc3c48be 更新日语翻译
Co-authored-by: YL3383
2022-01-12 12:43:28 +08:00
Airun
d7d9e60b1e Update lang_ja.lua (#592)
Little Fixes
2022-01-10 18:08:45 +08:00
MrZ_26
61218bb942 微调一些语言相关 2022-01-09 18:04:12 +08:00
MrZ_26
d24888cff5 加载完成后也会更新保存一下统计数据 2022-01-08 20:08:49 +08:00
MrZ_26
79cf1cf238 游戏服务器域名设置移到main最后 2022-01-07 18:17:22 +08:00
MrZ_26
1aa0d4927f 版本推进 2022-01-06 17:42:19 +08:00
MrZ_26
59ded87cee 框架跟进 2022-01-06 17:38:11 +08:00
C₂₉H₂₅N₃O₅
6496dc824c 麻将字符采用立直麻将式命名 (#587) 2022-01-06 17:36:59 +08:00
Airun
6c7aff8fd5 Update lang_ja.lua (#590)
Co-authored-by: MrZ_26 <1046101471@qq.com>
2022-01-06 17:35:58 +08:00
sakurw
ed171186a3 Update lang_ja.lua (#589) 2022-01-06 17:32:01 +08:00
MrZ_26
e3a1c9114a 超级消除也会增加b2b点数了 close #585 2022-01-05 22:59:23 +08:00
MrZ_26
4ba05ae80c 暴力修复回合制开关玩家控制的问题(开始摆烂,准备重构) 2022-01-05 19:58:19 +08:00
C₂₉H₂₅N₃O₅
30a700d0be 更新法律信息 (#584)
* 修改日语文件的小错误

* 新增麻将字符 and more

* 字体新增麻将字符
* 字体加入自动hint
* 微调几个表情包

* 更新法律信息

* 更新一个标点符号小问题
2022-01-05 19:39:34 +08:00
NOT_A_ROBOT
d2ba8b5aa9 Add Mono+do+trimino sprint mode (#578) 2022-01-05 14:35:25 +08:00
NOT_A_ROBOT
db17575ca3 Revert commit 58b8f354e0 (#577) 2022-01-05 14:34:40 +08:00
155 changed files with 3941 additions and 1694 deletions

View File

@@ -3,7 +3,7 @@ description: 'download cc into specific dir'
inputs:
tag:
required: false
default:
default: techmino-alize-2
arch:
required: true
dir:

4
.gitmodules vendored
View File

@@ -1,3 +1,3 @@
[submodule "Zframework"]
path = Zframework
url = git@github.com:26F-Studio/Zframework.git
path = Zframework
url = git@github.com:26F-Studio/Zframework.git

View File

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

View File

@@ -51,8 +51,8 @@ local _LOADTIME_=TIME()
--Load modules
Z=require'Zframework'
FONT.load{
norm='parts/fonts/proportional.ttf',
mono='parts/fonts/monospaced.ttf',
norm='parts/fonts/proportional.otf',
mono='parts/fonts/monospaced.otf',
}
FONT.setDefault('norm')
FONT.setFallback('norm')
@@ -159,7 +159,7 @@ do--Z.setCursor
_=BLOCK_COLORS[SETTING.skin[R]]
gc_setColor(_[1],_[2],_[3],min(abs(1-time%2),.3))
_=DSCP[R][0]
gc_draw(TEXTURE.miniBlock[R],x,y,time%3.14159265359*4,16,16,_[2]+.5,#BLOCKS[R][0]-_[1]-.5)
gc_draw(TEXTURE.miniBlock[R],x,y,time%3.14159265359*4,8,8,2*_[2]+1,2*(#BLOCKS[R][0]-_[1])-1)
gc_setColor(1,1,1)
gc_draw(ms.isDown(1)and holdImg or normImg,x,y,nil,nil,nil,8,8)
end
@@ -180,7 +180,7 @@ Z.setOnFnKeys({
end
end
end,
function()print(WIDGET.getSelected()or"no widget selected")end,
function()print(BG.locked)end,
function()for k,v in next,_G do print(k,v)end end,
function()if love['_openConsole']then love['_openConsole']()end end,
})
@@ -190,9 +190,6 @@ Z.setDebugInfo{
{"Voices",VOC.getQueueCount},
{"Audios",love.audio.getSourceCount},
}
Z.setOnResize(function(w,_)
SHADER.warning:send('w',w*SCR.dpi)
end)
do--Z.setOnFocus
local function task_autoSoundOff()
while true do
@@ -288,6 +285,15 @@ IMG.init{
xiaoyaCH='media/image/characters/xiaoya.png',
xiaoyaOmino='media/image/characters/xiaoya_Omino.png',
mikuCH='media/image/characters/miku.png',
z={
character='media/image/characters/z_character.png',
screen1='media/image/characters/z_screen1.png',
screen2='media/image/characters/z_screen2.png',
particle1='media/image/characters/z_particle1.png',
particle2='media/image/characters/z_particle2.png',
particle3='media/image/characters/z_particle3.png',
particle4='media/image/characters/z_particle4.png',
},
electric='media/image/characters/electric.png',
hbm='media/image/characters/hbm.png',
@@ -321,6 +327,7 @@ SKIN.load{
{name="yinyang_scf",path='media/image/skin/yinyang_scf.png'},
{name="cartooncup_earety",path='media/image/skin/cartooncup_earety.png'},
{name="jelly_miya",path='media/image/skin/jelly_miya.png'},
{name="guidetris_xmiao_lusisi",path='media/image/skin/guidetris_xmiao_lusisi.png'},
{name="brick_notypey",path='media/image/skin/brick_notypey.png'},
{name="gem_notypey",path='media/image/skin/gem_notypey.png'},
{name="classic",path='media/image/skin/classic_unknown.png'},
@@ -366,7 +373,6 @@ LANG.init('zh',
{
zh=require'parts.language.lang_zh',
zh_trad=require'parts.language.lang_zh_trad',
zh_full=require'parts.language.lang_zh_full',
en=require'parts.language.lang_en',
fr=require'parts.language.lang_fr',
es=require'parts.language.lang_es',
@@ -550,6 +556,7 @@ do
if type(SETTING.bg)~='string'then SETTING.bg='on'end
if SETTING.skin[18]==10 then SETTING.skin[18]=4 end
if SETTING.reTime>3 or SETTING.reTime<.5 then SETTING.reTime=2 end
if SETTING.locale=='zh_full' then SETTING.locale='zh' end
if RANKS.infinite then RANKS.infinite=0 end
if RANKS.infinite_dig then RANKS.infinite_dig=0 end
if not RANKS.sprint_10l then RANKS.sprint_10l=0 end
@@ -683,3 +690,4 @@ if TABLE.find(arg,'--test')then
love.event.quit(1)
end)
end
WS.switchHost('101.43.110.22','10026','/tech/socket/v1')

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 418 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 693 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 458 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 969 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 488 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -5,19 +5,15 @@ local shader=SHADER.aura
local t
function back.init()
t=math.random()*2600
t=math.random()*260
BG.resize(SCR.w,SCR.h)
end
function back.resize(_,h)
shader:send('w',SCR.W)
shader:send('h',h*SCR.dpi)
end
function back.update(dt)
t=t+dt
t=(t+dt)%2600
end
function back.draw()
gc.clear(.08,.08,.084)
shader:send('t',t)
shader:send('phase',t)
gc.setShader(shader)
gc.rectangle('fill',0,0,SCR.w,SCR.h)
gc.setShader()

View File

@@ -5,18 +5,14 @@ local shader=SHADER.grad1
local t
function back.init()
t=math.random()*2600
back.resize()
end
function back.resize()
shader:send('w',SCR.W)
t=math.random()*260
end
function back.update(dt)
t=t+dt
t=(t+dt)%2600
end
function back.draw()
gc.clear(.08,.08,.084)
shader:send('t',t)
shader:send('phase',t)
gc.setShader(shader)
gc.rectangle('fill',0,0,SCR.w,SCR.h)
gc.setShader()

View File

@@ -5,18 +5,15 @@ local shader=SHADER.grad2
local t
function back.init()
t=math.random()*2600
t=math.random()*260
BG.resize(nil,SCR.h)
end
function back.resize(_,h)
shader:send('h',h*SCR.dpi)
end
function back.update(dt)
t=t+dt
t=(t+dt)%2600
end
function back.draw()
gc.clear(.08,.08,.084)
shader:send('t',t)
shader:send('phase',t)
gc.setShader(shader)
gc.rectangle('fill',0,0,SCR.w,SCR.h)
gc.setShader()

View File

@@ -20,7 +20,7 @@ function back.update()
color=BLOCK_COLORS[SETTING.skin[r]],
x=SCR.w*rnd(),
y=SCR.h*-.05,
k=SCR.rad/100,
k=SCR.rad/200,
ang=rnd()*6.2832,
vy=.5+rnd()*.4,
vx=rnd()*.4-.2,

View File

@@ -47,7 +47,7 @@ function back.draw()
local M=mino[i]
local c=M.color
gc_setColor(c[1],c[2],c[3],.2)
gc_draw(M.block,M.d*cos(M.ang),M.d*sin(M.ang),M.rotate,(18*M.d/SCR.rad)^1.6,nil,M.block:getWidth()/2,M.block:getHeight()/2)
gc_draw(M.block,M.d*cos(M.ang),M.d*sin(M.ang),M.rotate,(12*M.d/SCR.rad)^1.6,nil,M.block:getWidth()/2,M.block:getHeight()/2)
end
gc_translate(-SCR.cx,-SCR.cy)
end

View File

@@ -1,11 +1,11 @@
--Customizable grey background
local gc=love.graphics
local back={}
local brightness=.26
local r,g,b=.26,.26,.26
function back.draw()
gc.clear(brightness,brightness,brightness)
gc.clear(r,g,b)
end
function back.event(b)
brightness=b
function back.event(_r,_g,_b)
r,g,b=_r,_g,_b
end
return back

View File

@@ -6,7 +6,6 @@ local back={}
local t
local colorLib=BLOCK_COLORS
local blocks=BLOCKS
local scs=RSlist.TRS.centerPos
function back.init()
t=rnd()*2600
end
@@ -21,6 +20,6 @@ function back.draw()
end
local _=colorLib[SETTING.skin[R]]
gc.setColor(_[1],_[2],_[3],.12)
gc.draw(TEXTURE.miniBlock[R],SCR.cx,SCR.cy,t%3.1416*6,400*SCR.k,nil,scs[R][0][2]+.5,#blocks[R][0]-scs[R][0][1]-.5)
gc.draw(TEXTURE.miniBlock[R],SCR.cx,SCR.cy,t%3.1416*6,200*SCR.k,nil,2*DSCP[R][0][2]+1,2*(#blocks[R][0]-DSCP[R][0][1])-1)
end
return back

View File

@@ -5,19 +5,15 @@ local shader=SHADER.rgb1
local t
function back.init()
t=math.random()*2600
t=math.random()*260
BG.resize(SCR.w,SCR.h)
end
function back.resize(_,h)
shader:send('w',SCR.W)
shader:send('h',h*SCR.dpi)
end
function back.update(dt)
t=t+dt
t=(t+dt)%2600
end
function back.draw()
gc.clear(.08,.08,.084)
shader:send('t',t)
shader:send('phase',t)
gc.setShader(shader)
gc.rectangle('fill',0,0,SCR.w,SCR.h)
gc.setShader()

View File

@@ -5,19 +5,15 @@ local shader=SHADER.rgb2
local t
function back.init()
t=math.random()*2600
t=math.random()*260
BG.resize(SCR.w,SCR.h)
end
function back.resize(_,h)
shader:send('w',SCR.W)
shader:send('h',h*SCR.dpi)
end
function back.update(dt)
t=t+dt
t=(t+dt)%2600
end
function back.draw()
gc.clear(.08,.08,.084)
shader:send('t',t)
shader:send('phase',t)
gc.setShader(shader)
gc.rectangle('fill',0,0,SCR.w,SCR.h)
gc.setShader()

View File

@@ -19,8 +19,8 @@ function back.draw()
gc.clear(.08,.08,.084)
end
gc.push('transform')
gc.translate(SCR.cx,SCR.cy+20*sin(t*.02))
gc.scale(SCR.k)
gc.replaceTransform(SCR.xOy_m)
gc.translate(0,20*sin(t*.02))
gc.scale(1.26,1.36)
if -t%6.26<.1355 then
gc.translate(60*sin(t*.26),100*sin(t*.626))

View File

@@ -7,18 +7,36 @@ local pcall=pcall
local ins,rem=table.insert,table.remove
local yield=coroutine.yield
local bot_cc={}
function bot_cc:checkDest()
function bot_cc:checkDest(b2b,atk,exblock,yomi)
local dest=self.P.destFX
if not dest then return end
if not (dest.b2b==b2b and dest.attack==atk and dest.extra==exblock) then
print('hope: '..dest.b2b..' '..dest.attack..' '..dest.extra)
print('real: '..b2b..' '..atk..' '..exblock)
print(yomi)
self:lockWrongPlace()
self.P.destFX=nil
return
end
local CB=self.P.cur.bk
for k=1,#dest,2 do
local r=CB[dest[k+1]-self.P.curY+2]
if not r or not r[dest[k]-self.P.curX+2]then
print('wrong place')
self:lockWrongPlace()
self.P.destFX=nil
return
end
end
local should_spawn = self.P:getNextSpawn() - 1
if dest.spawn ~= should_spawn then
assert(dest.spawn > should_spawn)
print('wrong spawn: should be '..dest.spawn..' but '..should_spawn)
print('-- should only happen when camera is going down')
self:lockWrongPlace()
self.P.destFX=nil
return
end
end
function bot_cc:revive()
TABLE.cut(self.P.holdQueue)
@@ -37,10 +55,10 @@ function bot_cc:thread()
ccBot:think()
--Poll keys
local success,result,dest,hold,move
local success,result,dest,hold,move,b2b,attack,extra,spawn
repeat
yield()
success,result,dest,hold,move=pcall(ccBot.getMove,ccBot)
success,result,dest,hold,move,b2b,attack,extra,spawn=pcall(ccBot.getMove,ccBot)
until not success or result==0 or result==2
if not success then break end
if result==2 then
@@ -50,6 +68,10 @@ function bot_cc:thread()
dest[7],dest[8]=dest[2][1],dest[2][2]
dest[1],dest[2]=dest[3][1],dest[3][2]
dest[3],dest[4]=dest[4][1],dest[4][2]
dest.b2b = b2b
dest.attack = attack
dest.extra = extra
dest.spawn = spawn
P.destFX=dest
if hold then--Hold
keys[1]=8
@@ -82,8 +104,16 @@ function bot_cc:updateField()
F[i],i=F0[y][x]>0,i+1
end end
while i<=400 do F[i],i=false,i+1 end
if not pcall(self.ccBot.reset,self.ccBot,F,P.b2b>=100,P.combo)then
local y = P:getNextSpawn()-1
if not pcall(self.ccBot.reset,self.ccBot,F,P.b2b,P.combo,P.stat.pc,P.stat.row,y)then
print("CC is dead ("..P.id..")","error")
for y=#F0,1,-1 do
local s=""
for x=1,10 do
s=s..(F[(y-1)*10+x] and "[]" or "..")
end
print(s)
end
end
end
function bot_cc:switch20G()

View File

@@ -49,7 +49,7 @@ local botMeta={__index=_undefMethod}
local BOT={}
local AISpeed={60,50,40,30,20,14,10,6,4,3}
local AISpeed={60,50,42,34,27,21,16,12,9,6}
--[[
arg={
next: number of nexts

View File

@@ -213,91 +213,93 @@ local L={
psOption= 0xF01A5,
},
mahjong={--F0200~F027F
wan1= 0xF0200,
wan2= 0xF0201,
wan3= 0xF0202,
wan4= 0xF0203,
wan5= 0xF0204,
wan6= 0xF0205,
wan7= 0xF0206,
wan8= 0xF0207,
wan9= 0xF0208,
tiao1= 0xF0209,
tiao2= 0xF020A,
tiao3= 0xF020B,
tiao4= 0xF020C,
tiao5= 0xF020D,
tiao6= 0xF020E,
tiao7= 0xF020F,
tiao8= 0xF0210,
tiao9= 0xF0211,
tong1= 0xF0212,
tong2= 0xF0213,
tong3= 0xF0214,
tong4= 0xF0215,
tong5= 0xF0216,
tong6= 0xF0217,
tong7= 0xF0218,
tong8= 0xF0219,
tong9= 0xF021A,
east= 0xF021B,
south= 0xF021C,
west= 0xF021D,
north= 0xF021E,
center= 0xF021F,
fortune= 0xF0220,
soap= 0xF0221,
fortuneAlt= 0xF0222,
soapAlt= 0xF0223,
spring= 0xF0224,
summer= 0xF0225,
autumn= 0xF0226,
winter= 0xF0227,
plum= 0xF0228,
orchid= 0xF0229,
chry= 0xF022A,
bamboo= 0xF022B,
wan5Red= 0xF022C,
tiao5Red= 0xF022D,
tong5Red= 0xF022E,
wan1Base= 0xF022F,
wan2Base= 0xF0230,
wan3Base= 0xF0231,
wan4Base= 0xF0232,
wan5Base= 0xF0233,
wan6Base= 0xF0234,
wan7Base= 0xF0235,
wan8Base= 0xF0236,
wan9Base= 0xF0237,
wanComb= 0xF0238,
tiao1Base= 0xF0239,
tiao1Comb= 0xF023A,
tiao5Base= 0xF023B,
tiao5Comb= 0xF023C,
tiao7Base= 0xF023D,
tiao7Comb= 0xF023E,
tiao9Base= 0xF023F,
tiao9Comb= 0xF0240,
tong2Base= 0xF0241,
tong2Comb= 0xF0242,
tong3Base= 0xF0243,
tong3Comb1= 0xF0244,
tong3Comb2= 0xF0245,
tong4Base= 0xF0246,
tong4Comb= 0xF0247,
tong5Base= 0xF0248,
tong5Comb1= 0xF0249,
tong5Comb2= 0xF024A,
tong6Base= 0xF024B,
tong6Comb= 0xF024C,
tong7Base= 0xF024D,
tong7Comb= 0xF024E,
tong9Base= 0xF024F,
tong9Comb1= 0xF0250,
tong9Comb2= 0xF0251,
frameComb= 0xF0252,
m1= 0xF0200,
m2= 0xF0201,
m3= 0xF0202,
m4= 0xF0203,
m5= 0xF0204,
m6= 0xF0205,
m7= 0xF0206,
m8= 0xF0207,
m9= 0xF0208,
s1= 0xF0209,
s2= 0xF020A,
s3= 0xF020B,
s4= 0xF020C,
s5= 0xF020D,
s6= 0xF020E,
s7= 0xF020F,
s8= 0xF0210,
s9= 0xF0211,
p1= 0xF0212,
p2= 0xF0213,
p3= 0xF0214,
p4= 0xF0215,
p5= 0xF0216,
p6= 0xF0217,
p7= 0xF0218,
p8= 0xF0219,
p9= 0xF021A,
ton= 0xF021B,
nan= 0xF021C,
sha= 0xF021D,
pe= 0xF021E,
chun= 0xF021F,
hatsu= 0xF0220,
haku= 0xF0221,
hatsuAlt= 0xF0222,
hakuAlt= 0xF0223,
haru= 0xF0224,
natsu= 0xF0225,
aki= 0xF0226,
fuyu= 0xF0227,
ume= 0xF0228,
ran= 0xF0229,
kiku= 0xF022A,
take= 0xF022B,
m5Red= 0xF022C,
s5Red= 0xF022D,
p5Red= 0xF022E,
m1Base= 0xF022F,
m2Base= 0xF0230,
m3Base= 0xF0231,
m4Base= 0xF0232,
m5Base= 0xF0233,
m6Base= 0xF0234,
m7Base= 0xF0235,
m8Base= 0xF0236,
m9Base= 0xF0237,
mComb= 0xF0238,
s1Base= 0xF0239,
s1Comb= 0xF023A,
s5Base= 0xF023B,
s5Comb= 0xF023C,
s7Base= 0xF023D,
s7Comb= 0xF023E,
s9Base= 0xF023F,
s9Comb= 0xF0240,
p2Base= 0xF0241,
p2Comb= 0xF0242,
p3Base= 0xF0243,
p3Comb1= 0xF0244,
p3Comb2= 0xF0245,
p4Base= 0xF0246,
p4Comb= 0xF0247,
p5Base= 0xF0248,
p5Comb1= 0xF0249,
p5Comb2= 0xF024A,
p6Base= 0xF024B,
p6Comb= 0xF024C,
p7Base= 0xF024D,
p7Comb= 0xF024E,
p9Base= 0xF024F,
p9Comb1= 0xF0250,
p9Comb2= 0xF0251,
frameComb= 0xF0252,
s1j= 0xF0253,
s1jBase= 0xF0254,
s1jComb= 0xF0255,
}
}
for _,pack in next,L do

View File

@@ -1,3 +1,28 @@
local function GetLevelStr(lvl)
local list={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","00","0A","14","1E","28","32","3C","46","50","5A","64","6E","78","82","8C","96","A0","AA","B4","BE","C6","20","E6","20","06","21","26","21","46","21","66","21","86","21","A6","21","C6","21","E6","21","06","22","26","22","46","22","66","22","86","22","A6","22","C6","22","E6","22","06","23","26","23","85","A8","29","F0","4A","4A","4A","4A","8D","07","20","A5","A8","29","0F","8D","07","20","60","A6","49","E0","15","10","53","BD","D6","96","A8","8A","0A","AA","E8","BD","EA","96","8D","06","20","CA","A5","BE","C9","01","F0","1E","A5","B9","C9","05","F0","0C","BD","EA","96","38","E9","02","8D","06","20","4C","67","97","BD","EA","96","18","69","0C","8D","06","20","4C","67","97","BD","EA","96","18","69","06","8D","06","20","A2","0A","B1","B8","8D","07","20","C8","CA","D0","F7","E6","49","A5","49","C9","14","30","04","A9","20","85","49","60","A5","B1","29","03","D0","78","A9","00","85","AA","A6","AA","B5","4A","F0","5C","0A","A8","B9","EA","96","85","A8","A5","BE","C9","01","D0","0A","A5","A8","18","69","06","85","A8","4C","BD","97","A5","B9","C9","04","D0","0A","A5","A8","38","E9","02","85","A8","4C","BD","97","A5","A8"}
list[0]="00"
lvl=lvl%256
return list[lvl]
end
local function GetGravity(lvl)
lvl=lvl%256
return
lvl==0 and 48 or
lvl==1 and 43 or
lvl==2 and 38 or
lvl==3 and 33 or
lvl==4 and 28 or
lvl==5 and 23 or
lvl==6 and 18 or
lvl==7 and 13 or
lvl==8 and 8 or
lvl==9 and 6 or
lvl<13 and 5 or
lvl<16 and 4 or
lvl<19 and 3 or
lvl<29 and 2 or
1
end
local gc_setColor=love.graphics.setColor
return{
das=16,arr=6,
@@ -15,8 +40,7 @@ return{
keyCancel={5,6},
mesDisp=function(P)
setFont(75)
local r=P.modeData.target/10
mStr(r<10 and 9 or r<30 and r or("%02x"):format(r*10-300),63,210)
mStr(GetLevelStr(P.modeData.lvl),63,210)
mText(TEXTOBJ.speedLV,63,290)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
if P.modeData.drought>7 then
@@ -32,27 +56,22 @@ return{
end
end,
task=function(P)
P.modeData.lvl=9
P.modeData.target=10
end,
hook_drop=function(P)
local D=P.modeData
D.drought=P.lastPiece.id==7 and 0 or D.drought+1
if P.stat.row>=D.target then
if D.target==110 then
P.gameEnv.drop,P.gameEnv.lock=5,5
P.gameEnv.sddas,P.gameEnv.sdarr=5,5
if D.target>=100 then
D.lvl=D.lvl+1
end
local dropSpd=GetGravity(D.lvl)
if D.target==200 then P.win('finish') return
elseif dropSpd~=P.gameEnv.drop then
P.gameEnv.drop,P.gameEnv.lock=dropSpd,dropSpd
P.gameEnv.sddas,P.gameEnv.sdarr=dropSpd,dropSpd
SFX.play('warn_2',.7)
elseif D.target==140 then
P.gameEnv.drop,P.gameEnv.lock=4,4
P.gameEnv.sddas,P.gameEnv.sdarr=4,4
SFX.play('warn_2',.7)
elseif D.target==170 then
P.gameEnv.drop,P.gameEnv.lock=3,3
P.gameEnv.sddas,P.gameEnv.sdarr=3,3
SFX.play('warn_2',.7)
elseif D.target==200 then
P:win('finish')
return
else
SFX.play('reach')
end

View File

@@ -1,3 +1,28 @@
local function GetLevelStr(lvl)
local list={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","00","0A","14","1E","28","32","3C","46","50","5A","64","6E","78","82","8C","96","A0","AA","B4","BE","C6","20","E6","20","06","21","26","21","46","21","66","21","86","21","A6","21","C6","21","E6","21","06","22","26","22","46","22","66","22","86","22","A6","22","C6","22","E6","22","06","23","26","23","85","A8","29","F0","4A","4A","4A","4A","8D","07","20","A5","A8","29","0F","8D","07","20","60","A6","49","E0","15","10","53","BD","D6","96","A8","8A","0A","AA","E8","BD","EA","96","8D","06","20","CA","A5","BE","C9","01","F0","1E","A5","B9","C9","05","F0","0C","BD","EA","96","38","E9","02","8D","06","20","4C","67","97","BD","EA","96","18","69","0C","8D","06","20","4C","67","97","BD","EA","96","18","69","06","8D","06","20","A2","0A","B1","B8","8D","07","20","C8","CA","D0","F7","E6","49","A5","49","C9","14","30","04","A9","20","85","49","60","A5","B1","29","03","D0","78","A9","00","85","AA","A6","AA","B5","4A","F0","5C","0A","A8","B9","EA","96","85","A8","A5","BE","C9","01","D0","0A","A5","A8","18","69","06","85","A8","4C","BD","97","A5","B9","C9","04","D0","0A","A5","A8","38","E9","02","85","A8","4C","BD","97","A5","A8"}
list[0]="00"
lvl=lvl%256
return list[lvl]
end
local function GetGravity(lvl)
lvl=lvl%256
return
lvl==0 and 48 or
lvl==1 and 43 or
lvl==2 and 38 or
lvl==3 and 33 or
lvl==4 and 28 or
lvl==5 and 23 or
lvl==6 and 18 or
lvl==7 and 13 or
lvl==8 and 8 or
lvl==9 and 6 or
lvl<13 and 5 or
lvl<16 and 4 or
lvl<19 and 3 or
lvl<29 and 2 or
1
end
local gc_setColor=love.graphics.setColor
return{
das=16,arr=6,
@@ -15,8 +40,7 @@ return{
keyCancel={5,6},
mesDisp=function(P)
setFont(75)
local r=P.modeData.target/10
mStr(r<11 and 18 or r<22 and r+8 or("%02x"):format(r*10-220),63,210)
mStr(GetLevelStr(P.modeData.lvl),63,210)
mText(TEXTOBJ.speedLV,63,290)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
if P.modeData.drought>7 then
@@ -32,19 +56,22 @@ return{
end
end,
task=function(P)
P.modeData.lvl=18
P.modeData.target=10
end,
hook_drop=function(P)
local D=P.modeData
D.drought=P.lastPiece.id==7 and 0 or D.drought+1
if P.stat.row>=D.target then
if D.target==110 then
P.gameEnv.drop,P.gameEnv.lock=2,2
P.gameEnv.sddas,P.gameEnv.sdarr=2,2
if D.target>=100 then
D.lvl=D.lvl+1
end
local dropSpd=GetGravity(D.lvl)
if D.target==200 then P.win('finish') return
elseif dropSpd~=P.gameEnv.drop then
P.gameEnv.drop,P.gameEnv.lock=dropSpd,dropSpd
P.gameEnv.sddas,P.gameEnv.sdarr=dropSpd,dropSpd
SFX.play('warn_1')
elseif D.target==200 then
P:win('finish')
return
else
SFX.play('reach')
end

View File

@@ -0,0 +1,80 @@
local function GetLevelStr(lvl)
local list={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","00","0A","14","1E","28","32","3C","46","50","5A","64","6E","78","82","8C","96","A0","AA","B4","BE","C6","20","E6","20","06","21","26","21","46","21","66","21","86","21","A6","21","C6","21","E6","21","06","22","26","22","46","22","66","22","86","22","A6","22","C6","22","E6","22","06","23","26","23","85","A8","29","F0","4A","4A","4A","4A","8D","07","20","A5","A8","29","0F","8D","07","20","60","A6","49","E0","15","10","53","BD","D6","96","A8","8A","0A","AA","E8","BD","EA","96","8D","06","20","CA","A5","BE","C9","01","F0","1E","A5","B9","C9","05","F0","0C","BD","EA","96","38","E9","02","8D","06","20","4C","67","97","BD","EA","96","18","69","0C","8D","06","20","4C","67","97","BD","EA","96","18","69","06","8D","06","20","A2","0A","B1","B8","8D","07","20","C8","CA","D0","F7","E6","49","A5","49","C9","14","30","04","A9","20","85","49","60","A5","B1","29","03","D0","78","A9","00","85","AA","A6","AA","B5","4A","F0","5C","0A","A8","B9","EA","96","85","A8","A5","BE","C9","01","D0","0A","A5","A8","18","69","06","85","A8","4C","BD","97","A5","B9","C9","04","D0","0A","A5","A8","38","E9","02","85","A8","4C","BD","97","A5","A8"}
list[0]="00"
lvl=lvl%256
return list[lvl]
end
local function GetGravity(lvl)
lvl=lvl%256
return
lvl==0 and 48 or
lvl==1 and 43 or
lvl==2 and 38 or
lvl==3 and 33 or
lvl==4 and 28 or
lvl==5 and 23 or
lvl==6 and 18 or
lvl==7 and 13 or
lvl==8 and 8 or
lvl==9 and 6 or
lvl<13 and 5 or
lvl<16 and 4 or
lvl<19 and 3 or
lvl<29 and 2 or
1
end
local gc_setColor=love.graphics.setColor
return{
das=16,arr=6,
sddas=2,sdarr=2,
irs=false,ims=false,
drop=2,lock=2,
wait=10,fall=25,
freshLimit=0,
fieldH=19,
nextCount=1,
holdCount=0,
RS='Classic',
sequence='rnd',
noTele=true,
keyCancel={5,6},
mesDisp=function(P)
setFont(75)
mStr(GetLevelStr(P.modeData.lvl),63,210)
mText(TEXTOBJ.speedLV,63,290)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
if P.modeData.drought>7 then
if P.modeData.drought<=14 then
gc_setColor(1,1,1,P.modeData.drought/7-1)
else
local gb=P.modeData.drought<=21 and 2-P.modeData.drought/14 or .5
gc_setColor(1,gb,gb)
end
setFont(50)
mStr(P.modeData.drought,63,130)
mDraw(MODES.drought_l.icon,63,200,nil,.5)
end
end,
task=function(P)
P.modeData.lvl=19
P.modeData.target=10
end,
hook_drop=function(P)
local D=P.modeData
D.drought=P.lastPiece.id==7 and 0 or D.drought+1
if P.stat.row>=D.target then
--if D.target>=200 then
D.lvl=D.lvl+1
--end
local dropSpd=GetGravity(D.lvl)
if dropSpd~=P.gameEnv.drop then
P.gameEnv.drop,P.gameEnv.lock=dropSpd,dropSpd
P.gameEnv.sddas,P.gameEnv.sdarr=dropSpd,dropSpd
SFX.play('warn_1')
else
SFX.play('reach')
end
D.target=D.target+10
end
end
}

View File

@@ -1,3 +1,28 @@
local function GetLevelStr(lvl)
local list={"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","00","0A","14","1E","28","32","3C","46","50","5A","64","6E","78","82","8C","96","A0","AA","B4","BE","C6","20","E6","20","06","21","26","21","46","21","66","21","86","21","A6","21","C6","21","E6","21","06","22","26","22","46","22","66","22","86","22","A6","22","C6","22","E6","22","06","23","26","23","85","A8","29","F0","4A","4A","4A","4A","8D","07","20","A5","A8","29","0F","8D","07","20","60","A6","49","E0","15","10","53","BD","D6","96","A8","8A","0A","AA","E8","BD","EA","96","8D","06","20","CA","A5","BE","C9","01","F0","1E","A5","B9","C9","05","F0","0C","BD","EA","96","38","E9","02","8D","06","20","4C","67","97","BD","EA","96","18","69","0C","8D","06","20","4C","67","97","BD","EA","96","18","69","06","8D","06","20","A2","0A","B1","B8","8D","07","20","C8","CA","D0","F7","E6","49","A5","49","C9","14","30","04","A9","20","85","49","60","A5","B1","29","03","D0","78","A9","00","85","AA","A6","AA","B5","4A","F0","5C","0A","A8","B9","EA","96","85","A8","A5","BE","C9","01","D0","0A","A5","A8","18","69","06","85","A8","4C","BD","97","A5","B9","C9","04","D0","0A","A5","A8","38","E9","02","85","A8","4C","BD","97","A5","A8"}
list[0]="00"
lvl=lvl%256
return list[lvl]
end
local function GetGravity(lvl)
lvl=lvl%256
return
lvl==0 and 48 or
lvl==1 and 43 or
lvl==2 and 38 or
lvl==3 and 33 or
lvl==4 and 28 or
lvl==5 and 23 or
lvl==6 and 18 or
lvl==7 and 13 or
lvl==8 and 8 or
lvl==9 and 6 or
lvl<13 and 5 or
lvl<16 and 4 or
lvl<19 and 3 or
lvl<29 and 2 or
1
end
local gc_setColor=love.graphics.setColor
return{
das=16,arr=6,
@@ -15,8 +40,7 @@ return{
keyCancel={5,6},
mesDisp=function(P)
setFont(75)
local r=P.modeData.target/10
mStr(r==1 and 29 or("%02x"):format(r*10-20),63,210)
mStr(GetLevelStr(P.modeData.lvl),63,210)
mText(TEXTOBJ.speedLV,63,290)
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
if P.modeData.drought>7 then
@@ -32,18 +56,17 @@ return{
end
end,
task=function(P)
P.modeData.lvl=29
P.modeData.target=10
end,
hook_drop=function(P)
local D=P.modeData
D.drought=P.lastPiece.id==7 and 0 or D.drought+1
if P.stat.row>=D.target then
if D.target==100 then
P:win('finish')
return
end
D.target=D.target+10
if P.stat.row>=D.target then
if D.target>=200 then P.win('finish') return end
SFX.play('reach')
D.lvl=D.lvl+1
D.target=D.target+10
end
end,
}

View File

@@ -0,0 +1,326 @@
local gc=love.graphics
local regretDelay=-1
local int_grade=0
local grade_points=0
local int_grade_boosts={0,1,2,3,4,5,5,6,6,7,7,7,8,8,8,9,9,9,10,11,12,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26}
local coolList={false,false,false,false,false,false,false,false,false}
local regretList={false,false,false,false,false,false,false,false,false,false}
local gradeList={
"9","8","7","6","5","4","3","2","1",
"S1","S2","S3","S4","S5","S6","S7","S8","S9",
"m1","m2","m3","m4","m5","m6","m7","m8","m9",
"M","MK","MV","MO","MM-","MM","MM+","GM-","GM","GM+","TM-","TM","TM+"
}
local spd_lvl=0
local cools=0
local regrets=0
local prevSectTime=0
local isInRoll=false
local rollGrades=0
local cool_time={3120,3120,2940,2700,2700,2520,2520,2280,2280,0}
local reg_time= {5400,4500,4500,4080,3600,3600,3000,3000,3000,3000}
local prevDrop70=false --determines if previous piece has level less than __70
local nextSpeedUp=false --determines if the next section speed should be boosted by 100
local isInRollTrans=false
local function getGrav(l)
return
l<30 and 64 or
l<35 and 43 or
l<40 and 32 or
l<50 and 26 or
l<60 and 21 or
l<70 and 16 or
l<80 and 8 or
l<90 and 6 or
l<120 and 4 or
l<160 and 3 or
l<200 and 2 or
l<220 and 64 or
l<230 and 8 or
l<233 and 4 or
l<236 and 3 or
l<243 and 2 or
l<300 and 1 or
l<360 and 0.5 or
l<450 and 0.25 or
0
end
local function getLock(l)
return
l<900 and 30 or
l<1100 and 19 or
15
end
local function getWait(l)
return
l<700 and 23 or
l<800 and 16 or
l<1000 and 12 or
l<1100 and 7 or
6
end
local function getFall(l)
return
l<500 and 25 or
l<600 and 18 or
l<700 and 12 or
l<800 and 8 or
4
end
local function getDas(l)
return
l<500 and 10 or
l<900 and 8 or
6
end
local function getGrade()
if int_grade==nil then int_grade=0 end
if rollGrades==nil then rollGrades=0 end
return gradeList[math.max(math.min(math.floor(int_grade_boosts[math.min(int_grade+1,#int_grade_boosts)]+rollGrades+cools+1-regrets),#gradeList),1)]
end
local function addGrade(row, cmb, lvl) -- IGS = internal grade system
if row<1 then return end
local pts=0
local cmb_mult=1.0
local lvl_mult=math.floor(lvl/250)+1
if row==1 then
pts=int_grade<5 and 10 or int_grade<10 and 5 or 2
cmb_mult=1.0
elseif row==2 then
pts=int_grade<3 and 20 or int_grade<6 and 15 or int_grade<10 and 10 or 12
cmb_mult=cmb==1 and 1 or cmb<4 and 1.2 or cmb<8 and 1.4 or cmb<10 and 1.5 or 2.0
elseif row==3 then
pts=int_grade==0 and 40 or int_grade<4 and 30 or int_grade<7 and 20 or int_grade<10 and 15 or 13
cmb_mult=cmb==1 and 1 or cmb<10 and 1+(cmb+2)*0.1 or 2
else
pts=int_grade==0 and 50 or int_grade<5 and 40 or 30
cmb_mult=cmb==1 and 1 or cmb==2 and 1.5 or cmb<6 and (0.2*cmb)+1.2 or cmb<10 and (0.1*cmb)+1.7 or 3
end
grade_points=grade_points+(pts*cmb_mult*lvl_mult)
if grade_points>=100 then
grade_points=0
int_grade=int_grade+1
end
end
return{
drop=64,
lock=30,
wait=23,
fall=25,
keyCancel={10,11,12,14,15,16,17,18,19,20},
das=16,arr=1,
minsdarr=1,
ihs=true,irs=true,ims=false,
mesDisp=function(P)
gc.setColor(1,1,1,1)
setFont(45)
mText(TEXTOBJ.grade,63,180)
setFont(60)
mStr(getGrade(),63,110) -- draw grade
for i=1,10 do -- draw cool/regret history
if not (coolList[i] or regretList[i]) then -- neither cool nor regret
gc.setColor(0.6,0.6,0.6,P.modeData.pt<(i-1)*100 and 0.25 or 0.6)
else
gc.setColor(regretList[i] and 1 or 0, coolList[i] and 1 or 0, 0, 1)
end
gc.circle('fill',-10,150+i*25,10)
gc.setColor(1,1,1,1)
end
if isInRoll then
setFont(20)
mStr(("%.1f"):format(rollGrades),63,208) -- draw roll grades
gc.setLineWidth(2)
gc.setColor(.98,.98,.98,.8)
gc.rectangle('line',0,240,126,80,4)
gc.setColor(.98,.98,.98,.4)
gc.rectangle('fill',0+2,240+2,126-4,80-4,2) -- draw time box
setFont(45)
local t=(P.stat.frame-prevSectTime)/60
local T=("%.1f"):format(60-t)
gc.setColor(COLOR.dH)
mStr(T,65,250) -- draw time
t=t/60
gc.setColor(1.7*t,2.3-2*t,.3)
mStr(T,63,248)
else
-- draw level counter
setFont(20)
mStr(grade_points,63,208)
setFont(45)
if coolList[math.ceil(P.modeData.pt/100+0.01)] then
gc.setColor(0,1,0,1)
elseif P.stat.frame-prevSectTime > cool_time[math.ceil(P.modeData.pt/100+0.01)] then
gc.setColor(0.7,0.7,0.7,1)
end
if coolList[math.ceil(P.modeData.pt/100+0.01)] and regretList[math.ceil(P.modeData.pt/100+0.01)] then
gc.setColor(1,1,0,1)
elseif regretList[math.ceil(P.modeData.pt/100+0.01)] then
gc.setColor(1,0,0,1)
end
PLY.draw.drawProgress(P.modeData.pt,P.modeData.target)
end
end,
hook_drop=function(P)
local D=P.modeData
local c=#P.clearedRow
if cools>8 and isInRoll then
rollGrades=rollGrades+(c==4 and 1 or 0.1*c)
return
elseif isInRoll then
rollGrades=rollGrades+(c==4 and 0.26 or 0.04*c)
return
end
if c==0 and D.pt+1>=D.target then return end
local s=c<3 and c+1 or c==3 and 5 or 7
if P.combo>7 then s=s+2
elseif P.combo>3 then s=s+1
end
addGrade(c,P.combo,D.pt)
D.pt=D.pt+s
spd_lvl=spd_lvl+1
P.gameEnv.drop=getGrav(spd_lvl)
if(P.gameEnv.drop==0) then
P:set20G(true)
end
if D.pt%100>70 and not prevDrop70 then
if P.stat.frame-prevSectTime < cool_time[math.ceil(D.pt/100)] then
cools=cools+1
coolList[math.ceil(D.pt/100)]=true
P:_showText("COOL!",0,-120,80,'fly',.8)
nextSpeedUp=true
end
prevDrop70=true
end
if D.pt+1==D.target then
SFX.play('warn_1')
elseif D.pt>=D.target then--Level up!
spd_lvl=nextSpeedUp and spd_lvl+100 or spd_lvl
nextSpeedUp=false
prevDrop70=false
s=D.target/100
local E=P.gameEnv
E.lock=getLock(spd_lvl)
E.wait=getWait(spd_lvl)
E.fall=getFall(spd_lvl)
E.das=getDas(spd_lvl)
if P.stat.frame-prevSectTime > reg_time[math.ceil(s)] then
regrets=regrets+1
regretDelay=60
end
prevSectTime=P.stat.frame
if s==2 then
BG.set('rainbow')
elseif s==4 then
BG.set('rainbow2')
elseif s==5 then
if P.stat.frame>420*60 then
D.pt=500
P:win('finish')
return
else
BG.set('glow')
BGM.play('secret7th remix')
end
elseif s==6 then
BG.set('lightning')
elseif s>9 then
if cools>8 then
if E.lockFX and E.lockFX>1 then E.lockFX=1 end
P:setInvisible(5)
else
P:setInvisible(300)
end
D.pt=999
P.waiting=240
BGM.stop()
isInRollTrans=true
return
end
D.target=D.target<900 and D.target+100 or 999
P:stageComplete(s)
SFX.play('reach')
end
end,
task=function(P)
regretDelay=-1
P.modeData.pt=0
P.modeData.target=100
int_grade=0
grade_points=0
rollGrades=0
spd_lvl=0
cools=0
regrets=0
prevSectTime=0
isInRoll=false
isInRollTrans=false
prevDrop70=false
nextSpeedUp=false
coolList={false,false,false,false,false,false,false,false,false}
regretList={false,false,false,false,false,false,false,false,false,false}
local decayRate={125,80,80,50,45,45,45,40,40,40,40,40,30,30,30,20,20,20,20,20,15,15,15,15,15,15,15,15,15,15,10,10,10,9,9,9,8,8,8,7,7,7,6}
local decayTimer=0
while true do
YIELD()
P.modeData.grade=getGrade()
P.modeData.gradePts=math.max(math.min(math.floor(int_grade_boosts[math.min(int_grade+1,#int_grade_boosts)]+rollGrades+cools+1-regrets),#gradeList),1)
if P.stat.frame-prevSectTime > reg_time[math.ceil(P.modeData.pt/100+0.01)] and not (isInRoll or isInRollTrans) then
regretList[math.ceil(P.modeData.pt/100)]=true
end
if regretDelay>-1 then
regretDelay=regretDelay-1
if regretDelay==-1 then P:_showText("REGRET!!",0,-120,80,'beat',.8) end
end
if isInRollTrans then
if P.waiting>=220 then
--Make field invisible
for y=1,#P.field do for x=1,10 do
P.visTime[y][x]=P.waiting-220
end end
elseif P.waiting==190 then
TABLE.cut(P.field)
TABLE.cut(P.visTime)
elseif P.waiting==180 then
playReadySFX(3,3)
elseif P.waiting==120 then
playReadySFX(2,1)
elseif P.waiting==60 then
playReadySFX(1,1)
elseif P.waiting==1 then
playReadySFX(0,1)
isInRollTrans=false
isInRoll=true
BGM.play('hope')
BG.set('blockspace')
prevSectTime=P.stat.frame
end
end
if P.waiting<=0 and grade_points>0 and not isInRoll then
decayTimer=decayTimer+1
if decayTimer>=decayRate[math.min(int_grade+1,#decayRate)] then
decayTimer=0
grade_points=grade_points-1
end
elseif isInRoll and P.stat.frame>=prevSectTime+3599 then
rollGrades=rollGrades+(cools>8 and 1.6 or 0.5)
P.modeData.grade=getGrade()
P.modeData.gradePts=math.min(math.floor(int_grade_boosts[math.min(int_grade+1,#int_grade_boosts)]+rollGrades+cools+1-regrets),#gradeList)
YIELD()
P:win('finish')
end
end
end,
}

View File

@@ -20,7 +20,13 @@ return{
local D=P.modeData
local c=#P.clearedRow
if c==0 and D.pt%100==99 then return end
if c==0 and D.pt%100==99 then
if D.pt<1000 then
hidetimer=0-inv_wait[(P.modeData.pt/100-(P.modeData.pt%100)/100)+1]
if c>0 then hidetimer=hidetimer-inv_fall[(P.modeData.pt/100-(P.modeData.pt%100)/100)+1]end
end
return
end
local s=c<3 and c+1 or c==3 and 5 or 7
if P.combo>7 then s=s+2
elseif P.combo>3 then s=s+1
@@ -50,6 +56,8 @@ return{
elseif s==7 then
E.das=6
BGM.play('far')
elseif s==8 then
BG.set('none')
elseif s==10 then
D.pt=1000
P:win('finish')

View File

@@ -6,7 +6,7 @@ return{
mText(TEXTOBJ.pc,63,410)
end,
hook_drop=function(P)
if P.lastPiece.pc and P.stat.row%4==0 then
if P.lastPiece.pc then
P.gameEnv.heightLimit=4
if P.stat.pc%5==0 then
P.gameEnv.drop=math.max(P.gameEnv.drop-1,1)

View File

@@ -0,0 +1,54 @@
local gc_setColor,gc_draw=love.graphics.setColor,love.graphics.draw
local ply_applyField=PLY.draw.applyField
local function GetOpenHole(num)
return -math.abs(((num-1) % 18)-9)+10
end
local F={}
local ranks={"10","9","8","7","6","5","4","3","2","1","S1","S2","S3","S4","S5","S6","S7","S8","S9","GM","GM+","TM","TM+","TM+₂","TM+₃", "TM+₄","TM+₅"}
-- lines: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
return{
fkey1=function(P)P.modeData.showGuide=not P.modeData.showGuide end,
mesDisp=function(P)
mText(TEXTOBJ.grade,63,190)
setFont(55)
mStr(ranks[P.modeData.rankPts],63,125)
ply_applyField(P)
local mark=TEXTURE.puzzleMark
gc_setColor(1,1,1)
if P.modeData.showGuide then
for y=1,P.modeData.rankPts+1 do for x=1,10 do
local T=F[y][x]
if T~=0 then
gc_draw(mark[T],30*x-30,600-30*y)
end
end end
end
PLY.draw.cancelField(P)
end,
task=function(P)
P.modeData.rankPts=1
P.modeData.showGuide=true
for i=1,50 do
F[i] = {}
local h=GetOpenHole(i)
for j=1,10 do
F[i][j]=h==j and -1 or 21
end
end
end,
hook_drop=function(P)
local D=P.modeData
D.rankPts=1
for i=1,#P.field do
local h=GetOpenHole(i)
for j=1,10 do
if P.field[i][j]>0 and h==j then return end
if P.field[i][j]==0 and h~=j then return end
end
if i==#P.field then return end
if P.field[i+1][h]==0 then return end
D.rankPts=D.rankPts+1
end
end
}

BIN
parts/fonts/japan.otf Normal file

Binary file not shown.

BIN
parts/fonts/monospaced.otf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -165,17 +165,15 @@ do--function applySettings()
BG.set()
elseif SETTING.bg=='off'then
BG.unlock()
BG.set('gray')
BG.send(SETTING.bgAlpha)
BG.set('fixColor',SETTING.bgAlpha,SETTING.bgAlpha,SETTING.bgAlpha)
BG.lock()
elseif SETTING.bg=='custom'then
if love.filesystem.getInfo('conf/customBG')then
local res,image=pcall(gc.newImage,love.filesystem.newFile('conf/customBG'))
if res then
BG.unlock()
BG.set('custom')
gc.setDefaultFilter('linear','linear')
BG.send(SETTING.bgAlpha,image)
BG.set('custom',SETTING.bgAlpha,image)
gc.setDefaultFilter('nearest','nearest')
BG.lock()
else
@@ -184,8 +182,7 @@ do--function applySettings()
else--Switch off when custom BG not found
SETTING.bg='off'
BG.unlock()
BG.set('gray')
BG.send(SETTING.bgAlpha)
BG.set('fixColor',SETTING.bgAlpha,SETTING.bgAlpha,SETTING.bgAlpha)
BG.lock()
end
end
@@ -714,7 +711,7 @@ do--function resetGameData(args)
local gameSetting={
--Tuning
'das','arr','dascut','dropcut','sddas','sdarr',
'ihs','irs','ims','RS','FTLock',
'ihs','irs','ims','RS',
--System
'skin','face',
@@ -943,7 +940,7 @@ do--CUS/SETXXX(k)
local warnList={
'das','arr','dascut','dropcut','sddas','sdarr',
'ihs','irs','ims','RS',
'FTLock','frameMul','highCam',
'frameMul','highCam',
'VKSwitch','VKIcon','VKTrack','VKDodge',
'simpMode',
}

View File

@@ -327,7 +327,7 @@ EVENTSETS={
'backfire_120','backfire_60','backfire_30','backfire_0',
'checkAttack_100',
'checkLine_10','checkLine_20','checkLine_40','checkLine_100','checkLine_200','checkLine_400','checkLine_1000',
'classic_e','classic_h','classic_u',
'classic_e','classic_h','classic_l','classic_u',
'defender_n','defender_l',
'dig_10l','dig_40l','dig_100l','dig_400l',
'dig_h','dig_u',
@@ -536,7 +536,6 @@ do--Game data tables
ROOMENV={
--Room config
capacity=10,
FTLock=true,
--Basic
drop=30,lock=60,
@@ -591,7 +590,6 @@ do--Userdata tables
ihs=true,irs=true,ims=true,
holdMode='hold',
RS='TRS',
FTLock=true,
--System
reTime=2,

File diff suppressed because it is too large Load Diff

1375
parts/language/dict_ja.lua Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,12 +1,17 @@
local HDsearch="https://harddrop.com/wiki?search="
local HDwiki="\t更多内容见Hard Drop Wiki。"
local HDwiki="\n更多内容见Hard Drop Wiki。"
return{
{"新人须知",
"读我 必读 萌新 xinren new noob readme",
"help",
"致想深入玩下去的新人:\n\n\t两大根本原则:\n\t\t1. 选手感好的版本Tech/Tetr.io/Jstris/TOP/Tetr.js别用编程练习渣版本\n\t\t2. 踏实打好基础预判next稳定消四等别总想着炫酷T旋对未来发展没好处。\n\t两大主要技巧:\n\t\t1. 熟悉初始位置以及到各个位置的初始操作;\n\t\t2. 提前计算好下一块能放哪。\n\n推荐阅读专栏《给TOP新人的几点建议》\n\n[点击右下角地球按钮打开链接]",
"致想深入玩下去的新人:\n\n\t两大根本原则:\n\t\t1. 选手感好的版本Tech/Tetr.io/Jstris/TOP/Tetr.js别用编程练习渣版本\n\t\t2. 踏实打好基础预判next稳定消四等别总想着炫酷T旋对未来实力提升没好处。\n\t两大主要技巧:\n\t\t1. 熟悉初始位置以及到各个位置的初始操作;\n\t\t2. 提前计算好下一块能放哪。\n\n推荐阅读专栏《给TOP新人的几点建议》\n\n[点击右下角地球按钮打开链接]",
"https://bilibili.com/read/cv2352939",
},
{"新人学习/练习路线",
"读我 必读 萌新 xinren new noob readme",
"help",
"以下是关于提升真正打块能力的指引,如果在以下任何项目练习过程中感到有困难,可以适当回去玩玩自己喜欢的项目。别忘了你是来“玩”游戏的,兴趣最重要。\n\n以下给出几个新手时期的主线任务树前期主要就应该练习以下内容学定式和T-Spin什么的对实力帮助很小我们不认为靠定式对战秒其他萌新是有效实力\n注意三段应当同时进行不是A→B→C\n\nA. 堆叠能力练习方法\n\tA1. 决定手上的块放哪的时候先别,看看下一块有没有地方放,如果放不下去,重新想手上的\n\tA2. 尝试把地形尽量控制得平整,因为比较平的地形来啥块都比较容易放得下去\n\nB. 操作效率与速度练习方法\n\tB1. 不要每一块都拿影子去对形状对位置,要自己想象这个块转一下是什么方向,想好了再开始按按键\n\tB2. 学习双旋,能逆时针转一次就不要顺时针转三次,费手\n\tB3. 学习极简,刚开始不用管速度,保证正确率最重要,养成良好习惯以后再提速快得很\n\nC. 堆叠能力考核\n\tC1. 稳定完成40行不死\n\tC2. 稳定不用hold完成40行\n\tC3. 稳定全消四完成40行\n\tC4. 稳定不用hold全消四完成40行\n\n以上都是根据社区和个人经验总结的模糊方法与目标所以C的考核可以根据自身情况调整严格程度例如“稳定”的具体成功率\n完成C的考核后需要在未来一直注意没有上限的A1这是方块的根本元素之一强大的读next能力可以让你快速上手任何变种玩法。",
},
{"关于T-spin学习",
"T旋 T转 tspin",
"help",
@@ -59,7 +64,7 @@ return{
{"研究群",
"yanjiu study research",
"org",
"俄罗斯方块·[研究]群QQ号112897780“中国俄罗斯方块总群”",
"俄罗斯方块·[研究]群QQ号112897780 “中国俄罗斯方块总群” ",
},
{"Mew据点",
"mew tieba forum",
@@ -115,7 +120,7 @@ return{
{"注[1]",
"备注 notice",
"game",
"以下内容是为部分官方和较高人气同人方块游戏的简介。\n其中可能包含一些只代表个人观点的主观评价写在方括号里面,请不要根据这些评论直接认定游戏的好坏",
"以下内容是为部分官方和较高人气同人方块游戏的简介。\n其中可能包含一些只代表个人观点的主观评价写在方括号里仅供参考,顺便也请不要因为某个方面有欠缺就直接认为 “这个游戏不好” ",
},
{"King of Stackers",
"回合制 网页 手机 kos kingofstackers",
@@ -277,7 +282,7 @@ return{
{"Touhoumino",
"东方 车万 偷猴 chewan dongfang th",
"game",
"Windows | 单机\n块圈玩家自制方块一个Nullpomino的自带资源包的改版将东方Project元素与俄罗斯方块结合。马拉松模式结合了东方Project里的”符卡”机制需要在一定时间内达成目标分数才能击破。\n[难度较大,适合有方块基础并且各项能力都较强的玩家游玩(不然都不知道自己怎么死的)。]",
"Windows | 单机\n块圈玩家自制方块一个Nullpomino的自带资源包的改版将东方Project元素与俄罗斯方块结合。马拉松模式结合了东方Project里的” 符卡” 机制,需要在一定时间内达成目标分数才能击破。\n[难度较大,适合有方块基础并且各项能力都较强的玩家游玩(不然都不知道自己怎么死的)。]",
},
{"Tetris Blitz",
"闪电战 ea",
@@ -292,7 +297,7 @@ return{
{"Tetris Beat",
"节奏 n3twork",
"game",
"iOS | 单机\nN3TWORK代理的一款移动端方块。除了马拉松以外游戏还有一个“Beat”模式但只需根据BGM的节奏落块就可以得到额外分数。\n[特效比较瞎眼,不支持自定义键位,而且默认的按钮也很小导致控制也不是很舒服]",
"iOS | 单机\nN3TWORK代理的一款移动端方块。除了马拉松以外游戏还有一个 “Beat” 模式但只需根据BGM的节奏落块就可以得到额外分数。\n[特效比较瞎眼,不支持自定义键位,而且默认的按钮也很小导致控制也不是很舒服]",
},
{"Tetris (N3TWORK)",
"Tetris n3twork",
@@ -307,7 +312,7 @@ return{
{"JJ块",
"手机 gougou",
"game",
"Android | 单机/多人\nJJ棋牌平台下一个休闲游戏Android端百度“JJ比赛”官网下载平台后可以找到找不到的原因是iOS系统或者没在官网下载或者被限制不可直接访问游戏。竖屏输入延迟很小可自定义DAS/ARR/20G软降简单自定义键位无Hold没有B2B无攻击缓冲不可抵消每次攻击上限为4连击较强其他同现代方块。",
"Android | 单机/多人\nJJ棋牌平台下一个休闲游戏Android端百度 “JJ比赛” 官网下载平台后可以找到找不到的原因是iOS系统或者没在官网下载或者被限制不可直接访问游戏。竖屏输入延迟很小可自定义DAS/ARR/20G软降简单自定义键位无Hold没有B2B无攻击缓冲不可抵消每次攻击上限为4连击较强其他同现代方块。",
},
{"火拼俄罗斯",
"huopin qq",
@@ -317,57 +322,57 @@ return{
--术语(缩写)
{"LPM",
"sudu",
"速度 sudu",
"term",
"Line Per Minute\n行每分,体现玩家下块速度。\n\n不同游戏中显示的LPM算法可能不一样例如TO中的LPM是用PPS换算的每1PPS=24LPM忽略掉了垃圾行的影响不再是字面意思本游戏中使用L'PM代表这种换算后的LPM。",
"Line Per Minute\n行每分,体现玩家下块速度。\n\n不同游戏中显示的LPM算法可能不一样例如TO中的LPM是用PPS换算的每1PPS=24LPM忽略掉了垃圾行的影响不再是字面意思本游戏中使用LPM代表这种换算后的LPM。",
},
{"PPS",
"sudu",
"速度 sudu",
"term",
"Piece Per Second\n块每秒,体现玩家下块速度。",
},
{"BPM",
"sudu",
"速度 sudu",
"term",
"Block Per Minute\n块每分,体现玩家下块速度\n又称PPMPiece Per Minute",
},
{"KPM",
"sudu",
"速度 sudu",
"term",
"Key Per Minute\n按键每分,体现玩家按键速度。",
},
{"KPP",
"anjian",
"按键 anjian",
"term",
"Key Per Piece\n按键每块,体现玩家操作是否繁琐。\n学会极简提升操作效率以减少此数字。",
},
{"APM",
"attack gongji",
"攻击 attack gongji",
"term",
"Attack Per Minute\n攻击每分,即玩家每分钟能打出的垃圾行数。\n一定程度体现玩家攻击力。",
},
{"SPM",
"send gongji",
"发送 送出 发出 send gongji",
"term",
"Send Per Minute\n送出每分,即玩家每分钟实际打出去给对手的垃圾行数。\n一定程度体现玩家给对手实际造成的攻击力。",
},
{"DPM",
"dig defend",
"挖掘 防御 防守 dig defend",
"term",
"Dig/Defend Per Minute\n挖掘每分,即玩家每分钟向下挖掘的垃圾行数。\n某些时候可以体现玩家生存能力。\n\n或:防御(抵消+挖掘)每分。",
},
{"RPM",
"receive jieshou",
"接收 接受 receive jieshou",
"term",
"Receive Per Minute\n接收每分,即玩家每分钟收到来自对手的垃圾行数。\n一定程度体现玩家被对手施加的压力。",
},
{"ADPM",
"attack defend vs",
"攻击 防御 防守 attack defend vs",
"term",
"Atk+Dig Per Minute\n攻击+挖掘每分用于在同一局游戏内对比玩家间水平差距比APM更准确一些。在TETR.IO中叫VS的数据就是ADPM调整过比例具体是Atk + Dig per 100s",
},
{"APL",
"xiaolv",
"效率 xiaolv",
"term",
"Attack Per Line\n攻击每行,也叫效率,体现玩家攻击的行利用率。",
},
@@ -406,7 +411,7 @@ return{
{"HPC",
"hc clear banqing banquanqing banquanxiao",
"term",
"Half-PC\nPC全消的外延“下方有剩余方块”的全消特别地如果只消1行则必须不剩余玩家放置的方块能打出一些攻击和防御Techmino限定",
"Half-PC\nPC全消的外延 “下方有剩余方块” 的全消特别地如果只消1行则必须不剩余玩家放置的方块能打出一些攻击和防御Techmino限定",
},
--术语(旋转相关)
@@ -448,7 +453,7 @@ return{
{"MTSS",
"mini tspin",
"term",
"Mini T-spin Single\n指T方块Mini Spin消1行不同游戏判定不一样\n部分游戏中可能叫做“T-Spin Mini”。",
"Mini T-spin Single\n指T方块Mini Spin消1行不同游戏判定不一样\n部分游戏中可能叫做 “T-Spin Mini” ",
},
{"MTSD",
"mini tspin",
@@ -468,7 +473,7 @@ return{
{"方块朝向",
"旋转 朝向 xuanzhuan chaoxiang orientation direction 0r2l 02 20 rl lr",
"term",
"在SRS或者类SRS的旋转系统中需要说明方块朝向的时候“朝下”“竖着”等词描述太模糊。\nSRS中每种方块的初始状态固定所以我们使用0原位、R即顺时针转一次、2转两下即180°、L即逆时针转一次四个字符表示方块的四种状态从原位0开始顺时针转一圈四个状态是0R2L。\n最早见于SRS踢墙表的行首0→L表示原位逆时针转一次到L状态0→R表示原位顺时针转一次到R状态2→R代表从180°状态逆时针转一次到R状态。",
"在SRS或者类SRS的旋转系统中需要说明方块朝向的时候 “朝下” “竖着” 等词描述太模糊。\nSRS中每种方块的初始状态固定所以我们使用0原位、R即顺时针转一次、2转两下即180°、L即逆时针转一次四个字符表示方块的四种状态从原位0开始顺时针转一圈四个状态是0R2L。\n最早见于SRS踢墙表的行首0→L表示原位逆时针转一次到L状态0→R表示原位顺时针转一次到R状态2→R代表从180°状态逆时针转一次到R状态。",
},
{"ARS",
"旋转系统 rotate",
@@ -534,7 +539,7 @@ return{
{"XRS",
"旋转系统 rotate",
"term",
"X Rotation System\nT-ex原创旋转系统引入了“按住方向键换一套踢墙表”的设定在对应的方向需要顶住墙让“想去哪”能被游戏捕获从而转到玩家希望到达的位置。\n\n其他旋转系统无论踢墙表怎么设计块处在某个位置时旋转后最终只能按固定顺序测试这导致不同的踢墙是竞争的若存在两个可能想去的位置就只能二选一XRS解决了这个问题。",
"X Rotation System\nT-ex原创旋转系统引入了 “按住方向键换一套踢墙表” 的设定(在对应的方向需要顶住墙),让 “想去哪” 能被游戏捕获从而转到玩家希望到达的位置。\n\n其他旋转系统无论踢墙表怎么设计块处在某个位置时旋转后最终只能按固定顺序测试这导致不同的踢墙是竞争的若存在两个可能想去的位置就只能二选一XRS解决了这个问题。",
},
--术语(其他)
@@ -556,17 +561,17 @@ return{
{"现代方块",
"modern xiandaikuai tetris",
"term",
"现代方块是一个模糊的概念,这里列出一部分“标准”规则,满足大部分的都可以认为是现代方块:\n1.可见场地大小是10×20不过上方空间也是存在的上限可以自己定一些游戏用的是40\n2.七种方块从顶部正中间出现(奇数宽方块偏左,高度可以是方块底部或顶部贴着场地顶),同一种方块的朝向(一般是平的面朝下)和颜色都一致;\n3.一个合适的随机出块机制常见的详见Bag7词条和His词条\n4.一个合适的的旋转系统至少有双旋详见双旋词条最好是SRS或类SRS详见SRS词条\n5.一个合适的锁定延迟系统,详见锁定延迟词条;\n6.一个合适的死亡判定,详见死亡判定词条;\n7.有Next功能一般是3~6个也有1个的详见Next词条并且方向和出现时候的方向一致\n8.有Hold功能详见Hold词条\n9.有DAS系统负责精密并且快速的左右移动详见DAS词条\n10.如果有出块延迟和消行延迟,那么需要有提前旋转/Hold系统详见IRS和IHS词条IMS是本游戏特有。",
"现代方块是一个模糊的概念,这里列出一部分 “标准” 规则,满足大部分的都可以认为是现代方块:\n1.可见场地大小是10×20不过上方空间也是存在的上限可以自己定一些游戏用的是40\n2.七种方块从顶部正中间出现(奇数宽方块偏左,高度可以是方块底部或顶部贴着场地顶),同一种方块的朝向(一般是平的面朝下)和颜色都一致;\n3.一个合适的随机出块机制常见的详见Bag7词条和His词条\n4.一个合适的的旋转系统至少有双旋详见双旋词条最好是SRS或类SRS详见SRS词条\n5.一个合适的锁定延迟系统,详见锁定延迟词条;\n6.一个合适的死亡判定,详见死亡判定词条;\n7.有Next功能一般是3~6个也有1个的详见Next词条并且方向和出现时候的方向一致\n8.有Hold功能详见Hold词条\n9.有DAS系统负责精密并且快速的左右移动详见DAS词条\n10.如果有出块延迟和消行延迟,那么需要有提前旋转/Hold系统详见IRS和IHS词条IMS是本游戏特有。",
},
{"方块形状",
"xingzhuang shape tetromino tetrimino",
"term",
"在标准的方块游戏中,用到的方块是所有的“四连块”,即四个正方形共用边连接成的形状。\n在不允许翻转只允许旋转的情况下四连块一共有七种根据它们的形状一般分别叫做Z、S、J、L、T、O、I。",
"在标准的方块游戏中,用到的方块是所有的 “四连块” ,即四个正方形共用边连接成的形状。\n在不允许翻转只允许旋转的情况下四连块一共有七种根据它们的形状一般分别叫做Z、S、J、L、T、O、I。",
},
{"方块颜色",
"yanse color colour tetromino tetrimino",
"term",
"主流方块游戏中七种块的颜色会使用同一套彩虹配色:\nZ红 S绿 J蓝 L橙 T紫 O黄 I\n\nTechmino默认也使用这一套“标准”配色。",
"主流方块游戏中七种块的颜色会使用同一套彩虹配色:\nZ红 S绿 J蓝 L橙 T紫 O黄 I\n\nTechmino默认也使用这一套 “标准” 配色。",
},
{"提前旋转 IRS",
"irs initialrotatesystem",
@@ -586,12 +591,12 @@ return{
{"预览 Next",
"下一个 next yulan xiayige",
"term",
"指示后边几个块的顺序。\n提前思考手上这块怎么摆可以让后面轻松是玩家提升的必需技能。\n\n关于玩家玩的时候到底看了几个Next这个数字并不固定不同玩家、不同模式、不同局面计算next的数量都不一样通过调整可见Next数量打40L比较时间等方式测得的数据并不准确。\n\n具体例如一个比较熟练的玩家几乎永远会提前算好一个Next不然不会锁定手里的块场地上将要出现或可以构造消四洞T坑的时候会找最近的IT什么时候来如果太远了就会直接挖掉放弃本次攻击以防被对手偷袭。这两种情况并不独立有很多介于中间的情况。所以一个玩家看的Next数量是时刻在变的“某人看几个Next”没有精确答案必须在指明情况的时候数字才能作为参考。",
"指示后边几个块的顺序。\n提前思考手上这块怎么摆可以让后面轻松是玩家提升的必需技能。\n\n关于玩家玩的时候到底看了几个Next这个数字并不固定不同玩家、不同模式、不同局面计算next的数量都不一样通过调整可见Next数量打40L比较时间等方式测得的数据并不准确。\n\n具体例如一个比较熟练的玩家几乎永远会提前算好一个Next不然不会锁定手里的块场地上将要出现或可以构造消四洞T坑的时候会找最近的IT什么时候来如果太远了就会直接挖掉放弃本次攻击以防被对手偷袭。这两种情况并不独立有很多介于中间的情况。所以一个玩家看的Next数量是时刻在变的 “某人看几个Next” 没有精确答案,必须在指明情况的时候数字才能作为参考。",
},
{"暂存 Hold",
"交换 hold zancun",
"term",
"将手里的方块和Hold槽中的交换一般不能连续使用。\n用来调整块序,更容易摆出你想要的形状。\n本游戏中有一个“物理Hold”机制开启后Hold换出的方块会直接出现在当前方块所在的位置\n\n用不用Hold各有好处不用的话看到序列是什么就是什么减少了思考量并且减少了按键的种类操作简单容易提升KPS有些人的40L记录就是不用Hold打出的。用Hold可以灵活地调整序列减少高重力等规则带来的难度算力足够的情况下可以达成更复杂的目标甚至反过来显著减少总按键数。",
"将手里的方块和Hold槽中的交换一般不能连续使用。\n用来调整块序,更容易摆出你想要的形状。\n本游戏中有一个 “物理Hold” 机制开启后Hold换出的方块会直接出现在当前方块所在的位置\n\n用不用Hold各有好处不用的话看到序列是什么就是什么减少了思考量并且减少了按键的种类操作简单容易提升KPS有些人的40L记录就是不用Hold打出的。用Hold可以灵活地调整序列减少高重力等规则带来的难度算力足够的情况下可以达成更复杂的目标甚至反过来显著减少总按键数。",
},
{"置换 Swap",
"交换 swap hold jiaohuan zancun",
@@ -619,7 +624,7 @@ return{
"在……之下\n用于表示成绩单位一般可不写比如40L成绩Sub 30是秒1000行Sub 15是分钟不写项目默认是40L\n\n39.95s是Sub 4040.###s不是Sub 40。\n请不要使用Sub 62之类的词因为sub本身就是表示大约 一分钟左右的成绩精确到5~10s就可以了一般30s以内的成绩用sub## 的时候才会精确到1s。",
},
{"挖掘 Dig",
"downstack ds wajue",
"挖掘 downstack ds wajue",
"term",
"指消除从场地底部进入的垃圾行对手攻击打过来或者模式中自动生成。也叫downstack(DS)。",
},
@@ -641,7 +646,7 @@ return{
{"连击 Combo",
"ren",
"term",
"从第二次消除起叫1 REN/Combo打出的攻击根据游戏设计的不同也不同。“REN”这个名称来源于日语中的”連”れん",
"从第二次消除起叫1 REN/Combo打出的攻击根据游戏设计的不同也不同。 “REN” 这个名称来源于日语中的” 連” (れん)。",
},
{"Spike",
"baofa xingbao",
@@ -691,7 +696,7 @@ return{
{"C4W",
"连击 ·center4wide centre4wide",
"term",
"Center 4 Wide\n中间空四列,一种连击打法,能打出很高的连击,利用了大多数专业对战方块游戏的死亡判定机制,可以放心堆高不担心被顶死,然后开始连击。是一种利用游戏机制的不平衡策略(尤其在开局时),观赏性不是很强还可以以弱胜强,成本太低所以成为了部分游戏中约定的类似“禁招”的东西,请在了解情况后再使用,不然可能会被别人骂。\n本游戏里考虑到了平衡问题所以c4w的强度没有别的游戏那么夸张。",
"Center 4 Wide\n中间空四列,一种连击打法,能打出很高的连击,利用了大多数专业对战方块游戏的死亡判定机制,可以放心堆高不担心被顶死,然后开始连击。是一种利用游戏机制的不平衡策略(尤其在开局时),观赏性不是很强还可以以弱胜强,成本太低所以成为了部分游戏中约定的类似 “禁招” 的东西,请在了解情况后再使用,不然可能会被别人骂。\n本游戏里考虑到了平衡问题所以c4w的强度没有别的游戏那么夸张。",
},
{"N-Res",
"连击 ·residual c4w s4w",
@@ -716,7 +721,7 @@ return{
{"缓冲区",
"buffer zone huanchongqu",
"term",
"不是所有游戏都有这个概念指10×20可见场地之上的21~40行。因为垃圾行顶起后两边堆高的方块可能会超出屏幕消行后这些方块要重新回到场地内所以需要保存下来由于程序上要求场地尺寸有限部分游戏可以无限故设定为40一般都够用。\n\n另见“消失区”词条。",
"不是所有游戏都有这个概念指10×20可见场地之上的21~40行。因为垃圾行顶起后两边堆高的方块可能会超出屏幕消行后这些方块要重新回到场地内所以需要保存下来由于程序上要求场地尺寸有限部分游戏可以无限故设定为40一般都够用。\n\n另见 “消失区” 词条。",
},
{"消失区",
"vanish zone xiaoshiqu",
@@ -732,7 +737,7 @@ return{
{"20G",
"高重力",
"term",
"现代方块的最高下落速度,表观就是方块瞬间到底,不存在中间的下落过程,可能会让方块无法跨越壕沟/从山谷爬出。\n20G一般指的其实是“无限下落速度”就算场地不止20格“20G”也会让方块瞬间到底。\n本游戏和部分其他游戏推荐这么设计中20G的优先级比其他玩家操作都高即使是0arr的水平方向“瞬间移动”中途也会受到20G的影响。",
"现代方块的最高下落速度,表观就是方块瞬间到底,不存在中间的下落过程,可能会让方块无法跨越壕沟/从山谷爬出。\n20G一般指的其实是 “无限下落速度” 就算场地不止20格 “20G” 也会让方块瞬间到底。\n本游戏和部分其他游戏推荐这么设计中20G的优先级比其他玩家操作都高即使是0arr的水平方向 “瞬间移动” 中途也会受到20G的影响。",
},
{"锁定延迟 LD",
"重力 lock delay lockdown delay suoyan zhongli gravity",
@@ -787,7 +792,7 @@ return{
{"DAS打断 DCD",
"dascut dcd daduan",
"term",
"本游戏中指玩家的操作焦点转移到新方块的瞬间此时减小重置DAS计时器让自动移动不会立刻生效减少“移动键松开晚了导致下一块一出来就立即开始移动”的情况\n其他游戏中的DAS打断机制可能和本游戏的有区别仅供参考。",
"本游戏中指玩家的操作焦点转移到新方块的瞬间此时减小重置DAS计时器让自动移动不会立刻生效减少 “移动键松开晚了导致下一块一出来就立即开始移动” 的情况\n其他游戏中的DAS打断机制可能和本游戏的有区别仅供参考。",
},
{"误硬降打断 HCD",
"autolockcut mdcut daduan",
@@ -799,6 +804,11 @@ return{
"term",
"Soft Drop Factor软降速度因子倍率\n部分游戏中的软降机制就是在按住软降键时方块受到的重力变为原来的若干倍SDF就是这个变大的倍数。\n基本所有官块和TETR.IO使用这个机制但本游戏不使用。",
},
{"方块名称",
"mino",
"term",
"Z"..CHAR.mino.Z.." S"..CHAR.mino.S.." J"..CHAR.mino.J.." L"..CHAR.mino.L.." T"..CHAR.mino.T.." O"..CHAR.mino.O.." I"..CHAR.mino.I.." Z5"..CHAR.mino.Z5.." S5"..CHAR.mino.S5.." P"..CHAR.mino.P.." Q"..CHAR.mino.Q.." F"..CHAR.mino.F.." E"..CHAR.mino.E.." T5"..CHAR.mino.T5.." U"..CHAR.mino.U.." V"..CHAR.mino.V.." W"..CHAR.mino.W.." X"..CHAR.mino.X.." J5"..CHAR.mino.J5.." L5"..CHAR.mino.L5.." R"..CHAR.mino.R.." Y"..CHAR.mino.Y.." N"..CHAR.mino.N.." H"..CHAR.mino.H.." I5"..CHAR.mino.I5.." I3"..CHAR.mino.I3.." C"..CHAR.mino.C.." I2"..CHAR.mino.I2.." O1"..CHAR.mino.O1,
},
{"Bag7出块",
"bag出块 bag7bag",
"term",
@@ -827,17 +837,17 @@ return{
{"超连点 Hypertap",
"chaoliandian",
"term",
"快速震动手指,实现比长按更快速+灵活的高速单点移动主要在经典块的高难度下因为DAS不可调而且特别慢高速下很容易md导致失败此时手动连点就比自动移动更快或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人称为“Hypertapper”。",
"快速震动手指,实现比长按更快速+灵活的高速单点移动主要在经典块的高难度下因为DAS不可调而且特别慢高速下很容易md导致失败此时手动连点就比自动移动更快或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人称为 “Hypertapper” ",
},
{"轮指 Rolling",
"lunzhi liandian",
"term",
"另一种快速连点方法用于DAS/ARR设置非常慢时的高重力1G左右模式。\n先把手柄键盘……可能也行吧悬空摆好比如架在腿上要连点某个键的时候一只手虚按按键另外一只手的几根手指轮流敲打手柄背面“反向按键”实现连点。这种控制方法可以让玩家更轻松地获得比直接抖动手指的Hypertap详见超连点词条更快的控制速度。\n此方法最先由Cheez-fish发明他本人则使用Rolling达到过超过20Hz的点击频率。",
"另一种快速连点方法用于DAS/ARR设置非常慢时的高重力1G左右模式。\n先把手柄(键盘……可能也行吧)悬空摆好,比如架在腿上,要连点某个键的时候一只手虚按按键,另外一只手的几根手指轮流敲打手柄背面, “反向按键” 实现连点。这种控制方法可以让玩家更轻松地获得比直接抖动手指的Hypertap详见超连点词条更快的控制速度。\n此方法最先由Cheez-fish发明他本人则使用Rolling达到过超过20Hz的点击频率。",
},
{"穿透 Passthrough",
"pingthrough chuantou",
"term",
"(攻击)穿透,指双方的攻击打出后没有抵消,互相都收到的现象。\nTETR.IO中自定义房间如果开启Passthrough规则曾经天梯默认开启那么对手消行攻击的瞬间能看到自己的红条出现但其处于“无敌时间”内不会触发也不能抵消此时你的攻击会直接打给对手。应该是给攻击的飞行动画预留时间同时也让玩家能反应过来并主动选择要不要抵消要的话就再等一会\n另有pingthrough的说法只是原因是由于不可避免的网络传输延迟效果同passthrough设计比较简单的联网对战块没有特殊考虑的话可能自然就会带有这个机制。",
"(攻击)穿透,指双方的攻击打出后没有抵消,互相都收到的现象。\nTETR.IO中自定义房间如果开启Passthrough规则曾经天梯默认开启那么对手消行攻击的瞬间能看到自己的红条出现但其处于 “无敌时间” 内,不会触发也不能抵消,此时你的攻击会直接打给对手。(应该是给攻击的飞行动画预留时间,同时也让玩家能反应过来并主动选择要不要抵消,要的话就再等一会)\n另有pingthrough的说法只是原因是由于不可避免的网络传输延迟效果同passthrough设计比较简单的联网对战块没有特殊考虑的话可能自然就会带有这个机制。",
},
{"TOP攻击表",
"攻击表 top attack",
@@ -854,11 +864,6 @@ return{
"term",
"七个块初始权重设为0\n要取块的时候,\n先把七个数都除以2然后加上0~1的随机数\n最大的数字是第几个的就出对应的块然后将其权重除以3.5\n循环。",--Discovered by zxc
},
{"C2踢墙",
"kick",
"term",
"左下右下左2右2\n(任何方块的任何旋转都使用这个表)。",
},
{"堆叠 Stack",
"duidie stacking",
"term",
@@ -882,12 +887,12 @@ return{
{"骨块 Bone",
"gukuai bone tgm",
"term",
"最早的方块游戏使用的方块样式。\n很久以前的电脑没有可以显示复杂图案的屏幕,只能往上打字,所以一格方块用两个方括号[ ]表示,长得像骨头所以叫骨块。\n基于骨块的特点,本游戏把骨块重新定义为,“所有形状使用的同一个比较花眼的贴图”,不同的皮肤有不同的骨块样式。",
"最早的方块游戏使用的方块样式。\n很久以前的电脑没有可以显示复杂图案的屏幕,只能往上打字,所以一格方块用两个方括号[ ]表示,长得像骨头所以叫骨块。\n基于骨块的特点,本游戏把骨块重新定义为, “所有形状使用的同一个比较花眼的贴图” ,不同的皮肤有不同的骨块样式。",
},
{"半隐",
"banyin half semi invisible",
"term",
"指方块锁定经过一段时间后会变隐形的规则\n注:从锁定开始到消失的具体时长不定,可以描述为“过几秒种后消失”。",
"指方块锁定经过一段时间后会变隐形的规则\n注:从锁定开始到消失的具体时长不定,可以描述为 “过几秒种后消失” ",
},
{"全隐",
"quanyin invisible",
@@ -897,7 +902,7 @@ return{
{"场地重力",
"重力 zhongli liansuo cascade chain",
"term",
"(由于“重力”有歧义所以本词典里称为场地重力,也有重力连锁等叫法。)\n部分游戏的部分模式可能包含此规则。此规则下玩家的四格方块四个方向有连接关系连起来的几个格整体会受到重力影响悬空了会往下落。在这个规则下可以构造复杂的连锁消除一个主打连锁消除对战的游戏是Qudra老游戏现在基本没人玩",
"(由于 “重力” 有歧义所以本词典里称为场地重力,也有重力连锁等叫法。)\n部分游戏的部分模式可能包含此规则。此规则下玩家的四格方块四个方向有连接关系连起来的几个格整体会受到重力影响悬空了会往下落。在这个规则下可以构造复杂的连锁消除一个主打连锁消除对战的游戏是Qudra老游戏现在基本没人玩",
},
{"MPH模式",
"",
@@ -909,6 +914,12 @@ return{
"term",
"用任何设备玩任何游戏时所有的操作按键盘点鼠标等都会晚一点点很短几毫秒到几十毫秒才到达游戏如果过长就会很影响游戏手感作用效果类似于你拿QQ远程控制打FPS游戏\nTOP、TE等游戏比较明显\n这个延迟一般由硬件性能,硬件状态影响,通常来说不可设置,开启性能模式(或者关闭节能模式)可能会好一点。",
},
{"秘密段位",
"大于号 secret grade dayuhao",
"term",
"出自TGM系列的彩蛋玩法。不按照TGM的一般目标去玩而是去拼图拼出 “每行仅有一个洞的大于号” 图形不能是小于号拼得越多获得的秘密段位越高没特殊功能只是好玩最高目标是完成19行并封顶"..HDwiki,
HDsearch.."Secret_Grade_Techniques",
},
{"Cold Clear",
"机器人 电脑 cc coldclear ai bot jiqiren",
"term",
@@ -929,37 +940,38 @@ return{
{"DT炮",
"dt cannon",
"setup",
"Double-Triple Cannon。\n"..HDwiki,
"Double-Triple Cannon。"..HDwiki,
HDsearch.."dt",
},
{"DTPC",
"dtpc",
"setup",
"DT炮一个能接PC的分支。\n"..HDwiki,
"DT炮一个能接PC的分支。"..HDwiki,
HDsearch.."dt",
},
{"BT炮",
"bt cannon",
"setup",
"β炮Beta炮\n"..HDwiki,
"β炮Beta炮"..HDwiki,
HDsearch.."bt_cannon",
},
{"BTPC",
"btpc",
"setup",
"BT炮一个能接PC的分支。\n"..HDwiki,
"BT炮一个能接PC的分支。"..HDwiki,
HDsearch.."bt_cannon",
},
{"DDPC",
"ddpc",
"setup",
"开局TSD的一个能接Double-Double-PC的分支。\n"..HDwiki,
"开局TSD的一个能接Double-Double-PC的分支。"..HDwiki,
HDsearch.."TKI_3_Perfect_Clear",
},
{"QT炮",
"qt cannon",
"setup",
"QT炮细节未知。",
"一种能以更高的概率搭出开局DT Attack的类似DT炮的定式。"..HDwiki,
HDsearch.."dt",
},
{"MT",
"mt",
@@ -970,7 +982,7 @@ return{
{"狼月炮",
"wolfmoon",
"setup",
"狼月炮。\n"..HDwiki,
"狼月炮。"..HDwiki,
HDsearch.."wolfmoon_cannon",
},
{"ASC",
@@ -981,25 +993,26 @@ return{
{"Sewer",
"sewer",
"setup",
"Sewer开局。\n"..HDwiki,
"Sewer开局。"..HDwiki,
HDsearch.."sewer",
},
{"TKI",
"tki",
"setup",
"TKI开局\n有两种解释一个是TSD开局另一个是Cspin开局。\n"..HDwiki,
"TKI开局\n有两种解释一个是TSD开局另一个是Cspin开局。"..HDwiki,
HDsearch.."tki",
},
{"God Spin",
"god",
"setup",
"God Spin\nwindkey发明的一个观赏性很强但实战没啥用的炫酷特殊T2+T3开局定式。\n"..HDwiki,
"God Spin\nwindkey发明的一个观赏性很强但实战没啥用的炫酷特殊T2+T3开局定式。"..HDwiki,
HDsearch.."godspin",
},
{"信天翁",
"xintianweng",
"xintianweng albatross",
"setup",
"一种高观赏性几乎不浪费T的快节奏强力T2-T3-T2-PC开局。",
"一种高观赏性几乎不浪费T的快节奏强力T2-T3-T2-PC开局。"..HDwiki,
HDsearch.."Albatross_Special",
},
{"鹈鹕",
"tihu",
@@ -1007,9 +1020,22 @@ return{
"一种类似信天翁的定式,在块序不能信天翁的时候可以用。",
},
{"七巧板",
"qiqiaoban",
"qiqiaoban tangram",
"setup",
"一种极大概率能摆出来并且很大概率能做到PC的定式本游戏中的pc练习中空出不规则区域的那个就是七巧板。",
"一种极大概率能摆出来并且很大概率能做到PC的定式本游戏中的pc练习中空出不规则区域的那个就是七巧板。"..HDwiki,
HDsearch.."Perfect_Clear_Opener",
},
{"DPC",
"DPC",
"setup",
"在场地空白1bag还剩一块的情况下能够100%搭成的TSD+PC的定式。常见于开局三包PC的后续。"..HDwiki,
HDsearch.."DPC_Setups",
},
{"Gamushiro堆叠",
"gamushiro",
"setup",
"ガムシロ積みGamushiro堆叠一种开局TD-Attack的定式。"..HDwiki,
HDsearch.."Gamushiro_Stacking",
},
--形状
@@ -1021,21 +1047,27 @@ return{
{"Cspin",
"cspin",
"pattern",
"JL脚对脚立起来形成一个C形缺口做适当的填充后可以打T3+T2。\n"..HDwiki,
"JL脚对脚立起来形成一个C形缺口做适当的填充后可以打T3+T2。"..HDwiki,
HDsearch.."c-spin",
},
{"STSD",
"stsd",
"pattern",
"Super T-spin Double\n一种能做两个T2的形状。\n如果垃圾行正好空在STSD正下方会暴毙。\n"..HDwiki,
"Super T-spin Double\n一种能做两个T2的形状。\n如果垃圾行正好空在STSD正下方会暴毙。"..HDwiki,
HDsearch.."stsd",
},
{"STMB",
"stmb",
"pattern",
"STMB cave\n在高空3宽坑架SZ捐一个T2的形状。\n"..HDwiki,
"STMB cave\n在高空3宽坑架SZ捐一个T2的形状。"..HDwiki,
HDsearch.."stmb_cave",
},
{"双刃剑",
"shuangrenjian fractal spider",
"pattern",
"两个T2形状叠在一起。"..HDwiki,
HDsearch.."Fractal",
},
{"LST堆叠",
"lst",
"pattern",
@@ -1045,24 +1077,25 @@ return{
{"汉堡包",
"hamburger hanbaobao",
"pattern",
"一种边缘捐T不影响消四的堆叠法。\n"..HDwiki,
"一种边缘捐T不影响消四的堆叠法。"..HDwiki,
HDsearch.."hamburger",
},
{"皇家十字",
"皇十 imperial cross huangjiashizi huangshi",
"pattern",
"在一个十字形洞口盖屋檐后可以做两个T2的形状。\n"..HDwiki,
"在一个十字形洞口盖屋檐后可以做两个T2的形状。"..HDwiki,
HDsearch.."imperial_cross",
},
{"雨宫炮",
"yugong",
"yugong amemiya",
"pattern",
"一种捐T2后可消四的形状常见于DT的一个分支。",
},
{"千鸟格子",
"qianniaoge",
"pattern",
"一种在小洞上捐一个T2后还能做一个T2的形状。",
"一种在小洞上捐一个T2后还能做一个T2的形状。"..HDwiki,
HDsearch.."Cut_copy",
},
{"六巧板",
"liuqiaoban",
@@ -1070,9 +1103,10 @@ return{
"一种常用于增加中局PC概率的形状本游戏中的PC练习中空出4×4方形区域就是六巧板。",
},
{"绯红之王",
"feihongzhiwang",
"feihongzhiwang king crimson",
"pattern",
"在STSD上叠若干个T3的形状。",
"在STSD上叠若干个T3的形状。"..HDwiki,
HDsearch.."King_Crimson",
},
--存档管理
@@ -1084,37 +1118,37 @@ return{
{"重置设置",
"reset setting chongzhi qingkong shezhi",
"command",
"前往控制台输入“rm conf/setting”并回车\n需要重启游戏生效,若反悔,进入设置菜单再退出即可恢复文件。",
"前往控制台输入 “rm conf/setting” 并回车\n需要重启游戏生效,若反悔,进入设置菜单再退出即可恢复文件。",
},
{"重置统计数据",
"reset statistic data chongzhi tongji shuju",
"command",
"前往控制台输入“rm conf/data”并回车\n需要重启游戏生效,若反悔,玩一局并触发结算即可恢复文件。",
"前往控制台输入 “rm conf/data” 并回车\n需要重启游戏生效,若反悔,玩一局并触发结算即可恢复文件。",
},
{"重置解锁状态",
"reset unlock chongzhi qingkong jiesuo",
"command",
"前往控制台输入“rm conf/unlock”并回车\n需要重启游戏生效,若反悔,刷新任意一个模式在地图上的状态即可恢复文件。",
"前往控制台输入 “rm conf/unlock” 并回车\n需要重启游戏生效,若反悔,刷新任意一个模式在地图上的状态即可恢复文件。",
},
{"重置本地排行榜",
"reset chongzhi paihangbang",
"command",
"前往控制台输入“rm -s record”并回车\n需要重启游戏生效,若反悔,玩一局并更新模式排行榜即可恢复对应模式的单个排行榜文件。",
"前往控制台输入 “rm -s record” 并回车\n需要重启游戏生效,若反悔,玩一局并更新模式排行榜即可恢复对应模式的单个排行榜文件。",
},
{"删除键位",
"reset virtualkey",
"command",
"前往控制台输入“rm conf/键位文件”并回车\n键盘是key虚拟按键是virtualkey虚拟按键预设是vkSave12\n前两者重启生效,若反悔,进入对应的设置菜单再返回即可恢复文件。",
"前往控制台输入 “rm conf/键位文件” 并回车\n键盘是key虚拟按键是virtualkey虚拟按键预设是vkSave12\n前两者重启生效,若反悔,进入对应的设置菜单再返回即可恢复文件。",
},
{"删除录像",
"reset replay luxiang",
"command",
"前往控制台输入“rm -s replay”并回车。\n立即生效。",
"前往控制台输入 “rm -s replay” 并回车。\n立即生效。",
},
{"删除缓存",
"reset cache huancun touxiang",
"command",
"前往控制台输入“rm -s cache”并回车。\n立即生效。",
"前往控制台输入 “rm -s cache” 并回车。\n立即生效。",
},
--英文
@@ -1198,7 +1232,7 @@ return{
{"Kazu",
"mdking",
"name",
"也叫“GAMEOVER” “GAMAOVER” “GAME_OVER_RETRY”\n一流玩家以熟练md转捐赠闻名",
"(也叫 “GAMEOVER” “GAMAOVER” “GAME_OVER_RETRY” \n一流玩家以熟练md转捐赠闻名",
},
{"Microblizz",
"",

View File

@@ -14,9 +14,9 @@ return{
sureReset="Press again to reset",
sureDelete="Press again to delete",
newDay="A new day, a new beginning!",
playedLong="You have been playing for a long time. Time to a break!",
playedLong="You have been playing for a long time. Time to take a break!",
playedTooMuch="You have been playing for far too long! Techmino is fun, but remember to take some rests!",
settingWarn="Careful - you're about to change some uncommon settings!",
settingWarn="Careful youre about to change some uncommon settings!",
atkModeName={"Random","Badges","K.O.s","Attackers"},
royale_remain="$1 Players Left",
@@ -59,7 +59,7 @@ return{
finesse_ap="All Perfect",
finesse_fc="Full Combo",
page="Page:",
page="Page ",
cc_fixed="CC is incompatible with fixed sequences.",
cc_swap="CC is incompatible when the hold mode is set to Swap.",
@@ -114,11 +114,11 @@ return{
noUsername="Please enter your username",
wrongEmail="Invalid email address",
noPassword="Please enter your password",
diffPassword="Passwords don't match",
diffPassword="Passwords dont match",
registerRequestSent="A sign up request has been sent.",
registerSuccessed="Sign up successful!",
loginSuccessed="You are now logged in!",
accessSuccessed="Access granted",
registerOK="Sign up successful!",
loginOK="You are now logged in!",
accessOK="Access granted",
wsConnecting="Websocket connecting…",
wsFailed="WebSocket connection failed",
@@ -143,7 +143,6 @@ return{
customBGloadFailed="Unsupport image format for custom background",
errorMsg="Techmino ran into a problem and needs to restart.\nYou can send the error log to the developers.",
tryAnotherBuild="[Invalid UTF-8] If you are on Windows, try downloading Techmino-win32 or Techmino-win64 (different from what you are using now).",
modInstruction="Choose your modifiers!\nMods allow you to change the game,\nbut they may also crash the game.\nScores will not be saved when using mods.",
modInfo={
@@ -183,7 +182,7 @@ return{
"Finesse:",
},
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
radarData={"D'PM","ADPM","APM","SPM","L'PM","DPM"},
radarData={"DPM","ADPM","APM","SPM","LPM","DPM"},
stat={
"Times Launched:",
"Play Count:",
@@ -198,13 +197,13 @@ return{
"Fns. Errs/Rate:",
},
aboutTexts={
"This is just an *ordinary* block stacker. Really, that's it.",
"This is just an *ordinary* block stacker. Really, thats it.",
"Inspired by C2/IO/JS/WWC/KOS etc.",
"",
"Powered by LÖVE",
"Any suggestions or bug reports are appreciated!",
"Make sure to get the game only from official sources,",
"as we can't make sure you're safe if you got it elsewhere.",
"as we cant make sure youre safe if you got it elsewhere.",
"The author is not responsible for any modifications.",
FNNS and"/"or"While the game is free, donations are appreciated.",
FNNS and"/"or"Check Zictionary for more",
@@ -276,6 +275,8 @@ return{
"C₂₉H₂₅N₃O₅",
"NOT_A_ROBOT",
"sakurw",
"Airun",
"幽灵3383",
"",
"Performances",
"Electric283",
@@ -314,7 +315,6 @@ return{
Cold_Clear [MinusKelvin]
json.lua [rxi]
profile.lua [itraykov]
simple-love-lights [dylhunn]
]],
support="Support the author",
WidgetText={
@@ -369,7 +369,7 @@ return{
},
net_newRoom={
title="Room Config",
roomName="Room name (Default: \"[username]'s room\")",
roomName="Room name (Default: [username]'s room)",
password="Password",
description="Room Description",
@@ -458,7 +458,6 @@ return{
atkFX="Atk FX",
frame="Render Frame Rate (%)",
FTlock="Frame skip",
text="Line Clear Pop-Ups",
score="Score Pop-Ups",
@@ -629,7 +628,7 @@ return{
push="Add Line (K)",
del="Del Line (L)",
demo="Don't Show ×",
demo="Dont Show “×”",
newPg="New Page (N)",
delPg="Del Page (M)",
@@ -687,6 +686,7 @@ return{
register="Sign Up",
email="Email Address",
password="Password",
showEmail="Show Email",
keepPW="Remember me",
login="Log In",
},
@@ -755,112 +755,122 @@ return{
},
},
modes={
['sprint_10l']= {"Sprint", "10L", "Clear 10 lines!"},
['sprint_20l']= {"Sprint", "20L", "Clear 20 lines!"},
['sprint_40l']= {"Sprint", "40L", "Clear 40 lines!"},
['sprint_100l']= {"Sprint", "100L", "Clear 100 lines!"},
['sprint_400l']= {"Sprint", "400L", "Clear 400 lines!"},
['sprint_1000l']= {"Sprint", "1,000L", "Clear 1,000 lines!"},
['sprintPenta']= {"Sprint", "PENTOMINO", "40L with 18 pentominoes"},
['sprintMPH']= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"},
['dig_10l']= {"Dig", "10L", "Dig 10 garbage lines"},
['dig_40l']= {"Dig", "40L", "Dig 40 garbage lines"},
['dig_100l']= {"Dig", "100L", "Dig 100 garbage lines"},
['dig_400l']= {"Dig", "400L", "Dig 400 garbage lines"},
['drought_n']= {"Drought", "100L", "No I-pieces available"},
['drought_l']= {"Drought+", "100L", "W T F"},
['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with increasing speed"},
['marathon_h']= {"Marathon", "HARD", "200-line high-speed marathon"},
['solo_e']= {"Battle", "EASY", "Defeat the AI!"},
['solo_n']= {"Battle", "NORMAL", "Defeat the AI!"},
['solo_h']= {"Battle", "HARD", "Defeat the AI!"},
['solo_l']= {"Battle", "LUNATIC", "Defeat the AI!"},
['solo_u']= {"Battle", "ULTIMATE", "Defeat the AI!"},
['techmino49_e']= {"Tech 49", "EASY", "49-player battle.\nThe last one standing wins"},
['techmino49_h']= {"Tech 49", "HARD", "49-player battle.\nThe last one standing wins"},
['techmino49_u']= {"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins"},
['techmino99_e']= {"Tech 99", "EASY", "99-player battle.\nThe last one standing wins"},
['techmino99_h']= {"Tech 99", "HARD", "99-player battle.\nThe last one standing wins"},
['techmino99_u']= {"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins"},
['round_e']= {"Turn-Based", "EASY", "Take turns to play against the AI!"},
['round_n']= {"Turn-Based", "NORMAL", "Take turns to play against the AI!"},
['round_h']= {"Turn-Based", "HARD", "Take turns to play against the AI!"},
['round_l']= {"Turn-Based", "LUNATIC", "Take turns to play against the AI!"},
['round_u']= {"Turn-Based", "ULTIMATE", "Take turns to play against the AI!"},
['master_n']= {"Master", "NORMAL", "For 20G beginners"},
['master_h']= {"Master", "HARD", "For 20G pros"},
['master_m']= {"Master", "M21", "For 20G Masters"},
['master_final']= {"Master", "FINAL", "20G and beyond"},
['master_ph']= {"Master", "PHANTASM", "???"},
['master_ex']= {"GrandMaster", "EXTRA", "An eternity shorter than an instant"},
['master_instinct']={"Master", "INSTINCT", "What if the active piece turned invisible?"},
['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
['strategy_e_plus']={"Strategy", "EASY+", "Fast 20G decision"},
['strategy_h_plus']={"Strategy", "HARD+", "Fast 20G decision"},
['strategy_u_plus']={"Strategy", "ULTIMATE+", "Fast 20G decision"},
['blind_e']= {"Invisible", "HALF", "For novices"},
['blind_n']= {"Invisible", "ALL", "For intermediates"},
['blind_h']= {"Invisible", "SUDDEN", "For the experienced"},
['blind_l']= {"Invisible", "SUDDEN+", "For professionals"},
['blind_u']= {"Invisible", "?", "Are you ready?"},
['blind_wtf']= {"Invisible", "WTF", "You're not ready"},
['classic_e']= {"Classic", "EASY", "A very low-speed recreation from the 80s"},
['classic_h']= {"Classic", "HARD", "A medium speed recreation from the 80s"},
['classic_u']= {"Classic", "ULTIMATE", "A very high-speed recreation from the 80s"},
['survivor_e']= {"Survival", "EASY", "How long can you survive?"},
['survivor_n']= {"Survival", "NORMAL", "How long can you survive?"},
['survivor_h']= {"Survival", "HARD", "How long can you survive?"},
['survivor_l']= {"Survival", "LUNATIC", "How long can you survive?"},
['survivor_u']= {"Survival", "ULTIMATE", "How long can you survive?"},
['attacker_h']= {"Attacker", "HARD", "Practice your attacking skills!"},
['attacker_u']= {"Attacker", "ULTIMATE", "Practice your attacking skills!"},
['defender_n']= {"Defender", "NORMAL", "Practice your defencing skills!"},
['defender_l']= {"Defender", "LUNATIC", "Practice your defencing skills!"},
['dig_h']= {"Driller", "HARD", "Digging practice!"},
['dig_u']= {"Driller", "ULTIMATE", "Digging practice!"},
['clearRush']= {"Clear Rush", "NORMAL", "All-spin tutorial!\n[Under construction]"},
['c4wtrain_n']= {"C4W Training", "NORMAL", "Infinite combos"},
['c4wtrain_l']= {"C4W Training", "LUNATIC", "Infinite combos"},
['pctrain_n']= {"PC Training", "NORMAL", "Perfect Clear practice"},
['pctrain_l']= {"PC Training", "LUNATIC", "A harder Perfect Clear practice"},
['pc_n']= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
['pc_h']= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
['pc_l']= {"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
['pc_inf']= {"Inf. PC Challenge", "", "Get PCs as much as you can"},
['tech_n']= {"Tech", "NORMAL", "Try to keep the\nBack-to-Back chain!"},
['tech_n_plus']= {"Tech", "NORMAL+", "Spins & PCs only"},
['tech_h']= {"Tech", "HARD", "Try to keep the\nBack-to-Back chain!"},
['tech_h_plus']= {"Tech", "HARD+", "Spins & PCs only"},
['tech_l']= {"Tech", "LUNATIC", "Try to keep the\nBack-to-Back chain!"},
['tech_l_plus']= {"Tech", "LUNATIC+", "Spins & PCs only"},
['tech_finesse']= {"Tech", "FINESSE", "No finesse faults!"},
['tech_finesse_f']= {"Tech", "FINESSE+", "No normal clears and finesse faults!"},
['tsd_e']= {"TSD Challenge", "EASY", "T-Spin Doubles only!"},
['tsd_h']= {"TSD Challenge", "HARD", "T-Spin Doubles only!"},
['tsd_u']= {"TSD Challenge", "ULTIMATE", "T-Spin Doubles only!"},
['backfire_n']= {"Backfire", "NORMAL", "Hold back the backfiring garbage lines"},
['backfire_h']= {"Backfire", "HARD", "Hold back the backfiring garbage lines"},
['backfire_l']= {"Backfire", "LUNATIC", "Hold back the backfiring garbage lines"},
['backfire_u']= {"Backfire", "ULTIMATE", "Hold back the backfiring garbage lines"},
['sprintAtk']= {"Sprint", "100 Attack", "Send 100 lines!"},
['sprintEff']= {"Sprint", "Efficiency", "Send more attack in 40lines!"},
['zen']= {'Zen', "200", "A 200-line run without a time limit"},
['ultra']= {'Ultra', "EXTRA", "A 2-minute score attack"},
['infinite']= {"Infinite", "", "Just a sandbox"},
['infinite_dig']= {"Infinite: Dig", "", "Dig-diggin'-dug"},
['marathon_inf']= {"Marathon", "INFINITE", "Infinite marathon."},
['sprint_10l']= {"Sprint", "10L", "Clear 10 lines!"},
['sprint_20l']= {"Sprint", "20L", "Clear 20 lines!"},
['sprint_40l']= {"Sprint", "40L", "Clear 40 lines!"},
['sprint_100l']= {"Sprint", "100L", "Clear 100 lines!"},
['sprint_400l']= {"Sprint", "400L", "Clear 400 lines!"},
['sprint_1000l']= {"Sprint", "1,000L", "Clear 1,000 lines!"},
['sprintPenta']= {"Sprint", "PENTOMINO", "40L with 18 pentominoes"},
['sprintMPH']= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"},
['sprint123']= {"Sprint", "M123", "40L with only monominoes, dominoes, and triminoes"},
['secret_grade']= {"Secret Grade", "", "Build a zig-zag hole formation, following to the guide!"},
['dig_10l']= {"Dig", "10L", "Dig 10 garbage lines as fast as you can!"},
['dig_40l']= {"Dig", "40L", "Dig 40 garbage lines as fast as you can!"},
['dig_100l']= {"Dig", "100L", "Dig 100 garbage lines as fast as you can!"},
['dig_400l']= {"Dig", "400L", "Dig 400 garbage lines as fast as you can!"},
['dig_eff_10l']= {"Dig", "EFFICIENCY 10L", "Dig 10 garbage lines with the least pieces!"},
['dig_eff_40l']= {"Dig", "EFFICIENCY 40L", "Dig 40 garbage lines with the least pieces!"},
['dig_eff_100l']= {"Dig", "EFFICIENCY 100L","Dig 100 garbage lines with the least pieces!"},
['dig_eff_400l']= {"Dig", "EFFICIENCY 400L","Dig 400 garbage lines with the least pieces!"},
['drought_n']= {"Drought", "100L", "No I-pieces available"},
['drought_l']= {"Drought+", "100L", "W T F"},
['marathon_n']= {"Marathon", "NORMAL", "200-line marathon with increasing speed"},
['marathon_h']= {"Marathon", "HARD", "200-line high-speed marathon"},
['solo_e']= {"Battle", "EASY", "Defeat the AI!"},
['solo_n']= {"Battle", "NORMAL", "Defeat the AI!"},
['solo_h']= {"Battle", "HARD", "Defeat the AI!"},
['solo_l']= {"Battle", "LUNATIC", "Defeat the AI!"},
['solo_u']= {"Battle", "ULTIMATE", "Defeat the AI!"},
['techmino49_e']= {"Tech 49", "EASY", "49-player battle.\nThe last one standing wins"},
['techmino49_h']= {"Tech 49", "HARD", "49-player battle.\nThe last one standing wins"},
['techmino49_u']= {"Tech 49", "ULTIMATE", "49-player battle.\nThe last one standing wins"},
['techmino99_e']= {"Tech 99", "EASY", "99-player battle.\nThe last one standing wins"},
['techmino99_h']= {"Tech 99", "HARD", "99-player battle.\nThe last one standing wins"},
['techmino99_u']= {"Tech 99", "ULTIMATE", "99-player battle.\nThe last one standing wins"},
['round_e']= {"Turn-Based", "EASY", "Take turns to play against the AI!"},
['round_n']= {"Turn-Based", "NORMAL", "Take turns to play against the AI!"},
['round_h']= {"Turn-Based", "HARD", "Take turns to play against the AI!"},
['round_l']= {"Turn-Based", "LUNATIC", "Take turns to play against the AI!"},
['round_u']= {"Turn-Based", "ULTIMATE", "Take turns to play against the AI!"},
['big_n']= {"Big", "NORMAL", "Play in a smaller field!"},
['big_h']= {"Big", "HARD", "Play in a smaller field!"},
['master_n']= {"Master", "NORMAL", "For 20G beginners"},
['master_h']= {"Master", "HARD", "For 20G pros"},
['master_m']= {"Master", "M21", "For 20G Masters"},
['master_final']= {"Master", "FINAL", "20G and beyond"},
['master_ph']= {"Master", "PHANTASM", "???"},
['master_g']= {"Master", "GRADED", "Get the highest grade you can!"},
['master_ex']= {"GrandMaster", "EXTRA", "An eternity shorter than an instant"},
['master_instinct']={"Master", "INSTINCT", "What if the active piece turned invisible?"},
['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
['strategy_e_plus']={"Strategy", "EASY+", "Holdless strategy!"},
['strategy_h_plus']={"Strategy", "HARD+", "Holdless strategy!"},
['strategy_u_plus']={"Strategy", "ULTIMATE+", "Holdless strategy!"},
['blind_e']= {"Invisible", "HALF", "For novices"},
['blind_n']= {"Invisible", "ALL", "For intermediates"},
['blind_h']= {"Invisible", "SUDDEN", "For the experienced"},
['blind_l']= {"Invisible", "SUDDEN+", "For professionals"},
['blind_u']= {"Invisible", "?", "Are you ready?"},
['blind_wtf']= {"Invisible", "WTF", "Youre not ready"},
['classic_e']= {"Classic", "EASY", "A low-speed recreation from the 80s"},
['classic_h']= {"Classic", "HARD", "A medium-speed recreation from the 80s"},
['classic_l']= {"Classic", "LUNATIC", "A high-speed recreation from the 80s"},
['classic_u']= {"Classic", "ULTIMATE", "A very high-speed recreation from the 80s"},
['survivor_e']= {"Survival", "EASY", "How long can you survive?"},
['survivor_n']= {"Survival", "NORMAL", "How long can you survive?"},
['survivor_h']= {"Survival", "HARD", "How long can you survive?"},
['survivor_l']= {"Survival", "LUNATIC", "How long can you survive?"},
['survivor_u']= {"Survival", "ULTIMATE", "How long can you survive?"},
['attacker_h']= {"Attacker", "HARD", "Practice your attacking skills!"},
['attacker_u']= {"Attacker", "ULTIMATE", "Practice your attacking skills!"},
['defender_n']= {"Defender", "NORMAL", "Practice your defensing skills!"},
['defender_l']= {"Defender", "LUNATIC", "Practice your defensing skills!"},
['dig_h']= {"Driller", "HARD", "Digging practice!"},
['dig_u']= {"Driller", "ULTIMATE", "Digging practice!"},
['clearRush']= {"Clear Rush", "NORMAL", "All-spin tutorial!\n[Under construction]"},
['c4wtrain_n']= {"C4W Training", "NORMAL", "Infinite combos"},
['c4wtrain_l']= {"C4W Training", "LUNATIC", "Infinite combos"},
['pctrain_n']= {"PC Training", "NORMAL", "Perfect Clear practice"},
['pctrain_l']= {"PC Training", "LUNATIC", "A harder Perfect Clear practice"},
['pc_n']= {"PC Challenge", "NORMAL", "Get PCs within 100 lines!"},
['pc_h']= {"PC Challenge", "HARD", "Get PCs within 100 lines!"},
['pc_l']= {"PC Challenge", "LUNATIC", "Get PCs within 100 lines!"},
['pc_inf']= {"Inf. PC Challenge", "", "Get PCs as much as you can"},
['tech_n']= {"Tech", "NORMAL", "Try to keep the\nBack-to-Back chain!"},
['tech_n_plus']= {"Tech", "NORMAL+", "Spins & PCs only"},
['tech_h']= {"Tech", "HARD", "Try to keep the\nBack-to-Back chain!"},
['tech_h_plus']= {"Tech", "HARD+", "Spins & PCs only"},
['tech_l']= {"Tech", "LUNATIC", "Try to keep the\nBack-to-Back chain!"},
['tech_l_plus']= {"Tech", "LUNATIC+", "Spins & PCs only"},
['tech_finesse']= {"Tech", "FINESSE", "No finesse faults!"},
['tech_finesse_f']= {"Tech", "FINESSE+", "No normal clears and finesse faults!"},
['tsd_e']= {"TSD Challenge", "EASY", "T-Spin Doubles only!"},
['tsd_h']= {"TSD Challenge", "HARD", "T-Spin Doubles only!"},
['tsd_u']= {"TSD Challenge", "ULTIMATE", "T-Spin Doubles only!"},
['backfire_n']= {"Backfire", "NORMAL", "Hold back the backfiring garbage lines"},
['backfire_h']= {"Backfire", "HARD", "Hold back the backfiring garbage lines"},
['backfire_l']= {"Backfire", "LUNATIC", "Hold back the backfiring garbage lines"},
['backfire_u']= {"Backfire", "ULTIMATE", "Hold back the backfiring garbage lines"},
['sprintAtk']= {"Sprint", "100 Attack", "Send 100 lines!"},
['sprintEff']= {"Sprint", "Efficiency", "Send more attack in 40lines!"},
['zen']= {'Zen', "200", "A 200-line run without a time limit"},
['ultra']= {'Ultra', "EXTRA", "A 2-minute score attack"},
['infinite']= {"Infinite", "", "Just a sandbox"},
['infinite_dig']= {"Infinite: Dig", "", "Dig-diggin-dug"},
['marathon_inf']= {"Marathon", "INFINITE", "Infinite marathon."},
['custom_clear']= {"Custom", "NORMAL"},
['custom_puzzle']= {"Custom", "PUZZLE"},
},
getTip={refuseCopy=true,
":pog:",
"(RUR'U')R'FR2U'R'U'(RUR'F')",
"\"Techmino.app\" cannot be opened because the developer cannot be verified.",
"\"Techmino.app\" will damage your computer. You should move it to the Bin.",
"\"TechminOS\"",
"(RURU)RFR2URU(RURF)",
"Techmino.app cannot be opened because the developer cannot be verified.",
"Techmino.app will damage your computer. You should move it to the Bin.",
"TechminOS",
"\\jezevec/\\jezevec/\\jezevec/",
"\\osk/\\osk/\\osk/",
"↑↑↓↓←→←→BA",
@@ -883,22 +893,22 @@ return{
"Bridge clear coming soon!",
"Can you master this modern yet familiar stacker?",
"Certainly within this heart lies my M@STERPIECE.",
"Change logs in English can be found on Discord.",
"Changelogs in English can be found on Discord.",
"Color clear coming soon!",
"Decreasing DAS and ARR makes your game faster but harder to control.",
"Did I just see a Back-to-Back-to-Back?",
"Does B2B2B2B exist?",
"Don't let a small glitch ruin your entire day!",
"Don't look directly at the bugs!",
"Dont let a small glitch ruin your entire day!",
"Dont look directly at the bugs!",
"Enjoy the Techmino rotation system!",
"Excellent, but let's go better next time…",
"Find out what's in the settings!",
"Excellent, but lets go better next time…",
"Find out whats in the settings!",
"Found any bugs? Open up an issue in our GitHub page!",
"Free-to-play block stacking game with a Battle Royale mode!",
"git commit",
"git push -f",
"Got any suggestions? Post them in our Discord!",
"Have you noticed what \"rotating\" does do to a block?",
"Have you noticed what rotating does do to a block?",
"Headphones recommended for a better experience.",
"Hello world!",
"I3 and L3 are the only two unique triminoes.",
@@ -907,8 +917,8 @@ return{
"Initial [insert action] system can save you.",
"Is B2B2B2B possible?",
"It is loading! Not just a cutscene!",
"It's possible to finish 40L without left/right buttons.",
"It's possible to finish 40L without rotation buttons.",
"Its possible to finish 40L without left/right buttons.",
"Its possible to finish 40L without rotation buttons.",
"Join our Discord!",
"l-=-1",
"Let the bass kick!",
@@ -928,12 +938,12 @@ return{
"pps-0.01",
"Server down randomly",
"Some requirements to achieve rank X are intentionally set to be difficult for even the best players.",
"Soon you'll be able to play against friends and foes all over the world.",
"Soon, youll be able to play against friends and foes all over the world.",
"Split clear coming soon!",
"sudo rm -rf /*",
"Techmino is a portmanteau of \"technique\" and \"tetromino\".",
"Techmino is a portmanteau of technique” and “tetromino.",
"Techmino is so fun!",
"Techmino on Nspire-CX: yes it exists, no it's not the same game.",
"Techmino on Nspire-CX: yes it exists, no its not the same game.",
"TetroDictionary is now available in English.",
"Most of the music tracks in this game are made using Beepbox.",
"The names that appeared in the background of the Staff page is a list of our sponsors.",
@@ -966,7 +976,7 @@ return{
{C.C,"Also try osu!"},
{C.C,"Also try Phigros!"},
{C.C,"Also try Puyo Puyo!"},
{C.C,"Also try Rubik's cube!"},
{C.C,"Also try Rubiks cube!"},
{C.C,"Also try Terraria!"},
{C.C,"Also try Touhou Project!"},
{C.C,"Also try VVVVVV!"},
@@ -978,8 +988,8 @@ return{
{C.lY,"COOL!!"},
{C.N,"Lua",C.Z," No.1"},
{C.P,"T-spin!"},
{C.R,"\"DMCA abusing\""},
{C.R,"\"Intellectual property law\""},
{C.R,"DMCA abusing"},
{C.R,"Intellectual property law"},
{C.R,"DD",C.Z," Cannon=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"D",C.Z," Cannon"},
{C.R,"DT",C.Z," Cannon=",C.P,"TS",C.R,"D",C.Z,"+",C.P,"TS",C.R,"T",C.Z," Cannon"},
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR ",C.P,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"},

View File

@@ -105,9 +105,9 @@ return{
noPassword="Por favor ingresa una contraseña",
diffPassword="Las contraseñas no coinciden",
registerRequestSent="Petición de registro enviada con éxito",
registerSuccessed="¡Registro exitoso!",
loginSuccessed="¡Ingreso con éxito!",
accessSuccessed="¡Autorizado exitoso!",
registerOK="¡Registro exitoso!",
loginOK="¡Ingreso con éxito!",
accessOK="¡Autorizado exitoso!",
wsConnecting="Websocket Conectando",
wsFailed="WebSocket conexión fallida",
@@ -186,7 +186,6 @@ return{
Cold_Clear [MinusKelvin]
json.lua [rxi]
profile.lua [itraykov]
simple-love-lights [dylhunn]
]],
support="Apoyen al Autor",
WidgetText={
@@ -330,7 +329,6 @@ return{
atkFX="FX Vis. de Ataque",
frame="Ratio de FPSs(%)",
FTlock="Bloqueo por frames",
text="Texto de Acciones",
score="Puntaje en Pantalla",
@@ -551,6 +549,7 @@ return{
register="Registrarse",
email="Correo Elec.",
password="Contraseña",
-- showEmail="Show Email",
keepPW="Recordar credenciales",
login="Entrar",
},
@@ -655,20 +654,21 @@ return{
['master_m']= {"Master", "M21", "Para Maestros del 20G."},
['master_final']= {"Master", "FINAL", "El verdadero 20G Supremo:\nel final es inalcanzable."},
['master_ex']= {"GrandMaster", "EXTRA", "Para ser un gran maestro,\nacepta este desafío"},
['strategy_e']= {"Strategy", "EASY", "Decisiones rápidas en 20G."},
['strategy_h']= {"Strategy", "HARD", "Decisiones rápidas en 20G."},
['strategy_u']= {"Strategy", "ULTIMATE", "Decisiones rápidas en 20G."},
['strategy_e_plus']={"Strategi", "MUDAH+", "Decisiones rápidas en 20G."},
['strategy_h_plus']={"Strategi", "SULIT+", "Decisiones rápidas en 20G."},
['strategy_u_plus']={"Strategi", "TERAKHIR+", "Decisiones rápidas en 20G."},
['strategy_e']= {"Strategy", "Fácil", "Decisiones rápidas en 20G."},
['strategy_h']= {"Strategy", "Difícil", "Decisiones rápidas en 20G."},
['strategy_u']= {"Strategy", "Supremo", "Decisiones rápidas en 20G."},
['strategy_e_plus']={"Strategy", "Fácil+", "Estrategia sin bodega."},
['strategy_h_plus']={"Strategy", "Difícil+", "Estrategia sin bodega."},
['strategy_u_plus']={"Strategy", "Supremo+", "Estrategia sin bodega."},
['blind_e']= {"A Ciegas", "Parcial", "Para novatos."},
['blind_n']= {"A Ciegas", "Total", "Para jugadores intermedios."},
['blind_h']= {"A Ciegas", "Inmediato", "Para jugadores experimentados"},
['blind_l']= {"A Ciegas", "Inmediato+", "Para profesionales."},
['blind_u']= {"A Ciegas", "?", "¿Estás preparado?"},
['blind_wtf']= {"A Ciegas", "ELFUF", "No, no lo estás."},
['classic_e']= {"Classic", "EASY", "Modo clásico con alta velocidad."},
['classic_e']= {"Clásico", "EASY", "Modo clásico con alta velocidad."},
['classic_h']= {"Clásico", "Difícil", "Modo clásico con alta velocidad."},
['classic_l']= {"Clásico", "Lunático", "Modo clásico con alta velocidad."},
['classic_u']= {"Clásico", "Supremo", "Modo clásico con alta velocidad."},
['survivor_e']= {"Supervivencia", "Fácil", "¿Cuánto tiempo podrás sobrevivir?"},
['survivor_n']= {"Supervivencia", "Normal", "¿Cuánto tiempo podrás sobrevivir?"},

View File

@@ -106,9 +106,9 @@ return{
noPassword="Entrez votre mot de passe",
diffPassword="Les mots de passe ne se correspondent pas",
-- registerRequestSent="Registration request sent",
registerSuccessed="Enregistré avec succès !",
loginSuccessed="Connecté avec succès !",
accessSuccessed="Autorisé avec succès !",
registerOK="Enregistré avec succès !",
loginOK="Connecté avec succès !",
accessOK="Autorisé avec succès !",
-- wsConnecting="Websocket Connecting",
wsFailed="WebSocket connection échouée",
@@ -242,6 +242,8 @@ return{
"C₂₉H₂₅N₃O₅",
"NOT_A_ROBOT",
"sakurw",
"Airun",
"幽灵3383",
"",
"Performance",
"Electric283",
@@ -280,7 +282,6 @@ return{
Cold_Clear [MinusKelvin]
json.lua [rxi]
profile.lua [itraykov]
simple-love-lights [dylhunn]
]],
support="Aider le créateur",
WidgetText={
@@ -421,7 +422,6 @@ return{
atkFX="Effets d'attaque",
frame="Montrer les FPS(%)",
-- FTlock="Frame-Time Lock",
text="Texte d'action",
score="Pop-up de score",
@@ -640,6 +640,7 @@ return{
register="Enregistrement",
email="E-mail",
password="Mot de passe",
-- showEmail="Show Email",
-- keepPW="Remember me",
login="Connexion",
},
@@ -740,7 +741,7 @@ return{
['techmino49_u']= {"Tech 49", "ULTIME", "Bataille de 49 joueurs.\nLe dernier en vie gagne."},
['techmino99_e']= {"Tech 99", "FACILE", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
['techmino99_h']= {"Tech 99", "DIFFICILE", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
['techmino99_u']= {"Tech 99", "ULTIMe", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
['techmino99_u']= {"Tech 99", "ULTIME", "Bataille de 99 joueurs.\nLe dernier en vie gagne."},
['round_e']= {"Tour à tour", "FACILE", "Mode échecs"},
['round_n']= {"Tour à tour", "NORMAL", "Mode échecs"},
['round_h']= {"Tour à tour", "DIFFICILE", "Mode échecs"},
@@ -750,14 +751,14 @@ return{
['master_h']= {"Master", "DIFFICILE", "Challenge 20G pro !"},
-- ['master_m']= {"Master", "M21", "For 20G Masters."},
['master_final']= {"Master", "FINAL", "20G : Un point final impossible à atteindre !"},
-- ['master_ph']= {"Mester", "FANTASMA", "20G: ???"},
-- ['master_ph']= {"Master", "FANTASMA", "20G: ???"},
['master_ex']= {"GrandMaster", "EXTRA", "Tentez de devenir un Grandmaster."},
['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"},
['strategy_h']= {"Strategy", "HARD", "Fast 20G decision"},
['strategy_u']= {"Strategy", "ULTIMATE", "Fast 20G decision"},
-- ['strategy_e_plus']={"Strategi", "MUDAH+", "Keputusan 20G cepat"},
-- ['strategy_h_plus']={"Strategi", "SULIT+", "Keputusan 20G cepat"},
-- ['strategy_u_plus']={"Strategi", "TERAKHIR+", "Keputusan 20G cepat"},
['strategy_e']= {"Stratégie", "FACILE", "Décision rapide 20G"},
['strategy_h']= {"Stratégie", "DIFFICILE", "Décision rapide 20G"},
['strategy_u']= {"Stratégie", "ULTIME", "Décision rapide 20G"},
['strategy_e_plus']={"Stratégie", "FACILE+", "Stratégie sans retenue"},
['strategy_h_plus']={"Stratégie", "DIFFICILE+", "Stratégie sans retenue"},
['strategy_u_plus']={"Stratégie", "ULTIME+", "Stratégie sans retenue"},
['blind_e']= {"Aveugle", "MOITIE", "Pour les novices."},
['blind_n']= {"Aveugle", "TOUT", "Pour les joueurs intermédiaires."},
['blind_h']= {"Aveugle", "SOUDAIN", "Pour les bons jooeurs."},
@@ -766,6 +767,7 @@ return{
['blind_wtf']= {"Aveugle", "WTF", "Vous n'êtes pas prêt."},
['classic_e']= {"Classic", "EASY", "Un mode classique rapide."},
['classic_h']= {"Classic", "DIFFICILE", "Un mode classique rapide."},
['classic_l']= {"Classic", "LUNATIQUE", "Un mode classique rapide."},
['classic_u']= {"Classic", "ULTIME", "Un mode classique rapide."},
['survivor_e']= {"Survivor", "FACILE", "Pendant combien de temps survivrez-vous ?"},
['survivor_n']= {"Survivor", "NORMAL", "Pendant combien de temps survivrez-vous ?"},
@@ -798,10 +800,10 @@ return{
['tsd_e']= {"TSD Challenge", "FACILE", "T-spin doubles uniquement !"},
['tsd_h']= {"TSD Challenge", "DIFFICILE", "T-spin doubles uniquement !"},
['tsd_u']= {"TSD Challenge", "ULTIME", "T-spin doubles uniquement !"},
-- ['backfire_n']= {"Backfire", "NORMAL", "Self-send garbages"},
-- ['backfire_h']= {"Backfire", "HARD", "Self-send garbages"},
-- ['backfire_l']= {"Backfire", "LUNATIC", "Self-send garbages"},
-- ['backfire_u']= {"Backfire", "ULTIMATE", "Self-send garbages"},
-- ['backfire_n']= {"Backfire", "NORMAL", "Hold back the backfiring garbage lines"},
-- ['backfire_h']= {"Backfire", "HARD", "Hold back the backfiring garbage lines"},
-- ['backfire_l']= {"Backfire", "LUNATIC", "Hold back the backfiring garbage lines"},
-- ['backfire_u']= {"Backfire", "ULTIMATE", "Hold back the backfiring garbage lines"},
-- ['sprintAtk']= {"Sprint", "100 Attack", "Send 100 lines!"},
-- ['sprintEff']= {"Sprint", "Efficiency", "Send more attack in 40lines!"},
['zen']= {'Zen', "200", "200 lignes sans limites de temps."},

View File

@@ -27,11 +27,11 @@ return{
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
cleared="$1 baris",
mini="Mini",b2b="B2B ",b3b="B2B2B ",
PC="PC",HPC="Hampir PC",
PC="PC",HPC="Setengah PC",
replaying="[Diulang]",
tasUsing="[TAS]",
stage="Tahap $1 selesai!",
stage="Bagian $1 selesai!",
great="Bagus!",
awesome="Luar biasa!",
almost="Hampir!",
@@ -40,7 +40,7 @@ return{
speedup="Percepatkan!",
missionFailed="Salah",
speedLV="Kecepatan lvl",
speedLV="Kecptn lvl",
piece="Blok",line="Baris",atk="Baris Terkirim",eff="Efisiensi",
rpm="RPM",tsd="TSD",
grade="Nilai",techrash="Techrash",
@@ -56,7 +56,7 @@ return{
gameover="Tamat",
pause="Terjeda",
pauseCount="Jeda-jeda",
pauseCount="Jeda",
finesse_ap="Semua sempurna",
finesse_fc="Kombo penuh",
@@ -75,7 +75,7 @@ return{
loadError_other="'$1' eror memuat: $2",
loadError_unknown="'$1' eror memuat: alasan tidak diketahui",
saveError_duplicate="'$1' eror menyimpan: nama file tergAnda",
saveError_duplicate="'$1' eror menyimpan: nama file terganda",
saveError_encode="'$1' eror menyimpan: gagal menyandi",
saveError_other="'$1' eror menyimpan: $2",
saveError_unknown="'$1' eror menyimpan: alasan tidak diketahui",
@@ -85,10 +85,10 @@ return{
exportSuccess="Ekspor berhasil",
importSuccess="Impor berhasil",
dataCorrupted="Data rusak",
pasteWrongPlace="Menempel di tempat yang salah?",
pasteWrongPlace="Apakah Anda menempelkannya di tempat yang salah?",
noFile="File tidak ada",
nowPlaying="Sekarang mendengarkan:",
nowPlaying="Musik:",
VKTchW="Berat sentuhan",
VKOrgW="Berat asal",
@@ -117,9 +117,9 @@ return{
noPassword="Silahkan masukki kata sandi Anda",
diffPassword="Kata sandi tidak sama",
registerRequestSent="Permintaan daftar telah terkirim.",
registerSuccessed="Pendaftaran sukses!",
loginSuccessed="Anda sekarang tergabung!",
accessSuccessed="Akses diberikan",
registerOK="Pendaftaran sukses!",
loginOK="Anda sekarang tergabung!",
accessOK="Akses diberikan",
wsConnecting="Menghubungkan websocket…",
wsFailed="Koneksi websocket gagal",
@@ -151,7 +151,7 @@ return{
next="BLOK LANJUT\nMengubah jumlah blok lanjut yang ditampilkan.",
hold="SIMPAN\nMengubah jumlah blok yang bisa disimpan.",
hideNext="BLOK LANJUT Tersembunyi\nMenyembunyikan beberapa blok lanjut.",
infHold="SIMPAN SELAMANYA\nMemungkinkan Anda untuk menyimpan blok-blok selamanya.",
infHold="SIMPAN TAK TERBATAS\nMemungkinkan Anda untuk menyimpan blok-blok tidak terbatas.",
hideBlock="Sembunyikan Blok Aktif\nMenyembunyikan blok yang Anda mengontrol.",
hideGhost="Sembunyikan Blok Hantu\nMenyembunyikan blok yang menunjukkan tempat blok yang sedang dikontrol akan jatuh.",
hidden="Sembunyikan Blok Terdarat\nMenyembunyikan blok yang sudah mendarat setelah waktu yang tertentu.",
@@ -180,7 +180,7 @@ return{
"Diterima:",
"Jumlah Tindakan Membuat Baris:",
"Spins:",
"B2B/B3B/PC/Hampir PC:",
"B2B/B3B/PC/Setengah PC:",
"Efisiensi Tombol:",
},
radar={"BLOK","SERANGAN","SRGN + BLOK","SRGN TERKIRIM","KECEPATAN","GALI"},
@@ -191,12 +191,12 @@ return{
"Jumlah Waktu Bermain:",
"Tombol/Putar/Simpan:",
"Blok/Baris/Serangan:",
"Serangan Diterima/Ditolak/Muncul:", -- what is this
"Serangan Diterima/Ditolak/Muncul:",
"Gali/Serangan Gali:",
"Efisiensi/Efisiensi Gali:",
"B2B/B2B2B:",
"PC/Hampir PC:",
"Efisiensi Tombol Tidak Maksimal/Nilai:",
"PC/Setengah PC:",
"Kesalahan Efisiensi Tombol/Nilai:",
},
aboutTexts={
"Ini hanya penyusun blok *normal*. Sungguh, hanya itu saja.",
@@ -277,6 +277,8 @@ return{
"C₂₉H₂₅N₃O₅",
"NOT_A_ROBOT",
"sakurw",
"Airun",
"幽灵3383",
"",
"Pertunjukan",
"Electric283",
@@ -302,8 +304,8 @@ return{
"huaji2369",
"Lexitik",
"Tourahi Anime",
"[All other test staff]",
"And You!",
"[Semua staf penguji lainnya]",
"Dan Anda!",
},
used=[[
Alat-alat yang digunakan:
@@ -315,7 +317,6 @@ return{
Cold_Clear [MinusKelvin]
json.lua [rxi]
profile.lua [itraykov]
simple-love-lights [dylhunn]
]],
support="Dukung pencipta",
WidgetText={
@@ -345,7 +346,7 @@ return{
pause={
setting="Pengaturan (S)",
replay="Ulang (P)",
save="Simpan Pengulangan (O)",
save="Simpan (O)",
resume="Lanjut (esc)",
restart="Coba lagi (R)",
quit="Berhenti (Q)",
@@ -459,7 +460,6 @@ return{
atkFX="Efek Serang",
frame="Kecepatan Bingkai (%)",
FTlock="Lewat Bingkai",
text="Teks Baris",
score="Teks Nilai",
@@ -688,6 +688,7 @@ return{
register="Daftar",
email="Alamat Email",
password="Password",
-- showEmail="Show Email",
keepPW="Ingat Saya",
login="Masuk",
},
@@ -756,110 +757,115 @@ return{
},
},
modes={
['sprint_10l']= {"Balapan", "10L", "Buat 10 baris!"},
['sprint_20l']= {"Balapan", "20L", "Buat 20 baris!"},
['sprint_40l']= {"Balapan", "40L", "Buat 40 baris!"},
['sprint_100l']= {"Balapan", "100L", "Buat 100 baris!"},
['sprint_400l']= {"Balapan", "400L", "Buat 400 baris!"},
['sprint_1000l']= {"Balapan", "1.000L", "Buat 1.000 baris!"},
['sprintPenta']= {"Balapan", "PENTOMINO", "40L dengan pentomino!"},
['sprintMPH']= {"Balapan", "MPH", "Tanpa ingatan\nTanpa pratinjau\nTanpa simpan"},
['dig_10l']= {"Gali", "10L", "Gali 10 baris!"},
['dig_40l']= {"Gali", "40L", "Gali 40 baris!"},
['dig_100l']= {"Gali", "100L", "Gali 100 baris!"},
['dig_400l']= {"Gali", "400L", "Gali 400 baris!"},
['drought_n']= {"Nasib Buruk", "100L", "Tidak ada blok I..."},
['drought_l']= {"Nasib Buruk+", "100L", "Nasib sangat buruk..."},
['marathon_n']= {"Maraton", "NORMAL", "200-baris maraton dengan kecepatan meningkat"},
['marathon_h']= {"Maraton", "SULIT", "200-baris maraton dengan kecepatan tinggi"},
['solo_e']= {"Tarung", "MUDAH", "Kalahkan AInya!"},
['solo_n']= {"Tarung", "NORMAL", "Kalahkan AInya!"},
['solo_h']= {"Tarung", "SULIT", "Kalahkan AInya!"},
['solo_l']= {"Tarung", "GILA", "Kalahkan AInya!"},
['solo_u']= {"Tarung", "TERAKHIR", "Kalahkan AInya!"},
['techmino49_e']= {"Tech 49", "MUDAH", "Pertarungan dengan 49 pemain."},
['techmino49_h']= {"Tech 49", "SULIT", "Pertarungan dengan 49 pemain."},
['techmino49_u']= {"Tech 49", "TERAKHIR", "Pertarungan dengan 49 pemain."},
['techmino99_e']= {"Tech 99", "MUDAH", "Pertarungan dengan 99 pemain."},
['techmino99_h']= {"Tech 99", "SULIT", "Pertarungan dengan 99 pemain."},
['techmino99_u']= {"Tech 99", "TERAKHIR", "Pertarungan dengan 99 pemain."},
['round_e']= {"Giliran", "MUDAH", "Giliran main melawan AI!"},
['round_n']= {"Giliran", "NORMAL", "Giliran main melawan AI!"},
['round_h']= {"Giliran", "SULIT", "Giliran main melawan AI!"},
['round_l']= {"Giliran", "GILA", "Giliran main melawan AI!"},
['round_u']= {"Giliran", "TERAKHIR", "Giliran main melawan AI!"},
['master_n']= {"Jago", "NORMAL", "Untuk pemula 20G"},
['master_h']= {"Jago", "SULIT", "Untuk pro 20G"},
['master_m']= {"Jago", "M21", "Untuk jago 20G"},
['master_final']= {"Jago", "TERAKHIR", "Lebih dari 20G"},
['master_ph']= {"Jago", "KHAYALAN", "???"},
['master_ex']= {"Sangat Jago", "EKSTRA", "Blok tidak kelihatan"},
['master_instinct']={"Jago", "INSTINK", "Bagaimana jika blok terkontrol tersembunyi?"},
['strategy_e']= {"Strategi", "MUDAH", "Keputusan 20G cepat"},
['strategy_h']= {"Strategi", "SULIT", "Keputusan 20G cepat"},
['strategy_u']= {"Strategi", "TERAKHIR", "Keputusan 20G cepat"},
['strategy_e_plus']={"Strategi", "MUDAH+", "Keputusan 20G cepat"},
['strategy_h_plus']={"Strategi", "SULIT+", "Keputusan 20G cepat"},
['strategy_u_plus']={"Strategi", "TERAKHIR+", "Keputusan 20G cepat"},
['blind_e']= {"Tak Terlihat", "MUDAH", "Untuk pemula"},
['blind_n']= {"Tak Terlihat", "NORMAL", "Untuk amatir"},
['blind_h']= {"Tak Terlihat", "SULIT", "Untuk orang berpengalaman"},
['blind_l']= {"Tak Terlihat", "GILA", "Untuk profesional"},
['blind_u']= {"Tak Terlihat", "???", "Apakah Anda siap?"},
['blind_wtf']= {"Tak Terlihat", "TERAKHIR", "Anda belum siap"},
['classic_e']= {"Klasik", "MUDAH", "Rekreasi berkecepatan rendah dari tahun 80-an"},
['classic_h']= {"Klasik", "SULIT", "Rekreasi berkecepatan medium dari tahun 80-an"},
['classic_u']= {"Klasik", "TERAKHIR", "Rekreasi berkecepatan tinggi dari tahun 80-an"},
['survivor_e']= {"Bertahan", "MUDAH", "Berapa lama Anda bisa bertahan?"},
['survivor_n']= {"Bertahan", "NORMAL", "Berapa lama Anda bisa bertahan?"},
['survivor_h']= {"Bertahan", "SULIT", "Berapa lama Anda bisa bertahan?"},
['survivor_l']= {"Bertahan", "GILA", "Berapa lama Anda bisa bertahan?"},
['survivor_u']= {"Bertahan", "TERAKHIR", "Berapa lama Anda bisa bertahan?"},
['attacker_h']= {"Penyerang", "SULIT", "Praktekkan keahlian menyerang Anda!"},
['attacker_u']= {"Penyerang", "TERAKHIR", "Praktekkan keahlian menyerang Anda!"},
['defender_n']= {"Pembela", "NORMAL", "Praktekkan keahlian membela Anda!"},
['defender_l']= {"Pembela", "GILA", "Praktekkan keahlian membela Anda!"},
['dig_h']= {"Pembor", "SULIT", "Praktekkan keahlian menggali Anda!"},
['dig_u']= {"Pembor", "TERAKHIR", "Praktekkan keahlian menggali Anda!"},
['clearRush']= {"Gegas Baris", "NORMAL", "Tutorial all-spin!\n[Dalam pengembangan]"},
['c4wtrain_n']= {"Latihan C4W", "NORMAL", "Kombo tidak terbatas."},
['c4wtrain_l']= {"Latihan C4W", "GILA", "Kombo tidak terbatas."},
['pctrain_n']= {"Latihan PC", "NORMAL", "Latihan PC"},
['pctrain_l']= {"Latihan PC", "GILA", "Latihan PC yang lebih sulit"},
['pc_n']= {"Tantangan PC", "NORMAL", "Dapatkan PC sampai 100 baris!"},
['pc_h']= {"Tantangan PC", "SULIT", "Dapatkan PC sampai 100 baris!"},
['pc_l']= {"Tantangan PC", "GILA", "Dapatkan PC sampai 100 baris!"},
['pc_inf']= {"Tantangan PC", "TAK TERBATAS", "Dapatkan PC sebanyaknya!"},
['tech_n']= {"Tech", "NORMAL", "Coba jaga deret Back-To-Back!"},
['tech_n_plus']= {"Tech", "NORMAL+", "Hanya Spins & PCs dibolehkan"},
['tech_h']= {"Tech", "SULIT", "Coba jaga deret Back-To-Back!"},
['tech_h_plus']= {"Tech", "SULIT+", "Hanya Spins & PCs dibolehkan"},
['tech_l']= {"Tech", "GILA", "Coba jaga deret Back-To-Back!"},
['tech_l_plus']= {"Tech", "GILA+", "Hanya Spins & PCs dibolehkan"},
['tech_finesse']= {"Tech", "EF. TOMBOL", "Efisiensi tombol harus maksimal!"},
['tech_finesse_f']= {"Tech", "EF. TOMBOL+", "Efisiensi tombol maksimal dan tidak ada garis normal!"},
['tsd_e']= {"Tantangan TSD", "MUDAH", "Hanya T-Spin Double dibolehkan!"},
['tsd_h']= {"Tantangan TSD", "SULIT", "Hanya T-Spin Double dibolehkan!"},
['tsd_u']= {"Tantangan TSD", "TERAKHIR", "Hanya T-Spin Double dibolehkan!"},
['backfire_n']= {"Serangan Balik", "NORMAL", "Tahankan serang baliknya!"},
['backfire_h']= {"Serangan Balik", "SULIT", "Tahankan serang baliknya!"},
['backfire_l']= {"Serangan Balik", "GILA", "Tahankan serang baliknya!"},
['backfire_u']= {"Serangan Balik", "TERAKHIR", "Tahankan serang baliknya!"},
['sprintAtk']= {"Balapan", "100 Serangan", "Kirim 100 baris serangan!"},
['sprintEff']= {"Balapan", "Efisiensi", "Kirim lebih banyak serangan sampai 40 baris!"},
['zen']= {"Zen", "200L", "Permainan 200-garis tanpa batas waktu"},
['ultra']= {"Ultra", "EKSTRA", "Permainan 2 menit. Dapatkan nilai sebanyaknya!"},
['infinite']= {"Tak Terbatas", "", "Bak pasir"},
['infinite_dig']= {"Tak Terbatas: Gali","", "Gali, gali, gali"},
['marathon_inf']= {"Maraton", "TAK TERBATAS", "Maraton tanpa akhir."},
['sprint_10l']= {"Balapan", "10L", "Buat 10 baris!"},
['sprint_20l']= {"Balapan", "20L", "Buat 20 baris!"},
['sprint_40l']= {"Balapan", "40L", "Buat 40 baris!"},
['sprint_100l']= {"Balapan", "100L", "Buat 100 baris!"},
['sprint_400l']= {"Balapan", "400L", "Buat 400 baris!"},
['sprint_1000l']= {"Balapan", "1.000L", "Buat 1.000 baris!"},
['sprintPenta']= {"Balapan", "PENTOMINO", "40L dengan pentomino!"},
['sprintMPH']= {"Balapan", "MPH", "Tanpa ingatan\nTanpa pratinjau\nTanpa simpan"},
['dig_10l']= {"Gali", "10L", "Gali 10 baris!"},
['dig_40l']= {"Gali", "40L", "Gali 40 baris!"},
['dig_100l']= {"Gali", "100L", "Gali 100 baris!"},
['dig_400l']= {"Gali", "400L", "Gali 400 baris!"},
['dig_eff_10l']= {"Gali", "EFISIENSI 10L", "Gali 10 baris!"},
['dig_eff_40l']= {"Gali", "EFISIENSI 40L", "Gali 40 baris!"},
['dig_eff_100l']= {"Gali", "EFISIENSI 100L","Gali 100 baris!"},
['dig_eff_400l']= {"Gali", "EFISIENSI 400L","Gali 400 baris!"},
['drought_n']= {"Nasib Buruk", "100L", "Tidak ada blok I..."},
['drought_l']= {"Nasib Buruk+", "100L", "Nasib sangat buruk..."},
['marathon_n']= {"Maraton", "NORMAL", "200-baris maraton dengan kecepatan meningkat"},
['marathon_h']= {"Maraton", "SULIT", "200-baris maraton dengan kecepatan tinggi"},
['solo_e']= {"Tarung", "MUDAH", "Kalahkan AInya!"},
['solo_n']= {"Tarung", "NORMAL", "Kalahkan AInya!"},
['solo_h']= {"Tarung", "SULIT", "Kalahkan AInya!"},
['solo_l']= {"Tarung", "GILA", "Kalahkan AInya!"},
['solo_u']= {"Tarung", "TERAKHIR", "Kalahkan AInya!"},
['techmino49_e']= {"Tech 49", "MUDAH", "Pertarungan dengan 49 pemain."},
['techmino49_h']= {"Tech 49", "SULIT", "Pertarungan dengan 49 pemain."},
['techmino49_u']= {"Tech 49", "TERAKHIR", "Pertarungan dengan 49 pemain."},
['techmino99_e']= {"Tech 99", "MUDAH", "Pertarungan dengan 99 pemain."},
['techmino99_h']= {"Tech 99", "SULIT", "Pertarungan dengan 99 pemain."},
['techmino99_u']= {"Tech 99", "TERAKHIR", "Pertarungan dengan 99 pemain."},
['round_e']= {"Giliran", "MUDAH", "Giliran main melawan AI!"},
['round_n']= {"Giliran", "NORMAL", "Giliran main melawan AI!"},
['round_h']= {"Giliran", "SULIT", "Giliran main melawan AI!"},
['round_l']= {"Giliran", "GILA", "Giliran main melawan AI!"},
['round_u']= {"Giliran", "TERAKHIR", "Giliran main melawan AI!"},
['master_n']= {"Jago", "NORMAL", "Untuk pemula 20G"},
['master_h']= {"Jago", "SULIT", "Untuk pro 20G"},
['master_m']= {"Jago", "M21", "Untuk jago 20G"},
['master_final']= {"Jago", "TERAKHIR", "Lebih dari 20G"},
['master_ph']= {"Jago", "KHAYALAN", "???"},
['master_ex']= {"Sangat Jago", "EKSTRA", "Blok tidak kelihatan"},
['master_instinct']={"Jago", "INSTINK", "Bagaimana jika blok terkontrol tersembunyi?"},
['strategy_e']= {"Strategi", "MUDAH", "Keputusan 20G cepat"},
['strategy_h']= {"Strategi", "SULIT", "Keputusan 20G cepat"},
['strategy_u']= {"Strategi", "TERAKHIR", "Keputusan 20G cepat"},
['strategy_e_plus']={"Strategi", "MUDAH+", "Mode strategi, tetapi tanpa menyimpan"},
['strategy_h_plus']={"Strategi", "SULIT+", "Mode strategi, tetapi tanpa menyimpan"},
['strategy_u_plus']={"Strategi", "TERAKHIR+", "Mode strategi, tetapi tanpa menyimpan"},
['blind_e']= {"Tak Terlihat", "MUDAH", "Untuk pemula"},
['blind_n']= {"Tak Terlihat", "NORMAL", "Untuk amatir"},
['blind_h']= {"Tak Terlihat", "SULIT", "Untuk orang berpengalaman"},
['blind_l']= {"Tak Terlihat", "GILA", "Untuk profesional"},
['blind_u']= {"Tak Terlihat", "???", "Apakah Anda siap?"},
['blind_wtf']= {"Tak Terlihat", "TERAKHIR", "Anda belum siap"},
['classic_e']= {"Klasik", "MUDAH", "Rekreasi berkecepatan rendah dari tahun 80-an"},
['classic_h']= {"Klasik", "SULIT", "Rekreasi berkecepatan medium dari tahun 80-an"},
['classic_l']= {"Klasik", "GILA", "Rekreasi berkecepatan medium-tinggi dari tahun 80-an"},
['classic_u']= {"Klasik", "TERAKHIR", "Rekreasi berkecepatan tinggi dari tahun 80-an"},
['survivor_e']= {"Bertahan", "MUDAH", "Berapa lama Anda bisa bertahan?"},
['survivor_n']= {"Bertahan", "NORMAL", "Berapa lama Anda bisa bertahan?"},
['survivor_h']= {"Bertahan", "SULIT", "Berapa lama Anda bisa bertahan?"},
['survivor_l']= {"Bertahan", "GILA", "Berapa lama Anda bisa bertahan?"},
['survivor_u']= {"Bertahan", "TERAKHIR", "Berapa lama Anda bisa bertahan?"},
['attacker_h']= {"Penyerang", "SULIT", "Praktekkan keahlian menyerang Anda!"},
['attacker_u']= {"Penyerang", "TERAKHIR", "Praktekkan keahlian menyerang Anda!"},
['defender_n']= {"Pembela", "NORMAL", "Praktekkan keahlian membela Anda!"},
['defender_l']= {"Pembela", "GILA", "Praktekkan keahlian membela Anda!"},
['dig_h']= {"Pembor", "SULIT", "Praktekkan keahlian menggali Anda!"},
['dig_u']= {"Pembor", "TERAKHIR", "Praktekkan keahlian menggali Anda!"},
['clearRush']= {"Gegas Baris", "NORMAL", "Tutorial all-spin!\n[Dalam pengembangan]"},
['c4wtrain_n']= {"Latihan C4W", "NORMAL", "Kombo tidak terbatas."},
['c4wtrain_l']= {"Latihan C4W", "GILA", "Kombo tidak terbatas."},
['pctrain_n']= {"Latihan PC", "NORMAL", "Latihan PC"},
['pctrain_l']= {"Latihan PC", "GILA", "Latihan PC yang lebih sulit"},
['pc_n']= {"Tantangan PC", "NORMAL", "Dapatkan PC sampai 100 baris!"},
['pc_h']= {"Tantangan PC", "SULIT", "Dapatkan PC sampai 100 baris!"},
['pc_l']= {"Tantangan PC", "GILA", "Dapatkan PC sampai 100 baris!"},
['pc_inf']= {"Tantangan PC", "TAK TERBATAS", "Dapatkan PC sebanyaknya!"},
['tech_n']= {"Tech", "NORMAL", "Coba jaga deret Back-To-Back!"},
['tech_n_plus']= {"Tech", "NORMAL+", "Hanya Spins & PCs dibolehkan"},
['tech_h']= {"Tech", "SULIT", "Coba jaga deret Back-To-Back!"},
['tech_h_plus']= {"Tech", "SULIT+", "Hanya Spins & PCs dibolehkan"},
['tech_l']= {"Tech", "GILA", "Coba jaga deret Back-To-Back!"},
['tech_l_plus']= {"Tech", "GILA+", "Hanya Spins & PCs dibolehkan"},
['tech_finesse']= {"Tech", "EF. TOMBOL", "Efisiensi tombol harus maksimal!"},
['tech_finesse_f']= {"Tech", "EF. TOMBOL+", "Efisiensi tombol maksimal dan tidak ada garis normal!"},
['tsd_e']= {"Tantangan TSD", "MUDAH", "Hanya T-Spin Double dibolehkan!"},
['tsd_h']= {"Tantangan TSD", "SULIT", "Hanya T-Spin Double dibolehkan!"},
['tsd_u']= {"Tantangan TSD", "TERAKHIR", "Hanya T-Spin Double dibolehkan!"},
['backfire_n']= {"Serangan Balik", "NORMAL", "Tahankan serang baliknya!"},
['backfire_h']= {"Serangan Balik", "SULIT", "Tahankan serang baliknya!"},
['backfire_l']= {"Serangan Balik", "GILA", "Tahankan serang baliknya!"},
['backfire_u']= {"Serangan Balik", "TERAKHIR", "Tahankan serang baliknya!"},
['sprintAtk']= {"Balapan", "100 Serangan", "Kirim 100 baris serangan!"},
['sprintEff']= {"Balapan", "Efisiensi", "Kirim lebih banyak serangan sampai 40 baris!"},
['zen']= {"Zen", "200L", "Permainan 200-garis tanpa batas waktu"},
['ultra']= {"Ultra", "EKSTRA", "Permainan 2 menit. Dapatkan nilai sebanyaknya!"},
['infinite']= {"Tak Terbatas", "", "Bak pasir"},
['infinite_dig']= {"Tak Terbatas: Gali","", "Gali, gali, gali"},
['marathon_inf']= {"Maraton", "TAK TERBATAS", "Maraton tanpa akhir."},
['custom_clear']= {"Tersesuai", "NORMAL"},
['custom_puzzle']= {"Tersesuai", "TEKA-TEKI"},
},
getTip={refuseCopy=true,
"(RUR'U')R'FR2U'R'U'(RUR'F')",
"\"Techmino.app\" tidak bisa dibuka karena penciptanya tidak bisa diverifikasi.",
"\"Techmino.app\" akan merusak komputer Anda. Anda sebaiknya memindah itu ke tempat sampah.",
"\"Techmino.app\" tidak bisa dibuka karena pengembang tidak bisa diverifikasi.",
"\"Techmino.app\" akan merusak komputer Anda. Anda harus memindahnya ke tong sampah.",
"\"TechminOS\"",
"\\jezevec/\\jezevec/\\jezevec/",
"\\osk/\\osk/\\osk/",
@@ -916,8 +922,8 @@ return{
"OHHHHHHHHHHHHHH",
"Main dengan satu tangan!",
"Bermain bagus membutuhkan waktu!",
"dipersembahkan oleh LÖVE",
"dipersembahkan oleh Un..LÖVE",
"Dipersembahkan oleh LÖVE",
"Dipersembahkan oleh Un..LÖVE",
"Server kadang tidak berfungsi",
"Beberapa persyaratan untuk mencapai peringkat X sengaja dibuat sulit bahkan untuk pemain terbaik.",
"Segera Anda akan dapat bermain melawan teman dan musuh di seluruh dunia.",

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More