Compare commits
143 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da716ea5c5 | ||
|
|
c6f92a3030 | ||
|
|
267e2dc544 | ||
|
|
cb7d3afdfb | ||
|
|
b57e863c28 | ||
|
|
7aed15fd4f | ||
|
|
6d71b26595 | ||
|
|
1df5406cb3 | ||
|
|
a2b762dcbc | ||
|
|
c2d29c3d6a | ||
|
|
da602eb693 | ||
|
|
9e442a3073 | ||
|
|
bc8b7e733b | ||
|
|
94aa84e380 | ||
|
|
c462c28640 | ||
|
|
b5fbf9cade | ||
|
|
e88957296f | ||
|
|
9e61cb995a | ||
|
|
89a5a718da | ||
|
|
43649c54a3 | ||
|
|
b2b5c99425 | ||
|
|
9e882e6188 | ||
|
|
e688458cfd | ||
|
|
b7c528f5ac | ||
|
|
c743fdcffc | ||
|
|
56e19dd91e | ||
|
|
308512d36a | ||
|
|
749806e553 | ||
|
|
78223334ee | ||
|
|
7f50161ca7 | ||
|
|
dd872a72b2 | ||
|
|
0df17cb4ee | ||
|
|
27244dae04 | ||
|
|
c472d6cbd7 | ||
|
|
e4c786a5d4 | ||
|
|
e291a070f3 | ||
|
|
6b16fcd5f5 | ||
|
|
d79279d1cd | ||
|
|
03fbfaa577 | ||
|
|
8231021426 | ||
|
|
784b2074f8 | ||
|
|
93c9977c86 | ||
|
|
ad1b129dfa | ||
|
|
2d4856551b | ||
|
|
4d0e72d61e | ||
|
|
9b20ec6941 | ||
|
|
5a02265018 | ||
|
|
0dd5c46fd1 | ||
|
|
55831339dd | ||
|
|
e0ba04e579 | ||
|
|
d5f7a6ddd0 | ||
|
|
66a3354883 | ||
|
|
55218e4563 | ||
|
|
081b769ac6 | ||
|
|
8f767b3ab9 | ||
|
|
a2eb7e4a54 | ||
|
|
2de663703b | ||
|
|
40a587dcc4 | ||
|
|
f366a63c8f | ||
|
|
8c603fadee | ||
|
|
5e9ef8d3ab | ||
|
|
2e9cef3ed8 | ||
|
|
354d4f80bf | ||
|
|
a578d537cd | ||
|
|
85ff1cd1c3 | ||
|
|
0d015de359 | ||
|
|
5a0a473d4a | ||
|
|
420ff9a556 | ||
|
|
4f6e99daa2 | ||
|
|
10a57ecc18 | ||
|
|
b101d74df5 | ||
|
|
97d4e58d47 | ||
|
|
b436645ab7 | ||
|
|
af7c73f9f0 | ||
|
|
7d44396b03 | ||
|
|
bd428f355a | ||
|
|
2d6d897e2a | ||
|
|
4913deb15f | ||
|
|
0cb9d3990c | ||
|
|
388e8e1fe1 | ||
|
|
42168ddf16 | ||
|
|
134773765c | ||
|
|
74b099d58f | ||
|
|
c1936441dd | ||
|
|
dc3b7c0825 | ||
|
|
86910f2956 | ||
|
|
7b1df65e64 | ||
|
|
04559efaca | ||
|
|
b668fa4750 | ||
|
|
a4db061485 | ||
|
|
d4d97f1e7f | ||
|
|
e682202b60 | ||
|
|
2480987f10 | ||
|
|
b0acdce294 | ||
|
|
7953cf735b | ||
|
|
d074a85fbc | ||
|
|
543e85e94c | ||
|
|
23f43df737 | ||
|
|
43b6ff7697 | ||
|
|
6ecc80ac0f | ||
|
|
3ae0e80ce5 | ||
|
|
d12f8a27e7 | ||
|
|
f9bbb8fce6 | ||
|
|
80984cddf9 | ||
|
|
8fb0b2e600 | ||
|
|
9a4e8ab4ec | ||
|
|
dc1973e049 | ||
|
|
ccb05230f2 | ||
|
|
7ac6f45b9b | ||
|
|
df7ab20636 | ||
|
|
c06961c9c8 | ||
|
|
37b76a1cb4 | ||
|
|
01d02a916d | ||
|
|
8e99565a9d | ||
|
|
f8d17b23b6 | ||
|
|
06f4bb4e1a | ||
|
|
6e00ff96ec | ||
|
|
468bbc8053 | ||
|
|
f41999c019 | ||
|
|
d259e05ca7 | ||
|
|
2491a436c2 | ||
|
|
7a55e447fc | ||
|
|
f3face791f | ||
|
|
9ccc019bb9 | ||
|
|
bc9f00d09f | ||
|
|
33c470dd38 | ||
|
|
9e0e93de5d | ||
|
|
16553e13a2 | ||
|
|
d031dc3a82 | ||
|
|
7297eb8ee8 | ||
|
|
55bcdd426b | ||
|
|
139e2e14c4 | ||
|
|
339b53115a | ||
|
|
03515b4490 | ||
|
|
9690a345a3 | ||
|
|
8324f72e90 | ||
|
|
15eefc0e9f | ||
|
|
d504bd3d49 | ||
|
|
fd4b4f1882 | ||
|
|
a176ef35a0 | ||
|
|
0fc7178589 | ||
|
|
76d985cc0f | ||
|
|
aa05e8857b |
4
.github/actions/get-cc/action.yml
vendored
4
.github/actions/get-cc/action.yml
vendored
@@ -19,10 +19,10 @@ runs:
|
|||||||
using: "composite"
|
using: "composite"
|
||||||
steps:
|
steps:
|
||||||
- run: |
|
- run: |
|
||||||
echo "::set-output name=tag::"$(if [ -z "${{ inputs.tag }}" ]
|
echo "tag="$(if [ -z "${{ inputs.tag }}" ]
|
||||||
then curl -w '%{url_effective}' -I -L -s -S https://github.com/${{ inputs.repo }}/releases/latest -o /dev/null | grep -o '\<[^/]*$'
|
then curl -w '%{url_effective}' -I -L -s -S https://github.com/${{ inputs.repo }}/releases/latest -o /dev/null | grep -o '\<[^/]*$'
|
||||||
else echo ${{ inputs.tag }}
|
else echo ${{ inputs.tag }}
|
||||||
fi)
|
fi) >> $GITHUB_OUTPUT
|
||||||
id: get-tag
|
id: get-tag
|
||||||
shell: bash
|
shell: bash
|
||||||
- uses: ./.github/actions/get-unzip
|
- uses: ./.github/actions/get-unzip
|
||||||
|
|||||||
265
.github/workflows/main.yml
vendored
265
.github/workflows/main.yml
vendored
@@ -20,6 +20,8 @@ jobs:
|
|||||||
version-name: ${{ steps.app-info.outputs.version-name }}
|
version-name: ${{ steps.app-info.outputs.version-name }}
|
||||||
version-string: ${{ steps.app-info.outputs.version-string }}
|
version-string: ${{ steps.app-info.outputs.version-string }}
|
||||||
version-code: ${{ steps.app-info.outputs.version-code }}
|
version-code: ${{ steps.app-info.outputs.version-code }}
|
||||||
|
update-title: ${{ steps.app-info.outputs.update-title }}
|
||||||
|
update-note: ${{ steps.app-info.outputs.update-note }}
|
||||||
commit-hash: ${{ steps.git-info.outputs.commit-hash }}
|
commit-hash: ${{ steps.git-info.outputs.commit-hash }}
|
||||||
base-name: ${{ steps.assemble-base-name.outputs.base-name }}
|
base-name: ${{ steps.assemble-base-name.outputs.base-name }}
|
||||||
steps:
|
steps:
|
||||||
@@ -32,28 +34,42 @@ jobs:
|
|||||||
shell: lua {0}
|
shell: lua {0}
|
||||||
run: |
|
run: |
|
||||||
local version = require "version"
|
local version = require "version"
|
||||||
print("::set-output name=app-name::Techmino")
|
os.execute('echo "app-name=Techmino" >> $GITHUB_OUTPUT')
|
||||||
print("::set-output name=version-name::"..version.name)
|
os.execute('echo "version-name=' .. version.name .. '" >> $GITHUB_OUTPUT')
|
||||||
print("::set-output name=version-string::"..version.string:gsub("%a", ""))
|
os.execute('echo "version-string=' .. version.string:gsub("%a", "") .. '" >> $GITHUB_OUTPUT')
|
||||||
print(("::set-output name=version-code::%d"):format(version.code))
|
os.execute('echo "version-code=' .. tostring(version.code) .. '" >> $GITHUB_OUTPUT')
|
||||||
|
|
||||||
|
local note = require 'parts.updateLog'
|
||||||
|
local p1 = note:find("\n%d") + 1
|
||||||
|
local p2 = note:find("\n", p1) - 1
|
||||||
|
os.execute('echo "update-title=' .. note:sub(p1, p2) .. '" >> $GITHUB_OUTPUT')
|
||||||
|
local p3 = note:find("\n", note:find("\n%d") + 1) + 1
|
||||||
|
local p4 = note:find("\n%d", p3 + 1)
|
||||||
|
updateNote = note:sub(p3, p4 - 2)
|
||||||
|
:gsub(" ", "- ")
|
||||||
|
:gsub(" ", "# ")
|
||||||
|
os.execute('echo "update-note<<EOF" >> $GITHUB_OUTPUT')
|
||||||
|
os.execute('echo "' .. updateNote .. '" >> $GITHUB_OUTPUT')
|
||||||
|
os.execute('echo "EOF" >> $GITHUB_OUTPUT')
|
||||||
- name: Get git info
|
- name: Get git info
|
||||||
id: git-info
|
id: git-info
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
COMMIT_HASH=$(git rev-parse --short ${{ GITHUB.SHA }})
|
COMMIT_HASH=$(git rev-parse --short ${{ GITHUB.SHA }})
|
||||||
echo ::set-output name=commit-hash::$COMMIT_HASH
|
echo "commit-hash=$COMMIT_HASH" >> $GITHUB_OUTPUT
|
||||||
- name: Assemble package base name
|
- name: Assemble package base name
|
||||||
id: assemble-base-name
|
id: assemble-base-name
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
BASE_NAME=Techmino_${{ steps.app-info.outputs.version-string }}_${{ steps.git-info.outputs.commit-hash }}_#${{ GITHUB.RUN_NUMBER }}
|
BASE_NAME=Techmino_${{ steps.app-info.outputs.version-string }}_${{ steps.git-info.outputs.commit-hash }}_#${{ GITHUB.RUN_NUMBER }}
|
||||||
echo ::set-output name=base-name::$BASE_NAME
|
echo "base-name=$BASE_NAME" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
build-core:
|
build-core:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: get-info
|
needs: get-info
|
||||||
env:
|
env:
|
||||||
OUTPUT_FOLDER: ./build
|
OUTPUT_FOLDER: ./build
|
||||||
|
RELEASE_FOLDER: ./release
|
||||||
outputs:
|
outputs:
|
||||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||||
steps:
|
steps:
|
||||||
@@ -66,14 +82,15 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}"))
|
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
|
||||||
|
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
|
||||||
- uses: ./.github/actions/update-version
|
- uses: ./.github/actions/update-version
|
||||||
if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
|
if: ${{ !startsWith(github.ref, 'refs/tags/v') }}
|
||||||
with:
|
with:
|
||||||
commit: ${{ needs.get-info.outputs.commit-hash }}
|
commit: ${{ needs.get-info.outputs.commit-hash }}
|
||||||
type: snapshot
|
type: snapshot
|
||||||
- name: Build core love package
|
- name: Build core love package
|
||||||
uses: 26F-Studio/love-actions-core@v1
|
uses: love-actions/love-actions-core@v1
|
||||||
with:
|
with:
|
||||||
build-list: ./media/ ./parts/ ./Zframework/ ./conf.lua ./main.lua ./version.lua
|
build-list: ./media/ ./parts/ ./Zframework/ ./conf.lua ./main.lua ./version.lua
|
||||||
package-path: ${{ env.CORE_LOVE_PACKAGE_PATH }}
|
package-path: ${{ env.CORE_LOVE_PACKAGE_PATH }}
|
||||||
@@ -91,23 +108,27 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: ${{ needs.get-info.outputs.base-name }}_Core_love
|
name: ${{ needs.get-info.outputs.base-name }}_Core_love
|
||||||
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love
|
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love
|
||||||
|
- 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 }}.love ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Bare.love
|
||||||
- name: Upload release
|
- name: Upload release
|
||||||
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
||||||
uses: softprops/action-gh-release@v1
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
body: ${{ github.event.head_commit.message }}
|
allowUpdates: true
|
||||||
files: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love
|
artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Bare.love
|
||||||
|
body: ${{ needs.get-info.outputs.update-note }}
|
||||||
|
name: ${{ needs.get-info.outputs.update-title }}
|
||||||
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
||||||
- name: Upload to WeTransfer
|
- name: Upload to WeTransfer
|
||||||
id: transfer
|
id: transfer
|
||||||
run: |
|
run: |
|
||||||
curl -sL https://git.io/file-transfer | sh
|
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
|
./transfer wet -s -p 16 --no-progress ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.love 2>&1>./wetransfer.log
|
||||||
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
|
echo "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
|
||||||
- name: Show download link
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "::notice title=Bare love package::${{ steps.transfer.outputs.download-url }}"
|
|
||||||
|
|
||||||
auto-test:
|
auto-test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -117,7 +138,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
submodules: recursive
|
submodules: recursive
|
||||||
- name: Love actions for testing
|
- name: Love actions for testing
|
||||||
uses: 26F-Studio/love-actions-test@v1
|
uses: love-actions/love-actions-test@v1
|
||||||
with:
|
with:
|
||||||
font-path: ./parts/fonts/proportional.otf
|
font-path: ./parts/fonts/proportional.otf
|
||||||
language-folder: ./parts/language
|
language-folder: ./parts/language
|
||||||
@@ -127,6 +148,7 @@ jobs:
|
|||||||
needs: [get-info, build-core, auto-test]
|
needs: [get-info, build-core, auto-test]
|
||||||
env:
|
env:
|
||||||
OUTPUT_FOLDER: ./build
|
OUTPUT_FOLDER: ./build
|
||||||
|
RELEASE_FOLDER: ./release
|
||||||
outputs:
|
outputs:
|
||||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||||
steps:
|
steps:
|
||||||
@@ -139,8 +161,13 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
os.system("echo ::set-output name=bundle-id::org.f26_studio." + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}") + ".snapshot")
|
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
|
||||||
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}") + "_Snapshot")
|
if "${{ env.BUILD_TYPE }}" == "dev":
|
||||||
|
f.write('bundle-id=org.f26_studio.' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '.snapshot\n')
|
||||||
|
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '_Snapshot\n')
|
||||||
|
else:
|
||||||
|
f.write('bundle-id=org.f26_studio.' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
|
||||||
|
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
|
||||||
- name: Download core love package
|
- name: Download core love package
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
@@ -159,7 +186,7 @@ jobs:
|
|||||||
mv ./ColdClear/arm64-v8a/libCCloader.so ./libAndroid/arm64-v8a/
|
mv ./ColdClear/arm64-v8a/libCCloader.so ./libAndroid/arm64-v8a/
|
||||||
- name: Build Android packages
|
- name: Build Android packages
|
||||||
id: build-packages
|
id: build-packages
|
||||||
uses: 26F-Studio/love-actions-android@v1
|
uses: love-actions/love-actions-android@v1
|
||||||
with:
|
with:
|
||||||
app-name: ${{ needs.get-info.outputs.app-name }}
|
app-name: ${{ needs.get-info.outputs.app-name }}
|
||||||
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
|
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
|
||||||
@@ -176,7 +203,7 @@ jobs:
|
|||||||
version-string: ${{ needs.get-info.outputs.version-string }}
|
version-string: ${{ needs.get-info.outputs.version-string }}
|
||||||
version-code: ${{ needs.get-info.outputs.version-code }}
|
version-code: ${{ needs.get-info.outputs.version-code }}
|
||||||
output-folder: ${{ env.OUTPUT_FOLDER }}
|
output-folder: ${{ env.OUTPUT_FOLDER }}
|
||||||
- name: Upload release artifact
|
- name: Upload artifact
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: ${{ needs.get-info.outputs.base-name }}_Android_release
|
name: ${{ needs.get-info.outputs.base-name }}_Android_release
|
||||||
@@ -185,31 +212,31 @@ jobs:
|
|||||||
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
mkdir -p release
|
mkdir -p ${{ env.RELEASE_FOLDER }}
|
||||||
mv ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}-release.apk release/${{ steps.process-app-name.outputs.product-name }}.apk
|
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}-release.apk ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Android.apk
|
||||||
- name: Upload release
|
- name: Upload release
|
||||||
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
||||||
uses: softprops/action-gh-release@v1
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
body: ${{ github.event.head_commit.message }}
|
allowUpdates: true
|
||||||
files: release/${{ steps.process-app-name.outputs.product-name }}.apk
|
artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Android.apk
|
||||||
|
body: ${{ needs.get-info.outputs.update-note }}
|
||||||
|
name: ${{ needs.get-info.outputs.update-title }}
|
||||||
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
||||||
- name: Upload to WeTransfer
|
- name: Upload to WeTransfer
|
||||||
id: transfer
|
id: transfer
|
||||||
run: |
|
run: |
|
||||||
curl -sL https://git.io/file-transfer | sh
|
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
|
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
|
||||||
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
|
echo "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
|
||||||
- name: Show download link
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "::notice title=Android packages::${{ steps.transfer.outputs.download-url }}"
|
|
||||||
|
|
||||||
build-ios:
|
build-ios:
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
needs: [get-info, build-core, auto-test]
|
needs: [get-info, build-core, auto-test]
|
||||||
env:
|
env:
|
||||||
OUTPUT_FOLDER: ./build
|
OUTPUT_FOLDER: ./build
|
||||||
|
RELEASE_FOLDER: ./release
|
||||||
outputs:
|
outputs:
|
||||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||||
steps:
|
steps:
|
||||||
@@ -222,8 +249,9 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
os.system("echo ::set-output name=bundle-id::org.26f-studio.techmino")
|
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
|
||||||
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}"))
|
f.write('bundle-id=org.26f-studio.techmino\n')
|
||||||
|
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
|
||||||
- name: Download core love package
|
- name: Download core love package
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
@@ -235,7 +263,7 @@ jobs:
|
|||||||
dir: ./ColdClear
|
dir: ./ColdClear
|
||||||
- name: Build iOS packages
|
- name: Build iOS packages
|
||||||
id: build-packages
|
id: build-packages
|
||||||
uses: 26F-Studio/love-actions-ios@v1
|
uses: love-actions/love-actions-ios@v1
|
||||||
with:
|
with:
|
||||||
app-name: ${{ needs.get-info.outputs.app-name }}
|
app-name: ${{ needs.get-info.outputs.app-name }}
|
||||||
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
|
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
|
||||||
@@ -269,29 +297,34 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: ${{ needs.get-info.outputs.base-name }}_iOS_ipa
|
name: ${{ needs.get-info.outputs.base-name }}_iOS_ipa
|
||||||
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.ipa
|
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.ipa
|
||||||
|
- 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 }}.ipa ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_iOS.ipa
|
||||||
- name: Upload release
|
- name: Upload release
|
||||||
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
||||||
uses: softprops/action-gh-release@v1
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
body: ${{ github.event.head_commit.message }}
|
allowUpdates: true
|
||||||
files: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.ipa
|
artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_iOS.ipa
|
||||||
|
body: ${{ needs.get-info.outputs.update-note }}
|
||||||
|
name: ${{ needs.get-info.outputs.update-title }}
|
||||||
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
||||||
- name: Upload to WeTransfer
|
- name: Upload to WeTransfer
|
||||||
id: transfer
|
id: transfer
|
||||||
run: |
|
run: |
|
||||||
wget -qO- https://github.com/Mikubill/transfer/releases/download/v0.4.17/transfer_0.4.17_darwin_amd64.tar.gz | tar xvz
|
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
|
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
|
||||||
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
|
echo "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
|
||||||
- name: Show download link
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "::notice title=iOS packages::${{ steps.transfer.outputs.download-url }}"
|
|
||||||
|
|
||||||
build-linux:
|
build-linux:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: [get-info, build-core, auto-test]
|
needs: [get-info, build-core, auto-test]
|
||||||
env:
|
env:
|
||||||
OUTPUT_FOLDER: ./build
|
OUTPUT_FOLDER: ./build
|
||||||
|
RELEASE_FOLDER: ./release
|
||||||
outputs:
|
outputs:
|
||||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||||
steps:
|
steps:
|
||||||
@@ -304,7 +337,8 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}"))
|
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
|
||||||
|
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
|
||||||
- name: Download core love package
|
- name: Download core love package
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
@@ -324,7 +358,7 @@ jobs:
|
|||||||
mv ./x64/CCloader.so ./shared
|
mv ./x64/CCloader.so ./shared
|
||||||
- name: Build Linux packages
|
- name: Build Linux packages
|
||||||
id: build-packages
|
id: build-packages
|
||||||
uses: 26F-Studio/love-actions-linux@v1
|
uses: love-actions/love-actions-linux@v1
|
||||||
with:
|
with:
|
||||||
desktop-file-path: ./.github/build/linux/${{ env.BUILD_TYPE }}/template.desktop
|
desktop-file-path: ./.github/build/linux/${{ env.BUILD_TYPE }}/template.desktop
|
||||||
executable-name: app
|
executable-name: app
|
||||||
@@ -339,29 +373,35 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: ${{ needs.get-info.outputs.base-name }}_Linux_AppImage
|
name: ${{ needs.get-info.outputs.base-name }}_Linux_AppImage
|
||||||
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.AppImage
|
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.AppImage
|
||||||
|
- 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
|
||||||
- name: Upload release
|
- name: Upload release
|
||||||
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
||||||
uses: softprops/action-gh-release@v1
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
body: ${{ github.event.head_commit.message }}
|
allowUpdates: true
|
||||||
files: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.AppImage
|
artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Linux.AppImage
|
||||||
|
body: ${{ needs.get-info.outputs.update-note }}
|
||||||
|
name: ${{ needs.get-info.outputs.update-title }}
|
||||||
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
||||||
- name: Upload to WeTransfer
|
- name: Upload to WeTransfer
|
||||||
id: transfer
|
id: transfer
|
||||||
run: |
|
run: |
|
||||||
curl -sL https://git.io/file-transfer | sh
|
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
|
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
|
||||||
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
|
echo "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
|
||||||
- name: Show download link
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "::notice title=Linux packages::${{ steps.transfer.outputs.download-url }}"
|
|
||||||
|
|
||||||
build-macos-appstore:
|
build-macos-appstore:
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
needs: [get-info, build-core, auto-test]
|
needs: [get-info, build-core, auto-test]
|
||||||
env:
|
env:
|
||||||
OUTPUT_FOLDER: ./build
|
OUTPUT_FOLDER: ./build
|
||||||
|
RELEASE_FOLDER: ./release
|
||||||
outputs:
|
outputs:
|
||||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||||
steps:
|
steps:
|
||||||
@@ -374,8 +414,9 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
os.system("echo ::set-output name=bundle-id::org.26f-studio.techmino")
|
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
|
||||||
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}"))
|
f.write('bundle-id=org.26f-studio.techmino\n')
|
||||||
|
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
|
||||||
- name: Download core love package
|
- name: Download core love package
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
@@ -391,7 +432,7 @@ jobs:
|
|||||||
rm ./ColdClear/universal/libcold_clear.a
|
rm ./ColdClear/universal/libcold_clear.a
|
||||||
- name: Build macOS packages
|
- name: Build macOS packages
|
||||||
id: build-packages
|
id: build-packages
|
||||||
uses: 26F-Studio/love-actions-macos-appstore@v1
|
uses: love-actions/love-actions-macos-appstore@v1
|
||||||
with:
|
with:
|
||||||
app-name: ${{ needs.get-info.outputs.app-name }}
|
app-name: ${{ needs.get-info.outputs.app-name }}
|
||||||
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
|
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
|
||||||
@@ -424,29 +465,35 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: ${{ needs.get-info.outputs.base-name }}_macOS_appstore_pkg
|
name: ${{ needs.get-info.outputs.base-name }}_macOS_appstore_pkg
|
||||||
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.pkg
|
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.pkg
|
||||||
|
- 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 }}.pkg ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_appstore.pkg
|
||||||
- name: Upload release
|
- name: Upload release
|
||||||
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
||||||
uses: softprops/action-gh-release@v1
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
body: ${{ github.event.head_commit.message }}
|
allowUpdates: true
|
||||||
files: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.pkg
|
artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_appstore.pkg
|
||||||
|
body: ${{ needs.get-info.outputs.update-note }}
|
||||||
|
name: ${{ needs.get-info.outputs.update-title }}
|
||||||
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
||||||
- name: Upload to WeTransfer
|
- name: Upload to WeTransfer
|
||||||
id: transfer
|
id: transfer
|
||||||
run: |
|
run: |
|
||||||
wget -qO- https://github.com/Mikubill/transfer/releases/download/v0.4.17/transfer_0.4.17_darwin_amd64.tar.gz | tar xvz
|
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
|
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
|
||||||
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
|
echo "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
|
||||||
- name: Show download link
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "::notice title=macOS App Store packages::${{ steps.transfer.outputs.download-url }}"
|
|
||||||
|
|
||||||
build-macos-portable:
|
build-macos-portable:
|
||||||
runs-on: macos-latest
|
runs-on: macos-latest
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
needs: [get-info, build-core, auto-test]
|
needs: [get-info, build-core, auto-test]
|
||||||
env:
|
env:
|
||||||
OUTPUT_FOLDER: ./build
|
OUTPUT_FOLDER: ./build
|
||||||
|
RELEASE_FOLDER: ./release
|
||||||
outputs:
|
outputs:
|
||||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||||
steps:
|
steps:
|
||||||
@@ -459,8 +506,9 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
os.system("echo ::set-output name=bundle-id::org.26f-studio.techmino")
|
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
|
||||||
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}"))
|
f.write('bundle-id=org.26f-studio.techmino\n')
|
||||||
|
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
|
||||||
- name: Download core love package
|
- name: Download core love package
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
@@ -476,7 +524,7 @@ jobs:
|
|||||||
rm ./ColdClear/universal/libcold_clear.a
|
rm ./ColdClear/universal/libcold_clear.a
|
||||||
- name: Build macOS packages
|
- name: Build macOS packages
|
||||||
id: build-packages
|
id: build-packages
|
||||||
uses: 26F-Studio/love-actions-macos-portable@v1
|
uses: love-actions/love-actions-macos-portable@v1
|
||||||
with:
|
with:
|
||||||
app-name: ${{ needs.get-info.outputs.app-name }}
|
app-name: ${{ needs.get-info.outputs.app-name }}
|
||||||
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
|
bundle-id: ${{ steps.process-app-name.outputs.bundle-id }}
|
||||||
@@ -518,31 +566,35 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: ${{ needs.get-info.outputs.base-name }}_macOS_portable_bare
|
name: ${{ needs.get-info.outputs.base-name }}_macOS_portable_bare
|
||||||
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.zip
|
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.zip
|
||||||
|
- 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 }}.pkg ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_portable.pkg
|
||||||
|
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.dmg ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_macOS_portable.dmg
|
||||||
- name: Upload release
|
- name: Upload release
|
||||||
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
||||||
uses: softprops/action-gh-release@v1
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
body: ${{ github.event.head_commit.message }}
|
allowUpdates: true
|
||||||
files: |
|
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
|
||||||
${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.pkg
|
body: ${{ needs.get-info.outputs.update-note }}
|
||||||
${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}.dmg
|
name: ${{ needs.get-info.outputs.update-title }}
|
||||||
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
||||||
- name: Upload to WeTransfer
|
- name: Upload to WeTransfer
|
||||||
id: transfer
|
id: transfer
|
||||||
run: |
|
run: |
|
||||||
wget -qO- https://github.com/Mikubill/transfer/releases/download/v0.4.17/transfer_0.4.17_darwin_amd64.tar.gz | tar xvz
|
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
|
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
|
||||||
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
|
echo "download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $GITHUB_OUTPUT
|
||||||
- name: Show download link
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "::notice title=macOS portable packages::${{ steps.transfer.outputs.download-url }}"
|
|
||||||
|
|
||||||
build-windows:
|
build-windows:
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
needs: [get-info, build-core, auto-test]
|
needs: [get-info, build-core, auto-test]
|
||||||
env:
|
env:
|
||||||
OUTPUT_FOLDER: ./build
|
OUTPUT_FOLDER: ./build
|
||||||
|
RELEASE_FOLDER: ./release
|
||||||
outputs:
|
outputs:
|
||||||
download-url: ${{ steps.transfer.outputs.download-url }}
|
download-url: ${{ steps.transfer.outputs.download-url }}
|
||||||
steps:
|
steps:
|
||||||
@@ -555,7 +607,8 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
os.system("echo ::set-output name=product-name::" + re.sub(r"[^A-Za-z0-9]+", "_", "${{ needs.get-info.outputs.app-name }}"))
|
with open(os.getenv('GITHUB_OUTPUT'), 'a') as f:
|
||||||
|
f.write('product-name=' + re.sub(r'[^A-Za-z0-9]+', '_', '${{ needs.get-info.outputs.app-name }}') + '\n')
|
||||||
- name: Download core love package
|
- name: Download core love package
|
||||||
uses: actions/download-artifact@v3
|
uses: actions/download-artifact@v3
|
||||||
with:
|
with:
|
||||||
@@ -567,7 +620,7 @@ jobs:
|
|||||||
dir: ./ColdClear
|
dir: ./ColdClear
|
||||||
- name: Build Windows packages
|
- name: Build Windows packages
|
||||||
id: build-packages
|
id: build-packages
|
||||||
uses: 26F-Studio/love-actions-windows@v1
|
uses: love-actions/love-actions-windows@v1
|
||||||
with:
|
with:
|
||||||
icon-path: ./.github/build/windows/${{ env.BUILD_TYPE }}/icon.ico
|
icon-path: ./.github/build/windows/${{ env.BUILD_TYPE }}/icon.ico
|
||||||
rc-path: ./.github/build/windows/${{ env.BUILD_TYPE }}/template.rc
|
rc-path: ./.github/build/windows/${{ env.BUILD_TYPE }}/template.rc
|
||||||
@@ -587,14 +640,21 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: ${{ needs.get-info.outputs.base-name }}_Windows_x64
|
name: ${{ needs.get-info.outputs.base-name }}_Windows_x64
|
||||||
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x64.zip
|
path: ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x64.zip
|
||||||
|
- name: Prepare for release
|
||||||
|
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
mkdir -p ${{ env.RELEASE_FOLDER }}
|
||||||
|
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x86.zip ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x86.zip
|
||||||
|
cp ${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x64.zip ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x64.zip
|
||||||
- name: Upload release
|
- name: Upload release
|
||||||
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
if: ${{ startsWith(github.ref, 'refs/tags/pre') || startsWith(github.ref, 'refs/tags/v') }}
|
||||||
uses: softprops/action-gh-release@v1
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
body: ${{ github.event.head_commit.message }}
|
allowUpdates: true
|
||||||
files: |
|
artifacts: ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x86.zip, ${{ env.RELEASE_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_Windows_x64.zip
|
||||||
${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x86.zip
|
body: ${{ needs.get-info.outputs.update-note }}
|
||||||
${{ env.OUTPUT_FOLDER }}/${{ steps.process-app-name.outputs.product-name }}_x64.zip
|
name: ${{ needs.get-info.outputs.update-title }}
|
||||||
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
prerelease: ${{ startsWith(github.ref, 'refs/tags/pre') }}
|
||||||
- name: Get transfer
|
- name: Get transfer
|
||||||
env:
|
env:
|
||||||
@@ -606,13 +666,10 @@ jobs:
|
|||||||
rm ${{ env.TEMP_PATH }}
|
rm ${{ env.TEMP_PATH }}
|
||||||
- name: Upload to WeTransfer
|
- name: Upload to WeTransfer
|
||||||
id: transfer
|
id: transfer
|
||||||
|
shell: pwsh
|
||||||
run: |
|
run: |
|
||||||
./transfer wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
|
./transfer.exe wet -s -p 16 --no-progress ${{ steps.build-packages.outputs.package-paths }} 2>&1>./wetransfer.log
|
||||||
echo "::set-output name=download-url::$(cat ./wetransfer.log | grep https | cut -f3 -d" ")"
|
"download-url=$(cat ./wetransfer.log | grep https | cut -f3 -d" ")" >> $env:GITHUB_OUTPUT
|
||||||
- name: Show download link
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "::notice title=Windows packages::${{ steps.transfer.outputs.download-url }}"
|
|
||||||
|
|
||||||
post-build:
|
post-build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -634,11 +691,37 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
uses: geekyeggo/delete-artifact@v1
|
uses: geekyeggo/delete-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: ${{ env.CORE_LOVE_ARTIFACT_NAME }}
|
name: ${{ env.CORE_LOVE_ARTIFACT_NAME }}
|
||||||
|
- name: Display summary
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
echo "# Summary" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "## Version: ${{ needs.get-info.outputs.version-string }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "## Package Name: ${{ needs.get-info.outputs.base-name }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "## Download links: " >> $GITHUB_STEP_SUMMARY
|
||||||
|
- name: Display download links
|
||||||
|
shell: python3 {0}
|
||||||
|
run: |
|
||||||
|
import os
|
||||||
|
with open(os.getenv('GITHUB_STEP_SUMMARY'), 'a') as f:
|
||||||
|
if "${{ needs.build-core.result }}" == "success":
|
||||||
|
f.write("- Bare love packages: [WeTransfer](${{ needs.build-core.outputs.download-url }})\n")
|
||||||
|
if "${{ needs.build-android.result }}" == "success":
|
||||||
|
f.write("- Android packages: [WeTransfer](${{ needs.build-android.outputs.download-url }})\n")
|
||||||
|
if "${{ needs.build-ios.result }}" == "success":
|
||||||
|
f.write("- iOS packages: [WeTransfer](${{ needs.build-ios.outputs.download-url }})\n")
|
||||||
|
if "${{ needs.build-linux.result }}" == "success":
|
||||||
|
f.write("- Linux packages: [WeTransfer](${{ needs.build-linux.outputs.download-url }})\n")
|
||||||
|
if "${{ needs.build-macos-appstore.result }}" == "success":
|
||||||
|
f.write("- macOS packages(App Store version): [WeTransfer](${{ needs.build-macos-appstore.outputs.download-url }})\n")
|
||||||
|
if "${{ needs.build-macos-portable.result }}" == "success":
|
||||||
|
f.write("- macOS packages(Portable version): [WeTransfer](${{ needs.build-macos-portable.outputs.download-url }})\n")
|
||||||
|
if "${{ needs.build-windows.result }}" == "success":
|
||||||
|
f.write("- Windows packages: [WeTransfer](${{ needs.build-windows.outputs.download-url }})\n")
|
||||||
- name: Send Discord message
|
- name: Send Discord message
|
||||||
uses: Sniddl/discord-commits@v1.3
|
uses: Sniddl/discord-commits@v1.5
|
||||||
with:
|
with:
|
||||||
webhook: ${{ secrets.DISCORD_WEBHOOK }}
|
webhook: ${{ secrets.DISCORD_WEBHOOK }}
|
||||||
message: "Github Actions for **${{ github.repository }}**."
|
message: "Github Actions for **${{ github.repository }}**."
|
||||||
|
|||||||
Submodule Zframework updated: 963af77fe2...8e39257d64
60
main.lua
60
main.lua
@@ -16,21 +16,19 @@
|
|||||||
|
|
||||||
|
|
||||||
-- Var leak check
|
-- Var leak check
|
||||||
-- setmetatable(_G,{__newindex=function(self,k,v)print('>>'..k)print(debug.traceback():match("\n.-\n\t(.-): "))rawset(self,k,v)end})
|
-- setmetatable(_G,{__newindex=function(self,k,v) print('>>'..k..string.rep(" ",26-#k),debug.traceback():match("\n.-\n\t(.-): "))rawset(self,k,v) end})
|
||||||
|
|
||||||
-- System Global Vars Declaration
|
-- System Global Vars Declaration
|
||||||
local fs=love.filesystem
|
local fs=love.filesystem
|
||||||
VERSION=require"version"
|
VERSION=require"version"
|
||||||
TIME=love.timer.getTime
|
TIME=love.timer.getTime
|
||||||
YIELD=coroutine.yield
|
|
||||||
SYSTEM=love.system.getOS() if SYSTEM=='OS X' then SYSTEM='macOS' end
|
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
|
FNNS=SYSTEM:find'\79\83'-- What does FNSF stand for? IDK so don't ask me lol
|
||||||
MOBILE=SYSTEM=='Android' or SYSTEM=='iOS'
|
MOBILE=SYSTEM=='Android' or SYSTEM=='iOS'
|
||||||
SAVEDIR=fs.getSaveDirectory()
|
|
||||||
|
|
||||||
-- Global Vars & Settings
|
-- Global Vars & Settings
|
||||||
SFXPACKS={'chiptune'}
|
SFXPACKS={'chiptune'}
|
||||||
VOCPACKS={'miya','mono','xiaoya','miku','rin'}
|
VOCPACKS={'miya','mono','xiaoya','miku'}
|
||||||
FIRSTLAUNCH=false
|
FIRSTLAUNCH=false
|
||||||
DAILYLAUNCH=false
|
DAILYLAUNCH=false
|
||||||
|
|
||||||
@@ -59,17 +57,16 @@ FONT.setFallback('norm')
|
|||||||
|
|
||||||
SCR.setSize(1280,720)-- Initialize Screen size
|
SCR.setSize(1280,720)-- Initialize Screen size
|
||||||
BGM.setMaxSources(5)
|
BGM.setMaxSources(5)
|
||||||
BGM.setChange(function(name)MES.new('music',text.nowPlaying..name,5)end)
|
|
||||||
VOC.setDiversion(.62)
|
VOC.setDiversion(.62)
|
||||||
|
|
||||||
WIDGET.setOnChange(function()
|
WIDGET.setOnChange(function()
|
||||||
if SCN.cur~='custom_field'then
|
if SCN.cur~='net_game' and SCN.cur~='custom_field' then
|
||||||
local colorList=THEME.getThemeColor()
|
local colorList=THEME.getThemeColor()
|
||||||
if not colorList then return end
|
if colorList then
|
||||||
local rnd=math.random
|
|
||||||
for _,W in next,SCN.scenes[SCN.cur].widgetList do
|
for _,W in next,SCN.scenes[SCN.cur].widgetList do
|
||||||
if W.color then
|
if W.color then
|
||||||
W.color=colorList[rnd(#colorList)]
|
W.color=colorList[math.random(#colorList)]
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -108,7 +105,7 @@ require'parts.gameFuncs'
|
|||||||
-- Load shader files from SOURCE ONLY
|
-- Load shader files from SOURCE ONLY
|
||||||
SHADER={}
|
SHADER={}
|
||||||
for _,v in next,fs.getDirectoryItems('parts/shaders') do
|
for _,v in next,fs.getDirectoryItems('parts/shaders') do
|
||||||
if isSafeFile('parts/shaders/'..v)then
|
if FILE.isSafe('parts/shaders/'..v) then
|
||||||
local name=v:sub(1,-6)
|
local name=v:sub(1,-6)
|
||||||
SHADER[name]=love.graphics.newShader('parts/shaders/'..name..'.glsl')
|
SHADER[name]=love.graphics.newShader('parts/shaders/'..name..'.glsl')
|
||||||
end
|
end
|
||||||
@@ -149,6 +146,7 @@ do--Z.setCursor
|
|||||||
{'dCirc',8,8,7},
|
{'dCirc',8,8,7},
|
||||||
{'fCirc',8,8,3},
|
{'fCirc',8,8,3},
|
||||||
}
|
}
|
||||||
|
local _
|
||||||
Z.setCursor(function(time,x,y)
|
Z.setCursor(function(time,x,y)
|
||||||
if not SETTING.sysCursor then
|
if not SETTING.sysCursor then
|
||||||
local R=math.floor((time+1)/2)%7+1
|
local R=math.floor((time+1)/2)%7+1
|
||||||
@@ -180,6 +178,12 @@ Z.setOnFnKeys({
|
|||||||
function() for k,v in next,_G do print(k,v) end end,
|
function() for k,v in next,_G do print(k,v) end end,
|
||||||
function() if love['_openConsole'] then love['_openConsole']() end end,
|
function() if love['_openConsole'] then love['_openConsole']() end end,
|
||||||
})
|
})
|
||||||
|
Z.setOnGlobalKey('f11',function()
|
||||||
|
SETTING.fullscreen=not SETTING.fullscreen
|
||||||
|
applySettings()
|
||||||
|
saveSettings()
|
||||||
|
end)
|
||||||
|
Z.setVersionText(VERSION.string)
|
||||||
Z.setDebugInfo{
|
Z.setDebugInfo{
|
||||||
{"Cache",gcinfo},
|
{"Cache",gcinfo},
|
||||||
{"Tasks",TASK.getCount},
|
{"Tasks",TASK.getCount},
|
||||||
@@ -224,7 +228,16 @@ do--Z.setOnFocus
|
|||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
Z.setOnQuit(destroyPlayers)
|
Z.setOnBeforeQuit(function()
|
||||||
|
NET.ws_close()
|
||||||
|
TASK.new(function()
|
||||||
|
TEST.yieldT(.26)
|
||||||
|
love.event.quit()
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
Z.setOnQuit(function()
|
||||||
|
destroyPlayers()
|
||||||
|
end)
|
||||||
|
|
||||||
-- Load settings and statistics
|
-- Load settings and statistics
|
||||||
if
|
if
|
||||||
@@ -348,16 +361,16 @@ SKIN.load{
|
|||||||
SFX.init((function()--[Warning] Not loading files here, just get the list of sound needed
|
SFX.init((function()--[Warning] Not loading files here, just get the list of sound needed
|
||||||
local L={}
|
local L={}
|
||||||
for _,v in next,fs.getDirectoryItems('media/effect/chiptune/') do
|
for _,v in next,fs.getDirectoryItems('media/effect/chiptune/') do
|
||||||
if isSafeFile('media/effect/chiptune/'..v,"Dangerous file : %SAVE%/media/effect/chiptune/"..v)then
|
if FILE.isSafe('media/effect/chiptune/'..v,"Dangerous file : %SAVE%/media/effect/chiptune/"..v) then
|
||||||
table.insert(L,v:sub(1,-5))
|
table.insert(L,v:sub(1,-5))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return L
|
return L
|
||||||
end)())
|
end)())
|
||||||
BGM.load((function()
|
BGM.init((function()
|
||||||
local L={}
|
local L={}
|
||||||
for _,v in next,fs.getDirectoryItems('media/music') do
|
for _,v in next,fs.getDirectoryItems('media/music') do
|
||||||
if isSafeFile('media/music/'..v,"Dangerous file : %SAVE%/media/music/"..v)then
|
if FILE.isSafe('media/music/'..v,"Dangerous file : %SAVE%/media/music/"..v) then
|
||||||
L[v:sub(1,-5)]='media/music/'..v
|
L[v:sub(1,-5)]='media/music/'..v
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -412,7 +425,7 @@ table.insert(_LOADTIMELIST_,("Initialize Parts: %.3fs"):format(TIME()-_LOADTIME_
|
|||||||
|
|
||||||
-- Load background files from SOURCE ONLY
|
-- Load background files from SOURCE ONLY
|
||||||
for _,v in next,fs.getDirectoryItems('parts/backgrounds') do
|
for _,v in next,fs.getDirectoryItems('parts/backgrounds') do
|
||||||
if isSafeFile('parts/backgrounds/'..v)and v:sub(-3)=='lua'then
|
if FILE.isSafe('parts/backgrounds/'..v) and v:sub(-3)=='lua' then
|
||||||
local name=v:sub(1,-5)
|
local name=v:sub(1,-5)
|
||||||
BG.add(name,require('parts.backgrounds.'..name))
|
BG.add(name,require('parts.backgrounds.'..name))
|
||||||
end
|
end
|
||||||
@@ -420,7 +433,7 @@ end
|
|||||||
BG.remList('none')BG.remList('gray')BG.remList('custom')
|
BG.remList('none')BG.remList('gray')BG.remList('custom')
|
||||||
-- Load scene files from SOURCE ONLY
|
-- Load scene files from SOURCE ONLY
|
||||||
for _,v in next,fs.getDirectoryItems('parts/scenes') do
|
for _,v in next,fs.getDirectoryItems('parts/scenes') do
|
||||||
if isSafeFile('parts/scenes/'..v)then
|
if FILE.isSafe('parts/scenes/'..v) then
|
||||||
local sceneName=v:sub(1,-5)
|
local sceneName=v:sub(1,-5)
|
||||||
SCN.add(sceneName,require('parts.scenes.'..sceneName))
|
SCN.add(sceneName,require('parts.scenes.'..sceneName))
|
||||||
LANG.addScene(sceneName)
|
LANG.addScene(sceneName)
|
||||||
@@ -429,13 +442,13 @@ end
|
|||||||
-- Load mode files
|
-- Load mode files
|
||||||
for i=1,#MODES do
|
for i=1,#MODES do
|
||||||
local m=MODES[i]-- Mode template
|
local m=MODES[i]-- Mode template
|
||||||
if isSafeFile('parts/modes/'..m.name)then
|
if FILE.isSafe('parts/modes/'..m.name) then
|
||||||
TABLE.complete(require('parts.modes.'..m.name),MODES[i])
|
TABLE.complete(require('parts.modes.'..m.name),MODES[i])
|
||||||
MODES[m.name],MODES[i]=MODES[i]
|
MODES[m.name],MODES[i]=MODES[i]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
for _,v in next,fs.getDirectoryItems('parts/modes') do
|
for _,v in next,fs.getDirectoryItems('parts/modes') do
|
||||||
if isSafeFile('parts/modes/'..v)and not MODES[v:sub(1,-5)]then
|
if FILE.isSafe('parts/modes/'..v) and not MODES[v:sub(1,-5)] then
|
||||||
local M={name=v:sub(1,-5)}
|
local M={name=v:sub(1,-5)}
|
||||||
local modeData=require('parts.modes.'..M.name)
|
local modeData=require('parts.modes.'..M.name)
|
||||||
if modeData.env then
|
if modeData.env then
|
||||||
@@ -547,7 +560,7 @@ do
|
|||||||
STAT.version=VERSION.code
|
STAT.version=VERSION.code
|
||||||
needSave=true
|
needSave=true
|
||||||
end
|
end
|
||||||
SETTING.appLock,SETTING.dataSaving,SETTING.swap=nil
|
SETTING.appLock,SETTING.dataSaving,SETTING.swap,SETTING.autoLogin=nil
|
||||||
if not SETTING.VKSkin then SETTING.VKSkin=1 end
|
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
|
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 not RSlist[SETTING.RS] then SETTING.RS='TRS' end
|
||||||
@@ -559,6 +572,7 @@ do
|
|||||||
if SETTING.skin[18]==10 then SETTING.skin[18]=4 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.reTime>3 or SETTING.reTime<.5 then SETTING.reTime=2 end
|
||||||
if SETTING.locale=='zh_full' then SETTING.locale='zh' 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 then RANKS.infinite=0 end
|
||||||
if RANKS.infinite_dig then RANKS.infinite_dig=0 end
|
if RANKS.infinite_dig then RANKS.infinite_dig=0 end
|
||||||
if not RANKS.sprint_10l then RANKS.sprint_10l=0 end
|
if not RANKS.sprint_10l then RANKS.sprint_10l=0 end
|
||||||
@@ -662,7 +676,7 @@ for i=1,#_LOADTIMELIST_ do LOG(_LOADTIMELIST_[i])end
|
|||||||
-- Launch testing task if launch param received
|
-- Launch testing task if launch param received
|
||||||
if TABLE.find(arg,'-- test') then
|
if TABLE.find(arg,'-- test') then
|
||||||
TASK.new(function()
|
TASK.new(function()
|
||||||
while not LOADED do YIELD()end
|
while not LOADED do coroutine.yield() end
|
||||||
|
|
||||||
LOG("\27[92m\27[1mAutomatic Test Started\27[0m")
|
LOG("\27[92m\27[1mAutomatic Test Started\27[0m")
|
||||||
BGM.setVol(0)SFX.setVol(0)
|
BGM.setVol(0)SFX.setVol(0)
|
||||||
@@ -684,7 +698,7 @@ if TABLE.find(arg,'--test')then
|
|||||||
end)
|
end)
|
||||||
TASK.new(function()
|
TASK.new(function()
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if Z.getErr(1) then break end
|
if Z.getErr(1) then break end
|
||||||
end
|
end
|
||||||
LOG("\27[91m\27[1mAutomatic Test Failed :(\27[0m\nThe error message is:\n"..table.concat(Z.getErr(1).mes,"\n").."\27[91m\nAborting\27[0m")
|
LOG("\27[91m\27[1mAutomatic Test Failed :(\27[0m\nThe error message is:\n"..table.concat(Z.getErr(1).mes,"\n").."\27[91m\nAborting\27[0m")
|
||||||
@@ -692,4 +706,6 @@ if TABLE.find(arg,'--test')then
|
|||||||
love.event.quit(1)
|
love.event.quit(1)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
WS.switchHost('101.43.110.22','10026','/tech/socket/v1')
|
WS.switchHost('cafuuchino1.3322.org','10026','/techmino/ws/v1')
|
||||||
|
HTTP.setHost("cafuuchino1.3322.org:10026")
|
||||||
|
HTTP.setThreadCount(1)
|
||||||
|
|||||||
BIN
media/music/antispace.ogg
Normal file
BIN
media/music/antispace.ogg
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -160,9 +160,9 @@ do
|
|||||||
[03]={'+0+0','+1+0','+1+1','+0-2','+1-2','+0+1'},
|
[03]={'+0+0','+1+0','+1+1','+0-2','+1-2','+0+1'},
|
||||||
[30]={'+0+0','-1+0','-1-1','+0+2','-1+2','+0+1','+0-1'},
|
[30]={'+0+0','-1+0','-1-1','+0+2','-1+2','+0+1','+0-1'},
|
||||||
[12]={'+0+0','+1+0','+1-1','+0-1','-1-1','+0+2','+1+2','+1+1'},
|
[12]={'+0+0','+1+0','+1-1','+0-1','-1-1','+0+2','+1+2','+1+1'},
|
||||||
[21]={'+0+0','-1+0','+0-2','-1-2','-1-1','+1+1'},
|
[21]={'+0+0','-1+0','+0-2','-1-2','-1-1','+0-1','+1+1'},
|
||||||
[32]={'+0+0','-1+0','-1-1','+0-1','+1-1','+0+2','-1+2','-1+1'},
|
[32]={'+0+0','-1+0','-1-1','+0-1','+1-1','+0+2','-1+2','-1+1'},
|
||||||
[23]={'+0+0','+1+0','+0-2','+1-2','+1-1','-1+1'},
|
[23]={'+0+0','+1+0','+0-2','+1-2','+1-1','+0-1','-1+1'},
|
||||||
[02]={'+0+0','-1+0','+1+0','+0+1'},
|
[02]={'+0+0','-1+0','+1+0','+0+1'},
|
||||||
[20]={'+0+0','+1+0','-1+0','+0-1'},
|
[20]={'+0+0','+1+0','-1+0','+0-1'},
|
||||||
[13]={'+0+0','+0-1','+0+1','+1+0','+0-2','+0+2'},
|
[13]={'+0+0','+0-1','+0+1','+1+0','+0-2','+0+2'},
|
||||||
@@ -393,8 +393,8 @@ do
|
|||||||
{
|
{
|
||||||
[01]={'+0+0','+1-1','+1+0','+1+1','+0+1','-1+1','-1+0','-1-1','+0-1','+0-2','-2-1','-2-2','+2+0','+2-1','+2-2','+1+2','+2+2','-1+2','-2+2'},
|
[01]={'+0+0','+1-1','+1+0','+1+1','+0+1','-1+1','-1+0','-1-1','+0-1','+0-2','-2-1','-2-2','+2+0','+2-1','+2-2','+1+2','+2+2','-1+2','-2+2'},
|
||||||
[10]={'+0+0','-1+0','-1-1','+0-1','+1-1','-2-2','-2-1','-2+0','-1-2','+0-2','+1-2','+2-2','-1+1','-2+1','-2+2','+1+0','+2+0','+2-1','+0+1','+1-1','+2-2'},
|
[10]={'+0+0','-1+0','-1-1','+0-1','+1-1','-2-2','-2-1','-2+0','-1-2','+0-2','+1-2','+2-2','-1+1','-2+1','-2+2','+1+0','+2+0','+2-1','+0+1','+1-1','+2-2'},
|
||||||
[03]={'+0+0','-1-1','-1+0','-1+1','-0+1','+1+1','+1+0','+1-1','-0-1','-0-2','+2-1','+2-2','-2+0','-2-1','-2-2','-1+2','-2+2','+1+2','+2+2'},
|
[03]={'+0+0','-1-1','-1+0','-1+1','+0+1','+1+1','+1+0','+1-1','+0-1','+0-2','+2-1','+2-2','-2+0','-2-1','-2-2','-1+2','-2+2','+1+2','+2+2'},
|
||||||
[30]={'+0+0','+1+0','+1-1','-0-1','-1-1','+2-2','+2-1','+2+0','+1-2','-0-2','-1-2','-2-2','+1+1','+2+1','+2+2','-1+0','-2+0','-2-1','+0+1','-1-1','-2-2'},
|
[30]={'+0+0','+1+0','+1-1','+0-1','-1-1','+2-2','+2-1','+2+0','+1-2','+0-2','-1-2','-2-2','+1+1','+2+1','+2+2','-1+0','-2+0','-2-1','+0+1','-1-1','-2-2'},
|
||||||
},-- I5
|
},-- I5
|
||||||
{
|
{
|
||||||
[01]={'+0+0','-1+0','-1-1','+1+1','-1+1'},
|
[01]={'+0+0','-1+0','-1-1','+1+1','-1+1'},
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ local shader=SHADER.aura
|
|||||||
local t
|
local t
|
||||||
|
|
||||||
function back.init()
|
function back.init()
|
||||||
t=math.random()*260
|
t=math.random()*2600
|
||||||
BG.resize(SCR.w,SCR.h)
|
BG.resize(SCR.w,SCR.h)
|
||||||
end
|
end
|
||||||
function back.update(dt)
|
function back.update(dt)
|
||||||
t=(t+dt)%2600
|
t=(t+dt)%6200
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
GC.clear(.08,.08,.084)
|
GC.clear(.08,.08,.084)
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ local shader=SHADER.grad1
|
|||||||
|
|
||||||
local t
|
local t
|
||||||
function back.init()
|
function back.init()
|
||||||
t=math.random()*260
|
t=math.random()*2600
|
||||||
end
|
end
|
||||||
function back.update(dt)
|
function back.update(dt)
|
||||||
t=(t+dt)%2600
|
t=(t+dt)%6200
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
GC.clear(.08,.08,.084)
|
GC.clear(.08,.08,.084)
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ local shader=SHADER.grad2
|
|||||||
|
|
||||||
local t
|
local t
|
||||||
function back.init()
|
function back.init()
|
||||||
t=math.random()*260
|
t=math.random()*2600
|
||||||
BG.resize(nil,SCR.h)
|
BG.resize(nil,SCR.h)
|
||||||
end
|
end
|
||||||
function back.update(dt)
|
function back.update(dt)
|
||||||
t=(t+dt)%2600
|
t=(t+dt)%6200
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
GC.clear(.08,.08,.084)
|
GC.clear(.08,.08,.084)
|
||||||
|
|||||||
41
parts/backgrounds/galaxy.lua
Normal file
41
parts/backgrounds/galaxy.lua
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
--Space with stars
|
||||||
|
local gc=love.graphics
|
||||||
|
local circle,setColor,hsv=gc.circle,gc.setColor,COLOR.hsv
|
||||||
|
local sin,cos=math.sin,math.cos
|
||||||
|
local back={}
|
||||||
|
|
||||||
|
local sDist,sRev={},{} -- star data in SoA [distance from center, revolution progress, color]
|
||||||
|
|
||||||
|
function back.init()
|
||||||
|
if sDist[1]then return end
|
||||||
|
local max
|
||||||
|
for i=0,20 do
|
||||||
|
max=16*(i+1)
|
||||||
|
for j=1,max do
|
||||||
|
sDist[#sDist+1]=i+math.random()
|
||||||
|
sRev[#sRev+1]=MATH.tau*j/max+MATH.tau*math.random()/max
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function back.update(dt)
|
||||||
|
for i=1,#sDist do
|
||||||
|
sRev[i]=(sRev[i]+dt/(sDist[i]+1))%MATH.tau
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function back.draw()
|
||||||
|
gc.clear()
|
||||||
|
gc.translate(SCR.cx,SCR.cy)
|
||||||
|
gc.scale(SCR.k)
|
||||||
|
gc.rotate(1)
|
||||||
|
for i=1,#sDist do
|
||||||
|
local d,r=sDist[i],sRev[i]
|
||||||
|
if d<5 then
|
||||||
|
setColor(hsv(.088,(d-2)/7,1,.7))
|
||||||
|
else
|
||||||
|
setColor(hsv(.572,d/70+.1,(22-d)/12,.7))
|
||||||
|
end
|
||||||
|
circle('fill',8*d*cos(r),24*d*sin(r),3)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return back
|
||||||
145
parts/backgrounds/quarks.lua
Normal file
145
parts/backgrounds/quarks.lua
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
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 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 blasts={} -- data about annihilation blasts from particles and antiparticles colliding
|
||||||
|
local ptc={} -- particle-antiparticle data (antiparticle is a mirror of particle)
|
||||||
|
local nextpair
|
||||||
|
|
||||||
|
local W,H,size
|
||||||
|
local quarkCount=400
|
||||||
|
|
||||||
|
local function spawnQuarkRandom(i)
|
||||||
|
qX[i]=rnd(W)-10 -- X
|
||||||
|
qY[i]=rnd(H)-10 -- Y
|
||||||
|
local theta=rnd()*MATH.tau
|
||||||
|
qdX[i]=cos(theta)*300 -- dx
|
||||||
|
qdY[i]=sin(theta)*300 -- dy
|
||||||
|
end
|
||||||
|
local function spawnQuarkEdge(i)
|
||||||
|
local side=rnd(4)
|
||||||
|
if side==1 then -- Up edge of screen
|
||||||
|
qX[i]=rnd(SCR.x-10,SCR.ex+10)
|
||||||
|
qY[i]=SCR.y-10
|
||||||
|
elseif side==2 then -- Right edge of screen
|
||||||
|
qX[i]=SCR.ex+10
|
||||||
|
qY[i]=rnd(SCR.y-10,SCR.ey+10)
|
||||||
|
elseif side==3 then -- Down edge of screen
|
||||||
|
qX[i]=rnd(SCR.x-10,SCR.ex+10)
|
||||||
|
qY[i]=SCR.ey+10
|
||||||
|
elseif side==4 then -- Left edge of screen
|
||||||
|
qX[i]=SCR.x-10
|
||||||
|
qY[i]=rnd(SCR.y-10,SCR.ey+10)
|
||||||
|
end
|
||||||
|
local theta=rnd()*MATH.tau
|
||||||
|
qdX[i]=cos(theta)*300 -- dx
|
||||||
|
qdY[i]=sin(theta)*300 -- dy
|
||||||
|
end
|
||||||
|
local function spawnParticlePair()
|
||||||
|
ptc[#ptc+1]={
|
||||||
|
x=rnd(W)-10,
|
||||||
|
y=rnd(H)-10,
|
||||||
|
dist=0,
|
||||||
|
theta=rnd()*MATH.tau,
|
||||||
|
v=500,
|
||||||
|
c=rnd(3),
|
||||||
|
}
|
||||||
|
end
|
||||||
|
local function spawnBlast(_x,_y)
|
||||||
|
blasts[#blasts+1]={x=_x,y=_y,t=0}
|
||||||
|
end
|
||||||
|
|
||||||
|
function back.init()
|
||||||
|
qX,qY,qdX,qdY={},{},{},{}
|
||||||
|
blasts={}
|
||||||
|
ptc={}
|
||||||
|
nextpair=0
|
||||||
|
BG.resize(SCR.w,SCR.h)
|
||||||
|
end
|
||||||
|
function back.resize(w,h)
|
||||||
|
W,H=w+20,h+20
|
||||||
|
for i=1,quarkCount do spawnQuarkRandom(i) end
|
||||||
|
size=2.6*SCR.k
|
||||||
|
end
|
||||||
|
function back.update(dt)
|
||||||
|
-- Move far-away quarks
|
||||||
|
for i=1,quarkCount do
|
||||||
|
qX[i]=qX[i]+qdX[i]*dt
|
||||||
|
qY[i]=qY[i]+qdY[i]*dt
|
||||||
|
if qX[i]<SCR.x-26 or qX[i]>SCR.ex+26 or qY[i]<SCR.y-26 or qY[i]>SCR.ey+26 then
|
||||||
|
spawnQuarkEdge(i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Particle pair attraction & destruction
|
||||||
|
for i=#ptc,1,-1 do
|
||||||
|
local p=ptc[i]
|
||||||
|
if p then
|
||||||
|
p.dist=p.dist+p.v*dt
|
||||||
|
p.v=p.v-p.dist^2*dt
|
||||||
|
|
||||||
|
-- Destroy colliding particle pairs
|
||||||
|
if p.dist<=10 and p.v<=0 then
|
||||||
|
spawnBlast(p.x,p.y)
|
||||||
|
table.remove(ptc,i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Age blasts, delete old blasts
|
||||||
|
for i=#blasts,1,-1 do
|
||||||
|
if blasts[i] then
|
||||||
|
blasts[i].t=blasts[i].t+dt
|
||||||
|
if blasts[i].t>=1 then
|
||||||
|
table.remove(blasts,i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Spawn particle pairs
|
||||||
|
nextpair=nextpair-dt
|
||||||
|
if nextpair<=0 then
|
||||||
|
spawnParticlePair()
|
||||||
|
nextpair=rnd()*4
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function back.draw()
|
||||||
|
gc.clear(.08,.04,.01)
|
||||||
|
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
|
||||||
|
|
||||||
|
for i=1,#ptc do
|
||||||
|
local p=ptc[i]
|
||||||
|
push()
|
||||||
|
translate(p.x,p.y)
|
||||||
|
rot(p.theta)
|
||||||
|
|
||||||
|
setColor(ptcclr[p.c])
|
||||||
|
circle('fill', p.dist,0,4*size)
|
||||||
|
setColor(apcclr[p.c])
|
||||||
|
circle('fill',-p.dist,0,4*size)
|
||||||
|
pop()
|
||||||
|
end
|
||||||
|
for i=1,#blasts do
|
||||||
|
local t=blasts[i].t
|
||||||
|
setColor(hsv(-80*t,1-1.7*log(5*t,10),1,1-t))
|
||||||
|
circle('fill',blasts[i].x,blasts[i].y,62*t^.3)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
function back.discard()
|
||||||
|
qX,qY,qdX,qdY,qC=nil
|
||||||
|
ptc,blasts=nil
|
||||||
|
collectgarbage()
|
||||||
|
end
|
||||||
|
return back
|
||||||
@@ -4,11 +4,11 @@ local shader=SHADER.rgb1
|
|||||||
|
|
||||||
local t
|
local t
|
||||||
function back.init()
|
function back.init()
|
||||||
t=math.random()*260
|
t=math.random()*2600
|
||||||
BG.resize(SCR.w,SCR.h)
|
BG.resize(SCR.w,SCR.h)
|
||||||
end
|
end
|
||||||
function back.update(dt)
|
function back.update(dt)
|
||||||
t=(t+dt)%2600
|
t=(t+dt)%6200
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
GC.clear(.08,.08,.084)
|
GC.clear(.08,.08,.084)
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ local shader=SHADER.rgb2
|
|||||||
|
|
||||||
local t
|
local t
|
||||||
function back.init()
|
function back.init()
|
||||||
t=math.random()*260
|
t=math.random()*2600
|
||||||
BG.resize(SCR.w,SCR.h)
|
BG.resize(SCR.w,SCR.h)
|
||||||
end
|
end
|
||||||
function back.update(dt)
|
function back.update(dt)
|
||||||
t=(t+dt)%2600
|
t=(t+dt)%6200
|
||||||
end
|
end
|
||||||
function back.draw()
|
function back.draw()
|
||||||
GC.clear(.08,.08,.084)
|
GC.clear(.08,.08,.084)
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ function bot_cc:checkDest(b2b,atk,exblock,yomi)
|
|||||||
local dest=self.P.destFX
|
local dest=self.P.destFX
|
||||||
if not dest then return end
|
if not dest then return end
|
||||||
if not (dest.b2b==b2b and dest.attack==atk and dest.extra==exblock) then
|
if not (dest.b2b==b2b and dest.attack==atk and dest.extra==exblock) then
|
||||||
print(('hope: %s %s %s'):format(dest.b2b,dest.attack,dest.extra))
|
-- print(('hope: %s %s %s'):format(dest.b2b,dest.attack,dest.extra))
|
||||||
print(('real: %s %s %s'):format(b2b,atk,exblock))
|
-- print(('real: %s %s %s'):format(b2b,atk,exblock))
|
||||||
print(yomi)
|
-- print(yomi)
|
||||||
self:lockWrongPlace()
|
self:lockWrongPlace()
|
||||||
self.P.destFX=nil
|
self.P.destFX=nil
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ function DATA.pasteBoard(str,page)--Paste [str] data to [page] board
|
|||||||
fX=fX+1
|
fX=fX+1
|
||||||
else
|
else
|
||||||
fY=fY+1
|
fY=fY+1
|
||||||
if fY>20 then break end
|
if fY>60 then break end
|
||||||
fX=1
|
fX=1
|
||||||
end
|
end
|
||||||
p=p+1
|
p=p+1
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ return{
|
|||||||
end,
|
end,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if P.control and P.atkBufferSum==0 then
|
if P.control and P.atkBufferSum==0 then
|
||||||
local D=P.modeData
|
local D=P.modeData
|
||||||
if D.wave==50 then
|
if D.wave==50 then
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ return{
|
|||||||
end,
|
end,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if P.control and P.atkBufferSum<4 then
|
if P.control and P.atkBufferSum<4 then
|
||||||
local D=P.modeData
|
local D=P.modeData
|
||||||
if D.wave==50 then
|
if D.wave==50 then
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ return{
|
|||||||
end,
|
end,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if P.control then
|
if P.control then
|
||||||
local D=P.modeData
|
local D=P.modeData
|
||||||
D.counter=D.counter+1
|
D.counter=D.counter+1
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ return{
|
|||||||
end,
|
end,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if P.control then
|
if P.control then
|
||||||
local D=P.modeData
|
local D=P.modeData
|
||||||
D.counter=D.counter+1
|
D.counter=D.counter+1
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return{
|
|||||||
end,
|
end,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if P.control then
|
if P.control then
|
||||||
local D=P.modeData
|
local D=P.modeData
|
||||||
D.timer=D.timer+1
|
D.timer=D.timer+1
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return{
|
|||||||
end,
|
end,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if P.control then
|
if P.control then
|
||||||
local D=P.modeData
|
local D=P.modeData
|
||||||
D.timer=D.timer+1
|
D.timer=D.timer+1
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ return{
|
|||||||
P.modeData.rankPoint=0
|
P.modeData.rankPoint=0
|
||||||
P.modeData.rankName=sectionName[1]
|
P.modeData.rankName=sectionName[1]
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if P.stat.frame>=3600 then
|
if P.stat.frame>=3600 then
|
||||||
P.modeData.rankPoint=math.min(P.modeData.rankPoint+passPoint,140)
|
P.modeData.rankPoint=math.min(P.modeData.rankPoint+passPoint,140)
|
||||||
P.modeData.rankName=sectionName[math.floor(P.modeData.rankPoint/10)+1]
|
P.modeData.rankName=sectionName[math.floor(P.modeData.rankPoint/10)+1]
|
||||||
|
|||||||
@@ -289,7 +289,7 @@ return{
|
|||||||
local decayRate={125,80,80,50,45,45,45,40,40,40,40,40,30,30,30,20,20,20,20,20,15,15,15,15,15,15,15,15,15,15,10,10,10,9,9,9,8,8,8,7,7,7,6}
|
local decayRate={125,80,80,50,45,45,45,40,40,40,40,40,30,30,30,20,20,20,20,20,15,15,15,15,15,15,15,15,15,15,10,10,10,9,9,9,8,8,8,7,7,7,6}
|
||||||
local decayTimer=0
|
local decayTimer=0
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
P.modeData.grade=getGrade()
|
P.modeData.grade=getGrade()
|
||||||
P.modeData.gradePts=math.max(math.min(math.floor(int_grade_boosts[math.min(int_grade+1,#int_grade_boosts)]+rollGrades+cools+1-regrets),#gradeList),1)
|
P.modeData.gradePts=math.max(math.min(math.floor(int_grade_boosts[math.min(int_grade+1,#int_grade_boosts)]+rollGrades+cools+1-regrets),#gradeList),1)
|
||||||
if P.stat.frame-prevSectTime > reg_time[math.ceil(P.modeData.pt/100+0.01)] and not (isInRoll or isInRollTrans) then
|
if P.stat.frame-prevSectTime > reg_time[math.ceil(P.modeData.pt/100+0.01)] and not (isInRoll or isInRollTrans) then
|
||||||
@@ -336,7 +336,7 @@ return{
|
|||||||
rollGrades=rollGrades+(cools>8 and 1.6 or 0.5)
|
rollGrades=rollGrades+(cools>8 and 1.6 or 0.5)
|
||||||
P.modeData.grade=getGrade()
|
P.modeData.grade=getGrade()
|
||||||
P.modeData.gradePts=math.min(math.floor(int_grade_boosts[math.min(int_grade+1,#int_grade_boosts)]+rollGrades+cools+1-regrets),#gradeList)
|
P.modeData.gradePts=math.min(math.floor(int_grade_boosts[math.min(int_grade+1,#int_grade_boosts)]+rollGrades+cools+1-regrets),#gradeList)
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
P:win('finish')
|
P:win('finish')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ return{
|
|||||||
P.modeData.pt=0
|
P.modeData.pt=0
|
||||||
P.modeData.target=100
|
P.modeData.target=100
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if P.holdTime==0 and P.waiting<=0 and not held then
|
if P.holdTime==0 and P.waiting<=0 and not held then
|
||||||
hidetimer=0
|
hidetimer=0
|
||||||
held=true
|
held=true
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ local function task_PC(P)
|
|||||||
P:pushNextList(L,symmetry)
|
P:pushNextList(L,symmetry)
|
||||||
|
|
||||||
P.control=false
|
P.control=false
|
||||||
if P.frameRun>180 then for _=1,26 do YIELD()end end
|
if P.frameRun>180 then for _=1,26 do coroutine.yield() end end
|
||||||
P.control=true
|
P.control=true
|
||||||
|
|
||||||
local base=PCbase[difficulty]
|
local base=PCbase[difficulty]
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ local function task_PC(P)
|
|||||||
P:pushNextList(L,symmetry)
|
P:pushNextList(L,symmetry)
|
||||||
|
|
||||||
P.control=false
|
P.control=false
|
||||||
if P.frameRun>180 then for _=1,26 do YIELD()end end
|
if P.frameRun>180 then for _=1,26 do coroutine.yield() end end
|
||||||
P.control=true
|
P.control=true
|
||||||
|
|
||||||
local base=PCbase[difficulty]
|
local base=PCbase[difficulty]
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ return{
|
|||||||
PLY.draw.drawTargetLine(P,r)
|
PLY.draw.drawTargetLine(P,r)
|
||||||
end,
|
end,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
while true do
|
while true do
|
||||||
for _=1,P.holeRND:random(40,200)do YIELD()end
|
for _=1,P.holeRND:random(40,200) do coroutine.yield() end
|
||||||
local r=P.holeRND:random(7)
|
local r=P.holeRND:random(7)
|
||||||
if r==1 then
|
if r==1 then
|
||||||
if P.cur and not P:ifoverlap(P.cur.bk,P.curX-1,P.curY) then
|
if P.cur and not P:ifoverlap(P.cur.bk,P.curX-1,P.curY) then
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return{
|
|||||||
end,
|
end,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if P.control then
|
if P.control then
|
||||||
local D=P.modeData
|
local D=P.modeData
|
||||||
D.timer=D.timer+1
|
D.timer=D.timer+1
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return{
|
|||||||
end,
|
end,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if P.control then
|
if P.control then
|
||||||
local D=P.modeData
|
local D=P.modeData
|
||||||
D.timer=D.timer+1
|
D.timer=D.timer+1
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return{
|
|||||||
end,
|
end,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if P.control then
|
if P.control then
|
||||||
local D=P.modeData
|
local D=P.modeData
|
||||||
D.timer=D.timer+1
|
D.timer=D.timer+1
|
||||||
@@ -18,7 +18,7 @@ return{
|
|||||||
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(10)),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3})
|
table.insert(P.atkBuffer,{line=generateLine(P.holeRND:random(10)),amount=4,countdown=t,cd0=t,time=0,sent=false,lv=3})
|
||||||
P.atkBufferSum=P.atkBufferSum+4
|
P.atkBufferSum=P.atkBufferSum+4
|
||||||
P.stat.recv=P.stat.recv+4
|
P.stat.recv=P.stat.recv+4
|
||||||
if D.wave==60 then
|
if D.wave==90 then
|
||||||
P:_showText(text.maxspeed,0,-140,100,'appear',.6)
|
P:_showText(text.maxspeed,0,-140,100,'appear',.6)
|
||||||
end
|
end
|
||||||
P:shakeField(3)
|
P:shakeField(3)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return{
|
|||||||
end,
|
end,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if P.control then
|
if P.control then
|
||||||
local D=P.modeData
|
local D=P.modeData
|
||||||
D.timer=D.timer+1
|
D.timer=D.timer+1
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return{
|
|||||||
end,
|
end,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if P.control then
|
if P.control then
|
||||||
local D=P.modeData
|
local D=P.modeData
|
||||||
D.timer=D.timer+1
|
D.timer=D.timer+1
|
||||||
|
|||||||
@@ -18,10 +18,10 @@ return{
|
|||||||
GC.mStr(T,63,268)
|
GC.mStr(T,63,268)
|
||||||
end,
|
end,
|
||||||
task=function(P)
|
task=function(P)
|
||||||
BGM.seek(0)
|
BGM.set('all','seek',0)
|
||||||
P.modeData.section=1
|
P.modeData.section=1
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
while P.stat.frame>=warnTime[P.modeData.section] do
|
while P.stat.frame>=warnTime[P.modeData.section] do
|
||||||
if P.modeData.section<9 then
|
if P.modeData.section<9 then
|
||||||
P.modeData.section=P.modeData.section+1
|
P.modeData.section=P.modeData.section+1
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ local gc_push,gc_pop=GC.push,GC.pop
|
|||||||
local gc_origin,gc_replaceTransform=GC.origin,GC.replaceTransform
|
local gc_origin,gc_replaceTransform=GC.origin,GC.replaceTransform
|
||||||
local gc_setLineWidth,gc_setColor=GC.setLineWidth,GC.setColor
|
local gc_setLineWidth,gc_setColor=GC.setLineWidth,GC.setColor
|
||||||
local gc_setShader=GC.setShader
|
local gc_setShader=GC.setShader
|
||||||
local gc_draw,gc_rectangle,gc_line,gc_printf=GC.draw,GC.rectangle,GC.line,GC.printf
|
local gc_draw,gc_rectangle,gc_printf=GC.draw,GC.rectangle,GC.printf
|
||||||
|
|
||||||
local ins,rem=table.insert,table.remove
|
local ins,rem=table.insert,table.remove
|
||||||
local int,rnd=math.floor,math.random
|
local int,rnd=math.floor,math.random
|
||||||
@@ -10,7 +10,6 @@ local approach=MATH.expApproach
|
|||||||
|
|
||||||
local SETTING,GAME,SCR=SETTING,GAME,SCR
|
local SETTING,GAME,SCR=SETTING,GAME,SCR
|
||||||
local PLAYERS=PLAYERS
|
local PLAYERS=PLAYERS
|
||||||
local playSFX=SFX.play
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -93,13 +92,6 @@ do--function loadFile(name,args), function saveFile(data,name,args)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function isSafeFile(file,mes)
|
|
||||||
if love.filesystem.getRealDirectory(file)~=SAVEDIR then
|
|
||||||
return true
|
|
||||||
elseif mes then
|
|
||||||
MES.new('warn',mes)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
function saveStats()
|
function saveStats()
|
||||||
return saveFile(STAT,'conf/data')
|
return saveFile(STAT,'conf/data')
|
||||||
end
|
end
|
||||||
@@ -107,8 +99,14 @@ function saveProgress()
|
|||||||
return saveFile(RANKS,'conf/unlock')
|
return saveFile(RANKS,'conf/unlock')
|
||||||
end
|
end
|
||||||
function saveSettings()
|
function saveSettings()
|
||||||
|
if WS.status('game')=='running' then
|
||||||
|
NET.player_updateConf()
|
||||||
|
end
|
||||||
return saveFile(SETTING,'conf/settings')
|
return saveFile(SETTING,'conf/settings')
|
||||||
end
|
end
|
||||||
|
function saveUser()
|
||||||
|
return saveFile(USER.__data,'conf/user')
|
||||||
|
end
|
||||||
do-- function applySettings()
|
do-- function applySettings()
|
||||||
local saturateValues={
|
local saturateValues={
|
||||||
normal={0,1},
|
normal={0,1},
|
||||||
@@ -190,12 +188,22 @@ end
|
|||||||
|
|
||||||
-- Royale mode
|
-- Royale mode
|
||||||
function randomTarget(P)-- Return a random opponent for P
|
function randomTarget(P)-- Return a random opponent for P
|
||||||
if #PLY_ALIVE>1 then
|
local l=TABLE.shift(PLY_ALIVE,0)
|
||||||
local R
|
local count=0
|
||||||
repeat
|
for i=1,#l do
|
||||||
R=PLY_ALIVE[rnd(#PLY_ALIVE)]
|
if P.group==0 and l[i]~=P or P.group~=l[i].group then
|
||||||
until R~=P
|
count=count+1
|
||||||
return R
|
end
|
||||||
|
end
|
||||||
|
if count==0 then return end
|
||||||
|
count=rnd(count)
|
||||||
|
for i=1,#l do
|
||||||
|
if P.group==0 and l[i]~=P or P.group~=l[i].group then
|
||||||
|
count=count-1
|
||||||
|
if count==0 then
|
||||||
|
return l[i]
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
function freshMostDangerous()
|
function freshMostDangerous()
|
||||||
@@ -288,25 +296,25 @@ end
|
|||||||
function playClearSFX(cc)
|
function playClearSFX(cc)
|
||||||
if cc<=0 or cc%1~=0 then return end
|
if cc<=0 or cc%1~=0 then return end
|
||||||
if cc<=4 then
|
if cc<=4 then
|
||||||
playSFX('clear_'..cc)
|
SFX.play('clear_'..cc)
|
||||||
elseif cc<=6 then
|
elseif cc<=6 then
|
||||||
playSFX('clear_4')
|
SFX.play('clear_4')
|
||||||
elseif cc<=12 then
|
elseif cc<=12 then
|
||||||
playSFX('clear_4',.8)
|
SFX.play('clear_4',.8)
|
||||||
if cc<=9 then
|
if cc<=9 then
|
||||||
Snd('bass','A3','E4')
|
Snd('bass','A3','E4')
|
||||||
else
|
else
|
||||||
Snd('bass','A3','E4','A4')
|
Snd('bass','A3','E4','A4')
|
||||||
end
|
end
|
||||||
elseif cc<=16 then
|
elseif cc<=16 then
|
||||||
playSFX('clear_5',.7)
|
SFX.play('clear_5',.7)
|
||||||
if cc<=14 then
|
if cc<=14 then
|
||||||
Snd('bass',.8,'A3','E4')Snd('lead','A4','E5')
|
Snd('bass',.8,'A3','E4')Snd('lead','A4','E5')
|
||||||
else
|
else
|
||||||
Snd('bass',.8,'A3','G4')Snd('lead','B4','G5')
|
Snd('bass',.8,'A3','G4')Snd('lead','B4','G5')
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
playSFX('clear_6',.6)
|
SFX.play('clear_6',.6)
|
||||||
if cc==17 then Snd('bass',.8,'A3','A4')Snd('lead','E5','G5')
|
if cc==17 then Snd('bass',.8,'A3','A4')Snd('lead','E5','G5')
|
||||||
elseif cc==18 then Snd('bass',.7,'A4')Snd('lead',.8,'C4','G5')Snd('bell','D5')
|
elseif cc==18 then Snd('bass',.7,'A4')Snd('lead',.8,'C4','G5')Snd('bell','D5')
|
||||||
elseif cc==19 then Snd('bass',.7,'A4')Snd('lead',.8,'A4','E5')Snd('bell','B5')
|
elseif cc==19 then Snd('bass',.7,'A4')Snd('lead',.8,'A4','E5')Snd('bell','B5')
|
||||||
@@ -493,7 +501,7 @@ end
|
|||||||
function loadGame(mode,ifQuickPlay,ifNet)-- Load a mode and go to game scene
|
function loadGame(mode,ifQuickPlay,ifNet)-- Load a mode and go to game scene
|
||||||
freshDate()
|
freshDate()
|
||||||
if legalGameTime() then
|
if legalGameTime() then
|
||||||
if not MODES[mode]and love.filesystem.getRealDirectory('parts/modes/'..mode)~=SAVEDIR then
|
if not MODES[mode] and FILE.isSafe('parts/modes/'..mode) then
|
||||||
MODES[mode]=require('parts.modes.'..mode)
|
MODES[mode]=require('parts.modes.'..mode)
|
||||||
MODES[mode].name=mode
|
MODES[mode].name=mode
|
||||||
end
|
end
|
||||||
@@ -513,7 +521,7 @@ function loadGame(mode,ifQuickPlay,ifNet)--Load a mode and go to game scene
|
|||||||
local modeText=text.modes[mode] or{"["..MODES[mode].name.."]",""}
|
local modeText=text.modes[mode] or{"["..MODES[mode].name.."]",""}
|
||||||
TEXTOBJ.modeName:set(modeText[1].." "..modeText[2])
|
TEXTOBJ.modeName:set(modeText[1].." "..modeText[2])
|
||||||
SCN.go('game',ifQuickPlay and 'swipeD' or 'fade_togame')
|
SCN.go('game',ifQuickPlay and 'swipeD' or 'fade_togame')
|
||||||
playSFX('enter')
|
SFX.play('enter')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -577,7 +585,7 @@ function gameOver()--Save record
|
|||||||
P:_showText(text.newRecord,0,-100,100,'beat',.5)
|
P:_showText(text.newRecord,0,-100,100,'beat',.5)
|
||||||
if SETTING.autoSave and DATA.saveReplay() then
|
if SETTING.autoSave and DATA.saveReplay() then
|
||||||
GAME.saved=true
|
GAME.saved=true
|
||||||
playSFX('connected')
|
SFX.play('connected')
|
||||||
MES.new('check',text.saveDone)
|
MES.new('check',text.saveDone)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -695,7 +703,7 @@ do--function resetGameData(args)
|
|||||||
local function task_showMods()
|
local function task_showMods()
|
||||||
local time=0
|
local time=0
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
time=time+1
|
time=time+1
|
||||||
if time%20==0 then
|
if time%20==0 then
|
||||||
local M=GAME.mod[time/20]
|
local M=GAME.mod[time/20]
|
||||||
@@ -792,13 +800,12 @@ do--function resetGameData(args)
|
|||||||
collectgarbage()
|
collectgarbage()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
do--function checkWarning()
|
do-- function checkWarning(P,dt)
|
||||||
local max=math.max
|
local max=math.max
|
||||||
function checkWarning(dt)
|
function checkWarning(P,dt)
|
||||||
local P1=PLAYERS[1]
|
if P.alive then
|
||||||
if P1.alive then
|
if P.frameRun%26==0 then
|
||||||
if P1.frameRun%26==0 then
|
local F=P.field
|
||||||
local F=P1.field
|
|
||||||
local height=0-- Max height of row 4~7
|
local height=0-- Max height of row 4~7
|
||||||
for x=4,7 do
|
for x=4,7 do
|
||||||
for y=#F,1,-1 do
|
for y=#F,1,-1 do
|
||||||
@@ -810,7 +817,7 @@ do--function checkWarning()
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
GAME.warnLVL0=math.log(height-(P1.gameEnv.fieldH-5)+P1.atkBufferSum*.8)
|
GAME.warnLVL0=math.log(height-(P.gameEnv.fieldH-5)+P.atkBufferSum*.8)
|
||||||
end
|
end
|
||||||
local _=GAME.warnLVL
|
local _=GAME.warnLVL
|
||||||
if _<GAME.warnLVL0 then
|
if _<GAME.warnLVL0 then
|
||||||
@@ -819,7 +826,7 @@ do--function checkWarning()
|
|||||||
_=max(_-.026,0)
|
_=max(_-.026,0)
|
||||||
end
|
end
|
||||||
GAME.warnLVL=_
|
GAME.warnLVL=_
|
||||||
if GAME.warnLVL>1.126 and P1.frameRun%30==0 then
|
if GAME.warnLVL>1.126 and P.frameRun%30==0 then
|
||||||
SFX.fplay('warn_beep',SETTING.sfx_warn)
|
SFX.fplay('warn_beep',SETTING.sfx_warn)
|
||||||
end
|
end
|
||||||
elseif GAME.warnLVL>0 then
|
elseif GAME.warnLVL>0 then
|
||||||
@@ -832,27 +839,9 @@ end
|
|||||||
|
|
||||||
-- Game draw
|
-- Game draw
|
||||||
do-- function drawSelfProfile()
|
do-- function drawSelfProfile()
|
||||||
local lvColor={COLOR.J,COLOR.A,COLOR.C,COLOR.N,COLOR.S,COLOR.V,COLOR.P,COLOR.M,COLOR.W,COLOR.R,COLOR.O,COLOR.Y}
|
|
||||||
local lvIcon=setmetatable({},{__index=function(self,lv)
|
|
||||||
local c=lvColor[int((lv-1)/26)+1]or COLOR.Z
|
|
||||||
|
|
||||||
local img=GC.DO{25,25,
|
|
||||||
{"clear",0,0,0,0},
|
|
||||||
{"setLW",2},
|
|
||||||
{"setCL",c[1],c[2],c[3],.6},
|
|
||||||
{"fRect",2,2,21,21,2},
|
|
||||||
{"setCL",c},
|
|
||||||
{"dRect",2,2,21,21,2},
|
|
||||||
{"setCL",COLOR.Z},
|
|
||||||
{"mText",(lv-1)%26+1,13,-1},
|
|
||||||
}
|
|
||||||
rawset(self,lv,img)
|
|
||||||
return img
|
|
||||||
end})
|
|
||||||
local name
|
local name
|
||||||
local textObj,scaleK,width,offY
|
local textObj,scaleK,width,offY
|
||||||
function drawSelfProfile()
|
function drawSelfProfile()
|
||||||
local selfAvatar=USERS.getAvatar(USER.uid)
|
|
||||||
gc_push('transform')
|
gc_push('transform')
|
||||||
gc_replaceTransform(SCR.xOy_ur)
|
gc_replaceTransform(SCR.xOy_ur)
|
||||||
|
|
||||||
@@ -861,7 +850,7 @@ do--function drawSelfProfile()
|
|||||||
gc_setColor(COLOR.X)gc_rectangle('fill',0,0,-300,80)
|
gc_setColor(COLOR.X)gc_rectangle('fill',0,0,-300,80)
|
||||||
gc_setColor(1,1,1)gc_rectangle('line',-300,0,300,80,5)
|
gc_setColor(1,1,1)gc_rectangle('line',-300,0,300,80,5)
|
||||||
gc_rectangle('line',-73,7,66,66,2)
|
gc_rectangle('line',-73,7,66,66,2)
|
||||||
gc_draw(selfAvatar,-72,8,nil,.5)
|
gc_draw(USERS.getAvatar(USER.uid),-72,8,nil,.5)
|
||||||
|
|
||||||
-- Draw username
|
-- Draw username
|
||||||
if name~=USERS.getUsername(USER.uid) then
|
if name~=USERS.getUsername(USER.uid) then
|
||||||
@@ -873,11 +862,6 @@ do--function drawSelfProfile()
|
|||||||
end
|
end
|
||||||
gc_draw(textObj,-82,26,nil,scaleK,nil,width,offY)
|
gc_draw(textObj,-82,26,nil,scaleK,nil,width,offY)
|
||||||
|
|
||||||
--Draw lv. & xp.
|
|
||||||
gc_draw(lvIcon[USER.lv],-295,50)
|
|
||||||
gc_line(-270,55,-80,55,-80,70,-270,70)
|
|
||||||
gc_rectangle('fill',-210,55,150*USER.xp/USER.lv/USER.lv,15)
|
|
||||||
|
|
||||||
gc_pop()
|
gc_pop()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -886,7 +870,7 @@ function drawOnlinePlayerCount()
|
|||||||
gc_setColor(1,1,1)
|
gc_setColor(1,1,1)
|
||||||
gc_push('transform')
|
gc_push('transform')
|
||||||
gc_replaceTransform(SCR.xOy_ur)
|
gc_replaceTransform(SCR.xOy_ur)
|
||||||
gc_printf(("%s: %s/%s/%s"):format(text.onlinePlayerCount,NET.UserCount,NET.PlayCount,NET.StreamCount),-600,80,594,'right')
|
gc_printf(text.onlinePlayerCount:repD(NET.onlineCount),-600,80,594,'right')
|
||||||
gc_pop()
|
gc_pop()
|
||||||
end
|
end
|
||||||
function drawWarning()
|
function drawWarning()
|
||||||
|
|||||||
@@ -20,6 +20,16 @@ RANK_COLORS={
|
|||||||
{1,.5,.4},
|
{1,.5,.4},
|
||||||
{.95,.5,.95},
|
{.95,.5,.95},
|
||||||
}
|
}
|
||||||
|
GROUP_COLORS={
|
||||||
|
[0]=COLOR.Z,
|
||||||
|
[1]={STRING.hexColor'e57373'},
|
||||||
|
[2]={STRING.hexColor"4caf50"},
|
||||||
|
[3]={STRING.hexColor'5c6bc0'},
|
||||||
|
[4]={STRING.hexColor'ffe082'},
|
||||||
|
[5]={STRING.hexColor'ba68c8'},
|
||||||
|
[6]={STRING.hexColor'80deea'},
|
||||||
|
}
|
||||||
|
|
||||||
do-- SVG_TITLE_FILL, SVG_TITLE_LINE
|
do-- SVG_TITLE_FILL, SVG_TITLE_LINE
|
||||||
SVG_TITLE_FILL={
|
SVG_TITLE_FILL={
|
||||||
{
|
{
|
||||||
@@ -574,14 +584,24 @@ do--Game data tables
|
|||||||
REPLAY={}-- Replay objects (not include stream data)
|
REPLAY={}-- Replay objects (not include stream data)
|
||||||
end
|
end
|
||||||
do-- Userdata tables
|
do-- Userdata tables
|
||||||
USER={--User infomation
|
USER=setmetatable({-- User infomation
|
||||||
--Network infos
|
__data={
|
||||||
uid=false,
|
uid=false,
|
||||||
authToken=false,
|
email=false,
|
||||||
|
password=false,
|
||||||
--Local data
|
rToken=false,
|
||||||
xp=0,lv=1,
|
aToken=false,
|
||||||
}
|
},
|
||||||
|
},{
|
||||||
|
__index=function(self,k)
|
||||||
|
return self.__data[k]
|
||||||
|
end,
|
||||||
|
__newindex=function(self,k,v)
|
||||||
|
if self.__data[k]~=nil and v~=nil then
|
||||||
|
self.__data[k]=v
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
SETTING={-- Settings
|
SETTING={-- Settings
|
||||||
-- Tuning
|
-- Tuning
|
||||||
das=10,arr=2,
|
das=10,arr=2,
|
||||||
@@ -598,7 +618,6 @@ do--Userdata tables
|
|||||||
menuPos='middle',
|
menuPos='middle',
|
||||||
fine=false,
|
fine=false,
|
||||||
autoSave=false,
|
autoSave=false,
|
||||||
autoLogin=true,
|
|
||||||
simpMode=false,
|
simpMode=false,
|
||||||
sysCursor=true,
|
sysCursor=true,
|
||||||
maxFPS=60,
|
maxFPS=60,
|
||||||
|
|||||||
@@ -138,8 +138,8 @@ return{
|
|||||||
{"TTT",
|
{"TTT",
|
||||||
"tetris trainer tres bien",
|
"tetris trainer tres bien",
|
||||||
"game",
|
"game",
|
||||||
"Tetris Trainer Très-Bien (by こな “kona”). A hands-on tutorial of advanced techniques in modern Tetris (which only supports physical keyboards).\nRecommended for players who can complete 40L with Tetris only and no Hold.\nCovered topics such as T-Spin, finesse, SRS, and some battle setups.\nLink in Japanese.",
|
"Tetris Trainer Très-Bien (by こな “kona”). A hands-on tutorial of advanced techniques in modern Tetris (which only supports physical keyboards).\nRecommended for players who can complete 40L with Tetris only and no Hold.\nCovered topics such as T-Spin, finesse, SRS, and some battle setups.\nThe link below is the English version of the website, translated by User670 (Originally in Japanese).",
|
||||||
"http://taninkona.web.fc2.com/ttt/",
|
"https://user670.github.io/tetris-trainer-tres-bien/",
|
||||||
},
|
},
|
||||||
{"TTPC",
|
{"TTPC",
|
||||||
"tetris perfect clear challenge",
|
"tetris perfect clear challenge",
|
||||||
|
|||||||
@@ -104,40 +104,92 @@ return{
|
|||||||
|
|
||||||
dictNote="==Copied from TetroDictionary==",
|
dictNote="==Copied from TetroDictionary==",
|
||||||
|
|
||||||
getNoticeFail="Failed to fetch announcements",
|
|
||||||
|
|
||||||
|
-- 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",
|
||||||
|
|
||||||
|
-- Controllers
|
||||||
|
WebSocket={
|
||||||
|
invalidConnection="Invalid connection",
|
||||||
|
invalidAction="Invalid action",
|
||||||
|
playerNotFound="Player not found",
|
||||||
|
connectionFailed="Connection failed",
|
||||||
|
},
|
||||||
|
-- Filters
|
||||||
|
CheckPermission={
|
||||||
|
playerNotFound="Player not found",
|
||||||
|
},
|
||||||
|
-- Plugins
|
||||||
|
ConnectionManager={
|
||||||
|
playerInvalid="Player invalid",
|
||||||
|
playerNotFound="Player not found",
|
||||||
|
connectionReplaced="Connection replaced",
|
||||||
|
},
|
||||||
|
NoticeManager={
|
||||||
|
noticeNotFound="Notice not found",
|
||||||
|
},
|
||||||
|
PlayerManager={
|
||||||
|
invalidCode="Invalid code",
|
||||||
|
invalidEmail="Invalid email",
|
||||||
|
playerNotFound="Player not found",
|
||||||
|
invalidEmailPass="Invalid email or password",
|
||||||
|
emailExists="Email exists",
|
||||||
|
emailSendError="Email send error",
|
||||||
|
},
|
||||||
|
-- Strategies
|
||||||
|
PlayerRole={
|
||||||
|
invalidRole="Invalid role",
|
||||||
|
invalidTarget="Invalid target",
|
||||||
|
},
|
||||||
|
PlayerType={
|
||||||
|
invalidType="Invalid type",
|
||||||
|
roomFull="Room full",
|
||||||
|
},
|
||||||
|
RoomJoin={
|
||||||
|
wrongPassword="Wrong password",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
tooFrequent="Request too frequently",
|
||||||
|
roomPasswordChanged="Room password changed",
|
||||||
oldVersion="Version $1 is now available",
|
oldVersion="Version $1 is now available",
|
||||||
needUpdate="Newer version required!",
|
|
||||||
versionNotMatch="Versions do not match!",
|
versionNotMatch="Versions do not match!",
|
||||||
notFinished="Coming soon!",
|
notFinished="Coming soon!",
|
||||||
|
|
||||||
jsonError="JSON error",
|
|
||||||
|
|
||||||
noUsername="Please enter your username",
|
noUsername="Please enter your username",
|
||||||
wrongEmail="Invalid email address",
|
wrongEmail="Invalid email address",
|
||||||
|
wrongCode="Invalid verification code",
|
||||||
noPassword="Please enter your password",
|
noPassword="Please enter your password",
|
||||||
diffPassword="Passwords don’t match",
|
diffPassword="Passwords don’t match",
|
||||||
registerRequestSent="A sign up request has been sent.",
|
checkEmail="A sign up request has been sent.",
|
||||||
registerOK="Sign up successful!",
|
|
||||||
loginOK="You are now logged in!",
|
|
||||||
accessOK="Access granted",
|
|
||||||
|
|
||||||
wsConnecting="Websocket connecting…",
|
wsFailed="WebSocket connection failed: $1",
|
||||||
wsFailed="WebSocket connection failed",
|
wsClose="WebSocket closed: $1",
|
||||||
wsClose="WebSocket closed:",
|
|
||||||
netTimeout="Connection timed out",
|
netTimeout="Connection timed out",
|
||||||
|
serverDown="Oops! Server is down",
|
||||||
|
requestFailed="Request failed",
|
||||||
|
|
||||||
onlinePlayerCount="Online",
|
onlinePlayerCount="Online: $1",
|
||||||
createRoomSuccessed="Room created",
|
createRoomSuccessed="Room created",
|
||||||
|
playerKicked="$1 removed $2 from room",
|
||||||
|
becomeHost="$1 become host",
|
||||||
started="Playing",
|
started="Playing",
|
||||||
joinRoom="has entered the room.",
|
joinRoom="$1 has entered the room.",
|
||||||
leaveRoom="has left the room.",
|
leaveRoom="$1 has left the room.",
|
||||||
|
roomRemoved="Room was removed",
|
||||||
ready="Ready",
|
ready="Ready",
|
||||||
connStream="Connecting",
|
|
||||||
waitStream="Waiting",
|
|
||||||
spectating="Spectating",
|
spectating="Spectating",
|
||||||
chatRemain="Online",
|
|
||||||
chatStart="------Beginning of log------",
|
|
||||||
chatHistory="------New messages below------",
|
|
||||||
|
|
||||||
keySettingInstruction="Press to bind key\nescape: cancel\nbackspace: delete",
|
keySettingInstruction="Press to bind key\nescape: cancel\nbackspace: delete",
|
||||||
customBGhelp="Drop image file here to apply custom background",
|
customBGhelp="Drop image file here to apply custom background",
|
||||||
@@ -322,6 +374,7 @@ return{
|
|||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
json.lua [rxi]
|
json.lua [rxi]
|
||||||
profile.lua [itraykov]
|
profile.lua [itraykov]
|
||||||
|
sha2 [Egor Skriptunoff]
|
||||||
]],
|
]],
|
||||||
support="Support the author",
|
support="Support the author",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
@@ -361,6 +414,7 @@ return{
|
|||||||
league="Tech League",
|
league="Tech League",
|
||||||
ffa="FFA",
|
ffa="FFA",
|
||||||
rooms="Rooms",
|
rooms="Rooms",
|
||||||
|
resetPW="Reset password",
|
||||||
logout="Log out",
|
logout="Log out",
|
||||||
},
|
},
|
||||||
net_league={
|
net_league={
|
||||||
@@ -437,7 +491,6 @@ return{
|
|||||||
sysCursor="Use System Cursor",
|
sysCursor="Use System Cursor",
|
||||||
autoPause="Pause When Unfocused",
|
autoPause="Pause When Unfocused",
|
||||||
autoSave="Auto-save New Records",
|
autoSave="Auto-save New Records",
|
||||||
autoLogin="Auto-login on Start",
|
|
||||||
simpMode="Simplistic Mode",
|
simpMode="Simplistic Mode",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -688,24 +741,29 @@ return{
|
|||||||
music="BGMs",
|
music="BGMs",
|
||||||
label="label",
|
label="label",
|
||||||
},
|
},
|
||||||
login={
|
login_pw={
|
||||||
title="Sign In",
|
title="Sign In",
|
||||||
register="Sign Up",
|
login_mail="Login with E-mail/Sign Up",
|
||||||
email="Email Address",
|
email="Email Address",
|
||||||
password="Password",
|
password="Password",
|
||||||
showEmail="Show Email",
|
showEmail="Show Email",
|
||||||
keepPW="Remember me",
|
|
||||||
login="Log In",
|
login="Log In",
|
||||||
},
|
},
|
||||||
register={
|
login_mail={
|
||||||
title="Sign Up",
|
title="Sign In/Sign Up",
|
||||||
login="Sign In",
|
login_pw="Password Sign In",
|
||||||
username="Username",
|
|
||||||
email="Email Address",
|
email="Email Address",
|
||||||
|
send="Send code",
|
||||||
|
code="Verification Code",
|
||||||
|
verify="Verify",
|
||||||
|
},
|
||||||
|
reset_password={
|
||||||
|
title="Reset Password",
|
||||||
|
send="Send code",
|
||||||
|
code="Verification Code",
|
||||||
password="Password",
|
password="Password",
|
||||||
password2="Re-enter Password",
|
password2="Re-enter Password",
|
||||||
register="Sign Up",
|
setPW="Set Password",
|
||||||
registering="Waiting for response…",
|
|
||||||
},
|
},
|
||||||
account={
|
account={
|
||||||
title="Account",
|
title="Account",
|
||||||
@@ -874,10 +932,10 @@ return{
|
|||||||
},
|
},
|
||||||
getTip={refuseCopy=true,
|
getTip={refuseCopy=true,
|
||||||
":pog:",
|
":pog:",
|
||||||
"(RUR’U’)R’FR2U’R’U’(RUR’F’)",
|
|
||||||
"“Techmino.app” cannot be opened because the developer cannot be verified.",
|
"“Techmino.app” cannot be opened because the developer cannot be verified.",
|
||||||
"“Techmino.app” will damage your computer. You should move it to the Bin.",
|
"“Techmino.app” will damage your computer. You should move it to the Bin.",
|
||||||
"“TechminOS”",
|
"“TechminOS”",
|
||||||
|
"(RUR’U’)R’FR2U’R’U’(RUR’F’)",
|
||||||
"\\jezevec/\\jezevec/\\jezevec/",
|
"\\jezevec/\\jezevec/\\jezevec/",
|
||||||
"\\osk/\\osk/\\osk/",
|
"\\osk/\\osk/\\osk/",
|
||||||
"↑↑↓↓←→←→BA",
|
"↑↑↓↓←→←→BA",
|
||||||
@@ -890,6 +948,7 @@ return{
|
|||||||
"40-line Sprint WR: 14.708s by hiryu",
|
"40-line Sprint WR: 14.708s by hiryu",
|
||||||
"6next 1hold!",
|
"6next 1hold!",
|
||||||
"6next 6hold?!",
|
"6next 6hold?!",
|
||||||
|
"A choke a day keeps record away",
|
||||||
"Achievement system coming soon!",
|
"Achievement system coming soon!",
|
||||||
"ALL SPIN!",
|
"ALL SPIN!",
|
||||||
"Am G F G",
|
"Am G F G",
|
||||||
@@ -934,8 +993,8 @@ return{
|
|||||||
"Lua No.1",
|
"Lua No.1",
|
||||||
"Mix clear coming soon!",
|
"Mix clear coming soon!",
|
||||||
"Most of the button icons are realized by using self-drawn glyphs in the Unicode Private Use Area.",
|
"Most of the button icons are realized by using self-drawn glyphs in the Unicode Private Use Area.",
|
||||||
"Music too distracting? You can turn it off.",
|
|
||||||
"Most of the music tracks in this game are made using Beepbox.",
|
"Most of the music tracks in this game are made using Beepbox.",
|
||||||
|
"Music too distracting? You can turn it off.",
|
||||||
"No easter eggs in this menu if you have the simplistic style turned on!",
|
"No easter eggs in this menu if you have the simplistic style turned on!",
|
||||||
"O-Spin Triple!",
|
"O-Spin Triple!",
|
||||||
"OHHHHHHHHHHHHHH",
|
"OHHHHHHHHHHHHHH",
|
||||||
@@ -1003,5 +1062,6 @@ return{
|
|||||||
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR ",C.P,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"},
|
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR ",C.P,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"},
|
||||||
{C.Y,"O-Spin Triple!"},
|
{C.Y,"O-Spin Triple!"},
|
||||||
{C.Z,"What? ",C.lC,"Xspin?"},
|
{C.Z,"What? ",C.lC,"Xspin?"},
|
||||||
}
|
},
|
||||||
|
pumpkin="I'm a pumpkin",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -103,40 +103,92 @@ return{
|
|||||||
|
|
||||||
dictNote="==Copia de TetroDictionary==",
|
dictNote="==Copia de TetroDictionary==",
|
||||||
|
|
||||||
getNoticeFail="Error al buscar novedades.",
|
|
||||||
|
|
||||||
|
-- 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",
|
||||||
|
|
||||||
|
-- Controllers
|
||||||
|
WebSocket={
|
||||||
|
-- invalidConnection="Invalid connection",
|
||||||
|
-- invalidAction="Invalid action",
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
-- connectionFailed="Connection failed",
|
||||||
|
},
|
||||||
|
-- Filters
|
||||||
|
CheckPermission={
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
},
|
||||||
|
-- Plugins
|
||||||
|
ConnectionManager={
|
||||||
|
-- playerInvalid="Player invalid",
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
-- connectionReplaced="Connection replaced",
|
||||||
|
},
|
||||||
|
NoticeManager={
|
||||||
|
-- noticeNotFound="Notice not found",
|
||||||
|
},
|
||||||
|
PlayerManager={
|
||||||
|
-- invalidCode="Invalid code",
|
||||||
|
-- invalidEmail="Invalid email",
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
-- invalidEmailPass="Invalid email or password",
|
||||||
|
-- emailExists="Email exists",
|
||||||
|
-- emailSendError="Email send error",
|
||||||
|
},
|
||||||
|
-- Strategies
|
||||||
|
PlayerRole={
|
||||||
|
-- invalidRole="Invalid role",
|
||||||
|
-- invalidTarget="Invalid target",
|
||||||
|
},
|
||||||
|
PlayerType={
|
||||||
|
-- invalidType="Invalid type",
|
||||||
|
-- roomFull="Room full",
|
||||||
|
},
|
||||||
|
RoomJoin={
|
||||||
|
-- wrongPassword="Wrong password",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
-- tooFrequent="Request too frequently",
|
||||||
|
-- roomPasswordChanged="Room password changed",
|
||||||
oldVersion="¡Está disponible la nueva versión $1!",
|
oldVersion="¡Está disponible la nueva versión $1!",
|
||||||
needUpdate="¡Nueva versión requerida!",
|
|
||||||
versionNotMatch="¡Las versiones no coinciden!",
|
versionNotMatch="¡Las versiones no coinciden!",
|
||||||
notFinished="Próximamente",
|
notFinished="Próximamente",
|
||||||
|
|
||||||
jsonError="Error en Json",
|
|
||||||
|
|
||||||
noUsername="Por favor ingresa un nombre de usuario",
|
noUsername="Por favor ingresa un nombre de usuario",
|
||||||
wrongEmail="Correo electrónico inválido",
|
wrongEmail="Correo electrónico inválido",
|
||||||
|
-- wrongCode="Invalid verification code",
|
||||||
noPassword="Por favor ingresa la contraseña",
|
noPassword="Por favor ingresa la contraseña",
|
||||||
diffPassword="Las contraseñas no coinciden",
|
diffPassword="Las contraseñas no coinciden",
|
||||||
registerRequestSent="Petición de registro enviada con éxito",
|
checkEmail="Petición de registro enviada con éxito",
|
||||||
registerOK="¡Registro exitoso!",
|
|
||||||
loginOK="¡Ingreso con éxito!",
|
|
||||||
accessOK="¡Autorizado exitoso!",
|
|
||||||
|
|
||||||
wsConnecting="Websocket Conectando",
|
wsFailed="WebSocket conexión fallida: $1",
|
||||||
wsFailed="WebSocket conexión fallida",
|
wsClose="WebSocket cerrado: $1",
|
||||||
wsClose="WebSocket cerrado:",
|
|
||||||
netTimeout="Tiempo de conexión agotado",
|
netTimeout="Tiempo de conexión agotado",
|
||||||
|
-- serverDown="Oops! Server is down",
|
||||||
|
-- requestFailed="Request failed",
|
||||||
|
|
||||||
onlinePlayerCount="En línea",
|
onlinePlayerCount="En línea: $1",
|
||||||
createRoomSuccessed="¡Sala creada con éxito!",
|
createRoomSuccessed="¡Sala creada con éxito!",
|
||||||
|
-- playerKicked="$1 removed $2 from room",
|
||||||
|
-- becomeHost="$1 become host",
|
||||||
started="En juego",
|
started="En juego",
|
||||||
joinRoom="entró a la sala.",
|
joinRoom="$1 entró a la sala.",
|
||||||
leaveRoom="salió de la sala.",
|
leaveRoom="$1 salió de la sala.",
|
||||||
|
-- roomRemoved="Room was removed",
|
||||||
ready="LISTO",
|
ready="LISTO",
|
||||||
connStream="CONECTANDO",
|
|
||||||
waitStream="ESPERANDO",
|
|
||||||
spectating="Espectando",
|
spectating="Espectando",
|
||||||
chatRemain="Usuarios en línea:",
|
|
||||||
chatStart="------Comienzo del historial------",
|
|
||||||
chatHistory="------Nuevos mensajes------",
|
|
||||||
|
|
||||||
keySettingInstruction="Pulsa la tecla a mapear\nEsc.: Cancelar\nBackspace: Borrar",
|
keySettingInstruction="Pulsa la tecla a mapear\nEsc.: Cancelar\nBackspace: Borrar",
|
||||||
customBGhelp="Suelta una imagen aquí para aplicarla de fondo",
|
customBGhelp="Suelta una imagen aquí para aplicarla de fondo",
|
||||||
@@ -322,6 +374,7 @@ return{
|
|||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
json.lua [rxi]
|
json.lua [rxi]
|
||||||
profile.lua [itraykov]
|
profile.lua [itraykov]
|
||||||
|
sha2 [Egor Skriptunoff]
|
||||||
]],
|
]],
|
||||||
support="Apoyen al Autor",
|
support="Apoyen al Autor",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
@@ -361,6 +414,7 @@ return{
|
|||||||
league="Liga Tech",
|
league="Liga Tech",
|
||||||
ffa="FFA",
|
ffa="FFA",
|
||||||
rooms="Salas",
|
rooms="Salas",
|
||||||
|
-- resetPW="Reset password",
|
||||||
logout="Desconec.",
|
logout="Desconec.",
|
||||||
},
|
},
|
||||||
net_league={
|
net_league={
|
||||||
@@ -437,7 +491,6 @@ return{
|
|||||||
sysCursor="Usar cursor del sistema",
|
sysCursor="Usar cursor del sistema",
|
||||||
autoPause="Pausar cuando la ventana no está enfocada",
|
autoPause="Pausar cuando la ventana no está enfocada",
|
||||||
autoSave="Autograbar Récords",
|
autoSave="Autograbar Récords",
|
||||||
autoLogin="Autologueo al Iniciar",
|
|
||||||
simpMode="Modo Sencillo",
|
simpMode="Modo Sencillo",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -680,24 +733,29 @@ return{
|
|||||||
music="BGMs",
|
music="BGMs",
|
||||||
label="Etiq.",
|
label="Etiq.",
|
||||||
},
|
},
|
||||||
login={
|
login_pw={
|
||||||
title="Entrar",
|
title="Entrar",
|
||||||
register="Registrarse",
|
-- login_mail="Login with E-mail/Sign Up",
|
||||||
email="Correo Elec.",
|
email="Correo Elec.",
|
||||||
password="Contraseña",
|
password="Contraseña",
|
||||||
showEmail="Mostrar Correo",
|
showEmail="Mostrar Correo",
|
||||||
keepPW="Recordar credenciales",
|
|
||||||
login="Entrar",
|
login="Entrar",
|
||||||
},
|
},
|
||||||
register={
|
login_mail={
|
||||||
title="Registrarse",
|
title="Entrar/Registrarse",
|
||||||
login="Entrar",
|
-- login_pw="Password Sign In",
|
||||||
username="Nombre de Usuario",
|
|
||||||
email="Correo Elec.",
|
email="Correo Elec.",
|
||||||
|
-- send="Send code",
|
||||||
|
-- code="Verification Code",
|
||||||
|
-- verify="Verify",
|
||||||
|
},
|
||||||
|
reset_password={
|
||||||
|
-- title="Reset Password",
|
||||||
|
-- send="Send code",
|
||||||
|
-- code="Verification Code",
|
||||||
password="Contraseña",
|
password="Contraseña",
|
||||||
password2="Repetir Contr.",
|
password2="Repetir Contr.",
|
||||||
register="Registrarse",
|
-- setPW="Set Password",
|
||||||
registering="Esperando respuesta...",
|
|
||||||
},
|
},
|
||||||
account={
|
account={
|
||||||
title="Cuenta",
|
title="Cuenta",
|
||||||
@@ -863,4 +921,5 @@ return{
|
|||||||
['custom_clear']= {"Personalizado", "Normal"},
|
['custom_clear']= {"Personalizado", "Normal"},
|
||||||
['custom_puzzle']= {"Personalizado", "Puzzle"},
|
['custom_puzzle']= {"Personalizado", "Puzzle"},
|
||||||
},
|
},
|
||||||
|
-- pumpkin="I'm a pumpkin",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,40 +94,93 @@ return{
|
|||||||
|
|
||||||
-- dictNote="==Copied from TetroDictionary==",
|
-- dictNote="==Copied from TetroDictionary==",
|
||||||
|
|
||||||
getNoticeFail="Echec de l'obtention de la notice",
|
|
||||||
|
|
||||||
|
-- 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",
|
||||||
|
|
||||||
|
-- Controllers
|
||||||
|
WebSocket={
|
||||||
|
-- invalidConnection="Invalid connection",
|
||||||
|
-- invalidAction="Invalid action",
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
-- connectionFailed="Connection failed",
|
||||||
|
},
|
||||||
|
-- Filters
|
||||||
|
CheckPermission={
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
},
|
||||||
|
-- Plugins
|
||||||
|
ConnectionManager={
|
||||||
|
-- playerInvalid="Player invalid",
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
-- connectionReplaced="Connection replaced",
|
||||||
|
},
|
||||||
|
NoticeManager={
|
||||||
|
-- noticeNotFound="Notice not found",
|
||||||
|
},
|
||||||
|
PlayerManager={
|
||||||
|
-- invalidCode="Invalid code",
|
||||||
|
-- invalidEmail="Invalid email",
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
-- invalidEmailPass="Invalid email or password",
|
||||||
|
-- emailExists="Email exists",
|
||||||
|
-- emailSendError="Email send error",
|
||||||
|
},
|
||||||
|
-- Strategies
|
||||||
|
PlayerRole={
|
||||||
|
-- invalidRole="Invalid role",
|
||||||
|
-- invalidTarget="Invalid target",
|
||||||
|
},
|
||||||
|
PlayerType={
|
||||||
|
-- invalidType="Invalid type",
|
||||||
|
-- roomFull="Room full",
|
||||||
|
},
|
||||||
|
RoomJoin={
|
||||||
|
-- wrongPassword="Wrong password",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
-- tooFrequent="Request too frequently",
|
||||||
|
-- roomPasswordChanged="Room password changed",
|
||||||
oldVersion="La version $1 est disponible !",
|
oldVersion="La version $1 est disponible !",
|
||||||
-- versionNotMatch="Version do not match!",
|
-- versionNotMatch="Version do not match!",
|
||||||
-- needUpdate="Newer version required!",
|
-- needUpdate="Newer version required!",
|
||||||
-- notFinished="Coming soon!",
|
-- notFinished="Coming soon!",
|
||||||
|
|
||||||
jsonError="Erreur json",
|
|
||||||
|
|
||||||
noUsername="Entrez votre nom d'utilisateur",
|
noUsername="Entrez votre nom d'utilisateur",
|
||||||
wrongEmail="Mauvaise adresse email",
|
wrongEmail="Mauvaise adresse email",
|
||||||
|
-- wrongCode="Invalid verification code",
|
||||||
noPassword="Entrez votre mot de passe",
|
noPassword="Entrez votre mot de passe",
|
||||||
diffPassword="Les mots de passe ne se correspondent pas",
|
diffPassword="Les mots de passe ne se correspondent pas",
|
||||||
-- registerRequestSent="Registration request sent",
|
-- checkEmail="Registration request sent",
|
||||||
registerOK="Enregistré avec succès !",
|
|
||||||
loginOK="Connecté avec succès !",
|
|
||||||
accessOK="Autorisé avec succès !",
|
|
||||||
|
|
||||||
-- wsConnecting="Websocket Connecting",
|
wsFailed="WebSocket connection échouée: $1",
|
||||||
wsFailed="WebSocket connection échouée",
|
-- wsClose="WebSocket Closed: $1",
|
||||||
-- wsClose="WebSocket Closed:",
|
|
||||||
-- netTimeout="Network connection timeout",
|
-- netTimeout="Network connection timeout",
|
||||||
|
-- serverDown="Oops! Server is down",
|
||||||
|
-- requestFailed="Request failed",
|
||||||
|
|
||||||
-- onlinePlayerCount="Online",
|
-- onlinePlayerCount="Online: $1",
|
||||||
createRoomSuccessed="Salon créé avec succès !",
|
createRoomSuccessed="Salon créé avec succès !",
|
||||||
|
-- playerKicked="$1 removed $2 from room",
|
||||||
|
-- becomeHost="$1 become host",
|
||||||
-- started="Playing",
|
-- started="Playing",
|
||||||
joinRoom="a rejoint le salon.",
|
joinRoom="$1 a rejoint le salon.",
|
||||||
leaveRoom="a quitté le salon.",
|
leaveRoom="$1 a quitté le salon.",
|
||||||
|
-- roomRemoved="Room was removed",
|
||||||
-- ready="READY",
|
-- ready="READY",
|
||||||
-- connStream="CONNECTING",
|
|
||||||
-- waitStream="WAITING",
|
|
||||||
-- spectating="Spectating",
|
-- spectating="Spectating",
|
||||||
chatRemain="En ligne : ",
|
|
||||||
chatStart="--------Début des logs--------",
|
|
||||||
chatHistory="-Nouveaux messages en dessous-",
|
|
||||||
|
|
||||||
-- keySettingInstruction="Press to bind key\nescape: cancel\nbackspace: delete",
|
-- keySettingInstruction="Press to bind key\nescape: cancel\nbackspace: delete",
|
||||||
-- customBGhelp="Drop image file here to apply custom background",
|
-- customBGhelp="Drop image file here to apply custom background",
|
||||||
@@ -289,6 +342,7 @@ return{
|
|||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
json.lua [rxi]
|
json.lua [rxi]
|
||||||
profile.lua [itraykov]
|
profile.lua [itraykov]
|
||||||
|
sha2 [Egor Skriptunoff]
|
||||||
]],
|
]],
|
||||||
support="Aider le créateur",
|
support="Aider le créateur",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
@@ -324,6 +378,7 @@ return{
|
|||||||
-- league="Tech League",
|
-- league="Tech League",
|
||||||
ffa="FFA",
|
ffa="FFA",
|
||||||
rooms="Salons",
|
rooms="Salons",
|
||||||
|
-- resetPW="Reset password",
|
||||||
-- logout="Log out",
|
-- logout="Log out",
|
||||||
},
|
},
|
||||||
net_league={
|
net_league={
|
||||||
@@ -400,7 +455,6 @@ return{
|
|||||||
-- sysCursor="Use system cursor",
|
-- sysCursor="Use system cursor",
|
||||||
autoPause="Mettre en pause en cas de perte de focus",
|
autoPause="Mettre en pause en cas de perte de focus",
|
||||||
-- autoSave="Auto save new-best",
|
-- autoSave="Auto save new-best",
|
||||||
-- autoLogin="Auto Login on Start",
|
|
||||||
-- simpMode="Simple mode",
|
-- simpMode="Simple mode",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -642,24 +696,29 @@ return{
|
|||||||
music="Musique",
|
music="Musique",
|
||||||
-- label="label",
|
-- label="label",
|
||||||
},
|
},
|
||||||
login={
|
login_pw={
|
||||||
title="Connexion",
|
title="Connexion",
|
||||||
register="Enregistrement",
|
-- login_mail="Login with E-mail/Sign Up",
|
||||||
email="E-mail",
|
email="E-mail",
|
||||||
password="Mot de passe",
|
password="Mot de passe",
|
||||||
-- showEmail="Show Email",
|
-- showEmail="Show Email",
|
||||||
-- keepPW="Remember me",
|
|
||||||
login="Connexion",
|
login="Connexion",
|
||||||
},
|
},
|
||||||
register={
|
login_mail={
|
||||||
title="Enregistrement",
|
title="Connexion/Enregistrement",
|
||||||
login="Connexion",
|
-- login_pw="Password Sign In",
|
||||||
username="Nom d'utilisateur",
|
|
||||||
email="E-mail",
|
email="E-mail",
|
||||||
|
-- send="Send code",
|
||||||
|
-- code="Verification Code",
|
||||||
|
-- verify="Verify",
|
||||||
|
},
|
||||||
|
reset_password={
|
||||||
|
-- title="Reset Password",
|
||||||
|
-- send="Send code",
|
||||||
|
-- code="Verification Code",
|
||||||
password="Mot de passe",
|
password="Mot de passe",
|
||||||
password2="Confirmer le mot de passe",
|
password2="Confirmer le mot de passe",
|
||||||
register="Enregistrement",
|
-- setPW="Set Password",
|
||||||
-- registering="Waiting for response...",
|
|
||||||
},
|
},
|
||||||
account={
|
account={
|
||||||
title="Compte",
|
title="Compte",
|
||||||
@@ -822,4 +881,5 @@ return{
|
|||||||
['custom_clear']= {"Perso.", "NORMAL"},
|
['custom_clear']= {"Perso.", "NORMAL"},
|
||||||
['custom_puzzle']= {"Perso.", "PUZZLE"},
|
['custom_puzzle']= {"Perso.", "PUZZLE"},
|
||||||
},
|
},
|
||||||
|
-- pumpkin="I'm a pumpkin",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,40 +105,92 @@ return{
|
|||||||
|
|
||||||
dictNote="==Tersalin dari TetroDictionary==",
|
dictNote="==Tersalin dari TetroDictionary==",
|
||||||
|
|
||||||
getNoticeFail="Gagal mengambil pengumuman-pengumuman",
|
|
||||||
|
|
||||||
|
-- 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",
|
||||||
|
|
||||||
|
-- Controllers
|
||||||
|
WebSocket={
|
||||||
|
-- invalidConnection="Invalid connection",
|
||||||
|
-- invalidAction="Invalid action",
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
-- connectionFailed="Connection failed",
|
||||||
|
},
|
||||||
|
-- Filters
|
||||||
|
CheckPermission={
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
},
|
||||||
|
-- Plugins
|
||||||
|
ConnectionManager={
|
||||||
|
-- playerInvalid="Player invalid",
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
-- connectionReplaced="Connection replaced",
|
||||||
|
},
|
||||||
|
NoticeManager={
|
||||||
|
-- noticeNotFound="Notice not found",
|
||||||
|
},
|
||||||
|
PlayerManager={
|
||||||
|
-- invalidCode="Invalid code",
|
||||||
|
-- invalidEmail="Invalid email",
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
-- invalidEmailPass="Invalid email or password",
|
||||||
|
-- emailExists="Email exists",
|
||||||
|
-- emailSendError="Email send error",
|
||||||
|
},
|
||||||
|
-- Strategies
|
||||||
|
PlayerRole={
|
||||||
|
-- invalidRole="Invalid role",
|
||||||
|
-- invalidTarget="Invalid target",
|
||||||
|
},
|
||||||
|
PlayerType={
|
||||||
|
-- invalidType="Invalid type",
|
||||||
|
-- roomFull="Room full",
|
||||||
|
},
|
||||||
|
RoomJoin={
|
||||||
|
-- wrongPassword="Wrong password",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
-- tooFrequent="Request too frequently",
|
||||||
|
-- roomPasswordChanged="Room password changed",
|
||||||
oldVersion="Versi $1 sekarang tersedia",
|
oldVersion="Versi $1 sekarang tersedia",
|
||||||
needUpdate="Butuh versi lebih baru!",
|
|
||||||
versionNotMatch="Versi tidak sama!",
|
versionNotMatch="Versi tidak sama!",
|
||||||
notFinished="Segera akan datang!",
|
notFinished="Segera akan datang!",
|
||||||
|
|
||||||
jsonError="Eror JSON",
|
|
||||||
|
|
||||||
noUsername="Silahkan memasukan username Anda",
|
noUsername="Silahkan memasukan username Anda",
|
||||||
wrongEmail="Alamat email tidak sah",
|
wrongEmail="Alamat email tidak sah",
|
||||||
|
-- wrongCode="Invalid verification code",
|
||||||
noPassword="Silahkan memasukan kata sandi Anda",
|
noPassword="Silahkan memasukan kata sandi Anda",
|
||||||
diffPassword="Kata sandi tidak sama",
|
diffPassword="Kata sandi tidak sama",
|
||||||
registerRequestSent="Permintaan daftar telah terkirim.",
|
checkEmail="Permintaan daftar telah terkirim.",
|
||||||
registerOK="Pendaftaran sukses!",
|
|
||||||
loginOK="Anda telah gabung!",
|
|
||||||
accessOK="Akses diberikan",
|
|
||||||
|
|
||||||
wsConnecting="Menghubungkan websocket…",
|
wsFailed="Koneksi websocket gagal: $1",
|
||||||
wsFailed="Koneksi websocket gagal",
|
wsClose="Websocket tertutup: $1",
|
||||||
wsClose="Websocket tertutup:",
|
|
||||||
netTimeout="Koneksi waktu habis",
|
netTimeout="Koneksi waktu habis",
|
||||||
|
-- serverDown="Oops! Server is down",
|
||||||
|
-- requestFailed="Request failed",
|
||||||
|
|
||||||
onlinePlayerCount="Online",
|
onlinePlayerCount="Online: $1",
|
||||||
createRoomSuccessed="Ruang terbuat",
|
createRoomSuccessed="Ruang terbuat",
|
||||||
|
-- playerKicked="$1 removed $2 from room",
|
||||||
|
-- becomeHost="$1 become host",
|
||||||
started="Bermain",
|
started="Bermain",
|
||||||
joinRoom="telah memasuki ruangan.",
|
joinRoom="$1 telah memasuki ruangan.",
|
||||||
leaveRoom="telah keluar dari ruangan.",
|
leaveRoom="$1 telah keluar dari ruangan.",
|
||||||
|
-- roomRemoved="Room was removed",
|
||||||
ready="Siap",
|
ready="Siap",
|
||||||
connStream="Memuat",
|
|
||||||
waitStream="Menunggu",
|
|
||||||
spectating="Menonton",
|
spectating="Menonton",
|
||||||
chatRemain="Online",
|
|
||||||
chatStart="------Awal percakapan------",
|
|
||||||
chatHistory="------Pesan-pesan baru di bawah ini------",
|
|
||||||
|
|
||||||
keySettingInstruction="Tekan untuk menghubung tombol ke aksi tertentu\nescape: batal\nbackspace: hapus",
|
keySettingInstruction="Tekan untuk menghubung tombol ke aksi tertentu\nescape: batal\nbackspace: hapus",
|
||||||
customBGhelp="Seret file gambar di sini untuk memasangkan background",
|
customBGhelp="Seret file gambar di sini untuk memasangkan background",
|
||||||
@@ -323,6 +375,7 @@ return{
|
|||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
json.lua [rxi]
|
json.lua [rxi]
|
||||||
profile.lua [itraykov]
|
profile.lua [itraykov]
|
||||||
|
sha2 [Egor Skriptunoff]
|
||||||
]],
|
]],
|
||||||
support="Dukung pencipta",
|
support="Dukung pencipta",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
@@ -362,6 +415,7 @@ return{
|
|||||||
league="Tech League",
|
league="Tech League",
|
||||||
ffa="FFA",
|
ffa="FFA",
|
||||||
rooms="Ruang-ruang",
|
rooms="Ruang-ruang",
|
||||||
|
-- resetPW="Reset password",
|
||||||
logout="Log out",
|
logout="Log out",
|
||||||
},
|
},
|
||||||
net_league={
|
net_league={
|
||||||
@@ -438,7 +492,6 @@ return{
|
|||||||
sysCursor="Guna Mouse Bawaan",
|
sysCursor="Guna Mouse Bawaan",
|
||||||
autoPause="Jeda Jika Tidak Difokus",
|
autoPause="Jeda Jika Tidak Difokus",
|
||||||
autoSave="Simpan Rekor Otomatis",
|
autoSave="Simpan Rekor Otomatis",
|
||||||
autoLogin="Auto-login Saat Membuka",
|
|
||||||
simpMode="Mode Sederhana",
|
simpMode="Mode Sederhana",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -689,24 +742,29 @@ return{
|
|||||||
music="Musik",
|
music="Musik",
|
||||||
label="label",
|
label="label",
|
||||||
},
|
},
|
||||||
login={
|
login_pw={
|
||||||
title="Masuk",
|
title="Masuk",
|
||||||
register="Daftar",
|
-- login_mail="Login with E-mail/Sign Up",
|
||||||
email="Alamat Email",
|
email="Alamat Email",
|
||||||
password="Password",
|
password="Password",
|
||||||
showEmail="Tunjukkan Email",
|
showEmail="Tunjukkan Email",
|
||||||
keepPW="Ingat Saya",
|
|
||||||
login="Masuk",
|
login="Masuk",
|
||||||
},
|
},
|
||||||
register={
|
login_mail={
|
||||||
title="Daftar",
|
title="Masuk/Daftar",
|
||||||
login="Masuk",
|
-- login_pw="Password Sign In",
|
||||||
username="Username",
|
|
||||||
email="Alamat Email",
|
email="Alamat Email",
|
||||||
|
-- send="Send code",
|
||||||
|
-- code="Verification Code",
|
||||||
|
-- verify="Verify",
|
||||||
|
},
|
||||||
|
reset_password={
|
||||||
|
-- title="Reset Password",
|
||||||
|
-- send="Send code",
|
||||||
|
-- code="Verification Code",
|
||||||
password="Password",
|
password="Password",
|
||||||
password2="Ulangi Password",
|
password2="Ulangi Password",
|
||||||
register="Daftar",
|
-- setPW="Set Password",
|
||||||
registering="Menunggu respon…",
|
|
||||||
},
|
},
|
||||||
account={
|
account={
|
||||||
title="Akun",
|
title="Akun",
|
||||||
@@ -993,5 +1051,6 @@ return{
|
|||||||
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR ",C.P,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"},
|
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR ",C.P,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"},
|
||||||
{C.Y,"O-Spin Triple!"},
|
{C.Y,"O-Spin Triple!"},
|
||||||
{C.Z,"Apa? ",C.lC,"X-spin?"},
|
{C.Z,"Apa? ",C.lC,"X-spin?"},
|
||||||
}
|
},
|
||||||
|
-- pumpkin="I'm a pumpkin",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -105,46 +105,97 @@ return{
|
|||||||
|
|
||||||
dictNote="==TetroDictionaryからコピーしました==",
|
dictNote="==TetroDictionaryからコピーしました==",
|
||||||
|
|
||||||
getNoticeFail="お知らせ情報を取得できませんでした",
|
|
||||||
|
|
||||||
|
-- Server's warn/error messages
|
||||||
|
Techrater={
|
||||||
|
internalError="内部エラー",
|
||||||
|
databaseError="データベースエラー",
|
||||||
|
invalidFormat="非対応の形式です",
|
||||||
|
invalidArguments="無効な引数です",
|
||||||
|
tooFrequent="リクエストが多すぎます",
|
||||||
|
notAvailable="使用不可",
|
||||||
|
noPermission="権限がありません",
|
||||||
|
roomNotFound="部屋が見つかりません",
|
||||||
|
|
||||||
|
-- Controllers
|
||||||
|
WebSocket={
|
||||||
|
invalidConnection="接続されていません",
|
||||||
|
invalidAction="無効な操作です",
|
||||||
|
playerNotFound="プレイヤーが見つかりませんでした",
|
||||||
|
connectionFailed="接続失敗",
|
||||||
|
},
|
||||||
|
-- Filters
|
||||||
|
CheckPermission={
|
||||||
|
playerNotFound="プレイヤーが見つかりませんでした",
|
||||||
|
},
|
||||||
|
-- Plugins
|
||||||
|
ConnectionManager={
|
||||||
|
playerInvalid="無効なプレイヤー",
|
||||||
|
playerNotFound="プレイヤーが見つかりませんでした",
|
||||||
|
connectionReplaced="接続切替",
|
||||||
|
},
|
||||||
|
NoticeManager={
|
||||||
|
noticeNotFound="通知が見つかりませんでした",
|
||||||
|
},
|
||||||
|
PlayerManager={
|
||||||
|
invalidCode="無効なコード",
|
||||||
|
invalidEmail="無効なEメールアドレス",
|
||||||
|
playerNotFound="プレイヤーが見つかりませんでした",
|
||||||
|
invalidEmailPass="Eメールアドレスもしくはパスワードが違います",
|
||||||
|
emailExists="Eメールアドレスは存在します",
|
||||||
|
emailSendError="送信できませんでした",
|
||||||
|
},
|
||||||
|
-- Strategies
|
||||||
|
PlayerRole={
|
||||||
|
invalidRole="無効なロールです",
|
||||||
|
invalidTarget="無効なターゲットです",
|
||||||
|
},
|
||||||
|
PlayerType={
|
||||||
|
invalidType="無効なタイプです",
|
||||||
|
roomFull="部屋がいっぱいです",
|
||||||
|
},
|
||||||
|
RoomJoin={
|
||||||
|
wrongPassword="パスワードが違います",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
tooFrequent="リクエストが多すぎます",
|
||||||
|
roomPasswordChanged="部屋のパスワードを変更しました",
|
||||||
oldVersion="バージョン$1のダウンロードが可能になりました",
|
oldVersion="バージョン$1のダウンロードが可能になりました",
|
||||||
needUpdate="最新バージョンに更新してください",
|
|
||||||
versionNotMatch="バージョンが一致しません",
|
versionNotMatch="バージョンが一致しません",
|
||||||
notFinished="未完成ですので、ご期待ください",
|
notFinished="未完成ですので、ご期待ください",
|
||||||
|
|
||||||
jsonError="JSONエラー",
|
|
||||||
|
|
||||||
noUsername="ユーザーネームを入力してください!",
|
noUsername="ユーザーネームを入力してください!",
|
||||||
wrongEmail="メールアドレスが無効です!",
|
wrongEmail="メールアドレスが無効です!",
|
||||||
|
wrongCode="認証コードが違います",
|
||||||
noPassword="パスワードを入力してください!",
|
noPassword="パスワードを入力してください!",
|
||||||
diffPassword="パスワードが一致しません!",
|
diffPassword="パスワードが一致しません!",
|
||||||
registerRequestSent="Sign Upリクエストを送信しました!",
|
checkEmail="Sign Upリクエストを送信しました!",
|
||||||
registerOK="サインアップ成功!",
|
|
||||||
loginOK="ログインしています!",
|
|
||||||
accessOK="アクセス権限を取得しました!",
|
|
||||||
|
|
||||||
wsConnecting="ウェブソケットに接続中…",
|
wsFailed="ウェブソケットとの通信に失敗しました: $1",
|
||||||
wsFailed="ウェブソケットとの通信に失敗しました",
|
wsClose="ウェブソケットとの通信を終了: $1",
|
||||||
wsClose="ウェブソケットとの通信を終了:",
|
|
||||||
netTimeout="接続がタイムアウトしました",
|
netTimeout="接続がタイムアウトしました",
|
||||||
|
serverDown="うわ! サーバーが落ちています...",
|
||||||
|
requestFailed="リクエスト失敗",
|
||||||
|
|
||||||
onlinePlayerCount="オンライン人数",
|
onlinePlayerCount="オンライン人数: $1",
|
||||||
createRoomSuccessed="部屋を建てました",
|
createRoomSuccessed="部屋を建てました",
|
||||||
|
playerKicked="$1 は、$2 を部屋から追放しました",
|
||||||
started="プレイ中",
|
started="プレイ中",
|
||||||
joinRoom="が入室しました",
|
joinRoom="$1 が入室しました",
|
||||||
leaveRoom="が退出しました",
|
leaveRoom="$1 が退出しました",
|
||||||
|
roomRemoved="部屋が撤去されました",
|
||||||
ready="準備OK",
|
ready="準備OK",
|
||||||
connStream="接続中……",
|
|
||||||
waitStream="待機中……",
|
|
||||||
spectating="観戦中",
|
spectating="観戦中",
|
||||||
chatRemain="オンライン",
|
|
||||||
chatStart="------チャットの先頭------",
|
|
||||||
chatHistory="------新しいメッセージ------",
|
|
||||||
|
|
||||||
keySettingInstruction="選択してキーを入力\nEscape: キャンセル\nBackspace: キーを削除",
|
keySettingInstruction="選択してキーを入力\nEscape: キャンセル\nBackspace: キーを削除",
|
||||||
customBGhelp="カスタム背景にする画像ファイルをドロップ",
|
customBGhelp="カスタム背景にする画像ファイルをドロップ",
|
||||||
customBGloadFailed="サポートされていないフォーマットのファイルです",
|
customBGloadFailed="サポートされていないフォーマットのファイルです",
|
||||||
|
|
||||||
errorMsg="問題が発生! ゲームを再起動してください、できるならエラーログを開発者に送ってください",
|
errorMsg="問題が発生! ゲームを再起動し、エラーログを開発者に送ってください",
|
||||||
tryAnotherBuild="[Invalid UTF-8]使用しているOSがMicrosoft WindowsであればTechmino-win32かTechmino-win64をダウンロードしてください! (現在使用しているソフトは違うバージョンです)",
|
tryAnotherBuild="[Invalid UTF-8]使用しているOSがMicrosoft WindowsであればTechmino-win32かTechmino-win64をダウンロードしてください! (現在使用しているソフトは違うバージョンです)",
|
||||||
|
|
||||||
modInstruction="Modを選択してください!\nModはゲームの中身を変えます\nしかしゲームが破損することもあります\nModを使用した場合スコアは保存されません",
|
modInstruction="Modを選択してください!\nModはゲームの中身を変えます\nしかしゲームが破損することもあります\nModを使用した場合スコアは保存されません",
|
||||||
@@ -207,13 +258,13 @@ return{
|
|||||||
"ご意見、ご感想、バグ報告など、全て大歓迎です!",
|
"ご意見、ご感想、バグ報告など、全て大歓迎です!",
|
||||||
"ゲームは、必ず公式から入手してください",
|
"ゲームは、必ず公式から入手してください",
|
||||||
"他から入手した場合は、安全性を保証しません",
|
"他から入手した場合は、安全性を保証しません",
|
||||||
"同時に作者は、責任を負いません",
|
"同時に制作者は、責任を負いません",
|
||||||
FNNS and "/" or "ゲーム自体は無料ですが、寄付できるならありがたいです。",
|
FNNS and "/" or "ゲーム自体は無料ですが、寄付できるならありがたいです。",
|
||||||
FNNS and "/" or "詳しくはZictionaryをご覧ください",
|
FNNS and "/" or "詳しくはZictionaryをご覧ください",
|
||||||
},
|
},
|
||||||
staff={
|
staff={
|
||||||
"作者「MrZ」",
|
"制作者: “MrZ”",
|
||||||
"Eメール先は: 「1046101471@qq.com」まで",
|
"Eメール: “1046101471@qq.com”",
|
||||||
"",
|
"",
|
||||||
"プログラム、開発、デザイン",
|
"プログラム、開発、デザイン",
|
||||||
"MrZ",
|
"MrZ",
|
||||||
@@ -324,8 +375,9 @@ return{
|
|||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
json.lua [rxi]
|
json.lua [rxi]
|
||||||
profile.lua [itraykov]
|
profile.lua [itraykov]
|
||||||
|
sha2 [Egor Skriptunoff]
|
||||||
]],
|
]],
|
||||||
support="Support the Author",
|
support="制作者を支援する",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
main={
|
main={
|
||||||
offline="ソロプレイ",
|
offline="ソロプレイ",
|
||||||
@@ -361,8 +413,9 @@ return{
|
|||||||
},
|
},
|
||||||
net_menu={
|
net_menu={
|
||||||
league="テクリーグ",
|
league="テクリーグ",
|
||||||
ffa="自由乱闘戦",
|
ffa="",
|
||||||
rooms="ルーム・プライベート戦",
|
rooms="ルーム",
|
||||||
|
resetPW="パスワード再設定",
|
||||||
logout="ログアウト",
|
logout="ログアウト",
|
||||||
},
|
},
|
||||||
net_league={
|
net_league={
|
||||||
@@ -439,7 +492,6 @@ return{
|
|||||||
sysCursor="システムカーソル",
|
sysCursor="システムカーソル",
|
||||||
autoPause="ゲーム中断時のオートポーズ",
|
autoPause="ゲーム中断時のオートポーズ",
|
||||||
autoSave="最高得点を更新したときオートセーブ",
|
autoSave="最高得点を更新したときオートセーブ",
|
||||||
autoLogin="オートログイン",
|
|
||||||
simpMode="シンプルなホーム画面",
|
simpMode="シンプルなホーム画面",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -690,24 +742,29 @@ return{
|
|||||||
music="曲",
|
music="曲",
|
||||||
label="ラベル",
|
label="ラベル",
|
||||||
},
|
},
|
||||||
login={
|
login_pw={
|
||||||
title="サインイン",
|
title="ログイン",
|
||||||
register="サインアップ",
|
login_mail="アカウントを登録/パスワードを忘れた",
|
||||||
email="Eメールアドレス",
|
email="Eメールアドレス",
|
||||||
password="パスワード",
|
password="パスワード",
|
||||||
-- showEmail="Show Email",
|
showEmail="Eメールアドレスを表示",
|
||||||
keepPW="常にログイン",
|
|
||||||
login="ログイン",
|
login="ログイン",
|
||||||
},
|
},
|
||||||
register={
|
login_mail={
|
||||||
title="サインアップ",
|
title="サインイン/サインアップ",
|
||||||
login="サインイン",
|
login_pw="パスワードでログイン",
|
||||||
username="ユーザーネーム",
|
|
||||||
email="Eメールアドレス",
|
email="Eメールアドレス",
|
||||||
|
send="認証コード送信",
|
||||||
|
code="認証コード",
|
||||||
|
verify="認証",
|
||||||
|
},
|
||||||
|
reset_password={
|
||||||
|
title="パスワード再設定",
|
||||||
|
send="認証コード送信",
|
||||||
|
code="認証コード",
|
||||||
password="パスワード",
|
password="パスワード",
|
||||||
password2="パスワード(確認)",
|
password2="パスワード(確認)",
|
||||||
register="これで登録する",
|
setPW="パスワード設定",
|
||||||
registering="応答待機中...",
|
|
||||||
},
|
},
|
||||||
account={
|
account={
|
||||||
title="アカウント",
|
title="アカウント",
|
||||||
@@ -822,9 +879,9 @@ return{
|
|||||||
['blind_e']= {"目隠し", "HALF", "初心者用"},
|
['blind_e']= {"目隠し", "HALF", "初心者用"},
|
||||||
['blind_n']= {"目隠し", "ALL", "中級者用"},
|
['blind_n']= {"目隠し", "ALL", "中級者用"},
|
||||||
['blind_h']= {"目隠し", "SUDDEN", "上級者用"},
|
['blind_h']= {"目隠し", "SUDDEN", "上級者用"},
|
||||||
['blind_l']= {"目隠し", "SUDDEN+", "プロフェッショナル用!"},
|
['blind_l']= {"目隠し", "SUDDEN+", "プロフェッショナル用"},
|
||||||
['blind_u']= {"目隠し", "?", "覚悟は良いかい?"},
|
['blind_u']= {"目隠し", "?", "覚悟は良いかい?"},
|
||||||
['blind_wtf']= {"目隠し", "WTF", "まだ覚悟が足りない!"},
|
['blind_wtf']= {"目隠し", "WTF", "まだ覚悟が足りない"},
|
||||||
['classic_e']= {"クラシック", "EASY", "低速クラシック"},
|
['classic_e']= {"クラシック", "EASY", "低速クラシック"},
|
||||||
['classic_h']= {"クラシック", "HARD", "通常速度クラシック"},
|
['classic_h']= {"クラシック", "HARD", "通常速度クラシック"},
|
||||||
['classic_l']= {"クラシック", "LUNATIC", "中高速度クラシック"},
|
['classic_l']= {"クラシック", "LUNATIC", "中高速度クラシック"},
|
||||||
@@ -958,7 +1015,7 @@ getTip={refuseCopy=true,
|
|||||||
"ゲーム内にはモード選択マップからじゃ入れない隠しモードがいくつかあります!",
|
"ゲーム内にはモード選択マップからじゃ入れない隠しモードがいくつかあります!",
|
||||||
"このゲームでは全てのSpinに火力補正があります!",
|
"このゲームでは全てのSpinに火力補正があります!",
|
||||||
"このゲームのほとんどの楽曲はBeepboxを用いて作曲されました!",
|
"このゲームのほとんどの楽曲はBeepboxを用いて作曲されました!",
|
||||||
"サーバーが不規則にダウンします",
|
"サーバーが不規則に落ちます",
|
||||||
"スタッフロールの背景に流れている名前はスポンサーの名前です!",
|
"スタッフロールの背景に流れている名前はスポンサーの名前です!",
|
||||||
"タブレットやスマホでもキーボードを接続できます!(iOSにはそんな機能ないと思うけど)",
|
"タブレットやスマホでもキーボードを接続できます!(iOSにはそんな機能ないと思うけど)",
|
||||||
"なにかアイデアがありますか? Discordで提案してください!",
|
"なにかアイデアがありますか? Discordで提案してください!",
|
||||||
@@ -1002,5 +1059,6 @@ getTip={refuseCopy=true,
|
|||||||
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR ",C.P,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"},
|
{C.R,"LrL ",C.G,"RlR ",C.B,"LLr ",C.O,"RRl ",C.P,"RRR ",C.P,"LLL ",C.C,"FFF ",C.Y,"RfR ",C.Y,"RRf ",C.Y,"rFF"},
|
||||||
{C.Y,"O-Spin Triple!"},
|
{C.Y,"O-Spin Triple!"},
|
||||||
{C.Z,"なんだって? ",C.lC,"X-Spin?"},
|
{C.Z,"なんだって? ",C.lC,"X-Spin?"},
|
||||||
}
|
},
|
||||||
|
pumpkin="どうも、かぼちゃです",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,40 +92,92 @@ return{
|
|||||||
|
|
||||||
-- dictNote="==Copied from TetroDictionary==",
|
-- dictNote="==Copied from TetroDictionary==",
|
||||||
|
|
||||||
getNoticeFail="Não conseguiu ter anúncios",
|
|
||||||
|
|
||||||
|
-- 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",
|
||||||
|
|
||||||
|
-- Controllers
|
||||||
|
WebSocket={
|
||||||
|
-- invalidConnection="Invalid connection",
|
||||||
|
-- invalidAction="Invalid action",
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
-- connectionFailed="Connection failed",
|
||||||
|
},
|
||||||
|
-- Filters
|
||||||
|
CheckPermission={
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
},
|
||||||
|
-- Plugins
|
||||||
|
ConnectionManager={
|
||||||
|
-- playerInvalid="Player invalid",
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
-- connectionReplaced="Connection replaced",
|
||||||
|
},
|
||||||
|
NoticeManager={
|
||||||
|
-- noticeNotFound="Notice not found",
|
||||||
|
},
|
||||||
|
PlayerManager={
|
||||||
|
-- invalidCode="Invalid code",
|
||||||
|
-- invalidEmail="Invalid email",
|
||||||
|
-- playerNotFound="Player not found",
|
||||||
|
-- invalidEmailPass="Invalid email or password",
|
||||||
|
-- emailExists="Email exists",
|
||||||
|
-- emailSendError="Email send error",
|
||||||
|
},
|
||||||
|
-- Strategies
|
||||||
|
PlayerRole={
|
||||||
|
-- invalidRole="Invalid role",
|
||||||
|
-- invalidTarget="Invalid target",
|
||||||
|
},
|
||||||
|
PlayerType={
|
||||||
|
-- invalidType="Invalid type",
|
||||||
|
-- roomFull="Room full",
|
||||||
|
},
|
||||||
|
RoomJoin={
|
||||||
|
-- wrongPassword="Wrong password",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
-- tooFrequent="Request too frequently",
|
||||||
|
-- roomPasswordChanged="Room password changed",
|
||||||
oldVersion="Versão $1 esta disponível agora!",
|
oldVersion="Versão $1 esta disponível agora!",
|
||||||
-- versionNotMatch="Version do not match!",
|
-- versionNotMatch="Version do not match!",
|
||||||
-- needUpdate="Newer version required!",
|
-- needUpdate="Newer version required!",
|
||||||
-- notFinished="Coming soon!",
|
-- notFinished="Coming soon!",
|
||||||
|
|
||||||
jsonError="Json error",
|
|
||||||
|
|
||||||
noUsername="Insira seu nome de usuário",
|
noUsername="Insira seu nome de usuário",
|
||||||
wrongEmail="Endereço de email errado",
|
wrongEmail="Endereço de email errado",
|
||||||
|
-- wrongCode="Invalid verification code",
|
||||||
noPassword="Insira sua senha ",
|
noPassword="Insira sua senha ",
|
||||||
diffPassword="Senhas não combinam",
|
diffPassword="Senhas não combinam",
|
||||||
-- registerRequestSent="Registration request sent",
|
-- checkEmail="Registration request sent",
|
||||||
registerOK="Registrado com sucesso!",
|
|
||||||
loginOK="Logado com sucesso!",
|
|
||||||
accessOK="Autorizado com sucesso!",
|
|
||||||
|
|
||||||
-- wsConnecting="Websocket Connecting",
|
wsFailed="WebSocket falha na conexão: $1",
|
||||||
wsFailed="WebSocket falha na conexão",
|
wsClose="WebSocket closed: $1",
|
||||||
wsClose="WebSocket closed:",
|
|
||||||
-- netTimeout="Network connection timeout",
|
-- netTimeout="Network connection timeout",
|
||||||
|
-- serverDown="Oops! Server is down",
|
||||||
|
-- requestFailed="Request failed",
|
||||||
|
|
||||||
-- onlinePlayerCount="Online",
|
-- onlinePlayerCount="Online: $1",
|
||||||
-- createRoomSuccessed="Room successfully created!",
|
-- createRoomSuccessed="Room successfully created!",
|
||||||
|
-- playerKicked="$1 removed $2 from room",
|
||||||
|
-- becomeHost="$1 become host",
|
||||||
-- started="Playing",
|
-- started="Playing",
|
||||||
joinRoom="Entrou a sala.",
|
joinRoom="$1 Entrou a sala.",
|
||||||
leaveRoom="Saiu da sala.",
|
leaveRoom="$1 Saiu da sala.",
|
||||||
|
-- roomRemoved="Room was removed",
|
||||||
-- ready="READY",
|
-- ready="READY",
|
||||||
-- connStream="CONNECTING",
|
|
||||||
-- waitStream="WAITING",
|
|
||||||
-- spectating="Spectating",
|
-- spectating="Spectating",
|
||||||
chatRemain="Online",
|
|
||||||
chatStart="------Começo do log------",
|
|
||||||
chatHistory="------Novas mensagens abaixo------",
|
|
||||||
|
|
||||||
-- keySettingInstruction="Press to bind key\nescape: cancel\nbackspace: delete",
|
-- keySettingInstruction="Press to bind key\nescape: cancel\nbackspace: delete",
|
||||||
-- customBGhelp="Drop image file here to apply custom background",
|
-- customBGhelp="Drop image file here to apply custom background",
|
||||||
@@ -311,6 +363,7 @@ return{
|
|||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
json.lua [rxi]
|
json.lua [rxi]
|
||||||
profile.lua [itraykov]
|
profile.lua [itraykov]
|
||||||
|
sha2 [Egor Skriptunoff]
|
||||||
]],
|
]],
|
||||||
support="Support author",
|
support="Support author",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
@@ -350,6 +403,7 @@ return{
|
|||||||
-- league="Tech League",
|
-- league="Tech League",
|
||||||
ffa="FFA",
|
ffa="FFA",
|
||||||
rooms="Salas",
|
rooms="Salas",
|
||||||
|
-- resetPW="Reset password",
|
||||||
-- logout="Log out",
|
-- logout="Log out",
|
||||||
},
|
},
|
||||||
net_league={
|
net_league={
|
||||||
@@ -426,7 +480,6 @@ return{
|
|||||||
-- sysCursor="Use system cursor",
|
-- sysCursor="Use system cursor",
|
||||||
autoPause="Pausar quando foco for perco",
|
autoPause="Pausar quando foco for perco",
|
||||||
-- autoSave="Auto save new-best",
|
-- autoSave="Auto save new-best",
|
||||||
-- autoLogin="Auto Login on Start",
|
|
||||||
-- simpMode="Simple mode",
|
-- simpMode="Simple mode",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -678,24 +731,29 @@ return{
|
|||||||
-- music="BGMs",
|
-- music="BGMs",
|
||||||
-- label="label",
|
-- label="label",
|
||||||
},
|
},
|
||||||
login={
|
login_pw={
|
||||||
title="Log in",
|
title="Log in",
|
||||||
register="Registrar",
|
-- login_mail="Login with E-mail/Sign Up",
|
||||||
email="Endereço De Email",
|
email="Endereço De Email",
|
||||||
password="Senha",
|
password="Senha",
|
||||||
-- showEmail="Show Email",
|
-- showEmail="Show Email",
|
||||||
-- keepPW="Remember me",
|
|
||||||
login="Log in",
|
login="Log in",
|
||||||
},
|
},
|
||||||
register={
|
login_mail={
|
||||||
title="Registrar",
|
title="Log in/Registrar",
|
||||||
login="Log in",
|
-- login_pw="Password Sign In",
|
||||||
username="Nome De Usuário",
|
|
||||||
email="Endereço De Email",
|
email="Endereço De Email",
|
||||||
|
-- send="Send code",
|
||||||
|
-- code="Verification Code",
|
||||||
|
-- verify="Verify",
|
||||||
|
},
|
||||||
|
reset_password={
|
||||||
|
-- title="Reset Password",
|
||||||
|
-- send="Send code",
|
||||||
|
-- code="Verification Code",
|
||||||
password="Senha",
|
password="Senha",
|
||||||
password2="Entre Senha Novamente",
|
password2="Entre Senha Novamente",
|
||||||
register="Registrar",
|
-- setPW="Set Password",
|
||||||
-- registering="Waiting for response...",
|
|
||||||
},
|
},
|
||||||
account={
|
account={
|
||||||
title="Conta",
|
title="Conta",
|
||||||
@@ -968,5 +1026,6 @@ return{
|
|||||||
{C.Y,"暫定段位:MO"},
|
{C.Y,"暫定段位:MO"},
|
||||||
{C.Y,"暫定段位:MV"},
|
{C.Y,"暫定段位:MV"},
|
||||||
{C.Y,"O-spin Triple!"},
|
{C.Y,"O-spin Triple!"},
|
||||||
}
|
},
|
||||||
|
-- pumpkin="I'm a pumpkin",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -166,6 +166,7 @@ return{
|
|||||||
league="TL",
|
league="TL",
|
||||||
ffa="FFA",
|
ffa="FFA",
|
||||||
rooms="< >",
|
rooms="< >",
|
||||||
|
resetPW="R ***",
|
||||||
logout="@_@x",
|
logout="@_@x",
|
||||||
},
|
},
|
||||||
net_league={
|
net_league={
|
||||||
@@ -242,7 +243,6 @@ return{
|
|||||||
sysCursor="?→*",
|
sysCursor="?→*",
|
||||||
autoPause="A||",
|
autoPause="A||",
|
||||||
autoSave="!!!>%",
|
autoSave="!!!>%",
|
||||||
autoLogin="#Log in#",
|
|
||||||
simpMode=".",
|
simpMode=".",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -484,24 +484,29 @@ return{
|
|||||||
music="~~~",
|
music="~~~",
|
||||||
label="...",
|
label="...",
|
||||||
},
|
},
|
||||||
login={
|
login_pw={
|
||||||
title="Log in",
|
title="Log in",
|
||||||
register="Sign up",
|
-- login_mail="Login with E-mail/Sign Up",
|
||||||
email="@",
|
email="@",
|
||||||
password="*",
|
password="*",
|
||||||
showEmail="?",
|
showEmail="?",
|
||||||
keepPW="!",
|
login="→",
|
||||||
login="Log in",
|
|
||||||
},
|
},
|
||||||
register={
|
login_mail={
|
||||||
title="Sign up",
|
title="Log in/Sign up",
|
||||||
login="Log in",
|
login_pw="*** →",
|
||||||
username="#",
|
|
||||||
email="@",
|
email="@",
|
||||||
|
send="→",
|
||||||
|
code="←",
|
||||||
|
verify="!",
|
||||||
|
},
|
||||||
|
reset_password={
|
||||||
|
title="R ***",
|
||||||
|
send="→",
|
||||||
|
code="←",
|
||||||
password="*",
|
password="*",
|
||||||
password2="*",
|
password2="*",
|
||||||
register="Sign up",
|
setPW="##",
|
||||||
registering="......",
|
|
||||||
},
|
},
|
||||||
account={
|
account={
|
||||||
title="@_@",
|
title="@_@",
|
||||||
|
|||||||
@@ -104,47 +104,99 @@ return{
|
|||||||
|
|
||||||
dictNote="==复制于小z词典==",
|
dictNote="==复制于小z词典==",
|
||||||
|
|
||||||
getNoticeFail="拉取公告失败",
|
|
||||||
|
|
||||||
|
-- Server's warn/error messages
|
||||||
|
Techrater={
|
||||||
|
internalError="内部错误",
|
||||||
|
databaseError="数据库错误",
|
||||||
|
invalidFormat="json格式无效",
|
||||||
|
invalidArguments="参数无效",
|
||||||
|
tooFrequent="请求太频繁",
|
||||||
|
notAvailable="无效请求",
|
||||||
|
noPermission="没有权限",
|
||||||
|
roomNotFound="找不到房间",
|
||||||
|
|
||||||
|
-- Controllers
|
||||||
|
WebSocket={
|
||||||
|
invalidConnection="无效连接",
|
||||||
|
invalidAction="无效操作",
|
||||||
|
playerNotFound="找不到玩家",
|
||||||
|
connectionFailed="连接失败",
|
||||||
|
},
|
||||||
|
-- Filters
|
||||||
|
CheckPermission={
|
||||||
|
playerNotFound="找不到玩家",
|
||||||
|
},
|
||||||
|
-- Plugins
|
||||||
|
ConnectionManager={
|
||||||
|
playerInvalid="无效玩家",
|
||||||
|
playerNotFound="找不到玩家",
|
||||||
|
connectionReplaced="连接已更换",
|
||||||
|
},
|
||||||
|
NoticeManager={
|
||||||
|
noticeNotFound="找不到公告",
|
||||||
|
},
|
||||||
|
PlayerManager={
|
||||||
|
invalidCode="无效验证码",
|
||||||
|
invalidEmail="无效邮箱",
|
||||||
|
playerNotFound="找不到玩家",
|
||||||
|
invalidEmailPass="邮箱或密码无效",
|
||||||
|
emailExists="邮箱存在",
|
||||||
|
emailSendError="邮箱发送错误",
|
||||||
|
},
|
||||||
|
-- Strategies
|
||||||
|
PlayerRole={
|
||||||
|
invalidRole="无效角色",
|
||||||
|
invalidTarget="无效目标",
|
||||||
|
},
|
||||||
|
PlayerType={
|
||||||
|
invalidType="无效类型",
|
||||||
|
roomFull="房间已满",
|
||||||
|
},
|
||||||
|
RoomJoin={
|
||||||
|
wrongPassword="密码错误",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
tooFrequent="操作太频繁",
|
||||||
|
roomPasswordChanged="房间密码已更改",
|
||||||
oldVersion="最新版本$1可以下载了!",
|
oldVersion="最新版本$1可以下载了!",
|
||||||
needUpdate="请更新游戏!",
|
|
||||||
versionNotMatch="版本不一致!",
|
versionNotMatch="版本不一致!",
|
||||||
notFinished="暂未完成,敬请期待!",
|
notFinished="暂未完成,敬请期待!",
|
||||||
|
|
||||||
jsonError="json错误",
|
|
||||||
|
|
||||||
noUsername="请填写用户名",
|
noUsername="请填写用户名",
|
||||||
wrongEmail="邮箱格式错误",
|
wrongEmail="无效邮箱地址",
|
||||||
|
wrongCode="无效验证码",
|
||||||
noPassword="请填写密码",
|
noPassword="请填写密码",
|
||||||
diffPassword="两次密码不一致",
|
diffPassword="两次密码不一致",
|
||||||
registerRequestSent="注册请求已发送",
|
checkEmail="请查看邮箱验证码",
|
||||||
registerOK="注册成功!",
|
|
||||||
loginOK="登录成功",
|
|
||||||
accessOK="身份验证成功",
|
|
||||||
|
|
||||||
wsConnecting="正在连接",
|
wsFailed="连接失败: $1",
|
||||||
wsFailed="连接失败",
|
wsClose="连接断开: $1",
|
||||||
wsClose="连接被断开:",
|
|
||||||
netTimeout="连接超时",
|
netTimeout="连接超时",
|
||||||
|
serverDown="唉哟!服务器不在线",
|
||||||
|
requestFailed="请求失败",
|
||||||
|
|
||||||
onlinePlayerCount="在线人数",
|
onlinePlayerCount="在线人数: $1",
|
||||||
createRoomSuccessed="创建房间成功!",
|
createRoomSuccessed="创建房间成功!",
|
||||||
|
playerKicked="$1 把 $2 移出了房间",
|
||||||
|
becomeHost="$1 成为了房主",
|
||||||
started="游戏中",
|
started="游戏中",
|
||||||
joinRoom="进入房间",
|
joinRoom="$1 进入房间",
|
||||||
leaveRoom="离开房间",
|
leaveRoom="$1 离开房间",
|
||||||
|
roomRemoved="房间被解散",
|
||||||
ready="各就各位!",
|
ready="各就各位!",
|
||||||
connStream="正在连接",
|
|
||||||
waitStream="等待其他人连接",
|
|
||||||
spectating="观战中",
|
spectating="观战中",
|
||||||
chatRemain="人数:",
|
|
||||||
chatStart="------消息的开头------",
|
|
||||||
chatHistory="------以上是历史消息------",
|
|
||||||
|
|
||||||
keySettingInstruction="点击添加键位绑定\nesc取消选中\n退格键清空选中",
|
keySettingInstruction="点击添加键位绑定\nesc取消选中\n退格键清空选中",
|
||||||
customBGhelp="把图片文件拖到这个窗口里使用自定义背景",
|
customBGhelp="把图片文件拖到这个窗口里使用自定义背景",
|
||||||
customBGloadFailed="自定义背景的图片文件格式不支持",
|
customBGloadFailed="自定义背景的图片文件格式不支持",
|
||||||
|
|
||||||
errorMsg="Techmino遭受了雷击,需要重新启动。\n我们已收集了一些错误信息,你可以向作者进行反馈。",
|
errorMsg="Techmino遭受了雷击,需要重新启动。\n我们已收集了一些错误信息,你可以向作者进行反馈。",
|
||||||
tryAnotherBuild="[解码UTF-8错误] 如果你现在用的是Windows系统,请重新下载 Techmino-32位 或者 Techmino-64位 (和现在运行的不一样的那个)。",
|
tryAnotherBuild="[解码UTF-8错误] 如果你现在用的是Windows系统,请重新下载 Techmino-32/64位 (和现在运行的不一样的那个)。",
|
||||||
|
|
||||||
modInstruction="选择你要使用的Mod!\n不同Mod会用不同的方式改变初始游戏规则(可能导致不能正常游玩)\n来开发新玩法或者挑战自我吧!\n提醒:开启一些Mod会让成绩无效,你也可以用键盘开关Mod,按住shift反向",
|
modInstruction="选择你要使用的Mod!\n不同Mod会用不同的方式改变初始游戏规则(可能导致不能正常游玩)\n来开发新玩法或者挑战自我吧!\n提醒:开启一些Mod会让成绩无效,你也可以用键盘开关Mod,按住shift反向",
|
||||||
modInfo={
|
modInfo={
|
||||||
@@ -323,6 +375,7 @@ return{
|
|||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
json.lua [rxi]
|
json.lua [rxi]
|
||||||
profile.lua [itraykov]
|
profile.lua [itraykov]
|
||||||
|
sha2 [Egor Skriptunoff]
|
||||||
]],
|
]],
|
||||||
support="支持作者",
|
support="支持作者",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
@@ -362,6 +415,7 @@ return{
|
|||||||
league="Tech League",
|
league="Tech League",
|
||||||
ffa="FFA",
|
ffa="FFA",
|
||||||
rooms="房间列表",
|
rooms="房间列表",
|
||||||
|
resetPW="重置密码",
|
||||||
logout="退出登录",
|
logout="退出登录",
|
||||||
},
|
},
|
||||||
net_league={
|
net_league={
|
||||||
@@ -438,7 +492,6 @@ return{
|
|||||||
sysCursor="使用系统光标",
|
sysCursor="使用系统光标",
|
||||||
autoPause="失去焦点自动暂停",
|
autoPause="失去焦点自动暂停",
|
||||||
autoSave="破纪录自动保存",
|
autoSave="破纪录自动保存",
|
||||||
autoLogin="启动时自动登录",
|
|
||||||
simpMode="简洁模式",
|
simpMode="简洁模式",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -688,24 +741,29 @@ return{
|
|||||||
path="打开存储目录",
|
path="打开存储目录",
|
||||||
save="用户档案管理",
|
save="用户档案管理",
|
||||||
},
|
},
|
||||||
login={
|
login_pw={
|
||||||
title="登录",
|
title="登录",
|
||||||
register="注册",
|
login_mail="邮箱登录/注册",
|
||||||
email="邮箱",
|
email="邮箱",
|
||||||
password="密码",
|
password="密码",
|
||||||
showEmail="显示邮箱",
|
showEmail="显示邮箱",
|
||||||
keepPW="保存密码",
|
|
||||||
login="登录",
|
login="登录",
|
||||||
},
|
},
|
||||||
register={
|
login_mail={
|
||||||
title="注册",
|
title="登录/注册",
|
||||||
login="登录",
|
login_pw="密码登录",
|
||||||
username="用户名",
|
email="邮箱",
|
||||||
email="邮箱:",
|
send="发送验证码",
|
||||||
password="密码:",
|
code="验证码",
|
||||||
password2="确认密码:",
|
verify="验证邮箱",
|
||||||
register="注册",
|
},
|
||||||
registering="等待服务器响应……",
|
reset_password={
|
||||||
|
title="重置密码",
|
||||||
|
send="发送验证码",
|
||||||
|
code="验证码",
|
||||||
|
password="密码",
|
||||||
|
password2="确认密码",
|
||||||
|
setPW="设置密码",
|
||||||
},
|
},
|
||||||
account={
|
account={
|
||||||
title="帐户",
|
title="帐户",
|
||||||
@@ -1209,6 +1267,7 @@ return{
|
|||||||
"群友名言[002]“我要陪伴着tech一步步成长,然后就可以疯狂的享受他”",
|
"群友名言[002]“我要陪伴着tech一步步成长,然后就可以疯狂的享受他”",
|
||||||
"群友名言[003]“太super啦,不愧是guideline”",
|
"群友名言[003]“太super啦,不愧是guideline”",
|
||||||
"群友名言[004]“憋惦记你那*26了(”",
|
"群友名言[004]“憋惦记你那*26了(”",
|
||||||
|
"群友名言[005]“如果bug有颜色,那一定是___”",
|
||||||
|
|
||||||
-- Frt评
|
-- Frt评
|
||||||
"Frt评[01]“成天被夸赞‘好玩’的”",
|
"Frt评[01]“成天被夸赞‘好玩’的”",
|
||||||
@@ -1299,5 +1358,6 @@ return{
|
|||||||
{C.R,"上班时间不许摸鱼打块!"},
|
{C.R,"上班时间不许摸鱼打块!"},
|
||||||
{C.R,"上课时间不许摸鱼打块!"},
|
{C.R,"上课时间不许摸鱼打块!"},
|
||||||
{C.W,"uid:225238922"},
|
{C.W,"uid:225238922"},
|
||||||
}
|
},
|
||||||
|
pumpkin="我是南瓜",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,47 +104,48 @@ return{
|
|||||||
|
|
||||||
dictNote="#!CopySource=Zictionary",
|
dictNote="#!CopySource=Zictionary",
|
||||||
|
|
||||||
getNoticeFail="Error.FetchAnnouncement();",
|
|
||||||
|
|
||||||
|
-- Server's warn/error messages
|
||||||
|
Techrater={},
|
||||||
|
|
||||||
|
tooFrequent="Error.requesttooFrequent();",
|
||||||
|
roomPasswordChanged="Info.roomPwChanged();",
|
||||||
oldVersion="Version.New($1);",
|
oldVersion="Version.New($1);",
|
||||||
needUpdate="Version.NeedUpdate()",
|
|
||||||
versionNotMatch="Version.NotMatch();",
|
versionNotMatch="Version.NotMatch();",
|
||||||
notFinished="ComingSoon();",
|
notFinished="ComingSoon();",
|
||||||
|
|
||||||
jsonError="Error.JSON();",
|
|
||||||
|
|
||||||
noUsername="Error.NoUsername();",
|
noUsername="Error.NoUsername();",
|
||||||
wrongEmail="Error.WrongEmail();",
|
wrongEmail="Error.WrongEmail();",
|
||||||
noPassword="Error.NoPassword();",
|
wrongCode="Error.WrongVerificationCode();",
|
||||||
diffPassword="Error.DiffPassword();",
|
diffPassword="Error.DiffPassword();",
|
||||||
registerRequestSent="register.RequestSent=true",
|
checkEmail="register.RequestSent=true",
|
||||||
registerOK="register.Success=true",
|
|
||||||
loginOK="login.Success=true",
|
|
||||||
accessOK="Access.Granted=true",
|
|
||||||
|
|
||||||
wsConnecting="Websocket.Connect();",
|
wsFailed="Error.Websocket.Failed=$1",
|
||||||
wsFailed="Error.Websocket.Failed();",
|
wsClose="Error.Websocket.Close=$1",
|
||||||
wsClose="Error.Websocket.Close=",
|
|
||||||
netTimeout="Error.ConnectTimeOut();",
|
netTimeout="Error.ConnectTimeOut();",
|
||||||
|
serverDown="Error.ServerDown();",
|
||||||
|
requestFailed="Error.RequestFailed();",
|
||||||
|
|
||||||
onlinePlayerCount="OnlinePlayerCount",
|
onlinePlayerCount="OnlinePlayerCount=$1",
|
||||||
createRoomSuccessed="CreateRoom.Successs=true",
|
createRoomSuccessed="CreateRoom.Successs=true",
|
||||||
|
playerKicked="[$1]: roomKick([$2])",
|
||||||
|
-- becomeHost="$1 become host",
|
||||||
started="Room.Playing();",
|
started="Room.Playing();",
|
||||||
joinRoom="Room.Join();",
|
joinRoom="Room.Join($1);",
|
||||||
leaveRoom="Room.Leave();",
|
leaveRoom="Room.Leave($1);",
|
||||||
|
roomRemoved="Room.Removed();",
|
||||||
ready="Ready();",
|
ready="Ready();",
|
||||||
connStream="Stream.Connecting();",
|
|
||||||
waitStream="Stream.Waiting();",
|
|
||||||
spectating="Room.Spectating();",
|
spectating="Room.Spectating();",
|
||||||
chatRemain="Online=",
|
|
||||||
chatStart="#!Log.Beginning();",
|
|
||||||
chatHistory="#!NewMassagesBelow();",
|
|
||||||
|
|
||||||
keySettingInstruction="Key.Bind(Press);\nKey.Bind.Cancel(Escspe);\nKey.Bind.Delete(Backspace);",
|
keySettingInstruction="Key.Bind(Press);\nKey.Bind.Cancel(Escspe);\nKey.Bind.Delete(Backspace);",
|
||||||
customBGhelp="Ctm.BG(DropHere);",
|
customBGhelp="Ctm.BG(DropHere);",
|
||||||
customBGloadFailed="Error.Ctm.BG(UnsupportFormat);",
|
customBGloadFailed="Error.Ctm.BG(UnsupportFormat);",
|
||||||
|
|
||||||
errorMsg="Error.Fatal();\n//请检查语法错误或向作者进行反馈。",
|
errorMsg="Error.Fatal();\n//请检查语法错误或向作者进行反馈。",
|
||||||
tryAnotherBuild="Error.DecodeUTF8(); //如果你现在用的是Windows系统,请重新下载 Techmino-32位 或者 Techmino-64位 (和现在运行的不一样的那个)。",
|
tryAnotherBuild="Error.DecodeUTF8(); //如果你现在用的是Windows系统,请重新下载 Techmino-32/64位 (和现在运行的不一样的那个)。",
|
||||||
|
|
||||||
modInstruction="Mod.Instruction();\n/*选择你要使用的Mod\n不同Mod会用不同的方式改变初始游戏规则(可能导致不能正常游玩)\n提醒:开启一些Mod会让成绩无效,你也可以用键盘开关Mod,按住shift反向*/",
|
modInstruction="Mod.Instruction();\n/*选择你要使用的Mod\n不同Mod会用不同的方式改变初始游戏规则(可能导致不能正常游玩)\n提醒:开启一些Mod会让成绩无效,你也可以用键盘开关Mod,按住shift反向*/",
|
||||||
modInfo={
|
modInfo={
|
||||||
@@ -324,6 +325,7 @@ return{
|
|||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
json.lua [rxi]
|
json.lua [rxi]
|
||||||
profile.lua [itraykov]
|
profile.lua [itraykov]
|
||||||
|
sha2 [Egor Skriptunoff]
|
||||||
]],
|
]],
|
||||||
support="支持作者",
|
support="支持作者",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
@@ -363,6 +365,7 @@ return{
|
|||||||
league="M.TechLeague();",
|
league="M.TechLeague();",
|
||||||
ffa="M.FFA",
|
ffa="M.FFA",
|
||||||
rooms="M.Rooms();",
|
rooms="M.Rooms();",
|
||||||
|
resetPW="M.ResetPW",
|
||||||
logout="M.Logout();",
|
logout="M.Logout();",
|
||||||
},
|
},
|
||||||
net_league={
|
net_league={
|
||||||
@@ -439,7 +442,6 @@ return{
|
|||||||
sysCursor="Set.SysCursor",
|
sysCursor="Set.SysCursor",
|
||||||
autoPause="Set.AutoPause",
|
autoPause="Set.AutoPause",
|
||||||
autoSave="Set.AutoSave",
|
autoSave="Set.AutoSave",
|
||||||
autoLogin="Set.AutoLogin",
|
|
||||||
simpMode="Set.SimpMode",
|
simpMode="Set.SimpMode",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -689,24 +691,29 @@ return{
|
|||||||
path="OpenPath();",
|
path="OpenPath();",
|
||||||
save="DataManagement();",
|
save="DataManagement();",
|
||||||
},
|
},
|
||||||
login={
|
login_pw={
|
||||||
title="LogIn.UI",
|
title="LogIn.UI",
|
||||||
register="Register();",
|
login_mail="Login_mail_sign_up()",
|
||||||
email="Email=",
|
email="Email=",
|
||||||
password="Password=",
|
password="Password=",
|
||||||
showEmail="ShowEmail",
|
showEmail="ShowEmail",
|
||||||
keepPW="KeepPassword",
|
|
||||||
login="Login();",
|
login="Login();",
|
||||||
},
|
},
|
||||||
register={
|
login_mail={
|
||||||
title="Register.UI",
|
title="LogIn_Register.UI",
|
||||||
login="Login();",
|
login_pw="Login_pw();",
|
||||||
username="Username=",
|
|
||||||
email="Email=",
|
email="Email=",
|
||||||
|
send="Send();",
|
||||||
|
code="V-code=",
|
||||||
|
verify="Verify();",
|
||||||
|
},
|
||||||
|
reset_password={
|
||||||
|
title="Reset_Password.UI",
|
||||||
|
send="Send();",
|
||||||
|
code="V-code=",
|
||||||
password="Password=",
|
password="Password=",
|
||||||
password2="RePassword=",
|
password2="RePassword=",
|
||||||
register="Register();",
|
setPW="SetPassword();",
|
||||||
registering="Waiting();",
|
|
||||||
},
|
},
|
||||||
account={
|
account={
|
||||||
title="Account.UI",
|
title="Account.UI",
|
||||||
|
|||||||
@@ -104,40 +104,92 @@ return{
|
|||||||
|
|
||||||
dictNote="==拷貝自小z辭典==",
|
dictNote="==拷貝自小z辭典==",
|
||||||
|
|
||||||
getNoticeFail="無法獲取公告",
|
|
||||||
|
|
||||||
|
-- Server's warn/error messages
|
||||||
|
Techrater={
|
||||||
|
internalError="內部錯誤",
|
||||||
|
databaseError="資料庫錯誤",
|
||||||
|
invalidFormat="json格式無效",
|
||||||
|
invalidArguments="參數無效",
|
||||||
|
tooFrequent="請求太頻繁",
|
||||||
|
notAvailable="無效請求",
|
||||||
|
noPermission="沒有許可權",
|
||||||
|
roomNotFound="找不到房間",
|
||||||
|
|
||||||
|
-- Controllers
|
||||||
|
WebSocket={
|
||||||
|
invalidConnection="無效連接",
|
||||||
|
invalidAction="無效操作",
|
||||||
|
playerNotFound="找不到玩家",
|
||||||
|
connectionFailed="連接失敗",
|
||||||
|
},
|
||||||
|
-- Filters
|
||||||
|
CheckPermission={
|
||||||
|
playerNotFound="找不到玩家",
|
||||||
|
},
|
||||||
|
-- Plugins
|
||||||
|
ConnectionManager={
|
||||||
|
playerInvalid="無效玩家",
|
||||||
|
playerNotFound="找不到玩家",
|
||||||
|
connectionReplaced="連接已更換",
|
||||||
|
},
|
||||||
|
NoticeManager={
|
||||||
|
noticeNotFound="找不到公告",
|
||||||
|
},
|
||||||
|
PlayerManager={
|
||||||
|
invalidCode="無效驗證碼",
|
||||||
|
invalidEmail="無效郵箱",
|
||||||
|
playerNotFound="找不到玩家",
|
||||||
|
invalidEmailPass="郵箱或密碼無效",
|
||||||
|
emailExists="郵箱存在",
|
||||||
|
emailSendError="郵箱發送錯誤",
|
||||||
|
},
|
||||||
|
-- Strategies
|
||||||
|
PlayerRole={
|
||||||
|
invalidRole="無效角色",
|
||||||
|
invalidTarget="無效目標",
|
||||||
|
},
|
||||||
|
PlayerType={
|
||||||
|
invalidType="無效類型",
|
||||||
|
roomFull="房間已滿",
|
||||||
|
},
|
||||||
|
RoomJoin={
|
||||||
|
wrongPassword="密碼錯誤",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
tooFrequent="操作太頻繁",
|
||||||
|
roomPasswordChanged="房間密碼已更改",
|
||||||
oldVersion="版本 $1 現已推出",
|
oldVersion="版本 $1 現已推出",
|
||||||
needUpdate="請更新遊戲!",
|
|
||||||
versionNotMatch="版本不匹配",
|
versionNotMatch="版本不匹配",
|
||||||
notFinished="即將推出!",
|
notFinished="即將推出!",
|
||||||
|
|
||||||
jsonError="JSON錯誤",
|
|
||||||
|
|
||||||
noUsername="請輸入用戶名",
|
noUsername="請輸入用戶名",
|
||||||
wrongEmail="無效的電郵地址",
|
wrongEmail="無效的電郵地址",
|
||||||
|
wrongCode="無效的驗證碼",
|
||||||
noPassword="請輸入密碼",
|
noPassword="請輸入密碼",
|
||||||
diffPassword="密碼不匹配",
|
diffPassword="密碼不匹配",
|
||||||
registerRequestSent="已發送註冊請求",
|
checkEmail="請查看郵件驗證碼",
|
||||||
registerOK="註冊成功!",
|
|
||||||
loginOK="登錄成功",
|
|
||||||
accessOK="身份認證成功",
|
|
||||||
|
|
||||||
wsConnecting="正在連接……",
|
wsFailed="連接失敗: $1",
|
||||||
wsFailed="連接失敗",
|
wsClose="連接斷開: $1",
|
||||||
wsClose="連接斷開:",
|
|
||||||
netTimeout="連接超時",
|
netTimeout="連接超時",
|
||||||
|
serverDown="哎唷!服務器不在线",
|
||||||
|
requestFailed="請求失敗",
|
||||||
|
|
||||||
onlinePlayerCount="在線用戶數",
|
onlinePlayerCount="在線用戶數: $1",
|
||||||
createRoomSuccessed="房間已創建!",
|
createRoomSuccessed="房間已創建!",
|
||||||
|
playerKicked="#$1 把 #$2 移出了房間",
|
||||||
|
becomeHost="$1 成為了房主",
|
||||||
started="遊戲中",
|
started="遊戲中",
|
||||||
joinRoom="進入房間",
|
joinRoom="$1 進入房間",
|
||||||
leaveRoom="離開房間",
|
leaveRoom="$1 離開房間",
|
||||||
|
roomRemoved="房間被解散",
|
||||||
ready="準備!",
|
ready="準備!",
|
||||||
connStream="正在連接……",
|
|
||||||
waitStream="等待其他用戶連接……",
|
|
||||||
spectating="旁觀中",
|
spectating="旁觀中",
|
||||||
chatRemain="用戶數:",
|
|
||||||
chatStart="------訊息開始------",
|
|
||||||
chatHistory="------以上為歷史訊息------",
|
|
||||||
|
|
||||||
keySettingInstruction="點擊來設置鍵位\n按esc來取消選中\n按退格鍵來清除選中",
|
keySettingInstruction="點擊來設置鍵位\n按esc來取消選中\n按退格鍵來清除選中",
|
||||||
customBGhelp="把圖片檔案拖到這個視窗裏使用自定義背景",
|
customBGhelp="把圖片檔案拖到這個視窗裏使用自定義背景",
|
||||||
@@ -323,6 +375,7 @@ return{
|
|||||||
Cold_Clear [MinusKelvin]
|
Cold_Clear [MinusKelvin]
|
||||||
json.lua [rxi]
|
json.lua [rxi]
|
||||||
profile.lua [itraykov]
|
profile.lua [itraykov]
|
||||||
|
sha2 [Egor Skriptunoff]
|
||||||
]],
|
]],
|
||||||
support="支持作者",
|
support="支持作者",
|
||||||
WidgetText={
|
WidgetText={
|
||||||
@@ -362,6 +415,7 @@ return{
|
|||||||
league="Tech League",
|
league="Tech League",
|
||||||
ffa="FFA",
|
ffa="FFA",
|
||||||
rooms="房間列表",
|
rooms="房間列表",
|
||||||
|
resetPW="重設密碼",
|
||||||
logout="登出",
|
logout="登出",
|
||||||
},
|
},
|
||||||
net_league={
|
net_league={
|
||||||
@@ -438,7 +492,6 @@ return{
|
|||||||
sysCursor="使用系統光標",
|
sysCursor="使用系統光標",
|
||||||
autoPause="失去焦點時暫停",
|
autoPause="失去焦點時暫停",
|
||||||
autoSave="打破紀錄時自動保存",
|
autoSave="打破紀錄時自動保存",
|
||||||
autoLogin="啟動時自動登錄",
|
|
||||||
simpMode="簡潔模式",
|
simpMode="簡潔模式",
|
||||||
},
|
},
|
||||||
setting_video={
|
setting_video={
|
||||||
@@ -688,24 +741,29 @@ return{
|
|||||||
path="打開存儲目錄",
|
path="打開存儲目錄",
|
||||||
save="用戶資料管理",
|
save="用戶資料管理",
|
||||||
},
|
},
|
||||||
login={
|
login_pw={
|
||||||
title="登錄",
|
title="登錄",
|
||||||
register="註冊",
|
login_mail="電郵登錄/注册",
|
||||||
email="電郵",
|
email="電郵",
|
||||||
password="密碼",
|
password="密碼",
|
||||||
showEmail="顯示郵箱",
|
showEmail="顯示郵箱",
|
||||||
keepPW="保存密碼",
|
|
||||||
login="登錄",
|
login="登錄",
|
||||||
},
|
},
|
||||||
register={
|
login_mail={
|
||||||
title="註冊",
|
title="登錄/註冊",
|
||||||
login="登錄",
|
login_pw="密碼登錄",
|
||||||
username="用戶名",
|
|
||||||
email="電郵",
|
email="電郵",
|
||||||
|
send="發送驗證碼",
|
||||||
|
code="驗證碼",
|
||||||
|
verify="驗證郵箱",
|
||||||
|
},
|
||||||
|
reset_password={
|
||||||
|
title="重設密碼",
|
||||||
|
send="發送驗證碼",
|
||||||
|
code="驗證碼",
|
||||||
password="密碼",
|
password="密碼",
|
||||||
password2="確認密碼",
|
password2="確認密碼",
|
||||||
register="註冊",
|
setPW="設置密碼",
|
||||||
registering="等待伺服器響應……",
|
|
||||||
},
|
},
|
||||||
account={
|
account={
|
||||||
title="賬戶",
|
title="賬戶",
|
||||||
@@ -873,4 +931,5 @@ return{
|
|||||||
['custom_clear']= {"自定義", "普通"},
|
['custom_clear']= {"自定義", "普通"},
|
||||||
['custom_puzzle']= {"自定義", "拼圖"},
|
['custom_puzzle']= {"自定義", "拼圖"},
|
||||||
},
|
},
|
||||||
|
pumpkin="我是南瓜",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ return{
|
|||||||
GC.rectangle('line',488,20,100,80,5)
|
GC.rectangle('line',488,20,100,80,5)
|
||||||
GC.draw(border,-17+150,-12)
|
GC.draw(border,-17+150,-12)
|
||||||
setFont(30)
|
setFont(30)
|
||||||
GC.mStr(P.username,300,-60)
|
GC.mStr(P.username or USERS.getUsername(P.uid),300,-60)
|
||||||
end
|
end
|
||||||
GC.pop()
|
GC.pop()
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ return{
|
|||||||
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
||||||
getRank=function(P)
|
getRank=function(P)
|
||||||
local L=P.stat.row
|
local L=P.stat.row
|
||||||
if L==100 then
|
if L>=100 then
|
||||||
local T=P.stat.time
|
local T=P.stat.time
|
||||||
return
|
return
|
||||||
T<=32 and 5 or
|
T<=32 and 5 or
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ return{
|
|||||||
sequence=function(P)
|
sequence=function(P)
|
||||||
for _=1,3 do P:getNext(7) end
|
for _=1,3 do P:getNext(7) end
|
||||||
while true do
|
while true do
|
||||||
YIELD()
|
coroutine.yield()
|
||||||
if not P.nextQueue[1] then
|
if not P.nextQueue[1] then
|
||||||
local height=TABLE.new(0,10)
|
local height=TABLE.new(0,10)
|
||||||
local max=#P.field
|
local max=#P.field
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ return{
|
|||||||
sequence="bagES",
|
sequence="bagES",
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
eventSet='master_n',
|
eventSet='master_n',
|
||||||
bg='bg1',bgm='secret8th',
|
bg='bg2',bgm='secret8th',
|
||||||
},
|
},
|
||||||
slowMark=true,
|
slowMark=true,
|
||||||
score=function(P) return {P.modeData.pt,P.stat.time} end,
|
score=function(P) return {P.modeData.pt,P.stat.time} end,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
local yield=YIELD
|
local yield=coroutine.yield
|
||||||
local function marginTask(P)
|
local function marginTask(P)
|
||||||
local S=P.stat
|
local S=P.stat
|
||||||
while true do yield() if S.frame>90*60 then P.strength=1;P:setFrameColor(1)break end end
|
while true do yield() if S.frame>90*60 then P.strength=1;P:setFrameColor(1)break end end
|
||||||
@@ -12,19 +12,26 @@ return{
|
|||||||
bgm={'battle','beat5th','cruelty','distortion','echo','far','final','here','hope','memory','moonbeam','push','rectification','secret7th remix','secret7th','secret8th remix','secret8th','shift','shining terminal','storm','super7th','there','truth','vapor','waterfall'},
|
bgm={'battle','beat5th','cruelty','distortion','echo','far','final','here','hope','memory','moonbeam','push','rectification','secret7th remix','secret7th','secret8th remix','secret8th','shift','shining terminal','storm','super7th','there','truth','vapor','waterfall'},
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
for k,v in next,NET.roomState.roomData do
|
for k,v in next,NET.roomState.data do
|
||||||
GAME.modeEnv[k]=v
|
GAME.modeEnv[k]=v
|
||||||
end
|
end
|
||||||
GAME.modeEnv.allowMod=false
|
GAME.modeEnv.allowMod=false
|
||||||
GAME.modeEnv.task=marginTask
|
GAME.modeEnv.task=marginTask
|
||||||
|
|
||||||
local L=TABLE.copy(NETPLY.list)
|
local L=TABLE.shift(NETPLY.list,0)
|
||||||
|
table.sort(L,function(a,b) return a.uid<b.uid end)
|
||||||
|
math.randomseed(GAME.seed)
|
||||||
|
for i=#L,1,-1 do
|
||||||
|
table.insert(NETPLY.list,table.remove(NETPLY.list,math.random(i)))
|
||||||
|
end
|
||||||
|
TABLE.clear(NET.uid_sid)
|
||||||
|
for i=1,#L do NET.uid_sid[L[i].uid]=i end
|
||||||
|
|
||||||
local N=1
|
local N=1
|
||||||
for i,p in next,L do
|
for i,p in next,L do
|
||||||
if p.uid==USER.uid then
|
if p.uid==USER.uid then
|
||||||
if p.connected then
|
if p.playMode=='Gamer' then
|
||||||
PLY.newPlayer(1)
|
PLY.newPlayer(1,false,p)
|
||||||
PLAYERS[1].sid=NETPLY.getSID(USER.uid)
|
|
||||||
N=2
|
N=2
|
||||||
end
|
end
|
||||||
table.remove(L,i)
|
table.remove(L,i)
|
||||||
@@ -32,7 +39,7 @@ return{
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
for _,p in next,L do
|
for _,p in next,L do
|
||||||
if p.connected then
|
if p.playMode=='Gamer' then
|
||||||
PLY.newRemotePlayer(N,false,p)
|
PLY.newRemotePlayer(N,false,p)
|
||||||
N=N+1
|
N=N+1
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ return{
|
|||||||
life=2,
|
life=2,
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg='bg2',bgm='battle',
|
bg='quarks',bgm='battle',
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1)
|
PLY.newPlayer(1)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ return{
|
|||||||
life=2,
|
life=2,
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg='bg2',bgm='battle',
|
bg='quarks',bgm='battle',
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1)
|
PLY.newPlayer(1)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ return{
|
|||||||
life=2,
|
life=2,
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg='bg2',bgm='battle',
|
bg='quarks',bgm='battle',
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1)
|
PLY.newPlayer(1)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ return{
|
|||||||
life=2,
|
life=2,
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg='bg2',bgm='battle',
|
bg='quarks',bgm='battle',
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1)
|
PLY.newPlayer(1)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ return{
|
|||||||
life=2,
|
life=2,
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
bg='bg2',bgm='battle',
|
bg='quarks',bgm='battle',
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
PLY.newPlayer(1)
|
PLY.newPlayer(1)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ return{
|
|||||||
scoreDisp=function(D) return D[1].." Attack "..STRING.time(D[2]) end,
|
scoreDisp=function(D) return D[1].." Attack "..STRING.time(D[2]) end,
|
||||||
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
|
||||||
getRank=function(P)
|
getRank=function(P)
|
||||||
if P.stat.atk<40 then return end
|
if P.stat.atk<100 then return end
|
||||||
local T=P.stat.time
|
local T=P.stat.time
|
||||||
return
|
return
|
||||||
T<40 and 5 or
|
T<40 and 5 or
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return{
|
|||||||
pushSpeed=2,
|
pushSpeed=2,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
eventSet='royale',
|
eventSet='royale',
|
||||||
bg='rainbow',bgm='rockblock',
|
bg='galaxy',bgm='rockblock',
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
ROYALEDATA.powerUp={2,5,10,20}
|
ROYALEDATA.powerUp={2,5,10,20}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return{
|
|||||||
pushSpeed=2,
|
pushSpeed=2,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
eventSet='royale',
|
eventSet='royale',
|
||||||
bg='rainbow',bgm='rockblock',
|
bg='galaxy',bgm='rockblock',
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
ROYALEDATA.powerUp={2,5,10,20}
|
ROYALEDATA.powerUp={2,5,10,20}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return{
|
|||||||
pushSpeed=2,
|
pushSpeed=2,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
eventSet='royale',
|
eventSet='royale',
|
||||||
bg='rainbow',bgm='rockblock',
|
bg='galaxy',bgm='rockblock',
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
ROYALEDATA.powerUp={2,5,10,20}
|
ROYALEDATA.powerUp={2,5,10,20}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return{
|
|||||||
pushSpeed=2,
|
pushSpeed=2,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
eventSet='royale',
|
eventSet='royale',
|
||||||
bg='rainbow',bgm='rockblock',
|
bg='galaxy',bgm='rockblock',
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
ROYALEDATA.powerUp={2,6,14,30}
|
ROYALEDATA.powerUp={2,6,14,30}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return{
|
|||||||
pushSpeed=2,
|
pushSpeed=2,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
eventSet='royale',
|
eventSet='royale',
|
||||||
bg='rainbow',bgm='rockblock',
|
bg='galaxy',bgm='rockblock',
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
ROYALEDATA.powerUp={2,6,14,30}
|
ROYALEDATA.powerUp={2,6,14,30}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ return{
|
|||||||
pushSpeed=2,
|
pushSpeed=2,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
eventSet='royale',
|
eventSet='royale',
|
||||||
bg='rainbow',bgm='rockblock',
|
bg='galaxy',bgm='rockblock',
|
||||||
},
|
},
|
||||||
load=function()
|
load=function()
|
||||||
ROYALEDATA.powerUp={2,6,14,30}
|
ROYALEDATA.powerUp={2,6,14,30}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
return {
|
return {
|
||||||
env={
|
env={
|
||||||
drop=120,lock=1e99,
|
drop=120,lock=1e99,
|
||||||
|
hang=15,
|
||||||
infHold=true,
|
infHold=true,
|
||||||
ospin=false,
|
ospin=false,
|
||||||
eventSet='tsd_e',
|
eventSet='tsd_e',
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
return {
|
return {
|
||||||
env={
|
env={
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
|
hang=15,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
ospin=false,
|
ospin=false,
|
||||||
eventSet='tsd_h',
|
eventSet='tsd_h',
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
return {
|
return {
|
||||||
env={
|
env={
|
||||||
drop=60,lock=60,
|
drop=60,lock=60,
|
||||||
|
hang=15,
|
||||||
freshLimit=15,
|
freshLimit=15,
|
||||||
ospin=false,
|
ospin=false,
|
||||||
eventSet='tsd_u',
|
eventSet='tsd_u',
|
||||||
|
|||||||
1492
parts/net.lua
1492
parts/net.lua
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user