Add "Tech Finesse Lock" modes and some other improvements (#946)

* Improve Tech FInesse modes and add new player hooks

* Add Tech Finesse[+] Lock into mode map

* Credit PopUpWaffles

* Rearrange mode map
This commit is contained in:
NOT_A_ROBOT
2023-08-23 15:12:42 +07:00
committed by GitHub
parent 51968741ea
commit 9769b33deb
20 changed files with 567 additions and 336 deletions

View File

@@ -0,0 +1,57 @@
local function onMove(P)
if not P.cur then return end
P.holdTime=0
VK.keys[8].ava=false
P.modeData.moveCount=P.modeData.moveCount+1
if P.modeData.moveCount>=2 and (P.curY>P.gameEnv.fieldH-2 or P:_roofCheck()) then
P.keyAvailable[1]=false
P.keyAvailable[2]=false
VK.keys[1].ava=false
VK.keys[2].ava=false
end
end
local function onRotate(P)
if not P.cur then return end
P.holdTime=0
VK.keys[8].ava=false
P.modeData.rotations=P.modeData.rotations+1
if P.modeData.rotations>=2 and not (P.curY>P.gameEnv.fieldH-2 or P:_roofCheck()) then
P.keyAvailable[3]=false
P.keyAvailable[4]=false
P.keyAvailable[5]=false
VK.keys[3].ava=false
VK.keys[4].ava=false
VK.keys[5].ava=false
end
end
local function resetLock(P)
for i=1,8 do
P.keyAvailable[i]=true
VK.keys[i].ava=true
end
P.modeData.moveCount=0
P.modeData.rotations=0
P.holdTime=1
end
return {
arr=0,
fineKill=true,
mesDisp=function(P)
setFont(45)
GC.mStr(("%d"):format(P.stat.atk),63,190)
GC.mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310)
mText(TEXTOBJ.atk,63,243)
mText(TEXTOBJ.eff,63,363)
end,
task=function(P)
resetLock(P)
end,
hook_drop=function(P)
resetLock(P)
if P.stat.atk>=100 then
P:win('finish')
end
end,
hook_left_manual=onMove, hook_right_manual=onMove,
hook_rotLeft=onRotate, hook_rotRight=onRotate, hook_rot180=onRotate
}

View File

@@ -0,0 +1,63 @@
local function onMove(P)
if not P.cur then return end
P.holdTime=0
VK.keys[8].ava=false
P.modeData.moveCount=P.modeData.moveCount+1
if P.modeData.moveCount>=2 and (P.curY>P.gameEnv.fieldH-2 or P:_roofCheck()) then
P.keyAvailable[1]=false
P.keyAvailable[2]=false
VK.keys[1].ava=false
VK.keys[2].ava=false
end
end
local function onRotate(P)
if not P.cur then return end
P.holdTime=0
VK.keys[8].ava=false
P.modeData.rotations=P.modeData.rotations+1
if P.modeData.rotations>=2 and not (P.curY>P.gameEnv.fieldH-2 or P:_roofCheck()) then
P.keyAvailable[3]=false
P.keyAvailable[4]=false
P.keyAvailable[5]=false
VK.keys[3].ava=false
VK.keys[4].ava=false
VK.keys[5].ava=false
end
end
local function resetLock(P)
for i=1,8 do
P.keyAvailable[i]=true
VK.keys[i].ava=true
end
P.modeData.moveCount=0
P.modeData.rotations=0
P.holdTime=1
end
return {
arr=0,
fineKill=true,
mesDisp=function(P)
setFont(45)
GC.mStr(("%d"):format(P.stat.atk),63,190)
GC.mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310)
mText(TEXTOBJ.atk,63,243)
mText(TEXTOBJ.eff,63,363)
end,
task=function(P)
resetLock(P)
end,
hook_drop=function(P)
resetLock(P)
if P.lastPiece.row>0 then
if not P.lastPiece.special then
P:lose()
return
end
end
if P.stat.atk>=100 then
P:win('finish')
end
end,
hook_left_manual=onMove, hook_right_manual=onMove,
hook_rotLeft=onRotate, hook_rotRight=onRotate, hook_rot180=onRotate
}

View File

@@ -365,6 +365,7 @@ return {
"huaji2369", "huaji2369",
"Lexitik", "Lexitik",
"Tourahi Anime", "Tourahi Anime",
"PopUpWaffles",
"[All other test staff]", "[All other test staff]",
"…And You!", "…And You!",
}, },
@@ -945,6 +946,8 @@ C. Gamepad
['tech_l_plus']= {"Tech", "LUNATIC+", "Spins & PCs only"}, ['tech_l_plus']= {"Tech", "LUNATIC+", "Spins & PCs only"},
['tech_finesse']= {"Tech", "FINESSE", "No finesse errors!"}, ['tech_finesse']= {"Tech", "FINESSE", "No finesse errors!"},
['tech_finesse_f']= {"Tech", "FINESSE+", "No normal clears and finesse errors!"}, ['tech_finesse_f']= {"Tech", "FINESSE+", "No normal clears and finesse errors!"},
['tech_finesse_lock']= {"Tech", "FINESSE LOCK", "No finesse errors, combined with limited inputs!"},
['tech_finesse_lock_f']= {"Tech", "FINESSE+ LOCK", "No normal clears or finesse errors combined with limited inputs!"},
['tsd_e']= {"TSD Challenge", "EASY", "T-Spin Doubles only!"}, ['tsd_e']= {"TSD Challenge", "EASY", "T-Spin Doubles only!"},
['tsd_h']= {"TSD Challenge", "HARD", "T-Spin Doubles only!"}, ['tsd_h']= {"TSD Challenge", "HARD", "T-Spin Doubles only!"},
['tsd_u']= {"TSD Challenge", "ULTIMATE", "T-Spin Doubles only!"}, ['tsd_u']= {"TSD Challenge", "ULTIMATE", "T-Spin Doubles only!"},

View File

@@ -362,6 +362,7 @@ return {
"huaji2369", "huaji2369",
"Lexitik", "Lexitik",
"Tourahi Anime", "Tourahi Anime",
"PopUpWaffles",
"[Todo el staff de testeo]", "[Todo el staff de testeo]",
"…Y a ti!", "…Y a ti!",
}, },
@@ -897,6 +898,8 @@ return {
['tech_l_plus']= {"Tech", "Lunático+", "¡Sólo se permiten Spins y PCs!"}, ['tech_l_plus']= {"Tech", "Lunático+", "¡Sólo se permiten Spins y PCs!"},
['tech_finesse']= {"Tech", "Finesse", "¡No cometas errores de Finesse!"}, ['tech_finesse']= {"Tech", "Finesse", "¡No cometas errores de Finesse!"},
['tech_finesse_f']= {"Tech", "Finesse+", "Sin errores de finesse,\n¡pero tampoco clears normales!"}, ['tech_finesse_f']= {"Tech", "Finesse+", "Sin errores de finesse,\n¡pero tampoco clears normales!"},
-- ['tech_finesse_lock']= {"Tech", "FINESSE LOCK", "No finesse errors, combined with limited inputs!"},
-- ['tech_finesse_lock_f']= {"Tech", "FINESSE+ LOCK", "No normal clears or finesse errors combined with limited inputs!"},
['tsd_e']= {"Desafío de TSD", "Fácil", "¡Sólo se permiten T-Spin Dobles!"}, ['tsd_e']= {"Desafío de TSD", "Fácil", "¡Sólo se permiten T-Spin Dobles!"},
['tsd_h']= {"Desafío de TSD", "Difícil", "¡Sólo se permiten T-Spin Dobles!"}, ['tsd_h']= {"Desafío de TSD", "Difícil", "¡Sólo se permiten T-Spin Dobles!"},
['tsd_u']= {"Desafío de TSD", "Supremo", "¡Sólo se permiten T-Spin Dobles!"}, ['tsd_u']= {"Desafío de TSD", "Supremo", "¡Sólo se permiten T-Spin Dobles!"},

View File

@@ -341,6 +341,7 @@ return {
"huaji2369", "huaji2369",
"Lexitik", "Lexitik",
"Tourahi Anime", "Tourahi Anime",
"PopUpWaffles",
"[All other test staff]", "[All other test staff]",
"…And You!", "…And You!",
}, },
@@ -868,6 +869,8 @@ return {
['tech_l_plus']= {"Tech", "LUNATIQUE+", "Spin & PC uniquement"}, ['tech_l_plus']= {"Tech", "LUNATIQUE+", "Spin & PC uniquement"},
['tech_finesse']= {"Tech", "FINESSE", "Pas d'erreurs de finesse !"}, ['tech_finesse']= {"Tech", "FINESSE", "Pas d'erreurs de finesse !"},
['tech_finesse_f']={"Tech", "FINESSE+", "Pas de nettoyages normaux,\nPas d'erreurs de finesse !"}, ['tech_finesse_f']={"Tech", "FINESSE+", "Pas de nettoyages normaux,\nPas d'erreurs de finesse !"},
--['tech_finesse_lock']= {"Tech", "FINESSE LOCK", "No finesse errors, combined with limited inputs!"},
--['tech_finesse_lock_f']= {"Tech", "FINESSE+ LOCK", "No normal clears or finesse errors combined with limited inputs!"},
['tsd_e']= {"TSD Challenge", "FACILE", "T-spin doubles uniquement !"}, ['tsd_e']= {"TSD Challenge", "FACILE", "T-spin doubles uniquement !"},
['tsd_h']= {"TSD Challenge", "DIFFICILE", "T-spin doubles uniquement !"}, ['tsd_h']= {"TSD Challenge", "DIFFICILE", "T-spin doubles uniquement !"},
['tsd_u']= {"TSD Challenge", "ULTIME", "T-spin doubles uniquement !"}, ['tsd_u']= {"TSD Challenge", "ULTIME", "T-spin doubles uniquement !"},

View File

@@ -363,6 +363,7 @@ return {
"huaji2369", "huaji2369",
"Lexitik", "Lexitik",
"Tourahi Anime", "Tourahi Anime",
"PopUpWaffles",
"[Semua staf penguji lainnya]", "[Semua staf penguji lainnya]",
"…Dan Anda!", "…Dan Anda!",
}, },
@@ -906,7 +907,9 @@ return {
['tech_l']= {"Tech", "GILA", "Coba jaga deret Back-To-Back!"}, ['tech_l']= {"Tech", "GILA", "Coba jaga deret Back-To-Back!"},
['tech_l_plus']= {"Tech", "GILA+", "Hanya Spins & PCs dibolehkan"}, ['tech_l_plus']= {"Tech", "GILA+", "Hanya Spins & PCs dibolehkan"},
['tech_finesse']= {"Tech", "EF. TOMBOL", "Efisiensi tombol harus maksimal!"}, ['tech_finesse']= {"Tech", "EF. TOMBOL", "Efisiensi tombol harus maksimal!"},
['tech_finesse_f']= {"Tech", "EF. TOMBOL+", "Efisiensi tombol maksimal dan tidak ada garis normal!"}, ['tech_finesse_f']= {"Tech", "EF. TOMBOL+", "Efisiensi tombol maksimal dan anda tidak boleh membuat baris normal!"},
['tech_finesse_lock']= {"Tech", "EF. TBL. TERBATAS", "Jumlah pemencetan tombol terbatas, dan efisiensinya harus maksimal!"},
['tech_finesse_lock_f']= {"Tech", "EF. TBL.+ TERBATAS", "Jumlah pemencetan tombol terbatas, efisiensi tombol harus maksimal, dan anda tidak boleh membuat baris normal!"},
['tsd_e']= {"Tantangan TSD", "MUDAH", "Hanya T-Spin Double dibolehkan!"}, ['tsd_e']= {"Tantangan TSD", "MUDAH", "Hanya T-Spin Double dibolehkan!"},
['tsd_h']= {"Tantangan TSD", "SULIT", "Hanya T-Spin Double dibolehkan!"}, ['tsd_h']= {"Tantangan TSD", "SULIT", "Hanya T-Spin Double dibolehkan!"},
['tsd_u']= {"Tantangan TSD", "TERAKHIR", "Hanya T-Spin Double dibolehkan!"}, ['tsd_u']= {"Tantangan TSD", "TERAKHIR", "Hanya T-Spin Double dibolehkan!"},

View File

@@ -364,6 +364,7 @@ return {
"huaji2369", "huaji2369",
"Lexitik", "Lexitik",
"Tourahi Anime", "Tourahi Anime",
"PopUpWaffles",
"[All other test staff]", "[All other test staff]",
"…And You!", "…And You!",
}, },
@@ -950,6 +951,8 @@ C. ゲームパッド
['tech_l_plus']= {"テクニック", "LUNATIC+", "回転入れとパフェだけ!"}, ['tech_l_plus']= {"テクニック", "LUNATIC+", "回転入れとパフェだけ!"},
['tech_finesse']= {"テクニック", "FINESSE", "最適化!"}, ['tech_finesse']= {"テクニック", "FINESSE", "最適化!"},
['tech_finesse_f']= {"テクニック", "FINESSE+", "最適化はそのまま、通常line消去禁止!"}, ['tech_finesse_f']= {"テクニック", "FINESSE+", "最適化はそのまま、通常line消去禁止!"},
--['tech_finesse_lock']= {"Tech", "FINESSE LOCK", "No finesse errors, combined with limited inputs!"},
--['tech_finesse_lock_f']= {"Tech", "FINESSE+ LOCK", "No normal clears or finesse errors combined with limited inputs!"},
['tsd_e']= {"TSDチャレンジ", "EASY", "TSDだけ!"}, ['tsd_e']= {"TSDチャレンジ", "EASY", "TSDだけ!"},
['tsd_h']= {"TSDチャレンジ", "HARD", "TSDだけ!"}, ['tsd_h']= {"TSDチャレンジ", "HARD", "TSDだけ!"},
['tsd_u']= {"TSDチャレンジ", "ULTIMATE", "TSDだけ!"}, ['tsd_u']= {"TSDチャレンジ", "ULTIMATE", "TSDだけ!"},

View File

@@ -351,6 +351,7 @@ return {
"huaji2369", "huaji2369",
"Lexitik", "Lexitik",
"Tourahi Anime", "Tourahi Anime",
"PopUpWaffles",
"[All other test staff]", "[All other test staff]",
"…And You!", "…And You!",
}, },
@@ -887,6 +888,8 @@ return {
['tech_l_plus']= {"Tech", "LUNÁTICO+", "Apenas spins e PC"}, ['tech_l_plus']= {"Tech", "LUNÁTICO+", "Apenas spins e PC"},
['tech_finesse']= {"Tech", "FINESSE", "Não erre a destreza!"}, ['tech_finesse']= {"Tech", "FINESSE", "Não erre a destreza!"},
['tech_finesse_f']= {"Tech", "FINESSE+", "Sem limpas normais,\nnão erre a destreza!"}, ['tech_finesse_f']= {"Tech", "FINESSE+", "Sem limpas normais,\nnão erre a destreza!"},
--['tech_finesse_lock']= {"Tech", "FINESSE LOCK", "No finesse errors, combined with limited inputs!"},
--['tech_finesse_lock_f']= {"Tech", "FINESSE+ LOCK", "No normal clears or finesse errors combined with limited inputs!"},
['tsd_e']= {"Desafio TSD", "FÁCIL", "Apenas T-spin-doubles!"}, ['tsd_e']= {"Desafio TSD", "FÁCIL", "Apenas T-spin-doubles!"},
['tsd_h']= {"Desafio TSD", "DIFÍCIL", "Apenas T-spin-doubles!"}, ['tsd_h']= {"Desafio TSD", "DIFÍCIL", "Apenas T-spin-doubles!"},
['tsd_u']= {"Desafio TSD", "ULTIMATE", "Apenas T-spin-doubles!"}, ['tsd_u']= {"Desafio TSD", "ULTIMATE", "Apenas T-spin-doubles!"},

View File

@@ -370,6 +370,7 @@ return {
"huaji2369", "huaji2369",
"Lexitik", "Lexitik",
"Tourahi Anime", "Tourahi Anime",
"PopUpWaffles",
"[cùng với các thành viên thử nghiệm khác]", "[cùng với các thành viên thử nghiệm khác]",
"…và BẠN!", "…và BẠN!",
}, },
@@ -969,6 +970,8 @@ C. Tay cầm chơi game (Gamepad):
['tech_l_plus']= {"Tech", "RẤT KHÓ+", "Chỉ được clear Spin hoặc PC"}, ['tech_l_plus']= {"Tech", "RẤT KHÓ+", "Chỉ được clear Spin hoặc PC"},
['tech_finesse']= {"Tech", "HOÀN HẢO", "Không được phép có lỗi di chuyển!"}, ['tech_finesse']= {"Tech", "HOÀN HẢO", "Không được phép có lỗi di chuyển!"},
['tech_finesse_f']= {"Tech", "HOÀN HẢO+", "Không được phép có lỗi di chuyển hoặc loại Xoá hàng thường!"}, ['tech_finesse_f']= {"Tech", "HOÀN HẢO+", "Không được phép có lỗi di chuyển hoặc loại Xoá hàng thường!"},
--['tech_finesse_lock']= {"Tech", "FINESSE LOCK", "No finesse errors, combined with limited inputs!"},
--['tech_finesse_lock_f']= {"Tech", "FINESSE+ LOCK", "No normal clears or finesse errors combined with limited inputs!"},
['tsd_e']= {"TSD Challenge", "DỄ", "Chỉ được làm T-Spin Double!"}, -- Chỉ được clear… ['tsd_e']= {"TSD Challenge", "DỄ", "Chỉ được làm T-Spin Double!"}, -- Chỉ được clear…
['tsd_h']= {"TSD Challenge", "KHÓ", "Chỉ được làm T-Spin Double!"}, ['tsd_h']= {"TSD Challenge", "KHÓ", "Chỉ được làm T-Spin Double!"},
['tsd_u']= {"TSD Challenge", "THÁCH ĐẤU", "Chỉ được làm T-Spin Double!"}, ['tsd_u']= {"TSD Challenge", "THÁCH ĐẤU", "Chỉ được làm T-Spin Double!"},

View File

@@ -363,6 +363,7 @@ return {
"huaji2369", "huaji2369",
"Lexitik", "Lexitik",
"Tourahi Anime", "Tourahi Anime",
"PopUpWaffles",
"[All other test staff]", "[All other test staff]",
"…And You!", "…And You!",
}, },
@@ -937,6 +938,8 @@ return {
['tech_l_plus']= {"科研", "疯狂+", "仅允许spin与PC"}, ['tech_l_plus']= {"科研", "疯狂+", "仅允许spin与PC"},
['tech_finesse']= {"科研", "极简", "强制最简操作"}, ['tech_finesse']= {"科研", "极简", "强制最简操作"},
['tech_finesse_f']= {"科研", "极简+", "禁止普通消除,强制最简操作"}, ['tech_finesse_f']= {"科研", "极简+", "禁止普通消除,强制最简操作"},
--['tech_finesse_lock']= {"Tech", "FINESSE LOCK", "No finesse errors, combined with limited inputs!"},
--['tech_finesse_lock_f']= {"Tech", "FINESSE+ LOCK", "No normal clears or finesse errors combined with limited inputs!"},
['tsd_e']= {"TSD挑战", "简单", "你能连续做几个TSD"}, ['tsd_e']= {"TSD挑战", "简单", "你能连续做几个TSD"},
['tsd_h']= {"TSD挑战", "困难", "你能连续做几个TSD"}, ['tsd_h']= {"TSD挑战", "困难", "你能连续做几个TSD"},
['tsd_u']= {"TSD挑战", "极限", "你能连续做几个TSD"}, ['tsd_u']= {"TSD挑战", "极限", "你能连续做几个TSD"},

View File

@@ -311,6 +311,7 @@ return {
"huaji2369", "huaji2369",
"Lexitik", "Lexitik",
"Tourahi Anime", "Tourahi Anime",
"PopUpWaffles",
"[All other test staff]", "[All other test staff]",
"…And You!", "…And You!",
}, },
@@ -854,6 +855,8 @@ return {
['tech_l_plus']= {"Tech(LunaticP);", "", "仅允许spin与PC"}, ['tech_l_plus']= {"Tech(LunaticP);", "", "仅允许spin与PC"},
['tech_finesse']= {"Tech(Finesse);", "", "强制最简操作"}, ['tech_finesse']= {"Tech(Finesse);", "", "强制最简操作"},
['tech_finesse_f']= {"Tech(FinesseF);", "", "禁止普通消除,强制最简操作"}, ['tech_finesse_f']= {"Tech(FinesseF);", "", "禁止普通消除,强制最简操作"},
--['tech_finesse_lock']= {"Tech", "FINESSE LOCK", "No finesse errors, combined with limited inputs!"},
--['tech_finesse_lock_f']= {"Tech", "FINESSE+ LOCK", "No normal clears or finesse errors combined with limited inputs!"},
['tsd_e']= {"TSD(Easy);", "", "你能连续做几个TSD"}, ['tsd_e']= {"TSD(Easy);", "", "你能连续做几个TSD"},
['tsd_h']= {"TSD(Hard);", "", "你能连续做几个TSD"}, ['tsd_h']= {"TSD(Hard);", "", "你能连续做几个TSD"},
['tsd_u']= {"TSD(Ultimate);", "", "你能连续做几个TSD"}, ['tsd_u']= {"TSD(Ultimate);", "", "你能连续做几个TSD"},

View File

@@ -363,6 +363,7 @@ return {
"huaji2369", "huaji2369",
"Lexitik", "Lexitik",
"Tourahi Anime", "Tourahi Anime",
"PopUpWaffles",
"[All other test staff]", "[All other test staff]",
"…And You!", "…And You!",
}, },
@@ -907,6 +908,8 @@ return {
['tech_l_plus']= {"科研", "瘋狂+", "僅允許spin與PC"}, ['tech_l_plus']= {"科研", "瘋狂+", "僅允許spin與PC"},
['tech_finesse']= {"科研", "finesse", "強制finesse"}, ['tech_finesse']= {"科研", "finesse", "強制finesse"},
['tech_finesse_f']= {"科研", "finesse+", "禁止普通清除強制finesse"}, ['tech_finesse_f']= {"科研", "finesse+", "禁止普通清除強制finesse"},
--['tech_finesse_lock']= {"Tech", "FINESSE LOCK", "No finesse errors, combined with limited inputs!"},
--['tech_finesse_lock_f']= {"Tech", "FINESSE+ LOCK", "No normal clears or finesse errors combined with limited inputs!"},
['tsd_e']= {"TSD挑戰", "簡單", "你能連續做幾個TSD"}, ['tsd_e']= {"TSD挑戰", "簡單", "你能連續做幾個TSD"},
['tsd_h']= {"TSD挑戰", "困難", "你能連續做幾個TSD"}, ['tsd_h']= {"TSD挑戰", "困難", "你能連續做幾個TSD"},
['tsd_u']= {"TSD挑戰", "極限", "你能連續做幾個TSD"}, ['tsd_u']= {"TSD挑戰", "極限", "你能連續做幾個TSD"},

View File

@@ -105,7 +105,6 @@ return {
{name='pc_inf', x=1100, y=-280, size=40,shape=2,icon="pc"}, {name='pc_inf', x=1100, y=-280, size=40,shape=2,icon="pc"},
{name='sprintAtk', x=500, y=-280, size=40,shape=1,icon="sprint2", unlock={'sprintEff','tech_n','tech_finesse','tsd_e','backfire_n'}}, {name='sprintAtk', x=500, y=-280, 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='sprintEff', x=360, y=-150, size=40,shape=1,icon="sprint2"},
{name='tech_n', x=400, y=20, size=40,shape=1,icon="tech", unlock={'tech_n_plus','tech_h'}}, {name='tech_n', x=400, y=20, size=40,shape=1,icon="tech", unlock={'tech_n_plus','tech_h'}},
@@ -115,17 +114,19 @@ return {
{name='tech_l', x=400, y=320, size=40,shape=1,icon="tech", unlock={'tech_l_plus'}}, {name='tech_l', x=400, y=320, size=40,shape=1,icon="tech", unlock={'tech_l_plus'}},
{name='tech_l_plus', x=200, y=290, size=35,shape=3,icon="tech"}, {name='tech_l_plus', x=200, y=290, size=35,shape=3,icon="tech"},
{name='tech_finesse', x=800, y=20, size=40,shape=1,icon="tech", unlock={'tech_finesse_f'}}, {name='tech_finesse', x=800, y=20, size=40,shape=1,icon="tech", unlock={'tech_finesse_f','tech_finesse_lock'}},
{name='tech_finesse_f', x=1000, y=20, size=40,shape=1,icon="tech"}, {name='tech_finesse_f', x=1000, y=20, size=40,shape=1,icon="tech"},
{name='tech_finesse_lock', x=900, y=170, size=40,shape=1,icon="tech", unlock={'tech_finesse_lock_f'}},
{name='tech_finesse_lock_f', x=1100, y=170, size=40,shape=1,icon="tech"},
{name='tsd_e', x=720, y=170, size=40,shape=1,icon="tsd", unlock={'tsd_h'}}, {name='tsd_e', x=700, y=170, size=40,shape=1,icon="tsd", unlock={'tsd_h'}},
{name='tsd_h', x=960, y=170, size=40,shape=1,icon="tsd", unlock={'tsd_u'}}, {name='tsd_h', x=850, y=320, size=40,shape=1,icon="tsd", unlock={'tsd_u'}},
{name='tsd_u', x=1200, y=170, size=40,shape=1,icon="tsd"}, {name='tsd_u', x=1050, y=320, size=40,shape=1,icon="tsd"},
{name='backfire_n', x=650, y=320, size=40,shape=1,icon="backfire", unlock={'backfire_h'}}, {name='backfire_n', x=650, y=320, size=40,shape=1,icon="backfire", unlock={'backfire_h'}},
{name='backfire_h', x=850, y=320, size=40,shape=1,icon="backfire", unlock={'backfire_l'}}, {name='backfire_h', x=850, y=470, size=40,shape=1,icon="backfire", unlock={'backfire_l'}},
{name='backfire_l', x=1050, y=320, size=40,shape=3,icon="backfire", unlock={'backfire_u'}}, {name='backfire_l', x=1050, y=470, size=40,shape=3,icon="backfire", unlock={'backfire_u'}},
{name='backfire_u', x=1250, y=320, size=35,shape=2,icon="backfire"}, {name='backfire_u', x=1250, y=470, size=35,shape=2,icon="backfire"},
{name='zen', x=-1000, y=-600, size=40,shape=1,icon="zen", unlock={'ultra','infinite','infinite_dig','marathon_inf'}}, {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='ultra', x=-1200, y=-600, size=40,shape=1,icon="ultra"},

View File

@@ -10,6 +10,13 @@ local function tech_check_hard(P)
P:win('finish') P:win('finish')
end end
end end
local function display(P)
setFont(45)
GC.mStr(("%d"):format(P.stat.atk),63,190)
GC.mStr(("%.2f"):format(P.stat.atk/P.stat.row),63,310)
mText(TEXTOBJ.atk,63,243)
mText(TEXTOBJ.eff,63,363)
end
return { return {
env={ env={
@@ -17,6 +24,7 @@ return {
drop=1e99,lock=60, drop=1e99,lock=60,
freshLimit=15, freshLimit=15,
fineKill=true, fineKill=true,
mesDisp=display,
hook_drop=tech_check_hard, hook_drop=tech_check_hard,
bg='flink',bgm='infinite', bg='flink',bgm='infinite',
}, },

View File

@@ -0,0 +1,28 @@
return {
env={
arr=0,
drop=1e99,lock=60,
freshLimit=15,
bg='flink',bgm='infinite',
eventSet='tech_finesse_lock'
},
slowMark=true,
score=function(P) return {P.stat.atk<=100 and math.floor(P.stat.atk) or 100,P.stat.time} end,
scoreDisp=function(D) return D[1].." Attack "..STRING.time(D[2]) end,
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
getRank=function(P)
local A=P.stat.atk
if A>=100 then
local T=P.stat.time
return
T<50 and 5 or
T<70 and 4 or
T<100 and 3 or
2
else
return
A>=60 and 1 or
A>=30 and 0
end
end,
}

View File

@@ -0,0 +1,28 @@
return {
env={
arr=0,
drop=1e99,lock=60,
freshLimit=15,
bg='flink',bgm='infinite',
eventSet='tech_finesse_lock_f'
},
slowMark=true,
score=function(P) return {P.stat.atk<=100 and math.floor(P.stat.atk) or 100,P.stat.time} end,
scoreDisp=function(D) return D[1].." Attack "..STRING.time(D[2]) end,
comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]<b[2] end,
getRank=function(P)
local A=P.stat.atk
if A>=100 then
local T=P.stat.time
return
T<50 and 5 or
T<70 and 4 or
T<100 and 3 or
2
else
return
A>=60 and 1 or
A>=30 and 0
end
end,
}

View File

@@ -242,14 +242,28 @@ local function _mergeFuncTable(f,L)
end end
return L return L
end end
local hooks = {
'mesDisp',
'hook_left',
'hook_left_manual',
'hook_left_auto',
'hook_right',
'hook_right_manual',
'hook_right_auto',
'hook_rotLeft',
'hook_rotRight',
'hook_rot180',
'hook_drop',
'hook_die',
'task'
}
local function _applyGameEnv(P)-- Finish gameEnv processing local function _applyGameEnv(P)-- Finish gameEnv processing
local ENV=P.gameEnv local ENV=P.gameEnv
-- Apply events -- Apply events
ENV.mesDisp=_mergeFuncTable(ENV.mesDisp,{}) for i=1,#hooks do
ENV.hook_drop=_mergeFuncTable(ENV.hook_drop,{}) ENV[hooks[i]]=_mergeFuncTable(ENV[hooks[i]],{})
ENV.hook_die=_mergeFuncTable(ENV.hook_die,{}) end
ENV.task=_mergeFuncTable(ENV.task,{})
-- Apply eventSet -- Apply eventSet
if ENV.eventSet and ENV.eventSet~="X" then if ENV.eventSet and ENV.eventSet~="X" then
@@ -257,12 +271,7 @@ local function _applyGameEnv(P)-- Finish gameEnv processing
local eventSet=require('parts.eventsets.'..ENV.eventSet) local eventSet=require('parts.eventsets.'..ENV.eventSet)
if eventSet then if eventSet then
for k,v in next,eventSet do for k,v in next,eventSet do
if if TABLE.find(hooks,k) then
k=='mesDisp' or
k=='hook_drop' or
k=='hook_die' or
k=='task'
then
_mergeFuncTable(v,ENV[k]) _mergeFuncTable(v,ENV[k])
elseif type(v)=='table' then elseif type(v)=='table' then
ENV[k]=TABLE.copy(v) ENV[k]=TABLE.copy(v)

View File

@@ -226,8 +226,10 @@ function Player:act_moveLeft(auto)
end end
if self.cur then if self.cur then
if self.cur and not self:ifoverlap(self.cur.bk,self.curX-1,self.curY) then if self.cur and not self:ifoverlap(self.cur.bk,self.curX-1,self.curY) then
self:_triggerEvent('hook_left')
self:_triggerEvent('hook_left_'..(auto and 'auto' or 'manual'))
self:createMoveFX('left') self:createMoveFX('left')
self.curX=self.curX-1 self.curX=self.curX+self.movDir
self:freshBlock('move') self:freshBlock('move')
if not auto then if not auto then
self.moving=0 self.moving=0
@@ -248,8 +250,10 @@ function Player:act_moveRight(auto)
end end
if self.cur then if self.cur then
if self.cur and not self:ifoverlap(self.cur.bk,self.curX+1,self.curY) then if self.cur and not self:ifoverlap(self.cur.bk,self.curX+1,self.curY) then
self:_triggerEvent('hook_right')
self:_triggerEvent('hook_right_'..(auto and 'auto' or 'manual'))
self:createMoveFX('right') self:createMoveFX('right')
self.curX=self.curX+1 self.curX=self.curX+self.movDir
self:freshBlock('move') self:freshBlock('move')
if not auto then if not auto then
self.moving=0 self.moving=0
@@ -267,6 +271,7 @@ function Player:act_rotRight()
if self.cur then if self.cur then
self.ctrlCount=self.ctrlCount+1 self.ctrlCount=self.ctrlCount+1
self:spin(1) self:spin(1)
self:_triggerEvent('hook_rotRight')
self.keyPressing[3]=false self.keyPressing[3]=false
end end
end end
@@ -275,6 +280,7 @@ function Player:act_rotLeft()
if self.cur then if self.cur then
self.ctrlCount=self.ctrlCount+1 self.ctrlCount=self.ctrlCount+1
self:spin(3) self:spin(3)
self:_triggerEvent('hook_rotLeft')
self.keyPressing[4]=false self.keyPressing[4]=false
end end
end end
@@ -283,6 +289,7 @@ function Player:act_rot180()
if self.cur then if self.cur then
self.ctrlCount=self.ctrlCount+2 self.ctrlCount=self.ctrlCount+2
self:spin(2) self:spin(2)
self:_triggerEvent('hook_rot180')
self.keyPressing[5]=false self.keyPressing[5]=false
end end
end end

View File

@@ -67,7 +67,7 @@ local function _moveMap(dx,dy)
local k=_getK() local k=_getK()
local x,y=_getPos() local x,y=_getPos()
if x>1300 and dx<0 or x<-1500 and dx>0 then dx=0 end if x>1300 and dx<0 or x<-1500 and dx>0 then dx=0 end
if y>420 and dy<0 or y<-1900 and dy>0 then dy=0 end if y>620 and dy<0 or y<-1900 and dy>0 then dy=0 end
mapCam.xOy:translate(dx/k,dy/k) mapCam.xOy:translate(dx/k,dy/k)
end end
function scene.wheelMoved(_,dy) function scene.wheelMoved(_,dy)