Compare commits
49 Commits
pre0.16.4-
...
pre1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
63da1b5585 | ||
|
|
929be4faf0 | ||
|
|
59a5b52993 | ||
|
|
c412e07153 | ||
|
|
252f19c6df | ||
|
|
8264fdd4bf | ||
|
|
dfd28f2f10 | ||
|
|
5fc1257e58 | ||
|
|
5c39765f71 | ||
|
|
ca92622d5d | ||
|
|
e28902bc97 | ||
|
|
d228809a53 | ||
|
|
60f8a22dd5 | ||
|
|
db4ae56990 | ||
|
|
e95288b171 | ||
|
|
2511555eb0 | ||
|
|
4c4f01cb95 | ||
|
|
7177118f34 | ||
|
|
a6d5c4a1bf | ||
|
|
73a828d73a | ||
|
|
a7df4d6aa7 | ||
|
|
7fe4802887 | ||
|
|
7eac341b9a | ||
|
|
1fa02a18b2 | ||
|
|
b15cb64681 | ||
|
|
bf345c8655 | ||
|
|
cbdb15d658 | ||
|
|
8b4504bfa0 | ||
|
|
111790fdab | ||
|
|
bec03de7b8 | ||
|
|
f5dfae3a6c | ||
|
|
d3dec2b5f1 | ||
|
|
f083136998 | ||
|
|
cd3d0b370c | ||
|
|
f4c6632941 | ||
|
|
750cb9a669 | ||
|
|
62a198a017 | ||
|
|
5780ba0f3e | ||
|
|
86edeb1e0c | ||
|
|
53b1852f28 | ||
|
|
e3c385693b | ||
|
|
572c0fbfa1 | ||
|
|
bbdf71167a | ||
|
|
2136ccd9a2 | ||
|
|
2131aea575 | ||
|
|
32b21c7d29 | ||
|
|
8f6f6f316f | ||
|
|
66f9ac2791 | ||
|
|
ac0ba90438 |
2
.github/actions/build-linux/action.yml
vendored
2
.github/actions/build-linux/action.yml
vendored
@@ -33,7 +33,7 @@ runs:
|
||||
cp squashfs-root/icon.png squashfs-root/.DirIcon
|
||||
chmod 777 squashfs-root/love
|
||||
mkdir -p squashfs-root/usr/share/Techmino
|
||||
mv media parts Zframework conf.lua main.lua version.lua squashfs-root/usr/share/Techmino
|
||||
mv media parts Zframework conf.lua main.lua version.lua legals.md license.txt squashfs-root/usr/share/Techmino
|
||||
mv CCloader.so squashfs-root/usr/share/Techmino
|
||||
mv libcold_clear.so squashfs-root/usr/lib
|
||||
chmod 777 appimagetool-x86_64.AppImage
|
||||
|
||||
2
.github/actions/build-love/action.yml
vendored
2
.github/actions/build-love/action.yml
vendored
@@ -7,5 +7,5 @@ inputs:
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- run: 7z a -tzip ${{ inputs.file-path }} media parts Zframework conf.lua main.lua version.lua
|
||||
- run: 7z a -tzip ${{ inputs.file-path }} media parts Zframework conf.lua main.lua version.lua legals.md license.txt
|
||||
shell: bash
|
||||
|
||||
51
.github/actions/upload-artifact/action.yml
vendored
Normal file
51
.github/actions/upload-artifact/action.yml
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
name: "upload artifact"
|
||||
description: "upload file with webdav"
|
||||
inputs:
|
||||
WEBDAV_USERNAME:
|
||||
required: true
|
||||
description: "webdav username"
|
||||
WEBDAV_PASSWORD:
|
||||
required: true
|
||||
description: "webdav password"
|
||||
ARTIFACT_TYPE:
|
||||
required: true
|
||||
description: "file build type"
|
||||
ARTIFACT_PLATFORM:
|
||||
required: true
|
||||
description: "file platform"
|
||||
ARTIFACT_NAME:
|
||||
required: true
|
||||
description: "file name"
|
||||
runs:
|
||||
using: "composite"
|
||||
steps:
|
||||
- name: Install Webdav 4
|
||||
shell: bash
|
||||
run: |
|
||||
pip install webdav4
|
||||
- name: Update release
|
||||
shell: python
|
||||
run: |
|
||||
import re
|
||||
from webdav4.client import Client
|
||||
|
||||
client = Client(
|
||||
"http://mc.yuhao7370.top:5212/dav",
|
||||
auth=("${{ inputs.WEBDAV_USERNAME }}", "${{ inputs.WEBDAV_PASSWORD }}"),
|
||||
timeout=None,
|
||||
)
|
||||
if '${{ inputs.ARTIFACT_TYPE }}' == 'release'
|
||||
print('Removing previous ${{ inputs.ARTIFACT_PLATFORM }} release file...')
|
||||
for file in client.ls('Techmino distribution'):
|
||||
if re.search(r'(Techmino_a[0-9]+\.[0-9]+\.[0-9]_${{ inputs.ARTIFACT_PLATFORM }}.*)', file['name']):
|
||||
client.remove(file['name'])
|
||||
print('Uploading new ${{ inputs.ARTIFACT_PLATFORM }} release file...')
|
||||
client.upload_file("${{ inputs.ARTIFACT_NAME }}", 'Techmino distribution/${{ inputs.ARTIFACT_NAME }}')
|
||||
|
||||
if '${{ inputs.ARTIFACT_TYPE }}' == 'test':
|
||||
print('Removing previous ${{ inputs.ARTIFACT_PLATFORM }} test file...')
|
||||
for file in client.ls('Techmino Snapshot'):
|
||||
if re.search(r'(Techmino_pre[0-9]+\.[0-9]+\.[0-9]_[0-9a-z]{7}_${{ inputs.ARTIFACT_PLATFORM }}.*)', file['name']):
|
||||
client.remove(file['name'])
|
||||
print('Uploading new ${{ inputs.ARTIFACT_PLATFORM }} test file...')
|
||||
client.upload_file("${{ inputs.ARTIFACT_NAME }}", 'Techmino Snapshot/${{ inputs.ARTIFACT_NAME }}')
|
||||
45
.github/workflows/dev.yml
vendored
45
.github/workflows/dev.yml
vendored
@@ -97,6 +97,34 @@ jobs:
|
||||
with:
|
||||
name: Techmino_${{ needs.get-info.outputs.name }}_${{ GITHUB.RUN_NUMBER }}_${{ needs.get-info.outputs.commit }}_Android
|
||||
path: Techmino_Snapshot.apk
|
||||
|
||||
build-android-mini:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
with:
|
||||
commit: ${{ needs.get-info.outputs.commit }}
|
||||
type: snapshot
|
||||
- name: remove media
|
||||
run: |
|
||||
rm -rf media/music media/effect media/vocal
|
||||
- uses: ./.github/actions/build-android
|
||||
with:
|
||||
type: Snapshot
|
||||
apkCode: ${{ needs.get-info.outputs.apkCode }}
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
file-path: Techmino_Snapshot_Mini.apk
|
||||
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
|
||||
KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
|
||||
ALIAS: ${{ secrets.ALIAS }}
|
||||
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_${{ needs.get-info.outputs.name }}_${{ GITHUB.RUN_NUMBER }}_${{ needs.get-info.outputs.commit }}_Android_Mini
|
||||
path: Techmino_Snapshot_Mini.apk
|
||||
|
||||
build-macOS:
|
||||
runs-on: macos-10.15
|
||||
@@ -157,4 +185,19 @@ jobs:
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_${{ needs.get-info.outputs.name }}_${{ GITHUB.RUN_NUMBER }}_${{ needs.get-info.outputs.commit }}_iOS
|
||||
path: "Techmino.ipa"
|
||||
path: Techmino.ipa
|
||||
|
||||
build-love:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-love
|
||||
with:
|
||||
file-path: Techmino.love
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino_${{ needs.get-info.outputs.name }}_${{ GITHUB.RUN_NUMBER }}_${{ needs.get-info.outputs.commit }}_Love
|
||||
path: Techmino.love
|
||||
|
||||
364
.github/workflows/release.yml
vendored
364
.github/workflows/release.yml
vendored
@@ -3,7 +3,7 @@ name: Techmino Release CI
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
- "v*"
|
||||
|
||||
jobs:
|
||||
get-info:
|
||||
@@ -14,218 +14,224 @@ jobs:
|
||||
code: ${{ steps.actual-get-info.outputs.code }}
|
||||
release: ${{ steps.actual-get-info.outputs.release }}
|
||||
updateTitle: ${{ steps.actual-get-info.outputs.updateTitle }}
|
||||
updateNote: ${{ steps.actual-get-info.outputs.updateNote }}
|
||||
commit: ${{ steps.actual-get-info.outputs.commit }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install lua
|
||||
run: |
|
||||
sudo apt-get install lua5.3 -y
|
||||
- name: Get Version
|
||||
id: actual-get-info
|
||||
run: |
|
||||
echo "::set-output name=name::$(lua .github/workflows/getVersion.lua -name)"
|
||||
echo "::set-output name=apkCode::$(lua .github/workflows/getVersion.lua -apkCode)"
|
||||
echo "::set-output name=code::$(lua .github/workflows/getVersion.lua -code)"
|
||||
echo "::set-output name=release::$(lua .github/workflows/getVersion.lua -release)"
|
||||
echo "::set-output name=updateTitle::$(lua .github/workflows/getVersion.lua -updateTitle)"
|
||||
echo "::set-output name=commit::$(git rev-parse --short ${{ GITHUB.SHA }})"
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install lua
|
||||
run: |
|
||||
sudo apt-get install lua5.3 -y
|
||||
- name: Get Version
|
||||
id: actual-get-info
|
||||
run: |
|
||||
UPDATE_NOTE=$(lua .github/workflows/getVersion.lua -updateNote)
|
||||
UPDATE_NOTE="${UPDATE_NOTE//'%'/'%25'}"
|
||||
UPDATE_NOTE="${UPDATE_NOTE//$'\n'/'%0A'}"
|
||||
UPDATE_NOTE="${UPDATE_NOTE//$'\r'/'%0D'}"
|
||||
echo "::set-output name=name::$(lua .github/workflows/getVersion.lua -name)"
|
||||
echo "::set-output name=apkCode::$(lua .github/workflows/getVersion.lua -apkCode)"
|
||||
echo "::set-output name=code::$(lua .github/workflows/getVersion.lua -code)"
|
||||
echo "::set-output name=release::$(lua .github/workflows/getVersion.lua -release)"
|
||||
echo "::set-output name=updateTitle::$(lua .github/workflows/getVersion.lua -updateTitle)"
|
||||
echo "::set-output name=updateNote::$UPDATE_NOTE"
|
||||
echo "::set-output name=commit::$(git rev-parse --short ${{ GITHUB.SHA }})"
|
||||
|
||||
build-windows-x64:
|
||||
runs-on: windows-latest
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-windows
|
||||
with:
|
||||
love-url: https://github.com/love2d/love/releases/download/11.3/love-11.3-win64.zip
|
||||
love-dir: love-11.3-win64
|
||||
arch: win64
|
||||
version: ${{ needs.get-info.outputs.release }}
|
||||
icon: .\.github\build\Windows\icon.ico
|
||||
- name: Pack Techmino
|
||||
run: 7z a -tzip .\Techmino.a${{ needs.get-info.outputs.release }}.Win64.zip .\love
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino.a${{ needs.get-info.outputs.release }}.Win64.zip
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-windows
|
||||
with:
|
||||
love-url: https://github.com/love2d/love/releases/download/11.3/love-11.3-win64.zip
|
||||
love-dir: love-11.3-win64
|
||||
arch: win64
|
||||
version: ${{ needs.get-info.outputs.release }}
|
||||
icon: .\.github\build\Windows\icon.ico
|
||||
- name: Pack Techmino
|
||||
run: 7z a -tzip .\Techmino_a${{ needs.get-info.outputs.release }}_Win64.zip .\love
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino_a${{ needs.get-info.outputs.release }}_Win64.zip
|
||||
- name: Upload artifact to server
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
|
||||
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}
|
||||
ARTIFACT_TYPE: release
|
||||
ARTIFACT_PLATFORM: Win64
|
||||
ARTIFACT_NAME: Techmino_a${{ needs.get-info.outputs.release }}_Win64.zip
|
||||
|
||||
build-windows-x86:
|
||||
runs-on: windows-latest
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-windows
|
||||
with:
|
||||
love-url: https://github.com/love2d/love/releases/download/11.3/love-11.3-win32.zip
|
||||
love-dir: love-11.3-win32
|
||||
arch: win32
|
||||
version: ${{ needs.get-info.outputs.release }}
|
||||
icon: .\.github\build\Windows\icon.ico
|
||||
- name: Pack Techmino
|
||||
run: 7z a -tzip .\Techmino.a${{ needs.get-info.outputs.release }}.Win32.zip .\love
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino.a${{ needs.get-info.outputs.release }}.Win32.zip
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-windows
|
||||
with:
|
||||
love-url: https://github.com/love2d/love/releases/download/11.3/love-11.3-win32.zip
|
||||
love-dir: love-11.3-win32
|
||||
arch: win32
|
||||
version: ${{ needs.get-info.outputs.release }}
|
||||
icon: .\.github\build\Windows\icon.ico
|
||||
- name: Pack Techmino
|
||||
run: 7z a -tzip .\Techmino_a${{ needs.get-info.outputs.release }}_Win32.zip .\love
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino_a${{ needs.get-info.outputs.release }}_Win32.zip
|
||||
- name: Upload artifact to server
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
|
||||
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}
|
||||
ARTIFACT_TYPE: release
|
||||
ARTIFACT_PLATFORM: Win32
|
||||
ARTIFACT_NAME: Techmino_a${{ needs.get-info.outputs.release }}_Win32.zip
|
||||
|
||||
build-linux:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-linux
|
||||
with:
|
||||
file-path: Techmino.a${{ needs.get-info.outputs.release }}.AppImage
|
||||
icon: .github/build/Linux/icon.png
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino.a${{ needs.get-info.outputs.release }}.AppImage
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-linux
|
||||
with:
|
||||
file-path: Techmino_a${{ needs.get-info.outputs.release }}_Linux.AppImage
|
||||
icon: .github/build/Linux/icon.png
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino_a${{ needs.get-info.outputs.release }}_Linux.AppImage
|
||||
- name: Upload artifact to server
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
|
||||
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}
|
||||
ARTIFACT_TYPE: release
|
||||
ARTIFACT_PLATFORM: Linux
|
||||
ARTIFACT_NAME: Techmino_a${{ needs.get-info.outputs.release }}_Linux.AppImage
|
||||
|
||||
build-android:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-android
|
||||
with:
|
||||
type: Release
|
||||
apkCode: ${{ needs.get-info.outputs.apkCode }}
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
file-path: Techmino.a${{ needs.get-info.outputs.release }}.apk
|
||||
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
|
||||
KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
|
||||
ALIAS: ${{ secrets.ALIAS }}
|
||||
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino.a${{ needs.get-info.outputs.release }}.apk
|
||||
|
||||
build-android-mini:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- name: remove media
|
||||
run: |
|
||||
rm -rf media/music media/effect media/vocal
|
||||
- uses: ./.github/actions/build-android
|
||||
with:
|
||||
type: Release
|
||||
apkCode: ${{ needs.get-info.outputs.apkCode }}
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
file-path: Techmino.a${{ needs.get-info.outputs.release }}.mini.apk
|
||||
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
|
||||
KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
|
||||
ALIAS: ${{ secrets.ALIAS }}
|
||||
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino.a${{ needs.get-info.outputs.release }}.mini.apk
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-android
|
||||
with:
|
||||
type: Release
|
||||
apkCode: ${{ needs.get-info.outputs.apkCode }}
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
file-path: Techmino_a${{ needs.get-info.outputs.release }}_Android.apk
|
||||
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
|
||||
KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
|
||||
ALIAS: ${{ secrets.ALIAS }}
|
||||
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino_a${{ needs.get-info.outputs.release }}_Android.apk
|
||||
- name: Upload artifact to server
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
|
||||
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}
|
||||
ARTIFACT_TYPE: release
|
||||
ARTIFACT_PLATFORM: Android
|
||||
ARTIFACT_NAME: Techmino_a${{ needs.get-info.outputs.release }}_Android.apk
|
||||
|
||||
build-macOS:
|
||||
runs-on: macos-10.15
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-macos
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
icon: .github/build/macOS/icon.icns
|
||||
APPLE_API_ID: '${{ secrets.APPLE_API_ID }}'
|
||||
APPLE_API_ISSUER: '${{ secrets.APPLE_API_ISSUER }}'
|
||||
APPLE_API_KEY: '${{ secrets.APPLE_API_KEY }}'
|
||||
APPLE_APP_IDENTIFIER: '${{ secrets.APPLE_APP_IDENTIFIER }}'
|
||||
APPLE_KEYCHAIN_NAME: '${{ secrets.APPLE_KEYCHAIN_NAME }}'
|
||||
APPLE_KEYCHAIN_PWD: '${{ secrets.APPLE_KEYCHAIN_PWD }}'
|
||||
FASTLANE_MATCH_PWD: '${{ secrets.FASTLANE_MATCH_PWD }}'
|
||||
FASTLANE_MATCH_TOKEN: '${{ secrets.FASTLANE_MATCH_TOKEN }}'
|
||||
- name: Pack Techmino
|
||||
run: |
|
||||
mv Techmino.dmg Techmino.a${{ needs.get-info.outputs.release }}.macOS.dmg
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino.a${{ needs.get-info.outputs.release }}.macOS.zip
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-macos
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
icon: .github/build/macOS/icon.icns
|
||||
APPLE_API_ID: "${{ secrets.APPLE_API_ID }}"
|
||||
APPLE_API_ISSUER: "${{ secrets.APPLE_API_ISSUER }}"
|
||||
APPLE_API_KEY: "${{ secrets.APPLE_API_KEY }}"
|
||||
APPLE_APP_IDENTIFIER: "${{ secrets.APPLE_APP_IDENTIFIER }}"
|
||||
APPLE_KEYCHAIN_NAME: "${{ secrets.APPLE_KEYCHAIN_NAME }}"
|
||||
APPLE_KEYCHAIN_PWD: "${{ secrets.APPLE_KEYCHAIN_PWD }}"
|
||||
FASTLANE_MATCH_PWD: "${{ secrets.FASTLANE_MATCH_PWD }}"
|
||||
FASTLANE_MATCH_TOKEN: "${{ secrets.FASTLANE_MATCH_TOKEN }}"
|
||||
- name: Pack Techmino
|
||||
run: |
|
||||
mv Techmino.dmg Techmino_a${{ needs.get-info.outputs.release }}_MacOS.dmg
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino_a${{ needs.get-info.outputs.release }}_MacOS.dmg
|
||||
- name: Upload artifact to server
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
|
||||
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}
|
||||
ARTIFACT_TYPE: release
|
||||
ARTIFACT_PLATFORM: MacOS
|
||||
ARTIFACT_NAME: Techmino_a${{ needs.get-info.outputs.release }}_MacOS.dmg
|
||||
|
||||
build-iOS:
|
||||
runs-on: macos-latest
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-ios
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
type: 'release'
|
||||
APPLE_API_ID: '${{ secrets.APPLE_API_ID }}'
|
||||
APPLE_API_ISSUER: '${{ secrets.APPLE_API_ISSUER }}'
|
||||
APPLE_API_KEY: '${{ secrets.APPLE_API_KEY }}'
|
||||
APPLE_APP_BUILD: '${{ needs.get-info.outputs.code }}.0.${{ github.run_number }}.${{ github.run_attempt }}'
|
||||
APPLE_APP_CHANGELOG: '${{ github.event.commits[0].message }}'
|
||||
APPLE_APP_ID: '${{ secrets.APPLE_APP_ID }}'
|
||||
APPLE_APP_IDENTIFIER: '${{ secrets.APPLE_APP_IDENTIFIER }}'
|
||||
APPLE_APP_PROFILE: '${{ secrets.APPLE_APP_PROFILE }}'
|
||||
APPLE_KEYCHAIN_NAME: '${{ secrets.APPLE_KEYCHAIN_NAME }}'
|
||||
APPLE_KEYCHAIN_PWD: '${{ secrets.APPLE_KEYCHAIN_PWD }}'
|
||||
FASTLANE_ACTION_ID: '${{ github.run_id }}'
|
||||
FASTLANE_DISCORD_WEBHOOK: '${{ secrets.FASTLANE_DISCORD_WEBHOOK }}'
|
||||
FASTLANE_MATCH_PWD: '${{ secrets.FASTLANE_MATCH_PWD }}'
|
||||
FASTLANE_MATCH_TOKEN: '${{ secrets.FASTLANE_MATCH_TOKEN }}'
|
||||
- name: Rename ipa
|
||||
shell: bash
|
||||
run: |
|
||||
mv Techmino.ipa Techmino.a${{ needs.get-info.outputs.release }}.ipa
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino.a${{ needs.get-info.outputs.release }}.ipa
|
||||
|
||||
build-love:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-love
|
||||
with:
|
||||
file-path: Techmino.a${{ needs.get-info.outputs.release }}.love
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino.a${{ needs.get-info.outputs.release }}.love
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./.github/actions/update-version
|
||||
- uses: ./.github/actions/build-ios
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.name }}
|
||||
type: "release"
|
||||
APPLE_API_ID: "${{ secrets.APPLE_API_ID }}"
|
||||
APPLE_API_ISSUER: "${{ secrets.APPLE_API_ISSUER }}"
|
||||
APPLE_API_KEY: "${{ secrets.APPLE_API_KEY }}"
|
||||
APPLE_APP_BUILD: "${{ needs.get-info.outputs.code }}.0.${{ github.run_number }}.${{ github.run_attempt }}"
|
||||
APPLE_APP_CHANGELOG: "${{ needs.get-info.outputs.updateNote }}"
|
||||
APPLE_APP_ID: "${{ secrets.APPLE_APP_ID }}"
|
||||
APPLE_APP_IDENTIFIER: "${{ secrets.APPLE_APP_IDENTIFIER }}"
|
||||
APPLE_APP_PROFILE: "${{ secrets.APPLE_APP_PROFILE }}"
|
||||
APPLE_KEYCHAIN_NAME: "${{ secrets.APPLE_KEYCHAIN_NAME }}"
|
||||
APPLE_KEYCHAIN_PWD: "${{ secrets.APPLE_KEYCHAIN_PWD }}"
|
||||
FASTLANE_ACTION_ID: "${{ github.run_id }}"
|
||||
FASTLANE_DISCORD_WEBHOOK: "${{ secrets.FASTLANE_DISCORD_WEBHOOK }}"
|
||||
FASTLANE_MATCH_PWD: "${{ secrets.FASTLANE_MATCH_PWD }}"
|
||||
FASTLANE_MATCH_TOKEN: "${{ secrets.FASTLANE_MATCH_TOKEN }}"
|
||||
- name: Rename ipa
|
||||
shell: bash
|
||||
run: |
|
||||
mv Techmino.ipa Techmino_a${{ needs.get-info.outputs.release }}_iOS.ipa
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
files: Techmino_a${{ needs.get-info.outputs.release }}_iOS.ipa
|
||||
- name: Upload artifact to server
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
|
||||
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}
|
||||
ARTIFACT_TYPE: release
|
||||
ARTIFACT_PLATFORM: iOS
|
||||
ARTIFACT_NAME: Techmino_a${{ needs.get-info.outputs.release }}_iOS.ipa
|
||||
|
||||
Add-Release-note:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install lua
|
||||
run: |
|
||||
sudo apt-get update -y
|
||||
sudo apt-get upgrade -y
|
||||
sudo apt-get install lua5.3 -y
|
||||
- name: Get ReleaseNote
|
||||
run: |
|
||||
lua .github/workflows/getVersion.lua -updateNote > updateNote.txt
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
body_path: updateNote.txt
|
||||
- uses: actions/checkout@v2
|
||||
- name: Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
name: ${{ needs.get-info.outputs.updateTitle }}
|
||||
body: ${{ needs.get-info.outputs.updateNote }}
|
||||
|
||||
65
.github/workflows/test.yml
vendored
65
.github/workflows/test.yml
vendored
@@ -47,8 +47,21 @@ jobs:
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino.pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}.Windows
|
||||
name: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Windows
|
||||
path: love
|
||||
- name: Pack Techmino
|
||||
run: 7z a -tzip .\Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Windows.zip .\love
|
||||
- name: Upload artifact to server
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
|
||||
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}
|
||||
ARTIFACT_TYPE: test
|
||||
ARTIFACT_PLATFORM: Windows
|
||||
ARTIFACT_NAME: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Windows.zip
|
||||
# - name: Upload artifact to server
|
||||
# run: |
|
||||
# curl --user "${{ secrets.WEBDAV_USERNAME }}:${{ secrets.WEBDAV_PASSWORD }}" -T Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Windows.zip http://mc.yuhao7370.top:5212/dav/Techmino%20Snapshots/ -v
|
||||
|
||||
build-linux:
|
||||
runs-on: ubuntu-20.04
|
||||
@@ -65,8 +78,18 @@ jobs:
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino.pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}.Linux
|
||||
name: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Linux
|
||||
path: Techmino.AppImage
|
||||
- name: Pack Techmino
|
||||
run: mv Techmino.AppImage Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Linux.AppImage
|
||||
- name: Upload artifact to server
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
|
||||
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}
|
||||
ARTIFACT_TYPE: test
|
||||
ARTIFACT_PLATFORM: Linux
|
||||
ARTIFACT_NAME: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Linux.AppImage
|
||||
|
||||
build-android:
|
||||
runs-on: ubuntu-20.04
|
||||
@@ -90,8 +113,18 @@ jobs:
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino.pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}.Android
|
||||
name: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Android
|
||||
path: Techmino_Snapshot.apk
|
||||
- name: Pack Techmino
|
||||
run: mv Techmino_Snapshot.apk Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Android.apk
|
||||
- name: Upload artifact to server
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
|
||||
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}
|
||||
ARTIFACT_TYPE: test
|
||||
ARTIFACT_PLATFORM: Android
|
||||
ARTIFACT_NAME: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Android.apk
|
||||
|
||||
build-macOS:
|
||||
runs-on: macos-10.15
|
||||
@@ -117,8 +150,18 @@ jobs:
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino.pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}.macOS
|
||||
name: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_MacOS
|
||||
path: Techmino.dmg
|
||||
- name: Pack Techmino
|
||||
run: mv Techmino.dmg Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_MacOS.dmg
|
||||
- name: Upload artifact to server
|
||||
uses: ./.github/actions/upload-artifact
|
||||
with:
|
||||
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
|
||||
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}
|
||||
ARTIFACT_TYPE: test
|
||||
ARTIFACT_PLATFORM: MacOS
|
||||
ARTIFACT_NAME: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_MacOS.dmg
|
||||
|
||||
build-iOS:
|
||||
runs-on: macos-latest
|
||||
@@ -150,5 +193,15 @@ jobs:
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Techmino.pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}.iOS
|
||||
path: "Techmino.ipa"
|
||||
name: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_iOS
|
||||
path: Techmino.ipa
|
||||
- name: Pack Techmino
|
||||
run: mv Techmino.ipa Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_iOS.ipa
|
||||
- name: Upload artifact to server
|
||||
uses: ./.github/actions/upload-artifacts
|
||||
with:
|
||||
WEBDAV_USERNAME: ${{ secrets.WEBDAV_USERNAME }}
|
||||
WEBDAV_PASSWORD: ${{ secrets.WEBDAV_PASSWORD }}
|
||||
ARTIFACT_TYPE: test
|
||||
ARTIFACT_PLATFORM: iOS
|
||||
ARTIFACT_NAME: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_iOS.ipa
|
||||
|
||||
@@ -1,63 +1,80 @@
|
||||
local abs=math.abs
|
||||
local function hsv(h,s,v,a)
|
||||
if s<=0 then return v,v,v end
|
||||
h=h*6
|
||||
local c=v*s
|
||||
local x=abs((h-1)%2-1)*c
|
||||
if h<1 then return v,x+v-c,v-c,a
|
||||
elseif h<2 then return x+v-c,v,v-c,a
|
||||
elseif h<3 then return v-c,v,x+v-c,a
|
||||
elseif h<4 then return v-c,x+v-c,v,a
|
||||
elseif h<5 then return x+v-c,v-c,v,a
|
||||
else return v,v-c,x+v-c,a
|
||||
end
|
||||
end
|
||||
|
||||
local COLOR={
|
||||
red= {.92, .12, .12},
|
||||
fire= {.92, 0.4, .12},
|
||||
orange= {.92, 0.6, .12},
|
||||
yellow= {.92, .92, .12},
|
||||
lime= {0.7, .92, .12},
|
||||
jade= {0.5, .92, .12},
|
||||
green= {.12, .92, .12},
|
||||
aqua= {.12, .92, 0.6},
|
||||
cyan= {.12, .92, .92},
|
||||
navy= {.12, 0.7, .92},
|
||||
sea= {.12, 0.4, .92},
|
||||
blue= {0.2, 0.2, .92},
|
||||
violet= {0.4, .12, .92},
|
||||
purple= {0.7, .12, .92},
|
||||
magenta= {.92, .12, .92},
|
||||
wine= {.92, .12, 0.5},
|
||||
hsv=hsv,
|
||||
|
||||
lRed= {.95, 0.5, 0.5},
|
||||
lFire= {.95, 0.7, 0.5},
|
||||
lOrange= {.95, 0.8, 0.3},
|
||||
lYellow= {.95, .95, 0.5},
|
||||
lLime= {0.8, .95, 0.4},
|
||||
lJade= {0.6, .95, 0.4},
|
||||
lGreen= {0.5, .95, 0.5},
|
||||
lAqua= {0.4, .95, 0.7},
|
||||
lCyan= {0.5, .95, .95},
|
||||
lNavy= {0.4, .85, .95},
|
||||
lSea= {0.5, 0.7, .95},
|
||||
lBlue= {0.7, 0.7, .95},
|
||||
lViolet= {0.7, 0.4, .95},
|
||||
lPurple= {0.8, 0.4, .95},
|
||||
lMagenta={.95, 0.5, .95},
|
||||
lWine= {.95, 0.4, 0.7},
|
||||
red= {hsv(0, .85,.85)},
|
||||
fire= {hsv(0.0625,.85,.85)},
|
||||
orange= {hsv(0.125, .85,.85)},
|
||||
yellow= {hsv(0.1875,.85,.85)},
|
||||
lime= {hsv(0.25, .85,.85)},
|
||||
jade= {hsv(0.3125,.85,.85)},
|
||||
green= {hsv(0.375, .85,.85)},
|
||||
aqua= {hsv(0.4375,.85,.85)},
|
||||
cyan= {hsv(0.5, .85,.85)},
|
||||
navy= {hsv(0.5625,.85,.85)},
|
||||
sea= {hsv(0.625, .85,.85)},
|
||||
blue= {hsv(0.6875,.85,.85)},
|
||||
violet= {hsv(0.75, .85,.85)},
|
||||
purple= {hsv(0.8125,.85,.85)},
|
||||
magenta= {hsv(0.875, .85,.85)},
|
||||
wine= {hsv(0.9375,.85,.85)},
|
||||
|
||||
dRed= {0.6, .08, .08},
|
||||
dFire= {0.6, 0.3, .08},
|
||||
dOrange= {0.6, 0.4, .08},
|
||||
dYellow= {0.6, 0.6, .08},
|
||||
dLime= {0.5, 0.6, .08},
|
||||
dJade= {0.3, 0.6, .08},
|
||||
dGreen= {.08, 0.6, .08},
|
||||
dAqua= {.08, 0.6, 0.4},
|
||||
dCyan= {.08, 0.6, 0.6},
|
||||
dNavy= {.08, 0.4, 0.6},
|
||||
dSea= {.08, 0.2, 0.6},
|
||||
dBlue= {0.1, 0.1, 0.6},
|
||||
dViolet= {0.2, .08, 0.6},
|
||||
dPurple= {0.4, .08, 0.6},
|
||||
dMagenta={0.6, .08, 0.6},
|
||||
dWine= {0.6, .08, 0.3},
|
||||
lRed= {hsv(0, .5,.95)},
|
||||
lFire= {hsv(0.0625,.5,.95)},
|
||||
lOrange= {hsv(0.125, .5,.95)},
|
||||
lYellow= {hsv(0.1875,.5,.95)},
|
||||
lLime= {hsv(0.25, .5,.95)},
|
||||
lJade= {hsv(0.3125,.5,.95)},
|
||||
lGreen= {hsv(0.375, .5,.95)},
|
||||
lAqua= {hsv(0.4375,.5,.95)},
|
||||
lCyan= {hsv(0.5, .5,.95)},
|
||||
lNavy= {hsv(0.5625,.5,.95)},
|
||||
lSea= {hsv(0.625, .5,.95)},
|
||||
lBlue= {hsv(0.6875,.5,.95)},
|
||||
lViolet= {hsv(0.75, .5,.95)},
|
||||
lPurple= {hsv(0.8125,.5,.95)},
|
||||
lMagenta={hsv(0.875, .5,.95)},
|
||||
lWine= {hsv(0.9375,.5,.95)},
|
||||
|
||||
black= {.05, .05, .05},
|
||||
dGray= {0.3, 0.3, 0.3},
|
||||
gray= {0.6, 0.6, 0.6},
|
||||
lGray= {0.8, 0.8, 0.8},
|
||||
white= {.97, .97, .97},
|
||||
dRed= {hsv(0, .9,.5)},
|
||||
dFire= {hsv(0.0625,.9,.5)},
|
||||
dOrange= {hsv(0.125, .9,.5)},
|
||||
dYellow= {hsv(0.1875,.9,.5)},
|
||||
dLime= {hsv(0.25, .9,.5)},
|
||||
dJade= {hsv(0.3125,.9,.5)},
|
||||
dGreen= {hsv(0.375, .9,.5)},
|
||||
dAqua= {hsv(0.4375,.9,.5)},
|
||||
dCyan= {hsv(0.5, .9,.5)},
|
||||
dNavy= {hsv(0.5625,.9,.5)},
|
||||
dSea= {hsv(0.625, .9,.5)},
|
||||
dBlue= {hsv(0.6875,.9,.5)},
|
||||
dViolet= {hsv(0.75, .9,.5)},
|
||||
dPurple= {hsv(0.8125,.9,.5)},
|
||||
dMagenta={hsv(0.875, .9,.5)},
|
||||
dWine= {hsv(0.9375,.9,.5)},
|
||||
|
||||
black= {hsv(0,0,.05)},
|
||||
dGray= {hsv(0,0,0.3)},
|
||||
gray= {hsv(0,0,0.6)},
|
||||
lGray= {hsv(0,0,0.8)},
|
||||
white= {hsv(0,0,.97)},
|
||||
}
|
||||
for k,v in next,{
|
||||
R='red', F='fire', O='orange', Y='yellow', L='lime', J='jade', G='green', A='aqua', C='cyan', N='navy', S='sea', B='blue', V='violet', P='purple', M='magenta', W='wine',
|
||||
R='red', F='fire', O='orange', Y='yellow', L='lime', J='jade', G='green', A='aqua', C='cyan', N='navy', S='sea', B='blue', V='violet', P='purple', M='magenta', W='wine',
|
||||
lR='lRed',lF='lFire',lO='lOrange',lY='lYellow',lL='lLime',lJ='lJade',lG='lGreen',lA='lAqua',lC='lCyan',lN='lNavy',lS='lSea',lB='lBlue',lV='lViolet',lP='lPurple',lM='lMagenta',lW='lWine',
|
||||
dR='dRed',dF='dFire',dO='dOrange',dY='dYellow',dL='dLime',dJ='dJade',dG='dGreen',dA='dAqua',dC='dCyan',dN='dNavy',dS='dSea',dB='dBlue',dV='dViolet',dP='dPurple',dM='dMagenta',dW='dWine',
|
||||
D='black',dH='dGray',H='gray',lH='lGray',Z='white',
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
local TEST={}
|
||||
|
||||
--Wait for the scene swapping animation to finish
|
||||
function TEST.switchSCN()
|
||||
function TEST.yieldUntilNextScene()
|
||||
while SCN.swapping do YIELD()end
|
||||
end
|
||||
|
||||
function TEST.wait(frames)
|
||||
function TEST.yieldN(frames)
|
||||
for _=1,frames do YIELD()end
|
||||
end
|
||||
|
||||
|
||||
@@ -435,7 +435,7 @@ end
|
||||
function switch:press()
|
||||
self.code()
|
||||
if self.sound then
|
||||
SFX.play('move')
|
||||
SFX.play('touch')
|
||||
end
|
||||
end
|
||||
function WIDGET.newSwitch(D)--name,x,y[,lim][,fText][,color][,font=30][,sound=true][,disp],code[,hideF][,hide]
|
||||
@@ -1431,7 +1431,7 @@ function WIDGET.textinput(texts)
|
||||
if W and W.type=='inputBox'then
|
||||
if(not W.regex or texts:match(W.regex))and(not W.limit or #(WIDGET.sel.value..texts)<=W.limit)then
|
||||
WIDGET.sel.value=WIDGET.sel.value..texts
|
||||
SFX.play('move')
|
||||
SFX.play('touch')
|
||||
else
|
||||
SFX.play('finesseError',.3)
|
||||
end
|
||||
|
||||
@@ -24,6 +24,9 @@ The Apple logo, "Apple Inc.," iOS, iPadOS, macOS, iPhone, and Mac are registered
|
||||
Alibaba Sans is copyrighted by Alibaba Group Holding Limited. Alibaba is a trademark of Alibaba Group Holding Limited in the People’s Republic of China and other countries or regions.
|
||||
|
||||
|
||||
IBM Plex is copyrighted by the International Business Machines Corporation. IBM and IBM Plex are trademarks of IBM Corp, registered in many jurisdictions worldwide. IBM Plex is licensed under the SIL Open Font License.
|
||||
|
||||
|
||||
JetBrains Mono is copyrighted by the JetBrains Mono Project authors. JetBrains Mono is a trademark of JetBrains s.r.o. JetBrains Mono is licensed under the SIL Open Font License, Version 1.1.
|
||||
|
||||
|
||||
|
||||
61
main.lua
61
main.lua
@@ -143,8 +143,8 @@ Z.setOnFnKeys({
|
||||
function()
|
||||
if GAME.playing and not GAME.net then
|
||||
for _=1,8 do
|
||||
local P=PLY_ALIVE[math.random(#PLY_ALIVE)]
|
||||
if P and P~=PLAYERS[1]then
|
||||
if #PLY_ALIVE>1 then
|
||||
local P=PLY_ALIVE[math.random(2,#PLY_ALIVE)]
|
||||
P.lastRecv=PLAYERS[1]
|
||||
P:lose()
|
||||
end
|
||||
@@ -153,7 +153,7 @@ Z.setOnFnKeys({
|
||||
end,
|
||||
function()print(WIDGET.getSelected()or"no widget selected")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,
|
||||
})
|
||||
do--Z.setOnFocus
|
||||
local function task_autoSoundOff()
|
||||
@@ -222,7 +222,7 @@ if missionData then
|
||||
DATA.pasteMission(missionData)
|
||||
end
|
||||
local customData=FILE.load('conf/customEnv')
|
||||
if customData and customData.version==VERSION.code then
|
||||
if customData and customData['version']==VERSION.code then
|
||||
TABLE.complete(customData,CUSTOMENV)
|
||||
end
|
||||
TABLE.complete(require"parts.customEnv0",CUSTOMENV)
|
||||
@@ -325,6 +325,7 @@ LANG.init('zh',
|
||||
{
|
||||
zh=require'parts.language.lang_zh',
|
||||
zh_full=require'parts.language.lang_zh_full',
|
||||
zh_trad=require'parts.language.lang_zh_trad',
|
||||
en=require'parts.language.lang_en',
|
||||
fr=require'parts.language.lang_fr',
|
||||
es=require'parts.language.lang_es',
|
||||
@@ -334,7 +335,7 @@ LANG.init('zh',
|
||||
symbol=require'parts.language.lang_symbol',
|
||||
--1. Add language file to LANG folder;
|
||||
--2. Require it;
|
||||
--3. Add a button in parts/scenes/setting_lang.lua;
|
||||
--3. Add a button in parts/scenes/lang.lua;
|
||||
},
|
||||
{
|
||||
block=BLOCK_NAMES
|
||||
@@ -460,16 +461,28 @@ do
|
||||
fs.remove('record/stack_100l.rec')
|
||||
end
|
||||
if STAT.version~=VERSION.code then
|
||||
for k,v in next,MODE_UPDATE_MAP do
|
||||
if RANKS[k]then
|
||||
RANKS[v]=RANKS[k]
|
||||
RANKS[k]=nil
|
||||
end
|
||||
k='record/'..k
|
||||
if fs.getInfo(k..'.dat')then
|
||||
fs.write('record/'..v..'.rec',fs.read(k..'.dat'))
|
||||
fs.remove(k..'.dat')
|
||||
end
|
||||
if fs.getInfo(k..'.rec')then
|
||||
fs.write('record/'..v..'.rec',fs.read(k..'.rec'))
|
||||
fs.remove(k..'.rec')
|
||||
end
|
||||
end
|
||||
STAT.version=VERSION.code
|
||||
needSave=true
|
||||
love.event.quit('restart')
|
||||
end
|
||||
SETTING.appLock=nil
|
||||
SETTING.dataSaving=nil
|
||||
SETTING.swap=nil
|
||||
SETTING.appLock,SETTING.dataSaving,SETTING.swap=nil
|
||||
if not SETTING.VKSkin then SETTING.VKSkin=1 end
|
||||
for _,v in next,SETTING.skin do if v<1 or v>17 then v=17 end end
|
||||
if SETTING.RS=='ZRS'or SETTING.RS=='BRS'or SETTING.RS=='ASCplus'or SETTING.RS=='C2sym'then SETTING.RS='TRS'end
|
||||
if not RSlist[SETTING.RS]then SETTING.RS='TRS'end
|
||||
if SETTING.ghostType=='greyCell'then SETTING.ghostType='grayCell'end
|
||||
if type(SETTING.skinSet)=='number'then SETTING.skinSet='crystal_scf'end
|
||||
if not TABLE.find({8,10,13,17,22,29,37,47,62,80,100},SETTING.frameMul)then SETTING.frameMul=100 end
|
||||
@@ -505,26 +518,11 @@ do
|
||||
needSave=true
|
||||
end
|
||||
|
||||
for k,v in next,MODE_UPDATE_MAP do
|
||||
if RANKS[k]then
|
||||
RANKS[v]=RANKS[k]
|
||||
RANKS[k]=nil
|
||||
end
|
||||
k='record/'..k
|
||||
if fs.getInfo(k..'.dat')then
|
||||
fs.write('record/'..v..'.rec',fs.read(k..'.dat'))
|
||||
fs.remove(k..'.dat')
|
||||
end
|
||||
if fs.getInfo(k..'.rec')then
|
||||
fs.write('record/'..v..'.rec',fs.read(k..'.rec'))
|
||||
fs.remove(k..'.rec')
|
||||
end
|
||||
end
|
||||
|
||||
if needSave then
|
||||
saveStats()
|
||||
saveProgress()
|
||||
saveSettings()
|
||||
love.event.quit('restart')
|
||||
end
|
||||
end
|
||||
|
||||
@@ -588,6 +586,7 @@ table.insert(_LOADTIMELIST_,("Initialize Data: %.3fs"):format(TIME()-_LOADTIME_)
|
||||
|
||||
for i=1,#_LOADTIMELIST_ do LOG(_LOADTIMELIST_[i])end
|
||||
|
||||
--Launch testing task if launch param received
|
||||
if TABLE.find(arg,'--test')then
|
||||
TASK.new(function()
|
||||
while not LOADED do YIELD()end
|
||||
@@ -595,19 +594,19 @@ if TABLE.find(arg,'--test')then
|
||||
LOG("\27[92m\27[1mAutomatic Test Started\27[0m")
|
||||
BGM.setVol(0)SFX.setVol(0)
|
||||
love.keypressed('space')
|
||||
TEST.switchSCN()
|
||||
TEST.yieldUntilNextScene()
|
||||
|
||||
for k,mode in next,MODES do
|
||||
if k~='netBattle'then
|
||||
LOG("Scanning mode: "..mode.name)
|
||||
loadGame(mode.name,true)
|
||||
TEST.switchSCN()
|
||||
TEST.yieldUntilNextScene()
|
||||
SCN.back()
|
||||
TEST.switchSCN()
|
||||
TEST.yieldUntilNextScene()
|
||||
end
|
||||
end
|
||||
LOG("\27[92m\27[1mAutomatic Test Passed :)\27[0m")
|
||||
TEST.wait(60)
|
||||
TEST.yieldN(60)
|
||||
love.event.quit(0)
|
||||
end)
|
||||
TASK.new(function()
|
||||
@@ -616,7 +615,7 @@ if TABLE.find(arg,'--test')then
|
||||
if ERRDATA[1]then break end
|
||||
end
|
||||
LOG("\27[91m\27[1mAutomatic Test Failed :(\27[0m\nThe error message is:\n"..table.concat(ERRDATA[1].mes,"\n").."\27[91m\nAborting\27[0m")
|
||||
TEST.wait(60)
|
||||
TEST.yieldN(60)
|
||||
love.event.quit(1)
|
||||
end)
|
||||
end
|
||||
|
||||
BIN
media/music/1989.ogg
Normal file
BIN
media/music/1989.ogg
Normal file
Binary file not shown.
@@ -61,7 +61,7 @@ function back.draw()
|
||||
gc.setColor(wingColor[i])
|
||||
local B=crystals[i]
|
||||
gc.draw(crystal_img,B.x,B.y,B.a,k,k,21,0)
|
||||
B=crystals[17-i]
|
||||
B=crystals[8+i]
|
||||
gc.draw(crystal_img,B.x,B.y,B.a,-k,k,21,0)
|
||||
end
|
||||
end
|
||||
|
||||
56
parts/eventsets/marathon_inf.lua
Normal file
56
parts/eventsets/marathon_inf.lua
Normal file
@@ -0,0 +1,56 @@
|
||||
local dropSpeed={
|
||||
50,42,35,30,25,20,16,13,11,10,
|
||||
9,8,7,6,5,5,4,4,3,3,
|
||||
3,2,2,2,2,1,1,1,1,1,
|
||||
.5,.5,.5,.5,.25,.25,.25,.125,.125,--Total 39 numbers, switch to 20G when reach 400 lines
|
||||
}
|
||||
local lockDelay={
|
||||
57,54,51,48,46,44,42,40,38,36,
|
||||
34,32,30,28,26,25,24,23,22,21,
|
||||
20,20,19,19,18,18,17,17,16,16,
|
||||
15,15,14,14,13,13,13,12,12,12,
|
||||
11,11,11,11,11,10,10,10,10,10,
|
||||
9,9,9,9,9,9,8,8,8,8,
|
||||
8,8,8,8,7,7,7,7,7,7,
|
||||
7,7,6,6,6,6,6,6,6,6,
|
||||
5,5,5,5,5,5,5,5,5,5,
|
||||
4,4,4,4,4,4,4,4,4,4,
|
||||
3,3,3,3,3,3,3,3,3,3,
|
||||
2,2,2,2,2,2,2,2,2,2,
|
||||
1,1,1,1,1,1,1,1,1,--Finish at 1700
|
||||
}
|
||||
|
||||
return
|
||||
{
|
||||
drop=60,lock=60,
|
||||
wait=8,fall=20,
|
||||
mesDisp=function(P)
|
||||
PLY.draw.drawProgress(P.stat.row,P.modeData.target)
|
||||
end,
|
||||
task=function(P)
|
||||
P.modeData.target=10
|
||||
end,
|
||||
dropPiece=function(P)
|
||||
if P.stat.row>=P.modeData.target then
|
||||
if P.modeData.target%300==0 then
|
||||
P.gameEnv.wait=P.gameEnv.wait-1
|
||||
end
|
||||
if P.modeData.target%100==0 then
|
||||
P.gameEnv.fall=P.gameEnv.fall-1
|
||||
end
|
||||
if P.modeData.target<400 then
|
||||
P.gameEnv.drop=dropSpeed[P.modeData.target/10]
|
||||
elseif P.modeData.target==400 then
|
||||
P:set20G(true)
|
||||
elseif P.modeData.target<1700 then
|
||||
P.gameEnv.lock=lockDelay[(P.modeData.target-400)/10]
|
||||
else
|
||||
P.stat.row=1700
|
||||
P:win('finish')
|
||||
return
|
||||
end
|
||||
P.modeData.target=P.modeData.target+10
|
||||
SFX.play('reach')
|
||||
end
|
||||
end
|
||||
}
|
||||
@@ -5,6 +5,7 @@ return{
|
||||
setFont(60)
|
||||
mStr(P.stat.row,63,280)
|
||||
mText(TEXTOBJ.line,63,350)
|
||||
PLY.draw.drawMarkLine(P,20,.3,1,1,TIME()%.42<.21 and .95 or .6)
|
||||
end,
|
||||
dropPiece=function(P)
|
||||
if #P.field>20 then
|
||||
|
||||
@@ -5,6 +5,7 @@ return{
|
||||
setFont(60)
|
||||
mStr(P.stat.row,63,280)
|
||||
mText(TEXTOBJ.line,63,350)
|
||||
PLY.draw.drawMarkLine(P,18,.3,1,1,TIME()%.42<.21 and .95 or .6)
|
||||
end,
|
||||
dropPiece=function(P)
|
||||
if #P.field>20 then
|
||||
|
||||
@@ -5,6 +5,7 @@ return{
|
||||
setFont(60)
|
||||
mStr(P.stat.row,63,280)
|
||||
mText(TEXTOBJ.line,63,350)
|
||||
PLY.draw.drawMarkLine(P,17,.3,1,1,TIME()%.42<.21 and .95 or .6)
|
||||
end,
|
||||
dropPiece=function(P)
|
||||
if #P.field>20 then
|
||||
|
||||
Binary file not shown.
@@ -55,6 +55,32 @@ return{
|
||||
"https://tetris.huijiwiki.com",
|
||||
},
|
||||
|
||||
--Organizations
|
||||
{"Github Repository",
|
||||
"githubrepository sourcecode",
|
||||
"org",
|
||||
"Techmino's Github repository. Stars are appreciated.",
|
||||
"https://github.com/26F-Studio/Techmino",
|
||||
},
|
||||
{"Communities",
|
||||
"community communities",
|
||||
"org",
|
||||
"Join Tetris communities and talk with other players!\n\nChina: [QQ] Tetris Research: 112897780\nGlobal: [Discord] Hard Drop: discord.gg/harddrop (click \"Open URL\").",
|
||||
"https://discord.gg/harddrop"
|
||||
},
|
||||
{"Mew",
|
||||
"mew tieba forum",
|
||||
"org",
|
||||
"The Mew forum owned by Chinese Tetris Research Community, and was founded in the second half of 2021. Mew is a Chinese social media that can be thought of a combination of Discord and Reddit, with many channels in a big community. Users can chat in the channels or submit posts to the channel. Mew also has a function called \"Library\" which allows storing documentations systematically. The Tetris Mew forum is currently under construction and not too much contents are available (2/Nov/2021).",
|
||||
"https://mew.fun/n/tetris",
|
||||
},
|
||||
{"Tetris OL Servers",
|
||||
"tetrisonline servers",
|
||||
"org",
|
||||
"Google \"Tetris Online Poland\" for the Poland server.\nClick \"Open URL\" for information about the Tetris Online Study server.",
|
||||
"http://teatube.ltd/tos",
|
||||
},
|
||||
|
||||
--Games
|
||||
{"TTT",
|
||||
"ttt tetris trainer tres bien",
|
||||
@@ -141,7 +167,7 @@ return{
|
||||
{"Tetris Mind Bender",
|
||||
"tetris online official gem",
|
||||
"game",
|
||||
"Another Tetris game from tetris.com. It introduced “Mind Bender” minoes on the basis of marathon mode. Clearing a line with a Mind Bender mino will give you either a good or bad effect.",
|
||||
"Another Tetris game from tetris.com. It introduced \"Mind Bender\" minoes on the basis of marathon mode. Clearing a line with a Mind Bender mino will give you either a good or bad effect.",
|
||||
},
|
||||
|
||||
{"TGM",
|
||||
@@ -410,6 +436,11 @@ return{
|
||||
"term",
|
||||
"Systems that determine how the pieces rotate.\n\nIn modern Tetris games, tetrominoes can rotate on a specfic rotation center (but this may be absent in some games). If the minoes overlap with the walls or the field, the system would attempt to perform some offsets (a process known as \"wall-kicking\"). Wall kicks allow minoes to move into in specific-shaped holes.",
|
||||
},
|
||||
{"Orientation",
|
||||
"orientation direction 0r2l 02 20 rl lr",
|
||||
"term",
|
||||
"In SRS and SRS-like rotation systems, there are standard notations describing the orientations of the minoes:\n 0 for Original orientation; R for right, or 90° clockwise; L for left, or 90° counterclockwise; 2 for spin twice (180°). For example, 0→L means rotating counterclockwise from original orientation (0) to L; 0→R means rotating clockwise from original orientation (0) to R; 2→R means rotating counterclockwise from 2 (180°) to R.",
|
||||
},
|
||||
{"ARS",
|
||||
"ars arikrotationsystem atarirotationsystem",
|
||||
"term",
|
||||
@@ -484,7 +515,7 @@ return{
|
||||
{"Tetrominos' Shapes",
|
||||
"shape structure form tetromino tetrimino",
|
||||
"term",
|
||||
"In standard Tetris games, all the blocks used are tetrominoes (spelt as \"Tetrimino\" in official games), i.e. Blocks that are linked by four minoes side-by-side.\n\nThere are seven kinds of tetrominoes in total when allowing rotations and disallowing reflections. These tetrominoes are named by the letter in the alphabet that they resemble. They are Z, S, J, L, T, O, and I.",
|
||||
"In standard Tetris games, all the blocks used are tetrominoes, i.e. Blocks that are linked by four minoes side-by-side.\n\nThere are seven kinds of tetrominoes in total when allowing rotations and disallowing reflections. These tetrominoes are named by the letter in the alphabet that they resemble. They are Z, S, J, L, T, O, and I.",
|
||||
},
|
||||
{"Tetrominos' Colors",
|
||||
"colour hue tint tetromino tetrimino",
|
||||
@@ -521,6 +552,11 @@ return{
|
||||
"term",
|
||||
"Like *hold*, swap your current piece and the first piece of next queue. You can also only perform this once per piece in most cases.",
|
||||
},
|
||||
{"Deepdrop",
|
||||
"deepdrop shenjiang",
|
||||
"term",
|
||||
"*Techmino exclusive*\n\nA special function that allows minoes to teleport through the wall to enter a hole. When the mino hits the bottom, pressing the soft drop button again will enable the deep drop. if there is a hole that fits the shape of the mino, it will teleport into this hole immediately/nThis mechanism is especially useful for AI because it allows AI to disregard the differences between different rotation systems.",
|
||||
},
|
||||
{"Misdrop",
|
||||
"md misdrop",
|
||||
"term",
|
||||
@@ -942,32 +978,6 @@ return{
|
||||
"Stacking TST(s) on top of a STSD.",
|
||||
},
|
||||
|
||||
--Other
|
||||
{"Github Repository",
|
||||
"githubrepository sourcecode",
|
||||
"other",
|
||||
"Techmino's Github repository. Stars are appreciated.",
|
||||
"https://github.com/26F-Studio/Techmino",
|
||||
},
|
||||
{"Communities",
|
||||
"community communities",
|
||||
"other",
|
||||
"Join Tetris communities and talk with other players!\n\nChina: [QQ] Tetris Research: 112897780\nGlobal: [Discord] Hard Drop: discord.gg/harddrop (click \"Open URL\").",
|
||||
"https://discord.gg/harddrop"
|
||||
},
|
||||
{"Mew",
|
||||
"mew tieba forum",
|
||||
"help",
|
||||
"The Mew forum owned by Chinese Tetris Research Community, and was founded in the second half of 2021. Mew is a Chinese social media that can be thought of a combination of Discord and Reddit, with many channels in a big community. Users can chat in the channels or submit posts to the channel. Mew also has a function called \"Library\" which allows storing documentations systematically. The Tetris Mew forum is currently under construction and not too much contents are available (2/Nov/2021).",
|
||||
"https://mew.fun/n/tetris",
|
||||
},
|
||||
{"Tetris OL Servers",
|
||||
"tetrisonline servers",
|
||||
"other",
|
||||
"Google \"Tetris Online Poland\" for the Poland server.\nClick \"Open URL\" for information about the Tetris Online Study server.",
|
||||
"http://teatube.ltd/tos",
|
||||
},
|
||||
|
||||
--Savedata managing
|
||||
{"Console",
|
||||
"console cmd commamd minglinghang kongzhitai",
|
||||
@@ -1066,7 +1076,7 @@ return{
|
||||
{"Furea",
|
||||
"furea fuleiya jk",
|
||||
"name",
|
||||
"(ふれあ)\n\nOne of the top players.\nWorld record holder of Puyo Puyo Tetris's Sprint mode and Ultra mode.",
|
||||
"(ふれあ)\n\nOne of the top players.\nWorld record holder of Puyo Puyo Tetris's Ultra mode.",
|
||||
},
|
||||
{"Iljain",
|
||||
"iljain yijianlian",
|
||||
@@ -1116,10 +1126,10 @@ return{
|
||||
{"TetroDictionary",
|
||||
"zictionary tetrodictionary littlez",
|
||||
"name",
|
||||
"(or Zictionary for short) The name of this thing.\nUsed to be a chatbot that serves for the same function, and mostly uses the same list of keywords.",
|
||||
"(or Zictionary for short) The name of this dictionary!\nIt includes brief introductions on many common terms in Tetris.\nIt used to be a chatbot in our QQ group, which was used to answer new player's FAQs. The entries in the Tetrodictionary were also inherited from the database in the chatbot.",
|
||||
},
|
||||
{"MrZ",
|
||||
"mrz 626",
|
||||
"mrz_26",
|
||||
"name",
|
||||
"Tetris Research community member, the author of Techmino.\nPersonal bests: Sprint 25.95 seconds, MPH Sprint 57 seconds, #8 on Jstris leaderboards, X rank on TETR.IO, cleared TGM3 (World rule, Shirase gold 1300).",
|
||||
"https://space.bilibili.com/225238922",
|
||||
@@ -1193,7 +1203,7 @@ return{
|
||||
{"他天一",
|
||||
"tty tatianyi hydrofierus",
|
||||
"name",
|
||||
"(Tā Tiān Yī)\n\nTetris Research community member.\nPersonal bests: Sprint 22.72 seconds, U rank on Tetr.io.\nOne of the top players of Tetris in China.",
|
||||
"(Tā Tiān Yī)\n\nTetris Research community member.\nPersonal bests: Sprint 21.908 seconds, U rank on Tetr.io.\nOne of the top players of Tetris in China.",
|
||||
"https://space.bilibili.com/3895759",
|
||||
},
|
||||
{"Mars608",
|
||||
@@ -1205,7 +1215,7 @@ return{
|
||||
{"Mifu",
|
||||
"mifu swl nanmaomao",
|
||||
"name",
|
||||
"Originally known as swl.\nPersonal bests: Sprint 32 seconds, Tetris Research community member.\nMiya's Tetris coach. Miya made an animated character art for him called Mifu, meaning \"Miya's Shifu\".",
|
||||
"Originally known as swl.\nPersonal bests: Sprint 28.445 seconds, Tetris Research community member.\nMiya's Tetris coach. Miya made an animated character art for him called Mifu, meaning \"Miya's Shifu\".",
|
||||
"https://space.bilibili.com/109356367",
|
||||
},
|
||||
{"ZXC",
|
||||
@@ -1247,7 +1257,7 @@ return{
|
||||
{"琳雨空",
|
||||
"linyukong",
|
||||
"name",
|
||||
"(Lín Yǔ Kong)\n\nTetris Research community member.\nSprint 38.3 seconds, S Rank in pentomino mode and Blind-WTF (world No.1)",
|
||||
"(Lín Yǔ Kong)\n\nTetris Research community member.\nSprint 38.3 seconds, Highest Rank in pentomino mode and Blind-WTF (world No.1)",
|
||||
"https://space.bilibili.com/263909369",
|
||||
},
|
||||
{"子心Koishi",
|
||||
@@ -1256,12 +1266,12 @@ return{
|
||||
"(Zǐ Xīn Koishi)\n\nTetris Research community member, Virtual content creator.\nA top Tetris 99 players known for his strategies.",
|
||||
"https://space.bilibili.com/147529",
|
||||
},
|
||||
{"ditoly",
|
||||
"ditoly icrem kuimei jk",
|
||||
"name",
|
||||
"Tetris Research community member. The developer of Nanamino.",
|
||||
"https://space.bilibili.com/13014410",
|
||||
},
|
||||
{"ditoly",
|
||||
"ditoly icrem kuimei jk",
|
||||
"name",
|
||||
"Tetris Research community member. The developer of Nanamino.",
|
||||
"https://space.bilibili.com/13014410",
|
||||
},
|
||||
{"蓝绿",
|
||||
"lanlv lanlyu gompyn imple lee blari'o blariho",
|
||||
"name",
|
||||
|
||||
@@ -4,7 +4,7 @@ return{
|
||||
{"新人须知",
|
||||
"新人须知 xinren new noob readme",
|
||||
"help",
|
||||
"致想深入玩下去的新人:\n\n\t两大根本原则:\n\t\t1. 选手感好的版本(Techmino/Tetr.io/Jstris/TOP/Tetr.js),别用编程练习渣版本\n\t\t2. 踏实打好基础(预判next稳定消四等),别总想着炫酷T旋,对未来发展没好处。\n\t两大主要技巧:\n\t\t1. 熟悉初始位置以及到各个位置的初始操作;\n\t\t2. 提前计算好下一块能放哪。\n\n推荐阅读专栏《给TOP新人的几点建议》\n\n[点击右下角按钮打开链接]",
|
||||
"致想深入玩下去的新人:\n\n\t两大根本原则:\n\t\t1. 选手感好的版本(Tech/Tetr.io/Jstris/TOP/Tetr.js),别用编程练习渣版本\n\t\t2. 踏实打好基础(预判next稳定消四等),别总想着炫酷T旋,对未来发展没好处。\n\t两大主要技巧:\n\t\t1. 熟悉初始位置以及到各个位置的初始操作;\n\t\t2. 提前计算好下一块能放哪。\n\n推荐阅读专栏《给TOP新人的几点建议》\n\n[点击右下角按钮打开链接]",
|
||||
"https://bilibili.com/read/cv2352939",
|
||||
},
|
||||
{"关于T-spin学习",
|
||||
@@ -49,6 +49,31 @@ return{
|
||||
"https://four.lol",
|
||||
},
|
||||
|
||||
--相关组织
|
||||
{"GitHub仓库",
|
||||
"源代码 github git sourcecode yuandaima",
|
||||
"org",
|
||||
"Techmino的GitHub仓库地址,欢迎Star",
|
||||
"https://github.com/26F-Studio/Techmino",
|
||||
},
|
||||
{"研究群",
|
||||
"研究群 yanjiu study",
|
||||
"org",
|
||||
"俄罗斯方块·[研究]群QQ号112897780,“中国俄罗斯方块总群”",
|
||||
},
|
||||
{"Mew据点",
|
||||
"mew tieba forum",
|
||||
"org",
|
||||
"研究群下属的mew据点(类似贴吧或者discord的服务器),2021年下半年建立,是discord和贴吧的结合体,可以在同一个大社区的各个频道实时聊天,也可以发帖以主题交流,同时还有一个叫图书馆的功能方便各种方块资料整理(还在建设中,目前没多少内容,2021.11,2)",
|
||||
"https://mew.fun/n/tetris",
|
||||
},
|
||||
{"茶服",
|
||||
"茶服 chafu study",
|
||||
"org",
|
||||
"TO-S的添加方法、说明等关于茶服的一切",
|
||||
"http://teatube.ltd/tos",
|
||||
},
|
||||
|
||||
--游戏(题库)
|
||||
{"TTT",
|
||||
"教程 ttt trainer tres bien",
|
||||
@@ -410,6 +435,11 @@ return{
|
||||
"term",
|
||||
"现代方块游戏中,方块可以绕着旋转中心(在本游戏中可见)旋转(部分游戏没有固定中心),如果旋转后和场地或墙壁有重合,会根据<从哪个方向转到哪个方向>进行一些偏移测试(这个偏移称为踢墙),不会卡住转不动,同时也可以让方块钻进入一些特定形状的洞",
|
||||
},
|
||||
{"方块朝向",
|
||||
"旋转 朝向 xuanzhuan chaoxiang orientation direction 0r2l 02 20 rl lr",
|
||||
"term",
|
||||
"在SRS或者类SRS的旋转系统中需要说明方块朝向的时候,“朝下”“竖着”等词描述太模糊。\nSRS中每种方块的初始状态固定,所以我们使用0(原位)、R(右,即顺时针转一次)、2(转两下,即180°)、L(左,即逆时针转一次)四个字符表示方块的四种状态,从原位(0)开始顺时针转一圈四个状态是0R2L。\n最早见于SRS踢墙表的行首,0→L表示原位逆时针转一次到L状态,0→R表示原位顺时针转一次到R状态,2→R代表从180°状态逆时针转一次到R状态。",
|
||||
},
|
||||
{"ARS",
|
||||
"旋转系统 ars rotate",
|
||||
"term",
|
||||
@@ -495,32 +525,32 @@ return{
|
||||
{"现代方块",
|
||||
"现代方块 modern xiandaikuai",
|
||||
"term",
|
||||
"现代方块是一个模糊的概念,这里列出一部分“标准”规则,满足大部分的都可以认为是现代方块:\n1.可见场地大小是10×20,不过上方空间也是存在的,上限可以自己定,一些游戏用的是40\n2.七种方块从顶部正中间出现(奇数宽方块偏左,高度可以是方块底部或顶部贴着场地顶),同一种方块的朝向(一般是平的面朝下)和颜色都一致\n3.一个合适的随机出块机制(常见的详见Bag7词条和His词条)\n4.一个合适的的旋转系统(至少有双旋,详见双旋词条)(比如SRS,详见SRS词条)\n5.一个合适的锁定延迟系统,详见锁定延迟词条\n6.一个合适的死亡判定,详见死亡判定词条\n7.有Next系统(一般是3~6个),详见Next词条,并且方向和出现时候的方向一致\n8.有Hold系统,详见Hold词条\n9.如果有出块延迟和消行延迟,那么需要有提前旋转/Hold系统,详见IRS和IHS词条,IMS是本游戏特有\n10.有DAS系统负责精密并且快速的左右移动,详见DAS词条",
|
||||
"现代方块是一个模糊的概念,这里列出一部分“标准”规则,满足大部分的都可以认为是现代方块:\n1.可见场地大小是10×20,不过上方空间也是存在的,上限可以自己定,一些游戏用的是40\n2.七种方块从顶部正中间出现(奇数宽方块偏左,高度可以是方块底部或顶部贴着场地顶),同一种方块的朝向(一般是平的面朝下)和颜色都一致\n3.一个合适的随机出块机制(常见的详见Bag7词条和His词条)\n4.一个合适的的旋转系统(至少有双旋,详见双旋词条)(最好是SRS或类SRS,详见SRS词条)\n5.一个合适的锁定延迟系统,详见锁定延迟词条\n6.一个合适的死亡判定,详见死亡判定词条\n7.有Next功能(一般是3~6个),详见Next词条,并且方向和出现时候的方向一致\n8.有Hold功能,详见Hold词条\n9.有DAS系统负责精密并且快速的左右移动,详见DAS词条\n10.如果有出块延迟和消行延迟,那么需要有提前旋转/Hold系统,详见IRS和IHS词条,IMS是本游戏特有",
|
||||
},
|
||||
{"方块形状",
|
||||
"形状 xingzhuang shape tetrimino",
|
||||
"形状 xingzhuang shape tetromino tetrimino",
|
||||
"term",
|
||||
"在标准的方块游戏中,用到的方块是所有的“四连块”,即四个正方形通过共用边连接成的形状。\n在不允许翻转,只允许旋转的情况下,四连块一共有七种,根据它们的形状一般分别叫做Z、S、J、L、T、O、I。",
|
||||
"在标准的方块游戏中,用到的方块是所有的“四连块”,即四个正方形共用边连接成的形状。\n在不允许翻转,只允许旋转的情况下,四连块一共有七种,根据它们的形状一般分别叫做Z、S、J、L、T、O、I。",
|
||||
},
|
||||
{"方块颜色",
|
||||
"颜色 yanse color colour",
|
||||
"颜色 yanse color colour tetromino tetrimino",
|
||||
"term",
|
||||
"主流方块游戏中七种块的颜色会使用同一套彩虹配色:\nZ:红 S:绿 J:蓝 L:橙 T:紫 O:黄 I:青\n\nTechmino默认也使用这一套“标准”配色。",
|
||||
},
|
||||
{"IRS",
|
||||
"提前 irs initialrotatesystem",
|
||||
"term",
|
||||
"Initial Rotation System\n提前旋转系统,提前按下旋转后方块出现就是转好的形状,有时可以避免死亡。",
|
||||
"Initial Rotation System\n提前旋转系统,方块出现前提前按下旋转后,出现时就是转好的形状,有时可以避免死亡。",
|
||||
},
|
||||
{"IHS",
|
||||
"提前 ihs initialholdsystem",
|
||||
"term",
|
||||
"Initial Hold System\n提前Hold系统,提前按下hold后直接出现hold里的方块,有时可以避免死亡。",
|
||||
"Initial Hold System\n提前Hold系统,方块出现前提前按下hold后,直接出现hold里的方块,有时可以避免死亡。",
|
||||
},
|
||||
{"IMS",
|
||||
"提前 ims initialmovesystem",
|
||||
"term",
|
||||
"Initial Move System\n提前移动系统,提前按下移动后方块出现在移动好的位置,有时可以避免死亡(Techmino限定)。",
|
||||
"Initial Move System\n提前移动系统,方块出现前提前按住移动后,出现时会朝移动方向偏一格,有时可以避免死亡(Techmino限定)。",
|
||||
},
|
||||
{"Next",
|
||||
"预览 下一个 next yulan xiayige",
|
||||
@@ -537,6 +567,11 @@ return{
|
||||
"term",
|
||||
"交换功能,Hold的另一种表现形式,将手里的方块和Next槽中的第一个交换,一般同样不能连续使用。",
|
||||
},
|
||||
{"Deepdrop",
|
||||
"深降 deepdrop shenjiang",
|
||||
"term",
|
||||
"开启后当方块触底时,再次按下软降会让方块尝试向下穿墙寻找放得下的地方,如果有就会直接瞬移到那\n该功能更偏向用于技术研究,对于ai来说有了它可以完全不用再考虑旋转系统,形状能容得下的地方一定都能到达",
|
||||
},
|
||||
{"Misdrop",
|
||||
"误 md misdrop",
|
||||
"term",
|
||||
@@ -745,7 +780,7 @@ return{
|
||||
{"Hypertap",
|
||||
"超连点 hypertap",
|
||||
"term",
|
||||
"快速震动手指,实现比长按更快速+灵活的高速单点移动,主要在经典块的高难度下(因为das不可调而且特别慢,高速下很容易md导致失败,此时手动连点就比自动移动更快)或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人称为“Hypertapper”tapper。",
|
||||
"快速震动手指,实现比长按更快速+灵活的高速单点移动,主要在经典块的高难度下(因为das不可调而且特别慢,高速下很容易md导致失败,此时手动连点就比自动移动更快)或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人称为“Hypertapper”。",
|
||||
},
|
||||
{"TOP攻击表",
|
||||
"攻击表 top attack",
|
||||
@@ -760,7 +795,7 @@ return{
|
||||
{"C2序列",
|
||||
"c2序列 seq",
|
||||
"term",
|
||||
"七个块初始权重0\n全体除以2再加0~1的随机数,选数字最大的块出,然后将其权重除以3.5,循环",--Discovered by zxc
|
||||
"(七个块初始权重设为0)\n要取块的时候,\n先把七个数都除以2然后加上0~1的随机数\n最大的数字是第几个的就出对应的块,然后将其权重除以3.5\n循环",--Discovered by zxc
|
||||
},
|
||||
{"C2踢墙",
|
||||
"c2踢墙 kick",
|
||||
@@ -973,31 +1008,6 @@ return{
|
||||
"在STSD上叠若干个T3的形状。",
|
||||
},
|
||||
|
||||
--其他
|
||||
{"GitHub仓库",
|
||||
"源代码 github git sourcecode yuandaima",
|
||||
"other",
|
||||
"Techmino的GitHub仓库地址,欢迎Star",
|
||||
"https://github.com/26F-Studio/Techmino",
|
||||
},
|
||||
{"研究群",
|
||||
"研究群 yanjiu study",
|
||||
"other",
|
||||
"俄罗斯方块·[研究]群QQ号112897780,“中国俄罗斯方块总群”",
|
||||
},
|
||||
{"Mew据点",
|
||||
"mew tieba forum",
|
||||
"help",
|
||||
"研究群下属的mew据点(类似贴吧或者discord的服务器),2021年下半年建立,是discord和贴吧的结合体,可以在同一个大社区的各个频道实时聊天,也可以发帖以主题交流,同时还有一个叫图书馆的功能方便各种方块资料整理(还在建设中,目前没多少内容,2021.11,2)",
|
||||
"https://mew.fun/n/tetris",
|
||||
},
|
||||
{"茶服",
|
||||
"茶服 chafu study",
|
||||
"other",
|
||||
"TO-S的添加方法、说明等关于茶服的一切",
|
||||
"http://teatube.ltd/tos",
|
||||
},
|
||||
|
||||
--存档管理
|
||||
{"控制台",
|
||||
"console cmd commamd minglinghang kongzhitai",
|
||||
@@ -1101,12 +1111,12 @@ return{
|
||||
{"Furea",
|
||||
"furea fuleiya jk",
|
||||
"name",
|
||||
"一流玩家,PPT的40L和Ultra的WR保持者。",
|
||||
"一流玩家,PPT的Ultra的WR保持者。",
|
||||
},
|
||||
{"Iljain",
|
||||
"iljain yijianlian",
|
||||
"name",
|
||||
"一流玩家,得过C2 Rank1,",
|
||||
"一流玩家,得过C2 Rank1。",
|
||||
},
|
||||
{"Jonas",
|
||||
"jonas",
|
||||
@@ -1147,10 +1157,10 @@ return{
|
||||
{"小Z",
|
||||
"小Z xiaoz zictionary tetrodictionary littlez",
|
||||
"name",
|
||||
"这个词典的名字!曾经是群里的答疑机器人,此词典数据库开始也是沿用的机器人问答库~",
|
||||
"这个词典的名字!\n收录了各种常见术语的简单介绍和一些常用问题的回答,不是那种很详细的百科全书哦~\n曾经是群里的答疑机器人,主要用于方便地给新人答疑解惑,词典的数据开始也是沿用的机器人问答库",
|
||||
},
|
||||
{"MrZ",
|
||||
"mrz zjiang ddd 026 t626",
|
||||
"mrz zjiang t026 t626",
|
||||
"name",
|
||||
"【研究群】「T026」\n40L 25.95s,MPH40L 57s排世界第8(Jstris),TETR.IO段位X,TGM3(W)Shirase金1300通关。\n这个游戏的作者!",
|
||||
"https://space.bilibili.com/225238922",
|
||||
@@ -1225,7 +1235,7 @@ return{
|
||||
{"他天一",
|
||||
"他天一 tty tatianyi hydrofierus t512",
|
||||
"name",
|
||||
"【研究群】「T512」\n其他名称:Hydrofierus\n40L 22.72s,io段位X\nC2/SRS对战水平国内一流\n常用定式:tki 开局pc",
|
||||
"【研究群】「T512」\n其他名称:Hydrofierus\n40L 21.908s,io段位X\nC2/SRS对战水平国内一流\n常用定式:tki 开局pc",
|
||||
"https://space.bilibili.com/3895759",
|
||||
},
|
||||
{"Mars608",
|
||||
@@ -1237,7 +1247,7 @@ return{
|
||||
{"Mifu",
|
||||
"mifu swl nanmaomao t616",
|
||||
"name",
|
||||
"【研究群】「T616」\n40L 32s\nvup,miya的哥哥",
|
||||
"【研究群】「T616」\n40L 28.445s\nvup,miya的哥哥",
|
||||
"https://space.bilibili.com/109356367",
|
||||
},
|
||||
{"ZXC",
|
||||
@@ -1285,7 +1295,7 @@ return{
|
||||
{"琳雨空",
|
||||
"琳雨空 linyukong t1505",
|
||||
"name",
|
||||
"【研究群】「T1505」\n40L 38.3s,五连块S,黑屏隐形S(世界首位)",
|
||||
"【研究群】「T1505」\n40L 38.3s,五连块最高评级,黑屏隐形最高评级(世界首位)",
|
||||
"https://space.bilibili.com/263909369",
|
||||
},
|
||||
{"子心",
|
||||
|
||||
@@ -752,10 +752,12 @@ return{
|
||||
['backfire_l']= {"Backfire", "LUNATIC", "Hold back the backfiring garbage lines"},
|
||||
['backfire_u']= {"Backfire", "ULTIMATE", "Hold back the backfiring garbage lines"},
|
||||
['sprintAtk']= {"Sprint", "100 Attack", "Send 100 lines!"},
|
||||
['sprintEff']= {"Sprint", "Efficiency", "Send more attack in 40lines!"},
|
||||
['zen']= {'Zen', "200", "A 200-line run without a time limit"},
|
||||
['ultra']= {'Ultra', "EXTRA", "A 2-minute score attack"},
|
||||
['infinite']= {'infinite', "", "Just a sandbox"},
|
||||
['infinite_dig']= {"Infinite: Dig", "", "Dig-diggin'-dug"},
|
||||
['marathon_inf']= {"Marathon", "INFINITE", "Infinite marathon."},
|
||||
|
||||
['custom_clear']= {"Custom", "NORMAL"},
|
||||
['custom_puzzle']= {"Custom", "PUZZLE"},
|
||||
|
||||
@@ -710,10 +710,12 @@ return{
|
||||
['backfire_l']= {"Retorno", "Lunático", "Lidia con tus propias líneas basura."},
|
||||
['backfire_u']= {"Retorno", "Supremo", "Lidia con tus propias líneas basura."},
|
||||
['sprintAtk']= {"Sprint", "100L - Ataque", "¡Envía 100 líneas de ataque!"},
|
||||
-- ['sprintEff']= {"Sprint", "Efficiency", "Send more attack in 40lines!"},
|
||||
['zen']= {'Zen', "200L", "200 líneas sin límite de tiempo."},
|
||||
['ultra']= {'Ultra', "Extra", "¡Consigue el mayor puntaje posible en 2 minutos!"},
|
||||
['infinite']= {"Infinito", "", "Modo Sandbox."},
|
||||
['infinite_dig']= {"Infinito: Queso", "", "Limpia, limpia, más limpia que tú."},
|
||||
['marathon_inf']= {"Maratón", "Infinito", "Infinito maratón."},
|
||||
|
||||
['custom_clear']= {"Personalizado", "Normal"},
|
||||
['custom_puzzle']= {"Personalizado", "Puzzle"},
|
||||
|
||||
@@ -712,10 +712,12 @@ return{
|
||||
-- ['backfire_l']= {"Backfire", "LUNATIC", "Self-send garbages"},
|
||||
-- ['backfire_u']= {"Backfire", "ULTIMATE", "Self-send garbages"},
|
||||
-- ['sprintAtk']= {"Sprint", "100 Attack", "Send 100 lines!"},
|
||||
-- ['sprintEff']= {"Sprint", "Efficiency", "Send more attack in 40lines!"},
|
||||
['zen']= {'Zen', "200", "200 lignes sans limites de temps."},
|
||||
['ultra']= {'Ultra', "EXTRA", "2 minutes pour avoir le meilleur score."},
|
||||
['infinite']= {"Infini", "", "Mode tranquile."},
|
||||
['infinite_dig']= {"Infini : Dig", "", "Creuser, creuser, creuser."},
|
||||
['marathon_inf']= {"Marathon", "Infini", "Infini marathon."},
|
||||
|
||||
['custom_clear']= {"Perso.", "NORMAL"},
|
||||
['custom_puzzle']= {"Perso.", "PUZZLE"},
|
||||
|
||||
@@ -742,10 +742,12 @@ return{
|
||||
-- ['backfire_l']= {"Backfire", "LUNATIC", "Self-send garbages"},
|
||||
-- ['backfire_u']= {"Backfire", "ULTIMATE", "Self-send garbages"},
|
||||
-- ['sprintAtk']= {"Sprint", "100 Attack", "Send 100 lines!"},
|
||||
-- ['sprintEff']= {"Sprint", "Efficiency", "Send more attack in 40lines!"},
|
||||
['zen']= {'Zen', "200", "200 linhas sem um limite de tempo."},
|
||||
['ultra']= {'Ultra', "EXTRA", "Pegue a maior pontuação em 2 minutos."},
|
||||
['infinite']= {"Infinito", "", "Modo Sandbox."},
|
||||
['infinite_dig']= {"Infinito:Cave", "", "Cava, Cava, Cava."},
|
||||
['marathon_inf']= {"Maratona", "Infinito", "Infinito maratona."},
|
||||
|
||||
['custom_clear']= {"Custom", "NORMAL"},
|
||||
['custom_puzzle']= {"Custom", "PUZZLE"},
|
||||
|
||||
@@ -279,12 +279,14 @@ return{fallback='zh',
|
||||
['backfire_n']= {"自攻自受", "普通", "100攻击很少的,冲冲冲"},
|
||||
['backfire_h']= {"自攻自受", "困难", "你在害怕什么"},
|
||||
['backfire_l']= {"自攻自受", "疯狂", "别怂啊,打攻击呀"},
|
||||
['backfire_u']= {"自攻自受", "极限", "能把自己玩死,不会吧"},
|
||||
['backfire_u']= {"自攻自受", "极限", "怎么可能会把自己玩死"},
|
||||
['sprintAtk']= {"竞速", "100攻击", "送100行"},
|
||||
['sprintEff']= {"竞速", "效率", "会打就多打点"},
|
||||
['zen']= {"禅", "200", "不限时200行"},
|
||||
['ultra']= {"限时打分", "挑战", "2分钟刷分"},
|
||||
['infinite']= {"无尽", "", "真的有人会玩这个?"},
|
||||
['infinite_dig']= {"无尽:挖掘", "", "闲得慌就来挖"},
|
||||
['marathon_inf']= {"马拉松", "无尽", "无尽马拉松"},
|
||||
|
||||
['custom_clear']= {"自定义", "普通"},
|
||||
['custom_puzzle']= {"自定义", "拼图"},
|
||||
|
||||
@@ -600,7 +600,7 @@ return{
|
||||
registering="等待服务器响应……",
|
||||
},
|
||||
account={
|
||||
title="账户",
|
||||
title="帐户",
|
||||
},
|
||||
app_15p={
|
||||
reset="打乱",
|
||||
@@ -756,10 +756,12 @@ return{
|
||||
['backfire_l']= {"Backfire", "疯狂", "打出100攻击"},
|
||||
['backfire_u']= {"Backfire", "极限", "打出100攻击"},
|
||||
['sprintAtk']= {"竞速", "100攻击", "打出100攻击"},
|
||||
['sprintEff']= {"竞速", "效率", "40行内打出更高的攻击"},
|
||||
['zen']= {"禅", "200", "不限时200行"},
|
||||
['ultra']= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
||||
['infinite']= {"无尽", "", "沙盒"},
|
||||
['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||
['marathon_inf']= {"马拉松", "无尽", "无尽马拉松"},
|
||||
|
||||
['custom_clear']= {"自定义", "普通"},
|
||||
['custom_puzzle']= {"自定义", "拼图"},
|
||||
@@ -782,6 +784,7 @@ return{
|
||||
"《知识的力量》",
|
||||
"《主题曲进化史》",
|
||||
"↑↑↓↓←→←→BA",
|
||||
"∫u dv=uv-∫v du",
|
||||
"$include<studio.h>",
|
||||
"0next 0hold.",
|
||||
"11renPC!",
|
||||
@@ -899,7 +902,7 @@ return{
|
||||
"锟斤拷锟斤拷锟斤拷",
|
||||
"来学编程,好玩的",
|
||||
"连续pc有大量知识要背,不过背出来后随手10连pc不是问题",
|
||||
"六连块总共有…?那不重要,不会做的",
|
||||
"六连块总共有……?那不重要,不会做的",
|
||||
"论如何正确使用Unicode私用区定制字体",
|
||||
"卖弱和谦虚不是一回事,发言前三思呀",
|
||||
"卖弱禁言警告",
|
||||
@@ -942,6 +945,7 @@ return{
|
||||
"上面这个不是录像,是机器人实时在玩",
|
||||
"少女祈祷中",
|
||||
"少玩点游戏,多注意眨眼和休息",
|
||||
"深降了解一下",
|
||||
"使用固定堆叠方法达成20TSD难度很低",
|
||||
"试试用跳舞毯打块",
|
||||
"适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活",
|
||||
@@ -975,7 +979,7 @@ return{
|
||||
"物理hold了解一下",
|
||||
"希望极简率没事",
|
||||
"希望你们都能喜欢Z……哦不是,喜欢Techmino",
|
||||
"喜欢本游戏的话可以到应用商……好像没上架呢还",
|
||||
"喜欢本游戏的话可以到应用商……好像没上架呢还,不过快了就是(",
|
||||
"享受Tech的特色旋转系统!",
|
||||
"向其他人询问练习方法最好提供自己的详细水平,最好录些视频,不然很难给出合适的建议",
|
||||
"小心腱鞘炎",
|
||||
@@ -1015,7 +1019,7 @@ return{
|
||||
"作者电脑上装了11个方块",
|
||||
"作者浏览器收藏夹里有6个方块",
|
||||
"做,做碌鸠啊做,打块先啦!",
|
||||
"ALLSPIN!",
|
||||
"ALLSPIN!",
|
||||
"Am G F G",
|
||||
"B2B2B???",
|
||||
"B2B2B2B并不存在……",
|
||||
@@ -1031,7 +1035,7 @@ return{
|
||||
"e^(πi)=-1",
|
||||
"e^(πi/2)=i",
|
||||
"e^(πi/4)=(1+i)/√2",
|
||||
"Farter:“成天被夸赞'好玩'的”",
|
||||
"Farter:“成天被夸赞‘好玩’的”",
|
||||
"Farter:“可以形成方块圈子小中心话题,同作者一起衍生一些概念与梗的”",
|
||||
"Farter:“论方块的软工意义(就算这么小个范围内,各种取舍蒙混翻车现象都总会以很易懂的方式出现(”",
|
||||
"Farter:“民间微创新”",
|
||||
@@ -1051,6 +1055,7 @@ return{
|
||||
"iOS设备使用键盘控制可能会有问题,还是先只用触屏吧",
|
||||
"l-=-1",
|
||||
"Let-The-Bass-Kick!",
|
||||
"lim x→c f(x)/g(x)=lim x→c f'(x)/g'(x)",
|
||||
"MrZ是谁啊",
|
||||
"pps-0.01",
|
||||
"S△ABC=√(h(h-a)(h-b)(h-c)),h=(a+b+c)/2",
|
||||
@@ -1063,7 +1068,7 @@ return{
|
||||
"Staff名单里飘过的是赞助榜单,喜欢本游戏的话可以给我们打赞助支持开发哦~",
|
||||
"STSD必死",
|
||||
"sudo rm -rf /*",
|
||||
"Techmino = Technique + tetromino",
|
||||
"Techmino = Technique + Tetromino",
|
||||
"Techmino 好玩!",
|
||||
"Techmino 濂界帺锛",
|
||||
"Techmino 英['tɛkmɪnəʊ] 美/'tekmɪnoʊ/ n.铁壳米诺(游戏名)",
|
||||
@@ -1071,7 +1076,7 @@ return{
|
||||
"Techmino安卓下载",
|
||||
"Techmino不是工业产品也不是练手程序,是游戏作品(至少目前是,嗯……)",
|
||||
"Techmino好玩!",
|
||||
"Techmino没有抽卡没有氪金没有逼肝,良不良心~",
|
||||
"Techmino没有氪金没有逼肝,良不良心~",
|
||||
"Techmino生日不太清楚,那就定在2019.6.26吧",
|
||||
"Techmino也有节日主题了哦",
|
||||
"Techmino有一个Nspire-CX版本!",
|
||||
|
||||
@@ -170,10 +170,12 @@ return{
|
||||
['backfire_l']= {"自攻自防", "疯狂", "打出100攻击"},
|
||||
['backfire_u']= {"自攻自防", "极限", "打出100攻击"},
|
||||
['sprintAtk']= {"竞速", "100攻击", "打出100攻击"},
|
||||
['sprintEff']= {"竞速", "效率", "40行内打出更高的攻击"},
|
||||
['zen']= {"禅", "200", "不限时200行"},
|
||||
['ultra']= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"},
|
||||
['infinite']= {"无尽", "", "沙盒"},
|
||||
['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"},
|
||||
['marathon_inf']= {"马拉松", "无尽", "无尽马拉松"},
|
||||
|
||||
['custom_clear']= {"自定义", "普通"},
|
||||
['custom_puzzle']= {"自定义", "拼图"},
|
||||
|
||||
@@ -600,7 +600,7 @@ return{
|
||||
registering="等待回应...",
|
||||
},
|
||||
account={
|
||||
title="账户",
|
||||
title="帐户",
|
||||
},
|
||||
app_15p={
|
||||
reset="洗牌",
|
||||
@@ -753,10 +753,12 @@ return{
|
||||
['backfire_l']= {"适得其反", "疯子", "挡住回火的垃圾管道"},
|
||||
['backfire_u']= {"适得其反", "终极", "挡住回火的垃圾管道"},
|
||||
['sprintAtk']= {"冲刺", "100次攻击", "发送100行!"},
|
||||
['sprintEff']= {"竞速", "效率", "在40行内发动更多攻击!"},
|
||||
['zen']= {"禅宗", "200", "没有时间限制的200线跑步"},
|
||||
['ultra']= {"Ultra", "额外", "2分钟的得分进攻"},
|
||||
['infinite']= {"无限", "", "这只是一个沙箱"},
|
||||
['infinite_dig']= {"无限:挖掘", "", "挖,挖,挖"},
|
||||
['marathon_inf']= {"马拉松", "无尽", "无尽马拉松"},
|
||||
|
||||
['custom_clear']= {"习俗", "正常"} ,
|
||||
['custom_puzzle']= {"习俗", "令人费解的"},
|
||||
|
||||
769
parts/language/lang_zh_trad.lua
Normal file
769
parts/language/lang_zh_trad.lua
Normal file
@@ -0,0 +1,769 @@
|
||||
return{
|
||||
fallback='zh',
|
||||
loadText={
|
||||
loadSFX="加載音效資源",
|
||||
loadSample="加載樂器取樣",
|
||||
loadVoice="加載語音資源",
|
||||
loadFont="加載字體資源",
|
||||
loadModeIcon="加載模式圖標",
|
||||
loadMode="加載模式",
|
||||
loadOther="加載雜項",
|
||||
finish="按任意鍵繼續!",
|
||||
},
|
||||
sureQuit="再按一次退出",
|
||||
sureReset="再按一次重設",
|
||||
newDay="新的一天,新的開始~",
|
||||
playedLong="你玩太久了!注意休息!",
|
||||
playedTooMuch="今天玩得太久啦!Techmino好玩但也要注意休息哦~",
|
||||
|
||||
atkModeName={"隨機","徽章","K.O.","反擊"},
|
||||
royale_remain="剩下 $1 名玩家",
|
||||
powerUp={[0]="000%UP","025%UP","050%UP","075%UP","100%UP"},
|
||||
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
|
||||
spin="-spin",
|
||||
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
|
||||
cleared="$1 lines",
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
PC="Perfect Clear",HPC="Half Clear",
|
||||
replaying="[重播]",
|
||||
tasUsing="[TAS]",
|
||||
|
||||
stage="等級 $1 完成",
|
||||
great="Great!",
|
||||
awesome="Awesome.",
|
||||
almost="Almost!",
|
||||
continue="Continue.",
|
||||
maxspeed="最大速度",
|
||||
speedup="加速",
|
||||
missionFailed="任務外清除",
|
||||
|
||||
speedLV="速度等級",
|
||||
piece="塊數",line="行數",atk="攻擊",eff="效率",
|
||||
rpm="RPM",tsd="T2",
|
||||
grade="等級",techrash="Techrash",
|
||||
wave="波數",nextWave="下一波",
|
||||
combo="Combo",maxcmb="Max Combo",
|
||||
pc="Perfect Clear",ko="KO",
|
||||
|
||||
win="勝利",
|
||||
lose="失敗",
|
||||
|
||||
finish="完成",
|
||||
gamewin="勝利",
|
||||
gameover="遊戲結束",
|
||||
|
||||
pause="暫停",
|
||||
pauseCount="暫停計數",
|
||||
finesse_ap="All Perfect",
|
||||
finesse_fc="Full Combo",
|
||||
|
||||
page="頁面:",
|
||||
|
||||
cc_fixed="不能同時開啟CC和固定序列",
|
||||
cc_swap="不能同時開啟CC和swap的暫存模式",
|
||||
ai_prebag="不能同時開啟AI和含有非四連方塊的自定義序列",
|
||||
ai_mission="不能同時開啟AI和自定義任務",
|
||||
switchSpawnSFX="請開啟方塊生成音效",
|
||||
needRestart="重新啟動以應用所有更改",
|
||||
|
||||
copyDone="拷貝成功!",
|
||||
saveDone="保存成功!",
|
||||
saveError="保存失敗:",
|
||||
saveError_duplicate="文件名重複",
|
||||
loadError="加載錯誤:",
|
||||
exportSuccess="導出成功",
|
||||
importSuccess="導入成功",
|
||||
dataCorrupted="數據損壞",
|
||||
pasteWrongPlace="提醒:可能黏貼錯地方了",
|
||||
noFile="文件未找到",
|
||||
|
||||
nowPlaying="正在播放:",
|
||||
|
||||
VKTchW="觸摸點權重",
|
||||
VKOrgW="原始點權重",
|
||||
VKCurW="當前點權重",
|
||||
|
||||
noScore="沒有分數",
|
||||
modeLocked="尚未解鎖",
|
||||
unlockHint="上一模式達到B級以上即可解鎖",
|
||||
highScore="最高分",
|
||||
newRecord="新紀錄",
|
||||
|
||||
replayBroken="此錄影無法加載",
|
||||
|
||||
dictNote="==拷貝自小z辭典==",
|
||||
|
||||
getNoticeFail="無法獲取公告",
|
||||
oldVersion="版本 $1 現已推出",
|
||||
needUpdate="請更新遊戲!",
|
||||
versionNotMatch="版本不匹配",
|
||||
notFinished="即將推出!",
|
||||
|
||||
jsonError="JSON錯誤",
|
||||
|
||||
noUsername="請輸入用戶名",
|
||||
wrongEmail="無效的電郵地址",
|
||||
noPassword="請輸入密碼",
|
||||
diffPassword="密碼不匹配",
|
||||
registerRequestSent="已發送註冊請求",
|
||||
registerSuccessed="註冊成功!",
|
||||
loginSuccessed="登錄成功",
|
||||
accessSuccessed="身份認證成功",
|
||||
|
||||
wsConnecting="正在連接……",
|
||||
wsFailed="連接失敗",
|
||||
wsClose="連接斷開:",
|
||||
netTimeout="連接超時",
|
||||
|
||||
onlinePlayerCount="在線用戶數",
|
||||
createRoomSuccessed="房間已創建!",
|
||||
started="遊戲中",
|
||||
joinRoom="進入房間",
|
||||
leaveRoom="離開房間",
|
||||
ready="準備!",
|
||||
connStream="正在連接……",
|
||||
waitStream="等待其他用戶連接……",
|
||||
spectating="旁觀中",
|
||||
chatRemain="用戶數:",
|
||||
chatStart="------訊息開始------",
|
||||
chatHistory="------以上為歷史訊息------",
|
||||
|
||||
keySettingInstruction="點擊來設置鍵位\n按esc來取消選中\n按退格鍵來清除選中",
|
||||
|
||||
errorMsg="Techmino遇到問題,需要重新啟動。\n我們已經收集了一些錯誤信息,你可以反饋給作者。",
|
||||
tryAnotherBuild="[無效的 UTF-8] 如果你使用的是Windows作業系統,請嘗試下載Techmino-win32或Techmino-win64(與你現在使用的不同的版本)。",
|
||||
|
||||
modInstruction="選擇你想使用的Mod!\n不同的Mod會以不同的方式改變遊戲規則(可能導致遊戲異常)\n快來開發新玩法或挑戰自我吧!\n提醒:開啟Mod會使成績無效,你可以使用鍵盤開關Mod,按下shift反向",
|
||||
modInfo={
|
||||
next="Next數量:\n強制使用Next的個數",
|
||||
hold="Hold數量:\n強制使用Hold的個數",
|
||||
hideNext="隱藏Next:\n隱藏前幾個Next",
|
||||
infHold="無限Hold:\n可以無限使用Hold",
|
||||
hideBlock="隱藏方塊:\n使當前方塊不可見",
|
||||
hideGhost="隱藏陰影:\n使提示陰影不可見",
|
||||
hidden="隱形:\n鎖定後方塊將不可見",
|
||||
hideBoard="遮擋:\n遮擋部分或全部場地",
|
||||
flipBoard="翻轉:\n將場地以一定方式翻轉顯示",
|
||||
dropDelay="重力:\n強制使用下落速度(單位: 幀/格)",
|
||||
lockDelay="鎖延:\n強制使用鎖定延遲(單位:幀)",
|
||||
waitDelay="生成延遲:\n方塊生成後的等待時間(單位:幀)",
|
||||
fallDelay="清除延遲:\n清除行後的等待時間(單位:幀)",
|
||||
life="生命計數:\n修改初始生命計數",
|
||||
forceB2B="強制B2B:\n當B2B儀表低於初始線時結束遊戲",
|
||||
forceFinesse="強制finesse:\n非finesse操作將強制結束遊戲",
|
||||
tele="瞬間移動:\n強制使用0移動延遲",
|
||||
noRotation="無旋轉:\n禁用旋轉按鍵",
|
||||
noMove="無移動:\n禁用移動按鍵",
|
||||
customSeq="指定序列:\n強制使用某種序列",
|
||||
pushSpeed="漲行速度:\n改變垃圾行上升速度(單位:格/幀)",
|
||||
boneBlock="骨塊:\n使用骨塊進行遊戲",
|
||||
},
|
||||
pauseStat={
|
||||
"時間:",
|
||||
"擊鍵/旋轉/Hold:",
|
||||
"塊數:",
|
||||
"行清除/挖掘:",
|
||||
"攻擊/挖掘攻擊:",
|
||||
"上漲/接收/抵消:",
|
||||
"清除:",
|
||||
"Spin:",
|
||||
"B2B/B3B/PC/HPC:",
|
||||
"Finesse:",
|
||||
},
|
||||
radar={"DEF","OFF","ATK","SEND","SPD","DIG"},
|
||||
radarData={"D'PM","ADPM","APM","SPM","L'PM","DPM"},
|
||||
stat={
|
||||
"遊戲運行次數:",
|
||||
"遊戲計數:",
|
||||
"遊戲時長:",
|
||||
"擊鍵/旋轉/Hold:",
|
||||
"方塊/行清除/攻擊:",
|
||||
"接收/抵消/上漲:",
|
||||
"挖掘/挖掘攻擊:",
|
||||
"效率/挖掘效率:",
|
||||
"B2B/B3B:",
|
||||
"PC/HPC:",
|
||||
"多餘操作/finesse率:",
|
||||
},
|
||||
aboutTexts={
|
||||
"這只是一個普通的方塊遊戲,請勿將此與某帶國家名的事物強行聯繫",
|
||||
"從C2/IO/JS/WWC/KOS等方塊獲得過靈感",
|
||||
"",
|
||||
"使用LÖVE引擎",
|
||||
"錯誤或者建議請附帶截圖發送到內測群或者作者電郵~",
|
||||
"僅透過內測QQ群/discord伺服器進行免費下載/更新",
|
||||
"從其他渠道獲得遊戲皆有被修改/加入廣告/植入病毒的風險,程序只申請了振動&網路權限!",
|
||||
"若由於被修改的本遊戲產生的各種損失作者概不負責(我怎麼負責啊跟我有什麼關係)",
|
||||
"請從正規途徑獲得最新版,遊戲現為免費,不過有讚賞當然感謝啦~ 記得備註用戶名,方便記錄!",
|
||||
},
|
||||
staff={
|
||||
"作者:MrZ 電郵:1046101471@qq.com",
|
||||
"使用LÖVE引擎",
|
||||
"",
|
||||
"程序: MrZ,Particle_G,[scdhh,FinnTenzor]",
|
||||
"美術: MrZ,Gnyar,C₂₉H₂₅N₃O₅,ScF,[旋律星萤,T0722]",
|
||||
"音樂: MrZ,柒栎流星,ERM,Trebor,C₂₉H₂₅N₃O₅,[T0722,Aether]",
|
||||
"音效/語音: Miya,Xiaoya,Mono,MrZ,Trebor",
|
||||
"演出: 模电,HBM",
|
||||
"翻譯: User670,MattMayuga,Mizu,Mr.Faq,ScF,C₂₉H₂₅N₃O₅",
|
||||
"",
|
||||
"特別感謝:",
|
||||
"Flyz,Big_True,NOT-A-ROBOT,思竣,yuhao7370",
|
||||
"Farter,Teatube,蕴空之灵,T9972,[All test staff]",
|
||||
},
|
||||
used=[[
|
||||
使用工具:
|
||||
Beepbox
|
||||
Goldwave
|
||||
GFIE
|
||||
FL Mobile
|
||||
使用函式庫:
|
||||
Cold_Clear [MinusKelvin]
|
||||
json.lua [rxi]
|
||||
profile.lua [itraykov]
|
||||
simple-love-lights [dylhunn]
|
||||
]],
|
||||
support="支持作者",
|
||||
group="官方QQ群:913154753",
|
||||
WidgetText={
|
||||
main={
|
||||
offline="單人遊戲",
|
||||
qplay="快速開始",
|
||||
online="網路遊戲",
|
||||
custom="自定義",
|
||||
setting="設置",
|
||||
stat="統計數據",
|
||||
dict="小Z辭典",
|
||||
replays="錄影回放",
|
||||
},
|
||||
main_simple={
|
||||
sprint="40行",
|
||||
marathon="馬拉松",
|
||||
},
|
||||
mode={
|
||||
mod="Mods (F1)",
|
||||
start="開始",
|
||||
},
|
||||
mod={
|
||||
title="Mods",
|
||||
reset="重設(tab)",
|
||||
unranked="成績無效",
|
||||
},
|
||||
pause={
|
||||
setting="設置(S)",
|
||||
replay="回放(P)",
|
||||
save="保存(O)",
|
||||
resume="繼續(esc)",
|
||||
restart="重新啟動(R)",
|
||||
quit="退出(Q)",
|
||||
tas="TAS (T)",
|
||||
},
|
||||
net_menu={
|
||||
league="Tech League",
|
||||
ffa="FFA",
|
||||
rooms="房間列表",
|
||||
logout="登出",
|
||||
},
|
||||
net_league={
|
||||
match="匹配對手",
|
||||
},
|
||||
net_rooms={
|
||||
password="密碼",
|
||||
refreshing="刷新房間列表中……",
|
||||
noRoom="一個房間都沒有欸……",
|
||||
refresh="刷新",
|
||||
new="創建房間",
|
||||
join="加入",
|
||||
},
|
||||
net_newRoom={
|
||||
title="房間參數",
|
||||
roomName="房間名稱 (留空默認為 用戶名's room)",
|
||||
password="密碼",
|
||||
description="房間描述",
|
||||
|
||||
life="生命計數",
|
||||
pushSpeed="上漲速度",
|
||||
garbageSpeed="垃圾行速度",
|
||||
visible="能見度",
|
||||
freshLimit="鎖延刷新限制",
|
||||
|
||||
fieldH="場地高度",
|
||||
bufferLimit="緩衝上限",
|
||||
heightLimit="高度上限",
|
||||
|
||||
drop="下落延遲",
|
||||
lock="鎖定延遲",
|
||||
wait="方塊生成等待",
|
||||
fall="行清除延遲",
|
||||
|
||||
capacity="房間容量",
|
||||
create="創建",
|
||||
|
||||
ospin="O-spin",
|
||||
fineKill="100% finesse",
|
||||
b2bKill="強制B2B",
|
||||
easyFresh="普通刷新鎖延",
|
||||
deepDrop="深降",
|
||||
bone="骨塊",
|
||||
|
||||
eventSet="規則集",
|
||||
|
||||
holdMode="Hold模式",
|
||||
nextCount="Next",
|
||||
holdCount="Hold",
|
||||
infHold="無限Hold",
|
||||
phyHold="物理Hold",
|
||||
},
|
||||
net_game={
|
||||
ready="準備",
|
||||
spectate="觀賽",
|
||||
cancel="取消",
|
||||
},
|
||||
setting_game={
|
||||
title="遊戲設置",
|
||||
graphic="←畫面設置",
|
||||
sound="音頻設置→",
|
||||
layout="外觀",
|
||||
|
||||
ctrl="控制設置",
|
||||
key="鍵位設置",
|
||||
touch="觸控設置",
|
||||
reTime="開局等待時間",
|
||||
RS="旋轉系統",
|
||||
menuPos="菜單按鈕位置",
|
||||
sysCursor="使用系統光標",
|
||||
autoPause="失去焦點時暫停",
|
||||
autoSave="打破紀錄時自動保存",
|
||||
autoLogin="啟動時自動登錄",
|
||||
simpMode="簡潔模式",
|
||||
},
|
||||
setting_video={
|
||||
title="畫面設置",
|
||||
sound="←音頻設置",
|
||||
game="遊戲設置→",
|
||||
|
||||
block="方塊可見",
|
||||
smooth="平滑下落",
|
||||
upEdge="3D方塊",
|
||||
bagLine="包分界線",
|
||||
|
||||
ghostType="陰影樣式",
|
||||
ghost="陰影不透明度",
|
||||
center="旋轉中心不透明度",
|
||||
grid="网格不透明度",
|
||||
lineNum="行號透明度",
|
||||
|
||||
lockFX="鎖定特效",
|
||||
dropFX="下落特效",
|
||||
moveFX="移動特效",
|
||||
clearFX="清除特效",
|
||||
splashFX="噴濺特效",
|
||||
shakeFX="晃動特效",
|
||||
atkFX="攻擊特效",
|
||||
|
||||
frame="渲染幀率(%)",
|
||||
FTlock="跳幀",
|
||||
|
||||
text="清除文本",
|
||||
score="分數動畫",
|
||||
bufferWarn="緩衝預警",
|
||||
showSpike="爆發計數",
|
||||
nextPos="生成預覽",
|
||||
highCam="屏幕滾動",
|
||||
warn="死亡預警",
|
||||
|
||||
clickFX="點擊特效",
|
||||
power="電量顯示",
|
||||
clean="渲染優化",
|
||||
fullscreen="全屏幕",
|
||||
bg="背景",
|
||||
|
||||
blockSatur="方塊飽和",
|
||||
fieldSatur="場地飽和",
|
||||
},
|
||||
setting_sound={
|
||||
title="音頻設置",
|
||||
game="←遊戲設置",
|
||||
graphic="畫面設置→",
|
||||
|
||||
mainVol="主音量",
|
||||
bgm="音樂",
|
||||
sfx="音效",
|
||||
stereo="立體聲",
|
||||
spawn="方塊生成",
|
||||
warn="危險警告",
|
||||
vib="振動",
|
||||
voc="語音",
|
||||
|
||||
autoMute="失去焦點自動靜音",
|
||||
fine="finesse錯誤提示音",
|
||||
sfxPack="音效集",
|
||||
vocPack="語音集",
|
||||
apply="應用",
|
||||
},
|
||||
setting_control={
|
||||
title="控制設置",
|
||||
preview="預覽",
|
||||
|
||||
das="DAS",arr="ARR",
|
||||
dascut="DAS打斷",
|
||||
dropcut="誤硬降打斷",
|
||||
sddas="軟降DAS",sdarr="軟降ARR",
|
||||
ihs="提前Hold",
|
||||
irs="提前旋轉",
|
||||
ims="提前移動",
|
||||
reset="重設",
|
||||
},
|
||||
setting_key={
|
||||
a1="左移",
|
||||
a2="右移",
|
||||
a3="順時針旋轉",
|
||||
a4="逆時針旋轉",
|
||||
a5="180°旋轉",
|
||||
a6="硬降",
|
||||
a7="軟降",
|
||||
a8="Hold",
|
||||
a9="功能鍵1",
|
||||
a10="功能鍵2",
|
||||
a11="左瞬移",
|
||||
a12="右瞬移",
|
||||
a13="軟降到底",
|
||||
a14="軟降一格",
|
||||
a15="軟降四格",
|
||||
a16="軟降十格",
|
||||
a17="落在最左",
|
||||
a18="落在最右",
|
||||
a19="列在最左",
|
||||
a20="列在最右",
|
||||
restart="重新啟動",
|
||||
},
|
||||
setting_skin={
|
||||
skinSet="方塊皮膚",
|
||||
title="外觀設置",
|
||||
skinR="重置顏色",
|
||||
faceR="重置方向",
|
||||
},
|
||||
setting_touch={
|
||||
default="默認組合",
|
||||
snap="對齊到網格",
|
||||
size="大小",
|
||||
shape="形狀",
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1="左移:", b2="右移:", b3="順時針旋轉:", b4="逆時針旋轉:",
|
||||
b5="180°旋轉:", b6="硬降:", b7="軟降:", b8="Hold:",
|
||||
b9="功能鍵1:", b10="功能鍵2:", b11="左瞬移:", b12="右瞬移:",
|
||||
b13="軟降到底:", b14="軟降一格:", b15="軟降四格:", b16="軟降十格:",
|
||||
b17="落在最左:", b18="落在最右:", b19="列在最左:", b20="列在最右:",
|
||||
|
||||
norm="標準",
|
||||
pro="專業",
|
||||
hide="顯示虛擬擊鍵",
|
||||
icon="圖標",
|
||||
sfx="擊鍵音效",
|
||||
vib="擊鍵振動",
|
||||
alpha="不透明度",
|
||||
|
||||
track="擊鍵自動追蹤",
|
||||
dodge="自動避讓",
|
||||
},
|
||||
customGame={
|
||||
title="自定義遊戲",
|
||||
defSeq="默認序列",
|
||||
noMsn="無任務",
|
||||
|
||||
drop="下落延遲",
|
||||
lock="鎖定延遲",
|
||||
wait="方塊生成等待",
|
||||
fall="行清除延遲",
|
||||
|
||||
bg="背景",
|
||||
bgm="音樂",
|
||||
|
||||
copy="拷貝場地+序列+任務",
|
||||
paste="黏貼場地+序列+任務",
|
||||
clear="開始-清除",
|
||||
puzzle="開始-拼圖",
|
||||
|
||||
reset="重設所有(Del)",
|
||||
advance="更多設置(A)",
|
||||
mod="Mods (F1)",
|
||||
field="場地編輯(F)",
|
||||
sequence="序列編輯(S)",
|
||||
mission="任務編輯(M)",
|
||||
|
||||
eventSet="規則集合",
|
||||
|
||||
holdMode="Hold模式",
|
||||
nextCount="Next",
|
||||
holdCount="Hold",
|
||||
infHold="無限Hold",
|
||||
phyHold="物理Hold",
|
||||
|
||||
fieldH="場地高度",
|
||||
visible="能見度",
|
||||
freshLimit="鎖延刷新限制",
|
||||
opponent="對手",
|
||||
life="生命數",
|
||||
pushSpeed="上漲速度",
|
||||
garbageSpeed="垃圾行速度",
|
||||
|
||||
bufferLimit="緩衝上限",
|
||||
heightLimit="高度上限",
|
||||
ospin="O-spin",
|
||||
fineKill="強制finesse",
|
||||
b2bKill="強制B2B",
|
||||
easyFresh="普通刷新鎖延",
|
||||
deepDrop="深降",
|
||||
bone="骨塊",
|
||||
},
|
||||
custom_field={
|
||||
title="自定義遊戲",
|
||||
subTitle="場地",
|
||||
|
||||
any="不定",
|
||||
smart="智能",
|
||||
|
||||
push="增加一行(K)",
|
||||
del="清除行(L)",
|
||||
|
||||
demo="不顯示×",
|
||||
|
||||
newPg="新頁面(N)",
|
||||
delPg="刪除頁面(M)",
|
||||
prevPg="上一頁面",
|
||||
nextPg="下一頁面",
|
||||
},
|
||||
custom_sequence={
|
||||
title="自定義遊戲",
|
||||
subTitle="序列",
|
||||
sequence="序列",
|
||||
},
|
||||
custom_mission={
|
||||
title="自定義遊戲",
|
||||
subTitle="任務",
|
||||
|
||||
_1="1",_2="2",_3="3",_4="4",
|
||||
any1="any1",any2="any2",any3="any3",any4="any4",
|
||||
PC="PC",
|
||||
Z1="Z1",S1="S1",J1="J1",L1="L1",T1="T1",O1="O1",I1="I1",
|
||||
Z2="Z2",S2="S2",J2="J2",L2="L2",T2="T2",O2="O2",I2="I2",
|
||||
Z3="Z3",S3="S3",J3="J3",L3="L3",T3="T3",O3="O3",I3="I3",
|
||||
O4="O4",I4="I4",
|
||||
mission="強制任務",
|
||||
},
|
||||
music={
|
||||
title="音樂房",
|
||||
arrow="→",
|
||||
now="正在播放:",
|
||||
|
||||
bgm="音樂",
|
||||
sound="音效房",
|
||||
},
|
||||
launchpad={
|
||||
title="音效房",
|
||||
bgm="音樂",
|
||||
sfx="音效",
|
||||
voc="語音",
|
||||
music="音樂房",
|
||||
label="標籤",
|
||||
},
|
||||
about={
|
||||
staff="製作人員",
|
||||
his="更新曆史",
|
||||
legals="法律信息",
|
||||
qq="作者QQ",
|
||||
},
|
||||
dict={
|
||||
title="小Z方塊詞典",
|
||||
},
|
||||
stat={
|
||||
path="打開存儲目錄",
|
||||
save="用戶資料管理",
|
||||
},
|
||||
login={
|
||||
title="登錄",
|
||||
register="註冊",
|
||||
email="電郵",
|
||||
password="密碼",
|
||||
keepPW="保存密碼",
|
||||
login="登錄",
|
||||
},
|
||||
register={
|
||||
title="註冊",
|
||||
login="登錄",
|
||||
username="用戶名",
|
||||
email="電郵",
|
||||
password="密碼",
|
||||
password2="確認密碼",
|
||||
register="註冊",
|
||||
registering="等待伺服器響應……",
|
||||
},
|
||||
account={
|
||||
title="賬戶",
|
||||
},
|
||||
app_15p={
|
||||
reset="打亂",
|
||||
color="顏色",
|
||||
invis="盲打",
|
||||
slide="滑動操作",
|
||||
pathVis="路徑顯示",
|
||||
revKB="鍵盤反向",
|
||||
},
|
||||
app_schulteG={
|
||||
reset="重新啟動",
|
||||
rank="尺寸",
|
||||
invis="盲打",
|
||||
disappear="消失",
|
||||
tapFX="點擊動畫",
|
||||
},
|
||||
app_pong={
|
||||
reset="重設",
|
||||
},
|
||||
app_AtoZ={
|
||||
level="等級",
|
||||
keyboard="鍵盤",
|
||||
reset="重設",
|
||||
},
|
||||
app_UTTT={
|
||||
reset="重設",
|
||||
},
|
||||
app_2048={
|
||||
reset="重設",
|
||||
invis="盲打",
|
||||
tapControl="點擊操作",
|
||||
|
||||
skip="跳過回合",
|
||||
},
|
||||
app_ten={
|
||||
reset="重設",
|
||||
next="預覽",
|
||||
invis="盲打",
|
||||
fast="速打",
|
||||
},
|
||||
app_dtw={
|
||||
reset="重設",
|
||||
color="顏色",
|
||||
mode="模式",
|
||||
bgm="音樂",
|
||||
arcade="街機",
|
||||
},
|
||||
app_link={
|
||||
reset="重設",
|
||||
invis="盲打",
|
||||
},
|
||||
savedata={
|
||||
export="導出到剪貼板",
|
||||
import="從剪貼板導入",
|
||||
unlock="地圖進度",
|
||||
data="統計數據",
|
||||
setting="設置",
|
||||
vk="虛擬按鍵佈局",
|
||||
|
||||
couldSave="雲儲存(測試功能,謹慎使用)",
|
||||
notLogin="[登入來使用雲儲存]",
|
||||
upload="上傳到雲端",
|
||||
download="從雲端下載",
|
||||
},
|
||||
},
|
||||
modes={
|
||||
['sprint_10l']= {"競速", "10L", "清除10行"},
|
||||
['sprint_20l']= {"競速", "20L", "清除20行"},
|
||||
['sprint_40l']= {"競速", "40L", "清除40行"},
|
||||
['sprint_100l']= {"競速", "100L", "清除100行"},
|
||||
['sprint_400l']= {"競速", "400L", "清除400行"},
|
||||
['sprint_1000l']= {"競速", "1000L", "清除1000行"},
|
||||
['sprintPenta']= {"競速", "五連塊", "傷腦筋十八塊"},
|
||||
['sprintMPH']= {"競速", "MPH", "純隨機\n無Next\n無Hold"},
|
||||
['dig_10l']= {"挖掘", "10L", "挖掘10行"},
|
||||
['dig_40l']= {"挖掘", "40L", "挖掘40行"},
|
||||
['dig_100l']= {"挖掘", "100L", "挖掘100行"},
|
||||
['dig_400l']= {"挖掘", "400L", "挖掘400行"},
|
||||
['drought_n']= {"乾旱", "100L", "你I沒了"},
|
||||
['drought_l']= {"乾旱+", "100L", "後 媽 發 牌"},
|
||||
['stack_e']= {"堆疊", "簡單", "搭積木"},
|
||||
['stack_h']= {"堆疊", "困難", "搭積木"},
|
||||
['stack_u']= {"堆疊", "極限", "搭積木"},
|
||||
['marathon_n']= {"馬拉松", "普通", "200行加速馬拉松"},
|
||||
['marathon_h']= {"馬拉松", "困難", "200行高速馬拉松"},
|
||||
['solo_e']= {"單挑", "簡單", "打敗AI"},
|
||||
['solo_n']= {"單挑", "普通", "打敗AI"},
|
||||
['solo_h']= {"單挑", "困難", "打敗AI"},
|
||||
['solo_l']= {"單挑", "瘋狂", "打敗AI"},
|
||||
['solo_u']= {"單挑", "極限", "打敗AI"},
|
||||
['techmino49_e']= {"49人混戰", "簡單", "49人混戰,活到最後"},
|
||||
['techmino49_h']= {"49人混戰", "困難", "49人混戰,活到最後"},
|
||||
['techmino49_u']= {"49人混戰", "極限", "49人混戰,活到最後"},
|
||||
['techmino99_e']= {"99人混戰", "簡單", "99人混戰,活到最後"},
|
||||
['techmino99_h']= {"99人混戰", "困難", "99人混戰,活到最後"},
|
||||
['techmino99_u']= {"99人混戰", "極限", "99人混戰,活到最後"},
|
||||
['round_e']= {"回合制", "簡單", "下棋模式"},
|
||||
['round_n']= {"回合制", "普通", "下棋模式"},
|
||||
['round_h']= {"回合制", "困難", "下棋模式"},
|
||||
['round_l']= {"回合制", "瘋狂", "下棋模式"},
|
||||
['round_u']= {"回合制", "極限", "下棋模式"},
|
||||
['master_n']= {"大師", "普通", "20G初心者練習"},
|
||||
['master_h']= {"大師", "困難", "上級者20G挑戰"},
|
||||
['master_m']= {"大師", "大師", "大師20G"},
|
||||
['master_final']= {"大師", "究極", "究極20G:無法觸及的終點"},
|
||||
['master_ph']= {"大師", "虛幻", "虛幻20G:???"},
|
||||
['master_ex']= {"宗師", "EX", "成為方塊大師"},
|
||||
['rhythm_e']= {"節奏", "簡單", "200行低速節奏馬拉松"},
|
||||
['rhythm_h']= {"節奏", "困難", "200行中速節奏馬拉松"},
|
||||
['rhythm_u']= {"節奏", "極限", "200行高速節奏馬拉松"},
|
||||
['blind_e']= {"隱形", "半隱", "不強大腦"},
|
||||
['blind_n']= {"隱形", "全隱", "挺強大腦"},
|
||||
['blind_h']= {"隱形", "瞬隱", "很強大腦"},
|
||||
['blind_l']= {"隱形", "瞬隱+", "最強大腦"},
|
||||
['blind_u']= {"隱形", "啊這", "你準備好了嗎"},
|
||||
['blind_wtf']= {"隱形", "不會吧", "還沒準備好"},
|
||||
['classic_e']= {"高速經典", "簡單", "高速經典"},
|
||||
['classic_h']= {"高速經典", "困難", "飛速經典"},
|
||||
['classic_u']= {"高速經典", "極限", "極速經典"},
|
||||
['survivor_e']= {"生存", "簡單", "你能存活多久?"},
|
||||
['survivor_n']= {"生存", "普通", "你能存活多久?"},
|
||||
['survivor_h']= {"生存", "困難", "你能存活多久?"},
|
||||
['survivor_l']= {"生存", "瘋狂", "你能存活多久?"},
|
||||
['survivor_u']= {"生存", "極限", "你能存活多久?"},
|
||||
['attacker_h']= {"進攻", "困難", "進攻練習"},
|
||||
['attacker_u']= {"進攻", "極限", "進攻練習"},
|
||||
['defender_n']= {"防守", "普通", "防守練習"},
|
||||
['defender_l']= {"防守", "瘋狂", "防守練習"},
|
||||
['dig_h']= {"挖掘", "困難", "挖掘練習"},
|
||||
['dig_u']= {"挖掘", "極限", "挖掘練習"},
|
||||
['bigbang']= {"大爆炸", "簡單", "All-spin入門教程\n施工中"},
|
||||
['c4wtrain_n']= {"C4W練習", "普通", "無 限 連 擊"},
|
||||
['c4wtrain_l']= {"C4W練習", "瘋狂", "無 限 連 擊"},
|
||||
['pctrain_n']= {"全清訓練", "普通", "簡易PC題集,熟悉全清定式的組合"},
|
||||
['pctrain_l']= {"全清訓練", "瘋狂", "困難PC題集,強算力者進"},
|
||||
['pc_n']= {"全清挑戰", "普通", "100行內刷PC"},
|
||||
['pc_h']= {"全清挑戰", "困難", "100行內刷PC"},
|
||||
['pc_l']= {"全清挑戰", "瘋狂", "100行內刷PC"},
|
||||
['pc_inf']= {"無盡全清挑戰", "", "你能連續做多少PC?"},
|
||||
['tech_n']= {"科研", "普通", "禁止斷B2B"},
|
||||
['tech_n_plus']= {"科研", "普通+", "僅允許spin與PC"},
|
||||
['tech_h']= {"科研", "困難", "禁止斷B2B"},
|
||||
['tech_h_plus']= {"科研", "困難+", "僅允許spin與PC"},
|
||||
['tech_l']= {"科研", "瘋狂", "禁止斷B2B"},
|
||||
['tech_l_plus']= {"科研", "瘋狂+", "僅允許spin與PC"},
|
||||
['tech_finesse']= {"科研", "finesse", "強制finesse"},
|
||||
['tech_finesse_f']= {"科研", "finesse+", "禁止普通清除,強制finesse"},
|
||||
['tsd_e']= {"TSD挑戰", "簡單", "你能連續做幾個TSD?"},
|
||||
['tsd_h']= {"TSD挑戰", "困難", "你能連續做幾個TSD?"},
|
||||
['tsd_u']= {"TSD挑戰", "極限", "你能連續做幾個TSD?"},
|
||||
['backfire_n']= {"Backfire", "普通", "打出100攻擊"},
|
||||
['backfire_h']= {"Backfire", "困難", "打出100攻擊"},
|
||||
['backfire_l']= {"Backfire", "瘋狂", "打出100攻擊"},
|
||||
['backfire_u']= {"Backfire", "極限", "打出100攻擊"},
|
||||
['sprintAtk']= {"競速", "100攻擊", "打出100攻擊"},
|
||||
['sprintEff']= {"競速", "效率", "40行內打出更高的攻擊"},
|
||||
['zen']= {"禪", "200行", "不限時200行"},
|
||||
['ultra']= {"限時打分", "挑戰", "在兩分鐘內盡可能拿到最多的分數"},
|
||||
['infinite']= {"無盡", "", "沙盒"},
|
||||
['infinite_dig']= {"無盡:挖掘", "", "挖呀挖呀挖"},
|
||||
['marathon_inf']= {"馬拉松", "無盡", "無盡馬拉松"},
|
||||
|
||||
['custom_clear']= {"自定義", "普通"},
|
||||
['custom_puzzle']= {"自定義", "拼圖"},
|
||||
},
|
||||
}
|
||||
@@ -6,8 +6,8 @@ return{
|
||||
{name='sprint_400l', x=-400, y=0, size=40,shape=1,icon="sprint3", unlock={'sprint_1000l'}},
|
||||
{name='sprint_1000l', x=-600, y=0, size=40,shape=1,icon="sprint3"},
|
||||
|
||||
{name='sprintPenta', x=210, y=-150, size=40,shape=3,icon="sprint2"},
|
||||
{name='sprintMPH', x=210, y=-330, size=40,shape=3,icon="sprint2"},
|
||||
{name='sprintPenta', x=180, y=-160, size=40,shape=3,icon="sprint2"},
|
||||
{name='sprintMPH', x=220, y=-340, size=40,shape=3,icon="sprint2"},
|
||||
|
||||
{name='drought_n', x=-400, y=200, size=40,shape=1,icon="drought", unlock={'drought_l'}},
|
||||
{name='drought_l', x=-600, y=200, size=40,shape=1,icon="drought"},
|
||||
@@ -92,7 +92,9 @@ return{
|
||||
{name='pc_l', x=1100, y=-110, size=40,shape=3,icon="pc"},
|
||||
{name='pc_inf', x=1100, y=-250, size=40,shape=2,icon="pc"},
|
||||
|
||||
{name='sprintAtk', x=500, y=-150, size=40,shape=1,icon="sprint2", unlock={'tech_n','tech_finesse','tsd_e','backfire_n'}},
|
||||
{name='sprintAtk', x=530, y=-150, size=40,shape=1,icon="sprint2", unlock={'sprintEff','tech_n','tech_finesse','tsd_e','backfire_n'}},
|
||||
|
||||
{name='sprintEff', x=360, y=-150, size=40,shape=1,icon="sprint2"},
|
||||
|
||||
{name='tech_n', x=400, y=50, size=40,shape=1,icon="tech", unlock={'tech_n_plus','tech_h'}},
|
||||
{name='tech_n_plus', x=200, y=20, size=40,shape=3,icon="tech"},
|
||||
@@ -113,8 +115,9 @@ return{
|
||||
{name='backfire_l', x=1050, y=350, size=40,shape=3,icon="backfire", unlock={'backfire_u'}},
|
||||
{name='backfire_u', x=1250, y=350, size=35,shape=2,icon="backfire"},
|
||||
|
||||
{name='zen', x=-800, y=-600, size=40,shape=1,icon="zen", unlock={'ultra','infinite','infinite_dig'}},
|
||||
{name='ultra', x=-1000, y=-600, size=40,shape=1,icon="ultra"},
|
||||
{name='infinite', x=-1000, y=-400, size=40,shape=1,icon='infinite'},
|
||||
{name='infinite_dig', x=-800, y=-400, size=40,shape=1,icon="dig"},
|
||||
{name='zen', x=-1000, y=-600, size=40,shape=1,icon="zen", unlock={'ultra','infinite','infinite_dig','marathon_inf'}},
|
||||
{name='ultra', x=-1200, y=-600, size=40,shape=1,icon="ultra"},
|
||||
{name='infinite', x=-1200, y=-400, size=40,shape=1,icon='infinite'},
|
||||
{name='infinite_dig', x=-1000, y=-400, size=40,shape=1,icon="dig"},
|
||||
{name='marathon_inf', x=-800, y=-400, size=40,shape=1,icon="marathon"}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ return{
|
||||
visible='easy',
|
||||
mesDisp=require"parts.eventsets.blindMesDisp".mesDisp,
|
||||
eventSet='checkLine_200',
|
||||
bg='glow',bgm='push',
|
||||
bg='glow',bgm='sugar fairy',
|
||||
},
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
|
||||
@@ -9,7 +9,7 @@ return{
|
||||
freshLimit=15,
|
||||
mesDisp=require"parts.eventsets.blindMesDisp".mesDisp,
|
||||
eventSet='checkLine_200',
|
||||
bg='rgb',bgm='push',
|
||||
bg='rgb',bgm='sugar fairy',
|
||||
},
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
|
||||
@@ -10,7 +10,7 @@ return{
|
||||
freshLimit=15,
|
||||
mesDisp=require"parts.eventsets.blindMesDisp".mesDisp,
|
||||
eventSet='checkLine_200',
|
||||
bg='rgb',bgm='push',
|
||||
bg='rgb',bgm='sugar fairy',
|
||||
},
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
|
||||
@@ -6,7 +6,7 @@ return{
|
||||
visible='fast',
|
||||
mesDisp=require"parts.eventsets.blindMesDisp".mesDisp,
|
||||
eventSet='checkLine_200',
|
||||
bg='glow',bgm='push',
|
||||
bg='glow',bgm='sugar fairy',
|
||||
},
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].." Lines "..STRING.time(D[2])end,
|
||||
|
||||
@@ -5,7 +5,7 @@ return{
|
||||
smooth=false,
|
||||
face={0,0,2,2,2,0,0},
|
||||
eventSet='classic_e',
|
||||
bg='rgb',bgm='magicblock',
|
||||
bg='rgb',bgm='1989',
|
||||
},
|
||||
slowMark=true,
|
||||
score=function(P)return{P.stat.score,P.stat.row}end,
|
||||
|
||||
@@ -5,7 +5,7 @@ return{
|
||||
smooth=false,
|
||||
face={0,0,2,2,2,0,0},
|
||||
eventSet='classic_h',
|
||||
bg='rgb',bgm='magicblock',
|
||||
bg='rgb',bgm='1989',
|
||||
},
|
||||
slowMark=true,
|
||||
score=function(P)return{P.stat.score,P.stat.row}end,
|
||||
|
||||
@@ -5,7 +5,7 @@ return{
|
||||
smooth=false,
|
||||
face={0,0,2,2,2,0,0},
|
||||
eventSet='classic_u',
|
||||
bg='rgb',bgm='magicblock',
|
||||
bg='rgb',bgm='1989',
|
||||
},
|
||||
slowMark=true,
|
||||
score=function(P)return{P.stat.score,P.stat.row}end,
|
||||
|
||||
@@ -47,7 +47,7 @@ return{
|
||||
PLY.newPlayer(1)
|
||||
local P1=PLAYERS[1]
|
||||
for _=1,8 do
|
||||
P1:garbageRise(13,1,generateLine(P1.holeRND:random(10)))
|
||||
P1:garbageRise(13,1,P1:getHolePos())
|
||||
end
|
||||
P1.fieldBeneath=0
|
||||
end,
|
||||
|
||||
17
parts/modes/marathon_inf.lua
Normal file
17
parts/modes/marathon_inf.lua
Normal file
@@ -0,0 +1,17 @@
|
||||
return{
|
||||
color=COLOR.white,
|
||||
env={
|
||||
noTele=true,
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
sequence="bagES",
|
||||
eventSet='marathon_inf',
|
||||
bg='bg2',bgm='push',
|
||||
},
|
||||
slowMark=true,
|
||||
score=function(P)return{P.stat.score,P.stat.row,P.stat.time}end,
|
||||
scoreDisp=function(D)return D[1].."P "..D[2].."L "..STRING.time(D[3])end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
return P.stat.row>=26 and 0
|
||||
end,
|
||||
}
|
||||
@@ -4,7 +4,7 @@ return{
|
||||
mindas=7,minarr=1,minsdarr=1,
|
||||
keyCancel={6},
|
||||
eventSet='rhythm_e',
|
||||
bg='bg2',bgm='push',
|
||||
bg='bg2',bgm='magicblock',
|
||||
},
|
||||
slowMark=true,
|
||||
score=function(P)return{math.min(P.stat.row,200),P.stat.time}end,
|
||||
|
||||
16
parts/modes/sprintEff.lua
Normal file
16
parts/modes/sprintEff.lua
Normal file
@@ -0,0 +1,16 @@
|
||||
return{
|
||||
color=COLOR.green,
|
||||
env={
|
||||
drop=60,lock=60,
|
||||
eventSet='checkLine_40',
|
||||
bg='bg2',bgm='race',
|
||||
},
|
||||
score=function(P)return{P.stat.atk/P.stat.row,P.stat.time}end,
|
||||
scoreDisp=function(D)return string.format("%.3f",D[1]).." Efficiency "..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,
|
||||
getRank=function(P)
|
||||
if P.stat.row<40 then return end
|
||||
local E=P.stat.atk/P.stat.row
|
||||
return math.min(math.floor(E),5)
|
||||
end,
|
||||
}
|
||||
@@ -8,16 +8,12 @@ return{
|
||||
},
|
||||
getRank=function(P)
|
||||
local L=P.stat.row
|
||||
if L<40 then
|
||||
return
|
||||
L>25 and 2 or
|
||||
L>10 and 1 or
|
||||
L>2 and 0
|
||||
end
|
||||
local T=P.stat.time
|
||||
return
|
||||
T<=60 and 5 or
|
||||
T<=100 and 4 or
|
||||
3
|
||||
L>=40 and 5 or
|
||||
L>=32 and 4 or
|
||||
L>=24 and 3 or
|
||||
L>=16 and 2 or
|
||||
L>=10 and 1 or
|
||||
L>=5 and 0
|
||||
end,
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ return{
|
||||
nextCount=0,holdCount=0,
|
||||
sequence='rnd',
|
||||
eventSet='checkLine_40',
|
||||
bg='aura',bgm='waterfall',
|
||||
bg='aura',bgm='magicblock',
|
||||
},
|
||||
score=function(P)return{P.stat.time,P.stat.piece}end,
|
||||
scoreDisp=function(D)return STRING.time(D[1]).." "..D[2].." Pieces"end,
|
||||
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
pushSpeed=2,
|
||||
freshLimit=15,
|
||||
eventSet='royale',
|
||||
bg='rainbow',bgm='sugar fairy',
|
||||
bg='rainbow',bgm='rockblock',
|
||||
},
|
||||
load=function()
|
||||
ROYALEDATA.powerUp={2,5,10,20}
|
||||
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
pushSpeed=2,
|
||||
freshLimit=15,
|
||||
eventSet='royale',
|
||||
bg='rainbow',bgm='magicblock',
|
||||
bg='rainbow',bgm='rockblock',
|
||||
},
|
||||
load=function()
|
||||
ROYALEDATA.powerUp={2,5,10,20}
|
||||
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
pushSpeed=2,
|
||||
freshLimit=15,
|
||||
eventSet='royale',
|
||||
bg='rainbow',bgm='sugar fairy',
|
||||
bg='rainbow',bgm='rockblock',
|
||||
},
|
||||
load=function()
|
||||
ROYALEDATA.powerUp={2,6,14,30}
|
||||
|
||||
@@ -14,7 +14,7 @@ return{
|
||||
pushSpeed=2,
|
||||
freshLimit=15,
|
||||
eventSet='royale',
|
||||
bg='rainbow',bgm='magicblock',
|
||||
bg='rainbow',bgm='rockblock',
|
||||
},
|
||||
load=function()
|
||||
ROYALEDATA.powerUp={2,6,14,30}
|
||||
|
||||
@@ -627,20 +627,29 @@ local function _drawStartCounter(time)
|
||||
time=179-time
|
||||
gc_push('transform')
|
||||
gc_translate(300,300)
|
||||
local r,g,b
|
||||
local num=int(time/60)+1
|
||||
local d=time%60
|
||||
if num==3 then
|
||||
gc_setColor(.7,.8,.98)
|
||||
r,g,b=.7,.8,.98
|
||||
if d>45 then gc_rotate((d-45)^2*.00355)end
|
||||
elseif num==2 then
|
||||
gc_setColor(.98,.85,.75)
|
||||
r,g,b=.98,.85,.75
|
||||
if d>45 then gc_scale(1+(d/15-3)^2,1)end
|
||||
elseif num==1 then
|
||||
gc_setColor(1,.7,.7)
|
||||
r,g,b=1,.7,.7
|
||||
if d>45 then gc_scale(1,1+(d/15-3)^2)end
|
||||
end
|
||||
if d<20 then gc_scale((d/20)^.4)end
|
||||
setFont(100)
|
||||
|
||||
gc_setColor(r,g,b,d/60)
|
||||
gc_push('transform')
|
||||
gc_scale((1.5-d/60*.6)^1.5)
|
||||
mStr(num,0,-70)
|
||||
gc_pop()
|
||||
|
||||
gc_setColor(r,g,b)
|
||||
gc_scale(min(d/20,1)^.4)
|
||||
mStr(num,0,-70)
|
||||
gc_pop()
|
||||
end
|
||||
@@ -649,16 +658,26 @@ local draw={}
|
||||
draw.drawGhost=drawGhost
|
||||
draw.applyField=_applyField
|
||||
draw.cancelField=_cancelField
|
||||
function draw.drawTargetLine(P,r)
|
||||
if r<=20+(P.fieldBeneath+P.fieldUp+10)/30 and r>0 then
|
||||
function draw.drawTargetLine(P,h)
|
||||
if h<=20+(P.fieldBeneath+P.fieldUp+10)/30 and h>0 then
|
||||
gc_setLineWidth(3)
|
||||
gc_setColor(1,r>10 and 0 or .2+.8*rnd(),.5)
|
||||
gc_setColor(1,h>10 and 0 or .2+.8*rnd(),.5)
|
||||
_applyField(P)
|
||||
r=600-30*r
|
||||
h=600-30*h
|
||||
if P.falling~=-1 then
|
||||
r=r-#P.clearingRow*(P.gameEnv.smooth and(P.falling/(P.gameEnv.fall+1))^1.6*30 or 30)
|
||||
h=h-#P.clearingRow*(P.gameEnv.smooth and(P.falling/(P.gameEnv.fall+1))^1.6*30 or 30)
|
||||
end
|
||||
gc_line(0,r,300,r)
|
||||
gc_line(0,h,300,h)
|
||||
_cancelField()
|
||||
end
|
||||
end
|
||||
function draw.drawMarkLine(P,h,r,g,b,a)
|
||||
if h<=20+(P.fieldBeneath+P.fieldUp+10)/30 and h>0 then
|
||||
gc_setLineWidth(4)
|
||||
gc_setColor(r,g,b,a)
|
||||
_applyField(P)
|
||||
h=600-30*h
|
||||
gc_line(0,h,300,h)
|
||||
_cancelField()
|
||||
end
|
||||
end
|
||||
|
||||
@@ -603,6 +603,12 @@ function Player:freshBlock(mode)--string mode: push/move/fresh/newBlock
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
--Play sound if touch ground
|
||||
if mode=='move'and self.sound and self.curY==self.ghoY then
|
||||
SFX.play('touch')
|
||||
end
|
||||
|
||||
end
|
||||
function Player:lock()
|
||||
local CB=self.cur.bk
|
||||
@@ -1669,7 +1675,7 @@ do
|
||||
self.falling=self.gameEnv.fall
|
||||
self.stat.row=self.stat.row+_cc
|
||||
self.stat.dig=self.stat.dig+_gbcc
|
||||
self.stat.score=self.stat.score+clearSCR[cc]
|
||||
self.stat.score=self.stat.score+clearSCR[_cc]
|
||||
end
|
||||
return _cc,_gbcc
|
||||
end
|
||||
@@ -2110,6 +2116,8 @@ local function update_alive(P)
|
||||
|
||||
if P.ghoY~=P.curY then
|
||||
P.dropDelay=ENV.drop
|
||||
elseif P.sound then
|
||||
SFX.play('touch')
|
||||
end
|
||||
else
|
||||
P.lockDelay=P.lockDelay-1
|
||||
@@ -2437,9 +2445,6 @@ function Player:act_moveLeft(auto)
|
||||
self:createMoveFX('left')
|
||||
self.curX=self.curX-1
|
||||
self:freshBlock('move')
|
||||
if self.sound and self.curY==self.ghoY then
|
||||
SFX.play('move')
|
||||
end
|
||||
if not auto then
|
||||
self.moving=0
|
||||
end
|
||||
@@ -2466,9 +2471,6 @@ function Player:act_moveRight(auto)
|
||||
self:createMoveFX('right')
|
||||
self.curX=self.curX+1
|
||||
self:freshBlock('move')
|
||||
if self.sound and self.curY==self.ghoY then
|
||||
SFX.play('move')
|
||||
end
|
||||
if not auto then
|
||||
self.moving=0
|
||||
end
|
||||
|
||||
@@ -124,7 +124,7 @@ local function tapBoard(x,y,key)
|
||||
SFX.play('win')
|
||||
return
|
||||
end
|
||||
SFX.play('move')
|
||||
SFX.play('touch')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -261,8 +261,8 @@ local moveFunc={
|
||||
right=moveRight,
|
||||
}
|
||||
local arrows={
|
||||
up="↑",down="↓",left="←",right="→",
|
||||
["↑"]="up",["↓"]="down",["←"]="left",["→"]="right",
|
||||
up='↑',down='↓',left='←',right='→',
|
||||
['↑']='up',['↓']='down',['←']='left',['→']='right',
|
||||
}
|
||||
local function setFocus(n)
|
||||
if state~=2 then
|
||||
@@ -313,7 +313,7 @@ function scene.keyDown(key,isRep)
|
||||
TEXT.show(arrows[key],640,360,80,'beat',3)
|
||||
move=move+1
|
||||
if not autoPressing then
|
||||
SFX.play('move')
|
||||
SFX.play('touch')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -50,7 +50,7 @@ function scene.keyDown(key,isRep)
|
||||
progress=progress+1
|
||||
frameKeyCount=frameKeyCount+1
|
||||
TEXT.show(key:upper(),rnd(320,960),rnd(100,240),90,'score',2.6)
|
||||
SFX.play('move')
|
||||
SFX.play('touch')
|
||||
if progress==2 then
|
||||
state=1
|
||||
startTime=TIME()
|
||||
|
||||
@@ -57,7 +57,7 @@ local function full(L)
|
||||
end
|
||||
local function place(X,x)
|
||||
board[X][x]=round
|
||||
SFX.play('move')
|
||||
SFX.play('touch')
|
||||
lastX,lastx=X,x
|
||||
curX,curx=nil
|
||||
placeTime=TIME()
|
||||
|
||||
@@ -157,7 +157,7 @@ function scene.keyDown(key,isRep)
|
||||
input=input..key
|
||||
inputTime=1
|
||||
check(tonumber(input))
|
||||
SFX.play('move')
|
||||
SFX.play('touch')
|
||||
end
|
||||
elseif key=="-"then
|
||||
if #input<8 then
|
||||
|
||||
@@ -51,7 +51,7 @@ function scene.keyDown(key,isRep)
|
||||
move.x=move.x-10
|
||||
end
|
||||
end
|
||||
SFX.play('swipe')
|
||||
SFX.play('hold')
|
||||
state='drop'
|
||||
elseif state=='dead'then
|
||||
move.x,move.y,move.l=1e99,0,0
|
||||
|
||||
@@ -138,7 +138,7 @@ function scene.update()
|
||||
if bx<-120 or bx>1400 or by<-40 or by>760 then
|
||||
P=bx>640 and p1 or p2
|
||||
P.score=P.score+1
|
||||
TEXT.show("+1",bx>1400 and 470 or 810,226,50,'score')
|
||||
TEXT.show("+1",P==p1 and 470 or 810,226,50,'score')
|
||||
SFX.play('reach')
|
||||
|
||||
state=0
|
||||
|
||||
@@ -211,7 +211,7 @@ function scene.update()
|
||||
SFX.play('fail')
|
||||
else
|
||||
fallingTimer=fast and 4 or 5
|
||||
SFX.play('move')
|
||||
SFX.play('touch')
|
||||
end
|
||||
end
|
||||
elseif fast and(
|
||||
|
||||
@@ -23,7 +23,7 @@ local function isEmpty(L)
|
||||
return true
|
||||
end
|
||||
local penKey={
|
||||
["1"]=1,["2"]=2,["3"]=3,["4"]=4,["5"]=5,["6"]=6,["7"]=7,["8"]=8,
|
||||
['1']=1,['2']=2,['3']=3,['4']=4,['5']=5,['6']=6,['7']=7,['8']=8,
|
||||
q=9,w=10,e=11,r=12,t=13,y=14,u=15,i=16,
|
||||
a=17,s=18,d=19,f=20,g=21,h=22,j=23,k=24,
|
||||
z=0,x=-1,
|
||||
|
||||
@@ -20,7 +20,7 @@ local lastSearch--Last searched string
|
||||
|
||||
local typeColor={
|
||||
help=COLOR.Y,
|
||||
other=COLOR.lO,
|
||||
org=COLOR.lF,
|
||||
game=COLOR.lC,
|
||||
term=COLOR.lR,
|
||||
setup=COLOR.lY,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
local langList={
|
||||
zh="中文",
|
||||
zh_full="全中文",
|
||||
zh="简体中文",
|
||||
zh_full="全简体中文",
|
||||
zh_trad="繁體中文",
|
||||
en="English",
|
||||
fr="Français",
|
||||
es="Español",
|
||||
@@ -25,15 +26,18 @@ local function _setLang(lid)
|
||||
collectgarbage()
|
||||
end
|
||||
scene.widgetList={
|
||||
WIDGET.newButton{x=200,y=100,w=200,h=120,fText=langList.zh, color='R', code=function()_setLang('zh')end},
|
||||
WIDGET.newButton{x=420,y=100,w=200,h=120,fText=langList.zh_full, color='dR',code=function()_setLang('zh_full')end},
|
||||
WIDGET.newButton{x=640,y=100,w=200,h=120,fText=langList.en, color='N', code=function()_setLang('en')end},
|
||||
WIDGET.newButton{x=860,y=100,w=200,h=120,fText=langList.fr, color='lW',code=function()_setLang('fr')end},
|
||||
WIDGET.newButton{x=1080,y=100,w=200,h=120,fText=langList.es, color='O', code=function()_setLang('es')end},
|
||||
WIDGET.newButton{x=200,y=250,w=200,h=120,fText=langList.pt, color='Y', code=function()_setLang('pt')end},
|
||||
WIDGET.newButton{x=200,y=550,w=200,h=120,fText=langList.zh_grass,color='lG',code=function()_setLang('zh_grass')end},
|
||||
WIDGET.newButton{x=420,y=550,w=200,h=120,fText=langList.zh_yygq, color='D', code=function()_setLang('zh_yygq')end},
|
||||
WIDGET.newButton{x=640,y=550,w=200,h=120,fText=langList.symbol, color='dH',code=function()_setLang('symbol')end},
|
||||
WIDGET.newButton{x=271,y=190,w=346,h=120,font=40, fText=langList.zh, color='O',code=function()_setLang('zh')end},
|
||||
WIDGET.newButton{x=637,y=190,w=346,h=120,font=40, fText=langList.zh_trad, color='F',code=function()_setLang('zh_trad')end},
|
||||
WIDGET.newButton{x=1003,y=190,w=346,h=120,font=40, fText=langList.zh_full, color='R',code=function()_setLang('zh_full')end},
|
||||
|
||||
WIDGET.newButton{x=225,y=331,w=255,h=120,font=40, fText=langList.en, color='Y',code=function()_setLang('en')end},
|
||||
WIDGET.newButton{x=500,y=331,w=255,h=120,font=40, fText=langList.fr, color='L',code=function()_setLang('fr')end},
|
||||
WIDGET.newButton{x=775,y=331,w=255,h=120,font=40, fText=langList.es, color='J',code=function()_setLang('es')end},
|
||||
WIDGET.newButton{x=1050,y=331,w=255,h=120,font=40, fText=langList.pt, color='G',code=function()_setLang('pt')end},
|
||||
|
||||
WIDGET.newButton{x=271,y=472,w=346,h=120,font=45, fText=langList.zh_grass,color='N',code=function()_setLang('zh_grass')end},
|
||||
WIDGET.newButton{x=637,y=472,w=346,h=120,font=45, fText=langList.zh_yygq, color='S',code=function()_setLang('zh_yygq')end},
|
||||
WIDGET.newButton{x=1003,y=472,w=346,h=120,font=45, fText=langList.symbol, color='B',code=function()_setLang('symbol')end},
|
||||
WIDGET.newButton{name='back',x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ pad={x=140,y=65,page=1,
|
||||
{samp={tag='ready2',func=function()playReadySFX(2)end}},
|
||||
{samp={tag='ready1',func=function()playReadySFX(1)end}},
|
||||
{samp={tag='start',func=function()playReadySFX(0)end}},
|
||||
{sfx='move'},{sfx='lock'},{sfx='drop'},{sfx='fall'},
|
||||
{sfx='touch'},{sfx='lock'},{sfx='drop'},{sfx='fall'},
|
||||
},
|
||||
{
|
||||
{sfx='hold'},{sfx='prehold'},
|
||||
@@ -76,7 +76,7 @@ pad={x=140,y=65,page=1,
|
||||
{samp={tag='ready2',func=function()playReadySFX(2)end}},
|
||||
{samp={tag='ready1',func=function()playReadySFX(1)end}},
|
||||
{samp={tag='start',func=function()playReadySFX(0)end}},
|
||||
{sfx='move'},{sfx='lock'},{sfx='drop'},{sfx='fall'},
|
||||
{sfx='touch'},{sfx='lock'},{sfx='drop'},{sfx='fall'},
|
||||
},
|
||||
{
|
||||
{sfx='hold'},{sfx='prehold'},
|
||||
|
||||
@@ -36,7 +36,7 @@ local function _toggleMod(M,back)
|
||||
SFX.play('move',.6)
|
||||
SFX.play('lock')
|
||||
else
|
||||
SFX.play('move')
|
||||
SFX.play('touch')
|
||||
SFX.play('lock',.6)
|
||||
end
|
||||
scene.widgetList.unranked.hide=scoreValid()
|
||||
|
||||
@@ -304,7 +304,7 @@ function scene.draw()
|
||||
elseif L[1]then
|
||||
for i=1,#L do
|
||||
local t=M.scoreDisp(L[i])
|
||||
local f=int((30-#t*.4)/5)*5
|
||||
local f=int((30-#t*.5)/5)*5
|
||||
setFont(f)
|
||||
gc_print(t,955,275+25*i+17-f*.7)
|
||||
_=L[i].date
|
||||
|
||||
@@ -21,6 +21,7 @@ local author={
|
||||
["jazz nihilism"]="Trebor",
|
||||
["race remix"]="柒栎流星",
|
||||
["sakura"]="ZUN & C29H25N3O5",
|
||||
["1989"]="C29H25N3O5",
|
||||
}
|
||||
|
||||
local scene={}
|
||||
|
||||
@@ -45,8 +45,6 @@ end
|
||||
function scene.sceneInit()
|
||||
sure=0
|
||||
destroyPlayers()
|
||||
BG.set(ROOMENV.bg)
|
||||
BGM.play(ROOMENV.bgm)
|
||||
end
|
||||
function scene.sceneBack()
|
||||
BGM.play()
|
||||
|
||||
@@ -152,8 +152,8 @@ end
|
||||
|
||||
scene.widgetList={
|
||||
listBox,
|
||||
WIDGET.newButton{name='export',x=200,y=640,w=70,color='lG',code=pressKey"cC",font=50,fText=CHAR.icon.export},
|
||||
WIDGET.newButton{name='import',x=300,y=640,w=70,color='lN',code=pressKey"cV",font=50,fText=CHAR.icon.import},
|
||||
WIDGET.newButton{name='export',x=180,y=640,w=140,h=80,color='lG',code=pressKey"cC",font=50,fText=CHAR.icon.export},
|
||||
WIDGET.newButton{name='import',x=350,y=640,w=140,h=80,color='lN',code=pressKey"cV",font=50,fText=CHAR.icon.import},
|
||||
WIDGET.newButton{name='play', x=700,y=640,w=170,h=80,color='lY',code=pressKey"return",font=65,fText=CHAR.icon.play},
|
||||
WIDGET.newButton{name='delete',x=850,y=640,w=80,h=80,color='lR',code=pressKey"delete",font=50,fText=CHAR.icon.trash},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
|
||||
@@ -5,10 +5,15 @@ local sin=math.sin
|
||||
local selRS
|
||||
local minoRot={0,0,0,0,0,0,0}
|
||||
local minoRot0={}
|
||||
local selEggMode
|
||||
|
||||
local playEgg=WIDGET.newButton{name='playEgg', x=1140,y=540,w=140,h=65,color='lP',font=60,fText=CHAR.icon.rankZ,code=function()loadGame(selEggMode,true)end}
|
||||
|
||||
local scene={}
|
||||
|
||||
function scene.sceneInit()
|
||||
selEggMode=false
|
||||
scene.widgetList.playEgg.hide=true
|
||||
BG.set()
|
||||
selRS=RSlist[SETTING.RS]
|
||||
for i=1,7 do
|
||||
@@ -59,14 +64,18 @@ end
|
||||
local function _nextDir(i)
|
||||
SETTING.face[i]=(SETTING.face[i]+1)%4
|
||||
minoRot0[i]=minoRot0[i]+1.5707963
|
||||
if not GAME.playing then
|
||||
if not selEggMode and not GAME.playing then
|
||||
if minoRot0[5]>62 then
|
||||
loadGame('marathon_bfmax',true)
|
||||
selEggMode='marathon_bfmax'
|
||||
playEgg.color=COLOR.dR
|
||||
elseif minoRot0[6]>62 then
|
||||
loadGame('techrash_n',true)
|
||||
selEggMode='techrash_n'
|
||||
playEgg.color=COLOR.lP
|
||||
elseif minoRot0[7]>62 then
|
||||
loadGame('techrash_u',true)
|
||||
selEggMode='techrash_u'
|
||||
playEgg.color=COLOR.lY
|
||||
end
|
||||
playEgg.hide=not selEggMode
|
||||
end
|
||||
SFX.play('rotate')
|
||||
end
|
||||
@@ -115,6 +124,7 @@ scene.widgetList={
|
||||
SFX.play('hold')
|
||||
end},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,font=60,fText=CHAR.icon.back,code=backScene},
|
||||
playEgg,
|
||||
}
|
||||
|
||||
return scene
|
||||
|
||||
@@ -14,6 +14,21 @@ return[=[
|
||||
工程编译到字节码; task-Z(新AI)
|
||||
收集向抽奖; 自适应UI; 多方块
|
||||
|
||||
0.16.5: 新世界 New World
|
||||
新增:
|
||||
新模式:竞速-效率
|
||||
新模式:无尽马拉松
|
||||
新增繁中语言,新语言设置菜单布局
|
||||
新BGM:1989(用于经典模式,by C29H25N3O5)
|
||||
改动:
|
||||
移动音效改为触地音效,在方块因重力或旋转触地时也会播放
|
||||
更换数字和英文字符的字体
|
||||
游戏颜色表改用hsv生成
|
||||
重新安排一些模式的BGM
|
||||
只在更新后触发自动转换以旧版本模式名存储的数据
|
||||
修复:
|
||||
堆积模式超级消除有时报错
|
||||
|
||||
0.16.4: 虫洞 Wormhole
|
||||
新增:
|
||||
新连击音效
|
||||
@@ -24,24 +39,25 @@ return[=[
|
||||
修改堆叠模式玩法(自动清除之前记录)
|
||||
添加消7~20和20+的消除文本与消除音效
|
||||
改动:
|
||||
修改TRS的JL踢墙表的0-R和R-0最后几项(可能会导致部分录像无法正常播放)
|
||||
暂时取消导入存档的版本限制(过早存档请不要导入!只能保证近两三个版本一定能用)
|
||||
修改TRS的JL踢墙表的0-R和R-0最后几项和R/Y块的踢墙表(会导致部分录像无法正常播放)
|
||||
移除组合键切换攻击模式功能,固定为单点切换
|
||||
iOS设备支持三档振动(原来只有一档)
|
||||
微调TRS的R/Y块踢墙表
|
||||
调整模式地图右下角区域
|
||||
移除极简评级的颜色
|
||||
添加legals页面
|
||||
应用更多定制字体
|
||||
微调倒计时动画
|
||||
修改wing背景
|
||||
计算器可以弹琴了
|
||||
词典添加一些词条
|
||||
控制台可以查看日志
|
||||
暂时取消导入存档的版本限制(过早存档请不要导入!只能保证近两三个版本一定能用)
|
||||
控制台可以查看运行日志
|
||||
微调部分彩蛋模式进入方法
|
||||
代码:
|
||||
SFX模块大升级,支持播放乐器采样
|
||||
整理大量代码
|
||||
修复:
|
||||
iOS上概率卡掉第一个触摸导致不能玩
|
||||
无尽挖掘开局垃圾行可能会在同一列
|
||||
生成AI玩家时没刷新20G开关
|
||||
小程序uttt和calc的问题
|
||||
"就这"语言的词典是英文
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
return{
|
||||
["apkCode"]=391,
|
||||
["code"]=1604,
|
||||
["string"]="V0.16.4",
|
||||
["apkCode"]=394,
|
||||
["code"]=1605,
|
||||
["string"]="V0.16.5",
|
||||
["room"]="ver A-0",
|
||||
["name"]="虫洞 Wormhole",
|
||||
["name"]="新世界 New World",
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user