Compare commits

...

28 Commits

Author SHA1 Message Date
ParticleG
63da1b5585 - Add logs to upload-artifact 2021-11-08 04:37:22 +08:00
ParticleG
929be4faf0 - Test Windows with curl 2021-11-08 04:11:04 +08:00
MrZ626
59a5b52993 整理代码 2021-11-08 03:08:42 +08:00
ParticleG
c412e07153 - Add Upload Action 2021-11-08 02:48:38 +08:00
MrZ626
252f19c6df 进入newRoom菜单时不会试图修改背景和bgm 2021-11-07 22:09:22 +08:00
MrZ626
8264fdd4bf 修改更新历史和build号 2021-11-07 21:27:39 +08:00
MrZ626
dfd28f2f10 只在更新后触发自动转换以旧版本模式名存储的数据文件 2021-11-07 21:19:49 +08:00
MrZ626
5fc1257e58 颜色表改用hsv生成 2021-11-07 17:44:17 +08:00
MrZ626
5c39765f71 微调词典
微调两个小程序
整理代码
2021-11-07 17:44:13 +08:00
MrZ626
ca92622d5d 微调中文词典两个词条 2021-11-07 12:28:26 +08:00
MrZ626
e28902bc97 无尽马拉松的are每300行减小一次,line are每100行减小一次 2021-11-07 05:42:03 +08:00
MrZ626
d228809a53 无尽马拉松添加1700行的终点 2021-11-07 05:28:08 +08:00
MrZ626
60f8a22dd5 微调排行榜字体大小 2021-11-07 05:20:58 +08:00
MrZ626
db4ae56990 无尽马拉松添加排行榜 2021-11-07 05:19:12 +08:00
MrZ626
e95288b171 修改更新历史
整理代码
2021-11-07 05:00:41 +08:00
MrZ626
2511555eb0 调整无尽马拉松的难度曲线 2021-11-07 04:58:37 +08:00
Not-A-Normal-Robot
4c4f01cb95 Decrease lock delay when level up above lvl20 2021-11-07 04:55:02 +08:00
Not-A-Normal-Robot
7177118f34 Added Infinite Marathon 2021-11-07 04:55:02 +08:00
MrZ626
a6d5c4a1bf 修改更新历史 2021-11-07 04:02:40 +08:00
MrZ626
73a828d73a 修改mph模式的bgm 2021-11-07 04:02:22 +08:00
MrZ626
a7df4d6aa7 新模式:竞速-效率 2021-11-07 04:02:12 +08:00
MrZ626
7fe4802887 修复超级消除结算时分数计算变量写错导致报错 2021-11-07 01:49:19 +08:00
MrZ626
7eac341b9a move音效在方块因重力或旋转触地时也会播放,而不只是移动后
move音效名改为touch
2021-11-07 01:41:29 +08:00
MrZ626
1fa02a18b2 修改更新历史 2021-11-06 20:57:30 +08:00
MrZ626
b15cb64681 修正pr的一个符号错误 2021-11-06 20:53:45 +08:00
C₂₉H₂₅N₃O₅
bf345c8655 Changed the font and CN tips (#433)
* 补全英文词典翻译

* 大改字体

- 西文部分采用IBM Plex
- 全角标点样式采用西文样式
- 添加类Plex的IPA符号

* 微调中文tips

* 更新 Legals

* 修正一个语法错误
2021-11-06 19:10:44 +08:00
C₂₉H₂₅N₃O₅
cbdb15d658 补全英文词典翻译 (#431) 2021-11-06 04:21:44 +08:00
MrZ626
8b4504bfa0 新BGM:1989(用于几个经典模式)
重新安排一些模式的BGM
2021-11-06 04:05:08 +08:00
56 changed files with 627 additions and 332 deletions

View 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 }}')

View File

@@ -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

View File

@@ -3,7 +3,7 @@ name: Techmino Release CI
on:
push:
tags:
- 'v*'
- "v*"
jobs:
get-info:
@@ -17,213 +17,221 @@ jobs:
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: |
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 }})"
- 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.dmg
- 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: '${{ 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 }}.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: Release
uses: softprops/action-gh-release@v1
with:
name: ${{ needs.get-info.outputs.updateTitle }}
body: ${{ needs.get-info.outputs.updateNote }}
- 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 }}

View File

@@ -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

View File

@@ -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',

View File

@@ -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

View File

@@ -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 Peoples 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.

View File

@@ -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)
@@ -461,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
@@ -506,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

BIN
media/music/1989.ogg Normal file

Binary file not shown.

View 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
}

Binary file not shown.

View File

@@ -167,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",
@@ -439,7 +439,7 @@ return{
{"Orientation",
"orientation direction 0r2l 02 20 rl lr",
"term",
"",--TODO
"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",
@@ -555,7 +555,7 @@ return{
{"Deepdrop",
"deepdrop shenjiang",
"term",
"",--TODO
"*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",
@@ -1123,10 +1123,10 @@ return{
"help",
"Starting from here, all but one term are China-specific (the not-China term is Diao) and are less relevant for the global community.\n\"Virtual content creator\" refers to people who produce content online under a fictional persona, and appear as a motion-controlled animated character on screens. Basically \"Virtual YouTuber\" but not platform-specific."
},
{"TetroDictionary",--TODO EDITTED
{"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_26",
@@ -1266,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",

View File

@@ -780,7 +780,7 @@ return{
{"Hypertap",
"超连点 hypertap",
"term",
"快速震动手指,实现比长按更快速+灵活的高速单点移动主要在经典块的高难度下因为das不可调而且特别慢高速下很容易md导致失败此时手动连点就比自动移动更快或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人称为“Hypertapper”tapper",
"快速震动手指,实现比长按更快速+灵活的高速单点移动主要在经典块的高难度下因为das不可调而且特别慢高速下很容易md导致失败此时手动连点就比自动移动更快或者受特殊情况限制不适合用自动移动时使用。会使用这个技术的人称为“Hypertapper”。",
},
{"TOP攻击表",
"攻击表 top attack",
@@ -795,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",

View File

@@ -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"},

View File

@@ -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"},

View File

@@ -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"},

View File

@@ -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"},

View File

@@ -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']= {"自定义", "拼图"},

View File

@@ -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版本",

View File

@@ -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']= {"自定义", "拼图"},

View File

@@ -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']= {"习俗", "令人费解的"},

View File

@@ -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']= {"自定義", "拼圖"},

View File

@@ -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"}
}

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View File

@@ -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,

View 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,
}

View File

@@ -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
View 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,
}

View File

@@ -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,

View File

@@ -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}

View File

@@ -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}

View File

@@ -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}

View File

@@ -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}

View File

@@ -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

View File

@@ -124,7 +124,7 @@ local function tapBoard(x,y,key)
SFX.play('win')
return
end
SFX.play('move')
SFX.play('touch')
end
end
end

View File

@@ -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

View File

@@ -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()

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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(

View File

@@ -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,

View File

@@ -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'},

View File

@@ -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()

View File

@@ -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

View File

@@ -21,6 +21,7 @@ local author={
["jazz nihilism"]="Trebor",
["race remix"]="柒栎流星",
["sakura"]="ZUN & C29H25N3O5",
["1989"]="C29H25N3O5",
}
local scene={}

View File

@@ -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()

View File

@@ -14,11 +14,20 @@ return[=[
工程编译到字节码; task-Z(新AI)
收集向抽奖; 自适应UI; 多方块
0.17.0: 新世界 New World
0.16.5: 新世界 New World
新增:
新模式:竞速-效率
新模式:无尽马拉松
新增繁中语言,新语言设置菜单布局
新BGM:1989(用于经典模式,by C29H25N3O5)
改动:
更新词典一些词条
移动音效改为触地音效,在方块因重力或旋转触地时也会播放
更换数字和英文字符的字体
游戏颜色表改用hsv生成
重新安排一些模式的BGM
只在更新后触发自动转换以旧版本模式名存储的数据
修复:
堆积模式超级消除有时报错
0.16.4: 虫洞 Wormhole
新增:

View File

@@ -1,7 +1,7 @@
return{
["apkCode"]=393,
["apkCode"]=394,
["code"]=1605,
["string"]="V0.16.5",
["room"]="ver A-0",
["name"]="虫洞 Wormhole",
["name"]="新世界 New World",
}