Compare commits

...

298 Commits

Author SHA1 Message Date
MrZ_26
a2e5656747 修改更新历史 版本推进 2023-05-28 18:33:47 +08:00
MrZ_26
65fc0339b9 调整登录界面ui 2023-05-28 18:31:52 +08:00
MrZ_26
0421654c50 微调arm小程序数字字体,整理代码 2023-05-28 18:23:58 +08:00
MrZ_26
bdaa42f6df 添加flore语音包
支持消6以上的语音
2023-05-28 18:11:10 +08:00
NOT_A_ROBOT
9984c3ecb5 Add drawing feature to arithmetic app (#800)
* undo feature

* add auto draw functions for some levels

* Add drawing feature to bin/oct/hex levels

* Add left-aligned option to drawNum, switch from recursive to loop

* add support for drawing hex digits

* should be ready to push!

* Add help + number scaling, optimized some code

* finish drawing in arithmetic, just need icons now

* remove debugging thing in arm
2023-05-19 16:14:59 +08:00
MrZ_26
5e7c2309ac 修复密码框里有东西的时候如果密码框是隐藏的还会视为填了密码 2023-05-19 00:32:03 +08:00
MrZ_26
9dda8555a0 挖掘效率模式改为和tsd模式一样的低重力+不锁定+无限hold close #890 2023-05-11 13:34:23 +08:00
MrZ_26
43046a3cf3 修复对战和stack_e中hold致死但没有完全死的时候下一块悬空导致的幽灵行 2023-05-04 00:42:40 +08:00
Imple Lee
fe29cc532d fix many warnings (#889)
* fix many warnings

some of them can be solved by using a prototype-based system
maybe I can try to use some of these systems to reform backgrounds...

* Update app_mahjong.lua

---------

Co-authored-by: MrZ_26 <1046101471@qq.com>
2023-05-03 00:27:54 +08:00
Imple Lee
7dd73ef8d3 fix: description of combo in manuals (#885)
The description in the Chinese manual is correct but very
convoluted; the descriptions in the English manual and Japanese manual
are incorrect.
2023-04-24 18:29:07 +08:00
sakurw
ad6bd7be4b Update dict_ja.lua (#881) 2023-04-19 03:18:26 +08:00
sakurw
c276b700fa Update manual_ja.txt (#880) 2023-04-19 03:18:11 +08:00
MrZ_26
98f73aa4c0 修改更新历史 2023-04-18 00:16:23 +08:00
MrZ_26
1db854618e 效率40行和无尽模式显示的攻击数格式改为整数 2023-04-18 00:14:46 +08:00
user670
940a1bc3f8 Update manual_en.txt (#876)
fix typo
2023-04-07 16:37:22 +08:00
Squishy (C6H12O6+NaCl+H2O)
7463dd96dc VIetnamese translation update (#878)
* Update credit + Some adjustments for some strings
* Fix credit and adjust some strings
2023-04-07 16:35:17 +08:00
MrZ_26
48e96998a9 更新词典中两条新人指引 2023-04-07 14:56:09 +08:00
MrZ_26
95a1b03cc5 防守模式改为缓冲超过一定数量后就不再生成新的攻击 2023-04-06 15:55:32 +08:00
ParticleG
ee4dfa7f51 移除Action Summary 2023-04-03 11:06:42 +08:00
ParticleG
06f403e9d7 删除上传至WeTransfer步骤 2023-04-03 10:40:44 +08:00
Imple Lee
c03f3f727c fix cc move error when spawn is too low (#874) 2023-03-27 12:53:48 +08:00
ShardNguyen
ed4ba1dc38 Update on Vietnamese translation (#869)
* Adjusted consistency of the translation

* added 1 line and replaced tab with space
2023-03-27 12:53:33 +08:00
MrZ_26
9663f8c316 修正TRS的Z块的1→0踢墙表有一个重复坐标 2023-03-21 17:00:41 +08:00
NOT_A_ROBOT
2478df1242 Fix Classic Lunatic level curve (#870)
now it starts at 100 lines instead of 10. I have no idea why I did it like that back then...
2023-03-19 17:54:23 +08:00
user670
1b54dd3b90 Add Notris Foes URL to en and ja dict (#867) 2023-03-10 17:23:04 +08:00
user670
001014c70e Update dict_ja.lua (#866)
Fix typo with "patreon"
2023-02-28 15:08:13 +08:00
MrZ_26
1a444a9e98 更新赞助名单和版本号 2023-02-28 12:23:39 +08:00
MrZ_26
d5397333d5 整理代码
框架跟进,修复游戏中报错时在错误场景失去焦点会触发暂停
2023-02-28 12:21:37 +08:00
user670
e1001c74c5 Bust out a few outdated teatube links in dictionary (#861) 2023-02-28 12:10:45 +08:00
ParticleG
5f664c04d6 修复Windows CI 2023-02-23 20:15:18 +08:00
ParticleG
525fa4c25e 获取transfer时增加重试功能 2023-02-23 17:58:47 +08:00
MrZ_26
f513760153 更新赞助名单 2023-02-23 02:01:47 +08:00
Particle_G
5faa929bb0 Merge pull request #862 from 26F-Studio/ci-ios-test
Fix portrait issue by removing `W.fullscreen` config in conf.lua
2023-02-21 15:53:16 +08:00
ParticleG
5c4557a7b7 - Re-enable other platforms' CI 2023-02-21 15:08:28 +08:00
ParticleG
69a84c035e - Remove trailing spaces 2023-02-21 14:54:28 +08:00
ParticleG
f8277e1c8a - Revert changes in SETTING table
- Use exclusive fullscreen on mobile devices
2023-02-21 14:37:58 +08:00
ParticleG
48f3d293bd - Try fix iOS portrait issue 2023-02-21 14:09:44 +08:00
ParticleG
00bf828ef4 - Try fix iOS portrait issue 2023-02-21 12:16:02 +08:00
ParticleG
d1cef7ed84 - Try fix iOS portrait issue 2023-02-21 11:54:58 +08:00
ParticleG
17bb8dbe6d - Try fix iOS portrait issue 2023-02-21 11:39:23 +08:00
ParticleG
6166c03eab - Try fix iOS portrait mode 2023-02-21 11:19:17 +08:00
ParticleG
303f32f5b2 - Try ios CI at main 2023-02-21 10:40:51 +08:00
sakurw
f7e4d7b30d Update lang_ja.lua (#860) 2023-02-20 14:55:29 +08:00
user670
f2957dff7b User670 20230216 en dict edit (#857) 2023-02-20 14:55:13 +08:00
MrZ_26
cadbe38a8f 再微调竖屏模式布局相关 2023-02-20 14:49:11 +08:00
MrZ_26
e55d117371 英文词典补充加加的连续pc教程 2023-02-16 10:03:47 +08:00
MrZ_26
1f3d8a212b 修改日文词典里加加的id 2023-02-15 18:14:53 +08:00
MrZ_26
035f30d7e1 再修竖屏模式ui位置(刚刚有个变量写错地方) 2023-02-15 16:13:10 +08:00
user670
3202aa18b1 Various dictionary fixes (#856) 2023-02-15 16:06:18 +08:00
sakurw
0c5d2bdf1a Update dict_ja.lua (#855)
* Update dict_ja.lua

* Update dict_ja.lua

* Update dict_ja.lua
2023-02-15 16:03:40 +08:00
ShardNguyen
db25475c21 Update Vietnamese Translation (#852)
* Adjusted consistency of the translation

* added 1 line and replaced tab with space
2023-02-15 16:01:44 +08:00
MrZ_26
11b1c23be0 竖屏模式下暂停/重开按钮和模式信息挪到被巨大化的玩家上面 2023-02-15 16:00:51 +08:00
MrZ_26
5b1eef890d 词典新增center和partial词条,日语待翻 2023-02-10 17:18:10 +08:00
MrZ_26
3a3d062e5c 版本推进 2023-02-09 04:04:22 +08:00
C₂₉H₂₅N₃O₅
2ee9ed237f Added Zundamon voicepack (#846) 2023-02-09 03:55:10 +08:00
MrFaq2018
9159661945 Update lang_es.lua (#850) 2023-02-09 03:54:32 +08:00
MrZ_26
0efd2c8044 开启竖屏选项时1P玩家强行放大至两倍 2023-02-09 03:51:44 +08:00
MrZ_26
0aaa5822fb 更新翻译人员列表 2023-02-09 03:37:16 +08:00
MrZ_26
2b258aeaed 修复团队战结束判定错误 2023-02-09 03:33:12 +08:00
ShardNguyen
0d7a80f2b5 Vietnamese Translation (#835) 2023-02-09 03:15:43 +08:00
MrZ_26
d433d98c04 更新一个中文tip和赞助名单 2023-02-06 11:18:55 +08:00
MrZ_26
180dc12460 删除一小段无效代码 2023-02-02 15:28:17 +08:00
MrZ_26
dd1d0b4126 删除关于成就系统的tip #841 2023-01-28 00:17:32 +08:00
MrZ_26
f1517fad1a 模式地图界面按f2开关显示网格(方便看位置) close #827 2023-01-25 03:21:30 +08:00
sakurw
62ed279f07 Update lang_ja.lua (#840) 2023-01-25 03:00:41 +08:00
MrZ_26
6925d59f87 修复手动登录失败后还会多余地执行一次去login场景 2023-01-25 02:54:18 +08:00
MrZ_26
848cc41c72 版本推进 2023-01-23 02:16:13 +08:00
MrZ_26
f212076604 整理代码
新增没做完的公告页面
因为一些神秘token问题连接失败后会要求重新登录
2023-01-23 02:14:10 +08:00
scdhh
ee4fd51e0f Add more supported languages to the installer (#839) 2023-01-23 01:50:05 +08:00
MrZ_26
f96b4f6724 把授权链接放到main里另外两个url处 2023-01-23 01:24:35 +08:00
ParticleG
7b6f2f826a 使用Release版本的官网地址 2023-01-23 01:11:43 +08:00
Particle_G
8ed4fd6cba Merge pull request #838 from 26F-Studio/ci-api-new
Ci api new close #821
2023-01-23 01:09:58 +08:00
ParticleG
b914cb26be 使用v1版本的Windows CI 2023-01-23 00:59:56 +08:00
ParticleG
97472e9a17 更新API端口 2023-01-23 00:48:20 +08:00
MrZ_26
dece8c0daa 版本推进 2023-01-22 03:58:25 +08:00
scdhh
5796d1af32 update ci (#829)
* Standardized rc templates

* Update copyright
2023-01-22 02:13:08 +08:00
MrZ_26
06d7a1df6b 修正中文语言两处文本漏翻 2023-01-21 19:47:11 +08:00
MrZ_26
ed293ddad8 更换音乐way的音频文件修正开头爆音 close #828 2023-01-21 19:11:52 +08:00
MrZ_26
d7a92344e5 音乐室作者文本加上描边 2023-01-21 18:41:43 +08:00
MrZ_26
3fa020fe91 修改存档管理界面文本颜色 2023-01-21 18:29:13 +08:00
MrZ_26
ce19af7da0 更新词典里的官网链接 2023-01-21 18:22:48 +08:00
MrZ_26
e558a9fc9d 修复统计菜单游戏logo上色错误 2023-01-21 18:19:13 +08:00
MrZ_26
fb5544ce0f 优化速度表的代码,微调外观 2023-01-21 14:15:38 +08:00
NOT_A_ROBOT
051f0d484c Revamp speed counter (#825) 2023-01-20 19:06:51 +08:00
C₂₉H₂₅N₃O₅
108cbea686 Added Vietnamese support for in-game font (#834)
- Added Vietnamese support
- Revised glyph shapes for `0`
2023-01-20 17:42:55 +08:00
ParticleG
8b61bd7d8a - Update workflow 2023-01-19 14:33:46 +08:00
ParticleG
1699a2b68a - Update workflow 2023-01-19 01:02:38 +08:00
MrZ_26
2fca95e81b 删除词典里已经没了的mew的链接,中文词典的连续PC词条改用加加整理的文档 2023-01-16 14:55:45 +08:00
ParticleG
969aa87a10 调用WIndows Action前更新Tenplate 2023-01-15 12:37:17 +08:00
ParticleG
b3dfa7d7ce 上传Windows安装包 2023-01-15 11:00:24 +08:00
scdhh
483de50169 Update main.yml 2023-01-15 01:13:41 +08:00
ParticleG
96762ffa5c 更新Windows安装包CI 2023-01-15 01:06:39 +08:00
MrZ_26
88d05c2354 修正一些新登录界面小问题 2023-01-15 01:00:17 +08:00
ParticleG
8aac152ee6 使用新的登录和鉴权API 2023-01-12 18:07:24 +08:00
ParticleG
d83779662a 更新登录界面 2023-01-12 16:31:17 +08:00
ParticleG
c19e656d46 删除密码登录场景 2023-01-09 17:34:35 +08:00
sakurw
4631a2f440 Update dict_ja.lua (#816) 2022-12-28 00:35:59 +08:00
sakurw
338f5811a1 Update lang_ja.lua (#815)
* Update lang_ja.lua

* Update lang_ja.lua

* Update lang_ja.lua
2022-12-28 00:29:58 +08:00
ParticleG
bc634b2eeb - Update workflow 2022-12-20 20:01:56 +08:00
ParticleG
23cbb9e261 - Update workflow 2022-12-20 19:02:09 +08:00
MrZ_26
fbfbf3c32b 玩家类新增dropPosition方法在失败的时候触发产生掉落动画
最后一个玩家的lose方法不会触发掉落
2022-12-19 21:42:29 +08:00
MrZ_26
3073a2e90d 修复混战模式失败后播音乐失败 2022-12-19 20:37:41 +08:00
MrZ_26
29e4dc93ab 把cc的几个print注释掉 2022-12-19 20:31:52 +08:00
ParticleG
2b16a20032 - Fix remove method 2022-12-19 20:28:00 +08:00
ParticleG
59b412899d - Try avoid flashing 2022-12-19 19:35:38 +08:00
ParticleG
e656ab5e1d - Add step to alive poslist 2022-12-19 19:07:35 +08:00
ParticleG
b90c06da72 - Add dynamic field 2022-12-19 03:38:33 +08:00
MrZ_26
f62f3652e2 修正错误情况进入暂停菜单时的一个崩溃 2022-12-19 01:28:20 +08:00
MrZ_26
dbbec9d2bd freshPlayerPosition方法添加一个执行模式用于游戏中动态调整布局 2022-12-18 22:22:53 +08:00
MrZ_26
1be8189058 修正dizt_ja漏一个引号 2022-12-18 21:00:05 +08:00
sakurw
b8b3160ccd Update dict_ja.lua (#810) 2022-12-18 20:59:11 +08:00
ParticleG
54fd3995e6 - Use raw install.sh 2022-12-18 18:03:27 +08:00
ParticleG
e506190c7f - Add retry times to transfer steps 2022-12-18 17:59:17 +08:00
Particle_G
8f418a0da9 Ci linux test (#813)
* - Only build linux
- Use love-actions/love-actions-linux@main

* - Update Linux product name

* - Finish editing
2022-12-18 14:30:15 +08:00
Particle_G
0403ee91ea Ci mobile fix (#812)
* - Add portrait switch

* - Only build mobile

* 设置项添加竖屏和msaa参数,增加调整的控件

* 修正conf.lua里没拿到正确的存档路径(因为还没设置identity)

* 加一些测试代码观察安卓到底有没有读到存档文件

* -Try relative

* - Try set settings in main

* - Make code analysis happy

* - Try not use setFullScreen

* - Test iOS portrait

* - Add various loggings

* - Try set identity first

* - Try set configs in conf.lua

* - Finish editing

Co-authored-by: MrZ_26 <1046101471@qq.com>
2022-12-17 17:57:57 +08:00
MrZ_26
47d1856143 在conf里提前读取设置文件配置一些东西 2022-12-16 22:19:17 +08:00
MrZ_26
e521f0fea0 修正上一个提交的小问题 2022-12-16 21:16:58 +08:00
Particle_G
eb1e7fd15a Fix Linux icon issue (#808)
- Try load icon
- Only build linux
- Set icon in conf.lua
- Set some global variables in conf.lua and set corresponding configs
- Avoid change fullscreen state when playing on mobile devices
- Try mobile
- Enable CI for merging
2022-12-16 14:51:00 +08:00
MrZ_26
c9e0a58232 添加N64和N64_plus旋转系统,修复None和None_plus搞反 close #805 2022-12-16 00:23:49 +08:00
MrZ_26
9acd8b54e3 提前改一下版本号 2022-12-16 00:10:57 +08:00
MrZ_26
acd66b1634 丢失的文本会显示为内部名称而不是神秘符号 close #775 2022-12-16 00:10:04 +08:00
MrZ_26
3820855812 微调几个语言文件 2022-12-16 00:10:04 +08:00
ParticleG
056abe7b68 - Add icon to bare and linux packages 2022-12-14 23:31:25 +08:00
MrZ_26
bf05b1bda2 如果存在media/image/icon.png会将其设置为窗口icon(方便Linux) 2022-12-14 20:05:35 +08:00
Particle_G
77a3c146c0 Ci test linux (#804)
- Fix build process
- Add debian package support
2022-12-14 15:51:57 +08:00
MrZ_26
5761f7f543 调整galaxy和quarks背景的粒子颜色,不影响游戏画面 2022-12-12 11:37:05 +08:00
MrZ_26
5ed5b543ce 修改一些中文tips 2022-12-11 13:44:29 +08:00
ParticleG
98ae0f2762 - Fix wrong folder name 2022-12-02 14:42:12 +08:00
ParticleG
963bc80439 - Bump Zframework version
- Fix android CC
2022-12-02 14:28:16 +08:00
Particle_G
4106dc454e Ci fix linux (#796)
* - Try fix linux

* - Try fix linux

* - Fix CC path

* - Try fix CC

* - Try fix CC

* - Remove temporary 'if's
2022-12-02 11:50:54 +08:00
MrZ_26
0ba26aa836 框架跟进 2022-12-02 01:18:37 +08:00
ParticleG
a4c775174b - Try fix Linux shared libs 2022-12-01 22:03:43 +08:00
sakurw
29c40c34fe Update dict_ja.lua (#793) 2022-12-01 10:25:29 +08:00
sakurw
44cb889b91 Update lang_ja.lua (#791) 2022-12-01 10:24:23 +08:00
ParticleG
915d65d2f4 - Update workflow 2022-12-01 10:18:56 +08:00
MrZ_26
8b7c270cf6 版本推进 2022-11-30 01:40:26 +08:00
MrZ_26
a3f07f8ce4 修复单机模式玩家uid问题,解决未登录状态下回合制报错 2022-11-29 01:10:58 +08:00
MrZ_26
91d3252685 删除可能远古留下来的account文件 2022-11-29 01:10:24 +08:00
MrZ_26
f9d9112651 修复第一次启动选择语言后直接就退出了 2022-11-28 23:37:47 +08:00
MrZ_26
477a1acc61 框架跟进,修复require模块在mac系统的崩溃 close #788 2022-11-28 23:31:28 +08:00
MrZ_26
4770366f74 修正dict_ja几处语法错误 2022-11-28 23:02:27 +08:00
sakurw
1c66b4dce1 Update dict_ja.lua (#790) 2022-11-28 23:00:41 +08:00
sakurw
3a19bb534a Update lang_ja.lua (#789) 2022-11-28 22:59:50 +08:00
sakurw
f39b3cfd4a Update lang_ja.lua (#785) 2022-11-26 17:02:43 +08:00
MrZ_26
f0410243c4 攻击竞速模式左侧攻击数字从%.1f改为%d close #780 2022-11-25 10:41:47 +08:00
MrZ_26
8abc40707a 彻底删除rin语音包相关内容(作者说不搞了) 2022-11-20 11:48:33 +08:00
MrZ_26
f91fe34a12 修复两个堆叠模式消除垃圾行的时候没减少内部的垃圾行高计数 2022-11-12 16:44:38 +08:00
MrZ_26
e9bf6c3b58 因为改了srs+踢墙表所以提升房间版本 2022-11-09 19:45:34 +08:00
MrZ_26
17c660b5a2 修正SRS_plus旋转系统的i不对称(原来8个90度的表就是srs的没改) close #772 2022-11-09 19:44:12 +08:00
sakurw
ed46f73987 Update lang_ja.lua (#773) 2022-11-09 19:22:17 +08:00
MrZ_26
e1200b5038 整理代码(修复cc加载失败有时候会报错) 2022-11-07 16:46:24 +08:00
MrZ_26
7f7ea6ac97 整理代码,调整加载顺序 2022-11-06 20:47:28 +08:00
MrZ_26
f70edaac83 移除加载时可能的强制重启(防止ios出问题)
几处love退出改为去quit场景(防止ios出问题)
整理代码
框架跟进
2022-11-06 17:28:54 +08:00
sakurw
d932febe89 Update lang_ja.lua (#770) 2022-11-06 13:39:51 +08:00
MrFaq2018
945a63c51d Update lang_es.lua (#771)
For next ver.
2022-11-06 13:39:29 +08:00
MrZ_26
da716ea5c5 版本推进 2022-11-05 23:07:54 +08:00
MrZ_26
c6f92a3030 略微降低客户端发言频率限制
发言id和文本之间加一个空格
框架跟进,修复textBox控件和listBox控件显示范围问题
2022-11-05 22:59:21 +08:00
MrZ_26
267e2dc544 修复其他玩家进房check是否已存在的时候因为访问不存在的玩家而报错 2022-11-05 22:59:21 +08:00
MrZ_26
cb7d3afdfb 删除服务端的playerManager.noPassword消息 2022-11-05 22:59:21 +08:00
MrZ_26
b57e863c28 联网游戏可以用键盘ctrl+0123456切换队伍 2022-11-05 22:59:21 +08:00
MrZ_26
7aed15fd4f 修正其他玩家的结束游戏消息处理太早导致录像没放完出问题 2022-11-05 22:59:21 +08:00
MrZ_26
6d71b26595 自定义游戏菜单微调 2022-11-05 22:59:21 +08:00
sakurw
1df5406cb3 Update lang_ja.lua (#768) 2022-11-05 15:47:36 +08:00
MrZ_26
a2b762dcbc 添加几个房间内命令
添加房间被解散的语言文本
把一处神秘写法改正常一点
2022-11-05 02:14:51 +08:00
MrZ_26
c2d29c3d6a 联网游戏界面添加选队伍按钮,加一个没卵用的退出房间命令 2022-11-04 17:15:36 +08:00
MrZ_26
da602eb693 两个输入验证码的地方添加粘贴按钮
整理代码
2022-11-04 16:45:51 +08:00
MrZ_26
9e442a3073 整理代码
版本推进
2022-11-04 00:26:38 +08:00
Richard969
bc8b7e733b FIX c4wtrain_n getrank wrong (#766) 2022-11-04 00:25:22 +08:00
MrZ_26
94aa84e380 修复ultra进去就蓝屏(之前bgm模块更新忘了改对应用法) 2022-11-04 00:07:25 +08:00
MrZ_26
c462c28640 收到重复id玩家进入房间的时候会先触发把老的退掉防止出现复制人引起一堆问题 2022-11-03 23:55:04 +08:00
MrZ_26
b5fbf9cade 修复网战多队伍结束条件错误 2022-11-03 23:16:42 +08:00
MrZ_26
e88957296f 修改队伍颜色,看起来不扎眼一些(大概 2022-11-03 23:08:39 +08:00
MrZ_26
9e61cb995a 缓冲槽内有过多垃圾行时满了就不会再继续绘制,减少极端情况下的卡顿 2022-11-03 22:46:46 +08:00
MrZ_26
89a5a718da 实现房间内排名(方法有点小神秘 不过应该能用 2022-11-03 22:45:46 +08:00
MrZ_26
43649c54a3 基本完成中途加入的观战
修复从联网游戏房间退出不会把GAME.playing置false
checkWarning的玩家改成输入而不是自动获取
整理代码
2022-11-03 18:06:28 +08:00
MrZ_26
b2b5c99425 修复节日日期写错
修正简洁模式场景栈搜索有未触发漏洞
整理代码
框架跟进
2022-11-03 15:11:12 +08:00
MrZ_26
9e882e6188 框架跟进
推进中途加入房间的观战相关
2022-11-03 12:23:29 +08:00
渣渣120
e688458cfd 在 README 提供更多下载方式 便于那些完全不懂github的小白用户( (#765)
* 在 README 提供更多下载方式 便于那些完全不懂github的小白用户(

Co-authored-by: ParticleG <particle_g@outlook.com>
Co-authored-by: C₂₉H₂₅N₃O₅ <a1228465111@163.com>
2022-11-01 10:54:45 +08:00
MrZ_26
b7c528f5ac 修改获取对局种子的api 2022-10-31 18:59:04 +08:00
MrZ_26
c743fdcffc 修复连连看小游戏背景区域范围错误 2022-10-31 02:19:54 +08:00
MrZ_26
56e19dd91e 修复房间列表界面密码栏存在时刷新计时器不动导致很奇怪,现在会走时间但到0不会刷新 2022-10-30 00:17:07 +08:00
MrZ_26
308512d36a 修复暂停界面第一帧有时候会闪烁 2022-10-29 17:18:30 +08:00
MrZ_26
749806e553 修复100攻击模式打到40就算成绩 2022-10-29 15:55:53 +08:00
MrZ_26
78223334ee 再整理quarks背景代码 2022-10-29 02:22:52 +08:00
MrZ_26
7f50161ca7 再整理quarks背景代码 2022-10-29 02:20:52 +08:00
MrZ_26
dd872a72b2 整理代码,return后面跟空格 2022-10-29 00:59:41 +08:00
MrZ_26
0df17cb4ee 给一些模式换刚加的两个新背景 2022-10-29 00:52:35 +08:00
MrZ_26
27244dae04 优化两个新背景代码 2022-10-29 00:33:34 +08:00
NOT_A_ROBOT
c472d6cbd7 Add new backgrounds (#764)
* Add quark background

* add galaxy background
2022-10-28 23:39:34 +08:00
MrZ_26
e4c786a5d4 更新头像的函数检测如果缺数据就跳过流程
框架跟进
2022-10-28 16:33:19 +08:00
MrZ_26
e291a070f3 优化联网游戏体验(统计数据结算、远程玩家死亡结算时机) 2022-10-28 16:33:19 +08:00
MrZ_26
6b16fcd5f5 添加一点注释,整理代码 2022-10-28 16:33:19 +08:00
MrZ_26
d79279d1cd 音乐室可以按住shift+字符反向快速跳转 2022-10-28 16:33:19 +08:00
ParticleG
03fbfaa577 - Update workflow 2022-10-28 10:00:50 +08:00
ParticleG
8231021426 - Update summary 2022-10-27 18:05:12 +08:00
ParticleG
784b2074f8 - Update summaries 2022-10-27 17:16:38 +08:00
ParticleG
93c9977c86 - Update summaries 2022-10-27 16:27:15 +08:00
ParticleG
ad1b129dfa - Update summaries 2022-10-27 16:08:45 +08:00
ParticleG
2d4856551b - Update summaries 2022-10-27 15:06:40 +08:00
ParticleG
4d0e72d61e - Try using step summaries 2022-10-27 14:11:47 +08:00
ParticleG
9b20ec6941 - Try fix windows output & notice 2022-10-27 13:52:20 +08:00
ParticleG
5a02265018 - Try fix multiline issue 2022-10-27 11:31:51 +08:00
ParticleG
0dd5c46fd1 - Try use new environment file again 2022-10-27 10:59:54 +08:00
ParticleG
55831339dd - Try using deprecated set-output for debugging 2022-10-27 10:50:12 +08:00
MrZ_26
e0ba04e579 修改更新历史,框架跟进 close #763 2022-10-27 02:14:22 +08:00
MrZ_26
d5f7a6ddd0 整理代码 2022-10-27 01:43:19 +08:00
MrZ_26
66a3354883 整理代码,texture模块的新画布函数的画布底色改成透明白色 2022-10-27 00:29:33 +08:00
MrZ_26
55218e4563 修复创房间的人“当前场景”状态有问题导致别人退房的时候操作不能正确执行 2022-10-27 00:24:27 +08:00
MrZ_26
081b769ac6 非房主玩家边框还是稍微粗一点吧 2022-10-27 00:23:50 +08:00
MrZ_26
8f767b3ab9 订正一处中文文本 2022-10-27 00:01:38 +08:00
MrZ_26
a2eb7e4a54 修复联网对战攻击校验变量用错 2022-10-27 00:01:29 +08:00
MrZ_26
2de663703b 修复单机模式没有sid导致部分情况读取sid报错(会用本地uid直接代替) 2022-10-27 00:01:14 +08:00
ParticleG
40a587dcc4 - Try use new release action 2022-10-26 22:23:23 +08:00
MrZ_26
f366a63c8f 修复录像菜单添加第一个录像/删除最后一个录像后按钮显示状态没变 close #736 2022-10-26 11:58:23 +08:00
MrZ_26
8c603fadee 添加反联网玩家使用非法块皮肤
检测到联网玩家攻击数量不同步后会直接主动放弃游戏 close #720
2022-10-26 11:47:52 +08:00
MrZ_26
5e9ef8d3ab 联网玩家皮肤调成炸弹块时会被本地强制改为灰色 2022-10-26 11:47:52 +08:00
ParticleG
2e9cef3ed8 - Bump actions' versions 2022-10-26 11:04:06 +08:00
MrZ_26
354d4f80bf 一堆场景同时允许回车键和小键盘回车键 2022-10-26 10:57:45 +08:00
MrZ_26
a578d537cd 粘贴场地高度最高能读到60行,允许一些极端的高空作业 2022-10-26 10:42:53 +08:00
MrZ_26
85ff1cd1c3 刚注册完跳转到设置密码界面的时候会自动填入注册用的验证码(因为服务端就这么设计的可以复用一次) 2022-10-26 10:35:01 +08:00
ParticleG
0d015de359 - Use file IO instead of echo 2022-10-26 10:23:11 +08:00
MrZ_26
5a0a473d4a 控制台theme命令会提示可以输halloween 2022-10-26 10:16:43 +08:00
MrZ_26
420ff9a556 修正日语语言文件少个逗号 2022-10-26 10:10:50 +08:00
sakurw
4f6e99daa2 Update lang_ja.lua (#761) 2022-10-26 10:06:32 +08:00
MrZ_26
10a57ecc18 修复音乐室暂停就报错(之前合并分支选错一边)
框架跟进(修复说明书界面报错)
2022-10-26 05:34:11 +08:00
MrZ_26
b101d74df5 版本推进 2022-10-26 04:59:38 +08:00
MrZ_26
97d4e58d47 添加halloween主题,包括一个bgm,一个按钮主题,主菜单打雷特效,带蜘蛛网的标题和一个南瓜
close #757
2022-10-26 04:42:00 +08:00
MrZ_26
b436645ab7 修正几处检测当前场景的代码之前更新场景模块忘了改 2022-10-26 03:48:05 +08:00
sakurw
af7c73f9f0 Update lang_ja.lua (#760) 2022-10-26 02:05:10 +08:00
MrZ_26
7d44396b03 新增队伍系统,攻击不会打给同队,剩一队时游戏就结束(目前允许0~6,0号为自由队,每个人分别算一队)
添加/group命令来选择队伍
2022-10-26 01:26:04 +08:00
MrZ_26
bd428f355a 添加房主和队伍状态的显示方式
添加转交房主提示
2022-10-25 20:53:00 +08:00
MrZ_26
2d6d897e2a 忽略部分服务器返回的错误消息
框架跟进
2022-10-25 19:48:00 +08:00
Particle_G
4913deb15f - Try fix windows product-name 2022-10-25 09:19:10 +00:00
Particle_G
0cb9d3990c - Use new action addresses 2022-10-25 06:55:15 +00:00
Particle_G
388e8e1fe1 - Fix deprecated set-output 2022-10-25 03:34:57 +00:00
MrZ_26
42168ddf16 修复一些联网相关场景切换关系问题
修复重设密码场景回车键自动识别功能条件错误
框架跟进
2022-10-25 02:17:07 +08:00
MrZ_26
134773765c 修创建房间场景在场景栈的位置 2022-10-24 23:29:19 +08:00
MrZ_26
74b099d58f 对战房间消息框可以用两个房间管理命令 2022-10-24 23:01:35 +08:00
MrZ_26
c1936441dd 调整踢出玩家的提示文本 2022-10-24 22:59:27 +08:00
MrZ_26
dc3b7c0825 有玩家退出房间的时候也会刷新房间allReady状态
限制催促准备音效频率
2022-10-24 22:30:49 +08:00
MrZ_26
86910f2956 修正进入房间成功的时候错误打断了一个等待,应当是创建成功时 2022-10-24 22:04:49 +08:00
MrZ_26
7b1df65e64 调整用户名显示相关,只有播放录像才会强制用户名,否则都用uid获取 2022-10-24 19:15:05 +08:00
MrZ_26
04559efaca 添加服务器返回的错误信息语言文本 2022-10-24 18:39:27 +08:00
MrZ_26
b668fa4750 修改观战状态检测
整理代码
2022-10-24 15:09:33 +08:00
MrZ_26
a4db061485 修游戏中有人退出房间有一处复制漏改
观战时会默认视角为sid最小的人
2022-10-24 15:05:01 +08:00
MrZ_26
d4d97f1e7f Merge branch 'ci_new_online' 2022-10-24 14:27:27 +08:00
MrZ_26
e682202b60 更多ws连接炸掉的时候自动返回主菜单 2022-10-24 14:15:42 +08:00
MrZ_26
2480987f10 正确更新房间allReady状态 2022-10-24 14:11:46 +08:00
MrZ_26
b0acdce294 修复不同设备对局sid不一致 2022-10-24 14:07:09 +08:00
MrZ_26
7953cf735b 实现键盘一键准备 2022-10-24 02:52:44 +08:00
MrZ_26
d074a85fbc NETPLY模块删掉一堆方法,先外部直接改数据,玩家会根据状态更换样式
游戏开始/结束时自主同步正确的服务端玩家状态
2022-10-24 02:37:45 +08:00
MrZ_26
543e85e94c 实现收发房内聊天消息,修改频发言率限制
实现消息框里的进出房间提醒
2022-10-24 00:43:11 +08:00
MrZ_26
23f43df737 实现玩家全部准备的时候顶部文字提醒 2022-10-24 00:26:52 +08:00
MrZ_26
43b6ff7697 修正创建房间页面在场景书上的位置 2022-10-24 00:20:29 +08:00
MrZ_26
6ecc80ac0f 修正玩家进出房间相关问题
修正获取玩家信息相关问题
实现操作录像传输
修改一些语言文本
2022-10-23 23:31:16 +08:00
MrZ_26
3ae0e80ce5 调整重设密码界面在场景树上的位置 2022-10-23 04:53:51 +08:00
MrZ_26
d12f8a27e7 减少密码哈希迭代次数防止把手机卡烂
原来的登录和注册界面改为密码登录和邮箱登录
邮箱登录界面不再分状态,设置密码独立出一个界面
自动登录不再检测本地用过密码登录,第一次邮箱登录不设置密码但存了token也可以
整理代码
2022-10-23 04:36:19 +08:00
MrZ_26
f9bbb8fce6 实现玩家准备状态相关 2022-10-23 01:43:56 +08:00
MrZ_26
80984cddf9 联网游戏结束后2.6秒返回玩家列表 2022-10-23 01:13:01 +08:00
MrZ_26
8fb0b2e600 实现根据统一种子随机生成每个玩家的sid 2022-10-22 02:08:36 +08:00
MrZ_26
9a4e8ab4ec 实现开始游戏信号与切换进游戏状态创建玩家 2022-10-21 00:16:15 +08:00
MrZ_26
dc1973e049 实现新api的进房和准备/观战
修复不会刷新在线人数
2022-10-19 23:29:45 +08:00
MrZ_26
ccb05230f2 实现自动请求没见过的用户信息和自动获取用户头像 2022-10-17 11:47:44 +08:00
MrZ_26
7ac6f45b9b 实现玩家设置同步到服务器
实现玩家离开房间(各种途径)
修改云存读档代码(还未实现)
移除sid,准备之后用uid本地排序序号代替(排序还未实现)
整理代码,框架跟进
2022-10-09 06:47:08 +08:00
MrZ_26
df7ab20636 继续实现一堆联网消息
语言文件加一条
框架跟进
2022-10-08 04:16:18 +08:00
MrZ_26
c06961c9c8 订正上一个提交漏改的东西
优化debug消息显示格式
调整网络断开提示文本用法
2022-10-07 02:36:18 +08:00
MrZ_26
37b76a1cb4 继续整联网,数字action填入一个大表方便统一管理 2022-10-06 22:34:22 +08:00
MrZ_26
01d02a916d 修复音乐室暂停就爆炸 2022-10-06 16:45:34 +08:00
MrZ_26
8e99565a9d 退出前会主动断开一下ws连接
WAIT放到网络相关TASK函数内部(会在第一帧触发,不影响)
可以从语言文件翻译服务器的错误消息并显示了
框架跟进
2022-10-06 03:16:18 +08:00
MrZ_26
f8d17b23b6 注释后加空格
联网稍微推进
2022-10-03 02:43:51 +08:00
MrZ_26
06f4bb4e1a 整 理 代 码
(应该没有改到字符串里面的东西吧…)起码不直接影响运行
2022-10-01 11:32:11 +08:00
MrZ_26
6e00ff96ec 服务器返回房间对象格式错误的时候不会直接爆炸 2022-09-30 07:23:39 +08:00
MrZ_26
468bbc8053 实现拉取房间列表
框架跟进
2022-09-29 20:29:45 +08:00
MrZ_26
f41999c019 调整登录流程里弹出的信息 2022-09-29 18:36:19 +08:00
MrZ_26
d259e05ca7 【不能用】继续改联网,更新ws相关,完善断开后的行为与提示
框架跟进
2022-09-29 10:07:39 +08:00
MrZ_26
2491a436c2 修复生存L难度显示maxspeed文本时机不正确 2022-09-29 08:42:28 +08:00
MrZ_26
7a55e447fc 整理代码 2022-09-29 08:15:03 +08:00
MrZ_26
f3face791f 【不能用】继续改联网,实现并替换一些发送ws请求的方法
框架跟进
2022-09-29 02:41:00 +08:00
MrZ_26
9ccc019bb9 【不能用】继续改联网,能登录了
框架跟进
2022-09-28 23:00:43 +08:00
MrZ_26
bc9f00d09f 整理代码
框架跟进
2022-09-28 19:36:10 +08:00
MrZ_26
33c470dd38 【不能用】继续改联网
框架跟进
2022-09-28 01:20:03 +08:00
MrZ_26
9e0e93de5d 修音乐室和一些bgm模块更新后的小错误
框架跟进a
2022-09-27 21:30:29 +08:00
MrZ_26
16553e13a2 【警告】联网不能用,不要随便试
联网重制ing,提交一下做个中继点
2022-09-27 21:30:29 +08:00
MrZ_26
d031dc3a82 注释掉cc落块信息输出,需要的时候自己开 2022-09-27 21:30:29 +08:00
MrZ_26
7297eb8ee8 框架跟进 2022-09-27 21:30:29 +08:00
C₂₉H₂₅N₃O₅
55bcdd426b Updated the link to TTT (Eng. Ver.) (#754)
* Updated the link to TTT (Eng. Ver.)
2022-09-27 19:21:56 +08:00
NOT_A_ROBOT
139e2e14c4 Add 15 death delay to TSD Challenge modes (#753)
* Add 15 death delay to tsd_e

* Add 15 death delay to tsd_h

* Add 15 death delay to tsd_u
2022-09-27 19:20:59 +08:00
MrZ_26
339b53115a 据作者要求暂时删除rin语音包
微调几个tip
修改版本号
2022-09-17 22:27:38 +08:00
MrZ_26
03515b4490 框架跟进,修复bgm音量为0时切换几次bgm会报错 2022-09-11 22:49:26 +08:00
MrZ_26
9690a345a3 微调TRS,T的2→R和2→L加一个下1 2022-09-11 18:15:23 +08:00
ParticleG
8324f72e90 - Fix outputs 2022-09-11 17:20:53 +08:00
ParticleG
15eefc0e9f - Fix rename 2022-09-11 12:02:28 +08:00
ParticleG
d504bd3d49 - Fix macOS-appstore package name 2022-09-11 11:27:03 +08:00
ParticleG
fd4b4f1882 - Use cp instead of mv 2022-09-11 11:22:58 +08:00
ParticleG
a176ef35a0 - Fix release notes
- Add platform name to release artifacts
2022-09-11 11:19:34 +08:00
MrZ_26
0fc7178589 shader里部分float变量改为highp float,保证丝滑
(需要同时配合apk配置更新的gles版本为3.0)
2022-09-11 06:58:01 +08:00
MrZ_26
76d985cc0f 删除readme“当前稳定版本”的文本 2022-09-10 22:59:14 +08:00
C₂₉H₂₅N₃O₅
aa05e8857b Update readme.md (#751) 2022-09-10 22:57:58 +08:00
576 changed files with 10264 additions and 7314 deletions

View File

@@ -3,7 +3,7 @@ description: 'download cc into specific dir'
inputs:
tag:
required: false
default: "11.4"
default: "11.4.2"
platform:
required: true
dir:
@@ -19,10 +19,10 @@ runs:
using: "composite"
steps:
- run: |
echo "::set-output name=tag::"$(if [ -z "${{ inputs.tag }}" ]
echo "tag="$(if [ -z "${{ inputs.tag }}" ]
then curl -w '%{url_effective}' -I -L -s -S https://github.com/${{ inputs.repo }}/releases/latest -o /dev/null | grep -o '\<[^/]*$'
else echo ${{ inputs.tag }}
fi)
fi) >> $GITHUB_OUTPUT
id: get-tag
shell: bash
- uses: ./.github/actions/get-unzip

View File

@@ -1,10 +0,0 @@
[Desktop Entry]
Name=Techmino Development
Comment=Techmino is fun!
MimeType=application/x-love-game;
Exec=app %f
Type=Application
Categories=Game;
Terminal=false
Icon=icon
NoDisplay=false

View File

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

View File

@@ -1,10 +0,0 @@
[Desktop Entry]
Name=Techmino
Comment=Techmino is fun!
MimeType=application/x-love-game;
Exec=app %f
Type=Application
Categories=Game;
Terminal=false
Icon=icon
NoDisplay=false

View File

@@ -8,9 +8,12 @@ FILETYPE 0x1
{
BLOCK "040904B0"
{
VALUE "FileDescription", "Techmino Development"
VALUE "CompanyName", "26F Studio"
VALUE "LegalCopyright", "Copyright @ 26F Studio"
VALUE "FileDescription", "Techmino Development"
VALUE "FileVersion", "@Version"
VALUE "InternalName", "Techmino"
VALUE "LegalCopyright", "Copyright © 2019-2023 26F-Studio. Some Rights Reserved."
VALUE "OriginalFilename", "Techmino.exe"
VALUE "ProductName", "Techmino"
VALUE "ProductVersion", "@Version"
}

View File

@@ -8,9 +8,12 @@ FILETYPE 0x1
{
BLOCK "040904B0"
{
VALUE "FileDescription", "Techmino"
VALUE "CompanyName", "26F Studio"
VALUE "LegalCopyright", "Copyright @ 26F Studio"
VALUE "FileDescription", "Techmino"
VALUE "FileVersion", "@Version"
VALUE "InternalName", "Techmino"
VALUE "LegalCopyright", "Copyright © 2019-2023 26F-Studio. Some Rights Reserved."
VALUE "OriginalFilename", "Techmino.exe"
VALUE "ProductName", "Techmino"
VALUE "ProductVersion", "@Version"
}

View File

@@ -20,6 +20,8 @@ jobs:
version-name: ${{ steps.app-info.outputs.version-name }}
version-string: ${{ steps.app-info.outputs.version-string }}
version-code: ${{ steps.app-info.outputs.version-code }}
update-title: ${{ steps.app-info.outputs.update-title }}
update-note: ${{ steps.app-info.outputs.update-note }}
commit-hash: ${{ steps.git-info.outputs.commit-hash }}
base-name: ${{ steps.assemble-base-name.outputs.base-name }}
steps:
@@ -32,30 +34,42 @@ jobs:
shell: lua {0}
run: |
local version = require "version"
print("::set-output name=app-name::Techmino")
print("::set-output name=version-name::"..version.name)
print("::set-output name=version-string::"..version.string:gsub("%a", ""))
print(("::set-output name=version-code::%d"):format(version.code))
os.execute('echo "app-name=Techmino" >> $GITHUB_OUTPUT')
os.execute('echo "version-name=' .. version.name .. '" >> $GITHUB_OUTPUT')
os.execute('echo "version-string=' .. version.string:gsub("%a", "") .. '" >> $GITHUB_OUTPUT')
os.execute('echo "version-code=' .. tostring(version.code) .. '" >> $GITHUB_OUTPUT')
local note = require 'parts.updateLog'
local p1 = note:find("\n%d") + 1
local p2 = note:find("\n", p1) - 1
os.execute('echo "update-title=' .. note:sub(p1, p2) .. '" >> $GITHUB_OUTPUT')
local p3 = note:find("\n", note:find("\n%d") + 1) + 1
local p4 = note:find("\n%d", p3 + 1)
updateNote = note:sub(p3, p4 - 2)
:gsub(" ", "- ")
:gsub(" ", "# ")
os.execute('echo "update-note<<EOF" >> $GITHUB_OUTPUT')
os.execute('echo "' .. updateNote .. '" >> $GITHUB_OUTPUT')
os.execute('echo "EOF" >> $GITHUB_OUTPUT')
- name: Get git info
id: git-info
shell: bash
run: |
COMMIT_HASH=$(git rev-parse --short ${{ GITHUB.SHA }})
echo ::set-output name=commit-hash::$COMMIT_HASH
echo "commit-hash=$COMMIT_HASH" >> $GITHUB_OUTPUT
- name: Assemble package base name
id: assemble-base-name
shell: bash
run: |
BASE_NAME=Techmino_${{ steps.app-info.outputs.version-string }}_${{ steps.git-info.outputs.commit-hash }}_#${{ GITHUB.RUN_NUMBER }}
echo ::set-output name=base-name::$BASE_NAME
echo "base-name=$BASE_NAME" >> $GITHUB_OUTPUT
build-core:
runs-on: ubuntu-latest
needs: get-info
env:
OUTPUT_FOLDER: ./build
outputs:
download-url: ${{ steps.transfer.outputs.download-url }}
RELEASE_FOLDER: ./release
steps:
- uses: actions/checkout@v3
with:
@@ -66,14 +80,15 @@ jobs:
run: |
import os
import re
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}"))
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
- uses: ./.github/actions/update-version
if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
with:
commit: ${{ needs.get-info.outputs.commit-hash }}
type: snapshot
- name: Build core love package
uses: 26F-Studio/love-actions-core@v1
uses: love-actions/love-actions-core@v1
with:
build-list: ./media/ ./parts/ ./Zframework/ ./conf.lua ./main.lua ./version.lua
package-path: ${{ env.CORE_LOVE_PACKAGE_PATH }}
@@ -82,6 +97,11 @@ jobs:
with:
name: ${{ env.CORE_LOVE_ARTIFACT_NAME }}
path: ${{ env.CORE_LOVE_PACKAGE_PATH }}
- name: Add icon to love package
run: |
cp ./.github/build/linux/${{ env.BUILD_TYPE }}/icon.png media/image/icon.png
zip -u ${{ env.CORE_LOVE_PACKAGE_PATH }} media/image/icon.png
rm media/image/icon.png
- name: Rename love package
run: |
mkdir -p ${{ env.OUTPUT_FOLDER }}
@@ -91,23 +111,21 @@ jobs:
with:
name: ${{ needs.get-info.outputs.base-name }}_Core_love
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love
- name: Upload release
- name: Prepare for release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
uses: softprops/action-gh-release@v1
with:
body: ${{ github.event.head_commit.message }}
files: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
- name: Upload to WeTransfer
id: transfer
run: |
curl -sL https://git.io/file-transfer | sh
./transfer wet -s -p 16 --no-progress ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love 2>&1>./wetransfer.log
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
- name: Show download link
shell: bash
run: |
echo "::notice title=Bare love package::${{ steps.transfer.outputs.download-url }}"
mkdir -p ${{ env.RELEASE_FOLDER }}
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Bare.love
- name: Upload release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
uses: ncipollo/release-action@v1
with:
allowUpdates: true
artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Bare.love
body: ${{ needs.get-info.outputs.update-note }}
name: ${{ needs.get-info.outputs.update-title }}
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
auto-test:
runs-on: ubuntu-latest
@@ -117,7 +135,7 @@ jobs:
with:
submodules: recursive
- name: Love actions for testing
uses: 26F-Studio/love-actions-test@v1
uses: love-actions/love-actions-test@v1
with:
font-path: ./parts/fonts/proportional.otf
language-folder: ./parts/language
@@ -125,10 +143,10 @@ jobs:
build-android:
runs-on: ubuntu-latest
needs: [get-info, build-core, auto-test]
if: github.event_name != 'pull_request'
env:
OUTPUT_FOLDER: ./build
outputs:
download-url: ${{ steps.transfer.outputs.download-url }}
RELEASE_FOLDER: ./release
steps:
- uses: actions/checkout@v3
with:
@@ -139,8 +157,13 @@ jobs:
run: |
import os
import re
os.system("echo ::set-output name=bundle-id::org.f26_studio." + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}") + ".snapshot")
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}") + "_Snapshot")
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
if "${{ env.BUILD_TYPE }}" == "dev":
f.write('bundle-id=org.f26_studio.' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '.snapshot\n')
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '-', '${{ needs.get-info.outputs.app-name }}') + '_Snapshot\n')
else:
f.write('bundle-id=org.f26_studio.' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '-', '${{ needs.get-info.outputs.app-name }}') + '\n')
- name: Download core love package
uses: actions/download-artifact@v3
with:
@@ -149,17 +172,10 @@ jobs:
uses: ./.github/actions/get-cc
with:
platform: Android
dir: ./ColdClear
- name: Process ColdClear
shell: bash
run: |
mkdir -p ./libAndroid/armeabi-v7a/
mkdir -p ./libAndroid/arm64-v8a/
mv ./ColdClear/armeabi-v7a/libCCloader.so ./libAndroid/armeabi-v7a/
mv ./ColdClear/arm64-v8a/libCCloader.so ./libAndroid/arm64-v8a/
dir: ./libAndroid
- name: Build Android packages
id: build-packages
uses: 26F-Studio/love-actions-android@v1
uses: love-actions/love-actions-android@main
with:
app-name: ${{ needs.get-info.outputs.app-name }}
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
@@ -170,13 +186,13 @@ jobs:
keystore-store-password: ${{ secrets.ANDROID_KEYSTORE_STOREPASSWORD }}
love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }}
resource-path: ./.github/build/android/${{ env.BUILD_TYPE }}/res
libs-path: ./ColdClear/
extra-assets: ./libAndroid/
custom-scheme: studio26f://oauth
product-name: ${{ steps.process-app-name.outputs.product-name }}
version-string: ${{ needs.get-info.outputs.version-string }}
version-code: ${{ needs.get-info.outputs.version-code }}
output-folder: ${{ env.OUTPUT_FOLDER }}
- name: Upload release artifact
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: ${{ needs.get-info.outputs.base-name }}_Android_release
@@ -185,33 +201,25 @@ jobs:
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
shell: bash
run: |
mkdir -p release
mv ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}-release.apk release/${{ steps.process-app-name.outputs.product-name }}.apk
mkdir -p ${{ env.RELEASE_FOLDER }}
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}-release.apk ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Android.apk
- name: Upload release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
uses: softprops/action-gh-release@v1
uses: ncipollo/release-action@v1
with:
body: ${{ github.event.head_commit.message }}
files: release/${{ steps.process-app-name.outputs.product-name }}.apk
allowUpdates: true
artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Android.apk
body: ${{ needs.get-info.outputs.update-note }}
name: ${{ needs.get-info.outputs.update-title }}
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
- name: Upload to WeTransfer
id: transfer
run: |
curl -sL https://git.io/file-transfer | sh
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
- name: Show download link
shell: bash
run: |
echo "::notice title=Android packages::${{ steps.transfer.outputs.download-url }}"
build-ios:
runs-on: macos-latest
needs: [get-info, build-core, auto-test]
if: github.event_name != 'pull_request'
env:
OUTPUT_FOLDER: ./build
outputs:
download-url: ${{ steps.transfer.outputs.download-url }}
RELEASE_FOLDER: ./release
steps:
- uses: actions/checkout@v3
with:
@@ -222,8 +230,9 @@ jobs:
run: |
import os
import re
os.system("echo ::set-output name=bundle-id::org.26f-studio.techmino")
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}"))
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
f.write('bundle-id=org.26f-studio.techmino\n')
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
- name: Download core love package
uses: actions/download-artifact@v3
with:
@@ -235,11 +244,11 @@ jobs:
dir: ./ColdClear
- name: Build iOS packages
id: build-packages
uses: 26F-Studio/love-actions-ios@v1
uses: love-actions/love-actions-ios@v1
with:
app-name: ${{ needs.get-info.outputs.app-name }}
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
copyright: "Copyright © 2019-2022 26F-Studio. Some Rights Reserved."
copyright: "Copyright © 2019-2023 26F-Studio. Some Rights Reserved."
icon-path: ./.github/build/iOS/${{ env.BUILD_TYPE }}/icon
love-patch: ./.github/build/iOS/love.patch
love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }}
@@ -269,31 +278,28 @@ jobs:
with:
name: ${{ needs.get-info.outputs.base-name }}_iOS_ipa
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.ipa
- name: Upload release
- name: Prepare for release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
uses: softprops/action-gh-release@v1
with:
body: ${{ github.event.head_commit.message }}
files: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.ipa
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
- name: Upload to WeTransfer
id: transfer
run: |
wget -qO- https://github.com/Mikubill/transfer/releases/download/v0.4.17/transfer_0.4.17_darwin_amd64.tar.gz | tar xvz
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
- name: Show download link
shell: bash
run: |
echo "::notice title=iOS packages::${{ steps.transfer.outputs.download-url }}"
mkdir -p ${{ env.RELEASE_FOLDER }}
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.ipa ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_iOS.ipa
- name: Upload release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
uses: ncipollo/release-action@v1
with:
allowUpdates: true
artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_iOS.ipa
body: ${{ needs.get-info.outputs.update-note }}
name: ${{ needs.get-info.outputs.update-title }}
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
build-linux:
runs-on: ubuntu-latest
needs: [get-info, build-core, auto-test]
env:
OUTPUT_FOLDER: ./build
outputs:
download-url: ${{ steps.transfer.outputs.download-url }}
RELEASE_FOLDER: ./release
steps:
- uses: actions/checkout@v3
with:
@@ -304,11 +310,20 @@ jobs:
run: |
import os
import re
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}"))
product_name = re.sub(r'[^A-Za-z0-9]+', '-', '${{ needs.get-info.outputs.app-name }}').strip('-').lower()
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
f.write('bundle-id=org.26f-studio.' + product_name + '\n')
f.write('product-name=' + product_name + '\n')
- name: Download core love package
uses: actions/download-artifact@v3
with:
name: ${{ env.CORE_LOVE_ARTIFACT_NAME }}
- name: Add icon to love package
run: |
cp ./.github/build/linux/${{ env.BUILD_TYPE }}/icon.png media/image/icon.png
zip -u ${{ env.CORE_LOVE_PACKAGE_PATH }} media/image/icon.png
rm media/image/icon.png
- name: Download ColdClear
uses: ./.github/actions/get-cc
with:
@@ -318,20 +333,19 @@ jobs:
shell: bash
run: |
cd ./ColdClear
mkdir ./libs
mv ./x64/libcold_clear.so ./libs
mkdir ./shared
mv ./x64/CCloader.so ./shared
mkdir -p ./lib/lua/5.1
mv ./x64/CCloader.so ./lib/lua/5.1
- name: Build Linux packages
id: build-packages
uses: 26F-Studio/love-actions-linux@v1
uses: love-actions/love-actions-linux@v1
with:
desktop-file-path: ./.github/build/linux/${{ env.BUILD_TYPE }}/template.desktop
executable-name: app
app-name: ${{ needs.get-info.outputs.app-name }}
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
description: Techmino is fun!
version-string: ${{ needs.get-info.outputs.version-string }}
icon-path: ./.github/build/linux/${{ env.BUILD_TYPE }}/icon.png
love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }}
libs-path: ./ColdClear/libs/
shared-path: ./ColdClear/shared/
lib-path: ./ColdClear/lib
product-name: ${{ steps.process-app-name.outputs.product-name }}
output-folder: ${{ env.OUTPUT_FOLDER }}
- name: Upload AppImage artifact
@@ -339,31 +353,37 @@ jobs:
with:
name: ${{ needs.get-info.outputs.base-name }}_Linux_AppImage
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.AppImage
- name: Upload release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
uses: softprops/action-gh-release@v1
- name: Upload Debian artifact
uses: actions/upload-artifact@v3
with:
body: ${{ github.event.head_commit.message }}
files: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.AppImage
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
- name: Upload to WeTransfer
id: transfer
run: |
curl -sL https://git.io/file-transfer | sh
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
- name: Show download link
name: ${{ needs.get-info.outputs.base-name }}_Linux_Debian
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.deb
- name: Prepare for release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
shell: bash
run: |
echo "::notice title=Linux packages::${{ steps.transfer.outputs.download-url }}"
mkdir -p ${{ env.RELEASE_FOLDER }}
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.AppImage ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Linux.AppImage
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.deb ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Linux.deb
- name: Upload release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
uses: ncipollo/release-action@v1
with:
allowUpdates: true
artifacts: |
${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Linux.AppImage
${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Linux.deb
body: ${{ needs.get-info.outputs.update-note }}
name: ${{ needs.get-info.outputs.update-title }}
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
build-macos-appstore:
runs-on: macos-latest
needs: [get-info, build-core, auto-test]
if: github.event_name != 'pull_request'
env:
OUTPUT_FOLDER: ./build
outputs:
download-url: ${{ steps.transfer.outputs.download-url }}
RELEASE_FOLDER: ./release
steps:
- uses: actions/checkout@v3
with:
@@ -374,8 +394,9 @@ jobs:
run: |
import os
import re
os.system("echo ::set-output name=bundle-id::org.26f-studio.techmino")
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}"))
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
f.write('bundle-id=org.26f-studio.techmino\n')
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
- name: Download core love package
uses: actions/download-artifact@v3
with:
@@ -391,11 +412,11 @@ jobs:
rm ./ColdClear/universal/libcold_clear.a
- name: Build macOS packages
id: build-packages
uses: 26F-Studio/love-actions-macos-appstore@v1
uses: love-actions/love-actions-macos-appstore@v1
with:
app-name: ${{ needs.get-info.outputs.app-name }}
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
copyright: "Copyright © 2019-2022 26F-Studio. Some Rights Reserved."
copyright: "Copyright © 2019-2023 26F-Studio. Some Rights Reserved."
icon-path: ./.github/build/macOS/${{ env.BUILD_TYPE }}/icon.icns
love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }}
libs-path: ./ColdClear/universal/
@@ -424,31 +445,29 @@ jobs:
with:
name: ${{ needs.get-info.outputs.base-name }}_macOS_appstore_pkg
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.pkg
- name: Upload release
- name: Prepare for release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
uses: softprops/action-gh-release@v1
with:
body: ${{ github.event.head_commit.message }}
files: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.pkg
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
- name: Upload to WeTransfer
id: transfer
run: |
wget -qO- https://github.com/Mikubill/transfer/releases/download/v0.4.17/transfer_0.4.17_darwin_amd64.tar.gz | tar xvz
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
- name: Show download link
shell: bash
run: |
echo "::notice title=macOS App Store packages::${{ steps.transfer.outputs.download-url }}"
mkdir -p ${{ env.RELEASE_FOLDER }}
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.pkg ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_appstore.pkg
- name: Upload release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
uses: ncipollo/release-action@v1
with:
allowUpdates: true
artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_appstore.pkg
body: ${{ needs.get-info.outputs.update-note }}
name: ${{ needs.get-info.outputs.update-title }}
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
build-macos-portable:
runs-on: macos-latest
needs: [get-info, build-core, auto-test]
if: github.event_name != 'pull_request'
env:
OUTPUT_FOLDER: ./build
outputs:
download-url: ${{ steps.transfer.outputs.download-url }}
RELEASE_FOLDER: ./release
steps:
- uses: actions/checkout@v3
with:
@@ -459,8 +478,9 @@ jobs:
run: |
import os
import re
os.system("echo ::set-output name=bundle-id::org.26f-studio.techmino")
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}"))
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
f.write('bundle-id=org.26f-studio.techmino\n')
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
- name: Download core love package
uses: actions/download-artifact@v3
with:
@@ -476,11 +496,11 @@ jobs:
rm ./ColdClear/universal/libcold_clear.a
- name: Build macOS packages
id: build-packages
uses: 26F-Studio/love-actions-macos-portable@v1
uses: love-actions/love-actions-macos-portable@v1
with:
app-name: ${{ needs.get-info.outputs.app-name }}
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
copyright: "Copyright © 2019-2022 26F-Studio. Some Rights Reserved."
copyright: "Copyright © 2019-2023 26F-Studio. Some Rights Reserved."
icon-path: ./.github/build/macOS/${{ env.BUILD_TYPE }}/icon.icns
love-package: ${{ env.CORE_LOVE_PACKAGE_PATH }}
libs-path: ./ColdClear/universal/
@@ -518,33 +538,31 @@ jobs:
with:
name: ${{ needs.get-info.outputs.base-name }}_macOS_portable_bare
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.zip
- name: Upload release
- name: Prepare for release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
uses: softprops/action-gh-release@v1
with:
body: ${{ github.event.head_commit.message }}
files: |
${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.pkg
${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.dmg
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
- name: Upload to WeTransfer
id: transfer
run: |
wget -qO- https://github.com/Mikubill/transfer/releases/download/v0.4.17/transfer_0.4.17_darwin_amd64.tar.gz | tar xvz
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
- name: Show download link
shell: bash
run: |
echo "::notice title=macOS portable packages::${{ steps.transfer.outputs.download-url }}"
mkdir -p ${{ env.RELEASE_FOLDER }}
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.pkg ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_portable.pkg
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.dmg ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_portable.dmg
- name: Upload release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
uses: ncipollo/release-action@v1
with:
allowUpdates: true
artifacts: |
${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_portable.pkg
${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_portable.dmg
body: ${{ needs.get-info.outputs.update-note }}
name: ${{ needs.get-info.outputs.update-title }}
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
build-windows:
runs-on: windows-latest
needs: [get-info, build-core, auto-test]
env:
OUTPUT_FOLDER: ./build
outputs:
download-url: ${{ steps.transfer.outputs.download-url }}
RELEASE_FOLDER: ./release
steps:
- uses: actions/checkout@v3
with:
@@ -555,7 +573,8 @@ jobs:
run: |
import os
import re
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}"))
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
- name: Download core love package
uses: actions/download-artifact@v3
with:
@@ -565,9 +584,22 @@ jobs:
with:
platform: Windows
dir: ./ColdClear
- name: Update Windows template
shell: python3 {0}
run: |
version_string = "${{ needs.get-info.outputs.version-string }}"
file_version = (f"{version_string.replace('.', ',')},0")
with open("./.github/build/windows/${{ env.BUILD_TYPE }}/template.rc", "r+", encoding="utf8") as file:
data = file.read()
data = data\
.replace("@Version", version_string)\
.replace("@FileVersion", file_version)
file.seek(0)
file.truncate()
file.write(data)
- name: Build Windows packages
id: build-packages
uses: 26F-Studio/love-actions-windows@v1
uses: love-actions/love-actions-windows@v1
with:
icon-path: ./.github/build/windows/${{ env.BUILD_TYPE }}/icon.ico
rc-path: ./.github/build/windows/${{ env.BUILD_TYPE }}/template.rc
@@ -575,7 +607,9 @@ jobs:
extra-assets-x86: ./ColdClear/x86/CCloader.dll ./ColdClear/x86/cold_clear.dll
extra-assets-x64: ./ColdClear/x64/CCloader.dll ./ColdClear/x64/cold_clear.dll
product-name: ${{ steps.process-app-name.outputs.product-name }}
version-string: ${{ needs.get-info.outputs.version-string }}
app-id: ${{ secrets.WINDOWS_APP_ID }}
project-website: https://www.studio26f.org/
installer-languages: ChineseSimplified.isl ChineseTraditional.isl English.isl Spanish.isl French.isl Indonesian.isl Japanese.isl Portuguese.isl
output-folder: ${{ env.OUTPUT_FOLDER }}
- name: Upload 32-bit artifact
uses: actions/upload-artifact@v3
@@ -587,32 +621,31 @@ jobs:
with:
name: ${{ needs.get-info.outputs.base-name }}_Windows_x64
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x64.zip
- name: Upload installer artifact
uses: actions/upload-artifact@v3
with:
name: ${{ needs.get-info.outputs.base-name }}_Windows_installer
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_installer.exe
- name: Prepare for release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
shell: bash
run: |
mkdir -p ${{ env.RELEASE_FOLDER }}
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x86.zip ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x86.zip
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x64.zip ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x64.zip
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_installer.exe ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_installer.exe
- name: Upload release
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
uses: softprops/action-gh-release@v1
uses: ncipollo/release-action@v1
with:
body: ${{ github.event.head_commit.message }}
files: |
${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x86.zip
${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x64.zip
allowUpdates: true
artifacts: |
${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x86.zip
${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x64.zip
${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_installer.exe
body: ${{ needs.get-info.outputs.update-note }}
name: ${{ needs.get-info.outputs.update-title }}
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
- name: Get transfer
env:
TEMP_PATH: ./temp.zip
shell: bash
run: |
curl -L --retry 5 https://github.com/Mikubill/transfer/releases/download/v0.4.17/transfer_0.4.17_windows_amd64.zip -o ${{ env.TEMP_PATH }}
7z x ${{ env.TEMP_PATH }} -o./
rm ${{ env.TEMP_PATH }}
- name: Upload to WeTransfer
id: transfer
run: |
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
- name: Show download link
shell: bash
run: |
echo "::notice title=Windows packages::${{ steps.transfer.outputs.download-url }}"
post-build:
runs-on: ubuntu-latest
@@ -634,11 +667,12 @@ jobs:
steps:
- uses: actions/checkout@v3
- name: Cleanup
uses: geekyeggo/delete-artifact@v1
uses: geekyeggo/delete-artifact@v2
with:
name: ${{ env.CORE_LOVE_ARTIFACT_NAME }}
- name: Send Discord message
uses: Sniddl/discord-commits@v1.3
if: github.event_name != 'pull_request'
uses: Sniddl/discord-commits@v1.6
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
message: "Github Actions for **${{ github.repository }}**."
@@ -657,7 +691,6 @@ jobs:
"fields":[
{"name":"Version","value":"${{ needs.get-info.outputs.version-string }}","inline": true},
{"name":"Package Name","value":"${{ needs.get-info.outputs.base-name }}","inline": true},
{"name":"Status","value":"**Automatic Test:** ${{ needs.auto-test.result }}\n**Core:** ${{ needs.build-core.result }}\n**Android:** ${{ needs.build-android.result }}\n**iOS:** ${{ needs.build-ios.result }}\n**Linux:** ${{ needs.build-linux.result }}\n**macOS App Store:** ${{ needs.build-macos-appstore.result }}\n**macOS portable:** ${{ needs.build-macos-portable.result }}\n**Windows:** ${{ needs.build-windows.result }}"},
{"name":"Download Links","value":"**Core:** ${{ needs.build-core.outputs.download-url}}\n**Android:** ${{ needs.build-android.outputs.download-url }}\n**iOS:** ${{ needs.build-ios.outputs.download-url }}\n**Linux:** ${{ needs.build-linux.outputs.download-url }}\n**macOS App Store:** ${{ needs.build-macos-appstore.outputs.download-url }}\n**macOS portable:** ${{ needs.build-macos-portable.outputs.download-url }}\n**Windows:** ${{ needs.build-windows.outputs.download-url}}"}
{"name":"Status","value":"**Automatic Test:** ${{ needs.auto-test.result }}\n**Core:** ${{ needs.build-core.result }}\n**Android:** ${{ needs.build-android.result }}\n**iOS:** ${{ needs.build-ios.result }}\n**Linux:** ${{ needs.build-linux.result }}\n**macOS App Store:** ${{ needs.build-macos-appstore.result }}\n**macOS portable:** ${{ needs.build-macos-portable.result }}\n**Windows:** ${{ needs.build-windows.result }}"}
]
}'

View File

@@ -1,29 +1,32 @@
SYSTEM=love._os if SYSTEM=='OS X' then SYSTEM='macOS' end
MOBILE=SYSTEM=='Android' or SYSTEM=='iOS'
FNNS=SYSTEM:find'\79\83'-- What does FNSF stand for? IDK so don't ask me lol
function love.conf(t)
t.identity='Techmino'--Saving folder
t.version="11.1"
local identity='Techmino'
local msaa=0
local portrait=false
local fs=love.filesystem
fs.setIdentity(identity)
do -- Load grapgic settings from conf/settings
local fileData=fs.read('conf/settings')
if fileData then
msaa=tonumber(fileData:match('"msaa":(%d+)')) or 0;
portrait=MOBILE and fileData:find('"portrait":true') and true
end
end
t.identity=identity -- Saving folder
t.version="11.4"
t.gammacorrect=false
t.appendidentity=true--Search files in source then in save directory
t.accelerometerjoystick=false--Accelerometer=joystick on ios/android
t.appendidentity=true -- Search files in source then in save directory
t.accelerometerjoystick=false -- Accelerometer=joystick on ios/android
if t.audio then
t.audio.mic=false
t.audio.mixwithsystem=true
end
local W=t.window
W.title="Techmino "..require"version".string
W.width,W.height=1280,720
W.minwidth,W.minheight=640,360
W.borderless=false
W.resizable=true
W.fullscreen=false
W.vsync=0--Unlimited FPS
W.msaa=0--Multi-sampled antialiasing
W.depth=0--Bits/samp of depth buffer
W.stencil=1--Bits/samp of stencil buffer
W.display=1--Monitor ID
W.highdpi=true--High-dpi mode for the window on a Retina display
W.x,W.y=nil
local M=t.modules
M.window,M.system,M.event,M.thread=true,true,true,true
M.timer,M.math,M.data=true,true,true
@@ -31,4 +34,27 @@ function love.conf(t)
M.graphics,M.font,M.image=true,true,true
M.mouse,M.touch,M.keyboard,M.joystick=true,true,true,true
M.physics=false
local W=t.window
W.vsync=0 -- Unlimited FPS
W.msaa=msaa -- Multi-sampled antialiasing
W.depth=0 -- Bits/samp of depth buffer
W.stencil=1 -- Bits/samp of stencil buffer
W.display=1 -- Monitor ID
W.highdpi=true -- High-dpi mode for the window on a Retina display
W.x,W.y=nil,nil -- Position of the window
W.borderless=MOBILE -- Display window frame
W.resizable=not MOBILE -- Whether window is resizable
W.fullscreentype=MOBILE and "exclusive" or "desktop" -- Fullscreen type
if portrait then
W.width,W.height=720,1280
W.minwidth,W.minheight=360,640
else
W.width,W.height=1280,720
W.minwidth,W.minheight=640,360
end
W.title="Techmino "..require "version".string -- Window title
if fs.getInfo('media/image/icon.png') then
W.icon='media/image/icon.png'
end
end

560
main.lua
View File

@@ -15,40 +15,30 @@
]]--
--Var leak check
-- setmetatable(_G,{__newindex=function(self,k,v)print('>>'..k)print(debug.traceback():match("\n.-\n\t(.-): "))rawset(self,k,v)end})
-- Var leak check
-- setmetatable(_G,{__newindex=function(self,k,v) print('>>'..k..string.rep(" ",26-#k),debug.traceback():match("\n.-\n\t(.-): "))rawset(self,k,v) end})
--System Global Vars Declaration
-- System Global Vars Declaration
local fs=love.filesystem
VERSION=require"version"
TIME=love.timer.getTime
YIELD=coroutine.yield
SYSTEM=love.system.getOS()if SYSTEM=='OS X'then SYSTEM='macOS'end
FNNS=SYSTEM:find'\79\83'--What does FNSF stand for? IDK so don't ask me lol
MOBILE=SYSTEM=='Android'or SYSTEM=='iOS'
SAVEDIR=fs.getSaveDirectory()
--Global Vars & Settings
-- Global Vars & Settings
SFXPACKS={'chiptune'}
VOCPACKS={'miya','mono','xiaoya','miku','rin'}
VOCPACKS={'miya','mono','xiaoya','flore','miku','zundamon'}
FIRSTLAUNCH=false
DAILYLAUNCH=false
--System setting
-- System setting
math.randomseed(os.time()*626)
love.setDeprecationOutput(false)
love.keyboard.setKeyRepeat(true)
love.keyboard.setTextInput(false)
if MOBILE then
local w,h,f=love.window.getMode()
f.resizable=false
love.window.setMode(w,h,f)
end
local _LOADTIMELIST_={}
local _LOADTIME_=TIME()
--Load modules
-- Load modules
Z=require'Zframework'
FONT.load{
norm='parts/fonts/proportional.otf',
@@ -57,27 +47,24 @@ FONT.load{
FONT.setDefault('norm')
FONT.setFallback('norm')
SCR.setSize(1280,720)--Initialize Screen size
SCR.setSize(1280,720)-- Initialize Screen size
BGM.setMaxSources(5)
BGM.setChange(function(name)MES.new('music',text.nowPlaying..name,5)end)
VOC.setDiversion(.62)
WIDGET.setOnChange(function()
if SCN.cur~='custom_field'then
if SCN.cur~='net_game' and SCN.cur~='custom_field' then
local colorList=THEME.getThemeColor()
if not colorList then return end
local rnd=math.random
for _,W in next,SCN.scenes[SCN.cur].widgetList do
if W.color then
W.color=colorList[rnd(#colorList)]
if colorList then
for _,W in next,SCN.scenes[SCN.cur].widgetList do
if W.color then
W.color=colorList[math.random(#colorList)]
end
end
end
end
end)
table.insert(_LOADTIMELIST_,("Load Zframework: %.3fs"):format(TIME()-_LOADTIME_))
--Create shortcuts
-- Create shortcuts
setFont=FONT.set
getFont=FONT.get
mText=GC.simpX
@@ -87,33 +74,34 @@ string.repD=STRING.repD
string.sArg=STRING.sArg
string.split=STRING.split
--Delete all naked files (from ancient versions)
-- Delete all naked files (from ancient versions)
FILE.clear('')
--Create directories
for _,v in next,{'conf','record','replay','cache','lib'}do
-- Create directories
for _,v in next,{'conf','record','replay','cache','lib'} do
local info=fs.getInfo(v)
if not info then
fs.createDirectory(v)
elseif info.type~='directory'then
elseif info.type~='directory' then
fs.remove(v)
fs.createDirectory(v)
end
end
CHAR=require'parts.char'
require'parts.gameTables'
require'parts.gameFuncs'
--Load shader files from SOURCE ONLY
-- Load shader files from SOURCE ONLY
SHADER={}
for _,v in next,fs.getDirectoryItems('parts/shaders')do
if isSafeFile('parts/shaders/'..v)then
for _,v in next,fs.getDirectoryItems('parts/shaders') do
if FILE.isSafe('parts/shaders/'..v) then
local name=v:sub(1,-6)
SHADER[name]=love.graphics.newShader('parts/shaders/'..name..'.glsl')
end
end
-- Load modules
CHAR=require'parts.char'
require'parts.gameTables'
require'parts.gameFuncs'
THEME= require'parts.theme'
LINE= require'parts.line'
DATA= require'parts.data'
@@ -124,7 +112,7 @@ USERS= require'parts.users'
NET= require'parts.net'
VK= require'parts.virtualKey'
BOT= require'parts.bot'
RSlist= require'parts.RSlist'DSCP=RSlist.TRS.centerPos
RSlist= require'parts.RSlist'; DSCP=RSlist.TRS.centerPos
PLY= require'parts.player'
NETPLY= require'parts.netPlayer'
MODES= require'parts.modes'
@@ -135,10 +123,29 @@ setmetatable(TEXTURE,{__index=function(self,k)
return self[k]
end})
table.insert(_LOADTIMELIST_,("Load Parts: %.3fs"):format(TIME()-_LOADTIME_))
-- Load mode files
for i=1,#MODES do
local m=MODES[i]-- Mode template
if FILE.isSafe('parts/modes/'..m.name) then
TABLE.complete(require('parts.modes.'..m.name),MODES[i])
MODES[m.name],MODES[i]=MODES[i]
end
end
for _,v in next,fs.getDirectoryItems('parts/modes') do
if FILE.isSafe('parts/modes/'..v) and not MODES[v:sub(1,-5)] then
local M={name=v:sub(1,-5)}
local modeData=require('parts.modes.'..M.name)
if modeData.env then
TABLE.complete(modeData,M)
MODES[M.name]=M
end
end
end
--Init Zframework
do--Z.setCursor
table.insert(_LOADTIMELIST_,("Load Modules: %.3fs"):format(TIME()-_LOADTIME_))
-- Initialize Zframework
do-- Z.setCursor
local normImg=GC.DO{16,16,
{'fCirc',8,8,4},
{'setCL',1,1,1,.7},
@@ -149,6 +156,7 @@ do--Z.setCursor
{'dCirc',8,8,7},
{'fCirc',8,8,3},
}
local _
Z.setCursor(function(time,x,y)
if not SETTING.sysCursor then
local R=math.floor((time+1)/2)%7+1
@@ -157,17 +165,17 @@ do--Z.setCursor
_=DSCP[R][0]
GC.draw(TEXTURE.miniBlock[R],x,y,time%math.pi*4,8,8,2*_[2]+1,2*(#BLOCKS[R][0]-_[1])-1)
GC.setColor(1,1,1)
GC.draw(love.mouse.isDown(1)and holdImg or normImg,x,y,nil,nil,nil,8,8)
GC.draw(love.mouse.isDown(1) and holdImg or normImg,x,y,nil,nil,nil,8,8)
end
end)
end
Z.setOnFnKeys({
function()MES.new('check',PROFILE.switch()and"profile start!"or"profile report copied!")end,
function()MES.new('info',("System:%s[%s]\nluaVer:%s\njitVer:%s\njitVerNum:%s"):format(SYSTEM,jit.arch,_VERSION,jit.version,jit.version_num))end,
function()MES.new('error',"挂了")end,
function() MES.new('check',PROFILE.switch() and "profile start!" or "profile report copied!") end,
function() MES.new('info',("System:%s[%s]\nluaVer:%s\njitVer:%s\njitVerNum:%s"):format(SYSTEM,jit.arch,_VERSION,jit.version,jit.version_num)) end,
function() MES.new('error',"挂了") end,
function()
if GAME.playing and not GAME.net then
for _=1,8 do
for _=1,1 do
if #PLY_ALIVE>1 then
local P=PLY_ALIVE[math.random(2,#PLY_ALIVE)]
P.lastRecv=PLAYERS[1]
@@ -176,17 +184,25 @@ Z.setOnFnKeys({
end
end
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,
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,
})
Z.setOnGlobalKey('f11',function()
if not MOBILE then
SETTING.fullscreen=not SETTING.fullscreen
applySettings()
saveSettings()
end
end)
Z.setVersionText(VERSION.string)
Z.setDebugInfo{
{"Cache",gcinfo},
{"Tasks",TASK.getCount},
{"Voices",VOC.getQueueCount},
{"Audios",love.audio.getSourceCount},
}
do--Z.setOnFocus
do-- Z.setOnFocus
local function task_autoSoundOff()
while true do
coroutine.yield()
@@ -214,7 +230,7 @@ do--Z.setOnFocus
TASK.new(task_autoSoundOn)
end
else
if SCN.cur=='game'and SETTING.autoPause then
if SCN.cur=='game' and SETTING.autoPause then
pauseGame()
end
if SETTING.autoMute and SCN.cur~='music' then
@@ -224,48 +240,18 @@ do--Z.setOnFocus
end
end)
end
Z.setOnQuit(destroyPlayers)
Z.setOnBeforeQuit(function()
NET.ws_close()
TASK.new(function()
TEST.yieldT(.26)
love.event.quit()
end)
end)
Z.setOnQuit(function()
destroyPlayers()
end)
--Load settings and statistics
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',"An error occured during loading, and some data was lost.")
end
--Initialize fields, sequence, missions, gameEnv for cutsom game
local fieldData=loadFile('conf/customBoards','-string -canSkip')
if fieldData then
fieldData=STRING.split(fieldData,"!")
for i=1,#fieldData do
DATA.pasteBoard(fieldData[i],i)
end
else
FIELD[1]=DATA.newBoard()
end
local sequenceData=loadFile('conf/customSequence','-string -canSkip')
if sequenceData then
DATA.pasteSequence(sequenceData)
end
local missionData=loadFile('conf/customMissions','-string -canSkip')
if missionData then
DATA.pasteMission(missionData)
end
local customData=loadFile('conf/customEnv','-canSkip')
if customData and customData['version']==VERSION.code then
TABLE.complete(customData,CUSTOMENV)
end
TABLE.complete(require"parts.customEnv0",CUSTOMENV)
--Initialize image libs
-- Initialize image libs
IMG.init{
lock='media/image/mess/lock.png',
dialCircle='media/image/mess/dialCircle.png',
@@ -285,8 +271,9 @@ IMG.init{
monoCH='media/image/characters/mono.png',
xiaoyaCH='media/image/characters/xiaoya.png',
xiaoyaOmino='media/image/characters/xiaoya_Omino.png',
floreCH='media/image/characters/flore.png',
mikuCH='media/image/characters/miku.png',
rinCH='media/image/characters/rin.png',
zundamonCH='media/image/characters/zundamon.png',
z={
character='media/image/characters/z_character.png',
screen1='media/image/characters/z_screen1.png',
@@ -344,20 +331,20 @@ SKIN.load{
{name="wtf",path='media/image/skin/wtf_mrz.png'},
}
--Initialize sound libs
-- Initialize sound libs
SFX.init((function()--[Warning] Not loading files here, just get the list of sound needed
local L={}
for _,v in next,fs.getDirectoryItems('media/effect/chiptune/')do
if isSafeFile('media/effect/chiptune/'..v,"Dangerous file : %SAVE%/media/effect/chiptune/"..v)then
for _,v in next,fs.getDirectoryItems('media/effect/chiptune/') do
if FILE.isSafe('media/effect/chiptune/'..v) then
table.insert(L,v:sub(1,-5))
end
end
return L
end)())
BGM.load((function()
BGM.init((function()
local L={}
for _,v in next,fs.getDirectoryItems('media/music')do
if isSafeFile('media/music/'..v,"Dangerous file : %SAVE%/media/music/"..v)then
for _,v in next,fs.getDirectoryItems('media/music') do
if FILE.isSafe('media/music/'..v) then
L[v:sub(1,-5)]='media/music/'..v
end
end
@@ -365,7 +352,7 @@ BGM.load((function()
end)())
VOC.init{
'zspin','sspin','jspin','lspin','tspin','ospin','ispin','pspin','qspin','fspin','espin','uspin','vspin','wspin','xspin','rspin','yspin','nspin','hspin','cspin',
'single','double','triple','techrash','pentacrash','hexacrash',
'single','double','triple','techrash','pentacrash','hexacrash','heptacrash','octacrash','nonacrash','decacrash','undecacrash','dodecacrash','tridecacrash','tetradecacrash','pentadecacrash','hexadecacrash','heptadecacrash','octadecacrash','nonadecacrash','ultracrash','impossicrash',
'mini','b2b','b3b',
'perfect_clear','half_clear',
'win','lose','bye',
@@ -373,7 +360,138 @@ VOC.init{
'welcome',
}
--Initialize language lib
table.insert(_LOADTIMELIST_,("Initialize Modules: %.3fs"):format(TIME()-_LOADTIME_))
-- Load settings and statistics
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',"An error occured during loading, and some data was lost.")
end
-- Initialize fields, sequence, missions, gameEnv for cutsom game
local fieldData=loadFile('conf/customBoards','-string -canSkip')
if fieldData then
fieldData=STRING.split(fieldData,"!")
for i=1,#fieldData do
DATA.pasteBoard(fieldData[i],i)
end
else
FIELD[1]=DATA.newBoard()
end
local sequenceData=loadFile('conf/customSequence','-string -canSkip')
if sequenceData then
DATA.pasteSequence(sequenceData)
end
local missionData=loadFile('conf/customMissions','-string -canSkip')
if missionData then
DATA.pasteMission(missionData)
end
local customData=loadFile('conf/customEnv','-canSkip')
if customData and customData['version']==VERSION.code then
TABLE.complete(customData,CUSTOMENV)
end
TABLE.complete(require"parts.customEnv0",CUSTOMENV)
-- Update data
do
if type(STAT.version)~='number' then
STAT.version=0
end
if STAT.version<1700 and SETTING.dascut<5 then
SETTING.dascut=SETTING.dascut+1
end
if RANKS.stack_e then
RANKS.stack_e=nil; fs.remove('record/stack_e.rec')
RANKS.stack_h=nil; fs.remove('record/stack_h.rec')
RANKS.stack_u=nil; fs.remove('record/stack_u.rec')
end
if RANKS.stack_20l then
RANKS.stack_20l=nil; fs.remove('record/stack_20l.rec')
RANKS.stack_40l=nil; fs.remove('record/stack_40l.rec')
RANKS.stack_100l=nil; fs.remove('record/stack_100l.rec')
end
if RANKS.rhythm_e then
RANKS.rhythm_e=nil; fs.remove('record/rhythm_e.rec')
RANKS.rhythm_h=nil; fs.remove('record/rhythm_h.rec')
RANKS.rhythm_u=nil; fs.remove('record/rhythm_u.rec')
end
if RANKS.bigbang then fs.remove('record/bigbang.rec') end
if RANKS.clearRush then fs.remove('record/clearRush.rec') end
if STAT.version~=VERSION.code then
for k,v in next,MODE_UPDATE_MAP do
if RANKS[k] then
RANKS[v]=RANKS[k]
RANKS[k]=nil
end
k='record/'..k
if fs.getInfo(k..'.dat') then
fs.write('record/'..v..'.rec',fs.read(k..'.dat'))
fs.remove(k..'.dat')
end
if fs.getInfo(k..'.rec') then
fs.write('record/'..v..'.rec',fs.read(k..'.rec'))
fs.remove(k..'.rec')
end
end
STAT.version=VERSION.code
end
SETTING.appLock,SETTING.dataSaving,SETTING.swap,SETTING.autoLogin=nil
if not SETTING.VKSkin then SETTING.VKSkin=1 end
for _,v in next,SETTING.skin do if v<1 or v>17 then v=17 end end
if not RSlist[SETTING.RS] then SETTING.RS='TRS' end
if SETTING.ghostType=='greyCell' then SETTING.ghostType='grayCell' end
if type(SETTING.skinSet)=='number' then SETTING.skinSet='crystal_scf' end
if not TABLE.find({8,10,13,17,22,29,37,47,62,80,100},SETTING.frameMul) then SETTING.frameMul=100 end
if SETTING.cv then SETTING.vocPack,SETTING.cv=SETTING.cv end
if type(SETTING.bg)~='string' then SETTING.bg='on' end
if SETTING.skin[18]==10 then SETTING.skin[18]=4 end
if SETTING.reTime>3 or SETTING.reTime<.5 then SETTING.reTime=2 end
if SETTING.locale=='zh_full' then SETTING.locale='zh' end
if SETTING.vocPack=='rin' then SETTING.vocPack='miku' 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
if RANKS.master_l then RANKS.master_n,RANKS.master_l=RANKS.master_l end
if RANKS.master_u then RANKS.master_h,RANKS.master_u=RANKS.master_u end
for _,v in next,VK_ORG do v.color=nil end
for name,rank in next,RANKS do
if type(name)=='number' or type(rank)~='number' then
RANKS[name]=nil
else
local M=MODES[name]
if M and M.unlock and rank>0 then
for _,unlockName in next,M.unlock do
if not RANKS[unlockName] then
RANKS[unlockName]=0
end
end
end
if not (M and M.x) then
RANKS[name]=nil
end
end
end
if not MODES[STAT.lastPlay] then
STAT.lastPlay='sprint_10l'
end
fs.remove('conf/account')
saveStats()
saveProgress()
saveSettings()
end
-- Initialize language lib
LANG.init('zh',
{
zh=require'parts.language.lang_zh',
@@ -386,219 +504,50 @@ LANG.init('zh',
ja=require'parts.language.lang_ja',
symbol=require'parts.language.lang_symbol',
zh_code=require'parts.language.lang_zh_code',
--1. Add language file to LANG folder;
--2. Require it;
--3. Add a button in parts/scenes/lang.lua;
vi=require'parts.language.lang_vi',
-- 1. Add language file to LANG folder;
-- 2. Require it;
-- 3. Add a button in parts/scenes/lang.lua;
},
{
block=BLOCK_NAMES
},
(function()
local tipMeta={__call=function(L)return L[math.random(#L)]end}
local tipMeta={__call=function(L) return L[math.random(#L)] end}
return function(L)
if type(rawget(L,'getTip'))=='table'then setmetatable(L.getTip,tipMeta)end
if type(rawget(L,'getTip'))=='table' then setmetatable(L.getTip,tipMeta) end
setmetatable(L,{__index=function(self,k)
local mes="No Text ("..SETTING.locale.."): "..k
LOG(mes)
MES.new('warn',mes)
self[k]=CHAR.zChan.thinking
self[k]="["..k.."]"
return self[k]
end})
end
end)()
)
table.insert(_LOADTIMELIST_,("Initialize Parts: %.3fs"):format(TIME()-_LOADTIME_))
--Load background files from SOURCE ONLY
for _,v in next,fs.getDirectoryItems('parts/backgrounds')do
if isSafeFile('parts/backgrounds/'..v)and v:sub(-3)=='lua'then
-- Load background files from SOURCE ONLY
for _,v in next,fs.getDirectoryItems('parts/backgrounds') do
if FILE.isSafe('parts/backgrounds/'..v) and v:sub(-3)=='lua' then
local name=v:sub(1,-5)
BG.add(name,require('parts.backgrounds.'..name))
end
end
BG.remList('none')BG.remList('gray')BG.remList('custom')
--Load scene files from SOURCE ONLY
for _,v in next,fs.getDirectoryItems('parts/scenes')do
if isSafeFile('parts/scenes/'..v)then
-- Load scene files from SOURCE ONLY
for _,v in next,fs.getDirectoryItems('parts/scenes') do
if FILE.isSafe('parts/scenes/'..v) then
local sceneName=v:sub(1,-5)
SCN.add(sceneName,require('parts.scenes.'..sceneName))
LANG.addScene(sceneName)
end
end
--Load mode files
for i=1,#MODES do
local m=MODES[i]--Mode template
if isSafeFile('parts/modes/'..m.name)then
TABLE.complete(require('parts.modes.'..m.name),MODES[i])
MODES[m.name],MODES[i]=MODES[i]
end
end
for _,v in next,fs.getDirectoryItems('parts/modes')do
if isSafeFile('parts/modes/'..v)and not MODES[v:sub(1,-5)]then
local M={name=v:sub(1,-5)}
local modeData=require('parts.modes.'..M.name)
if modeData.env then
TABLE.complete(modeData,M)
MODES[M.name]=M
end
end
end
table.insert(_LOADTIMELIST_,("Load Files: %.3fs"):format(TIME()-_LOADTIME_))
--Update data
do
local needSave
if not fs.getInfo('conf/data')then
needSave=true
end
if type(STAT.version)~='number'then
STAT.version=0
needSave=true
end
if STAT.version<1500 then
FILE.clear_s('')
end
if STAT.version<1505 then
fs.remove('record/bigbang.rec')
fs.remove('conf/replay')
end
if STAT.version==1506 then
local temp1,temp2
if fs.getInfo('record/master_l.rec')then
temp1=fs.read('record/master_l.rec')
end
if fs.getInfo('record/master_u.rec')then
temp2=fs.read('record/master_u.rec')
end
if temp1 then
fs.write('record/master_u.rec',temp1)
end
if temp2 then
fs.write('record/master_l.rec',temp2)
end
RANKS.master_l,RANKS.master_u=RANKS.master_u,RANKS.master_l
if RANKS.tsd_u then
RANKS.tsd_u=0
end
end
if STAT.version==1601 then
RANKS.round_e=nil
RANKS.round_n=nil
RANKS.round_h=nil
RANKS.round_l=nil
RANKS.round_u=nil
fs.remove('record/round_e.rec')
fs.remove('record/round_n.rec')
fs.remove('record/round_h.rec')
fs.remove('record/round_l.rec')
fs.remove('record/round_u.rec')
end
if STAT.version<1700 and SETTING.dascut<5 then
SETTING.dascut=SETTING.dascut+1
needSave=true
end
if RANKS.stack_e then
RANKS.stack_e=nil
RANKS.stack_h=nil
RANKS.stack_u=nil
fs.remove('record/stack_e.rec')
fs.remove('record/stack_h.rec')
fs.remove('record/stack_u.rec')
end
if RANKS.stack_20l then
RANKS.stack_20l=nil
RANKS.stack_40l=nil
RANKS.stack_100l=nil
fs.remove('record/stack_20l.rec')
fs.remove('record/stack_40l.rec')
fs.remove('record/stack_100l.rec')
end
if RANKS.rhythm_e then
RANKS.rhythm_e=nil
RANKS.rhythm_h=nil
RANKS.rhythm_u=nil
fs.remove('record/rhythm_e.rec')
fs.remove('record/rhythm_h.rec')
fs.remove('record/rhythm_u.rec')
end
if RANKS.bigbang or RANKS.clearRush then
fs.remove('record/clearRush.rec')
fs.remove('record/bigbang.rec')
end
if STAT.version~=VERSION.code then
for k,v in next,MODE_UPDATE_MAP do
if RANKS[k]then
RANKS[v]=RANKS[k]
RANKS[k]=nil
end
k='record/'..k
if fs.getInfo(k..'.dat')then
fs.write('record/'..v..'.rec',fs.read(k..'.dat'))
fs.remove(k..'.dat')
end
if fs.getInfo(k..'.rec')then
fs.write('record/'..v..'.rec',fs.read(k..'.rec'))
fs.remove(k..'.rec')
end
end
STAT.version=VERSION.code
needSave=true
end
SETTING.appLock,SETTING.dataSaving,SETTING.swap=nil
if not SETTING.VKSkin then SETTING.VKSkin=1 end
for _,v in next,SETTING.skin do if v<1 or v>17 then v=17 end end
if not RSlist[SETTING.RS]then SETTING.RS='TRS'end
if SETTING.ghostType=='greyCell'then SETTING.ghostType='grayCell'end
if type(SETTING.skinSet)=='number'then SETTING.skinSet='crystal_scf'end
if not TABLE.find({8,10,13,17,22,29,37,47,62,80,100},SETTING.frameMul)then SETTING.frameMul=100 end
if SETTING.cv then SETTING.vocPack,SETTING.cv=SETTING.cv end
if type(SETTING.bg)~='string'then SETTING.bg='on'end
if SETTING.skin[18]==10 then SETTING.skin[18]=4 end
if 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
if RANKS.master_l then RANKS.master_n,RANKS.master_l=RANKS.master_l needSave=true end
if RANKS.master_u then RANKS.master_h,RANKS.master_u=RANKS.master_u needSave=true end
for _,v in next,VK_ORG do v.color=nil end
for name,rank in next,RANKS do
if type(name)=='number'or type(rank)~='number'then
RANKS[name]=nil
needSave=true
else
local M=MODES[name]
if M and M.unlock and rank>0 then
for _,unlockName in next,M.unlock do
if not RANKS[unlockName]then
RANKS[unlockName]=0
needSave=true
end
end
end
if not(M and M.x)then
RANKS[name]=nil
needSave=true
end
end
end
if not MODES[STAT.lastPlay]then
STAT.lastPlay='sprint_10l'
needSave=true
end
if needSave then
saveStats()
saveProgress()
saveSettings()
love.event.quit('restart')
end
end
--First start
-- First start
FIRSTLAUNCH=STAT.run==0
if FIRSTLAUNCH and MOBILE then
SETTING.VKSwitch=true
@@ -606,18 +555,18 @@ if FIRSTLAUNCH and MOBILE then
SETTING.cleanCanvas=true
end
--Apply system setting
-- Apply system setting
applySettings()
--Load replays
for _,fileName in next,fs.getDirectoryItems('replay')do
if fileName:sub(12,12):match("[a-zA-Z]")then
-- Load replays
for _,fileName in next,fs.getDirectoryItems('replay') do
if fileName:sub(12,12):match("[a-zA-Z]") then
local date,mode,version,player,seed,setting,mod
local fileData=fs.read('replay/'..fileName)
date, fileData=STRING.readLine(fileData)date=date:gsub("[a-zA-Z]","")
mode, fileData=STRING.readLine(fileData)mode=MODE_UPDATE_MAP[mode]or mode
mode, fileData=STRING.readLine(fileData)mode=MODE_UPDATE_MAP[mode] or mode
version,fileData=STRING.readLine(fileData)
player, fileData=STRING.readLine(fileData)if player=="Local Player"then player="Stacker"end
player, fileData=STRING.readLine(fileData) if player=="Local Player" then player="Stacker" end
local success
success,fileData=pcall(love.data.decompress,'string','zlib',fileData)
if not success then goto BREAK_cannotParse end
@@ -653,16 +602,22 @@ for _,fileName in next,fs.getDirectoryItems('replay')do
local rep=DATA.parseReplay('replay/'..fileName)
table.insert(REPLAY,rep)
end
table.sort(REPLAY,function(a,b)return a.fileName>b.fileName end)
table.sort(REPLAY,function(a,b) return a.fileName>b.fileName end)
table.insert(_LOADTIMELIST_,("Initialize Data: %.3fs"):format(TIME()-_LOADTIME_))
AUTHURL="https://studio26f.org/oauth?product=techmino"
AUTHHOST="cafuuchino1.3322.org:8081"
WS.switchHost('cafuuchino1.3322.org','10026','/techmino/ws/v1')
HTTP.setHost("cafuuchino1.3322.org:10026")
HTTP.setThreadCount(1)
for i=1,#_LOADTIMELIST_ do LOG(_LOADTIMELIST_[i])end
table.insert(_LOADTIMELIST_,("Load Resources: %.3fs"):format(TIME()-_LOADTIME_))
--Launch testing task if launch param received
if TABLE.find(arg,'--test')then
for i=1,#_LOADTIMELIST_ do LOG(_LOADTIMELIST_[i]) end
-- Launch testing task if launch param received
if TABLE.find(arg,'-- test') then
TASK.new(function()
while not LOADED do YIELD()end
while not LOADED do coroutine.yield() end
LOG("\27[92m\27[1mAutomatic Test Started\27[0m")
BGM.setVol(0)SFX.setVol(0)
@@ -670,7 +625,7 @@ if TABLE.find(arg,'--test')then
TEST.yieldUntilNextScene()
for k,mode in next,MODES do
if k~='netBattle'then
if k~='netBattle' then
LOG("Scanning mode: "..mode.name)
loadGame(mode.name,true)
TEST.yieldUntilNextScene()
@@ -684,12 +639,11 @@ if TABLE.find(arg,'--test')then
end)
TASK.new(function()
while true do
YIELD()
if Z.getErr(1)then break end
coroutine.yield()
if Z.getErr(1) then break end
end
LOG("\27[91m\27[1mAutomatic Test Failed :(\27[0m\nThe error message is:\n"..table.concat(Z.getErr(1).mes,"\n").."\27[91m\nAborting\27[0m")
TEST.yieldN(60)
love.event.quit(1)
end)
end
WS.switchHost('101.43.110.22','10026','/tech/socket/v1')

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
media/music/antispace.ogg Normal file

Binary file not shown.

Binary file not shown.

BIN
media/vocal/flore/b2b_1.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/b2b_2.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/b2b_3.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/b3b_1.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/b3b_2.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/b3b_3.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/bye_1.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/bye_2.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/bye_3.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/bye_4.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/bye_5.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/bye_6.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/cspin.ogg Normal file

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.

BIN
media/vocal/flore/espin.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/fspin.ogg Normal file

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.

BIN
media/vocal/flore/hspin.ogg Normal file

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.

BIN
media/vocal/flore/nspin.ogg Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
media/vocal/flore/ospin.ogg Normal file

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.

BIN
media/vocal/flore/pspin.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/qspin.ogg Normal file

Binary file not shown.

BIN
media/vocal/flore/rspin.ogg Normal file

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.

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