Compare commits
71 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dece8c0daa | ||
|
|
5796d1af32 | ||
|
|
06d7a1df6b | ||
|
|
ed293ddad8 | ||
|
|
d7a92344e5 | ||
|
|
3fa020fe91 | ||
|
|
ce19af7da0 | ||
|
|
e558a9fc9d | ||
|
|
fb5544ce0f | ||
|
|
051f0d484c | ||
|
|
108cbea686 | ||
|
|
2fca95e81b | ||
|
|
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 |
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"
|
||||
}
|
||||
|
||||
189
.github/workflows/main.yml
vendored
189
.github/workflows/main.yml
vendored
@@ -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,14 +190,7 @@ 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
|
||||
@@ -197,7 +204,6 @@ 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/
|
||||
product-name: ${{ steps.process-app-name.outputs.product-name }}
|
||||
version-string: ${{ needs.get-info.outputs.version-string }}
|
||||
@@ -223,17 +229,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 +281,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 +326,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 +359,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 +382,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 +402,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 +481,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 +525,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 +581,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 +631,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
|
||||
@@ -652,7 +715,9 @@ jobs:
|
||||
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
|
||||
body: ${{ needs.get-info.outputs.update-note }}
|
||||
name: ${{ needs.get-info.outputs.update-title }}
|
||||
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
||||
@@ -661,15 +726,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 +791,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 }}
|
||||
|
||||
Submodule Zframework updated: 8e39257d64...c64bfe444b
69
conf.lua
69
conf.lua
@@ -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
|
||||
|
||||
409
main.lua
409
main.lua
@@ -22,9 +22,6 @@
|
||||
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'}
|
||||
@@ -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,6 @@ 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',
|
||||
z={
|
||||
character='media/image/characters/z_character.png',
|
||||
screen1='media/image/characters/z_screen1.png',
|
||||
@@ -386,6 +358,137 @@ VOC.init{
|
||||
'welcome',
|
||||
}
|
||||
|
||||
table.insert(_LOADTIMELIST_,("Initialize Modules: %.3fs"):format(TIME()-_LOADTIME_))
|
||||
|
||||
-- Load settings and statistics
|
||||
if
|
||||
not (
|
||||
pcall(TABLE.cover, loadFile('conf/user', '-json -canSkip') or loadFile('conf/user', '-luaon -canSkip') or{},USER) and
|
||||
pcall(TABLE.cover, loadFile('conf/unlock', '-json -canSkip') or loadFile('conf/unlock', '-luaon -canSkip') or{},RANKS) and
|
||||
pcall(TABLE.update,loadFile('conf/settings', '-json -canSkip') or loadFile('conf/settings', '-luaon -canSkip') or{},SETTING) and
|
||||
pcall(TABLE.coverR,loadFile('conf/data', '-json -canSkip') or loadFile('conf/data', '-luaon -canSkip') or{},STAT) and
|
||||
pcall(TABLE.cover, loadFile('conf/key', '-json -canSkip') or loadFile('conf/key', '-luaon -canSkip') or{},KEY_MAP) and
|
||||
pcall(TABLE.cover, loadFile('conf/virtualkey','-json -canSkip') or loadFile('conf/virtualkey','-luaon -canSkip') or{},VK_ORG)
|
||||
)
|
||||
then
|
||||
MES.new('error',"An error occured during loading, and some data was lost.")
|
||||
end
|
||||
|
||||
-- Initialize fields, sequence, missions, gameEnv for cutsom game
|
||||
local fieldData=loadFile('conf/customBoards','-string -canSkip')
|
||||
if fieldData then
|
||||
fieldData=STRING.split(fieldData,"!")
|
||||
for i=1,#fieldData do
|
||||
DATA.pasteBoard(fieldData[i],i)
|
||||
end
|
||||
else
|
||||
FIELD[1]=DATA.newBoard()
|
||||
end
|
||||
local sequenceData=loadFile('conf/customSequence','-string -canSkip')
|
||||
if sequenceData then
|
||||
DATA.pasteSequence(sequenceData)
|
||||
end
|
||||
local missionData=loadFile('conf/customMissions','-string -canSkip')
|
||||
if missionData then
|
||||
DATA.pasteMission(missionData)
|
||||
end
|
||||
local customData=loadFile('conf/customEnv','-canSkip')
|
||||
if customData and customData['version']==VERSION.code then
|
||||
TABLE.complete(customData,CUSTOMENV)
|
||||
end
|
||||
TABLE.complete(require"parts.customEnv0",CUSTOMENV)
|
||||
|
||||
-- Update data
|
||||
do
|
||||
if type(STAT.version)~='number' then
|
||||
STAT.version=0
|
||||
end
|
||||
if STAT.version<1700 and SETTING.dascut<5 then
|
||||
SETTING.dascut=SETTING.dascut+1
|
||||
end
|
||||
|
||||
if RANKS.stack_e then
|
||||
RANKS.stack_e=nil; fs.remove('record/stack_e.rec')
|
||||
RANKS.stack_h=nil; fs.remove('record/stack_h.rec')
|
||||
RANKS.stack_u=nil; fs.remove('record/stack_u.rec')
|
||||
end
|
||||
if RANKS.stack_20l then
|
||||
RANKS.stack_20l=nil; fs.remove('record/stack_20l.rec')
|
||||
RANKS.stack_40l=nil; fs.remove('record/stack_40l.rec')
|
||||
RANKS.stack_100l=nil; fs.remove('record/stack_100l.rec')
|
||||
end
|
||||
if RANKS.rhythm_e then
|
||||
RANKS.rhythm_e=nil; fs.remove('record/rhythm_e.rec')
|
||||
RANKS.rhythm_h=nil; fs.remove('record/rhythm_h.rec')
|
||||
RANKS.rhythm_u=nil; fs.remove('record/rhythm_u.rec')
|
||||
end
|
||||
if RANKS.bigbang then fs.remove('record/bigbang.rec') end
|
||||
if RANKS.clearRush then fs.remove('record/clearRush.rec') end
|
||||
|
||||
if STAT.version~=VERSION.code then
|
||||
for k,v in next,MODE_UPDATE_MAP do
|
||||
if RANKS[k] then
|
||||
RANKS[v]=RANKS[k]
|
||||
RANKS[k]=nil
|
||||
end
|
||||
k='record/'..k
|
||||
if fs.getInfo(k..'.dat') then
|
||||
fs.write('record/'..v..'.rec',fs.read(k..'.dat'))
|
||||
fs.remove(k..'.dat')
|
||||
end
|
||||
if fs.getInfo(k..'.rec') then
|
||||
fs.write('record/'..v..'.rec',fs.read(k..'.rec'))
|
||||
fs.remove(k..'.rec')
|
||||
end
|
||||
end
|
||||
STAT.version=VERSION.code
|
||||
end
|
||||
SETTING.appLock,SETTING.dataSaving,SETTING.swap,SETTING.autoLogin=nil
|
||||
if not SETTING.VKSkin then SETTING.VKSkin=1 end
|
||||
for _,v in next,SETTING.skin do if v<1 or v>17 then v=17 end end
|
||||
if not RSlist[SETTING.RS] then SETTING.RS='TRS' end
|
||||
if SETTING.ghostType=='greyCell' then SETTING.ghostType='grayCell' end
|
||||
if type(SETTING.skinSet)=='number' then SETTING.skinSet='crystal_scf' end
|
||||
if not TABLE.find({8,10,13,17,22,29,37,47,62,80,100},SETTING.frameMul) then SETTING.frameMul=100 end
|
||||
if SETTING.cv then SETTING.vocPack,SETTING.cv=SETTING.cv end
|
||||
if type(SETTING.bg)~='string' then SETTING.bg='on' end
|
||||
if SETTING.skin[18]==10 then SETTING.skin[18]=4 end
|
||||
if SETTING.reTime>3 or SETTING.reTime<.5 then SETTING.reTime=2 end
|
||||
if SETTING.locale=='zh_full' then SETTING.locale='zh' end
|
||||
if SETTING.vocPack=='rin' then SETTING.vocPack='miku' end
|
||||
if RANKS.infinite then RANKS.infinite=0 end
|
||||
if RANKS.infinite_dig then RANKS.infinite_dig=0 end
|
||||
if not RANKS.sprint_10l then RANKS.sprint_10l=0 end
|
||||
if RANKS.master_l then RANKS.master_n,RANKS.master_l=RANKS.master_l end
|
||||
if RANKS.master_u then RANKS.master_h,RANKS.master_u=RANKS.master_u end
|
||||
for _,v in next,VK_ORG do v.color=nil end
|
||||
for name,rank in next,RANKS do
|
||||
if type(name)=='number' or type(rank)~='number' then
|
||||
RANKS[name]=nil
|
||||
else
|
||||
local M=MODES[name]
|
||||
if M and M.unlock and rank>0 then
|
||||
for _,unlockName in next,M.unlock do
|
||||
if not RANKS[unlockName] then
|
||||
RANKS[unlockName]=0
|
||||
end
|
||||
end
|
||||
end
|
||||
if not (M and M.x) then
|
||||
RANKS[name]=nil
|
||||
end
|
||||
end
|
||||
end
|
||||
if not MODES[STAT.lastPlay] then
|
||||
STAT.lastPlay='sprint_10l'
|
||||
end
|
||||
fs.remove('conf/account')
|
||||
|
||||
saveStats()
|
||||
saveProgress()
|
||||
saveSettings()
|
||||
end
|
||||
|
||||
-- Initialize language lib
|
||||
LANG.init('zh',
|
||||
{
|
||||
@@ -414,15 +517,13 @@ LANG.init('zh',
|
||||
local mes="No Text ("..SETTING.locale.."): "..k
|
||||
LOG(mes)
|
||||
MES.new('warn',mes)
|
||||
self[k]=CHAR.zChan.thinking
|
||||
self[k]="["..k.."]"
|
||||
return self[k]
|
||||
end})
|
||||
end
|
||||
end)()
|
||||
)
|
||||
|
||||
table.insert(_LOADTIMELIST_,("Initialize Parts: %.3fs"):format(TIME()-_LOADTIME_))
|
||||
|
||||
-- Load background files from SOURCE ONLY
|
||||
for _,v in next,fs.getDirectoryItems('parts/backgrounds') do
|
||||
if FILE.isSafe('parts/backgrounds/'..v) and v:sub(-3)=='lua' then
|
||||
@@ -431,6 +532,7 @@ for _,v in next,fs.getDirectoryItems('parts/backgrounds') do
|
||||
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
|
||||
@@ -439,179 +541,9 @@ for _,v in next,fs.getDirectoryItems('parts/scenes') do
|
||||
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
|
||||
end
|
||||
|
||||
table.insert(_LOADTIMELIST_,("Load Files: %.3fs"):format(TIME()-_LOADTIME_))
|
||||
|
||||
-- Update data
|
||||
do
|
||||
local needSave
|
||||
|
||||
if not fs.getInfo('conf/data') then
|
||||
needSave=true
|
||||
end
|
||||
if type(STAT.version)~='number' then
|
||||
STAT.version=0
|
||||
needSave=true
|
||||
end
|
||||
if STAT.version<1500 then
|
||||
FILE.clear_s('')
|
||||
end
|
||||
if STAT.version<1505 then
|
||||
fs.remove('record/bigbang.rec')
|
||||
fs.remove('conf/replay')
|
||||
end
|
||||
if STAT.version==1506 then
|
||||
local temp1,temp2
|
||||
if fs.getInfo('record/master_l.rec') then
|
||||
temp1=fs.read('record/master_l.rec')
|
||||
end
|
||||
if fs.getInfo('record/master_u.rec') then
|
||||
temp2=fs.read('record/master_u.rec')
|
||||
end
|
||||
if temp1 then
|
||||
fs.write('record/master_u.rec',temp1)
|
||||
end
|
||||
if temp2 then
|
||||
fs.write('record/master_l.rec',temp2)
|
||||
end
|
||||
RANKS.master_l,RANKS.master_u=RANKS.master_u,RANKS.master_l
|
||||
if RANKS.tsd_u then
|
||||
RANKS.tsd_u=0
|
||||
end
|
||||
end
|
||||
if STAT.version==1601 then
|
||||
RANKS.round_e=nil
|
||||
RANKS.round_n=nil
|
||||
RANKS.round_h=nil
|
||||
RANKS.round_l=nil
|
||||
RANKS.round_u=nil
|
||||
fs.remove('record/round_e.rec')
|
||||
fs.remove('record/round_n.rec')
|
||||
fs.remove('record/round_h.rec')
|
||||
fs.remove('record/round_l.rec')
|
||||
fs.remove('record/round_u.rec')
|
||||
end
|
||||
if STAT.version<1700 and SETTING.dascut<5 then
|
||||
SETTING.dascut=SETTING.dascut+1
|
||||
needSave=true
|
||||
end
|
||||
if RANKS.stack_e then
|
||||
RANKS.stack_e=nil
|
||||
RANKS.stack_h=nil
|
||||
RANKS.stack_u=nil
|
||||
fs.remove('record/stack_e.rec')
|
||||
fs.remove('record/stack_h.rec')
|
||||
fs.remove('record/stack_u.rec')
|
||||
end
|
||||
if RANKS.stack_20l then
|
||||
RANKS.stack_20l=nil
|
||||
RANKS.stack_40l=nil
|
||||
RANKS.stack_100l=nil
|
||||
fs.remove('record/stack_20l.rec')
|
||||
fs.remove('record/stack_40l.rec')
|
||||
fs.remove('record/stack_100l.rec')
|
||||
end
|
||||
if RANKS.rhythm_e then
|
||||
RANKS.rhythm_e=nil
|
||||
RANKS.rhythm_h=nil
|
||||
RANKS.rhythm_u=nil
|
||||
fs.remove('record/rhythm_e.rec')
|
||||
fs.remove('record/rhythm_h.rec')
|
||||
fs.remove('record/rhythm_u.rec')
|
||||
end
|
||||
if RANKS.bigbang or RANKS.clearRush then
|
||||
fs.remove('record/clearRush.rec')
|
||||
fs.remove('record/bigbang.rec')
|
||||
end
|
||||
if STAT.version~=VERSION.code then
|
||||
for k,v in next,MODE_UPDATE_MAP do
|
||||
if RANKS[k] then
|
||||
RANKS[v]=RANKS[k]
|
||||
RANKS[k]=nil
|
||||
end
|
||||
k='record/'..k
|
||||
if fs.getInfo(k..'.dat') then
|
||||
fs.write('record/'..v..'.rec',fs.read(k..'.dat'))
|
||||
fs.remove(k..'.dat')
|
||||
end
|
||||
if fs.getInfo(k..'.rec') then
|
||||
fs.write('record/'..v..'.rec',fs.read(k..'.rec'))
|
||||
fs.remove(k..'.rec')
|
||||
end
|
||||
end
|
||||
STAT.version=VERSION.code
|
||||
needSave=true
|
||||
end
|
||||
SETTING.appLock,SETTING.dataSaving,SETTING.swap,SETTING.autoLogin=nil
|
||||
if not SETTING.VKSkin then SETTING.VKSkin=1 end
|
||||
for _,v in next,SETTING.skin do if v<1 or v>17 then v=17 end end
|
||||
if not RSlist[SETTING.RS] then SETTING.RS='TRS' end
|
||||
if SETTING.ghostType=='greyCell' then SETTING.ghostType='grayCell' end
|
||||
if type(SETTING.skinSet)=='number' then SETTING.skinSet='crystal_scf' end
|
||||
if not TABLE.find({8,10,13,17,22,29,37,47,62,80,100},SETTING.frameMul) then SETTING.frameMul=100 end
|
||||
if SETTING.cv then SETTING.vocPack,SETTING.cv=SETTING.cv end
|
||||
if type(SETTING.bg)~='string' then SETTING.bg='on' end
|
||||
if SETTING.skin[18]==10 then SETTING.skin[18]=4 end
|
||||
if SETTING.reTime>3 or SETTING.reTime<.5 then SETTING.reTime=2 end
|
||||
if SETTING.locale=='zh_full' then SETTING.locale='zh' end
|
||||
if SETTING.vocPack=='rin' then SETTING.vocPack='miku' end
|
||||
if RANKS.infinite then RANKS.infinite=0 end
|
||||
if RANKS.infinite_dig then RANKS.infinite_dig=0 end
|
||||
if not RANKS.sprint_10l then RANKS.sprint_10l=0 end
|
||||
if RANKS.master_l then RANKS.master_n,RANKS.master_l=RANKS.master_l needSave=true end
|
||||
if RANKS.master_u then RANKS.master_h,RANKS.master_u=RANKS.master_u needSave=true end
|
||||
for _,v in next,VK_ORG do v.color=nil end
|
||||
for name,rank in next,RANKS do
|
||||
if type(name)=='number' or type(rank)~='number' then
|
||||
RANKS[name]=nil
|
||||
needSave=true
|
||||
else
|
||||
local M=MODES[name]
|
||||
if M and M.unlock and rank>0 then
|
||||
for _,unlockName in next,M.unlock do
|
||||
if not RANKS[unlockName] then
|
||||
RANKS[unlockName]=0
|
||||
needSave=true
|
||||
end
|
||||
end
|
||||
end
|
||||
if not (M and M.x) then
|
||||
RANKS[name]=nil
|
||||
needSave=true
|
||||
end
|
||||
end
|
||||
end
|
||||
if not MODES[STAT.lastPlay] then
|
||||
STAT.lastPlay='sprint_10l'
|
||||
needSave=true
|
||||
end
|
||||
|
||||
if needSave then
|
||||
saveStats()
|
||||
saveProgress()
|
||||
saveSettings()
|
||||
love.event.quit('restart')
|
||||
end
|
||||
end
|
||||
|
||||
-- First start
|
||||
FIRSTLAUNCH=STAT.run==0
|
||||
if FIRSTLAUNCH and MOBILE then
|
||||
@@ -669,7 +601,11 @@ 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_))
|
||||
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 +642,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.
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -23,6 +23,7 @@ return {
|
||||
LINE.discard(table.remove(P.field,1))
|
||||
LINE.discard(table.remove(P.visTime,1))
|
||||
end
|
||||
P.garbageBeneath=P.garbageBeneath-bonus
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -23,6 +23,7 @@ return {
|
||||
LINE.discard(table.remove(P.field,1))
|
||||
LINE.discard(table.remove(P.visTime,1))
|
||||
end
|
||||
P.garbageBeneath=P.garbageBeneath-bonus
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Binary file not shown.
@@ -608,68 +608,295 @@ function trySave()
|
||||
end
|
||||
end
|
||||
do-- function freshPlayerPosition(sudden)
|
||||
local posLists={
|
||||
-- 1~5
|
||||
{
|
||||
{340,75,1},
|
||||
{965,390,.5},
|
||||
{965,30,.5},
|
||||
{20,390,.5},
|
||||
{20,30,.5},
|
||||
local posLists=setmetatable({
|
||||
alive={
|
||||
[1]={main={340,75,1}},
|
||||
[3]={main={340,75,1},
|
||||
{25,210,.5},
|
||||
{955,210,.5},
|
||||
},
|
||||
[4]={main={340,75,1},
|
||||
{25,210,.5},
|
||||
{970,90,.45},{970,410,.45},
|
||||
},
|
||||
[5]={main={340,75,1},
|
||||
{40,90,.45},{40,410,.45},
|
||||
{970,90,.45},{970,410,.45},
|
||||
},
|
||||
[6]={main={340,75,1},
|
||||
{40,90,.45},{40,410,.45},
|
||||
{1010,80,.305},{1010,290,.305},{1010,500,.305},
|
||||
},
|
||||
[7]={main={340,75,1},
|
||||
{100,80,.305},{100,290,.305},{100,500,.305},
|
||||
{1010,80,.305},{1010,290,.305},{1010,500,.305},
|
||||
},
|
||||
[10]={main={340,75,1},
|
||||
{100,80,.305},{100,290,.305},{100,500,.305},
|
||||
{935,90,.275},{935,300,.275},{935,510,.275},
|
||||
{1105,90,.275},{1105,300,.275},{1105,510,.275},
|
||||
},
|
||||
[13]={main={340,75,1},
|
||||
{10,90,.275},{10,300,.275},{10,510,.275},
|
||||
{180,90,.275},{180,300,.275},{180,510,.275},
|
||||
{935,90,.275},{935,300,.275},{935,510,.275},
|
||||
{1105,90,.275},{1105,300,.275},{1105,510,.275},
|
||||
},
|
||||
[14]={main={340,75,1},
|
||||
{10,90,.275},{10,300,.275},{10,510,.275},
|
||||
{180,90,.275},{180,300,.275},{180,510,.275},
|
||||
{935,90,.275},{935,300,.275},{935,510,.275},
|
||||
{1120,80,.225},{1120,240,.225},{1120,400,.225},{1120,560,.225},
|
||||
},
|
||||
[15]={main={340,75,1},
|
||||
{10,90,.275},{10,300,.275},{10,510,.275},
|
||||
{180,90,.275},{180,300,.275},{180,510,.275},
|
||||
{960,80,.225},{960,240,.225},{960,400,.225},{960,560,.225},
|
||||
{1120,80,.225},{1120,240,.225},{1120,400,.225},{1120,560,.225},
|
||||
},
|
||||
[16]={main={340,75,1},
|
||||
{10,90,.275},{10,300,.275},{10,510,.275},
|
||||
{190,80,.225},{190,240,.225},{190,400,.225},{190,560,.225},
|
||||
{960,80,.225},{960,240,.225},{960,400,.225},{960,560,.225},
|
||||
{1120,80,.225},{1120,240,.225},{1120,400,.225},{1120,560,.225},
|
||||
},
|
||||
[17]={main={340,75,1},
|
||||
{30,80,.225},{30,240,.225},{30,400,.225},{30,560,.225},
|
||||
{190,80,.225},{190,240,.225},{190,400,.225},{190,560,.225},
|
||||
{960,80,.225},{960,240,.225},{960,400,.225},{960,560,.225},
|
||||
{1120,80,.225},{1120,240,.225},{1120,400,.225},{1120,560,.225},
|
||||
},
|
||||
[24]={main={340,75,1},
|
||||
{30,80,.225},{30,240,.225},{30,400,.225},{30,560,.225},
|
||||
{190,80,.225},{190,240,.225},{190,400,.225},{190,560,.225},
|
||||
{940,80,.175},{940,205,.175},{940,330,.175},{940,455,.175},{940,580,.175},
|
||||
{1050,80,.175},{1050,205,.175},{1050,330,.175},{1050,455,.175},{1050,580,.175},
|
||||
{1160,80,.175},{1160,205,.175},{1160,330,.175},{1160,455,.175},{1160,580,.175},
|
||||
},
|
||||
[31]={main={340,75,1},
|
||||
{10,80,.175},{10,205,.175},{10,330,.175},{10,455,.175},{10,580,.175},
|
||||
{120,80,.175},{120,205,.175},{120,330,.175},{120,455,.175},{120,580,.175},
|
||||
{230,80,.175},{230,205,.175},{230,330,.175},{230,455,.175},{230,580,.175},
|
||||
{940,80,.175},{940,205,.175},{940,330,.175},{940,455,.175},{940,580,.175},
|
||||
{1050,80,.175},{1050,205,.175},{1050,330,.175},{1050,455,.175},{1050,580,.175},
|
||||
{1160,80,.175},{1160,205,.175},{1160,330,.175},{1160,455,.175},{1160,580,.175},
|
||||
},
|
||||
[33]=(function()
|
||||
local l={main={340,75,1}}
|
||||
for y=-1.5,1.5 do for x=0,3 do
|
||||
table.insert(l,{265-85*x,310+160*y,.125})
|
||||
table.insert(l,{940+85*x,310+160*y,.125})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[51]=(function()
|
||||
local l={main={340,75,1}}
|
||||
for y=-2,2 do for x=0,4 do
|
||||
table.insert(l,{275-65*x,315+125*y,.1})
|
||||
table.insert(l,{945+65*x,315+125*y,.1})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[75]=(function()
|
||||
local l={main={340,75,1}}
|
||||
for y=-2,2 do for x=0,4 do
|
||||
table.insert(l,{275-65*x,310+125*y,.1})
|
||||
end end
|
||||
for y=-3,3 do for x=0,6 do
|
||||
table.insert(l,{940+47*x,340+92*y,.075})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[99]=(function()
|
||||
local l={main={340,75,1}}
|
||||
for y=-3,3 do for x=0,6 do
|
||||
table.insert(l,{290-47*x,340+92*y,.075})
|
||||
table.insert(l,{940+47*x,340+92*y,.075})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[MATH.inf]=(function()
|
||||
local l={main={340,75,1}}
|
||||
for y=-3,3 do for x=0,6 do
|
||||
table.insert(l,{290-47*x,340+92*y,.075})
|
||||
table.insert(l,{940+47*x,340+92*y,.075})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
},
|
||||
-- 6~17
|
||||
(function()
|
||||
local L={{340,75,1}}
|
||||
for i=1,4 do ins(L,{15,-160+180*i,.25}) end
|
||||
for i=1,4 do ins(L,{180,-160+180*i,.25}) end
|
||||
for i=1,4 do ins(L,{950,-160+180*i,.25}) end
|
||||
for i=1,4 do ins(L,{1120,-160+180*i,.25}) end
|
||||
return L
|
||||
end)(),
|
||||
-- 18~31
|
||||
(function()
|
||||
local L={{340,75,1}}
|
||||
for i=1,5 do ins(L,{10, -100+135*i,.18}) end
|
||||
for i=1,5 do ins(L,{120, -100+135*i,.18}) end
|
||||
for i=1,5 do ins(L,{230, -100+135*i,.18}) end
|
||||
for i=1,5 do ins(L,{940, -100+135*i,.18}) end
|
||||
for i=1,5 do ins(L,{1050,-100+135*i,.18}) end
|
||||
for i=1,5 do ins(L,{1160,-100+135*i,.18}) end
|
||||
return L
|
||||
end)(),
|
||||
-- 32~49
|
||||
(function()
|
||||
local L={{340,75,1}}
|
||||
for i=1,4 do for j=1,6 do ins(L,{78*i-54,115*j-98,.09}) end end
|
||||
for i=9,12 do for j=1,6 do ins(L,{78*i+267,115*j-98,.09}) end end
|
||||
return L
|
||||
end)(),
|
||||
-- 50~99
|
||||
(function()
|
||||
local L={{340,75,1}}
|
||||
for i=1,7 do for j=1,7 do ins(L,{46*i-36,97*j-72,.068}) end end
|
||||
for i=15,21 do for j=1,7 do ins(L,{46*i+264,97*j-72,.068}) end end
|
||||
return L
|
||||
end)(),
|
||||
}
|
||||
function freshPlayerPosition(sudden)-- Set initial position for every player
|
||||
dead={
|
||||
[1]={{340,75,1}},
|
||||
[2]={
|
||||
{50,130,.925},{670,130,.925},
|
||||
},
|
||||
[3]={
|
||||
{25,160,.675},{440,160,.675},{855,160,.675},
|
||||
},
|
||||
[4]={
|
||||
{13,200,.525},{328,200,.525},{643,200,.525},{948,200,.525},
|
||||
},
|
||||
[5]={
|
||||
{8,230,.425},{260,230,.425},{512,230,.425},{764,230,.425},{1016,230,.425},
|
||||
},
|
||||
[10]={
|
||||
{8,110,.425},{260,110,.425},{512,110,.425},{764,110,.425},{1016,110,.425},
|
||||
{8,410,.425},{260,410,.425},{512,410,.425},{764,410,.425},{1016,410,.425},
|
||||
},
|
||||
[12]={
|
||||
{10,120,.35},{220,120,.35},{430,120,.35},{640,120,.35},{850,120,.35},{1060,120,.35},
|
||||
{10,400,.35},{220,400,.35},{430,400,.35},{640,400,.35},{850,400,.35},{1060,400,.35},
|
||||
},
|
||||
[18]={
|
||||
{10,90,.305},{220,90,.305},{430,90,.305},{640,90,.305},{850,90,.305},{1060,90,.305},
|
||||
{10,300,.305},{220,300,.305},{430,300,.305},{640,300,.305},{850,300,.305},{1060,300,.305},
|
||||
{10,510,.305},{220,510,.305},{430,510,.305},{640,510,.305},{850,510,.305},{1060,510,.305},
|
||||
},
|
||||
[21]={
|
||||
{10,90,.295},{190,90,.295},{370,90,.295},{550,90,.295},{730,90,.295},{910,90,.295},{1090,90,.295},
|
||||
{10,300,.295},{190,300,.295},{370,300,.295},{550,300,.295},{730,300,.295},{910,300,.295},{1090,300,.295},
|
||||
{10,510,.295},{190,510,.295},{370,510,.295},{550,510,.295},{730,510,.295},{910,510,.295},{1090,510,.295},
|
||||
},
|
||||
[24]={
|
||||
{20,100,.25},{175,100,.25},{330,100,.25},{485,100,.25},{640,100,.25},{795,100,.25},{950,100,.25},{1105,100,.25},
|
||||
{20,300,.25},{175,300,.25},{330,300,.25},{485,300,.25},{640,300,.25},{795,300,.25},{950,300,.25},{1105,300,.25},
|
||||
{20,500,.25},{175,500,.25},{330,500,.25},{485,500,.25},{640,500,.25},{795,500,.25},{950,500,.25},{1105,500,.25},
|
||||
},
|
||||
[27]={
|
||||
{10,100,.225},{150,100,.225},{290,100,.225},{430,100,.225},{570,100,.225},{710,100,.225},{850,100,.225},{990,100,.225},{1130,100,.225},
|
||||
{10,300,.225},{150,300,.225},{290,300,.225},{430,300,.225},{570,300,.225},{710,300,.225},{850,300,.225},{990,300,.225},{1130,300,.225},
|
||||
{10,500,.225},{150,500,.225},{290,500,.225},{430,500,.225},{570,500,.225},{710,500,.225},{850,500,.225},{990,500,.225},{1130,500,.225},
|
||||
},
|
||||
[36]={
|
||||
{10,90,.225},{150,90,.225},{290,90,.225},{430,90,.225},{570,90,.225},{710,90,.225},{850,90,.225},{990,90,.225},{1130,90,.225},
|
||||
{10,245,.225},{150,245,.225},{290,245,.225},{430,245,.225},{570,245,.225},{710,245,.225},{850,245,.225},{990,245,.225},{1130,245,.225},
|
||||
{10,400,.225},{150,400,.225},{290,400,.225},{430,400,.225},{570,400,.225},{710,400,.225},{850,400,.225},{990,400,.225},{1130,400,.225},
|
||||
{10,555,.225},{150,555,.225},{290,555,.225},{430,555,.225},{570,555,.225},{710,555,.225},{850,555,.225},{990,555,.225},{1130,555,.225},
|
||||
},
|
||||
[39]=(function()
|
||||
local l={}
|
||||
for y=0,2 do for x=0,12 do
|
||||
table.insert(l,{13+97*x,110+190*y,.15})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[42]=(function()
|
||||
local l={}
|
||||
for y=0,2 do for x=0,13 do
|
||||
table.insert(l,{15+90*x,120+190*y,.135})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[45]=(function()
|
||||
local l={}
|
||||
for y=0,2 do for x=0,14 do
|
||||
table.insert(l,{8+85*x,120+190*y,.125})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[60]=(function()
|
||||
local l={}
|
||||
for y=0,3 do for x=0,14 do
|
||||
table.insert(l,{8+85*x,85+155*y,.125})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[64]=(function()
|
||||
local l={}
|
||||
for y=0,3 do for x=0,15 do
|
||||
table.insert(l,{13+79*x,85+155*y,.115})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[68]=(function()
|
||||
local l={}
|
||||
for y=0,3 do for x=0,16 do
|
||||
table.insert(l,{6+75*x,85+155*y,.115})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[72]=(function()
|
||||
local l={}
|
||||
for y=0,3 do for x=0,17 do
|
||||
table.insert(l,{15+70*x,95+155*y,.1})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[90]=(function()
|
||||
local l={}
|
||||
for y=0,4 do for x=0,17 do
|
||||
table.insert(l,{15+70*x,82+127*y,.1})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[95]=(function()
|
||||
local l={}
|
||||
for y=0,4 do for x=0,18 do
|
||||
table.insert(l,{15+66*x,82+127*y,.1})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[100]=(function()
|
||||
local l={}
|
||||
for y=0,4 do for x=0,19 do
|
||||
table.insert(l,{12+63*x,82+127*y,.1})
|
||||
end end
|
||||
return l
|
||||
end)(),
|
||||
[MATH.inf]={},
|
||||
},
|
||||
}, {
|
||||
__call=function(self,alive,count)
|
||||
local lastTested=MATH.inf
|
||||
for k in next,self[alive and 'alive' or 'dead'] do
|
||||
if k<lastTested and k>=count then
|
||||
lastTested=k
|
||||
end
|
||||
end
|
||||
return self[alive and 'alive' or 'dead'][lastTested]
|
||||
end,
|
||||
})
|
||||
|
||||
function freshPlayerPosition(mode)-- Set initial position for every player, mode: 'normal'|'quick'|'update'
|
||||
assert(mode=='normal' or mode=='quick' or mode=='update',"Wrong freshPlyPos mode")
|
||||
local L=PLY_ALIVE
|
||||
if not sudden then
|
||||
if mode~='update' then
|
||||
for i=1,#L do
|
||||
L[i]:setPosition(640,#L<=5 and 360 or -62,0)
|
||||
end
|
||||
end
|
||||
|
||||
local posList
|
||||
if #L<=5 then posList=posLists[1]
|
||||
elseif #L<=17 then posList=posLists[2]
|
||||
elseif #L<=31 then posList=posLists[3]
|
||||
elseif #L<=49 then posList=posLists[4]
|
||||
elseif #L<=99 then posList=posLists[5]
|
||||
else error("TOO MANY PLAYERS!")
|
||||
local alive=PLAYERS[1].alive
|
||||
|
||||
if mode=='update' then
|
||||
if alive then
|
||||
if #L<=31 then
|
||||
for i=2,#L do
|
||||
L[i].miniMode=false
|
||||
L[i].draw=require"parts.player.draw".norm
|
||||
end
|
||||
end
|
||||
else
|
||||
if #L<=36 then
|
||||
for i=1,#L do
|
||||
L[i].miniMode=false
|
||||
L[i].draw=require"parts.player.draw".norm
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local posList=posLists(alive,#L)
|
||||
local method=mode=='normal' and 'setPosition' or 'movePosition'
|
||||
|
||||
if alive then
|
||||
for i=1,#L do
|
||||
L[i][method](L[i],unpack(posList[i==1 and 'main' or i-1]))
|
||||
end
|
||||
else
|
||||
for i=1,#L do
|
||||
L[i][method](L[i],unpack(posList[i]))
|
||||
end
|
||||
end
|
||||
local method=sudden and 'setPosition' or 'movePosition'
|
||||
for i=1,#L do L[i][method](L[i],unpack(posList[i])) end
|
||||
end
|
||||
end
|
||||
do-- function dumpBasicConfig()
|
||||
@@ -772,7 +999,7 @@ do-- function resetGameData(args)
|
||||
else
|
||||
PLY.newPlayer(1)
|
||||
end
|
||||
freshPlayerPosition(args:find'q')
|
||||
freshPlayerPosition((args:find'q') and 'quick' or 'normal')
|
||||
VK.restore()
|
||||
|
||||
local bg=GAME.modeEnv.bg
|
||||
|
||||
@@ -655,6 +655,8 @@ do-- Userdata tables
|
||||
highCam=true,
|
||||
nextPos=true,
|
||||
fullscreen=true,
|
||||
portrait=false,
|
||||
msaa=0,
|
||||
bg='on',
|
||||
bgAlpha=.26,
|
||||
powerInfo=false,
|
||||
|
||||
@@ -27,7 +27,7 @@ return {
|
||||
"homepage mainpage websites",
|
||||
"help",
|
||||
"The official website of Techmino!\nYou can download the latest stable build of Techmino and change your profile there.\nClick on the globe icon to open the website in your browser.",
|
||||
"http://101.43.110.22:10026",
|
||||
"http://studio26f.org",
|
||||
},
|
||||
{"Huiji Wiki",
|
||||
"huiji wiki",
|
||||
@@ -104,12 +104,6 @@ return {
|
||||
"Join the Tetris communities and talk with other players! You can join the Hard Drop Discord server by clicking on the globe icon.",
|
||||
"https://discord.gg/harddrop"
|
||||
},
|
||||
{"Mew",
|
||||
"tieba forum reddit discord",
|
||||
"org",
|
||||
"The Mew forum owned by the Chinese Tetris Research Community and was founded in the second half of 2021. Mew is a Chinese social media, kind of like a combination of Discord and Reddit, with many channels in a big community. Users can chat in the channels and submit posts to the channel. Mew also has a function called “Library,” which systematically stores the documentation. The Tetris Mew forum is currently under construction, and not too many contents are available (2/Nov/2021).",
|
||||
"https://mew.fun/n/tetris",
|
||||
},
|
||||
{"Tetris OL Servers",
|
||||
"tetrisonline servers tos",
|
||||
"org",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -20,8 +20,8 @@ return {
|
||||
{"游戏官网",
|
||||
"official website homepage mainpage guanwang",
|
||||
"help",
|
||||
"Techmino的官网!\n可以在上面下载游戏本体,或者修改头像以及个人信息。\n\n游戏作者的一些话:强烈不建议在任何公开场合提及甚至宣传Techmino,更不要随便就对外公布我们的官网链接!请务必只在私下里向有基础或真的很有兴趣入坑认真玩的玩家推荐,不然很容易拉低社群质量破坏交流氛围,非常难处理,甚至有可能影响游戏的未来发展。为了保证游戏未来会变得越来越好玩,千万慎重考虑您对游戏的推广方式!感谢您对Techmino的支持!!感谢配合!!!",
|
||||
"http://101.43.110.22:10026",
|
||||
"Techmino的官网!\n可以在上面下载游戏本体,或者修改头像以及个人信息。\n\n游戏作者的一些话:强烈不建议在任何公开场合提及甚至宣传Techmino,更不要随便对外发送我们的官网链接!请务必只在私下里向有基础或真的很有兴趣入坑认真玩的玩家推荐,不然很容易拉低社群质量破坏交流氛围,比较难处理,甚至有可能影响游戏的未来发展。为了保证游戏能够变得越来越好玩,千万慎重考虑您对游戏的推广方式!感谢您对Techmino的大力支持!!",
|
||||
"http://studio26f.org",
|
||||
},
|
||||
{"灰机Wiki",
|
||||
"huiji",
|
||||
@@ -96,12 +96,6 @@ return {
|
||||
"org",
|
||||
"俄罗斯方块·[研究]群QQ号764916351,“中国俄罗斯方块总群”",
|
||||
},
|
||||
{"Mew据点",
|
||||
"mew tieba forum",
|
||||
"org",
|
||||
"研究群下属的Mew据点(类似贴吧或者Discord的服务器),2021年下半年建立,可以在同一个大社区的各个频道实时聊天,也可以发帖以主题交流,同时还有一个叫图书馆的功能方便各种方块资料整理(还在建设中,目前没多少内容,2021/11/02)",
|
||||
"https://mew.fun/n/tetris",
|
||||
},
|
||||
{"茶服",
|
||||
"tos tea study chafu",
|
||||
"org",
|
||||
@@ -1158,17 +1152,11 @@ return {
|
||||
"在STSD上叠若干个T3的形状。"..HDwiki,
|
||||
HDsearch.."King_Crimson",
|
||||
},
|
||||
{"连续PC (1/2)",
|
||||
"pcloop",
|
||||
{"连续PC",
|
||||
"lianxuquanxiao lianxupc pcloop",
|
||||
"pattern",
|
||||
"テトリス堂的从开局起第1、2、3、4、7个4行pc的开局整理。第七个pc做完总共用掉70块,相当于回到游戏开始阶段可以做1st pc\n\n第5和第6详见下一个词条",
|
||||
"https://shiwehi.com/tetris/template/consecutivepc.php"
|
||||
},
|
||||
{"连续PC (2/2)",
|
||||
"pcloop",
|
||||
"pattern",
|
||||
"four.lol的从开局起第5、6个4行pc的开局整理。\n(链接点开是5th,可以到6th,其他的推荐看上一个词条)",
|
||||
"https://four.lol/perfect-clears/5th"
|
||||
"研究群群友加加编写的一份连续PC教程",
|
||||
"https://docs.qq.com/sheet/DRmxvWmt3SWxwS2tV"
|
||||
},
|
||||
|
||||
-- 存档管理
|
||||
|
||||
@@ -17,6 +17,7 @@ return {
|
||||
playedLong="You have been playing for a long time. Time to take a break!",
|
||||
playedTooMuch="You have been playing for far too long! Techmino is fun, but remember to take some rests!",
|
||||
settingWarn="Careful — you’re about to change some uncommon settings!",
|
||||
settingWarn2="This setting takes effect after restart",
|
||||
|
||||
atkModeName={"Random","Badges","K.O.s","Attackers"},
|
||||
royale_remain="$1 Players Left",
|
||||
@@ -531,6 +532,8 @@ return {
|
||||
power="Battery Info",
|
||||
clean="Quick Draw",
|
||||
fullscreen="Fullscreen",
|
||||
portrait="Portrait",
|
||||
msaa="MSAA level",
|
||||
|
||||
bg_on="Normal B.G.",
|
||||
bg_off="No B.G.",
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
return {
|
||||
fallback='en',
|
||||
loadText={
|
||||
loadSFX="Cargando efectos de sonido",
|
||||
loadSample="Cargando samples de música",
|
||||
@@ -9,7 +10,6 @@ return {
|
||||
loadOther="Cargando otros assets",
|
||||
finish="Pulsa cualquier tecla",
|
||||
},
|
||||
fallback='en',
|
||||
sureQuit="Pulsa de nuevo para salir",
|
||||
sureReset="Pulsa de nuevo para reiniciar",
|
||||
sureDelete="Pulsa de nuevo para borrar",
|
||||
@@ -17,6 +17,7 @@ return {
|
||||
playedLong="[Anti-adicción] Estuviste jugando un buen rato hoy. Recuerda descansar de vez en cuando.",
|
||||
playedTooMuch="[Anti-adicción] ¡Has jugado mucho por hoy! No puedes jugar más.",
|
||||
settingWarn="¡Ten cuidado con modificar esto!",
|
||||
-- settingWarn2="This setting takes effect after restart",
|
||||
|
||||
atkModeName={"Al azar","Medallas","KOs","Atacantes"},
|
||||
royale_remain="$1 Jugadores Restantes",
|
||||
@@ -107,66 +108,66 @@ return {
|
||||
|
||||
-- Server's warn/error messages
|
||||
Techrater={
|
||||
-- internalError="Internal error",
|
||||
-- databaseError="Database error",
|
||||
-- invalidFormat="Invalid format",
|
||||
-- invalidArguments="Invalid arguments",
|
||||
-- tooFrequent="Too frequent",
|
||||
-- notAvailable="Not available",
|
||||
-- noPermission="No permission",
|
||||
-- roomNotFound="Room not found",
|
||||
internalError="Internal error",
|
||||
databaseError="Database error",
|
||||
invalidFormat="Formato inválido",
|
||||
invalidArguments="Argumentos inválidos",
|
||||
tooFrequent="Exceso de requests",
|
||||
notAvailable="No disponible",
|
||||
noPermission="No hay permisos suficientes",
|
||||
roomNotFound="Sala no encontrada",
|
||||
|
||||
-- Controllers
|
||||
WebSocket={
|
||||
-- invalidConnection="Invalid connection",
|
||||
-- invalidAction="Invalid action",
|
||||
-- playerNotFound="Player not found",
|
||||
-- connectionFailed="Connection failed",
|
||||
invalidConnection="Conexión inválida",
|
||||
invalidAction="Acción inválida",
|
||||
playerNotFound="Jugador no encontrado",
|
||||
connectionFailed="Error de conexión",
|
||||
},
|
||||
-- Filters
|
||||
CheckPermission={
|
||||
-- playerNotFound="Player not found",
|
||||
playerNotFound="Jugador no encontrado",
|
||||
},
|
||||
-- Plugins
|
||||
ConnectionManager={
|
||||
-- playerInvalid="Player invalid",
|
||||
-- playerNotFound="Player not found",
|
||||
-- connectionReplaced="Connection replaced",
|
||||
playerInvalid="Jugador inválido",
|
||||
playerNotFound="Jugador no encontrado",
|
||||
connectionReplaced="Conexión reiniciada",
|
||||
},
|
||||
NoticeManager={
|
||||
-- noticeNotFound="Notice not found",
|
||||
noticeNotFound="Aviso no encontrado",
|
||||
},
|
||||
PlayerManager={
|
||||
-- invalidCode="Invalid code",
|
||||
-- invalidEmail="Invalid email",
|
||||
-- playerNotFound="Player not found",
|
||||
-- invalidEmailPass="Invalid email or password",
|
||||
-- emailExists="Email exists",
|
||||
-- emailSendError="Email send error",
|
||||
invalidCode="Código incorrecto",
|
||||
invalidEmail="Correo inválido",
|
||||
playerNotFound="Jugador no encontrado",
|
||||
invalidEmailPass="Correo o contraseña incorrecta",
|
||||
emailExists="Correo ya existente",
|
||||
emailSendError="Error al enviar solicitud",
|
||||
},
|
||||
-- Strategies
|
||||
PlayerRole={
|
||||
-- invalidRole="Invalid role",
|
||||
-- invalidTarget="Invalid target",
|
||||
invalidRole="Rol inválido",
|
||||
invalidTarget="Objetivo inválido",
|
||||
},
|
||||
PlayerType={
|
||||
-- invalidType="Invalid type",
|
||||
-- roomFull="Room full",
|
||||
invalidType="Clase inválida",
|
||||
roomFull="Esta sala está llena.",
|
||||
},
|
||||
RoomJoin={
|
||||
-- wrongPassword="Wrong password",
|
||||
wrongPassword="Contraseña incorrecta",
|
||||
},
|
||||
},
|
||||
|
||||
-- tooFrequent="Request too frequently",
|
||||
-- roomPasswordChanged="Room password changed",
|
||||
tooFrequent="Requests demasiado frecuentes",
|
||||
roomPasswordChanged="Contraseña de sala cambiada",
|
||||
oldVersion="¡Está disponible la nueva versión $1!",
|
||||
versionNotMatch="¡Las versiones no coinciden!",
|
||||
notFinished="Próximamente",
|
||||
|
||||
noUsername="Por favor ingresa un nombre de usuario",
|
||||
wrongEmail="Correo electrónico inválido",
|
||||
-- wrongCode="Invalid verification code",
|
||||
wrongCode="Código de Verif. incorrecto",
|
||||
noPassword="Por favor ingresa la contraseña",
|
||||
diffPassword="Las contraseñas no coinciden",
|
||||
checkEmail="Petición de registro enviada con éxito",
|
||||
@@ -174,17 +175,17 @@ return {
|
||||
wsFailed="WebSocket conexión fallida: $1",
|
||||
wsClose="WebSocket cerrado: $1",
|
||||
netTimeout="Tiempo de conexión agotado",
|
||||
-- serverDown="Oops! Server is down",
|
||||
-- requestFailed="Request failed",
|
||||
serverDown="Server caído, F",
|
||||
requestFailed="Error de Request",
|
||||
|
||||
onlinePlayerCount="En línea: $1",
|
||||
createRoomSuccessed="¡Sala creada con éxito!",
|
||||
-- playerKicked="$1 removed $2 from room",
|
||||
-- becomeHost="$1 become host",
|
||||
playerKicked="$2 quitado de la sala por $1",
|
||||
becomeHost="$1 ahora es el host",
|
||||
started="En juego",
|
||||
joinRoom="$1 entró a la sala.",
|
||||
leaveRoom="$1 salió de la sala.",
|
||||
-- roomRemoved="Room was removed",
|
||||
roomRemoved="Sala removida",
|
||||
ready="LISTO",
|
||||
spectating="Espectando",
|
||||
|
||||
@@ -414,7 +415,7 @@ return {
|
||||
league="Liga Tech",
|
||||
ffa="FFA",
|
||||
rooms="Salas",
|
||||
-- resetPW="Reset password",
|
||||
resetPW="Restabl. Contraseña",
|
||||
logout="Desconec.",
|
||||
},
|
||||
net_league={
|
||||
@@ -531,6 +532,8 @@ return {
|
||||
power="Inf. de Batería",
|
||||
clean="Fast Draw",
|
||||
fullscreen="Pant. Completa",
|
||||
-- portrait="Portrait",
|
||||
-- msaa="MSAA level",
|
||||
|
||||
bg_on="Fondo Normal",
|
||||
bg_off="Sin Fondo",
|
||||
@@ -735,7 +738,7 @@ return {
|
||||
},
|
||||
login_pw={
|
||||
title="Entrar",
|
||||
-- login_mail="Login with E-mail/Sign Up",
|
||||
login_mail="Registrarse/Pedir código",
|
||||
email="Correo Elec.",
|
||||
password="Contraseña",
|
||||
showEmail="Mostrar Correo",
|
||||
@@ -743,19 +746,19 @@ return {
|
||||
},
|
||||
login_mail={
|
||||
title="Entrar/Registrarse",
|
||||
-- login_pw="Password Sign In",
|
||||
login_pw="Ingr. con Contraseña",
|
||||
email="Correo Elec.",
|
||||
-- send="Send code",
|
||||
-- code="Verification Code",
|
||||
-- verify="Verify",
|
||||
send="Enviar código",
|
||||
code="Código de Verif.",
|
||||
verify="Verificar",
|
||||
},
|
||||
reset_password={
|
||||
-- title="Reset Password",
|
||||
-- send="Send code",
|
||||
-- code="Verification Code",
|
||||
title="Restablecer Contraseña",
|
||||
send="Enviar código",
|
||||
code="Código de Verif.",
|
||||
password="Contraseña",
|
||||
password2="Repetir Contr.",
|
||||
-- setPW="Set Password",
|
||||
setPW="Establecer",
|
||||
},
|
||||
account={
|
||||
title="Cuenta",
|
||||
@@ -829,7 +832,7 @@ return {
|
||||
['dig_eff_40l']= {"Dig", "Efic. 40L", "¡Limpia 40 líneas de queso con la menor cantidad de piezas posible!"},
|
||||
['dig_eff_100l']= {"Dig", "Efic. 100L", "¡Limpia 100 líneas de queso con la menor cantidad de piezas posible!"},
|
||||
['dig_eff_400l']= {"Dig", "Efic. 400L", "¡Limpia 400 líneas de queso con la menor cantidad de piezas posible!"},
|
||||
--['dig_quad_10l']= {"Dig", "TECHRASH 10L", "Dig 10 garbage lines using only techrash!"},
|
||||
['dig_quad_10l']= {"Dig", "TECHRASH 10L", "¡Limpia 10 líneas de queso sólo con Tecrashes!"},
|
||||
['drought_n']= {"Sequía", "100L", "¡Sin piezas I!"},
|
||||
['drought_l']= {"Sequía+", "100L", "Qué es esto..."},
|
||||
['marathon_n']= {"Maratón", "Normal", "Maratón de 200 líneas con velocidad en aumento."},
|
||||
@@ -921,5 +924,5 @@ return {
|
||||
['custom_clear']= {"Personalizado", "Normal"},
|
||||
['custom_puzzle']= {"Personalizado", "Puzzle"},
|
||||
},
|
||||
-- pumpkin="I'm a pumpkin",
|
||||
pumpkin="Todos alaben al rey Calabaza",
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ return {
|
||||
playedLong="[Anti-addiction] Vous avez joué pendant un bon bout de temps aujourd'hui. Faites des pauses.",
|
||||
playedTooMuch="[Anti-addiction] Vous avez joué trop longtemps ! Vous ne pouvez plus jouer.",
|
||||
-- settingWarn="Modifing uncommon setting, be careful!",
|
||||
-- settingWarn2="This setting takes effect after restart",
|
||||
|
||||
atkModeName={"Aléatoire","Badges","K.O.s faciles","Attaquants"},
|
||||
royale_remain="$1 Joueurs restants",
|
||||
@@ -496,6 +497,8 @@ return {
|
||||
power="Infos d'alimentation",
|
||||
-- clean="Fast Draw",
|
||||
fullscreen="Plein écran",
|
||||
-- portrait="Portrait",
|
||||
-- msaa="MSAA level",
|
||||
|
||||
-- bg_on="Normal B.G.",
|
||||
-- bg_off="No B.G.",
|
||||
|
||||
@@ -18,6 +18,7 @@ return {
|
||||
playedLong="Anda telah bermain lama. Waktunya istirahat!",
|
||||
playedTooMuch="Anda telah bermain terlalu lama! Techmino sangat menyenangkan, tetapi jangan lupa istirahat!",
|
||||
settingWarn="Awas, Anda akan mengubah beberapa pengaturan yang tidak biasanya diubah!",
|
||||
-- settingWarn2="This setting takes effect after restart",
|
||||
|
||||
atkModeName={"Acak","Badge","K.O.","Penyerang"},
|
||||
royale_remain="$1 Pemain Tersisa",
|
||||
@@ -532,6 +533,8 @@ return {
|
||||
power="Info Baterai",
|
||||
clean="Gambar Cepat",
|
||||
fullscreen="Layar Penuh",
|
||||
-- portrait="Portrait",
|
||||
-- msaa="MSAA level",
|
||||
|
||||
bg_on="B.G. Normal",
|
||||
bg_off="Tidak Ada B.G.",
|
||||
|
||||
@@ -14,10 +14,11 @@ return {
|
||||
sureQuit="終了するにはもう一度押してください!",
|
||||
sureReset="リセットするにはもう一度押してください!",
|
||||
sureDelete="削除するにはもう一度押してください!",
|
||||
newDay="新しい1日、新しい始まりです!",
|
||||
playedLong="長時間プレイしています、適度に休憩をして!",
|
||||
playedTooMuch="かなり長くプレイしています! Techminoは楽しいですが、休憩を忘れずに!",
|
||||
settingWarn="使用頻度の少ない設定に変更しています。注意してください。",
|
||||
newDay="新しい1日の始まりです!",
|
||||
playedLong="長時間プレイしています、適度な休憩を",
|
||||
playedTooMuch="長時間プレイしています! Techminoは楽しいですが、休憩を忘れずに!",
|
||||
settingWarn="使用頻度の少ない設定を変更しています。注意してください。",
|
||||
settingWarn2="この設定は再起動後に適用されます",
|
||||
|
||||
atkModeName={"ランダム","バッジ狙い","トドメ撃ち","カウンター"},
|
||||
royale_remain="残り $1 人",
|
||||
@@ -33,16 +34,16 @@ return {
|
||||
tasUsing="[TAS]",
|
||||
|
||||
stage="ステージ $1 クリア!",
|
||||
great="よし!",
|
||||
awesome="すごい!",
|
||||
almost="あと少し!",
|
||||
continue="がんばれ!",
|
||||
great="GREAT",
|
||||
awesome="素晴らしい",
|
||||
almost="あと少し...",
|
||||
continue="まだ行ける!",
|
||||
maxspeed="最高速度!",
|
||||
speedup="スピードアップ!",
|
||||
missionFailed="失敗…",
|
||||
missionFailed="ミッション失敗",
|
||||
|
||||
speedLV="レベル",
|
||||
piece="ミノ数",line="ライン数",atk="火力",eff="効率",
|
||||
piece="ミノ数",line="line数",atk="火力",eff="効率",
|
||||
rpm="RPM",tsd="TSD",
|
||||
grade="Grade",techrash="Techrash",
|
||||
wave="Wave",nextWave="Next",
|
||||
@@ -57,15 +58,15 @@ return {
|
||||
gameover="Game Over",
|
||||
|
||||
pause="ポーズ",
|
||||
pauseCount="ポーズした回数",
|
||||
pauseCount="ポーズ回数",
|
||||
finesse_ap="All Perfect",
|
||||
finesse_fc="Full Combo",
|
||||
|
||||
page="ページ:",
|
||||
|
||||
cc_fixed="CCは固定されたミノ順に非対応です!",
|
||||
cc_swap="CCはホールドモードがSwapの時に非対応です!",
|
||||
ai_prebag="AIは通常のテトロミノではない物やカスタマイズされたミノ順に非対応です!",
|
||||
cc_fixed="CCはミノ順の指定に非対応です!",
|
||||
cc_swap="CCはホールドモード、Swapに非対応です!",
|
||||
ai_prebag="AIは通常のテトロミノ以外やミノ順指定に非対応です!",
|
||||
ai_mission="AIはカスタムミッションに非対応です!",
|
||||
switchSpawnSFX="ブロック出現時の効果音をONにしてください!",
|
||||
needRestart="すべての変更を適用する為にリスタートしてください!",
|
||||
@@ -74,7 +75,7 @@ return {
|
||||
loadError_read="'$1'の読み込みに失敗: 読み込みに失敗しました",
|
||||
loadError_noFile="'$1'の読み込みに失敗: ファイルが存在しません",
|
||||
loadError_other="'$1'の読み込みに失敗: $2",
|
||||
loadError_unknown="'$1'の読み込みに失敗: 原因不明です",
|
||||
loadError_unknown="'$1'の読み込みに失敗: 原因不明",
|
||||
|
||||
saveError_duplicate="'$1'の保存に失敗: 既に同じ名前のファイルがあります",
|
||||
saveError_encode="'$1'の保存に失敗: エンコードエラー",
|
||||
@@ -84,9 +85,9 @@ return {
|
||||
copyDone="コピーしました!",
|
||||
saveDone="データを保存しました!",
|
||||
exportSuccess="書き出し成功!",
|
||||
importSuccess="取り込み成功!",
|
||||
importSuccess="読み取り成功!",
|
||||
dataCorrupted="データが破損してます",
|
||||
pasteWrongPlace="貼り付ける位置が間違ってませんか?",
|
||||
pasteWrongPlace="貼り付ける位置を間違っていませんか?",
|
||||
noFile="ファイルが見つかりません",
|
||||
|
||||
nowPlaying="再生中:",
|
||||
@@ -97,8 +98,8 @@ return {
|
||||
|
||||
noScore="スコア無し",
|
||||
modeLocked="未開放",
|
||||
unlockHint="前のステージでランクB以上を取得すると解放されます!",
|
||||
highScore="最高得点",
|
||||
unlockHint="前のステージでBランク以上を取得すると解放されます!",
|
||||
highScore="最高記録",
|
||||
newRecord="新記録!",
|
||||
|
||||
replayBroken="リプレイが読み込めませんでした",
|
||||
@@ -114,14 +115,14 @@ return {
|
||||
invalidFormat="非対応の形式です",
|
||||
invalidArguments="無効な引数です",
|
||||
tooFrequent="リクエストが多すぎます",
|
||||
notAvailable="使用不可",
|
||||
notAvailable="無効なリクエスト",
|
||||
noPermission="権限がありません",
|
||||
roomNotFound="部屋が見つかりません",
|
||||
|
||||
-- Controllers
|
||||
WebSocket={
|
||||
invalidConnection="接続されていません",
|
||||
invalidAction="無効な操作です",
|
||||
invalidAction="無効な操作",
|
||||
playerNotFound="プレイヤーが見つかりませんでした",
|
||||
connectionFailed="接続失敗",
|
||||
},
|
||||
@@ -136,7 +137,7 @@ return {
|
||||
connectionReplaced="接続切替",
|
||||
},
|
||||
NoticeManager={
|
||||
noticeNotFound="通知が見つかりませんでした",
|
||||
noticeNotFound="通知はありません",
|
||||
},
|
||||
PlayerManager={
|
||||
invalidCode="無効なコード",
|
||||
@@ -164,7 +165,7 @@ return {
|
||||
roomPasswordChanged="部屋のパスワードを変更しました",
|
||||
oldVersion="バージョン$1のダウンロードが可能になりました",
|
||||
versionNotMatch="バージョンが一致しません",
|
||||
notFinished="未完成ですので、ご期待ください",
|
||||
notFinished="未完成です、ご期待ください",
|
||||
|
||||
noUsername="ユーザーネームを入力してください!",
|
||||
wrongEmail="メールアドレスが無効です!",
|
||||
@@ -176,29 +177,30 @@ return {
|
||||
wsFailed="ウェブソケットとの通信に失敗しました: $1",
|
||||
wsClose="ウェブソケットとの通信を終了: $1",
|
||||
netTimeout="接続がタイムアウトしました",
|
||||
serverDown="うわ! サーバーが落ちています...",
|
||||
serverDown="あー、サーバーが落ちています...",
|
||||
requestFailed="リクエスト失敗",
|
||||
|
||||
onlinePlayerCount="オンライン人数: $1",
|
||||
createRoomSuccessed="部屋を建てました",
|
||||
playerKicked="$1 は、$2 を部屋から追放しました",
|
||||
becomeHost="$1 がホストになりました",
|
||||
started="プレイ中",
|
||||
joinRoom="$1 が入室しました",
|
||||
leaveRoom="$1 が退出しました",
|
||||
roomRemoved="部屋が撤去されました",
|
||||
roomRemoved="部屋が解散しました",
|
||||
ready="準備OK",
|
||||
spectating="観戦中",
|
||||
|
||||
|
||||
|
||||
keySettingInstruction="選択してキーを入力\nEscape: キャンセル\nBackspace: キーを削除",
|
||||
customBGhelp="カスタム背景にする画像ファイルをドロップ",
|
||||
customBGloadFailed="サポートされていないフォーマットのファイルです",
|
||||
customBGhelp="背景にする画像ファイルをドロップ",
|
||||
customBGloadFailed="非対応のファイル形式です",
|
||||
|
||||
errorMsg="問題が発生! ゲームを再起動し、エラーログを開発者に送ってください",
|
||||
tryAnotherBuild="[Invalid UTF-8]使用しているOSがMicrosoft WindowsであればTechmino-win32かTechmino-win64をダウンロードしてください! (現在使用しているソフトは違うバージョンです)",
|
||||
|
||||
modInstruction="Modを選択してください!\nModはゲームの中身を変えます\nしかしゲームが破損することもあります\nModを使用した場合スコアは保存されません",
|
||||
modInstruction="Modを選択してください!\nModはゲームルールを変えられますが正常にプレイできなくなる可能性があります\nModを使用した場合、スコアは保存されません",
|
||||
modInfo={
|
||||
next="NEXT\nNEXTの個数を変更します",
|
||||
hold="HOLD\nHOLDの個数を変更します",
|
||||
@@ -206,9 +208,9 @@ return {
|
||||
infHold="InfiniHold\nHOLDできる回数を無限にします",
|
||||
hideBlock="Hide Current Piece:\n現在出現しているピースを隠します",
|
||||
hideGhost="No Ghost\nゴーストを消します",
|
||||
hidden="Hide Locked Pieces.\n設置されたピースが時間内に見えなくなります",
|
||||
hidden="Hide Locked Pieces\n設置されたピースが時間内に見えなくなります",
|
||||
hideBoard="Hide Board\n盤面の一部もしくは、全体を隠します",
|
||||
flipBoard="Flip Board\n盤面が回転もしくは滑ります",
|
||||
flipBoard="Flip Board\n盤面が回転もしくは、滑ります",
|
||||
dropDelay="Gravity\n落下速度をフレーム単位で変更します",
|
||||
lockDelay="Lock Delay\n設置猶予をフレーム単位で変更します",
|
||||
waitDelay="Spawn Delay\nブロックの出現猶予をフレーム単位で変更します",
|
||||
@@ -227,25 +229,25 @@ return {
|
||||
"時間:",
|
||||
"入力数/回転数/ホールド数:",
|
||||
"ミノ数:",
|
||||
"列数/掘った列:",
|
||||
"火力数/堀からの火力:",
|
||||
"受けたライン数:",
|
||||
"ライン消去数:",
|
||||
"line数/掘line:",
|
||||
"火力数/掘火力:",
|
||||
"受けたline数:",
|
||||
"line消去数:",
|
||||
"スピン:",
|
||||
"B2B/B3B/PC/HPC:",
|
||||
"最適化:",
|
||||
},
|
||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||
radarData={"DPM","ADPM","APM","SPM","LPM","DPM"},
|
||||
radarData={"DPM","ADPM","APM","SPM","L'PM","DPM"},
|
||||
stat={
|
||||
"起動回数:",
|
||||
"プレイ回数:",
|
||||
"プレイ時間:",
|
||||
"入力数/回転数/ホールド数:",
|
||||
"ミノ数/列数/火力数:",
|
||||
"受けたライン数/Res./Asc.:",
|
||||
"火力/堀からの火力:",
|
||||
"効率/堀の効率:",
|
||||
"ミノ数/line数/火力数:",
|
||||
"送られたline数/相殺/受け:",
|
||||
"掘line/掘火力:",
|
||||
"効率/掘の効率:",
|
||||
"B2B数/B3B数:",
|
||||
"PC数/HPC数:",
|
||||
"最適化ミス数/率:",
|
||||
@@ -400,7 +402,7 @@ return {
|
||||
mod={
|
||||
title="Mods",
|
||||
reset="リセット (tab)",
|
||||
unranked="ランク無し",
|
||||
unranked="記録不可",
|
||||
},
|
||||
pause={
|
||||
setting="設定 (S)",
|
||||
@@ -413,7 +415,7 @@ return {
|
||||
},
|
||||
net_menu={
|
||||
league="テクリーグ",
|
||||
ffa="",
|
||||
ffa="FFA",
|
||||
rooms="ルーム",
|
||||
resetPW="パスワード再設定",
|
||||
logout="ログアウト",
|
||||
@@ -448,7 +450,7 @@ return {
|
||||
drop="自然落下時間",
|
||||
lock="設置時間",
|
||||
wait="操作硬直時間",
|
||||
fall="ライン消去時間",
|
||||
fall="line消去時間",
|
||||
hang="死後硬直時間",
|
||||
hurry="AREキャンセル時間",
|
||||
|
||||
@@ -469,7 +471,7 @@ return {
|
||||
nextCount="ネクスト数",
|
||||
holdCount="ホールド数",
|
||||
infHold="無限ホールド",
|
||||
phyHold="即ホールド",
|
||||
phyHold="その場ホールド",
|
||||
},
|
||||
net_game={
|
||||
ready="準備OK",
|
||||
@@ -513,14 +515,14 @@ return {
|
||||
lockFX="設置演出",
|
||||
dropFX="落下演出",
|
||||
moveFX="左右移動演出",
|
||||
clearFX="ライン消去演出",
|
||||
clearFX="line消去演出",
|
||||
splashFX="消去時の弾ける演出",
|
||||
shakeFX="盤面移動演出",
|
||||
atkFX="攻撃演出",
|
||||
|
||||
frame="レンダリングフレームレート(%)",
|
||||
|
||||
text="ライン消去ポップ",
|
||||
text="line消去ポップ",
|
||||
score="スコアポップ",
|
||||
bufferWarn="ダメージアラート",
|
||||
showSpike="スパイクカウンター",
|
||||
@@ -530,8 +532,10 @@ return {
|
||||
|
||||
clickFX="クリック演出",
|
||||
power="バッテリー",
|
||||
clean="素早い描画",
|
||||
clean="描画処理の最適化",
|
||||
fullscreen="フルスクリーン",
|
||||
portrait="縦画面",
|
||||
msaa="アンチエイリアス(MSAA)レベル",
|
||||
|
||||
bg_on="通常背景",
|
||||
bg_off="背景なし ",
|
||||
@@ -583,16 +587,16 @@ return {
|
||||
a6="ハードドロップ",
|
||||
a7="ソフトドロップ",
|
||||
a8="ホールド",
|
||||
a9="ファンクション 1",
|
||||
a10="ファンクション 2",
|
||||
a9="機能 1",
|
||||
a10="機能 2",
|
||||
a11="即左移動",
|
||||
a12="即右移動",
|
||||
a13="ソニックドロップ",
|
||||
a14="下1移動",
|
||||
a15="下4移動",
|
||||
a16="下10移動",
|
||||
a17="左ドロップ",
|
||||
a18="右ドロップ",
|
||||
a14="落下移動 1",
|
||||
a15="落下移動 4",
|
||||
a16="落下移動 10",
|
||||
a17="左端ハードドロップ",
|
||||
a18="右端ハードドロップ",
|
||||
a19="左ザンギ",
|
||||
a20="右ザンギ",
|
||||
restart="リトライ",
|
||||
@@ -634,7 +638,7 @@ return {
|
||||
drop="自然落下時間",
|
||||
lock="設置時間",
|
||||
wait="操作硬直時間",
|
||||
fall="ライン消去時間",
|
||||
fall="line消去時間",
|
||||
hang="死後硬直時間",
|
||||
hurry="AREキャンセル時間",
|
||||
|
||||
@@ -659,7 +663,7 @@ return {
|
||||
nextCount="ネクスト数",
|
||||
holdCount="ホールド数",
|
||||
infHold="無限ホールド",
|
||||
phyHold="即ホールド",
|
||||
phyHold="その場ホールド",
|
||||
|
||||
fieldH="盤面の高さ",
|
||||
visible="設置ミノの視認性",
|
||||
@@ -712,7 +716,7 @@ return {
|
||||
Z2="Z2",S2="S2",J2="J2",L2="L2",T2="T2",O2="O2",I2="I2",
|
||||
Z3="Z3",S3="S3",J3="J3",L3="L3",T3="T3",O3="O3",I3="I3",
|
||||
O4="O4",I4="I4",
|
||||
mission="強制ミッション",
|
||||
mission="ミッションを強制",
|
||||
},
|
||||
about={
|
||||
staff="スタッフ",
|
||||
@@ -770,41 +774,41 @@ return {
|
||||
title="アカウント",
|
||||
},
|
||||
app_15p={
|
||||
color="Color",
|
||||
invis="Invis",
|
||||
slide="Slide",
|
||||
pathVis="Show Path",
|
||||
revKB="Reverse",
|
||||
color="色",
|
||||
invis="インビジブル",
|
||||
slide="スライド",
|
||||
pathVis="ポインター",
|
||||
revKB="逆順",
|
||||
},
|
||||
app_schulteG={
|
||||
rank="Size",
|
||||
invis="Invis",
|
||||
disappear="Hide",
|
||||
tapFX="Tap FX",
|
||||
rank="サイズ",
|
||||
invis="インビジブル",
|
||||
disappear="済消去",
|
||||
tapFX="効果音",
|
||||
},
|
||||
app_AtoZ={
|
||||
level="Level",
|
||||
keyboard="Keyboard",
|
||||
level="レベル",
|
||||
keyboard="キーボード",
|
||||
},
|
||||
app_2048={
|
||||
invis="Invis",
|
||||
tapControl="Tap controls",
|
||||
invis="インビジブル",
|
||||
tapControl="タッチ操作",
|
||||
|
||||
skip="Skip Round",
|
||||
skip="スキップ",
|
||||
},
|
||||
app_ten={
|
||||
next="Next",
|
||||
invis="Invis",
|
||||
fast="Fast",
|
||||
invis="インビジブル",
|
||||
fast="高速落下",
|
||||
},
|
||||
app_dtw={
|
||||
color="Color",
|
||||
mode="Mode",
|
||||
color="色",
|
||||
mode="モード",
|
||||
bgm="BGM",
|
||||
arcade="Arcade",
|
||||
arcade="アーケード",
|
||||
},
|
||||
app_link={
|
||||
invis="Invis",
|
||||
invis="インビジブル",
|
||||
},
|
||||
savedata={
|
||||
export="クリップボードにコピー",
|
||||
@@ -821,67 +825,67 @@ return {
|
||||
},
|
||||
},
|
||||
modes={
|
||||
['sprint_10l']= {"スプリント", "10L", "10ライン消せ!"},
|
||||
['sprint_20l']= {"スプリント", "20L", "20ライン消せ!"},
|
||||
['sprint_40l']= {"スプリント", "40L", "40ライン消せ!"},
|
||||
['sprint_100l']= {"スプリント", "100L", "100ライン消せ!"},
|
||||
['sprint_400l']= {"スプリント", "400L", "400ライン消せ!"},
|
||||
['sprint_1000l']= {"スプリント", "1,000L", "1,000ライン消せ!"},
|
||||
['sprintPenta']= {"スプリント", "PENTOMINO", "ペントミノで40ライン"},
|
||||
['sprint_10l']= {"スプリント", "10L", "10line消せ!"},
|
||||
['sprint_20l']= {"スプリント", "20L", "20line消せ!"},
|
||||
['sprint_40l']= {"スプリント", "40L", "40line消せ!"},
|
||||
['sprint_100l']= {"スプリント", "100L", "100line消せ!"},
|
||||
['sprint_400l']= {"スプリント", "400L", "400line消せ!"},
|
||||
['sprint_1000l']= {"スプリント", "1,000L", "1,000line消せ!"},
|
||||
['sprintPenta']= {"スプリント", "PENTOMINO", "ペントミノで40line"},
|
||||
['sprintMPH']= {"スプリント", "MPH", "ミノ順なし\nネクストなし\nホールドなし!"},
|
||||
['sprint123']= {"スプリント", "M123", "モノミノ、ドミノ、トリミノで40ライン"},
|
||||
['secret_grade']= {"裏GM", "", "ガイドに従ってジグザグに穴を作れ!"},
|
||||
['dig_10l']= {"掘り", "10L", "10ライン下穴を掘れ!"},
|
||||
['dig_40l']= {"掘り", "40L", "40ライン下穴を掘れ!"},
|
||||
['dig_100l']= {"掘り", "100L", "100ライン下穴を掘れ!"},
|
||||
['dig_400l']= {"掘り", "400L", "400ライン下穴を掘れ!"},
|
||||
['dig_eff_10l']= {"堀り", "EFFICIENCY 10L", "最小のミノ数で10ライン掘れ!"},
|
||||
['dig_eff_40l']= {"堀り", "EFFICIENCY 40L", "最小のミノ数で40ライン掘れ!"},
|
||||
['dig_eff_100l']= {"堀り", "EFFICIENCY 100L","最小のミノ数で100ライン掘れ!"},
|
||||
['dig_eff_400l']= {"堀り", "EFFICIENCY 400L","最小のミノ数で400ライン掘れ!"},
|
||||
['dig_quad_10l']= {"堀り", "TECHRASH 10L", "techrashだけで10ライン下穴を掘れ!"},
|
||||
['drought_n']= {"ドラウト", "100L", "Iミノ一切無し!"},
|
||||
['drought_l']= {"ドラウト+", "100L", "わったーふ◯っく!"},
|
||||
['marathon_n']= {"マラソン", "NORMAL", "加速する中で200ラインマラソン!"},
|
||||
['marathon_h']= {"マラソン", "HARD", "高速の中で200ラインマラソン!"},
|
||||
['solo_e']= {"バトル", "EASY", "低レベルのAIに勝て!"},
|
||||
['solo_n']= {"バトル", "NORMAL", "通常レベルのAIに勝て!"},
|
||||
['solo_h']= {"バトル", "HARD", "高レベルのAIに勝て!"},
|
||||
['solo_l']= {"バトル", "LUNATIC", "プロレベルのAIに勝て!"},
|
||||
['solo_u']= {"バトル", "ULTIMATE", "神レベルのAIに勝て!"},
|
||||
['techmino49_e']= {"テック 49", "EASY", "低レベルAIと49人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino49_h']= {"テック 49", "HARD", "高レベルAIと49人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino49_u']= {"テック 49", "ULTIMATE", "神レベAIと49人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino99_e']= {"テック 99", "EASY", "低レベルAIと99人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino99_h']= {"テック 99", "HARD", "高レベルAIと99人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino99_u']= {"テック 99", "ULTIMATE", "神レベルAIと99人で勝負\n最後の1人まで生き残れ!"},
|
||||
['round_e']= {"ターン制", "EASY", "ターン制で低レベルAIと勝負!"},
|
||||
['round_n']= {"ターン制", "NORMAL", "ターン制で通常レベルAIと勝負!"},
|
||||
['round_h']= {"ターン制", "HARD", "ターン制で高レベルAIと勝負!"},
|
||||
['round_l']= {"ターン制", "LUNATIC", "ターン制でプロレベルAIと勝負!"},
|
||||
['round_u']= {"ターン制", "ULTIMATE", "ターン制で神レベルAIと勝負!"},
|
||||
['sprint123']= {"スプリント", "M123", "モノミノ、ドミノ、トリミノで40line"},
|
||||
['secret_grade']= {"裏GM", "", "ガイドに従ってジグザグに穴を作れ!"},
|
||||
['dig_10l']= {"掘り", "10L", "10line下穴を掘れ!"},
|
||||
['dig_40l']= {"掘り", "40L", "40line下穴を掘れ!"},
|
||||
['dig_100l']= {"掘り", "100L", "100line下穴を掘れ!"},
|
||||
['dig_400l']= {"掘り", "400L", "400line下穴を掘れ!"},
|
||||
['dig_eff_10l']= {"掘り", "EFFICIENCY 10L", "最小のミノ数で10line掘れ!"},
|
||||
['dig_eff_40l']= {"掘り", "EFFICIENCY 40L", "最小のミノ数で40line掘れ!"},
|
||||
['dig_eff_100l']= {"掘り", "EFFICIENCY 100L","最小のミノ数で100line掘れ!"},
|
||||
['dig_eff_400l']= {"掘り", "EFFICIENCY 400L","最小のミノ数で400line掘れ!"},
|
||||
['dig_quad_10l']= {"掘り", "TECHRASH 10L", "techrashだけで10line下穴を掘れ!"},
|
||||
['drought_n']= {"ドラウト", "100L", "Iミノ一切無し!"},
|
||||
['drought_l']= {"ドラウト+", "100L", "わったーふ◯っく!"},
|
||||
['marathon_n']= {"マラソン", "NORMAL", "加速する中で200lineマラソン!"},
|
||||
['marathon_h']= {"マラソン", "HARD", "高速の中で200lineマラソン!"},
|
||||
['solo_e']= {"バトル", "EASY", "低レベルのAIに勝て!"},
|
||||
['solo_n']= {"バトル", "NORMAL", "通常レベルのAIに勝て!"},
|
||||
['solo_h']= {"バトル", "HARD", "高レベルのAIに勝て!"},
|
||||
['solo_l']= {"バトル", "LUNATIC", "プロレベルのAIに勝て!"},
|
||||
['solo_u']= {"バトル", "ULTIMATE", "神レベルのAIに勝て!"},
|
||||
['techmino49_e']= {"テック 49", "EASY", "低レベルAIと49人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino49_h']= {"テック 49", "HARD", "高レベルAIと49人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino49_u']= {"テック 49", "ULTIMATE", "神レベAIと49人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino99_e']= {"テック 99", "EASY", "低レベルAIと99人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino99_h']= {"テック 99", "HARD", "高レベルAIと99人で勝負\n最後の1人まで生き残れ!"},
|
||||
['techmino99_u']= {"テック 99", "ULTIMATE", "神レベルAIと99人で勝負\n最後の1人まで生き残れ!"},
|
||||
['round_e']= {"ターン制", "EASY", "ターン制で低レベルAIと勝負!"},
|
||||
['round_n']= {"ターン制", "NORMAL", "ターン制で通常レベルAIと勝負!"},
|
||||
['round_h']= {"ターン制", "HARD", "ターン制で高レベルAIと勝負!"},
|
||||
['round_l']= {"ターン制", "LUNATIC", "ターン制でプロレベルAIと勝負!"},
|
||||
['round_u']= {"ターン制", "ULTIMATE", "ターン制で神レベルAIと勝負!"},
|
||||
['big_n']= {"ビッグ", "NORMAL", "小さい盤面でプレイ!"},
|
||||
['big_h']= {"ビッグ", "HARD", "小さい盤面でプレイ!"},
|
||||
['master_n']= {"マスター", "NORMAL", "20G 初心者方へ"},
|
||||
['master_h']= {"マスター", "HARD", "20G 中級者の方へ"},
|
||||
['master_m']= {"マスター", "M21", "20G 上級者の方へ"},
|
||||
['master_final']= {"マスター", "FINAL", "20G その先へ"},
|
||||
['master_ph']= {"マスター", "PHANTASM", "???"},
|
||||
['master_g']= {"マスター", "GRADED", "最高段位を取れ!"},
|
||||
['master_n']= {"マスター", "NORMAL", "20G 初心者方へ"},
|
||||
['master_h']= {"マスター", "HARD", "20G 中級者の方へ"},
|
||||
['master_m']= {"マスター", "M21", "20G 上級者の方へ"},
|
||||
['master_final']= {"マスター", "FINAL", "20G その先へ"},
|
||||
['master_ph']= {"マスター", "PHANTASM", "???"},
|
||||
['master_g']= {"マスター", "GRADED", "最高段位を取れ!"},
|
||||
['master_ex']= {"グランドマスター", "EXTRA", "一瞬よりも短い永遠"},
|
||||
['master_instinct']={"マスター", "INSTINCT", "もしミノが一切見えなくなったら?"},
|
||||
['master_instinct']={"マスター", "INSTINCT", "もしミノが一切見えなくなったら?"},
|
||||
['strategy_e']= {"ストラテジー", "EASY", "20Gでの素早い判断"},
|
||||
['strategy_h']= {"ストラテジー", "HARD", "20Gでの素早い判断"},
|
||||
['strategy_u']= {"ストラテジー", "ULTIMATE", "20Gでの素早い判断"},
|
||||
['strategy_e_plus']={"ストラテジー", "EASY+", "20Gでの素早い判断"},
|
||||
['strategy_h_plus']={"ストラテジー", "HARD+", "20Gでの素早い判断"},
|
||||
['strategy_u_plus']={"ストラテジー", "ULTIMATE+", "20Gでの素早い判断"},
|
||||
['blind_e']= {"目隠し", "HALF", "初心者用"},
|
||||
['blind_n']= {"目隠し", "ALL", "中級者用"},
|
||||
['blind_h']= {"目隠し", "SUDDEN", "上級者用"},
|
||||
['blind_l']= {"目隠し", "SUDDEN+", "プロフェッショナル用"},
|
||||
['blind_u']= {"目隠し", "?", "覚悟は良いかい?"},
|
||||
['blind_wtf']= {"目隠し", "WTF", "まだ覚悟が足りない"},
|
||||
['blind_e']= {"インビジブル", "HALF", "初心者用"},
|
||||
['blind_n']= {"インビジブル", "ALL", "中級者用"},
|
||||
['blind_h']= {"インビジブル", "SUDDEN", "上級者用"},
|
||||
['blind_l']= {"インビジブル", "SUDDEN+", "プロフェッショナル用"},
|
||||
['blind_u']= {"インビジブル", "?", "覚悟は良いかい?"},
|
||||
['blind_wtf']= {"インビジブル", "WTF", "まだ覚悟が足りない"},
|
||||
['classic_e']= {"クラシック", "EASY", "低速クラシック"},
|
||||
['classic_h']= {"クラシック", "HARD", "通常速度クラシック"},
|
||||
['classic_l']= {"クラシック", "LUNATIC", "中高速度クラシック"},
|
||||
@@ -895,16 +899,16 @@ return {
|
||||
['attacker_u']= {"火力王", "ULTIMATE", "攻撃力を磨け!"},
|
||||
['defender_n']= {"相殺王", "NORMAL", "防御力を磨け!"},
|
||||
['defender_l']= {"相殺王", "LUNATIC", "防御力を磨け!"},
|
||||
['dig_h']= {"堀王", "HARD", "掘りを磨け"},
|
||||
['dig_u']= {"堀王", "ULTIMATE", "掘りを磨け"},
|
||||
['dig_h']= {"掘王", "HARD", "掘りを磨け"},
|
||||
['dig_u']= {"掘王", "ULTIMATE", "掘りを磨け"},
|
||||
['c4wtrain_n']= {"C4Wトレーニング", "NORMAL", "無限中開け"},
|
||||
['c4wtrain_l']= {"C4Wトレーニング", "LUNATIC", "無限中開け"},
|
||||
['pctrain_n']= {"パフェトレーニング", "NORMAL", "パフェの練習!"},
|
||||
['pctrain_l']= {"パフェトレーニング", "LUNATIC", "もっと難しいパフェの練習!"},
|
||||
['pc_n']= {"パフェチャレンジ", "NORMAL", "100Line以内で パフェをできるだけたくさん取れ!"},
|
||||
['pc_h']= {"パフェチャレンジ", "HARD", "100Line以内で パフェをできるだけたくさん取れ!"},
|
||||
['pc_l']= {"パフェチャレンジ", "LUNATIC", "100Line以内で パフェをできるだけたくさん取れ!"},
|
||||
['pc_inf']= {"無限パフェチャレンジ", "", "できる限りたくさんのパフェを取れ!"},
|
||||
['pctrain_n']= {"パフェトレーニング", "NORMAL", "パフェの練習!"},
|
||||
['pctrain_l']= {"パフェトレーニング", "LUNATIC", "もっと難しいパフェの練習!"},
|
||||
['pc_n']= {"パフェチャレンジ", "NORMAL", "100Line以内で パフェをできるだけたくさん取れ!"},
|
||||
['pc_h']= {"パフェチャレンジ", "HARD", "100Line以内で パフェをできるだけたくさん取れ!"},
|
||||
['pc_l']= {"パフェチャレンジ", "LUNATIC", "100Line以内で パフェをできるだけたくさん取れ!"},
|
||||
['pc_inf']= {"無限パフェチャレンジ", "", "できる限りたくさんのパフェを取れ!"},
|
||||
['tech_n']= {"テクニック", "NORMAL", "B2Bを繋げ続けよう!"},
|
||||
['tech_n_plus']= {"テクニック", "NORMAL+", "回転入れとパフェだけ!"},
|
||||
['tech_h']= {"テクニック", "HARD", "B2Bを繋げ続けよう!"},
|
||||
@@ -912,7 +916,7 @@ return {
|
||||
['tech_l']= {"テクニック", "LUNATIC", "回転入れとパフェだけ!"},
|
||||
['tech_l_plus']= {"テクニック", "LUNATIC+", "回転入れとパフェだけ!"},
|
||||
['tech_finesse']= {"テクニック", "FINESSE", "最適化!"},
|
||||
['tech_finesse_f']= {"テクニック", "FINESSE+", "最適化はそのまま、普通のライン消去禁止!"},
|
||||
['tech_finesse_f']= {"テクニック", "FINESSE+", "最適化はそのまま、通常line消去禁止!"},
|
||||
['tsd_e']= {"TSDチャレンジ", "EASY", "TSDだけ!"},
|
||||
['tsd_h']= {"TSDチャレンジ", "HARD", "TSDだけ!"},
|
||||
['tsd_u']= {"TSDチャレンジ", "ULTIMATE", "TSDだけ!"},
|
||||
@@ -920,13 +924,13 @@ return {
|
||||
['backfire_h']= {"バックファイヤー", "HARD", "撃った火力が戻ってくる!"},
|
||||
['backfire_l']= {"バックファイヤー", "LUNATIC", "撃った火力が戻ってくる!"},
|
||||
['backfire_u']= {"バックファイヤー", "ULTIMATE", "撃った火力が戻ってくる!"},
|
||||
['sprintAtk']= {"スプリント", "100 Attack", "100ライン送れ!"},
|
||||
['sprintEff']= {"スプリント", "Efficiency", "40ラインの間にできるだけ火力を出せ!"},
|
||||
['zen']= {'禅', "200", "時間制限なしで200ライン消去"},
|
||||
['ultra']= {'ウルトラ', "EXTRA", "2分以内にできるだけ多くの点数を取る"},
|
||||
['infinite']= {"無限", "", "サンドボックス"},
|
||||
['infinite_dig']= {"無限: 掘り", "", "掘れ掘れ掘れ"},
|
||||
['marathon_inf']= {"マラソン", "INFINITE", "ずっとマラソン"},
|
||||
['sprintAtk']= {"スプリント", "100 Attack", "100line送れ!"},
|
||||
['sprintEff']= {"スプリント", "Efficiency", "40lineの間にできるだけ火力を出せ!"},
|
||||
['zen']= {'zen', "200", "時間制限なしで200line消去"},
|
||||
['ultra']= {'ウルトラ', "EXTRA", "2分以内にできるだけ多くの点数を取る"},
|
||||
['infinite']= {"無限", "", "サンドボックス"},
|
||||
['infinite_dig']= {"無限: 掘り", "", "掘れ掘れ掘れ"},
|
||||
['marathon_inf']= {"マラソン", "INFINITE", "ずっとマラソン"},
|
||||
|
||||
['custom_clear']= {"カスタム", "NORMAL"},
|
||||
['custom_puzzle']= {"カスタム", "PUZZLE"},
|
||||
|
||||
@@ -8,6 +8,7 @@ return {
|
||||
playedLong="[Anti-vício] Você andou jogando bastante hoje. Certifique-se de fazer pausas.",
|
||||
playedTooMuch="[Anti-vício] Você esteve jogando demais hoje! Você não pode jogar mais.",
|
||||
-- settingWarn="Modifing uncommon setting, be careful!",
|
||||
-- settingWarn2="This setting takes effect after restart",
|
||||
|
||||
atkModeName={"Aleatório","Emblemas","K.O.s","Atacantes"},
|
||||
royale_remain="$1 Jogadores restantes",
|
||||
@@ -520,6 +521,8 @@ return {
|
||||
power="Informação bateria",
|
||||
-- clean="Fast Draw",
|
||||
fullscreen="Tela cheia",
|
||||
-- portrait="Portrait",
|
||||
-- msaa="MSAA level",
|
||||
|
||||
-- bg_on="Normal B.G.",
|
||||
-- bg_off="No B.G.",
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
return {
|
||||
fallback='en',
|
||||
|
||||
loadText={
|
||||
loadSFX="#!#",
|
||||
loadSample="#~#",
|
||||
@@ -283,6 +282,8 @@ return {
|
||||
power="+.",
|
||||
clean="[]→→O",
|
||||
fullscreen="|←→|",
|
||||
portrait="↑▉↓",
|
||||
msaa="/ _",
|
||||
|
||||
bg_on="__?__",
|
||||
bg_off="__.__",
|
||||
|
||||
@@ -17,6 +17,7 @@ return {
|
||||
playedLong="已经玩很久了!注意休息!",
|
||||
playedTooMuch="今天玩太久啦!打块好玩但也要适可而止哦~",
|
||||
settingWarn="正在修改不常用设置,小心操作!",
|
||||
settingWarn2="该设置需要重启后生效",
|
||||
|
||||
atkModeName={"随机","徽章","击杀","反击"},
|
||||
royale_remain="剩余 $1 名玩家",
|
||||
@@ -256,7 +257,7 @@ return {
|
||||
"",
|
||||
"使用LÖVE引擎",
|
||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||
"仅通过官网 *暂无域名,见词典* 免费下载/更新",
|
||||
"仅通过官网(见主菜单词典) 免费下载/更新",
|
||||
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
|
||||
"若由于被修改的本游戏产生的各种损失作者不负责(怎么负责啊我又没法管)",
|
||||
FNNS and "/" or "请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||
@@ -338,7 +339,7 @@ return {
|
||||
"Airun",
|
||||
"幽灵3383",
|
||||
"",
|
||||
"Performances",
|
||||
"演出",
|
||||
"Electric283",
|
||||
"Hebomai",
|
||||
"",
|
||||
@@ -532,6 +533,8 @@ return {
|
||||
power="电量和时间",
|
||||
clean="绘制优化",
|
||||
fullscreen="全屏",
|
||||
portrait="竖屏",
|
||||
msaa="抗锯齿等级",
|
||||
|
||||
bg_on="普通背景",
|
||||
bg_off="关闭背景",
|
||||
@@ -971,7 +974,6 @@ return {
|
||||
"方块能吃吗",
|
||||
"感觉明明按键了但是没反应?你真的按到了吗?",
|
||||
"感谢群友帮忙想tip",
|
||||
"隔壁不在乎玩家意见但是我们在乎,没人提过的合理建议一定会回应",
|
||||
"隔断消除即将到来!",
|
||||
"还能写些什么tip呢",
|
||||
"好像还没人能用脚打块打到一定水平",
|
||||
@@ -993,7 +995,7 @@ return {
|
||||
"你今天的人品值是(满分100):"..math.random(100),
|
||||
"你们考虑过Z酱的感受吗?没有!你们只考虑你自己。",
|
||||
"配乐是有考虑到模式氛围的哦",
|
||||
"请谨慎向没有方块经验的玩家推荐,会对本游戏的生存环境造成影响,感谢配合。",
|
||||
"拼图与趣味",
|
||||
"请勿使用三只手游玩",
|
||||
"全球目前应该没人能全X评价(大爆炸不算)",
|
||||
"如何O-spin: 一秒转626圈(误",
|
||||
@@ -1019,14 +1021,13 @@ return {
|
||||
"游戏使用un……LÖVE引擎制作",
|
||||
"游戏原声已上架网易云音乐",
|
||||
"有建议的话可以反馈给作者~",
|
||||
"有两个模式是以东方Project里的角色为主题的",
|
||||
"这不是休闲游戏……别怪关卡要求太高,多练吧",
|
||||
"中文方块百科全书:tetris.huijiwiki.com",
|
||||
"众所周知mac不能拿来玩游戏",
|
||||
"作业没做完别玩手机",
|
||||
"作者40行sub26了",
|
||||
"作者电脑上装了11个方块",
|
||||
"作者浏览器收藏夹里有6个方块",
|
||||
"作者电脑上装了16个方块",
|
||||
"作者浏览器收藏夹里有7个方块",
|
||||
"ALLSPIN!",
|
||||
"Am G F G",
|
||||
"B2B2B???",
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
local C=COLOR
|
||||
return {
|
||||
loadText={
|
||||
loadSFX="Load(SFX);",
|
||||
@@ -17,6 +16,7 @@ return {
|
||||
playedLong="PlayedLong=true",
|
||||
playedTooMuch="PlayedTooMuch=true",
|
||||
settingWarn="SettingWarn();",
|
||||
settingWarn2="SettingWarn2();",
|
||||
|
||||
atkModeName={"Random();","Badges();","Kills();","Back();"},
|
||||
royale_remain="LeftPlayers=$1",
|
||||
@@ -205,7 +205,7 @@ return {
|
||||
"",
|
||||
"使用LÖVE引擎",
|
||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||
"仅通过官网 *暂无域名,见词典* 免费下载/更新",
|
||||
"仅通过官网/*见主菜单词典*/ 免费下载/更新",
|
||||
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
|
||||
"若由于被修改的本游戏产生的各种损失作者不负责(怎么负责啊我又没法管)",
|
||||
FNNS and "/" or "请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||
@@ -288,7 +288,7 @@ return {
|
||||
-- "XMiao",
|
||||
"幽灵3383",
|
||||
"",
|
||||
"Performances",
|
||||
"演出",
|
||||
"Electric283",
|
||||
"Hebomai",
|
||||
"",
|
||||
@@ -482,6 +482,8 @@ return {
|
||||
power="Set.Battery",
|
||||
clean="Set.QuickDraw",
|
||||
fullscreen="Set.Fullscreen",
|
||||
portrait="Set.Portrait",
|
||||
msaa="Set.MSAA",
|
||||
|
||||
bg_on="Set.BG(Normal);",
|
||||
bg_off="Set.BG(Off);",
|
||||
|
||||
@@ -17,6 +17,7 @@ return {
|
||||
playedLong="你玩太久了!注意休息!",
|
||||
playedTooMuch="今天玩得太久啦!Techmino好玩但也要注意休息哦~",
|
||||
settingWarn="正在修改不常用設定,小心操作!",
|
||||
settingWarn2="該設定需要重啟後生效",
|
||||
|
||||
atkModeName={"隨機","徽章","K.O.","反擊"},
|
||||
royale_remain="剩下 $1 名玩家",
|
||||
@@ -532,6 +533,8 @@ return {
|
||||
power="電量顯示",
|
||||
clean="渲染優化",
|
||||
fullscreen="全屏幕",
|
||||
portrait="豎屏",
|
||||
msaa="抗鋸齒等級",
|
||||
|
||||
bg_on="普通背景",
|
||||
bg_off="無背景",
|
||||
|
||||
@@ -30,7 +30,6 @@ local hideBoardStencil={
|
||||
down=function() gc_rectangle('fill',0,-300,300,300,6) end,
|
||||
all=function() gc_rectangle('fill',0,-600,300,600,6) end,
|
||||
}
|
||||
local dialFrame=TEXTURE.dial.frame
|
||||
local dialNeedle=TEXTURE.dial.needle
|
||||
local multiple=TEXTURE.multiple
|
||||
local playerborder=TEXTURE.playerBorder
|
||||
@@ -571,13 +570,47 @@ local function _drawNext(P,repMode)
|
||||
end
|
||||
gc_translate(-488,-20)
|
||||
end
|
||||
local function _drawDial(x,y,speed)
|
||||
gc_setColor(1,1,1,.7)
|
||||
gc_draw(dialFrame,x,y)
|
||||
gc_setColor(1,1,1,.3)
|
||||
gc_draw(dialNeedle,x+40,y+40,2.094+(speed<=175 and .02094*speed or 4.712-52.36/(speed-125)),nil,nil,1,1)
|
||||
gc_setColor(.9,.9,.91)
|
||||
setFont(30)GC.mStr(int(speed),x+40,y+19)
|
||||
local _drawDial do
|
||||
local function _getDialBackColor(speed)
|
||||
if speed<60 then return COLOR.H
|
||||
elseif speed<120 then return COLOR.Z
|
||||
elseif speed<180 then return COLOR.lC
|
||||
elseif speed<240 then return COLOR.lG
|
||||
elseif speed<300 then return COLOR.lY
|
||||
elseif speed<420 then return COLOR.O
|
||||
else return COLOR.R
|
||||
end
|
||||
end
|
||||
local function _getDialColor(speed)
|
||||
if speed<60 then return COLOR.Z
|
||||
elseif speed<120 then return COLOR.lC
|
||||
elseif speed<180 then return COLOR.lG
|
||||
elseif speed<240 then return COLOR.lY
|
||||
elseif speed<300 then return COLOR.O
|
||||
else return COLOR.R
|
||||
end
|
||||
end
|
||||
function _drawDial(x,y,speed)
|
||||
local theta=3*math.pi/2+((math.pi*(speed<300 and speed or 150+speed/2)/30)%MATH.tau)
|
||||
|
||||
gc_setColor(0,0,0,.4)
|
||||
gc.circle('fill',x+40,y+40,36)
|
||||
|
||||
gc_setColor(1,1,1)
|
||||
gc_draw(dialNeedle,x+40,y+40,theta,nil,nil,1,1)
|
||||
|
||||
gc_setLineWidth(3)
|
||||
gc_setColor(_getDialBackColor(speed))
|
||||
gc.circle('line',x+40,y+40,37)
|
||||
|
||||
gc_setColor(_getDialColor(speed))
|
||||
if speed<420 then
|
||||
gc.arc('line','open',x+40,y+40,37,3*math.pi/2,theta)
|
||||
else
|
||||
gc.circle('line',x+40,y+40,37)
|
||||
end
|
||||
setFont(30)GC.mStr(int(speed),x+40,y+19)
|
||||
end
|
||||
end
|
||||
local function _drawFinesseCombo_norm(P)
|
||||
if P.finesseCombo>2 then
|
||||
|
||||
@@ -445,7 +445,13 @@ function PLY.newPlayer(id,mini,p)
|
||||
local pData={
|
||||
uid=USER.uid,
|
||||
group=0,
|
||||
} if p then TABLE.coverR(p,pData) end
|
||||
} if p then
|
||||
TABLE.coverR(p,pData)
|
||||
else
|
||||
-- Default pid=1, and empty username
|
||||
pData.uid=1
|
||||
P.username=""
|
||||
end
|
||||
P.uid=pData.uid
|
||||
P.sid=NET.uid_sid[pData.uid] or pData.uid
|
||||
P.group=pData.group
|
||||
|
||||
@@ -600,6 +600,28 @@ do-- function Player:movePosition(x,y,size)
|
||||
TASK.new(task_movePosition,self,x,y,size or self.size)
|
||||
end
|
||||
end
|
||||
do-- function Player:dropPosition(x,y,size)
|
||||
local function task_dropPosition(self)
|
||||
local vy=0
|
||||
local x,y,size=self.x,self.y,self.size
|
||||
while true do
|
||||
yield()
|
||||
y=y+vy
|
||||
vy=vy+.0626
|
||||
self:setPosition(x,y,size)
|
||||
if y>2600 then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
local function check_player(obj,Ptar)
|
||||
return obj.args[1]==Ptar
|
||||
end
|
||||
function Player:dropPosition()
|
||||
TASK.removeTask_iterate(check_player,self)
|
||||
TASK.new(task_dropPosition,self)
|
||||
end
|
||||
end
|
||||
|
||||
local frameColorList={[0]=COLOR.Z,COLOR.lG,COLOR.lB,COLOR.lV,COLOR.lO}
|
||||
function Player:setFrameColor(c)
|
||||
@@ -2654,6 +2676,13 @@ local function update_dead(P,dt)
|
||||
_updateMisc(P,dt)
|
||||
end
|
||||
function Player:_die()
|
||||
do
|
||||
local p=TABLE.find(PLY_ALIVE,self)
|
||||
if p then
|
||||
PLY_ALIVE[p]=PLY_ALIVE[#PLY_ALIVE]
|
||||
rem(PLY_ALIVE)
|
||||
end
|
||||
end
|
||||
self.alive=false
|
||||
self.timing=false
|
||||
self.control=false
|
||||
@@ -2818,7 +2847,6 @@ function Player:lose(force)
|
||||
end
|
||||
self:_die()
|
||||
self.result='lose'
|
||||
do local p=TABLE.find(PLY_ALIVE,self) if p then rem(PLY_ALIVE,p) end end
|
||||
if self.gameEnv.layout=='royale' then
|
||||
self:changeAtk()
|
||||
self.modeData.place=#PLY_ALIVE+1
|
||||
@@ -2862,7 +2890,7 @@ function Player:lose(force)
|
||||
SFX.play('fail')
|
||||
VOC.play('lose')
|
||||
if self.gameEnv.layout=='royale' then
|
||||
BGM.play(' end')
|
||||
BGM.play('end')
|
||||
end
|
||||
gameOver()
|
||||
self:newTask(#PLAYERS>1 and task_lose or task_finish)
|
||||
@@ -2876,6 +2904,9 @@ function Player:lose(force)
|
||||
end
|
||||
|
||||
if #PLY_ALIVE>0 then
|
||||
self:dropPosition()
|
||||
freshPlayerPosition('update')
|
||||
|
||||
local cur=PLY_ALIVE[1].group
|
||||
for i=2,#PLY_ALIVE do
|
||||
local g=PLY_ALIVE[i].group
|
||||
|
||||
@@ -4,7 +4,7 @@ local sin=math.sin
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set()
|
||||
end
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
|
||||
end
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ local slide,pathVis,revKB
|
||||
local function ifGaming() return state==1 end
|
||||
local colorSelector=WIDGET.newSelector{name='color',x=150,y=240,w=200,list={'color1','rainbow','color2','gray','black'},color='lY',disp=function() return color end,code=function(v) if state~=1 then color=v end end,hideF=ifGaming}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('rainbow2')
|
||||
BGM.play('push')
|
||||
board={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}
|
||||
|
||||
@@ -225,7 +225,7 @@ local function skip()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('cubes')
|
||||
BGM.play('truth')
|
||||
board={}
|
||||
|
||||
@@ -29,7 +29,7 @@ local startTime,time
|
||||
local state,progress
|
||||
local frameKeyCount,mistake
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('bg2')
|
||||
BGM.play('way')
|
||||
levelName="A_Z"
|
||||
|
||||
@@ -94,7 +94,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
restart()
|
||||
BGM.play('truth')
|
||||
BG.set('rainbow')
|
||||
|
||||
@@ -153,7 +153,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
reset()
|
||||
BGM.play('truth')
|
||||
end
|
||||
|
||||
@@ -24,12 +24,12 @@ local function _autoReturn()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('none')
|
||||
BGM.stop()
|
||||
reg,val,sym=false,"0",false
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
BGM.play()
|
||||
end
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ local state,timer,score,combo
|
||||
local x,y,vx,vy,ex,ey
|
||||
|
||||
local scene={}
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
pow,ang=0,0
|
||||
state=0
|
||||
timer=0
|
||||
|
||||
@@ -711,20 +711,22 @@ local commands={} do
|
||||
local button=WIDGET.newButton{name='bye',x=640,y=615,w=426,h=100,code=function()
|
||||
TASK.new(function()
|
||||
scene.widgetList.bye.hide=true
|
||||
for _=1,30 do coroutine.yield() end
|
||||
TEST.yieldN(30)
|
||||
log{C.R,"Deleting all data in 10..."}SFX.play('ready')SFX.play('clear_1')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 9..."}SFX.play('ready')SFX.play('clear_1')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 8..."}SFX.play('ready')SFX.play('clear_1')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 7..."}SFX.play('ready')SFX.play('clear_2')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 6..."}SFX.play('ready')SFX.play('clear_2')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 5..."}SFX.play('ready')SFX.play('clear_3')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 4..."}SFX.play('ready')SFX.play('clear_3')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 3..."}SFX.play('ready')SFX.play('clear_4')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 2..."}SFX.play('ready')SFX.play('clear_4')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 1..."}SFX.play('ready')SFX.play('clear_5')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 0..."}SFX.play('start')SFX.play('clear_6')TEST.yieldN(60)
|
||||
outputBox.hide=true TEST.yieldN(26)
|
||||
FILE.clear_s('')love.event.quit()
|
||||
log{C.R,"Deleting all data in 9..."} SFX.play('ready')SFX.play('clear_1')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 8..."} SFX.play('ready')SFX.play('clear_1')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 7..."} SFX.play('ready')SFX.play('clear_2')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 6..."} SFX.play('ready')SFX.play('clear_2')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 5..."} SFX.play('ready')SFX.play('clear_3')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 4..."} SFX.play('ready')SFX.play('clear_3')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 3..."} SFX.play('ready')SFX.play('clear_4')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 2..."} SFX.play('ready')SFX.play('clear_4')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 1..."} SFX.play('ready')SFX.play('clear_5')TEST.yieldN(60)
|
||||
log{C.R,"Deleting all data in 0..."} SFX.play('start')SFX.play('clear_6')TEST.yieldN(60)
|
||||
outputBox.hide=true
|
||||
TEST.yieldN(26)
|
||||
FILE.clear_s('')
|
||||
love.event.quit()
|
||||
end)
|
||||
end}
|
||||
button:setObject("Techmino is fun. Bye.")
|
||||
@@ -1014,7 +1016,7 @@ userG.the_key=first_key
|
||||
|
||||
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
WIDGET.focus(inputBox)
|
||||
BG.set('none')
|
||||
end
|
||||
|
||||
@@ -45,7 +45,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
cubesX={} for i=1,40 do cubesX[i]=rnd()*16-8 end
|
||||
cubesY={} for i=1,40 do cubesY[i]=i/40*9 end
|
||||
lastCube=1
|
||||
|
||||
@@ -33,7 +33,7 @@ local function restart()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
restart()
|
||||
state='menu'
|
||||
BGM.play('hang out')
|
||||
|
||||
@@ -197,7 +197,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
reset()
|
||||
BG.set('fixColor',.26,.26,.26)
|
||||
BGM.play(bgm)
|
||||
|
||||
@@ -243,7 +243,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
invis=false
|
||||
newGame()
|
||||
BGM.play('truth')
|
||||
|
||||
@@ -105,7 +105,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('fixColor',.26,.62,.26)
|
||||
_newGame()
|
||||
selected=false
|
||||
|
||||
@@ -29,7 +29,7 @@ local function _reset()
|
||||
freshLevel()
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
state=1
|
||||
timeUsed=0
|
||||
level=0
|
||||
|
||||
@@ -13,7 +13,7 @@ local offset
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
inst='lead'
|
||||
offset=0
|
||||
end
|
||||
|
||||
@@ -27,7 +27,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
state=0
|
||||
ang,pos=0,-tau/4
|
||||
timer=50
|
||||
|
||||
@@ -14,7 +14,7 @@ local ry=0-- Rotation Y
|
||||
|
||||
local p1,p2-- Player data
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('none')
|
||||
BGM.play('way')
|
||||
state=0
|
||||
|
||||
@@ -15,7 +15,7 @@ local function reset()
|
||||
s1,s2=0,0
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
reset()
|
||||
BG.set('none')
|
||||
end
|
||||
|
||||
@@ -11,7 +11,7 @@ local startTime,time
|
||||
local state,progress
|
||||
local tapFX,mistake
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('space')
|
||||
BGM.play('way')
|
||||
board={}
|
||||
|
||||
@@ -23,7 +23,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
state=0
|
||||
time1=STRING.time(0)
|
||||
time2=STRING.time(0)
|
||||
|
||||
@@ -8,7 +8,7 @@ local scene={}
|
||||
local lastKey,keyTime
|
||||
local speed,maxSpeed=0,260
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
lastKey=nil
|
||||
speed=0
|
||||
keyTime={} for i=1,40 do keyTime[i]=-1e99 end
|
||||
|
||||
@@ -54,7 +54,7 @@ local function reset()
|
||||
fallingTimer=false
|
||||
failPos=false
|
||||
end
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('rainbow2')
|
||||
BGM.play('truth')
|
||||
preview={}
|
||||
|
||||
@@ -264,7 +264,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
player:reset()
|
||||
BGM.play('truth')
|
||||
end
|
||||
|
||||
@@ -24,12 +24,12 @@ local sList={
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
destroyPlayers()
|
||||
BG.set(CUSTOMENV.bg)
|
||||
BGM.play(CUSTOMENV.bgm)
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveFile(CUSTOMENV,'conf/customEnv')
|
||||
BGM.play()
|
||||
end
|
||||
|
||||
@@ -117,14 +117,14 @@ local function _pDraw()
|
||||
while #F>0 and isEmpty(F[#F]) do rem(F) end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
curPen=false
|
||||
penMode=0
|
||||
penX,penY=1,1
|
||||
demo=false
|
||||
page=1
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveFile(DATA.copyBoards(),'conf/customBoards')
|
||||
end
|
||||
|
||||
|
||||
@@ -9,11 +9,11 @@ local scene={}
|
||||
local input-- Input buffer
|
||||
local cur-- Cursor position
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
input=""
|
||||
cur=#MISSION
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveFile(DATA.copyMission(),'conf/customMissions')
|
||||
end
|
||||
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
local gc,sys=love.graphics,love.system
|
||||
local sys=love.system
|
||||
local kb=love.keyboard
|
||||
|
||||
local sin=math.sin
|
||||
local ins,rem=table.insert,table.remove
|
||||
local gc_setColor,gc_print=gc.setColor,gc.print
|
||||
local gc_setColor,gc_print=GC.setColor,GC.print
|
||||
|
||||
local scene={}
|
||||
|
||||
local cur-- Cursor position
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
cur=#BAG
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveFile(DATA.copySequence(),'conf/customSequence')
|
||||
end
|
||||
|
||||
@@ -112,12 +112,12 @@ function scene.keyDown(key)
|
||||
end
|
||||
end
|
||||
|
||||
local blockCharWidth={} for i=1,#BLOCK_CHARS do blockCharWidth[i]=gc.newText(FONT.get(60),BLOCK_CHARS[i]):getWidth() end
|
||||
local blockCharWidth={} for i=1,#BLOCK_CHARS do blockCharWidth[i]=GC.newText(FONT.get(60),BLOCK_CHARS[i]):getWidth() end
|
||||
function scene.draw()
|
||||
-- Draw frame
|
||||
gc_setColor(COLOR.Z)
|
||||
gc.setLineWidth(2)
|
||||
gc.rectangle('line',100,110,1080,260,5)
|
||||
GC.setLineWidth(2)
|
||||
GC.rectangle('line',100,110,1080,260,5)
|
||||
|
||||
-- Draw sequence
|
||||
local BLOCK_COLORS=BLOCK_COLORS
|
||||
@@ -166,7 +166,7 @@ function scene.draw()
|
||||
|
||||
-- Draw cursor
|
||||
gc_setColor(.5,1,.5,.6+.4*sin(TIME()*6.26))
|
||||
gc.line(cx-5,cy-20,cx-5,cy+20)
|
||||
GC.line(cx-5,cy-20,cx-5,cy+20)
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
|
||||
@@ -4,7 +4,7 @@ local scene={}
|
||||
|
||||
local timer
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
timer=1
|
||||
scene.widgetList.pause.x=
|
||||
SETTING.menuPos=='right' and 1195 or
|
||||
|
||||
@@ -75,7 +75,7 @@ local function _search()
|
||||
lastSearch=input
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
dict=require("parts.language.dict_"..(SETTING.locale:find'zh' and 'zh' or SETTING.locale:find'ja' and 'ja' or 'en'))
|
||||
_scanDict(dict)
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ local errorShot,errorInfo
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BGcolor=math.random()>.026 and {.3,.5,.9} or {.62,.3,.926}
|
||||
sysAndScn=SYSTEM.."-"..VERSION.string.." scene:"..Z.getErr('#').scene
|
||||
errorText=LOADED and text.errorMsg or "An error has occurred while the game was loading.\nAn error log has been created so you can send it to the author."
|
||||
@@ -34,7 +34,7 @@ end
|
||||
|
||||
scene.widgetList={
|
||||
WIDGET.newKey{name='console',x=940,y=640,w=170,h=80,font=65,fText=CHAR.icon.console,code=goScene'app_console'},
|
||||
WIDGET.newKey{name='quit',x=1140,y=640,w=170,h=80,font=40,fText=CHAR.icon.cross_thick,code=love.event.quit},
|
||||
WIDGET.newKey{name='quit',x=1140,y=640,w=170,h=80,font=40,fText=CHAR.icon.cross_thick,code=goScene('quit','none')},
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -133,7 +133,7 @@ local function _checkGameKeyDown(key)
|
||||
return true-- No key pressed
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
if GAME.init then
|
||||
resetGameData()
|
||||
GAME.init=false
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('cubes')
|
||||
scene.widgetList.texts:setTexts(require"parts.updateLog":split("\n"))
|
||||
end
|
||||
|
||||
@@ -20,7 +20,7 @@ local curLang=1
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveSettings()
|
||||
end
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
local scene={}
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('cubes')
|
||||
local fileData=love.filesystem.read("legals.md")
|
||||
if fileData then
|
||||
|
||||
@@ -110,22 +110,22 @@ local loadingThread=coroutine.wrap(function()
|
||||
return 'finish'
|
||||
end)
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
studioLogo=GC.newText(getFont(90),"26F Studio")
|
||||
progress=0
|
||||
maxProgress=10
|
||||
t1,t2=0,0-- Timer
|
||||
animeType={} for i=1,#SVG_TITLE_FILL do animeType[i]=math.random(#titleTransform) end-- Random animation type
|
||||
end
|
||||
function scene.sceneBack()
|
||||
love.event.quit()
|
||||
function scene.leave()
|
||||
SCN.go('quit','none')
|
||||
end
|
||||
|
||||
function scene.mouseDown()
|
||||
if LOADED then
|
||||
if FIRSTLAUNCH then
|
||||
SCN.push('main')
|
||||
SCN.swapTo('lang')
|
||||
SCN.go('lang')
|
||||
else
|
||||
SCN.go(SETTING.simpMode and 'main_simple' or 'main')
|
||||
end
|
||||
@@ -134,7 +134,7 @@ end
|
||||
scene.touchDown=scene.mouseDown
|
||||
function scene.keyDown(key)
|
||||
if key=='escape' then
|
||||
love.event.quit()
|
||||
SCN.go('quit','none')
|
||||
else
|
||||
scene.mouseDown()
|
||||
end
|
||||
|
||||
@@ -29,7 +29,7 @@ local function _paste()
|
||||
MES.new('warn',text.wrongCode)
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
scene.widgetList.email:setText(USER.email or "")
|
||||
scene.widgetList.code:clear()
|
||||
end
|
||||
|
||||
@@ -15,7 +15,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
showEmail=false
|
||||
emailBox.secret=true
|
||||
emailBox:setText(USER.email)
|
||||
|
||||
@@ -18,7 +18,7 @@ local enterConsole=coroutine.wrap(function()
|
||||
Snd('bell',.6,'A4',.7,'A5',1,'A6')SFX.play('ren_mega')SCN.go('app_console')coroutine.yield()
|
||||
end
|
||||
end)
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
if THEME.cur=='halloween' then
|
||||
TASK.new(function()
|
||||
TEST.yieldT(.26)
|
||||
|
||||
@@ -2,7 +2,7 @@ local scene={}
|
||||
|
||||
local tip=GC.newText(getFont(30),"")
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
tip:set(text.getTip())
|
||||
BG.set()
|
||||
end
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('cubes')
|
||||
local fileData=FILE.load('parts/language/manual_'..(SETTING.locale:find'zh' and 'zh' or SETTING.locale:find'ja' and 'ja' or 'en')..'.txt','-string')
|
||||
if fileData then
|
||||
|
||||
@@ -38,7 +38,7 @@ local function _toggleMod(M,back)
|
||||
scene.widgetList.unranked.hide=scoreValid()
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
selected=false
|
||||
scene.widgetList.unranked.hide=scoreValid()
|
||||
BG.set('tunnel')
|
||||
|
||||
@@ -24,7 +24,7 @@ local touchDist
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set()
|
||||
mapCam.zoomK=SCN.prev=='main' and 5 or 1
|
||||
visibleModes={}-- 1=unlocked, 2=locked but visible
|
||||
|
||||
@@ -23,7 +23,7 @@ local selected-- Music selected
|
||||
local bgmList=BGM.getList()
|
||||
if #bgmList==0 then bgmList={"[NO BGM]"} end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
playing=BGM.getPlaying()[1]
|
||||
selected=TABLE.find(bgmList,playing) or 1
|
||||
end
|
||||
@@ -111,9 +111,16 @@ function scene.draw()
|
||||
GC.shadedPrint(playing,710,508,'left',2)
|
||||
GC.setColor(sin(t*.5)*.2+.8,sin(t*.7)*.2+.8,sin(t)*.2+.8)
|
||||
GC.print(playing,710,508)
|
||||
|
||||
setFont(35)
|
||||
GC.setColor(1,sin(t*2.6)*.5+.5,sin(t*2.6)*.5+.5)
|
||||
GC.print(author[playing] or "MrZ",670,465)
|
||||
local name=author[playing] or "MrZ"
|
||||
GC.setColor(.26,.26,.26)
|
||||
GC.print(name,670-1,465-1)
|
||||
GC.print(name,670-1,465+1)
|
||||
GC.print(name,670+1,465-1)
|
||||
GC.print(name,670+1,465+1)
|
||||
GC.setColor(1,sin(t*2.6)*.3+.7,sin(t*2.6)*.3+.7)
|
||||
GC.print(name,670,465)
|
||||
|
||||
setFont(20)
|
||||
GC.setColor(COLOR.Z)
|
||||
|
||||
@@ -59,7 +59,7 @@ end
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
noTouch=not SETTING.VKSwitch
|
||||
playing=false
|
||||
lastUpstreamTime=0
|
||||
@@ -73,7 +73,7 @@ function scene.sceneInit()
|
||||
GAME.prevBG=false
|
||||
end
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
TASK.unlock('netPlaying')
|
||||
end
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ local gc=love.graphics
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('league')
|
||||
BGM.play('exploration')
|
||||
end
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set()
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
NET.ws_close()
|
||||
TASK.removeTask_code(NET.ws_update)
|
||||
end
|
||||
|
||||
@@ -50,11 +50,11 @@ local function _createRoom()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
sure=0
|
||||
destroyPlayers()
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
BGM.play()
|
||||
end
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ local function _fetchRoom()
|
||||
end
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set()
|
||||
_fetchRoom()
|
||||
end
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
local gc=love.graphics
|
||||
local sin,log=math.sin,math.log10
|
||||
|
||||
local GAME,SCR=GAME,SCR
|
||||
local setFont,mStr=FONT.set,GC.mStr
|
||||
local sin,log=math.sin,math.log10
|
||||
local GC=GC
|
||||
|
||||
local scene={}
|
||||
|
||||
@@ -17,9 +15,9 @@ local rank-- Current rank
|
||||
local trophy-- Current trophy
|
||||
local trophyColor-- Current trophy color
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
page=0
|
||||
if SCN.prev:find("setting") then
|
||||
if type(SCN.prev)=='string' and SCN.prev:find("setting") then
|
||||
TEXT.show(text.needRestart,640,410,50,'fly',.6)
|
||||
end
|
||||
local P1=PLAYERS[1]
|
||||
@@ -116,7 +114,7 @@ function scene.sceneInit()
|
||||
GAME.prevBG=false
|
||||
end
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
trySave()
|
||||
end
|
||||
|
||||
@@ -181,7 +179,7 @@ local hexList={1,0,.5,1.732*.5,-.5,1.732*.5}
|
||||
for i=1,6 do hexList[i]=hexList[i]*150 end
|
||||
local textPos={90,131,-90,131,-200,-25,-90,-181,90,-181,200,-25}
|
||||
local dataPos={90,143,-90,143,-200,-13,-90,-169,90,-169,200,-13}
|
||||
local tasText=gc.newText(getFont(100),"TAS")
|
||||
local tasText=GC.newText(getFont(100),"TAS")
|
||||
function scene.draw()
|
||||
if timer1<1 or GAME.result then
|
||||
SCN.scenes.game.draw()
|
||||
@@ -190,157 +188,157 @@ function scene.draw()
|
||||
-- Dark BG
|
||||
local _=timer1
|
||||
if GAME.result then _=_*.76 end
|
||||
gc.setColor(.12,.12,.12,_)
|
||||
gc.replaceTransform(SCR.origin)
|
||||
gc.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
gc.replaceTransform(SCR.xOy)
|
||||
GC.setColor(.12,.12,.12,_)
|
||||
GC.replaceTransform(SCR.origin)
|
||||
GC.rectangle('fill',0,0,SCR.w,SCR.h)
|
||||
GC.replaceTransform(SCR.xOy)
|
||||
|
||||
gc.setColor(.97,.97,.97,timer1)
|
||||
GC.setColor(.97,.97,.97,timer1)
|
||||
|
||||
-- Result Text
|
||||
mDraw(GAME.result and TEXTOBJ[GAME.result] or TEXTOBJ.pause,640,70-10*(5-timer1*5)^1.5)
|
||||
|
||||
-- Mode Info (outside)
|
||||
gc.draw(TEXTOBJ.modeName,745-TEXTOBJ.modeName:getWidth(),143)
|
||||
GC.draw(TEXTOBJ.modeName,745-TEXTOBJ.modeName:getWidth(),143)
|
||||
|
||||
-- Level rank
|
||||
if RANK_CHARS[GAME.rank] then
|
||||
gc.push('transform')
|
||||
gc.translate(1050,5)
|
||||
setFont(80)
|
||||
gc.setColor(0,0,0,timer1*.7)
|
||||
gc.print(RANK_CHARS[GAME.rank],-5,-4,nil,1.5)
|
||||
GC.push('transform')
|
||||
GC.translate(1050,5)
|
||||
FONT.set(80)
|
||||
GC.setColor(0,0,0,timer1*.7)
|
||||
GC.print(RANK_CHARS[GAME.rank],-5,-4,nil,1.5)
|
||||
local L=RANK_COLORS[GAME.rank]
|
||||
gc.setColor(L[1],L[2],L[3],timer1)
|
||||
gc.print(RANK_CHARS[GAME.rank],0,0,nil,1.5)
|
||||
gc.pop()
|
||||
GC.setColor(L[1],L[2],L[3],timer1)
|
||||
GC.print(RANK_CHARS[GAME.rank],0,0,nil,1.5)
|
||||
GC.pop()
|
||||
end
|
||||
|
||||
if GAME.tasUsed then
|
||||
gc.setColor(.97,.97,.97,timer1*.08)
|
||||
GC.setColor(.97,.97,.97,timer1*.08)
|
||||
mDraw(tasText,870,395,.3,2.6)
|
||||
end
|
||||
|
||||
-- Big info frame
|
||||
if PLAYERS[1].frameRun>=180 then
|
||||
gc.push('transform')
|
||||
gc.translate(560,205)
|
||||
gc.setLineWidth(2)
|
||||
GC.push('transform')
|
||||
GC.translate(560,205)
|
||||
GC.setLineWidth(2)
|
||||
|
||||
-- Pause Info (outside)
|
||||
setFont(25)
|
||||
FONT.set(25)
|
||||
if GAME.pauseCount>0 then
|
||||
gc.setColor(.97,.97,.97,timer1*.06)
|
||||
gc.rectangle('fill',-5,390,620,36,8)
|
||||
gc.setColor(.97,.97,.97,timer1)
|
||||
gc.rectangle('line',-5,390,620,36,8)
|
||||
mStr(("%s:[%d] %.2fs"):format(text.pauseCount,GAME.pauseCount,GAME.pauseTime),305,389)
|
||||
GC.setColor(.97,.97,.97,timer1*.06)
|
||||
GC.rectangle('fill',-5,390,620,36,8)
|
||||
GC.setColor(.97,.97,.97,timer1)
|
||||
GC.rectangle('line',-5,390,620,36,8)
|
||||
GC.mStr(("%s:[%d] %.2fs"):format(text.pauseCount,GAME.pauseCount,GAME.pauseTime),305,389)
|
||||
end
|
||||
|
||||
-- Pages
|
||||
if page==0 then
|
||||
-- Frame
|
||||
gc.setColor(.97,.97,.97,timer2*.06)
|
||||
gc.rectangle('fill',-5,-5,620,380,8)
|
||||
gc.setColor(.97,.97,.97,timer2)
|
||||
gc.rectangle('line',-5,-5,620,380,8)
|
||||
GC.setColor(.97,.97,.97,timer2*.06)
|
||||
GC.rectangle('fill',-5,-5,620,380,8)
|
||||
GC.setColor(.97,.97,.97,timer2)
|
||||
GC.rectangle('line',-5,-5,620,380,8)
|
||||
|
||||
-- Game statistics
|
||||
gc.push('transform')
|
||||
gc.scale(.85)
|
||||
gc.setLineWidth(2)
|
||||
GC.push('transform')
|
||||
GC.scale(.85)
|
||||
GC.setLineWidth(2)
|
||||
|
||||
-- Stats
|
||||
_=form
|
||||
setFont(30)
|
||||
gc.setColor(.97,.97,.97,timer2)
|
||||
FONT.set(30)
|
||||
GC.setColor(.97,.97,.97,timer2)
|
||||
for i=1,10 do
|
||||
gc.print(text.pauseStat[i],5,43*(i-1)+2)
|
||||
gc.printf(_[i],210,43*(i-1)+2,500,'right')
|
||||
GC.print(text.pauseStat[i],5,43*(i-1)+2)
|
||||
GC.printf(_[i],210,43*(i-1)+2,500,'right')
|
||||
end
|
||||
|
||||
-- Finesse rank & trophy
|
||||
if rank then
|
||||
setFont(40)
|
||||
gc.setColor(.7,.7,.7,timer2)
|
||||
gc.print(rank,405,383)
|
||||
FONT.set(40)
|
||||
GC.setColor(.7,.7,.7,timer2)
|
||||
GC.print(rank,405,383)
|
||||
if trophy then
|
||||
setFont(30)
|
||||
gc.setColor(trophyColor[1],trophyColor[2],trophyColor[3],timer2*2-1)
|
||||
gc.printf(trophy,95-120*(1-timer2^.5),390,300,'right')
|
||||
FONT.set(30)
|
||||
GC.setColor(trophyColor[1],trophyColor[2],trophyColor[3],timer2*2-1)
|
||||
GC.printf(trophy,95-120*(1-timer2^.5),390,300,'right')
|
||||
end
|
||||
end
|
||||
gc.pop()
|
||||
GC.pop()
|
||||
elseif page==1 then
|
||||
-- Radar Chart
|
||||
gc.setLineWidth(1)
|
||||
gc.push('transform')
|
||||
gc.translate(310,185)
|
||||
GC.setLineWidth(1)
|
||||
GC.push('transform')
|
||||
GC.translate(310,185)
|
||||
|
||||
-- Polygon
|
||||
gc.push('transform')
|
||||
gc.scale((3-2*timer2)*timer2)
|
||||
gc.setColor(.97,.97,.97,timer2*(.5+.3*sin(TIME()*6.26)))
|
||||
GC.push('transform')
|
||||
GC.scale((3-2*timer2)*timer2)
|
||||
GC.setColor(.97,.97,.97,timer2*(.5+.3*sin(TIME()*6.26)))
|
||||
GC.regRoundPolygon('line',0,0,120,6,8)
|
||||
gc.setColor(chartColor[1],chartColor[2],chartColor[3],timer2*.626)
|
||||
GC.setColor(chartColor[1],chartColor[2],chartColor[3],timer2*.626)
|
||||
for i=1,9,2 do
|
||||
gc.polygon('fill',0,0,val[i],val[i+1],val[i+2],val[i+3])
|
||||
GC.polygon('fill',0,0,val[i],val[i+1],val[i+2],val[i+3])
|
||||
end
|
||||
gc.polygon('fill',0,0,val[11],val[12],val[1],val[2])
|
||||
gc.setColor(.97,.97,.97,timer2)
|
||||
GC.polygon('fill',0,0,val[11],val[12],val[1],val[2])
|
||||
GC.setColor(.97,.97,.97,timer2)
|
||||
for i=1,9,2 do
|
||||
gc.line(val[i],val[i+1],val[i+2],val[i+3])
|
||||
GC.line(val[i],val[i+1],val[i+2],val[i+3])
|
||||
end
|
||||
gc.line(val[11],val[12],val[1],val[2])
|
||||
gc.pop()
|
||||
GC.line(val[11],val[12],val[1],val[2])
|
||||
GC.pop()
|
||||
|
||||
-- Texts
|
||||
local C
|
||||
_=TIME()%6.2832
|
||||
if _>3.142 then
|
||||
gc.setColor(.97,.97,.97,-timer2*sin(_))
|
||||
setFont(35)
|
||||
GC.setColor(.97,.97,.97,-timer2*sin(_))
|
||||
FONT.set(35)
|
||||
C,_=text.radar,textPos
|
||||
else
|
||||
gc.setColor(.97,.97,.97,timer2*sin(_))
|
||||
setFont(20)
|
||||
GC.setColor(.97,.97,.97,timer2*sin(_))
|
||||
FONT.set(20)
|
||||
C,_=radar,dataPos
|
||||
end
|
||||
for i=1,6 do
|
||||
mStr(C[i],_[2*i-1],_[2*i])
|
||||
GC.mStr(C[i],_[2*i-1],_[2*i])
|
||||
end
|
||||
gc.pop()
|
||||
GC.pop()
|
||||
end
|
||||
gc.pop()
|
||||
GC.pop()
|
||||
end
|
||||
|
||||
-- Mods
|
||||
gc.push('transform')
|
||||
gc.translate(131,600)
|
||||
gc.scale(.65)
|
||||
GC.push('transform')
|
||||
GC.translate(131,600)
|
||||
GC.scale(.65)
|
||||
if #GAME.mod>0 then
|
||||
gc.setLineWidth(2)
|
||||
GC.setLineWidth(2)
|
||||
if scoreValid() then
|
||||
gc.setColor(.7,.7,.7,timer1)
|
||||
gc.rectangle('line',-5,-5,500,150,8)
|
||||
gc.setColor(.7,.7,.7,timer1*.05)
|
||||
gc.rectangle('fill',-5,-5,500,150,8)
|
||||
GC.setColor(.7,.7,.7,timer1)
|
||||
GC.rectangle('line',-5,-5,500,150,8)
|
||||
GC.setColor(.7,.7,.7,timer1*.05)
|
||||
GC.rectangle('fill',-5,-5,500,150,8)
|
||||
else
|
||||
gc.setColor(.8,0,0,timer1)
|
||||
gc.rectangle('line',-5,-5,500,150,8)
|
||||
gc.setColor(1,0,0,timer1*.05)
|
||||
gc.rectangle('fill',-5,-5,500,150,8)
|
||||
GC.setColor(.8,0,0,timer1)
|
||||
GC.rectangle('line',-5,-5,500,150,8)
|
||||
GC.setColor(1,0,0,timer1*.05)
|
||||
GC.rectangle('fill',-5,-5,500,150,8)
|
||||
end
|
||||
setFont(35)
|
||||
FONT.set(35)
|
||||
for _,M in next,MODOPT do
|
||||
if M.sel>0 then
|
||||
_=M.color
|
||||
gc.setColor(_[1],_[2],_[3],timer1)
|
||||
mStr(M.id,35+M.no%8*60,math.floor(M.no/8)*45)
|
||||
GC.setColor(_[1],_[2],_[3],timer1)
|
||||
GC.mStr(M.id,35+M.no%8*60,math.floor(M.no/8)*45)
|
||||
end
|
||||
end
|
||||
end
|
||||
gc.pop()
|
||||
GC.pop()
|
||||
end
|
||||
|
||||
scene.widgetList={
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
if SYSTEM~="iOS" then
|
||||
function scene.enter()
|
||||
if SYSTEM=="iOS" then
|
||||
MES.update(1e99)
|
||||
Z.setPowerInfo(false)
|
||||
Z.setClickFX(false)
|
||||
VERSION.string=""
|
||||
MES.new('error',"Please swipe up or press Home button to quit Techmino on iOS",1e99)
|
||||
else
|
||||
if math.random()>.0000626 then
|
||||
love.timer.sleep(.26)
|
||||
love.event.quit()
|
||||
else
|
||||
error("So lucky! 0.00626% to get this!! You can quit the game now.")
|
||||
end
|
||||
else
|
||||
MES.update(1e99)
|
||||
Z.setPowerInfo(false)
|
||||
Z.setClickFX(false)
|
||||
VERSION.string=""
|
||||
MES.new('error',"Please swipe up or press Home button to quit Techmino on iOS",1e99)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ local function _updateButtonVisibility()
|
||||
scene.widgetList[i].hide=hide
|
||||
end
|
||||
end
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set()
|
||||
listBox:setList(REPLAY)
|
||||
_updateButtonVisibility()
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
local logged
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.enter()
|
||||
logged=false
|
||||
end
|
||||
|
||||
local function _dumpCB(T)
|
||||
love.system.setClipboardText(STRING.packText(TABLE.dump(T)))
|
||||
MES.new('check',text.exportSuccess)
|
||||
@@ -79,9 +85,9 @@ scene.widgetList={
|
||||
end},
|
||||
|
||||
WIDGET.newText{name='couldSave', x=55,y=485,color='lB',align='L',font=50},
|
||||
WIDGET.newText{name='notLogin', x=55,y=550,color='dB',align='L',font=30,hideF=function() return WS.status('user')=='running' end},
|
||||
WIDGET.newButton{name='upload', x=190,y=610,w=280,h=90,color='lB',font=25,code=NET.uploadSave,hideF=function() return WS.status('user')~='running' end},
|
||||
WIDGET.newButton{name='download', x=490,y=610,w=280,h=90,color='lB',font=25,code=NET.downloadSave,hideF=function() return WS.status('user')~='running' end},
|
||||
WIDGET.newText{name='notLogin', x=55,y=550,color='C',align='L',font=30,hideF=function() return logged end},
|
||||
WIDGET.newButton{name='upload', x=190,y=610,w=280,h=90,color='lB',font=25,code=NET.uploadSave,hideF=function() return not logged end},
|
||||
WIDGET.newButton{name='download', x=490,y=610,w=280,h=90,color='lB',font=25,code=NET.downloadSave,hideF=function() return not logged end},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ local scene={}
|
||||
local das,arr
|
||||
local pos,dir,wait
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
das,arr=SETTING.das,SETTING.arr
|
||||
pos,dir,wait=0,1,30
|
||||
BG.set('bg1')
|
||||
|
||||
@@ -2,10 +2,10 @@ local gc=love.graphics
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set()
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveSettings()
|
||||
end
|
||||
|
||||
@@ -43,7 +43,7 @@ scene.widgetList={
|
||||
WIDGET.newButton{name='touch', x=990, y=220, w=320,h=80,color=not MOBILE and 'dH',font=35, code=goScene'setting_touch',hideF=function() return not SETTING.VKSwitch end},
|
||||
WIDGET.newSwitch{name='showVK', x=1100, y=150, lim=400, disp=SETval('VKSwitch'), code=SETrev('VKSwitch')},
|
||||
WIDGET.newSlider{name='reTime', x=330, y=320, w=300,lim=180,axis={.5,3,.25},disp=SETval('reTime'), code=SETsto('reTime'),show=SETval('reTime')},
|
||||
WIDGET.newSelector{name='RS', x=300, y=420, w=300,color='S', disp=SETval('RS'), code=SETsto('RS'),list={'TRS','SRS','SRS_plus','SRS_X','BiRS','ARS_Z','DRS_weak','ASC','ASC_plus','C2','C2_sym','Classic','Classic_plus','None','None_plus'}},
|
||||
WIDGET.newSelector{name='RS', x=300, y=420, w=300,color='S', disp=SETval('RS'), code=SETsto('RS'),list={'TRS','SRS','SRS_plus','SRS_X','BiRS','ARS_Z','DRS_weak','ASC','ASC_plus','C2','C2_sym','N64','N64_plus','Classic','Classic_plus','None','None_plus'}},
|
||||
WIDGET.newSelector{name='menuPos',x=980, y=320, w=300,color='O', disp=SETval('menuPos'), code=SETsto('menuPos'),list={'left','middle','right'}},
|
||||
WIDGET.newSwitch{name='sysCursor',x=1060, y=400, lim=580, disp=SETval('sysCursor'),code=function() SETTING.sysCursor=not SETTING.sysCursor applySettings() end},
|
||||
WIDGET.newSwitch{name='autoPause',x=1060, y=470, lim=580, disp=SETval('autoPause'),code=SETrev('autoPause')},
|
||||
|
||||
@@ -98,12 +98,12 @@ local function _freshKeyList()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
selected=false
|
||||
_freshKeyList()
|
||||
BG.set('none')
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveFile(KEY_MAP,'conf/key')
|
||||
end
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ local playEgg=WIDGET.newButton{name='playEgg', x=1140,y=540,w=140,h=65,color='l
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
selEggMode=false
|
||||
scene.widgetList.playEgg.hide=true
|
||||
BG.set()
|
||||
|
||||
@@ -8,7 +8,7 @@ local last1,last2-- Last touch/sound time
|
||||
local sfxPack=SETTING.sfxPack
|
||||
local vocPack=SETTING.vocPack
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
last1,last2=0,0
|
||||
sfxPack=SETTING.sfxPack
|
||||
vocPack=SETTING.vocPack
|
||||
@@ -16,7 +16,7 @@ function scene.sceneInit()
|
||||
scene.widgetList.vocPack:reset()
|
||||
BG.set()
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveSettings()
|
||||
end
|
||||
|
||||
@@ -74,9 +74,6 @@ function scene.draw()
|
||||
elseif vocPack=="miku" then
|
||||
gc.translate(700,320+12*sin(TIME()*.5))
|
||||
gc.draw(IMG.mikuCH,nil,nil,nil,.8)
|
||||
elseif vocPack=="rin" then
|
||||
gc.translate(820,280+12*sin(TIME()*.5))
|
||||
gc.draw(IMG.rinCH,nil,nil,nil,.8)
|
||||
end
|
||||
gc.pop()
|
||||
end
|
||||
|
||||
@@ -31,12 +31,12 @@ local function _load2()
|
||||
end
|
||||
end
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('rainbow')
|
||||
defaultSetSelect=1
|
||||
selected=false
|
||||
end
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveFile(VK_ORG,'conf/virtualkey')
|
||||
end
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
BG.set('matrix')
|
||||
end
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ local gc=love.graphics
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneBack()
|
||||
function scene.leave()
|
||||
saveSettings()
|
||||
end
|
||||
|
||||
@@ -42,6 +42,11 @@ function scene.draw()
|
||||
gc.pop()
|
||||
end
|
||||
|
||||
local function _msaaShow(S)
|
||||
S=S.disp()
|
||||
return S==0 and 0 or 2^S
|
||||
end
|
||||
|
||||
scene.widgetScrollHeight=900
|
||||
scene.widgetList={
|
||||
WIDGET.newText{name='title', x=640,y=15,lim=630,font=80},
|
||||
@@ -70,21 +75,23 @@ scene.widgetList={
|
||||
|
||||
WIDGET.newSelector{name='frame', x=400,y=890,lim=280,w=460,list={8,10,13,17,22,29,37,47,62,80,100},disp=SETval('frameMul'),code=function(v) SETTING.frameMul=v;Z.setFrameMul(SETTING.frameMul) end},
|
||||
|
||||
WIDGET.newSwitch{name='text', x=450,y=980,lim=360,disp=SETval('text'), code=SETrev('text')},
|
||||
WIDGET.newSwitch{name='score', x=450,y=1030,lim=360,disp=SETval('score'), code=SETrev('score')},
|
||||
WIDGET.newSwitch{name='bufferWarn', x=450,y=1100,lim=360,disp=SETval('bufferWarn'), code=SETrev('bufferWarn')},
|
||||
WIDGET.newSwitch{name='showSpike', x=450,y=1150,lim=360,disp=SETval('showSpike'), code=SETrev('showSpike')},
|
||||
WIDGET.newSwitch{name='nextPos', x=450,y=1220,lim=360,disp=SETval('nextPos'), code=SETrev('nextPos')},
|
||||
WIDGET.newSwitch{name='highCam', x=450,y=1270,lim=360,disp=SETval('highCam'), code=SETrev('highCam')},
|
||||
WIDGET.newSwitch{name='warn', x=450,y=1340,lim=360,disp=SETval('warn'), code=SETrev('warn')},
|
||||
WIDGET.newSwitch{name='text', x=450,y=980,lim=360,disp=SETval('text'), code=SETrev('text')},
|
||||
WIDGET.newSwitch{name='score', x=450,y=1030,lim=360,disp=SETval('score'), code=SETrev('score')},
|
||||
WIDGET.newSwitch{name='bufferWarn', x=450,y=1100,lim=360,disp=SETval('bufferWarn'), code=SETrev('bufferWarn')},
|
||||
WIDGET.newSwitch{name='showSpike', x=450,y=1150,lim=360,disp=SETval('showSpike'), code=SETrev('showSpike')},
|
||||
WIDGET.newSwitch{name='nextPos', x=450,y=1220,lim=360,disp=SETval('nextPos'), code=SETrev('nextPos')},
|
||||
WIDGET.newSwitch{name='highCam', x=450,y=1270,lim=360,disp=SETval('highCam'), code=SETrev('highCam')},
|
||||
WIDGET.newSwitch{name='warn', x=450,y=1340,lim=360,disp=SETval('warn'), code=SETrev('warn')},
|
||||
|
||||
WIDGET.newSwitch{name='clickFX', x=950,y=980,lim=360,disp=SETval('clickFX'), code=function() SETTING.clickFX=not SETTING.clickFX applySettings() end},
|
||||
WIDGET.newSwitch{name='power', x=950,y=1070,lim=360,disp=SETval('powerInfo'), code=function() SETTING.powerInfo=not SETTING.powerInfo applySettings() end},
|
||||
WIDGET.newSwitch{name='clean', x=950,y=1160,lim=360,disp=SETval('cleanCanvas'), code=function() SETTING.cleanCanvas=not SETTING.cleanCanvas applySettings() end},
|
||||
WIDGET.newSwitch{name='fullscreen', x=950,y=1250,lim=360,disp=SETval('fullscreen'), code=function() SETTING.fullscreen=not SETTING.fullscreen applySettings() end},
|
||||
WIDGET.newSwitch{name='clickFX', x=950,y=980,lim=360,disp=SETval('clickFX'), code=function() SETTING.clickFX=not SETTING.clickFX; applySettings() end},
|
||||
WIDGET.newSwitch{name='power', x=950,y=1050,lim=360,disp=SETval('powerInfo'), code=function() SETTING.powerInfo=not SETTING.powerInfo; applySettings() end},
|
||||
WIDGET.newSwitch{name='clean', x=950,y=1120,lim=360,disp=SETval('cleanCanvas'), code=function() SETTING.cleanCanvas=not SETTING.cleanCanvas; applySettings() end},
|
||||
WIDGET.newSwitch{name='fullscreen', x=950,y=1190,lim=360,disp=SETval('fullscreen'), code=function() SETTING.fullscreen=not SETTING.fullscreen; applySettings() end,hideF=function() return MOBILE end},
|
||||
WIDGET.newSwitch{name='portrait', x=950,y=1190,lim=360,disp=SETval('portrait'), code=function() SETTING.portrait=not SETTING.portrait; saveSettings(); MES.new('warn',text.settingWarn2,6.26) end,hideF=function() return not MOBILE end},
|
||||
WIDGET.newSlider{name='msaa', x=950,y=1250,lim=360,w=200,axis={0,4,1},show=_msaaShow,disp=function() return SETTING.msaa==0 and 0 or math.log(SETTING.msaa,2) end,code=function(v) SETTING.msaa=v==0 and 0 or 2^v; saveSettings(); if TASK.lock('warnMessage',6.26) then MES.new('warn',text.settingWarn2,6.26) end end},
|
||||
|
||||
WIDGET.newKey{name='bg_on', x=680,y=1340,w=200,h=80,code=function() SETTING.bg='on'applySettings() end},
|
||||
WIDGET.newKey{name='bg_off', x=900,y=1340,w=200,h=80,code=function() SETTING.bg='off'applySettings() end},
|
||||
WIDGET.newKey{name='bg_on', x=680,y=1340,w=200,h=80,code=function() SETTING.bg='on'; applySettings() end},
|
||||
WIDGET.newKey{name='bg_off', x=900,y=1340,w=200,h=80,code=function() SETTING.bg='off'; applySettings() end},
|
||||
WIDGET.newKey{name='bg_custom', x=1120,y=1340,w=200,h=80,
|
||||
code=function()
|
||||
if love.filesystem.getInfo('conf/customBG') then
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
local gc=love.graphics
|
||||
local kb,tc=love.keyboard,love.touch
|
||||
local rnd=math.random
|
||||
local ins,rem=table.insert,table.remove
|
||||
@@ -10,7 +9,7 @@ local patron=require"parts.patron"
|
||||
local names
|
||||
local counter
|
||||
|
||||
function scene.sceneInit()
|
||||
function scene.enter()
|
||||
time=0
|
||||
v=22.6
|
||||
BG.set()
|
||||
@@ -50,7 +49,7 @@ function scene.update(dt)
|
||||
counter=counter-1
|
||||
if counter==0 then
|
||||
local N=patron[rnd(#patron)]
|
||||
local T=gc.newText(getFont(N.font),N.name)
|
||||
local T=GC.newText(getFont(N.font),N.name)
|
||||
local r=rnd()<.5
|
||||
ins(names,{
|
||||
text=T,
|
||||
@@ -71,26 +70,26 @@ function scene.update(dt)
|
||||
end
|
||||
|
||||
function scene.draw()
|
||||
gc.replaceTransform(SCR.origin)
|
||||
gc.setColor(1,1,1,.3)
|
||||
GC.replaceTransform(SCR.origin)
|
||||
GC.setColor(1,1,1,.3)
|
||||
for i=1,#names do
|
||||
local N=names[i]
|
||||
gc.draw(N.text,N.x,N.y)
|
||||
GC.draw(N.text,N.x,N.y)
|
||||
end
|
||||
|
||||
gc.replaceTransform(SCR.xOy)
|
||||
GC.replaceTransform(SCR.xOy)
|
||||
local T=40*math.min(time,185)
|
||||
gc.setColor(.97,.97,.97,185-math.min(time,185))
|
||||
GC.setColor(.97,.97,.97,185-math.min(time,185))
|
||||
local L=text.staff
|
||||
setFont(40)
|
||||
for i=1,#L do
|
||||
GC.mStr(L[i],640,950+65*i-T)
|
||||
end
|
||||
gc.setColor(1,1,1)
|
||||
GC.setColor(1,1,1)
|
||||
mDraw(TEXTURE.title_color,640,900-T,nil,.6)
|
||||
mDraw(TEXTURE.title,640,7770-T,nil,.6)
|
||||
if time>190 then
|
||||
gc.print("CLICK ME →",50,550,-.5)
|
||||
GC.print("CLICK ME →",50,550,-.5)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user