Compare commits

...

102 Commits

Author SHA1 Message Date
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
194 changed files with 3402 additions and 1955 deletions

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

@@ -99,6 +99,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 }}
@@ -123,12 +128,20 @@ jobs:
body: ${{ needs.get-info.outputs.update-note }}
name: ${{ needs.get-info.outputs.update-title }}
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
- name: Get transfer
shell: bash
run: |
curl -sL --retry 5 https://raw.githubusercontent.com/Mikubill/transfer/master/install.sh | sh
- 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 "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
uses: nick-fields/retry@v2
with:
max_attempts: 5
retry_wait_seconds: 10
timeout_minutes: 5
command: |
./transfer wet -s -p 16 --no-progress ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love 2>&1>./wetransfer.log
echo "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
auto-test:
runs-on: ubuntu-latest
@@ -146,6 +159,7 @@ jobs:
build-android:
runs-on: ubuntu-latest
needs: [get-info, build-core, auto-test]
if: github.event_name != 'pull_request'
env:
OUTPUT_FOLDER: ./build
RELEASE_FOLDER: ./release
@@ -162,12 +176,12 @@ jobs:
import os
import re
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
if "${{ env.BUILD_TYPE }}" == "dev":
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')
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')
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:
@@ -176,17 +190,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: love-actions/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 }}
@@ -197,8 +204,8 @@ 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 }}
@@ -223,17 +230,25 @@ jobs:
body: ${{ needs.get-info.outputs.update-note }}
name: ${{ needs.get-info.outputs.update-title }}
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
- name: Get transfer
shell: bash
run: |
curl -sL --retry 5 https://raw.githubusercontent.com/Mikubill/transfer/master/install.sh | sh
- 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 "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
uses: nick-fields/retry@v2
with:
max_attempts: 5
retry_wait_seconds: 10
timeout_minutes: 5
command: |
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
echo "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
build-ios:
runs-on: macos-latest
if: github.event_name != 'pull_request'
needs: [get-info, build-core, auto-test]
if: github.event_name != 'pull_request'
env:
OUTPUT_FOLDER: ./build
RELEASE_FOLDER: ./release
@@ -267,7 +282,7 @@ jobs:
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 }}
@@ -312,12 +327,20 @@ jobs:
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
- name: Get transfer
shell: bash
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 "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
- name: Upload to WeTransfer
id: transfer
uses: nick-fields/retry@v2
with:
max_attempts: 5
retry_wait_seconds: 10
timeout_minutes: 5
command: |
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
echo "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
build-linux:
runs-on: ubuntu-latest
@@ -337,12 +360,20 @@ jobs:
run: |
import os
import re
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('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
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:
@@ -352,20 +383,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: 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
@@ -373,32 +403,48 @@ 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 Debian artifact
uses: actions/upload-artifact@v3
with:
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: |
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
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') }}
- name: Get transfer
shell: bash
run: |
curl -sL --retry 5 https://raw.githubusercontent.com/Mikubill/transfer/master/install.sh | sh
- 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 "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
uses: nick-fields/retry@v2
with:
max_attempts: 5
retry_wait_seconds: 10
timeout_minutes: 5
command: |
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
echo "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
build-macos-appstore:
runs-on: macos-latest
if: github.event_name != 'pull_request'
needs: [get-info, build-core, auto-test]
if: github.event_name != 'pull_request'
env:
OUTPUT_FOLDER: ./build
RELEASE_FOLDER: ./release
@@ -436,7 +482,7 @@ jobs:
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/
@@ -480,17 +526,25 @@ jobs:
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
- name: Get transfer
shell: bash
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 "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
- name: Upload to WeTransfer
id: transfer
uses: nick-fields/retry@v2
with:
max_attempts: 5
retry_wait_seconds: 10
timeout_minutes: 5
command: |
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
echo "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
build-macos-portable:
runs-on: macos-latest
if: github.event_name != 'pull_request'
needs: [get-info, build-core, auto-test]
if: github.event_name != 'pull_request'
env:
OUTPUT_FOLDER: ./build
RELEASE_FOLDER: ./release
@@ -528,7 +582,7 @@ jobs:
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/
@@ -578,16 +632,26 @@ jobs:
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
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') }}
- name: Upload to WeTransfer
id: transfer
- name: Get transfer
shell: bash
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 "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
- name: Upload to WeTransfer
id: transfer
uses: nick-fields/retry@v2
with:
max_attempts: 5
retry_wait_seconds: 10
timeout_minutes: 5
command: |
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
echo "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
build-windows:
runs-on: windows-latest
@@ -618,6 +682,19 @@ 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: love-actions/love-actions-windows@v1
@@ -628,7 +705,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
@@ -640,6 +719,11 @@ 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
@@ -647,12 +731,16 @@ jobs:
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: ncipollo/release-action@v1
with:
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
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') }}
@@ -661,15 +749,20 @@ jobs:
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 }}
curl -sL --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
shell: pwsh
run: |
./transfer.exe wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
"download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $env:GITHUB_OUTPUT
uses: nick-fields/retry@v2
with:
max_attempts: 5
retry_wait_seconds: 10
shell: pwsh
timeout_minutes: 5
command: |
./transfer.exe wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
"download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $env:GITHUB_OUTPUT
post-build:
runs-on: ubuntu-latest
@@ -721,6 +814,7 @@ jobs:
if "${{ needs.build-windows.result }}" == "success":
f.write("- Windows packages: [WeTransfer](${{ needs.build-windows.outputs.download-url }})\n")
- name: Send Discord message
if: github.event_name != 'pull_request'
uses: Sniddl/discord-commits@v1.5
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}

View File

@@ -1,28 +1,63 @@
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
W.title="Techmino "..require "version".string
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.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
if fs.getInfo('media/image/icon.png') then
W.icon='media/image/icon.png'
end
if MOBILE then
W.borderless=true
W.resizable=false
W.fullscreen=true
else
W.borderless=false
W.resizable=true
W.fullscreen=false
end
local M=t.modules
M.window,M.system,M.event,M.thread=true,true,true,true

367
main.lua
View File

@@ -22,13 +22,10 @@
local fs=love.filesystem
VERSION=require"version"
TIME=love.timer.getTime
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'
-- Global Vars & Settings
SFXPACKS={'chiptune'}
VOCPACKS={'miya','mono','xiaoya','miku'}
VOCPACKS={'miya','mono','xiaoya','miku','zundamon'}
FIRSTLAUNCH=false
DAILYLAUNCH=false
@@ -37,11 +34,6 @@ 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()
@@ -72,8 +64,6 @@ WIDGET.setOnChange(function()
end
end)
table.insert(_LOADTIMELIST_,("Load Zframework: %.3fs"):format(TIME()-_LOADTIME_))
-- Create shortcuts
setFont=FONT.set
getFont=FONT.get
@@ -98,10 +88,6 @@ for _,v in next,{'conf','record','replay','cache','lib'} do
end
end
CHAR=require'parts.char'
require'parts.gameTables'
require'parts.gameFuncs'
-- Load shader files from SOURCE ONLY
SHADER={}
for _,v in next,fs.getDirectoryItems('parts/shaders') do
@@ -111,6 +97,11 @@ for _,v in next,fs.getDirectoryItems('parts/shaders') do
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'
@@ -121,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'
@@ -132,9 +123,28 @@ 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
table.insert(_LOADTIMELIST_,("Load Modules: %.3fs"):format(TIME()-_LOADTIME_))
-- Initialize Zframework
do-- Z.setCursor
local normImg=GC.DO{16,16,
{'fCirc',8,8,4},
@@ -165,7 +175,7 @@ Z.setOnFnKeys({
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]
@@ -179,9 +189,11 @@ Z.setOnFnKeys({
function() if love['_openConsole'] then love['_openConsole']() end end,
})
Z.setOnGlobalKey('f11',function()
SETTING.fullscreen=not SETTING.fullscreen
applySettings()
saveSettings()
if not MOBILE then
SETTING.fullscreen=not SETTING.fullscreen
applySettings()
saveSettings()
end
end)
Z.setVersionText(VERSION.string)
Z.setDebugInfo{
@@ -239,45 +251,6 @@ 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
IMG.init{
lock='media/image/mess/lock.png',
@@ -299,7 +272,7 @@ IMG.init{
xiaoyaCH='media/image/characters/xiaoya.png',
xiaoyaOmino='media/image/characters/xiaoya_Omino.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',
@@ -386,161 +359,73 @@ VOC.init{
'welcome',
}
-- Initialize language lib
LANG.init('zh',
{
zh=require'parts.language.lang_zh',
zh_trad=require'parts.language.lang_zh_trad',
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',
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;
},
{
block=BLOCK_NAMES
},
(function()
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
setmetatable(L,{__index=function(self,k)
local mes="No Text ("..SETTING.locale.."): "..k
LOG(mes)
MES.new('warn',mes)
self[k]=CHAR.zChan.thinking
return self[k]
end})
end
end)()
)
table.insert(_LOADTIMELIST_,("Initialize Modules: %.3fs"):format(TIME()-_LOADTIME_))
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 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 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 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
-- 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
table.insert(_LOADTIMELIST_,("Load Files: %.3fs"):format(TIME()-_LOADTIME_))
-- 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
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')
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
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')
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
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')
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
@@ -558,7 +443,6 @@ do
end
end
STAT.version=VERSION.code
needSave=true
end
SETTING.appLock,SETTING.dataSaving,SETTING.swap,SETTING.autoLogin=nil
if not SETTING.VKSkin then SETTING.VKSkin=1 end
@@ -576,41 +460,91 @@ do
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
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
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
fs.remove('conf/account')
if needSave then
saveStats()
saveProgress()
saveSettings()
love.event.quit('restart')
saveStats()
saveProgress()
saveSettings()
end
-- Initialize language lib
LANG.init('zh',
{
zh=require'parts.language.lang_zh',
zh_trad=require'parts.language.lang_zh_trad',
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',
symbol=require'parts.language.lang_symbol',
zh_code=require'parts.language.lang_zh_code',
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}
return function(L)
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]="["..k.."]"
return self[k]
end})
end
end)()
)
-- 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 FILE.isSafe('parts/scenes/'..v) then
local sceneName=v:sub(1,-5)
SCN.add(sceneName,require('parts.scenes.'..sceneName))
LANG.addScene(sceneName)
end
end
table.insert(_LOADTIMELIST_,("Load Files: %.3fs"):format(TIME()-_LOADTIME_))
-- First start
FIRSTLAUNCH=STAT.run==0
@@ -669,7 +603,13 @@ for _,fileName in next,fs.getDirectoryItems('replay') do
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)
table.insert(_LOADTIMELIST_,("Load Resources: %.3fs"):format(TIME()-_LOADTIME_))
for i=1,#_LOADTIMELIST_ do LOG(_LOADTIMELIST_[i]) end
@@ -706,6 +646,3 @@ if TABLE.find(arg,'-- test') then
love.event.quit(1)
end)
end
WS.switchHost('cafuuchino1.3322.org','10026','/techmino/ws/v1')
HTTP.setHost("cafuuchino1.3322.org:10026")
HTTP.setThreadCount(1)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

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.

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.

View File

@@ -526,14 +526,14 @@ do
false,-- T
noKickSet,-- O
{
[01]={'+0+0','-2+0','+1+0','-2-1','+1+2'},
[10]={'+0+0','+2+0','-1+0','+2+1','-1-2'},
[01]={'+0+0','+1+0','-2+0','+1+2','-2-1'},
[10]={'+0+0','-1+0','+2+0','-1-2','+2+1'},
[03]={'+0+0','-1+0','+2+0','-1+2','+2-1'},
[30]={'+0+0','+1+0','-2+0','+1-2','-2+1'},
[12]={'+0+0','-1+0','+2+0','-1+2','+2-1'},
[21]={'+0+0','+1+0','-2+0','+1-2','-2+1'},
[23]={'+0+0','+2+0','-1+0','+2+1','-1-2'},
[32]={'+0+0','-2+0','+1+0','-2-1','+1+2'},
[30]={'+0+0','+1+0','-2+0','+1-2','-2+1'},
[03]={'+0+0','-1+0','+2+0','-1+2','+2-1'},
[32]={'+0+0','+1+0','-2+0','+1+2','-2-1'},
[23]={'+0+0','-1+0','+2+0','-1-2','+2+1'},
[02]={'+0+0','-1+0','+1+0','+0-1','+0+1'},
[20]={'+0+0','+1+0','-1+0','+0+1','+0-1'},
[13]={'+0+0','+0-1','-1+0','+1+0','+0+1'},
@@ -938,6 +938,40 @@ do
}
end
local N64
do
local R={'+0+0','+0-1','+1+0','-1+0','+0+1'}
local L={'+0+0','+0-1','-1+0','+1+0','+0+1'}
N64={
centerTex=GC.DO{10,10,
{'setLW',2},
{'line',2,9,2,1,8,9,8,1},
},
kickTable=TABLE.new({
[01]=R,[10]=L,[12]=R,[21]=L,
[23]=R,[32]=L,[30]=R,[03]=L,
},29)
}
end
local N64_plus
do
local R={'+0+0','+0-1','+1+0','-1+0','+0+1'}
local L={'+0+0','+0-1','-1+0','+1+0','+0+1'}
local F={'+0+0','+0-1','+0+1'}
N64_plus={
centerTex=GC.DO{10,10,
{'setLW',2},
{'line',4,9,2,9,2,1,8,9,8,1,6,1},
},
kickTable=TABLE.new({
[01]=R,[10]=L,[12]=R,[21]=L,
[23]=R,[32]=L,[30]=R,[03]=L,
[02]=F,[20]=F,[13]=F,[31]=F,
},29)
}
end
local Classic do
local centerPos=TABLE.copy(defaultCenterPos)
centerPos[1]={[0]={1,1},{1,0},{1,1},{1,0}}
@@ -978,7 +1012,7 @@ local None={
{'setLW',2},
{'line',2,2,6,6},
},
kickTable=TABLE.new(noKickSet_180,29)
kickTable=TABLE.new(noKickSet,29)
}
local None_plus={
@@ -987,7 +1021,7 @@ local None_plus={
{'line',1,1,7,7},
{'fRect',2,2,4,4},
},
kickTable=TABLE.new(noKickSet,29)
kickTable=TABLE.new(noKickSet_180,29)
}
local RSlist={
@@ -1002,6 +1036,8 @@ local RSlist={
ASC_plus=ASC_plus,
C2=C2,
C2_sym=C2_sym,
N64=N64,
N64_plus=N64_plus,
Classic=Classic,
Classic_plus=Classic_plus,
None=None,

View File

@@ -30,11 +30,11 @@ function back.draw()
for i=1,#sDist do
local d,r=sDist[i],sRev[i]
if d<5 then
setColor(hsv(.088,(d-2)/7,1,.7))
setColor(hsv(.088,(d-2)/7,1,.2))
else
setColor(hsv(.572,d/70+.1,(22-d)/12,.7))
setColor(hsv(.572,d/70+.1,(22-d)/12,.2))
end
circle('fill',8*d*cos(r),24*d*sin(r),3)
circle('fill',8*d*cos(r),24*d*sin(r),5)
end
end

View File

@@ -1,13 +1,13 @@
local gc=love.graphics
local hsv=COLOR.hsv
local circle,push,pop,rot,translate,setColor=gc.circle,gc.push,gc.pop,gc.rotate,gc.translate,gc.setColor
local rnd,sin,cos,log,ceil=math.random,math.sin,math.cos,math.log,math.ceil
local rnd,sin,cos,log=math.random,math.sin,math.cos,math.log
local back={}
local qX,qY,qdX,qdY={},{},{},{} -- quark data in SoA [size, X, Y, dx, dy, color]
local ptcclr={{1,0,0},{0,1,0},{0,0,1}}
local apcclr={{0,1,1},{1,0,1},{1,1,0}}
local ptcclr={{1,0,0,.5},{0,1,0,.5},{0,0,1,.5}}
local apcclr={{0,1,1,.5},{1,0,1,.5},{1,1,0,.5}}
local blasts={} -- data about annihilation blasts from particles and antiparticles colliding
local ptc={} -- particle-antiparticle data (antiparticle is a mirror of particle)
@@ -115,9 +115,9 @@ function back.draw()
translate(-10,-10)
-- Draw quarks in R/G/B
setColor(1,0,0,.8) for i=1, math.floor(quarkCount/3) do circle('fill',qX[i],qY[i],size) end
setColor(0,1,0,.8) for i=math.floor(quarkCount/3)+1, math.floor(quarkCount*2/3) do circle('fill',qX[i],qY[i],size) end
setColor(0,0,1,.8) for i=math.floor(quarkCount*2/3)+1,quarkCount do circle('fill',qX[i],qY[i],size) end
setColor(1,0,0,.5) for i=1, math.floor(quarkCount/3) do circle('fill',qX[i],qY[i],size) end
setColor(0,1,0,.5) for i=math.floor(quarkCount/3)+1, math.floor(quarkCount*2/3) do circle('fill',qX[i],qY[i],size) end
setColor(0,0,1,.5) for i=math.floor(quarkCount*2/3)+1,quarkCount do circle('fill',qX[i],qY[i],size) end
for i=1,#ptc do
local p=ptc[i]

View File

@@ -22,7 +22,7 @@ function bot_cc:checkDest(b2b,atk,exblock,yomi)
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')
-- print('wrong place')
self:lockWrongPlace()
self.P.destFX=nil
return
@@ -31,8 +31,8 @@ function bot_cc:checkDest(b2b,atk,exblock,yomi)
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')
-- 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

View File

@@ -1,7 +1,7 @@
return {
mesDisp=function(P)
setFont(45)
GC.mStr(("%.1f"):format(P.stat.atk),63,190)
GC.mStr(("%d"):format(P.stat.atk),63,190)
GC.mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310)
mText(TEXTOBJ.atk,63,243)
mText(TEXTOBJ.eff,63,363)

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