Compare commits

...

166 Commits

Author SHA1 Message Date
MrZ_26
8a61172764 版本推进 2022-05-16 00:24:58 +08:00
MrZ_26
97fd1721c5 中文词典新增timing词条 2022-05-13 21:40:14 +08:00
MrZ_26
55419cc183 调整一处中文模式说明错误 2022-05-07 12:52:32 +08:00
Imple Lee
db47528a37 check syntax validity in automatic test (#701) 2022-05-07 12:30:27 +08:00
Imple Lee
38be81114f add dig_techrash_10l.lua (#703) 2022-05-07 12:28:31 +08:00
Imple Lee
6c960fdde8 fix line breaks in manuals (#700)
Currently manuals can't be automatically fix, so for now we can only
break them manually....
2022-05-07 12:25:09 +08:00
MrZ_26
05c277a690 可以根据设置显示日文的说明书了 2022-05-05 16:15:28 +08:00
Imple Lee
9dab204ae8 change fixed URL to relative URL in GitHub Actions (#699) 2022-05-05 16:11:47 +08:00
Imple Lee
075f643fb7 check font in automatic test (#698)
* check font in automatic test

* fix `description` in `action.yml`

* check font first
because it's faster

* add link to missing character

* fix grammar error

* fix grammar error again

* fix SHA error

* fix one-line error to align with github

* fix: make line-number start from 1
2022-05-04 18:25:52 +08:00
NOT_A_ROBOT
8d4e2fa0d0 Improved invis/fading roll modes (#697)
* Added target line in master_ex

* Added roll target line in master_g

* Added roll countdown during transition in master_g
2022-05-04 18:06:42 +08:00
MrZ_26
5d05583e26 修正TRS的O变JL条件错误 2022-05-04 14:46:24 +08:00
MrFaq2018
31425440dc Update lang_es.lua (#695) 2022-05-04 12:41:18 +08:00
sakurw
5409e18ede Update manual_ja.txt (#692) 2022-05-04 12:40:52 +08:00
MrZ_26
1d50e37df2 微调中文词典一处用词 2022-05-03 23:26:43 +08:00
MrZ_26
afa86fe0ac 修正lang_es少一个括号 2022-05-03 23:21:41 +08:00
sakurw
77b031fdde Update lang_ja.lua (#694) 2022-05-03 21:51:26 +08:00
MrZ_26
d0c71cd0af 订正一处英文说明书的错误 2022-05-03 20:59:06 +08:00
MrZ_26
5b743a4103 一处治标不治本的玩家游戏结束时的场地矩阵相关报错修正 2022-05-03 13:10:25 +08:00
MrFaq2018
da8d7e2080 Updated Spanish Translation 05-2022 (#693) 2022-05-03 13:06:05 +08:00
MrZ_26
3934a61a6d 版本推进 2022-04-30 21:38:44 +08:00
MrZ_26
1f225ae6ad 移除机翻语言,调整语言设置界面 2022-04-30 21:38:44 +08:00
MrZ_26
303a1d7afc 微调中文语言文件 2022-04-30 21:38:44 +08:00
MrZ_26
1d4a2eeb66 移除地图上的clearRush模式
整理代码
2022-04-30 21:38:44 +08:00
MrZ_26
3fe0f7281a 修复trs的V的踢墙表错误 2022-04-30 21:38:44 +08:00
NOT_A_ROBOT
f89248a8b7 Improve Indoneisan Translation (#688) 2022-04-28 11:26:15 +08:00
MrZ_26
0453e8d94d 去掉之前“移除”mono语音包的时候添加的强制修改设置 2022-04-23 14:15:01 +08:00
NOT_A_ROBOT
fd1070c313 Fix minor mistake in Indonesian language (#685) 2022-04-23 13:18:24 +08:00
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
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
MrZ626
a0596acfde 修改安卓版本号 2022-01-05 14:33:18 +08:00
MrZ626
6954ed06a6 修复主菜单开关全屏会让快速开始按钮文本错误 close #566 2022-01-05 14:31:36 +08:00
Imple Lee
00919c1067 cc techmino-alize (#579)
this should only be used with imple/techmino-alize branch
on 26F-Studio/cold_clear_ai_love2d_wrapper
2022-01-05 12:57:54 +08:00
NOT_A_ROBOT
ceb77e46c3 Fix some spelling/grammar mistakes on Console app (#576) 2022-01-05 12:51:16 +08:00
Trebor Huang
ae15281db0 Allow Zframework to be checked out (#580)
* Allow checkout Zframework

* Propagate changes to all workflows

* Fix indentation

* Decide to be `recursive`

* Remove unnecessary checkouts

* Remove unnecessary recursive checkouts
2022-01-05 12:50:43 +08:00
176 changed files with 4933 additions and 2978 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

@@ -4,7 +4,58 @@ description: 'Check for obvious errors.'
runs:
using: "composite"
steps:
- uses: actions/checkout@v2
- name: Install lua
shell: bash
run: |
sudo apt-get install lua5.3 -y
- name: Check all lua files are valid
shell: lua {0}
run: |
local files = assert(io.popen "find . -name '*.lua' -not -path '*/.git/*'")
local errors = 0
for file in files:lines() do
local f, error = loadfile(file)
if not f then
print(error)
errors = errors + 1
end
end
files:close()
if errors > 0 then
print(('%d syntax error(s) found.'):format(errors))
os.exit(1)
else
print('No syntax error found.')
end
- name: Prepare FontTools
shell: bash
run: |
pip install fonttools
- name: Check all characters are in the font
shell: python
run: |
from fontTools.ttLib import TTFont
from pathlib import Path
font = TTFont('parts/fonts/proportional.otf')
keys = set(font.getBestCmap().keys())
missing = []
for file in Path('parts/language').glob('*.lua'):
for i, line in enumerate(file.read_text().splitlines()):
for char in line:
if ord(char) not in keys:
missing.append((char, file, i+1))
if missing:
print('Missing characters:')
for char, file, i in missing:
print(f"'{char}'({ord(char):x}) in {file} at line {i} " \
f"(${{ github.server_url }}/${{ github.repository }}/blob/${{ github.sha }}/{file}#L{i})")
exit(1)
else:
print('All characters are present in the font.')
- uses: ./.github/actions/build-love
with:
file-path: Techmino.love
@@ -21,4 +72,4 @@ runs:
uses: GabrielBB/xvfb-action@v1
with:
run: |
./dest/love Techmino.love --test
./dest/love Techmino.love --test

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

@@ -31,6 +31,8 @@ jobs:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/automatic-test
build-windows:
@@ -38,6 +40,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
with:
commit: ${{ needs.get-info.outputs.commit }}
@@ -60,6 +64,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
with:
commit: ${{ needs.get-info.outputs.commit }}
@@ -78,6 +84,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
with:
commit: ${{ needs.get-info.outputs.commit }}
@@ -103,6 +111,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
with:
commit: ${{ needs.get-info.outputs.commit }}
@@ -131,6 +141,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
with:
commit: ${{ needs.get-info.outputs.commit }}
@@ -159,6 +171,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
with:
commit: ${{ needs.get-info.outputs.commit }}
@@ -192,6 +206,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
- uses: ./.github/actions/build-love
with:

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

@@ -41,6 +41,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
- uses: ./.github/actions/build-windows
with:
@@ -62,6 +64,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
- uses: ./.github/actions/build-windows
with:
@@ -83,6 +87,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
- uses: ./.github/actions/build-linux
with:
@@ -99,6 +105,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
- uses: ./.github/actions/build-android
with:
@@ -121,6 +129,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
- uses: ./.github/actions/build-macos
with:
@@ -148,6 +158,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
- uses: ./.github/actions/build-ios
with:

View File

@@ -33,6 +33,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
with:
commit: ${{ needs.get-info.outputs.commit }}
@@ -55,6 +57,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
with:
commit: ${{ needs.get-info.outputs.commit }}
@@ -73,6 +77,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
with:
commit: ${{ needs.get-info.outputs.commit }}
@@ -98,6 +104,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
with:
commit: ${{ needs.get-info.outputs.commit }}
@@ -125,6 +133,8 @@ jobs:
needs: get-info
steps:
- uses: actions/checkout@v2
with:
submodules: 'recursive'
- uses: ./.github/actions/update-version
with:
commit: ${{ needs.get-info.outputs.commit }}

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,29 +21,31 @@ 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.
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. © 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 trademark 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.
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')
@@ -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
@@ -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,14 +379,12 @@ 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',
pt=require'parts.language.lang_pt',
id=require'parts.language.lang_id',
ja=require'parts.language.lang_ja',
zh_grass=require'parts.language.lang_zh_grass',
symbol=require'parts.language.lang_symbol',
--1. Add language file to LANG folder;
--2. Require it;
@@ -489,9 +500,6 @@ do
SETTING.dascut=SETTING.dascut+1
needSave=true
end
if SETTING.vocPack=='mono'then
SETTING.vocPack='miya'
end
if RANKS.stack_e then
RANKS.stack_e=nil
RANKS.stack_h=nil
@@ -516,8 +524,8 @@ do
fs.remove('record/rhythm_h.rec')
fs.remove('record/rhythm_u.rec')
end
if RANKS.bigbang then
RANKS.clearRush,RANKS.bigbang=RANKS.bigbang
if RANKS.bigbang or RANKS.clearRush then
fs.remove('record/clearRush.rec')
fs.remove('record/bigbang.rec')
end
if STAT.version~=VERSION.code then
@@ -550,6 +558,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 +692,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.

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

@@ -97,8 +97,8 @@ do
{131,2,2, 0, 0,0},{131,2,2,-1,-1,0},{131,2,2,-1, 0,0},--S
{131,1,2,-1, 0,0},{131,1,2, 0,-1,0},{131,1,2, 0, 0,0},--Z(misOrder)
{313,2,2, 0, 0,0},{313,2,2,-1,-1,0},{313,2,2,-1, 0,0},--S(misOrder)
{331,3,2, 0,-1,1},--J(farDown)
{113,4,2,-1,-1,1},--L(farDown)
{331,3,2, 0,-1,0},--J(farDown)
{113,4,2,-1,-1,0},--L(farDown)
{113,3,2,-1,-1,0},{113,3,0, 0, 0,0},--J
{331,4,2, 0,-1,0},{331,4,0,-1, 0,0},--L
{222,7,0,-1, 1,1},{222,7,0,-2, 1,1},{222,7,0, 0, 1,1},--I(high)
@@ -306,7 +306,7 @@ do
[03]={'+0+0','+0-1','+0+1','+0+2'},
[30]={'+0+0','+0-1','+0+1','+0-2'},
[12]={'+0+0','+0-1','+0+1','+0+2'},
[21]={'+0+0','+0-1','+0-2','+0-2'},
[21]={'+0+0','+0-1','+0+1','+0-2'},
[32]={'+0+0','+1+0','-1+0'},
[23]={'+0+0','-1+0','+1+0'},
[02]={'+0+0','-1+1','+1-1'},

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
@@ -58,6 +80,8 @@ function bot_cc:thread()
local m=rem(move,1)
if m<4 then
ins(keys,m+1)
elseif m==5 then
ins(keys, 5)
elseif not self.data._20G then
ins(keys,13)
end
@@ -80,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
@@ -83,7 +83,7 @@ end
function BOT.new(P,data)
local bot={P=P,data=data}
if data.type=="CC"then
P:setRS('SRS')
P:setRS('TRS')
bot.keys={}
bot.bufferedNexts={}
bot.delay=data.delay

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

@@ -1,36 +0,0 @@
local function task_newBoard(P,init)
local targetLine
local F,L={},{1}
--TODO
P:pushNextList(L)
P.control=false
if not init then for _=1,26 do YIELD()end end
P.control=true
P.gameEnv.heightLimit=targetLine or #F
P:pushLineList(F)
end
local function _check(P)
P.gameEnv.heightLimit=P.gameEnv.heightLimit-P.lastPiece.row
if P.gameEnv.heightLimit==0 then
P.modeData.stage=P.modeData.stage+1
if P.modeData.stage>=100 then
P:win('finish')
else
P:newTask(task_newBoard)
end
end
end
return{
sequence='none',
RS="TRS",
pushSpeed=5,
mesDisp=function(P)
setFont(60)
mStr(P.modeData.stage,63,280)
mText(TEXTOBJ.wave,63,350)
end,
hook_drop=_check,
task=function(P)task_newBoard(P,true)P.fieldBeneath=0 end,--Just run one time at first to start first level
}

View File

@@ -2,6 +2,15 @@ local gc=love.graphics
local sectionName={"D","C","B","A","A+","S-","S","S+","S+","SS","SS","U","U","X","X+"}
local passPoint=16
local function getRollGoal(P)
-- get amount of grades needed for X+
local rem=12.4-P.modeData.rankPoint/10
if rem<=0 then return 0 end
local goal=math.floor(rem)*4
rem=rem%1
return goal + (rem>0.3 and 4 or rem*10)
end
return{
drop=0,lock=15,
wait=15,fall=6,
@@ -29,6 +38,7 @@ return{
setFont(75)
mStr(P.stat.row,63,230)
mStr(P.stat.clears[4],63,340)
PLY.draw.drawTargetLine(P,getRollGoal(P))
end,
hook_drop=function(P)
if P.modeData.rankPoint<140-passPoint then--If Less then X

View File

@@ -0,0 +1,345 @@
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
local function getRollGoal()
-- get amount of grades needed for TM+
local rem=#gradeList-(int_grade_boosts[math.min(int_grade+1,#int_grade_boosts)]+rollGrades+cools+1-regrets)
if rem<=0 then return 0 end
local goal=0
if cools>8 then
goal=math.floor(rem)*4
rem=rem%1
return goal + (rem>0.3 and 4 or rem*10)
else
goal=math.floor(rem/0.26)*4
rem=rem%0.26
return goal + (rem>0.12 and 4 or rem*25)
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)
PLY.draw.drawTargetLine(P,getRollGoal())
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)
P:_showText("3",0,-120,120,'fly',1)
elseif P.waiting==120 then
playReadySFX(2,1)
P:_showText("2",0,-120,120,'fly',1)
elseif P.waiting==60 then
playReadySFX(1,1)
P:_showText("1",0,-120,120,'fly',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.

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