116 lines
2.7 KiB
Lua
116 lines
2.7 KiB
Lua
local function lockKey(P,keys)
|
|
for _,v in next,keys do
|
|
P.keyAvailable[v]=false
|
|
VK.keys[v].ava=false
|
|
VK.release(v)
|
|
P:releaseKey(v)
|
|
end
|
|
end
|
|
local function unlockKey(P,keys)
|
|
for _,v in next,keys do
|
|
P.keyAvailable[v]=true
|
|
VK.keys[v].ava=true
|
|
end
|
|
end
|
|
local function lockMovement(P)
|
|
lockKey(P,{1,2})
|
|
end
|
|
local function lockRotation(P)
|
|
lockKey(P,{3,4})
|
|
end
|
|
local function lockRotation180(P)
|
|
lockKey(P,{5})
|
|
end
|
|
local function unlock(P)
|
|
if P.cur and P.cur.name==6 and not P.gameEnv.skipOCheck then -- don't unlock rotation if O piece & no O-spin
|
|
unlockKey(P,{1,2,6,7})
|
|
return
|
|
end
|
|
unlockKey(P,{1,2,3,4,5,6,7})
|
|
end
|
|
local function resetLock(P)
|
|
unlock(P)
|
|
unlockKey(P,{8})
|
|
|
|
P.modeData.moveCount=0
|
|
P.modeData.rotations=0
|
|
P.holdTime=1
|
|
end
|
|
|
|
local function onMove(P)
|
|
if not P.cur then return end
|
|
|
|
P.holdTime=0
|
|
lockKey(P,{8})
|
|
|
|
if not P:_roofCheck() then
|
|
P.modeData.moveCount=P.modeData.moveCount+1
|
|
if P.modeData.moveCount>=2 then lockMovement(P) end
|
|
end
|
|
end
|
|
local function onAutoMove(P)
|
|
if P:_roofCheck() then unlock(P) end
|
|
end
|
|
local function onRotate(P,dir)
|
|
if not P.cur then return end
|
|
|
|
P.holdTime=0
|
|
lockKey(P,{8})
|
|
|
|
if not P:_roofCheck() then
|
|
P.modeData.rotations=P.modeData.rotations+(dir==2 and 2 or 1)
|
|
lockRotation180(P)
|
|
if P.modeData.rotations>=2 then
|
|
lockRotation(P)
|
|
end
|
|
end
|
|
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)
|
|
local RSname=P.RS.name
|
|
P.gameEnv.skipOCheck=(
|
|
string.find(RSname,'TRS') or
|
|
string.find(RSname,'BiRS') or
|
|
string.find(RSname,'ASC')
|
|
)
|
|
end,
|
|
hook_drop=function(P)
|
|
resetLock(P)
|
|
if P.stat.atk>=100 then
|
|
P:win('finish')
|
|
end
|
|
end,
|
|
hook_spawn=function(P)
|
|
if P.gameEnv.skipOCheck then return end
|
|
if P.cur.name==6 then
|
|
lockRotation(P)
|
|
lockRotation180(P)
|
|
else
|
|
resetLock(P)
|
|
end
|
|
end,
|
|
hook_hold=function(P)
|
|
if P.gameEnv.skipOCheck then return end
|
|
if P.cur.name==6 then
|
|
lockRotation(P)
|
|
lockRotation180(P)
|
|
else
|
|
resetLock(P)
|
|
end
|
|
end,
|
|
hook_left_manual=onMove, hook_right_manual=onMove,
|
|
hook_left_auto=onAutoMove, hook_right_auto=onAutoMove,
|
|
hook_rotate=onRotate
|
|
}
|