Compare commits

..

98 Commits

Author SHA1 Message Date
MrZ_26
d987008cf6 版本推进 2022-04-20 19:23:37 +08:00
MrZ_26
73fc7c037d 修复big模式统计行数可能超出200 close #682 2022-04-20 19:23:23 +08:00
MrZ_26
718540db5a 新的mono立绘+重新开放mono语音包选项 2022-04-20 19:22:57 +08:00
MrZ_26
9c2b09e589 修复键盘编辑自定义场地不能切换画笔,同时新增c为智能画笔快捷键 2022-04-19 20:16:14 +08:00
MrZ_26
0c2f0904ef 修复经典模式通关就报错
整理代码
2022-04-17 20:57:40 +08:00
MrZ_26
2ae34bded1 如果加载存档时发生错误会提示有文件丢失而不是蓝屏 2022-04-17 20:57:40 +08:00
C₂₉H₂₅N₃O₅
30b1d2ddfd 大改词典,更新Legals (#683)
* 更新英文翻译
* 修改中文词典小细节
* 更新Legals
2022-04-17 14:31:38 +08:00
MrZ_26
d769604724 修补中文词典 2022-04-10 21:03:51 +08:00
Richard969
573366fed9 对词典进行一些补充和修改 (#681) 2022-04-10 20:24:42 +08:00
MrZ_26
6f3667e65a 制作人员名单添加插图作者 2022-04-08 16:08:35 +08:00
Imple Lee
9426dcdc69 better .gitattributes (#680)
* better .gitattributes

* .gitattributes per directory

* No binary file detection

https://stackoverflow.com/questions/57030698

* fix .github/actions/*/*.yml
2022-04-04 12:28:42 +08:00
MrZ_26
bdb117c0df 添加.gitattributes 2022-04-04 05:35:41 +08:00
MrZ_26
8fd4391549 移除音乐室“old works”文本
整理代码
2022-04-04 05:32:32 +08:00
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
154 changed files with 2214 additions and 1609 deletions

1
.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
* text=auto

2
.github/.gitattributes vendored Normal file
View File

@@ -0,0 +1,2 @@
actions/**/*.yml text eol=lf
workflows/*.yml text eol=lf

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:

1
.github/build/Linux/.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
*.template text eol=lf

1
.github/build/Windows/.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
*.template text eol=crlf

1
.github/build/macOS/.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
*.template text eol=lf

View File

@@ -1,28 +1,28 @@
local arg=arg[1]
if arg=="-apkCode"then
local code=require"version".apkCode
print(code)
elseif arg=="-code"then
local str=require"version".code
print(str)
elseif arg=="-name"then
local str=require"version".string
print(str)
elseif arg=="-release"then
local str=require"version".string:gsub("V","",1)
print(str)
elseif arg=="-updateTitle"then
local note=require"parts.updateLog"
local p1=note:find("\n%d")+1
local p2=note:find("\n",p1)-1
note=note:sub(p1,p2)
print(note)
elseif arg=="-updateNote"then
local note=require"parts.updateLog"
local p1=note:find("\n",note:find("\n%d")+1)+1
local p2=note:find("\n%d",p1+1)
note=note:sub(p1,p2-2)
:gsub(" ","- ")
:gsub(" ","# ")
print(note)
end
local arg=arg[1]
if arg=="-apkCode"then
local code=require"version".apkCode
print(code)
elseif arg=="-code"then
local str=require"version".code
print(str)
elseif arg=="-name"then
local str=require"version".string
print(str)
elseif arg=="-release"then
local str=require"version".string:gsub("V","",1)
print(str)
elseif arg=="-updateTitle"then
local note=require"parts.updateLog"
local p1=note:find("\n%d")+1
local p2=note:find("\n",p1)-1
note=note:sub(p1,p2)
print(note)
elseif arg=="-updateNote"then
local note=require"parts.updateLog"
local p1=note:find("\n",note:find("\n%d")+1)+1
local p2=note:find("\n%d",p1+1)
note=note:sub(p1,p2-2)
:gsub(" ","- ")
:gsub(" ","# ")
print(note)
end

View File

@@ -10,8 +10,6 @@ Powered by LÖVE, © 20062022 LÖVE Development Team.
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. © 2022 rxi.
IBM Plex is copyrighted by the International Business Machines Corporation. IBM and IBM Plex are trademarks of IBM Corp, registered in many jurisdictions worldwide. IBM Plex is licensed under the SIL Open Font License, Version 1.1.
@@ -29,7 +27,7 @@ JetBrains Mono is copyrighted by the JetBrains Mono Project authors. JetBrains M
"Windows", the Windows logo, "Xbox", Xbox logo, and "Microsoft" are registered trademarks of Microsoft Corporation in the United States of America and other countries or regions.
The Apple logo, "Apple Inc.," iOS, iPadOS, macOS, iPhone, and Mac are registered trademarks of Apple Inc. in the United States of America and other countries or regions.
The Apple logo, "Apple Inc.," iOS, iPadOS, macOS, iPhone, Mac, and Apple Arcade are registered trademarks of Apple Inc. in the United States of America and other countries or regions.
"EA" and "Electronic Arts" are registered trademarks of Electronic Arts Inc. © 2022 Electronic Arts Inc.
@@ -38,7 +36,7 @@ SEGA and the SEGA logo are registered trademarks of Sega Corporation. © 2022 Se
Oculus Quest is a registered trademark of Facebook Technologies, LLC. © Meta Platforms, Inc.
"Nintendo" is a registered trademarks of Nintendo Co., Ltd. © 2022 Nintendo Co., Ltd.
"Nintendo" is a registered trademark of Nintendo Co., Ltd. © 2022 Nintendo Co., Ltd.
N3TWORK is a registered trademark of N3TWORK Inc. © 2022 N3TWORK Inc.
@@ -46,6 +44,8 @@ GoldWave is a registered trademark of GoldWave, Inc.
Linux is a registered trademark of Linus Torvalds.
Google is a registered trademark of Google LLC.
Touhou Project © Team Shanghai Alice 20022022.
All other trademarks, logos, and copyrights are the properties of their respective owners.

View File

@@ -30,7 +30,7 @@ SAVEDIR=fs.getSaveDirectory()
--Global Vars & Settings
SFXPACKS={'chiptune'}
VOCPACKS={'miya',--[['mono',]]'xiaoya','miku'}
VOCPACKS={'miya','mono','xiaoya','miku'}
FIRSTLAUNCH=false
DAILYLAUNCH=false
@@ -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')
@@ -180,7 +180,7 @@ Z.setOnFnKeys({
end
end
end,
function()print(WIDGET.getSelected()or"no widget selected")end,
function()print(BG.locked)end,
function()for k,v in next,_G do print(k,v)end end,
function()if love['_openConsole']then love['_openConsole']()end end,
})
@@ -190,9 +190,6 @@ Z.setDebugInfo{
{"Voices",VOC.getQueueCount},
{"Audios",love.audio.getSourceCount},
}
Z.setOnResize(function(w,_)
SHADER.warning:send('w',w*SCR.dpi)
end)
do--Z.setOnFocus
local function task_autoSoundOff()
while true do
@@ -234,12 +231,18 @@ end
Z.setOnQuit(destroyPlayers)
--Load settings and statistics
TABLE.cover (loadFile('conf/user','-canSkip')or{},USER)
TABLE.cover (loadFile('conf/unlock','-canSkip')or{},RANKS)
TABLE.update(loadFile('conf/settings','-canSkip')or{},SETTING)
TABLE.coverR(loadFile('conf/data','-canSkip')or{},STAT)
TABLE.cover (loadFile('conf/key','-canSkip')or{},KEY_MAP)
TABLE.cover (loadFile('conf/virtualkey','-json -canSkip')or{},VK_ORG)
if
not(
pcall(TABLE.cover, loadFile('conf/user', '-json -canSkip')or loadFile('conf/user', '-luaon -canSkip')or{},USER) and
pcall(TABLE.cover, loadFile('conf/unlock', '-json -canSkip')or loadFile('conf/unlock', '-luaon -canSkip')or{},RANKS) and
pcall(TABLE.update,loadFile('conf/settings', '-json -canSkip')or loadFile('conf/settings', '-luaon -canSkip')or{},SETTING) and
pcall(TABLE.coverR,loadFile('conf/data', '-json -canSkip')or loadFile('conf/data', '-luaon -canSkip')or{},STAT) and
pcall(TABLE.cover, loadFile('conf/key', '-json -canSkip')or loadFile('conf/key', '-luaon -canSkip')or{},KEY_MAP) and
pcall(TABLE.cover, loadFile('conf/virtualkey','-json -canSkip')or loadFile('conf/virtualkey','-luaon -canSkip')or{},VK_ORG)
)
then
MES.new('error',"Be careful, an error accured when loading saving, some data was lost")
end
--Initialize fields, sequence, missions, gameEnv for cutsom game
local fieldData=loadFile('conf/customBoards','-string -canSkip')
@@ -288,6 +291,15 @@ IMG.init{
xiaoyaCH='media/image/characters/xiaoya.png',
xiaoyaOmino='media/image/characters/xiaoya_Omino.png',
mikuCH='media/image/characters/miku.png',
z={
character='media/image/characters/z_character.png',
screen1='media/image/characters/z_screen1.png',
screen2='media/image/characters/z_screen2.png',
particle1='media/image/characters/z_particle1.png',
particle2='media/image/characters/z_particle2.png',
particle3='media/image/characters/z_particle3.png',
particle4='media/image/characters/z_particle4.png',
},
electric='media/image/characters/electric.png',
hbm='media/image/characters/hbm.png',
@@ -321,6 +333,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 +379,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 +562,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

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.

Before

Width:  |  Height:  |  Size: 88 KiB

After

Width:  |  Height:  |  Size: 140 KiB

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

@@ -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

@@ -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

@@ -296,8 +296,10 @@ local L={
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==100 then
P.gameEnv.drop,P.gameEnv.lock=2,2
P.gameEnv.sddas,P.gameEnv.sdarr=2,2
if D.target>=100 then
D.lvl=D.lvl+1
end
local dropSpd=GetGravity(D.lvl)
if D.target==200 then P:win('finish') return
elseif dropSpd~=P.gameEnv.drop then
P.gameEnv.drop,P.gameEnv.lock=dropSpd,dropSpd
P.gameEnv.sddas,P.gameEnv.sdarr=dropSpd,dropSpd
SFX.play('warn_1')
elseif D.target==200 then
P:win('finish')
return
else
SFX.play('reach')
end

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 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

@@ -2,7 +2,15 @@ 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}
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
@@ -66,15 +74,9 @@ local function getDas(l)
6
end
local function getGrade()
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+"
}
if int_grade==nil then int_grade=0 end
if rollGrades==nil then rollGrades=0 end
return gradeList[math.min(math.floor(int_grade_boosts[int_grade+1]+rollGrades+cools+1-regrets),#gradeList)]
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
@@ -108,35 +110,56 @@ return{
lock=30,
wait=23,
fall=25,
noTele=true,
keyCancel={10,11,12,14,15,16,17,18,19,20},
das=16,arr=1,
minsdarr=1,
ihs=true,irs=true,ims=false,
mesDisp=function(P)
gc.setColor(1,1,1,1)
setFont(45)
mText(TEXTOBJ.grade,63,180)
setFont(62)
mStr(getGrade(),63,110)
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)
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)
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)
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,
@@ -173,6 +196,7 @@ return{
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
@@ -214,7 +238,7 @@ return{
BG.set('lightning')
elseif s>9 then
if cools>8 then
E.lockFX=E.lockFX>1 and 1 or E.lockFX
if E.lockFX and E.lockFX>1 then E.lockFX=1 end
P:setInvisible(5)
else
P:setInvisible(300)
@@ -245,34 +269,38 @@ return{
isInRollTrans=false
prevDrop70=false
nextSpeedUp=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}
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.min(math.floor(int_grade_boosts[int_grade+1]+rollGrades+cools-regrets),36)
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
if P.waiting>=220 then
--Make field invisible
for j=1,#P.field do for i=1,10 do
P.visTime[j][i]=P.visTime[j][i]-0.001
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
for _=#P.field,1,-1 do
P.field[_],P.visTime[_]=nil
end
TABLE.cut(P.field)
TABLE.cut(P.visTime)
elseif P.waiting==180 then
playReadySFX(3,3)
elseif P.waiting==120 then
playReadySFX(2,2)
playReadySFX(2,1)
elseif P.waiting==60 then
playReadySFX(1,1)
elseif P.waiting==1 then
playReadySFX(0,0)
playReadySFX(0,1)
isInRollTrans=false
isInRoll=true
BGM.play('hope')
@@ -282,12 +310,15 @@ return{
end
if P.waiting<=0 and grade_points>0 and not isInRoll then
decayTimer=decayTimer+1
if decayTimer>=decayRate[int_grade+1] then
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+3600 then
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

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

@@ -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.

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

View File

@@ -77,130 +77,130 @@ return{
{"テトリスオンラインサーバー",
"tetrisonline servers サーバー テトリスオンライン",
"org",
"ポーランドのサーバーにアクセスするには \"Tetris Online Poland\" とGoogleで検索してください.\n地球儀のアイコンからテトリスオンライン研究サーバーの情報にアクセスできます。",
"ポーランドのサーバーにアクセスするには \"Tetris Online Poland\" とGoogleで検索してください\n地球儀のアイコンからテトリスオンライン研究サーバーの情報にアクセスできます。",
"http://teatube.ltd/tos",
},
{"サポート1",
"support wechat vx alipay zfb サポート",
"support wechat vx alipay zfb サポート 寄付 支援",
"org",
FNNS and "This feature is restricted due to platform policy restrictions. You may discuss about this feature in our Discord server." or "To donate to Techmino via WeChat Pay or Alipay, type \"support\" in console.",
FNNS and "この機能はプラットフォームのポリシー制限が原因で使えません。うちらのDiscordサーバーでこの機能に関して話してください。" or "WechatやAlipayでTechminoに寄付する場合、コンソール内で「support」と打ってください。",
},
{"Support 2",
"support afdian",
{"サポート2",
"support afdian サポート 寄付 支援",
"org",
FNNS and "This feature is restricted due to platform policy restrictions. You may discuss about this feature in our Discord server. The URL in this entry is a rickroll, by the way." or "To donate to Techmino via Aifadian, use the globe icon on the bottom right to open URL. Aifadian charges 6% transaction fee off your purchase.",
FNNS and "この機能はプラットフォームのポリシー制限が原因で使えません。うちらのDiscordサーバーでこの機能に関して話してください。ちなみに、ここにあるURLはリックくんです。" or "AifadianでTechminoに寄付する場合、 右下の地球儀のアイコンからURLを開いてください。注意としてAifadianは支払いの際に6%の手数料が取られます。",
FNNS and"https://youtu.be/dQw4w9WgXcQ"or"https://afdian.net/@MrZ_26",
},
{"Support 3",
"support p\97\116\114\101\111\110",
{"サポート3",
"support サポート 寄付 支援 p\97\116\114\101\111\110",
"org",
FNNS and "This feature is restricted due to platform policy restrictions. You may discuss about this feature in our Discord server. The URL in this entry is a rickroll, by the way." or "To donate to Techmino via P\97\116\114\101\111\110, use the globe icon on the bottom right to open URL. P\97\116\114\101\111\110 charges 7.9% + 0.30 USD transaction fee off your purchase that is greater than 3 USD.",
FNNS and "この機能はプラットフォームのポリシー制限が原因で使えません。うちらのDiscordサーバーでこの機能に関して話してください。ちなみに、ここにあるURLはリックくんです。" or "P\97\116\114\101\111\110でTechminoに寄付する場合、 右下の地球儀のアイコンからURLを開いてください。注意としてP\97\116\114\101\111\110は支払いの際に7.9%の手数料、さらに3ドル以上の支払いの際に0.30米ドル分の手数料が取られます。",
FNNS and"https://youtu.be/dQw4w9WgXcQ"or"https://www.p\97\116\114\101\111\110.com/techmino",
},
--Games
{"TTT",
"tetris trainer tres bien",
{"テトリス トレーナー トレビアン (TTT)",
"tetris trainer tres bien テトリス トレーナー トレビアン",
"game",
"Tetris Trainer Très-Bien. A hands-on tutorial of advanced techniques in modern Tetris.\nRecommended for players that can complete a 40-line Sprint with all Tetris line clears and no hold.\nCovered topics include T-Spin, finesse, SRS, and some battle setups.\nLink in Japanese.",
"テトリス トレーナー トレビアン。現代テトリスの複雑な技を実践的に学ぶことができるサイトです。\n40ラインスプリントをホールド無しで全部テトリスでクリアできる人にオススメです。\nT-Spin、効率、SRS、対戦での地形戦略等の項目があります。\n日本語のサイトです。",
"http://taninkona.web.fc2.com/ttt/",
},
{"TTPC",
"tetris perfect clear challenge",
"tetris perfect clear challenge テトリス パーフェクトクリア パフェ チャレンジ",
"game",
"Tetris Perfect Clear Challenge. The PC opener tutorial for SRS and 7-Bag.\nRecommended for players that have completed TTT. You need to know SRS to play this.\nIncludes only the basic PC opener.\nLink translated to Simplified Chinese; originally in Japanese.",
"テトリスパーフェクトクリアチャレンジ。SRSと7-Bagを採用した開幕パーフェクトクリアの学習用サイトです。\nテトリストレーナートレビアンをクリアした人達にオススメです。SRSと言う回転システムを知る必要があります。\n基本的な開幕パーフェクトクリアのテンプレしかありません。\n簡体字に翻訳されており、元の文章は日本語です。",
"http://teatube.ltd/ttpc",
},
{"NAZO",
"nazo",
"game",
"All sorts of SRS puzzles. Recommended for players that have completed TTT.\nHas T-Spin and all spin puzzles of all difficulties.\nLink translated to Simplified Chinese; originally in Japanese.",
"SRSに関して色々なパズルを備えています。テトリストレーナートレビアンをクリアした人達にオススメです。\nT-SpinやAll Spin等の問題を多様の難しさを備えています。\n簡体字に翻訳されており、元の文章は日本語です。",
"http://teatube.ltd/nazo",
},
{"Side Note 1",
"note nb NB DM notice",
{"補足1",
"note nb NB DM notice 補足 注意",
"game",
"The following contents are some brief introductions about some official and fan-made Tetris games with high popularity. We make absolutely no guarantees that they would cover every Tetris game. Also, the author of this game has made some comments on some of these games. Notice that they are just personal opinions and cannot be used to judge the qualities of these games. To better differentiate between the facts and opinions, all the commentary contents are enclosed with square brackets and are separated from the main contents.",
"次からの内容は人気が高い公式とファンテトリスゲームの簡単な説明です。うちらが全てのテトリスゲームをカバーできる保障は絶対にありません。後、このゲームの作者達がいくつかのゲームに対してコメントしています。お察しの通り個人的な意見であり、これらのゲームに対しての評価等には使えません。上手く事実と意見を分ける為、意見文にはカギカッコで囲まれており、更に本文と独立して書かれています。",
},
{"King of Stackers",
"kos kingofstackers",
"kos kingofstackers キングオブスタッカーズ",
"game",
"Browser Game | Multiplayer | Mobile Support\nKoS for short. A turn-based battle Tetris game. In this game, the players can place seven tetrominoes in his or her turn, and garbage lines can enter the field only if the player places a block that does not clear a line. This game requires careful thinking and there are multiple modes with different attack mechanics.",
"ブラウザーゲーム | マルチプレイ | 携帯サポートあり\n通称: KoS。ターン制の対戦型テトリスゲームです。このゲームでは、プレイヤーは自身のターンの時に7つのミを置くことができます、更にもしプレーヤがミを一つ置いてラインをクリアできなかった場合、フィールドの中にお邪魔が入ってきます。 このゲームではかなりの思考力が求められます、更にそれぞれ別々の火力システムを採用したゲームモードが沢山あります。",
"https://kingofstackers.com/games.php",
},
{"Tetr.js",
"tetrjs tetr.js",
"game",
"Browser Game | Singleplayer | Mobile Support\nA browser-based Tetris game. It has many professional tunings and many modes, but the visuals are simple and there are barely any animations; besides that, only a few on-screen control schemes are available to mobile.\nLink to Farter's Dig Mod, which itself is a mod of another version. Also has another mod called Tetr.js Enhanced (You can find the link on Tetris Wiki).",
"ブラウザーゲーム | シングルプレイ | 携帯サポートあり\nブラウザーベースのテトリスゲームです。様々な高度な設定やゲームモードを要しております、しかしビジュアル面では簡素でアニメーションも殆どありません。それとは別に、モバイルで利用できる画面の操作方法はそれ程多くありません。\nリンク先は他のバージョンを改造・Mod化した「Farter's Dig Mod」です。更に別のMod版「Tetr.js Enhanced」もあります。 (Tetris Wikiにてリンクがあります)。",
"http://farter.cn/t",
},
{"Tetra Legends",
"tl tetralegends",
"tl tetralegends テトラレジェンズ",
"game",
"Browser Game | Singleplayer | No Mobile Support\nOr TL for short. It has many single-player modes, two hidden rhythm modes, and visualizes many hidden mechanics with rich animations. The development of this game was halted for multiple reasons in December 2020.",
"ブラウザーゲーム | シングルプレイ | 携帯サポートなし\n省略として「TL」。沢山のシングルプレイ用のモード、2つの隠し要素のリズムゲーム、更に豪華なアニメーションと一緒に沢山の隠れ絡繰りなどが盛り込まれています。12月の2020年、沢山の不都合によりこのゲームの開発が頓挫しました。",
"https://tetralegends.app",
},
{"Ascension",
"asc ASC",
"asc ASC アスセンクション",
"game",
"Browser Game | Singleplayer/Multiplayer\nOr ASC for short. It uses its own rotation system (also called ASC) and has many single-player modes. Battle modes are currently under beta testing (15/Dec/2021). The Stack mode in this game was also inspired by Ascension. ",
"ブラウザーゲーム | シングルプレイ/マルチプレイ\n省略として「ASC」。独自の回転システム (これの名前も「ASC) を採用しており更には沢山のシングルプレイ用のモードを兼ね揃えています。12月15日2021年現在、バトルモードは現在の所、Beta開発中であります。Techminoにある「スタックモード」はこのゲームからアイデアを取っています。",
"https://asc.winternebs.com",
},
{"Jstris",
"js jstris",
"js jstris ジェストリス",
"game",
"Browser Game | Singleplayer/Multiplayer | Mobile Support\nOr JS for short. It has some single-player modes with multiple customizable parameters, Adjustable virtual keys layouts for mobile, but it doesn't have any animation. ",
"ブラウザーゲーム | シングルプレイ/マルチプレイ | 携帯サポートあり\n省略として「Js」。いくつかの変数をいじれるシングルプレイ用のゲームモードがいくつかあり、モバイル用のバーチャルキーも設定できますが、アニメーションはありません。",
"https://jstris.jezevec10.com",
},
{"TETR.IO",
"io tetrio tetr.io",
"io tetrio tetr.io テトリオ",
"game",
"Browser Game | Singleplayer/Multiplayer\nOr IO for short. It has a ranking system and custom game with many adjustable parameters. Also, it provides desktop clients for improved performances and no ads.\n[It seems that Safari cannot open this game.]",
"ブラウザーゲーム | シングルプレイ/マルチプレイ\n省略として「IO (イオ)」。 ランキングシステムを備えており、沢山の変数をいじれるカスタムゲームもあります。更にパフォーマンス上昇と広告を消すことができるデスクトップ用のクライアント (ソフトウェア) もあります。\n[どうやらSafariではこのゲームを開けないらしい。]",
"https://tetr.io",
},
{"Nuketris",
"nuketris",
"nuketris ヌケトリス ヌークトリス",
"game",
"*Browser Game | Singleplayer/Multiplayer\nA block stacker game with 1V1 ranked matches and basic single-player modes.",
"ブラウザーゲーム | シングルプレイ/マルチプレイ\n1対1のランクマッチと基本的なシングルプレイモードがあるブロック積み上げゲームです。",
"https://nuketris.herokuapp.com",
},
{"Worldwide Combos",
"wwc worldwidecombos",
"wwc worldwidecombos ワールドワイドコンボ 連",
"game",
"Browser Game | Singleplayer/Multiplayer\nOr WWC for short. It has worldwide 1V1 ranked matches, recorded battles (which means that your opponent doesn't have to be a real person), many different rulesets, and bomb-handicapped garbage lines.",
"ブラウザーゲーム | シングルプレイ/マルチプレイ\n省略として「WWC」。このゲームは1対1のランクマッチ、過去とのバトルつまり相手が本当の人でなくてもできる、沢山のルールセット、そしてハンディキャップされた爆弾お邪魔ラインなどがあります。",
"https://worldwidecombos.com",
},
{"Tetris Friends",
"tf tetrisfriends notrisfoes",
"tf tetrisfriends notrisfoes テトリスフレンズ ノートリスフォーズ",
"game",
"Browser Game | Singleplayer/Multiplayer\n or TF for short, a now-defunct official Tetris game. Used to be a popular game but now nobody plays it because the website was shut down. However an unofficial private server known as \"Notris Foes\" still exists and you will need to download desktop client for full experiences.",
"ブラウザーゲーム | シングルプレイ/マルチプレイ\n省略として「TF」、営業停止した公式テトリスゲームです。元々このゲーム自体は有名でしたが、ウェブサイトの閉鎖と共に遊べなくなりました。しかし、非公式のプライベートサーバー、通称: \"Notris Foes\"、が未だに存在しており、これを遊ぶにはデスクトップのクライアントをダウンロードする必要があります。",
},
{"tetris.com",
"tetris online official",
"tetris online official テトリス オンライン 公式 こうしき コウシキ",
"game",
"Browser Game | Singleplayer\nThe Tetris game on tetris.com. It only has one mode — marathon, and you can control the game with your mouse.",
"ブラウザーゲーム | シングルプレイ\ntetris.comにあるテトリスゲーム。「マラソン」しかモードがなく、マウスでコントロールできるのが特徴。",
},
{"Tetris Gems",
"tetris online official gem",
"tetris online official gem テトリス オンライン 公式 こうしき コウシキ ジェム",
"game",
"Browser Game | Singleplayer\nAnother Tetris game from tetris.com. It has the gravity mechanism, and each game lasts for 1 minute. There are three kinds of gem blocks with different abilities.",
"ブラウザーゲーム | シングルプレイ\ntetris.comにあるテトリスゲーム。重力システムがあり、それぞれのゲームは1分あります。3種類のジェムブロックがあり、それぞれ別の機能があります。",
},
{"Tetris Mind Bender",
"tetris online official gem",
"tetris online official gem テトリス オンライン 公式 こうしき コウシキ ジェム",
"game",
"Browser Game | Singleplayer\nAnother Tetris game from tetris.com. It introduced \"Mind Bender\" minoes on the basis of marathon mode. Clearing a line with a Mind Bender mino will give you either a good or bad effect.",
"ブラウザーゲーム | シングルプレイ\ntetris.comにあるテトリスゲーム. \"Mind Bender\"(マインドベンダー)ミノという機能がマラソンモードを中心にあり。マインドベンダーミノでラインクリアすると良い・悪いのどちらかの効果が発揮します。",
},
{"Techmino",
"techmino",
"techmino テックミノ",
"game",
"Cross-Platform | Singleplayer/Multiplayer\nOr Tech for short. A block stacker game developed using LÖVE. It has many single-player modes and many customizable parameters, and online multiplayer modes are gradually being developed.",
"クロスプラットフォーム | シングルプレイ/マルチプレイ\n通称「テック」。LÖVEという開発ソフトでできたブロック積み上げゲーム。沢山の変数変更可能なシングルプレイモードがたくさんあり、オンライン機能も徐々に開発されています。",
},
{"Falling Lightblocks",
"fl fallinglightblocks",
"fl fallinglightblocks フォーリング ライトブロックス",
"game",
"Browser Game/iOS/Android | Singleplayer/Multiplayer\n A cross-platform Tetris game that can be played in portrait and landscape modes. It has fixed DAS and line clear ARE. Has some customizable controls on mobile. Most of the game modes are designed based on NES classic Tetris, but there are some modern-ish modes. Battles are half turn-based, half real-time, and garbage cannot be buffered or canceled.",
"ブラウザーゲーム/iOS/アンドロイド | シングルプレイ/マルチプレイ\n A cross-platform Tetris game that can be played in portrait and landscape modes. It has fixed DAS and line clear ARE. Has some customizable controls on mobile. Most of the game modes are designed based on NES classic Tetris, but there are some modern-ish modes. Battles are half turn-based, half real-time, and garbage cannot be buffered or canceled.",
"https://golfgl.de/lightblocks/",
},
{"Cambridge",
@@ -785,6 +785,11 @@ return{
"term",
"Soft Drop Factor\n\nA way to define soft drop speed as a multiple of natural falling speed. In guideline games, the soft drop is usually 20x the speed of natural falling, i.e. it has an SDF of 20. Techmino does not use SDF to define soft drop speed.",
},
{"Shape & Names",
"mino",
"term",
"Z"..CHAR.mino.Z.." S"..CHAR.mino.S.." J"..CHAR.mino.J.." L"..CHAR.mino.L.." T"..CHAR.mino.T.." O"..CHAR.mino.O.." I"..CHAR.mino.I.." Z5"..CHAR.mino.Z5.." S5"..CHAR.mino.S5.." P"..CHAR.mino.P.." Q"..CHAR.mino.Q.." F"..CHAR.mino.F.." E"..CHAR.mino.E.." T5"..CHAR.mino.T5.." U"..CHAR.mino.U.." V"..CHAR.mino.V.." W"..CHAR.mino.W.." X"..CHAR.mino.X.." J5"..CHAR.mino.J5.." L5"..CHAR.mino.L5.." R"..CHAR.mino.R.." Y"..CHAR.mino.Y.." N"..CHAR.mino.N.." H"..CHAR.mino.H.." I5"..CHAR.mino.I5.." I3"..CHAR.mino.I3.." C"..CHAR.mino.C.." I2"..CHAR.mino.I2.." O1"..CHAR.mino.O1,
},
{"Bag7 generator",
"bag7bag randomgenerator",
"term",
@@ -890,6 +895,12 @@ return{
"term",
"Any input device takes some time for the input to reach the game. This delay can range from a few milliseconds to a few dozen milliseconds.\nIf input delay is too long, the controls can feel uncomfortable.\nThis delay is often due to the performance of the hardware and software used, and often out of your control. Turn on performance mode (or turn off power saving mode) on your device, and turn on gaming mode on your monitor/TV (if you have one), may help reducing input delay.",
},
{"Secret Grade",
"larger than",
"term",
"",
HDsearch.."Secret_Grade_Techniques",
},
{"Cold Clear",
"cc coldclear ai bot",
"term",
@@ -1129,7 +1140,7 @@ return{
{"Amemiya Taiyou",
"amemiya taiyou",
"name",
"(あめみや たいよう)\n\nOne of the top players.\nWon champion on a game in Puyo Puyo Tetris's Swap mode.",
"(あめみや たいよう)\n\nOne of the top players.\nWon champion on a game in Puyo Puyo Tetris's Swap mode.",
},
{"Ajanba",
"ajb",

File diff suppressed because it is too large Load Diff

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,7 +114,7 @@ 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.",
registerOK="Sign up successful!",
loginOK="You are now logged in!",
@@ -182,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:",
@@ -197,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",
@@ -249,6 +249,12 @@ return{
"(旋律星萤)",
"(T0722)",
"",
"Illustrations",
"Miya",
"Mono",
"Xiaoya",
"葉枭",
"",
"Musical Designs",
"MrZ",
"柒栎流星",
@@ -315,7 +321,6 @@ return{
Cold_Clear [MinusKelvin]
json.lua [rxi]
profile.lua [itraykov]
simple-love-lights [dylhunn]
]],
support="Support the author",
WidgetText={
@@ -370,7 +375,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",
@@ -459,7 +464,6 @@ return{
atkFX="Atk FX",
frame="Render Frame Rate (%)",
FTlock="Frame skip",
text="Line Clear Pop-Ups",
score="Score Pop-Ups",
@@ -630,7 +634,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)",
@@ -688,6 +692,7 @@ return{
register="Sign Up",
email="Email Address",
password="Password",
showEmail="Show Email",
keepPW="Remember me",
login="Log In",
},
@@ -756,112 +761,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",
@@ -884,22 +899,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.",
@@ -908,8 +923,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!",
@@ -929,12 +944,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.",
@@ -967,7 +982,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!"},
@@ -979,8 +994,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

@@ -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?"},

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