Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ecb64a112f | ||
|
|
deb8c09c22 | ||
|
|
9606cb2dc9 | ||
|
|
a4d6585e9c | ||
|
|
e161e39b66 | ||
|
|
8d61759d4c | ||
|
|
5a004bcfa7 | ||
|
|
52f16c2fb4 | ||
|
|
d993810269 | ||
|
|
a9ad95f0c8 | ||
|
|
0ed475c994 | ||
|
|
f5e889214e | ||
|
|
ee658d34c5 | ||
|
|
87cf4ee5c7 | ||
|
|
0771dd5159 | ||
|
|
ef16ae9aec | ||
|
|
1a595a38f8 | ||
|
|
9cb5b15c8f | ||
|
|
ccc41d6b57 | ||
|
|
ab48bec472 | ||
|
|
f3f2f4dd95 | ||
|
|
6e37113b34 | ||
|
|
a516cdb228 | ||
|
|
362cc506c5 | ||
|
|
20351391ed |
24
.github/workflows/dev.yml
vendored
24
.github/workflows/dev.yml
vendored
@@ -10,21 +10,27 @@ jobs:
|
||||
get-info:
|
||||
runs-on: ubuntu-20.04
|
||||
outputs:
|
||||
name: ${{ steps.actual-get-info.outputs.name }}
|
||||
apkCode: ${{ steps.actual-get-info.outputs.apkCode }}
|
||||
code: ${{ steps.actual-get-info.outputs.code }}
|
||||
commit: ${{ steps.actual-get-info.outputs.commit }}
|
||||
name: ${{ steps.lua-related.outputs.name }}
|
||||
apkCode: ${{ steps.lua-related.outputs.apkCode }}
|
||||
code: ${{ steps.lua-related.outputs.code }}
|
||||
commit: ${{ steps.git-related.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
|
||||
id: lua-related
|
||||
shell: lua {0}
|
||||
run: |
|
||||
local version = require 'version'
|
||||
print("::set-output name=name::"..version.string)
|
||||
print(("::set-output name=apkCode::%d"):format(version.apkCode))
|
||||
print(("::set-output name=code::%d"):format(version.code))
|
||||
- name: Get Commit
|
||||
id: git-related
|
||||
shell: bash
|
||||
run: |
|
||||
echo "::set-output name=name::$(lua .github/workflows/getVersion.lua -name)"
|
||||
echo "::set-output name=apkCode::$(lua .github/workflows/getVersion.lua -apkCode)"
|
||||
echo "::set-output name=code::$(lua .github/workflows/getVersion.lua -code)"
|
||||
echo "::set-output name=commit::$(git rev-parse --short ${{ GITHUB.SHA }})"
|
||||
|
||||
automatic-test:
|
||||
@@ -105,7 +111,7 @@ 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
|
||||
|
||||
28
.github/workflows/getVersion.lua
vendored
28
.github/workflows/getVersion.lua
vendored
@@ -1,28 +0,0 @@
|
||||
local arg=arg[1]
|
||||
if arg=="-apkCode"then
|
||||
local code=require"version".apkCode
|
||||
print(code)
|
||||
elseif arg=="-code"then
|
||||
local str=require"version".code
|
||||
print(str)
|
||||
elseif arg=="-name"then
|
||||
local str=require"version".string
|
||||
print(str)
|
||||
elseif arg=="-release"then
|
||||
local str=require"version".string:gsub("V","",1)
|
||||
print(str)
|
||||
elseif arg=="-updateTitle"then
|
||||
local note=require"parts.updateLog"
|
||||
local p1=note:find("\n%d")+1
|
||||
local p2=note:find("\n",p1)-1
|
||||
note=note:sub(p1,p2)
|
||||
print(note)
|
||||
elseif arg=="-updateNote"then
|
||||
local note=require"parts.updateLog"
|
||||
local p1=note:find("\n",note:find("\n%d")+1)+1
|
||||
local p2=note:find("\n%d",p1+1)
|
||||
note=note:sub(p1,p2-2)
|
||||
:gsub(" ","- ")
|
||||
:gsub(" ","# ")
|
||||
print(note)
|
||||
end
|
||||
50
.github/workflows/release.yml
vendored
50
.github/workflows/release.yml
vendored
@@ -9,31 +9,45 @@ jobs:
|
||||
get-info:
|
||||
runs-on: ubuntu-20.04
|
||||
outputs:
|
||||
name: ${{ steps.actual-get-info.outputs.name }}
|
||||
apkCode: ${{ steps.actual-get-info.outputs.apkCode }}
|
||||
code: ${{ steps.actual-get-info.outputs.code }}
|
||||
release: ${{ steps.actual-get-info.outputs.release }}
|
||||
updateTitle: ${{ steps.actual-get-info.outputs.updateTitle }}
|
||||
updateNote: ${{ steps.actual-get-info.outputs.updateNote }}
|
||||
commit: ${{ steps.actual-get-info.outputs.commit }}
|
||||
name: ${{ steps.lua-related.outputs.name }}
|
||||
apkCode: ${{ steps.lua-related.outputs.apkCode }}
|
||||
code: ${{ steps.lua-related.outputs.code }}
|
||||
release: ${{ steps.lua-related.outputs.release }}
|
||||
updateTitle: ${{ steps.lua-related.outputs.updateTitle }}
|
||||
updateNote: ${{ steps.lua-related.outputs.updateNote }}
|
||||
commit: ${{ steps.git-related.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
|
||||
id: lua-related
|
||||
shell: lua {0}
|
||||
run: |
|
||||
local version = require 'version'
|
||||
print("::set-output name=name::"..version.string)
|
||||
print(("::set-output name=apkCode::%d"):format(version.apkCode))
|
||||
print(("::set-output name=code::%d"):format(version.code))
|
||||
print("::set-output name=release::"..version.string:gsub("V", "", 1))
|
||||
|
||||
local note = require 'parts.updateLog'
|
||||
local p1 = note:find("\n%d") + 1
|
||||
local p2 = note:find("\n", p1) - 1
|
||||
print("::set-output name=updateTitle::"..note:sub(p1, p2))
|
||||
|
||||
local p3 = note:find("\n", note:find("\n%d") + 1) + 1
|
||||
local p4 = note:find("\n%d", p3 + 1)
|
||||
print("::set-output name=updateNote::"..note:sub(p3, p4 - 2)
|
||||
:gsub(" ", "- ")
|
||||
:gsub(" ", "# ")
|
||||
:gsub('%%', '%%25')
|
||||
:gsub('\n', '%%0A')
|
||||
:gsub('\r', '%%0D'))
|
||||
- name: Get Commit
|
||||
id: git-related
|
||||
shell: bash
|
||||
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:
|
||||
|
||||
28
.github/workflows/test.yml
vendored
28
.github/workflows/test.yml
vendored
@@ -9,23 +9,29 @@ jobs:
|
||||
get-info:
|
||||
runs-on: ubuntu-20.04
|
||||
outputs:
|
||||
name: ${{ steps.actual-get-info.outputs.name }}
|
||||
apkCode: ${{ steps.actual-get-info.outputs.apkCode }}
|
||||
code: ${{ steps.actual-get-info.outputs.code }}
|
||||
release: ${{ steps.actual-get-info.outputs.release }}
|
||||
commit: ${{ steps.actual-get-info.outputs.commit }}
|
||||
name: ${{ steps.lua-related.outputs.name }}
|
||||
apkCode: ${{ steps.lua-related.outputs.apkCode }}
|
||||
code: ${{ steps.lua-related.outputs.code }}
|
||||
release: ${{ steps.lua-related.outputs.release }}
|
||||
commit: ${{ steps.git-related.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
|
||||
id: lua-related
|
||||
shell: lua {0}
|
||||
run: |
|
||||
local version = require 'version'
|
||||
print("::set-output name=name::"..version.string)
|
||||
print(("::set-output name=apkCode::%d"):format(version.apkCode))
|
||||
print(("::set-output name=code::%d"):format(version.code))
|
||||
print("::set-output name=release::"..version.string:gsub("V","",1))
|
||||
- name: Get Commit
|
||||
id: git-related
|
||||
shell: bash
|
||||
run: |
|
||||
echo "::set-output name=name::$(lua .github/workflows/getVersion.lua -name)"
|
||||
echo "::set-output name=apkCode::$(lua .github/workflows/getVersion.lua -apkCode)"
|
||||
echo "::set-output name=code::$(lua .github/workflows/getVersion.lua -code)"
|
||||
echo "::set-output name=release::$(lua .github/workflows/getVersion.lua -release)"
|
||||
echo "::set-output name=commit::$(git rev-parse --short ${{ GITHUB.SHA }})"
|
||||
|
||||
build-windows:
|
||||
@@ -51,7 +57,7 @@ jobs:
|
||||
with:
|
||||
name: Techmino_pre${{ needs.get-info.outputs.release }}_${{ needs.get-info.outputs.commit }}_Windows
|
||||
path: love
|
||||
|
||||
|
||||
build-linux:
|
||||
runs-on: ubuntu-20.04
|
||||
needs: get-info
|
||||
|
||||
2
.gitmodules
vendored
2
.gitmodules
vendored
@@ -1,3 +1,3 @@
|
||||
[submodule "Zframework"]
|
||||
path = Zframework
|
||||
url = git@github.com:26F-Studio/Zframework.git
|
||||
url = https://github.com/26F-Studio/Zframework.git
|
||||
|
||||
6
main.lua
6
main.lua
@@ -221,7 +221,7 @@ do--Z.setOnFocus
|
||||
if SCN.cur=='game'and SETTING.autoPause then
|
||||
pauseGame()
|
||||
end
|
||||
if SETTING.autoMute then
|
||||
if SETTING.autoMute and SCN.cur~='music' then
|
||||
TASK.removeTask_code(task_autoSoundOn)
|
||||
TASK.new(task_autoSoundOff)
|
||||
end
|
||||
@@ -340,6 +340,9 @@ SKIN.load{
|
||||
{name="ball_shaw",path='media/image/skin/ball_shaw.png'},
|
||||
{name="retro_notypey",path='media/image/skin/retro_notypey.png'},
|
||||
{name="pixel_chno",path='media/image/skin/pixel_chno.png'},
|
||||
{name="pastel_chno",path='media/image/skin/pastel_chno.png'},
|
||||
{name="letters_chno",path='media/image/skin/letters_chno.png'},
|
||||
{name="kanji_chno",path='media/image/skin/kanji_chno.png'},
|
||||
{name="textbone_mrz",path='media/image/skin/textbone_mrz.png'},
|
||||
{name="coloredbone_mrz",path='media/image/skin/coloredbone_mrz.png'},
|
||||
{name="wtf",path='media/image/skin/wtf_mrz.png'},
|
||||
@@ -386,6 +389,7 @@ LANG.init('zh',
|
||||
id=require'parts.language.lang_id',
|
||||
ja=require'parts.language.lang_ja',
|
||||
symbol=require'parts.language.lang_symbol',
|
||||
zh_code=require'parts.language.lang_zh_code',
|
||||
--1. Add language file to LANG folder;
|
||||
--2. Require it;
|
||||
--3. Add a button in parts/scenes/lang.lua;
|
||||
|
||||
BIN
media/image/skin/kanji_chno.png
Normal file
BIN
media/image/skin/kanji_chno.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 27 KiB |
BIN
media/image/skin/letters_chno.png
Normal file
BIN
media/image/skin/letters_chno.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 4.4 KiB |
BIN
media/image/skin/pastel_chno.png
Normal file
BIN
media/image/skin/pastel_chno.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 41 KiB |
@@ -1,18 +1,58 @@
|
||||
local gc_setColor,gc_draw=love.graphics.setColor,love.graphics.draw
|
||||
local ply_applyField=PLY.draw.applyField
|
||||
local function GetOpenHole(num)
|
||||
local function getOpenHole(num)
|
||||
return -math.abs(((num-1) % 18)-9)+10
|
||||
end
|
||||
local F={}
|
||||
local ranks={"10","9","8","7","6","5","4","3","2","1","S1","S2","S3","S4","S5","S6","S7","S8","S9","GM","GM+","TM","TM+","TM+₂","TM+₃", "TM+₄","TM+₅"}
|
||||
-- lines: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
||||
|
||||
-- local ranks={"10","9","8","7","6","5","4","3","2","1","S1","S2","S3","S4","S5","S6","S7","S8","S9","GM","GM+","TM","TM+","TM+₂","TM+₃", "TM+₄","TM+₅"}
|
||||
-- lines: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
||||
|
||||
local function getSmallNum(num)
|
||||
local smalldigit={[0]="₀","₁","₂","₃","₄","₅","₆","₇","₈","₉"}
|
||||
local str=tostring(num)
|
||||
local out=""
|
||||
for i=1,#str do
|
||||
out=out..smalldigit[tonumber(string.sub(str,i,i))]
|
||||
end
|
||||
return out
|
||||
end
|
||||
|
||||
local function getRank(index)
|
||||
if index<11 then -- rank 10 - 1
|
||||
return tostring(11-index)
|
||||
elseif index<20 then -- S1 - S9 ranks
|
||||
return "S"..index-10
|
||||
elseif index<24 then -- GM, GM+, TM, TM+ ranks
|
||||
local r={"GM","GM+","TM","TM+"}
|
||||
return r[index-19]
|
||||
else
|
||||
return "TM+"..getSmallNum(index-22)
|
||||
end
|
||||
end
|
||||
|
||||
local function generateGuide(num)
|
||||
local l=#F
|
||||
if l>num then
|
||||
return
|
||||
end
|
||||
for i=l,num do
|
||||
F[i] = {}
|
||||
local h=getOpenHole(i)
|
||||
for j=1,10 do
|
||||
F[i][j]=h==j and -1 or 21
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
fkey1=function(P)P.modeData.showGuide=not P.modeData.showGuide end,
|
||||
mesDisp=function(P)
|
||||
mText(TEXTOBJ.grade,63,190)
|
||||
mText(TEXTOBJ.line,63,310)
|
||||
setFont(55)
|
||||
mStr(ranks[P.modeData.rankPts],63,125)
|
||||
|
||||
mStr(getRank(P.modeData.rankPts),63,125)
|
||||
mStr(P.modeData.rankPts-1,63,245)
|
||||
ply_applyField(P)
|
||||
local mark=TEXTURE.puzzleMark
|
||||
gc_setColor(1,1,1)
|
||||
@@ -29,26 +69,22 @@ return{
|
||||
task=function(P)
|
||||
P.modeData.rankPts=1
|
||||
P.modeData.showGuide=true
|
||||
for i=1,50 do
|
||||
F[i] = {}
|
||||
local h=GetOpenHole(i)
|
||||
for j=1,10 do
|
||||
F[i][j]=h==j and -1 or 21
|
||||
end
|
||||
end
|
||||
generateGuide(10)
|
||||
end,
|
||||
hook_drop=function(P)
|
||||
local D=P.modeData
|
||||
D.rankPts=1
|
||||
for i=1,#P.field do
|
||||
local h=GetOpenHole(i)
|
||||
local h=getOpenHole(i)
|
||||
for j=1,10 do
|
||||
if P.field[i][j]>0 and h==j then return end
|
||||
if P.field[i][j]==0 and h~=j then return end
|
||||
if P.field[i][j]>0 and h==j then goto post_pts_calc end
|
||||
if P.field[i][j]==0 and h~=j then goto post_pts_calc end
|
||||
end
|
||||
if i==#P.field then return end
|
||||
if P.field[i+1][h]==0 then return end
|
||||
if i==#P.field then goto post_pts_calc end
|
||||
if P.field[i+1][h]==0 then goto post_pts_calc end
|
||||
D.rankPts=D.rankPts+1
|
||||
end
|
||||
::post_pts_calc::
|
||||
generateGuide(D.rankPts+20)
|
||||
end
|
||||
}
|
||||
|
||||
@@ -10,12 +10,20 @@ return{
|
||||
hook_die=function(P)
|
||||
local cc=P:clearFilledLines(P.garbageBeneath+1,#P.field-P.garbageBeneath)
|
||||
if cc>0 then
|
||||
local h=20-cc-P.garbageBeneath
|
||||
if h>0 then
|
||||
P:garbageRise(21,h,2e10-1)
|
||||
local clearH=cc+P.garbageBeneath
|
||||
if clearH<20 then
|
||||
P:garbageRise(21,20-clearH,2e10-1)
|
||||
if P.garbageBeneath>=20 then
|
||||
P:lose()
|
||||
end
|
||||
elseif P.garbageBeneath>0 and clearH>20 then
|
||||
local bonus=math.min(P.garbageBeneath,clearH-20)
|
||||
if bonus>0 then
|
||||
for _=1,bonus do
|
||||
LINE.discard(table.remove(P.field,1))
|
||||
LINE.discard(table.remove(P.visTime,1))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
@@ -10,12 +10,20 @@ return{
|
||||
hook_die=function(P)
|
||||
local cc=P:clearFilledLines(P.garbageBeneath+1,#P.field-P.garbageBeneath)
|
||||
if cc>0 then
|
||||
local h=20-cc-P.garbageBeneath-3
|
||||
if h>0 then
|
||||
P:garbageRise(21,h,2e10-1)
|
||||
if P.garbageBeneath>=20 then
|
||||
local clearH=cc+P.garbageBeneath
|
||||
if clearH<17 then
|
||||
P:garbageRise(21,17-clearH,2e10-1)
|
||||
if P.garbageBeneath>=17 then
|
||||
P:lose()
|
||||
end
|
||||
elseif P.garbageBeneath>0 and clearH>17 then
|
||||
local bonus=math.min(P.garbageBeneath,clearH-17)
|
||||
if bonus>0 then
|
||||
for _=1,bonus do
|
||||
LINE.discard(table.remove(P.field,1))
|
||||
LINE.discard(table.remove(P.visTime,1))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
Binary file not shown.
@@ -26,8 +26,8 @@ return{
|
||||
{"Official Website",
|
||||
"homepage mainpage websites",
|
||||
"help",
|
||||
"TThe official website of Techmino!\nYou can download the latest stable build of Techmino and change your profile there.\nClick on the globe icon to open the website in your browser.",
|
||||
"http://home.techmino.org",
|
||||
"The official website of Techmino!\nYou can download the latest stable build of Techmino and change your profile there.\nClick on the globe icon to open the website in your browser.",
|
||||
"http://101.43.110.22:10026",
|
||||
},
|
||||
{"Huiji Wiki",
|
||||
"huiji wiki",
|
||||
|
||||
@@ -11,7 +11,7 @@ return{
|
||||
"homepage mainpage ホームページ メインページ",
|
||||
"help",
|
||||
"Techminoのオフィシャルサイトです!\nプロファイルの編集などができます!",
|
||||
"http://home.techmino.org",
|
||||
"http://101.43.110.22:10026",
|
||||
},
|
||||
{"初心者の方々へ",
|
||||
"guide newbie noob readme ガイド 初心者 下手 下手くそ へた",
|
||||
|
||||
@@ -21,7 +21,7 @@ return{
|
||||
"official website homepage mainpage guanwang",
|
||||
"help",
|
||||
"Techmino的官网!\n可以在上面下载游戏本体,或者修改头像以及个人信息。\n\n游戏作者的一些话:强烈不建议在任何公开场合提及甚至宣传Techmino,更不要随便就对外公布我们的官网链接!请务必只在私下里向有基础或真的很有兴趣入坑认真玩的玩家推荐,不然很容易拉低社群质量破坏交流氛围,非常难处理,甚至有可能影响游戏的未来发展。为了保证游戏未来会变得越来越好玩,千万慎重考虑您对游戏的推广方式!感谢您对Techmino的支持!!感谢配合!!!",
|
||||
"http://home.techmino.org",
|
||||
"http://101.43.110.22:10026",
|
||||
},
|
||||
{"灰机Wiki",
|
||||
"huiji",
|
||||
@@ -640,7 +640,7 @@ return{
|
||||
"Hold的另一种表现形式,将手里的方块和Next槽中的第一个交换,一般同样不能连续使用。",
|
||||
},
|
||||
{"深降",
|
||||
"deepdrop shenjiang",
|
||||
"深降 deepdrop shenjiang",
|
||||
"term",
|
||||
"开启后当方块触底时,再次按下软降会让方块尝试向下穿墙寻找放得下的地方,如果有就会直接瞬移到那\n该功能更偏向用于技术研究,对于AI来说有了它可以完全不用再考虑旋转系统,形状能容得下的地方一定都能到达",
|
||||
},
|
||||
@@ -680,7 +680,7 @@ return{
|
||||
"攻击指通过消除给对手发送垃圾行;\n防御(相杀)指别人打过来攻击之后用攻击抵消;\n反击指抵消/吃下所有攻击后打出攻击。\n\n注:大多数方块游戏的攻防是1:1的,4行攻击抵消对手的4行攻击。",
|
||||
},
|
||||
{"连击(Combo)",
|
||||
"ren",
|
||||
"ren lianji",
|
||||
"term",
|
||||
"从第二次消除起叫1 REN/Combo,打出的攻击根据游戏设计的不同也不同。“REN” 这个名称来源于日语中的 “連”(れん)。",
|
||||
},
|
||||
@@ -700,17 +700,17 @@ return{
|
||||
"Side 1 Wide\n旁边空1列,是传统方块游戏里常见的消四打法。\n在现代方块对战中新手可以使用,短时间能打出大量攻击,但在高手场出场率不高,因为效率低,容易被对面一波打死,故只在极少数情况合适的时候用。",
|
||||
},
|
||||
{"S2W",
|
||||
"连击 ·side2wide",
|
||||
"连击 lianji ren side2wide",
|
||||
"term",
|
||||
"Side 2 Wide\n旁边空2列,是常见的连击打法。\n难度很低,现代方块对战中新手可以使用,结合Hold可以很轻松地打出大连击。高手场使用不多,因为准备时间太长,会被对面提前打进垃圾行,导致连击数减少或者直接Top Out,效率也没有特别高,故一套打完也不一定能杀人。",
|
||||
},
|
||||
{"S3W",
|
||||
"连击 ·side2wide",
|
||||
"连击 lianji ren side2wide",
|
||||
"term",
|
||||
"Side 3 Wide\n旁边空3列,不如2w常见的连击打法。能打出的连击数比2w多,但是难度偏大很容易断连。",
|
||||
},
|
||||
{"S4W",
|
||||
"连击 ·side4wide",
|
||||
"连击 lianji ren side4wide",
|
||||
"term",
|
||||
"Side 4 Wide\n旁边空4列,一种连击打法,能打出很高的连击,并且准备时间比别的Wide打法短,故动作快的话可以抢在对手打进垃圾之前堆很高然后打出超大连击。\n(因为可能会被提前打死,风险挺大,所以没有c4w那么不平衡)。",
|
||||
},
|
||||
@@ -720,22 +720,22 @@ return{
|
||||
"Center 1 Wide\n中间空1列,一种实战里消4同时辅助打TSD的打法,需要玩家理解<平衡法>,熟练之后可以轻松消四+T2输出,难度也不是特别大。",
|
||||
},
|
||||
{"C2W",
|
||||
"连击 ·center2wide centre2wide",
|
||||
"连击 lianji ren center2wide centre2wide",
|
||||
"term",
|
||||
"Center 2 Wide\n中间空2列,一种可能的连击打法(不常见)。",
|
||||
},
|
||||
{"C3W",
|
||||
"连击 ·center3wide centre3wide",
|
||||
"连击 lianji ren center3wide centre3wide",
|
||||
"term",
|
||||
"Center 3 Wide\n中间空3列,一种可能的连击打法(不常见)。",
|
||||
},
|
||||
{"C4W",
|
||||
"连击 ·center4wide centre4wide",
|
||||
"连击 lianji ren center4wide centre4wide",
|
||||
"term",
|
||||
"Center 4 Wide\n中间空四列,一种连击打法,能打出很高的连击,利用了大多数专业对战方块游戏的死亡判定机制,可以放心堆高不担心被顶死,然后开始连击。是一种利用游戏机制的不平衡策略(尤其在开局时),观赏性不是很强还可以以弱胜强,成本太低所以成为了部分游戏中约定的类似 “禁招” 的东西,请在了解情况后再使用,不然可能会被别人骂。\nTechmino中虑到了平衡问题,所以c4w的强度没有别的游戏那么夸张。",
|
||||
},
|
||||
{"N-Res",
|
||||
"连击 ·residual c4w s4w",
|
||||
"连击 lianji ren residual c4w s4w",
|
||||
"term",
|
||||
"N-Residual\nN-剩余,指4w连击楼底部留几个方格,常用的是3-Res和6-Res。\n3-Res路线少比较好学,成功率也很高,实战完全够用\n6-Res路线多更难用,但是计算力很强的话比3-Res更稳,也可以用来完成特殊挑战(比如Techmino的c4w练习要求100连击通关)。\n\n注:优先使用6-Res,然后是3-res和5-Res,最后是4-Res",
|
||||
},
|
||||
|
||||
@@ -22,7 +22,8 @@ return{
|
||||
royale_remain="$1 Players Left",
|
||||
powerUp={[0]="+000%","+025%","+050%","+075%","+100%"},
|
||||
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!!","15 Combo!!","16 Combo!!","17 Combo!!!","18 Combo!!!","19 Combo!!!","MEGACMB"},
|
||||
spin="-spin",
|
||||
spin="-spin ",
|
||||
spinNC="-spin",
|
||||
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
|
||||
cleared="$1 lines",
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
@@ -326,7 +327,7 @@ return{
|
||||
WidgetText={
|
||||
main={
|
||||
offline="Single Player",
|
||||
qplay="Last Played",
|
||||
qplay="Last Played: ",
|
||||
online="Multiplayer",
|
||||
custom="Custom Game",
|
||||
setting="Settings",
|
||||
@@ -555,11 +556,11 @@ return{
|
||||
shape="Shape",
|
||||
},
|
||||
setting_touchSwitch={
|
||||
b1= "Move Left:", b2="Move Right:", b3="Rotate Right:", b4="Rotate Left:",
|
||||
b5= "Rotate 180°:", b6="Hard Drop:", b7="Soft Drop:", b8="Hold:",
|
||||
b9= "Function 1:", b10="Function 2:", b11="Instant Left:", b12="Instant Right:",
|
||||
b13="Sonic Drop:", b14="Down 1:", b15="Down 4:", b16="Down 10:",
|
||||
b17="Left Drop:", b18="Right Drop:",b19="Left Zangi:", b20="Right Zangi:",
|
||||
b1= "Move Left:", b2="Move Right:", b3="Rotate Right:", b4="Rotate Left:",
|
||||
b5= "Rotate 180°:", b6="Hard Drop:", b7="Soft Drop:", b8="Hold:",
|
||||
b9= "Function 1:", b10="Function 2:", b11="Instant Left:", b12="Instant Right:",
|
||||
b13="Sonic Drop:", b14="Down 1:", b15="Down 4:", b16="Down 10:",
|
||||
b17="Left Drop:", b18="Right Drop:", b19="Left Zangi:", b20="Right Zangi:",
|
||||
|
||||
norm="Normal",
|
||||
pro="Advanced",
|
||||
@@ -886,7 +887,7 @@ return{
|
||||
"1next 1hold!",
|
||||
"1next 6hold!",
|
||||
"20G actually is a brand new game rule!",
|
||||
"40-line Sprint WR: 14.915s by Reset_",
|
||||
"40-line Sprint WR: 14.708s by hiryu",
|
||||
"6next 1hold!",
|
||||
"6next 6hold?!",
|
||||
"Achievement system coming soon!",
|
||||
|
||||
@@ -21,7 +21,8 @@ return{
|
||||
atkModeName={"Al azar","Medallas","KOs","Atacantes"},
|
||||
royale_remain="$1 Jugadores Restantes",
|
||||
cmb={nil,"Combo de 1","Combo de 2","Combo de 3","Combo de 4","Combo de 5","Combo de 6","Combo de 7","Combo de 8","Combo de 9","¡Combo de 10!","¡Combo de 11!","¡Combo de 12!","¡Combo de 13!","¡Combo de 14!","¡Combo de 15!","¡Combo de 16!","¡Combo de 17!","¡Combo de 18!","¡Combo de 19!","MEGACOMBO"},
|
||||
spin="-spin",
|
||||
spin="-spin ",
|
||||
spinNC="-spin",
|
||||
clear={"Single","Doble","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
|
||||
cleared="$1 líneas",
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
@@ -326,7 +327,7 @@ return{
|
||||
WidgetText={
|
||||
main={
|
||||
offline="Mapa de Modos",
|
||||
qplay="Reciente",
|
||||
qplay="Reciente: ",
|
||||
online="Multijugador",
|
||||
custom="Personalizado",
|
||||
setting="Opciones",
|
||||
|
||||
@@ -11,7 +11,8 @@ return{
|
||||
atkModeName={"Aléatoire","Badges","K.O.s faciles","Attaquants"},
|
||||
royale_remain="$1 Joueurs restants",
|
||||
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!!","15 Combo!!","16 Combo!!","17 Combo!!!","18 Combo!!!","19 Combo!!!","MEGACMB"},
|
||||
spin="-spin",
|
||||
spin="-spin ",
|
||||
spinNC="-spin",
|
||||
clear={"Simple","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
|
||||
-- cleared="$1 lines",
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
@@ -293,7 +294,7 @@ return{
|
||||
WidgetText={
|
||||
main={
|
||||
-- offline="Solo",
|
||||
-- qplay="Last Play",
|
||||
-- qplay="Last Play: ",
|
||||
-- online="Multi",
|
||||
-- custom="Mode perso.",
|
||||
setting="Paramètres",
|
||||
|
||||
@@ -23,8 +23,9 @@ return{
|
||||
royale_remain="$1 Pemain Tersisa",
|
||||
powerUp={[0]="+000%","+025%","+050%","+075%","+100%"},
|
||||
cmb={nil,"1 Kombo","2 Kombo","3 Kombo","4 Kombo","5 Kombo","6 Kombo","7 Kombo","8 Kombo","9 Kombo","10 Kombo!","11 Kombo!","12 Kombo!","13 Kombo!","14 Kombo!!","15 Kombo!!","16 Kombo!!","17 Kombo!!!","18 Kombo!!!","19 Kombo!!!","MEGA KOMBO"},
|
||||
spin=" spin",
|
||||
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
|
||||
spin=" spin ",
|
||||
spinNC=" spin",
|
||||
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Oktacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
|
||||
cleared="$1 baris",
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
PC="PC",HPC="Setengah PC",
|
||||
@@ -177,7 +178,7 @@ return{
|
||||
"Baris/Baris Gali:",
|
||||
"Serangan/Serangan Gali:",
|
||||
"Diterima:",
|
||||
"Jumlah Tindakan Membuat Baris:",
|
||||
"Baris:",
|
||||
"Spins:",
|
||||
"B2B/B3B/PC/Setengah PC:",
|
||||
"Efisiensi Tombol:",
|
||||
@@ -327,7 +328,7 @@ return{
|
||||
WidgetText={
|
||||
main={
|
||||
offline="Main Sendiri",
|
||||
qplay="Terakhir Dimain",
|
||||
qplay="Terakhir Dimain: ",
|
||||
online="Multipemain",
|
||||
custom="Permainan Tersesuai",
|
||||
setting="Pengaturan",
|
||||
@@ -693,7 +694,7 @@ return{
|
||||
register="Daftar",
|
||||
email="Alamat Email",
|
||||
password="Password",
|
||||
-- showEmail="Show Email",
|
||||
showEmail="Tunjukkan Email",
|
||||
keepPW="Ingat Saya",
|
||||
login="Masuk",
|
||||
},
|
||||
@@ -780,7 +781,7 @@ return{
|
||||
['dig_eff_40l']= {"Gali", "EFISIENSI 40L", "Gali 40 baris!"},
|
||||
['dig_eff_100l']= {"Gali", "EFISIENSI 100L","Gali 100 baris!"},
|
||||
['dig_eff_400l']= {"Gali", "EFISIENSI 400L","Gali 400 baris!"},
|
||||
--['dig_quad_10l']= {"Dig", "TECHRASH 10L", "Dig 10 garbage lines using only techrash!"},
|
||||
['dig_quad_10l']= {"Gali", "TECHRASH 10L", "Gali 10 baris hanya dengan techrash!"},
|
||||
['drought_n']= {"Nasib Buruk", "100L", "Tidak ada blok I..."},
|
||||
['drought_l']= {"Nasib Buruk+", "100L", "Nasib sangat buruk..."},
|
||||
['marathon_n']= {"Maraton", "NORMAL", "200-baris maraton dengan kecepatan meningkat"},
|
||||
@@ -803,14 +804,14 @@ return{
|
||||
['round_u']= {"Giliran", "TERAKHIR", "Giliran main melawan AI!"},
|
||||
['big_n']= {"Besar", "NORMAL", "Main dalam tempat main lebih kecil!"},
|
||||
['big_h']= {"Besar", "SULIT", "Main dalam tempat main lebih kecil!"},
|
||||
['master_n']= {"Jago", "NORMAL", "Untuk pemula 20G"},
|
||||
['master_h']= {"Jago", "SULIT", "Untuk pro 20G"},
|
||||
['master_m']= {"Jago", "M21", "Untuk jago 20G"},
|
||||
['master_final']= {"Jago", "TERAKHIR", "Lebih dari 20G"},
|
||||
['master_ph']= {"Jago", "KHAYALAN", "???"},
|
||||
['master_g']= {"Jago", "BERTINGKAT", "Dapatkan tingkat tertinggi!"},
|
||||
['master_ex']= {"Sangat Jago", "EKSTRA", "Blok tidak kelihatan"},
|
||||
['master_instinct']={"Jago", "INSTINK", "Bagaimana jika blok terkontrol tersembunyi?"},
|
||||
['master_n']= {"Ahli", "NORMAL", "Untuk pemula 20G"},
|
||||
['master_h']= {"Ahli", "SULIT", "Untuk pro 20G"},
|
||||
['master_m']= {"Ahli", "M21", "Untuk jago 20G"},
|
||||
['master_final']= {"Ahli", "TERAKHIR", "Lebih dari 20G"},
|
||||
['master_ph']= {"Ahli", "KHAYALAN", "???"},
|
||||
['master_g']= {"Ahli", "BERTINGKAT", "Dapatkan tingkat tertinggi!"},
|
||||
['master_ex']= {"Sangat Ahli", "EKSTRA", "Blok tidak kelihatan"},
|
||||
['master_instinct']={"Ahli", "INSTINK", "Bagaimana jika blok terkontrol tersembunyi?"},
|
||||
['strategy_e']= {"Strategi", "MUDAH", "Keputusan 20G cepat"},
|
||||
['strategy_h']= {"Strategi", "SULIT", "Keputusan 20G cepat"},
|
||||
['strategy_u']= {"Strategi", "TERAKHIR", "Keputusan 20G cepat"},
|
||||
@@ -869,8 +870,8 @@ return{
|
||||
['infinite_dig']= {"Tak Terbatas: Gali","", "Gali, gali, gali"},
|
||||
['marathon_inf']= {"Maraton", "TAK TERBATAS", "Maraton tanpa akhir."},
|
||||
|
||||
['custom_clear']= {"Tersesuai", "NORMAL"},
|
||||
['custom_puzzle']= {"Tersesuai", "TEKA-TEKI"},
|
||||
['custom_clear']= {"Tersesuai", "NORMAL"},
|
||||
['custom_puzzle']= {"Tersesuai", "TEKA-TEKI"},
|
||||
},
|
||||
getTip={refuseCopy=true,
|
||||
"(RUR'U')R'FR2U'R'U'(RUR'F')",
|
||||
@@ -882,7 +883,7 @@ return{
|
||||
"↑↑↓↓←→←→BA",
|
||||
"$include<studio.h>",
|
||||
"20G sebenarnya peraturan permainan baru!",
|
||||
"Rekor dunia 40L: 14.915s dari Reset_",
|
||||
"Rekor dunia 40L: 14.708s dari hiryu",
|
||||
"Sistem pencapaian segera akan datang!",
|
||||
"ALL SPIN!",
|
||||
"Am G F G",
|
||||
|
||||
@@ -23,7 +23,8 @@ return{
|
||||
royale_remain="残り $1 人",
|
||||
powerUp={[0]="+000%","+025%","+050%","+075%","+100%"},
|
||||
cmb={nil,"1 REN","2 REN","3 REN","4 REN","5 REN","6 REN","7 REN","8 REN","9 REN","10 REN!","11 REN!","12 REN!","13 REN!","14 REN!!","15 REN!!","16 REN!!","17 REN!!!","18 REN!!!","19 REN!!!","MEGAREN"},
|
||||
spin="-spin",
|
||||
spin="-spin ",
|
||||
spinNC="-spin",
|
||||
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
|
||||
cleared="$1 Lines",
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
@@ -328,7 +329,7 @@ return{
|
||||
WidgetText={
|
||||
main={
|
||||
offline="ソロプレイ",
|
||||
qplay="続きから",
|
||||
qplay="続きから: ",
|
||||
online="マルチプレイ",
|
||||
custom="カスタムプレイ",
|
||||
setting="設定",
|
||||
@@ -769,13 +770,19 @@ return{
|
||||
['sprint_100l']= {"スプリント", "100L", "100ライン消せ!"},
|
||||
['sprint_400l']= {"スプリント", "400L", "400ライン消せ!"},
|
||||
['sprint_1000l']= {"スプリント", "1,000L", "1,000ライン消せ!"},
|
||||
['sprintPenta']= {"スプリント", "PENTOMINO", "ペントミノで40ライン消せ!"},
|
||||
['sprintPenta']= {"スプリント", "PENTOMINO", "ペントミノで40ライン"},
|
||||
['sprintMPH']= {"スプリント", "MPH", "ミノ順なし\nネクストなし\nホールドなし!"},
|
||||
['sprint123']= {"スプリント", "M123", "モノミノ、ドミノ、トリミノで40ライン"},
|
||||
['secret_grade']= {"裏GM", "", "ガイドに従ってジグザグに穴を作れ!"},
|
||||
['dig_10l']= {"掘り", "10L", "10ライン下穴を掘れ!"},
|
||||
['dig_40l']= {"掘り", "40L", "40ライン下穴を掘れ!"},
|
||||
['dig_100l']= {"掘り", "100L", "100ライン下穴を掘れ!"},
|
||||
['dig_400l']= {"掘り", "400L", "400ライン下穴を掘れ!"},
|
||||
--['dig_quad_10l']= {"堀り", "TECHRASH 10L", "techrashだけで10ライン下穴を掘れ!"},
|
||||
['dig_eff_10l']= {"堀り", "EFFICIENCY 10L", "最小のミノ数で10ライン掘れ!"},
|
||||
['dig_eff_40l']= {"堀り", "EFFICIENCY 40L", "最小のミノ数で40ライン掘れ!"},
|
||||
['dig_eff_100l']= {"堀り", "EFFICIENCY 100L","最小のミノ数で100ライン掘れ!"},
|
||||
['dig_eff_400l']= {"堀り", "EFFICIENCY 400L","最小のミノ数で400ライン掘れ!"},
|
||||
['dig_quad_10l']= {"堀り", "TECHRASH 10L", "techrashだけで10ライン下穴を掘れ!"},
|
||||
['drought_n']= {"ドラウト", "100L", "Iミノ一切無し!"},
|
||||
['drought_l']= {"ドラウト+", "100L", "わったーふ◯っく!"},
|
||||
['marathon_n']= {"マラソン", "NORMAL", "加速する中で200ラインマラソン!"},
|
||||
@@ -796,11 +803,14 @@ return{
|
||||
['round_h']= {"ターン制", "HARD", "ターン制で高レベルAIと勝負!"},
|
||||
['round_l']= {"ターン制", "LUNATIC", "ターン制でプロレベルAIと勝負!"},
|
||||
['round_u']= {"ターン制", "ULTIMATE", "ターン制で神レベルAIと勝負!"},
|
||||
['big_n']= {"ビッグ", "NORMAL", "小さい盤面でプレイ!"},
|
||||
['big_h']= {"ビッグ", "HARD", "小さい盤面でプレイ!"},
|
||||
['master_n']= {"マスター", "NORMAL", "20G 初心者方へ"},
|
||||
['master_h']= {"マスター", "HARD", "20G 中級者の方へ"},
|
||||
['master_m']= {"マスター", "M21", "20G 上級者の方へ"},
|
||||
['master_final']= {"マスター", "FINAL", "20G その先へ"},
|
||||
['master_ph']= {"マスター", "PHANTASM", "???"},
|
||||
['master_g']= {"マスター", "GRADED", "最高段位を取れ!"},
|
||||
['master_ex']= {"グランドマスター", "EXTRA", "一瞬よりも短い永遠"},
|
||||
['master_instinct']={"マスター", "INSTINCT", "もしミノが一切見えなくなったら?"},
|
||||
['strategy_e']= {"ストラテジー", "EASY", "20Gでの素早い判断"},
|
||||
@@ -859,7 +869,7 @@ return{
|
||||
['ultra']= {'ウルトラ', "EXTRA", "2分以内にできるだけ多くの点数を取る"},
|
||||
['infinite']= {"無限", "", "サンドボックス"},
|
||||
['infinite_dig']= {"無限: 掘り", "", "掘れ掘れ掘れ"},
|
||||
['marathon_inf']= {"マラソン", "INFINITE", "永遠のマラソン"},
|
||||
['marathon_inf']= {"マラソン", "INFINITE", "ずっとマラソン"},
|
||||
|
||||
['custom_clear']= {"カスタム", "NORMAL"},
|
||||
['custom_puzzle']= {"カスタム", "PUZZLE"},
|
||||
@@ -883,7 +893,7 @@ getTip={refuseCopy=true,
|
||||
"20PCって何?",
|
||||
"26TSDって何?",
|
||||
"2つの回転を使ってみよう、3つ使うとさらにいいです!",
|
||||
"40-line Sprint WR: 14.915s by Reset_",
|
||||
"40-line Sprint WR: 14.708s by hiryu",
|
||||
"6next 1hold!",
|
||||
"6next 6hold?!",
|
||||
"低音を響かせろ!",
|
||||
|
||||
@@ -12,7 +12,8 @@ return{
|
||||
atkModeName={"Aleatório","Emblemas","K.O.s","Atacantes"},
|
||||
royale_remain="$1 Jogadores restantes",
|
||||
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!!","15 Combo!!","16 Combo!!","17 Combo!!!","18 Combo!!!","19 Combo!!!","MEGACMB"},
|
||||
spin="-spin",
|
||||
spin="-spin ",
|
||||
spinNC="-spin",
|
||||
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
|
||||
-- cleared="$1 lines",
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
@@ -315,7 +316,7 @@ return{
|
||||
WidgetText={
|
||||
main={
|
||||
offline="Solo",
|
||||
-- qplay="Last Play",
|
||||
-- qplay="Last Play: ",
|
||||
online="Multi",
|
||||
custom="Custom",
|
||||
setting="Config.",
|
||||
@@ -867,7 +868,7 @@ return{
|
||||
"1next 1hold!",
|
||||
"1next 6hold!",
|
||||
"Na verdade 20G é uma regra de jogo nova.",
|
||||
"40-lines Sprint WR: 14.915s by Reset_",
|
||||
"40-lines Sprint WR: 14.708s by hiryu",
|
||||
"6next 1hold!",
|
||||
"6next 6hold?!",
|
||||
"ALL SPIN!",
|
||||
|
||||
@@ -22,7 +22,8 @@ return{
|
||||
atkModeName={"?","( )","!","←→"},
|
||||
royale_remain="$1 ~",
|
||||
cmb={nil,"!","!!","!!!","!!!!","!!!!!","!!!!!!","!!!!!!!","!!!!!!!!","!!!!!!!!!","!!!!!!!!!!","!!!!!!!!!!!","!!!!!!!!!!!!","!!!!!!!!!!!!!","!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!!!!","!!!!!!!!!!!!!!!!!!!!",},
|
||||
spin=" ~",
|
||||
spinNC=" ~",
|
||||
spin=" ~ ",
|
||||
clear={"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","20+"},
|
||||
cleared="",
|
||||
mini="v",b2b="^ ",b3b="^^ ",
|
||||
@@ -135,7 +136,7 @@ return{
|
||||
WidgetText={
|
||||
main={
|
||||
offline="!",
|
||||
qplay="(!)",
|
||||
qplay="(!): ",
|
||||
online="!!!",
|
||||
custom="_?!",
|
||||
setting="_?_",
|
||||
|
||||
@@ -22,7 +22,8 @@ return{
|
||||
royale_remain="剩余 $1 名玩家",
|
||||
powerUp={[0]="000%UP","025%UP","050%UP","075%UP","100%UP"},
|
||||
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
|
||||
spin="-spin",
|
||||
spin="-spin ",
|
||||
spinNC="-spin",
|
||||
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
|
||||
cleared="$1 lines",
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
@@ -203,7 +204,7 @@ return{
|
||||
"",
|
||||
"使用LÖVE引擎",
|
||||
"错误或者建议请附带截图发送到内测群或者作者邮箱~",
|
||||
"仅通过官网 home.techmino.org 免费下载/更新",
|
||||
"仅通过官网 *暂无域名,见词典* 免费下载/更新",
|
||||
"其他渠道获得游戏皆有被修改/加广告/植入病毒的风险,程序只申请了振动&联网权限!",
|
||||
"若由于被修改的本游戏产生的各种损失作者不负责(怎么负责啊我又没法管)",
|
||||
FNNS and"/"or"请从正规途径获得最新版,游戏现为免费,不过有打赏当然感谢啦~",
|
||||
@@ -327,7 +328,7 @@ return{
|
||||
WidgetText={
|
||||
main={
|
||||
offline="单机游戏",
|
||||
qplay="快速开始",
|
||||
qplay="快速开始: ",
|
||||
online="联网游戏",
|
||||
custom="自定义",
|
||||
setting="设置",
|
||||
@@ -884,7 +885,7 @@ return{
|
||||
"1next 6hold!",
|
||||
"3.1415926535897932384(\\d{3})",
|
||||
"3next 1hold?",
|
||||
"40行世界纪录:14.915s by Reset_",
|
||||
"40行世界纪录:14.708s by hiryu",
|
||||
"6236326236327175",
|
||||
"626in1",
|
||||
"6next 1hold!",
|
||||
|
||||
1303
parts/language/lang_zh_code.lua
Normal file
1303
parts/language/lang_zh_code.lua
Normal file
File diff suppressed because it is too large
Load Diff
@@ -22,7 +22,8 @@ return{
|
||||
royale_remain="剩下 $1 名玩家",
|
||||
powerUp={[0]="000%UP","025%UP","050%UP","075%UP","100%UP"},
|
||||
cmb={nil,"1 Combo","2 Combo","3 Combo","4 Combo","5 Combo","6 Combo","7 Combo","8 Combo","9 Combo","10 Combo!","11 Combo!","12 Combo!","13 Combo!","14 Combo!","15 Combo!","16 Combo!","17 Combo!","18 Combo!","19 Combo!","MEGACMB"},
|
||||
spin="-spin",
|
||||
spin="-spin ",
|
||||
spinNC="-spin",
|
||||
clear={"Single","Double","Triple","Techrash","Pentacrash","Hexacrash","Heptacrash","Octacrash","Nonacrash","Decacrash","Undecacrash","Dodecacrash","Tridecacrash","Tetradecacrash","Pentadecacrash","Hexadecacrash","Heptadecacrash","Octadecacrash","Nonadecacrash","Ultracrash","Impossicrash"},
|
||||
cleared="$1 lines",
|
||||
mini="Mini",b2b="B2B ",b3b="B2B2B ",
|
||||
@@ -327,7 +328,7 @@ return{
|
||||
WidgetText={
|
||||
main={
|
||||
offline="單人遊戲",
|
||||
qplay="快速開始",
|
||||
qplay="快速開始: ",
|
||||
online="網路遊戲",
|
||||
custom="自定義",
|
||||
setting="設置",
|
||||
|
||||
@@ -1,5 +1,26 @@
|
||||
local ranks={"Grade 10","Grade 9","Grade 8","Grade 7","Grade 6","Grade 5","Grade 4","Grade 3","Grade 2","Grade 1","S1","S2","S3","S4","S5","S6","S7","S8","S9","GM","GM+","TM","TM+","TM+₂","TM+₃", "TM+₄","TM+₅"}
|
||||
-- index: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
||||
local function getSmallNum(num)
|
||||
local smalldigit={[0]="₀","₁","₂","₃","₄","₅","₆","₇","₈","₉"}
|
||||
local str=tostring(num)
|
||||
local out=""
|
||||
for i=1,#str do
|
||||
out=out..smalldigit[tonumber(string.sub(str,i,i))]
|
||||
end
|
||||
return out
|
||||
end
|
||||
|
||||
local function getRank(index)
|
||||
if index<11 then -- rank 10 - 1
|
||||
return "Grade "..tostring(11-index)
|
||||
elseif index<20 then -- S1 - S9 ranks
|
||||
return "S"..index-10
|
||||
elseif index<24 then -- GM, GM+, TM, TM+ ranks
|
||||
local r={"GM","GM+","TM","TM+"}
|
||||
return r[index-19]
|
||||
else
|
||||
return "TM+"..getSmallNum(index-22)
|
||||
end
|
||||
end
|
||||
|
||||
return{
|
||||
env={
|
||||
drop=180,lock=180,
|
||||
@@ -8,7 +29,7 @@ return{
|
||||
bg='bg2',bgm='race',
|
||||
},
|
||||
score=function(P)return{P.modeData.rankPts,P.stat.piece}end,
|
||||
scoreDisp=function(D)return ranks[D[1]].." "..D[2].." Pieces"end,
|
||||
scoreDisp=function(D)return getRank(D[1]).." "..D[2].." Pieces"end,
|
||||
comp=function(a,b)return a[1]>b[1]or a[1]==b[1]and a[2]<b[2]end,
|
||||
getRank=function(P)
|
||||
local G=P.modeData.rankPts
|
||||
|
||||
@@ -15,7 +15,7 @@ return{
|
||||
{font=65,name="世界沃德"},
|
||||
{font=65,name="Petris"},
|
||||
{font=65,name="Zakeru"},
|
||||
{font=65,name="镝"},
|
||||
{font=65,name="Dysprosium"},
|
||||
{font=65,name="HitachiMako"},
|
||||
{font=65,name="我慌死了"},
|
||||
{font=65,name="PESWGGL"},
|
||||
@@ -32,6 +32,7 @@ return{
|
||||
{font=65,name="[**昆]"},
|
||||
{font=65,name="[**浩]"},
|
||||
{font=65,name="sakurw"},
|
||||
{font=65,name="[**霖]"},
|
||||
|
||||
{font=25,name="八零哥"},
|
||||
{font=25,name="蕴空之灵"},
|
||||
@@ -133,4 +134,8 @@ return{
|
||||
{font=25,name="你的忘机已上羡"},
|
||||
{font=25,name="茗妖屿沉"},
|
||||
{font=25,name="Not Tomorrow"},
|
||||
{font=25,name="[**水]"},
|
||||
{font=25,name="[**萩]"},
|
||||
{font=25,name="gong"},
|
||||
{font=25,name="T2003.George2003"},
|
||||
}
|
||||
|
||||
@@ -1732,8 +1732,8 @@ do
|
||||
if dospin then
|
||||
cscore=(spinSCR[C.name]or spinSCR[8])[cc]
|
||||
if self.b2b>800 then
|
||||
self:showText(text.b3b..text.block[C.name]..text.spin.." "..text.clear[cc],0,-30,35,'stretch')
|
||||
yomi = yomi..text.b3b..text.block[C.name]..text.spin.." "..text.clear[cc]
|
||||
self:showText(text.b3b..text.block[C.name]..text.spin..text.clear[cc],0,-30,35,'stretch')
|
||||
yomi = yomi..text.b3b..text.block[C.name]..text.spin..text.clear[cc]
|
||||
atk=b2bATK[cc]+cc*.5
|
||||
exblock=exblock+1
|
||||
cscore=cscore*2
|
||||
@@ -1742,8 +1742,8 @@ do
|
||||
VOC.play('b3b',CHN)
|
||||
end
|
||||
elseif self.b2b>=50 then
|
||||
self:showText(text.b2b..text.block[C.name]..text.spin.." "..text.clear[cc],0,-30,35,'spin')
|
||||
yomi = yomi..text.b2b..text.block[C.name]..text.spin.." "..text.clear[cc]
|
||||
self:showText(text.b2b..text.block[C.name]..text.spin..text.clear[cc],0,-30,35,'spin')
|
||||
yomi = yomi..text.b2b..text.block[C.name]..text.spin..text.clear[cc]
|
||||
atk=b2bATK[cc]
|
||||
cscore=cscore*1.2
|
||||
Stat.b2b=Stat.b2b+1
|
||||
@@ -1751,8 +1751,8 @@ do
|
||||
VOC.play('b2b',CHN)
|
||||
end
|
||||
else
|
||||
self:showText(text.block[C.name]..text.spin.." "..text.clear[cc],0,-30,45,'spin')
|
||||
yomi = yomi..text.block[C.name]..text.spin.." "..text.clear[cc]
|
||||
self:showText(text.block[C.name]..text.spin..text.clear[cc],0,-30,45,'spin')
|
||||
yomi = yomi..text.block[C.name]..text.spin..text.clear[cc]
|
||||
atk=2*cc
|
||||
end
|
||||
sendTime=20+atk*20
|
||||
@@ -1942,7 +1942,7 @@ do
|
||||
|
||||
--Spin bonus
|
||||
if dospin then
|
||||
self:showText(text.block[C.name]..text.spin,0,-30,45,'appear')
|
||||
self:showText(text.block[C.name]..text.spinNC,0,-30,45,'appear')
|
||||
self.b2b=self.b2b+20
|
||||
if self.sound then
|
||||
SFX.play('spin_0')
|
||||
|
||||
@@ -8,6 +8,7 @@ local langList={
|
||||
id="Bahasa Indonesia",
|
||||
ja="日本語",
|
||||
symbol="?????",
|
||||
zh_code="Code(zh);"
|
||||
}
|
||||
local languages={
|
||||
"Language Langue Lingua",
|
||||
@@ -60,7 +61,7 @@ scene.widgetList={
|
||||
|
||||
WIDGET.newButton{x=1000,y=210,w=330,h=100,font=40,fText=langList.zh, color='C',sound='click',code=function()_setLang('zh')end},
|
||||
WIDGET.newButton{x=1000,y=330,w=330,h=100,font=40,fText=langList.zh_trad, color='S',sound='click',code=function()_setLang('zh_trad')end},
|
||||
WIDGET.newKey {x=1000,y=450,w=330,h=100,font=40,fText='', color='P'},
|
||||
WIDGET.newButton{x=1000,y=450,w=330,h=100,font=40,fText=langList.zh_code, color='P',sound='click',code=function()_setLang('zh_code')end},
|
||||
|
||||
WIDGET.newButton{name='back',x=1000,y=570,w=330,h=100,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ end
|
||||
|
||||
function scene.resize()
|
||||
local qpModeName=text.modes[STAT.lastPlay]and text.modes[STAT.lastPlay][1]or"["..STAT.lastPlay.."]"
|
||||
scene.widgetList[2]:setObject(text.WidgetText.main.qplay..": "..qpModeName)
|
||||
scene.widgetList[2]:setObject(text.WidgetText.main.qplay..qpModeName)
|
||||
end
|
||||
|
||||
function scene.mouseDown(x,y)
|
||||
@@ -128,6 +128,7 @@ function scene.keyDown(key,isRep)
|
||||
end
|
||||
|
||||
function scene.update(dt)
|
||||
if dt>.26 then return end
|
||||
PLAYERS[1]:update(dt)
|
||||
scrollX=scrollX-162*dt
|
||||
if scrollX<-tip:getWidth()then
|
||||
|
||||
@@ -50,7 +50,7 @@ function scene.sceneInit()
|
||||
S.piece/S.time*24, --Line'PM
|
||||
S.dig/S.time*60, --DigPM
|
||||
}
|
||||
val={1/80,1/80,1/80,1/60,1/100,1/40}
|
||||
val={1/80,1/160,1/120,1/80,1/100,1/40}
|
||||
|
||||
--Normalize Values
|
||||
for i=1,6 do
|
||||
|
||||
@@ -141,8 +141,8 @@ scene.widgetList={
|
||||
listBox,
|
||||
WIDGET.newButton{name='import',x=180,y=640,w=140,h=80,color='lB',code=pressKey'cV',font=50,fText=CHAR.icon.import},
|
||||
WIDGET.newButton{name='export',x=350,y=640,w=140,h=80,color='lR',code=pressKey'cC',font=50,fText=CHAR.icon.export},
|
||||
WIDGET.newButton{name='play', x=700,y=640,w=170,h=80,color='lY',code=pressKey'return',font=65,fText=CHAR.icon.play},
|
||||
WIDGET.newButton{name='delete',x=850,y=640,w=80,h=80,color='lR',code=pressKey'delete',font=50,fText=CHAR.icon.trash},
|
||||
WIDGET.newButton{name='play', x=640,y=640,w=170,h=80,color='lY',code=pressKey'return',font=65,fText=CHAR.icon.play},
|
||||
WIDGET.newButton{name='delete',x=860,y=640,w=80,h=80,color='lR',code=pressKey'delete',font=50,fText=CHAR.icon.trash},
|
||||
WIDGET.newButton{name='back', x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene},
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,18 @@ return[=[
|
||||
未来计划:
|
||||
R E M A K E
|
||||
|
||||
0.17.5: 昏暗 Dim
|
||||
新增:
|
||||
新皮肤:kanji,letters,pastel(by C₂₉H₂₅N₃O₅) #723
|
||||
改动:
|
||||
回放菜单按钮位置微调
|
||||
调整雷达图三个轴的比例
|
||||
在音乐室场景失去焦点不会自动静音 #710
|
||||
堆叠模式消除超过目标线高度会奖励消除实心垃圾行
|
||||
更新日文翻译
|
||||
修复:
|
||||
主菜单ai不再会因为失焦而md致死
|
||||
|
||||
0.17.4: 昏暗 Dim
|
||||
改动:
|
||||
TRS里T的1→0/3→0新增一个上1的踢
|
||||
|
||||
@@ -12,6 +12,6 @@
|
||||
|
||||
A collection of various modern block game rules, more ways to play, and some new things added for a new experience.
|
||||
|
||||
[官网(建设中) Official website (WIP)](http://home.techmino.org)
|
||||
[官网(建设中) Official website (WIP)](http://101.43.110.22:10026)
|
||||
|
||||
[维基(建设中) Github wiki](https://github.com/26F-Studio/Techmino/wiki)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
return{
|
||||
["apkCode"]=442,
|
||||
["code"]=1704,
|
||||
["string"]="V0.17.4",
|
||||
["apkCode"]=443,
|
||||
["code"]=1705,
|
||||
["string"]="V0.17.5",
|
||||
["room"]="ver A-7",
|
||||
["name"]="矿井 Mine",
|
||||
["name"]="昏暗 Dim",
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user