Compare commits
28 Commits
| 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 |
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
|
||||
|
||||
360
.github/workflows/release.yml
vendored
360
.github/workflows/release.yml
vendored
@@ -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 }}
|
||||
|
||||
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',
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
|
||||
47
main.lua
47
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)
|
||||
@@ -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
BIN
media/music/1989.ogg
Normal file
Binary file not shown.
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
|
||||
}
|
||||
Binary file not shown.
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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']= {"自定义", "拼图"},
|
||||
|
||||
@@ -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']= {"自定义", "拼图"},
|
||||
|
||||
@@ -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']= {"习俗", "令人费解的"},
|
||||
|
||||
@@ -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']= {"自定義", "拼圖"},
|
||||
|
||||
@@ -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,
|
||||
|
||||
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,
|
||||
}
|
||||
@@ -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}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
新增:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
return{
|
||||
["apkCode"]=393,
|
||||
["apkCode"]=394,
|
||||
["code"]=1605,
|
||||
["string"]="V0.16.5",
|
||||
["room"]="ver A-0",
|
||||
["name"]="虫洞 Wormhole",
|
||||
["name"]="新世界 New World",
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user