Compare commits
155 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a2e5656747 | ||
|
|
65fc0339b9 | ||
|
|
0421654c50 | ||
|
|
bdaa42f6df | ||
|
|
9984c3ecb5 | ||
|
|
5e7c2309ac | ||
|
|
9dda8555a0 | ||
|
|
43046a3cf3 | ||
|
|
fe29cc532d | ||
|
|
7dd73ef8d3 | ||
|
|
ad6bd7be4b | ||
|
|
c276b700fa | ||
|
|
98f73aa4c0 | ||
|
|
1db854618e | ||
|
|
940a1bc3f8 | ||
|
|
7463dd96dc | ||
|
|
48e96998a9 | ||
|
|
95a1b03cc5 | ||
|
|
ee4dfa7f51 | ||
|
|
06f403e9d7 | ||
|
|
c03f3f727c | ||
|
|
ed4ba1dc38 | ||
|
|
9663f8c316 | ||
|
|
2478df1242 | ||
|
|
1b54dd3b90 | ||
|
|
001014c70e | ||
|
|
1a444a9e98 | ||
|
|
d5397333d5 | ||
|
|
e1001c74c5 | ||
|
|
5f664c04d6 | ||
|
|
525fa4c25e | ||
|
|
f513760153 | ||
|
|
5faa929bb0 | ||
|
|
5c4557a7b7 | ||
|
|
69a84c035e | ||
|
|
f8277e1c8a | ||
|
|
48f3d293bd | ||
|
|
00bf828ef4 | ||
|
|
d1cef7ed84 | ||
|
|
17bb8dbe6d | ||
|
|
6166c03eab | ||
|
|
303f32f5b2 | ||
|
|
f7e4d7b30d | ||
|
|
f2957dff7b | ||
|
|
cadbe38a8f | ||
|
|
e55d117371 | ||
|
|
1f3d8a212b | ||
|
|
035f30d7e1 | ||
|
|
3202aa18b1 | ||
|
|
0c5d2bdf1a | ||
|
|
db25475c21 | ||
|
|
11b1c23be0 | ||
|
|
5b1eef890d | ||
|
|
3a3d062e5c | ||
|
|
2ee9ed237f | ||
|
|
9159661945 | ||
|
|
0efd2c8044 | ||
|
|
0aaa5822fb | ||
|
|
2b258aeaed | ||
|
|
0d7a80f2b5 | ||
|
|
d433d98c04 | ||
|
|
180dc12460 | ||
|
|
dd1d0b4126 | ||
|
|
f1517fad1a | ||
|
|
62ed279f07 | ||
|
|
6925d59f87 | ||
|
|
848cc41c72 | ||
|
|
f212076604 | ||
|
|
ee4fd51e0f | ||
|
|
f96b4f6724 | ||
|
|
7b6f2f826a | ||
|
|
8ed4fd6cba | ||
|
|
b914cb26be | ||
|
|
97472e9a17 | ||
|
|
dece8c0daa | ||
|
|
5796d1af32 | ||
|
|
06d7a1df6b | ||
|
|
ed293ddad8 | ||
|
|
d7a92344e5 | ||
|
|
3fa020fe91 | ||
|
|
ce19af7da0 | ||
|
|
e558a9fc9d | ||
|
|
fb5544ce0f | ||
|
|
051f0d484c | ||
|
|
108cbea686 | ||
|
|
8b61bd7d8a | ||
|
|
1699a2b68a | ||
|
|
2fca95e81b | ||
|
|
969aa87a10 | ||
|
|
b3dfa7d7ce | ||
|
|
483de50169 | ||
|
|
96762ffa5c | ||
|
|
88d05c2354 | ||
|
|
8aac152ee6 | ||
|
|
d83779662a | ||
|
|
c19e656d46 | ||
|
|
4631a2f440 | ||
|
|
338f5811a1 | ||
|
|
bc634b2eeb | ||
|
|
23cbb9e261 | ||
|
|
fbfbf3c32b | ||
|
|
3073a2e90d | ||
|
|
29e4dc93ab | ||
|
|
2b16a20032 | ||
|
|
59b412899d | ||
|
|
e656ab5e1d | ||
|
|
b90c06da72 | ||
|
|
f62f3652e2 | ||
|
|
dbbec9d2bd | ||
|
|
1be8189058 | ||
|
|
b8b3160ccd | ||
|
|
54fd3995e6 | ||
|
|
e506190c7f | ||
|
|
8f418a0da9 | ||
|
|
0403ee91ea | ||
|
|
47d1856143 | ||
|
|
e521f0fea0 | ||
|
|
eb1e7fd15a | ||
|
|
c9e0a58232 | ||
|
|
9acd8b54e3 | ||
|
|
acd66b1634 | ||
|
|
3820855812 | ||
|
|
056abe7b68 | ||
|
|
bf05b1bda2 | ||
|
|
77a3c146c0 | ||
|
|
5761f7f543 | ||
|
|
5ed5b543ce | ||
|
|
98ae0f2762 | ||
|
|
963bc80439 | ||
|
|
4106dc454e | ||
|
|
0ba26aa836 | ||
|
|
a4c775174b | ||
|
|
29c40c34fe | ||
|
|
44cb889b91 | ||
|
|
915d65d2f4 | ||
|
|
8b7c270cf6 | ||
|
|
a3f07f8ce4 | ||
|
|
91d3252685 | ||
|
|
f9d9112651 | ||
|
|
477a1acc61 | ||
|
|
4770366f74 | ||
|
|
1c66b4dce1 | ||
|
|
3a19bb534a | ||
|
|
f39b3cfd4a | ||
|
|
f0410243c4 | ||
|
|
8abc40707a | ||
|
|
f91fe34a12 | ||
|
|
e9bf6c3b58 | ||
|
|
17c660b5a2 | ||
|
|
ed46f73987 | ||
|
|
e1200b5038 | ||
|
|
7f7ea6ac97 | ||
|
|
f70edaac83 | ||
|
|
d932febe89 | ||
|
|
945a63c51d |
2
.github/actions/get-cc/action.yml
vendored
2
.github/actions/get-cc/action.yml
vendored
@@ -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:
|
||||
|
||||
10
.github/build/linux/dev/template.desktop
vendored
10
.github/build/linux/dev/template.desktop
vendored
@@ -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
|
||||
1
.github/build/linux/release/.gitattributes
vendored
1
.github/build/linux/release/.gitattributes
vendored
@@ -1 +0,0 @@
|
||||
*.template text eol=lf
|
||||
10
.github/build/linux/release/template.desktop
vendored
10
.github/build/linux/release/template.desktop
vendored
@@ -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
|
||||
7
.github/build/windows/dev/template.rc
vendored
7
.github/build/windows/dev/template.rc
vendored
@@ -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"
|
||||
}
|
||||
|
||||
7
.github/build/windows/release/template.rc
vendored
7
.github/build/windows/release/template.rc
vendored
@@ -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"
|
||||
}
|
||||
|
||||
200
.github/workflows/main.yml
vendored
200
.github/workflows/main.yml
vendored
@@ -70,8 +70,6 @@ jobs:
|
||||
env:
|
||||
OUTPUT_FOLDER: ./build
|
||||
RELEASE_FOLDER: ./release
|
||||
outputs:
|
||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
@@ -99,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 }}
|
||||
@@ -123,12 +126,6 @@ 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
|
||||
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
|
||||
|
||||
auto-test:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -146,11 +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
|
||||
RELEASE_FOLDER: ./release
|
||||
outputs:
|
||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
@@ -162,12 +158,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 +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: 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 +186,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,22 +212,14 @@ 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
|
||||
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
|
||||
|
||||
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
|
||||
outputs:
|
||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
@@ -267,7 +248,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 +293,6 @@ 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
|
||||
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
|
||||
|
||||
build-linux:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -325,8 +300,6 @@ jobs:
|
||||
env:
|
||||
OUTPUT_FOLDER: ./build
|
||||
RELEASE_FOLDER: ./release
|
||||
outputs:
|
||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
@@ -337,12 +310,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 +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: 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,37 +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 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: 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
|
||||
|
||||
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
|
||||
outputs:
|
||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
@@ -436,7 +416,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,22 +460,14 @@ 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
|
||||
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
|
||||
|
||||
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
|
||||
outputs:
|
||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
@@ -528,7 +500,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 +550,12 @@ 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
|
||||
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
|
||||
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
@@ -595,8 +563,6 @@ jobs:
|
||||
env:
|
||||
OUTPUT_FOLDER: ./build
|
||||
RELEASE_FOLDER: ./release
|
||||
outputs:
|
||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
@@ -618,6 +584,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 +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
|
||||
@@ -640,6 +621,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,29 +633,19 @@ 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') }}
|
||||
- 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
|
||||
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
|
||||
|
||||
post-build:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -694,34 +670,9 @@ jobs:
|
||||
uses: geekyeggo/delete-artifact@v2
|
||||
with:
|
||||
name: ${{ env.CORE_LOVE_ARTIFACT_NAME }}
|
||||
- name: Display summary
|
||||
shell: bash
|
||||
run: |
|
||||
echo "# Summary" >> $GITHUB_STEP_SUMMARY
|
||||
echo "## Version: ${{ needs.get-info.outputs.version-string }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "## Package Name: ${{ needs.get-info.outputs.base-name }}" >> $GITHUB_STEP_SUMMARY
|
||||
echo "## Download links: " >> $GITHUB_STEP_SUMMARY
|
||||
- name: Display download links
|
||||
shell: python3 {0}
|
||||
run: |
|
||||
import os
|
||||
with open(os.getenv('GITHUB_STEP_SUMMARY'), 'a') as f:
|
||||
if "${{ needs.build-core.result }}" == "success":
|
||||
f.write("- Bare love packages: [WeTransfer](${{ needs.build-core.outputs.download-url }})\n")
|
||||
if "${{ needs.build-android.result }}" == "success":
|
||||
f.write("- Android packages: [WeTransfer](${{ needs.build-android.outputs.download-url }})\n")
|
||||
if "${{ needs.build-ios.result }}" == "success":
|
||||
f.write("- iOS packages: [WeTransfer](${{ needs.build-ios.outputs.download-url }})\n")
|
||||
if "${{ needs.build-linux.result }}" == "success":
|
||||
f.write("- Linux packages: [WeTransfer](${{ needs.build-linux.outputs.download-url }})\n")
|
||||
if "${{ needs.build-macos-appstore.result }}" == "success":
|
||||
f.write("- macOS packages(App Store version): [WeTransfer](${{ needs.build-macos-appstore.outputs.download-url }})\n")
|
||||
if "${{ needs.build-macos-portable.result }}" == "success":
|
||||
f.write("- macOS packages(Portable version): [WeTransfer](${{ needs.build-macos-portable.outputs.download-url }})\n")
|
||||
if "${{ needs.build-windows.result }}" == "success":
|
||||
f.write("- Windows packages: [WeTransfer](${{ needs.build-windows.outputs.download-url }})\n")
|
||||
- name: Send Discord message
|
||||
uses: Sniddl/discord-commits@v1.5
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: Sniddl/discord-commits@v1.6
|
||||
with:
|
||||
webhook: ${{ secrets.DISCORD_WEBHOOK }}
|
||||
message: "Github Actions for **${{ github.repository }}**."
|
||||
@@ -740,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 }}"}
|
||||
]
|
||||
}'
|
||||
|
||||
Submodule Zframework updated: 8e39257d64...7f7b0eb857
64
conf.lua
64
conf.lua
@@ -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
|
||||
|
||||
374
main.lua
374
main.lua
@@ -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','flore','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',
|
||||
@@ -298,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',
|
||||
@@ -361,7 +335,7 @@ SKIN.load{
|
||||
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 FILE.isSafe('media/effect/chiptune/'..v,"Dangerous file : %SAVE%/media/effect/chiptune/"..v) then
|
||||
if FILE.isSafe('media/effect/chiptune/'..v) then
|
||||
table.insert(L,v:sub(1,-5))
|
||||
end
|
||||
end
|
||||
@@ -370,7 +344,7 @@ end)())
|
||||
BGM.init((function()
|
||||
local L={}
|
||||
for _,v in next,fs.getDirectoryItems('media/music') do
|
||||
if FILE.isSafe('media/music/'..v,"Dangerous file : %SAVE%/media/music/"..v) then
|
||||
if FILE.isSafe('media/music/'..v) then
|
||||
L[v:sub(1,-5)]='media/music/'..v
|
||||
end
|
||||
end
|
||||
@@ -378,7 +352,7 @@ BGM.init((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',
|
||||
@@ -386,161 +360,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 +444,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 +461,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 +604,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 +647,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)
|
||||
|
||||
BIN
media/image/characters/flore.png
Normal file
BIN
media/image/characters/flore.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 91 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 117 KiB |
BIN
media/image/characters/zundamon.png
Normal file
BIN
media/image/characters/zundamon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 99 KiB |
Binary file not shown.
BIN
media/vocal/flore/b2b_1.ogg
Normal file
BIN
media/vocal/flore/b2b_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/b2b_2.ogg
Normal file
BIN
media/vocal/flore/b2b_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/b2b_3.ogg
Normal file
BIN
media/vocal/flore/b2b_3.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/b3b_1.ogg
Normal file
BIN
media/vocal/flore/b3b_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/b3b_2.ogg
Normal file
BIN
media/vocal/flore/b3b_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/b3b_3.ogg
Normal file
BIN
media/vocal/flore/b3b_3.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/bye_1.ogg
Normal file
BIN
media/vocal/flore/bye_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/bye_2.ogg
Normal file
BIN
media/vocal/flore/bye_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/bye_3.ogg
Normal file
BIN
media/vocal/flore/bye_3.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/bye_4.ogg
Normal file
BIN
media/vocal/flore/bye_4.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/bye_5.ogg
Normal file
BIN
media/vocal/flore/bye_5.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/bye_6.ogg
Normal file
BIN
media/vocal/flore/bye_6.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/cspin.ogg
Normal file
BIN
media/vocal/flore/cspin.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/decacrash_1.ogg
Normal file
BIN
media/vocal/flore/decacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/decacrash_2.ogg
Normal file
BIN
media/vocal/flore/decacrash_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/dodecacrash_1.ogg
Normal file
BIN
media/vocal/flore/dodecacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/double_1.ogg
Normal file
BIN
media/vocal/flore/double_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/double_2.ogg
Normal file
BIN
media/vocal/flore/double_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/double_3.ogg
Normal file
BIN
media/vocal/flore/double_3.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/doubt_1.ogg
Normal file
BIN
media/vocal/flore/doubt_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/doubt_2.ogg
Normal file
BIN
media/vocal/flore/doubt_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/doubt_3.ogg
Normal file
BIN
media/vocal/flore/doubt_3.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/espin.ogg
Normal file
BIN
media/vocal/flore/espin.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/fspin.ogg
Normal file
BIN
media/vocal/flore/fspin.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/half_clear_1.ogg
Normal file
BIN
media/vocal/flore/half_clear_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/half_clear_2.ogg
Normal file
BIN
media/vocal/flore/half_clear_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/happy_1.ogg
Normal file
BIN
media/vocal/flore/happy_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/happy_2.ogg
Normal file
BIN
media/vocal/flore/happy_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/happy_3.ogg
Normal file
BIN
media/vocal/flore/happy_3.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/heptacrash_1.ogg
Normal file
BIN
media/vocal/flore/heptacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/heptacrash_2.ogg
Normal file
BIN
media/vocal/flore/heptacrash_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/heptadecacrash_1.ogg
Normal file
BIN
media/vocal/flore/heptadecacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/hexacrash_1.ogg
Normal file
BIN
media/vocal/flore/hexacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/hexacrash_2.ogg
Normal file
BIN
media/vocal/flore/hexacrash_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/hexacrash_3.ogg
Normal file
BIN
media/vocal/flore/hexacrash_3.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/hexadecacrash_1.ogg
Normal file
BIN
media/vocal/flore/hexadecacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/hspin.ogg
Normal file
BIN
media/vocal/flore/hspin.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/impossicrash_1.ogg
Normal file
BIN
media/vocal/flore/impossicrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/ispin_1.ogg
Normal file
BIN
media/vocal/flore/ispin_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/ispin_2.ogg
Normal file
BIN
media/vocal/flore/ispin_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/jspin_1.ogg
Normal file
BIN
media/vocal/flore/jspin_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/jspin_2.ogg
Normal file
BIN
media/vocal/flore/jspin_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/lose_1.ogg
Normal file
BIN
media/vocal/flore/lose_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/lose_2.ogg
Normal file
BIN
media/vocal/flore/lose_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/lose_3.ogg
Normal file
BIN
media/vocal/flore/lose_3.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/lose_4.ogg
Normal file
BIN
media/vocal/flore/lose_4.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/lose_5.ogg
Normal file
BIN
media/vocal/flore/lose_5.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/lose_6.ogg
Normal file
BIN
media/vocal/flore/lose_6.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/lspin_1.ogg
Normal file
BIN
media/vocal/flore/lspin_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/lspin_2.ogg
Normal file
BIN
media/vocal/flore/lspin_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/mini_1.ogg
Normal file
BIN
media/vocal/flore/mini_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/mini_2.ogg
Normal file
BIN
media/vocal/flore/mini_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/mini_3.ogg
Normal file
BIN
media/vocal/flore/mini_3.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/nonacrash_1.ogg
Normal file
BIN
media/vocal/flore/nonacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/nonacrash_2.ogg
Normal file
BIN
media/vocal/flore/nonacrash_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/nonadecacrash_1.ogg
Normal file
BIN
media/vocal/flore/nonadecacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/nspin.ogg
Normal file
BIN
media/vocal/flore/nspin.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/octacrash_1.ogg
Normal file
BIN
media/vocal/flore/octacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/octacrash_2.ogg
Normal file
BIN
media/vocal/flore/octacrash_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/octadecacrash_1.ogg
Normal file
BIN
media/vocal/flore/octadecacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/ospin.ogg
Normal file
BIN
media/vocal/flore/ospin.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/ospin_1.ogg
Normal file
BIN
media/vocal/flore/ospin_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/pentacrash_1.ogg
Normal file
BIN
media/vocal/flore/pentacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/pentacrash_2.ogg
Normal file
BIN
media/vocal/flore/pentacrash_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/pentacrash_3.ogg
Normal file
BIN
media/vocal/flore/pentacrash_3.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/pentadecacrash_1.ogg
Normal file
BIN
media/vocal/flore/pentadecacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/perfect_clear_1.ogg
Normal file
BIN
media/vocal/flore/perfect_clear_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/perfect_clear_2.ogg
Normal file
BIN
media/vocal/flore/perfect_clear_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/pspin.ogg
Normal file
BIN
media/vocal/flore/pspin.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/qspin.ogg
Normal file
BIN
media/vocal/flore/qspin.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/rspin.ogg
Normal file
BIN
media/vocal/flore/rspin.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/single_1.ogg
Normal file
BIN
media/vocal/flore/single_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/single_2.ogg
Normal file
BIN
media/vocal/flore/single_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/single_3.ogg
Normal file
BIN
media/vocal/flore/single_3.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/sspin_1.ogg
Normal file
BIN
media/vocal/flore/sspin_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/sspin_2.ogg
Normal file
BIN
media/vocal/flore/sspin_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/techrash_1.ogg
Normal file
BIN
media/vocal/flore/techrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/techrash_2.ogg
Normal file
BIN
media/vocal/flore/techrash_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/techrash_3.ogg
Normal file
BIN
media/vocal/flore/techrash_3.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/test_1.ogg
Normal file
BIN
media/vocal/flore/test_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/test_2.ogg
Normal file
BIN
media/vocal/flore/test_2.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/test_3.ogg
Normal file
BIN
media/vocal/flore/test_3.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/test_4.ogg
Normal file
BIN
media/vocal/flore/test_4.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/tetradecacrash_1.ogg
Normal file
BIN
media/vocal/flore/tetradecacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/tridecacrash_1.ogg
Normal file
BIN
media/vocal/flore/tridecacrash_1.ogg
Normal file
Binary file not shown.
BIN
media/vocal/flore/triple_1.ogg
Normal file
BIN
media/vocal/flore/triple_1.ogg
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user