1065 lines
41 KiB
Lua
1065 lines
41 KiB
Lua
local defaultCenterTex=GC.DO{1,1}-- No texture
|
|
local defaultCenterPos={-- For SRS-like RSs
|
|
-- Tetromino
|
|
{[0]={0,1},{1,0},{1,1},{1,1}},-- Z
|
|
{[0]={0,1},{1,0},{1,1},{1,1}},-- S
|
|
{[0]={0,1},{1,0},{1,1},{1,1}},-- J
|
|
{[0]={0,1},{1,0},{1,1},{1,1}},-- L
|
|
{[0]={0,1},{1,0},{1,1},{1,1}},-- T
|
|
{[0]={.5,.5},{.5,.5},{.5,.5},{.5,.5}},-- O
|
|
{[0]={-.5,1.5},{1.5,-.5},{.5,1.5},{1.5,.5}},-- I
|
|
|
|
-- Pentomino
|
|
{[0]={1,1},{1,1},{1,1},{1,1}},-- Z5
|
|
{[0]={1,1},{1,1},{1,1},{1,1}},-- S5
|
|
{[0]={0,1},{1,0},{1,1},{1,1}},-- P
|
|
{[0]={0,1},{1,0},{1,1},{1,1}},-- Q
|
|
{[0]={1,1},{1,1},{1,1},{1,1}},-- F
|
|
{[0]={1,1},{1,1},{1,1},{1,1}},-- E
|
|
{[0]={1,1},{1,1},{1,1},{1,1}},-- T5
|
|
{[0]={0,1},{1,0},{1,1},{1,1}},-- U
|
|
{[0]={.5,1.5},{.5,.5},{1.5,.5},{1.5,1.5}},-- V
|
|
{[0]={1,1},{1,1},{1,1},{1,1}},-- W
|
|
{[0]={1,1},{1,1},{1,1},{1,1}},-- X
|
|
{[0]={.5,1.5},{1.5,.5},{.5,1.5},{1.5,.5}},-- J5
|
|
{[0]={.5,1.5},{1.5,.5},{.5,1.5},{1.5,.5}},-- L5
|
|
{[0]={.5,1.5},{1.5,.5},{.5,1.5},{1.5,.5}},-- R
|
|
{[0]={.5,1.5},{1.5,.5},{.5,1.5},{1.5,.5}},-- Y
|
|
{[0]={.5,1.5},{1.5,.5},{.5,1.5},{1.5,.5}},-- N
|
|
{[0]={.5,1.5},{1.5,.5},{.5,1.5},{1.5,.5}},-- H
|
|
{[0]={0,2},{2,0},{0,2},{2,0}},-- I5
|
|
|
|
-- Trimino
|
|
{[0]={0,1},{1,0},{0,1},{1,0}},-- I3
|
|
{[0]={.5,.5},{.5,.5},{.5,.5},{.5,.5}},-- C
|
|
|
|
-- Domino
|
|
{[0]={-.5,.5},{.5,-.5},{.5,.5},{.5,.5}},-- I2
|
|
|
|
-- Dot
|
|
{[0]={0,0},{0,0},{0,0},{0,0}},-- O1
|
|
}
|
|
|
|
local noKickSet,noKickSet_180 do
|
|
local Zero={{0,0}}
|
|
noKickSet={[01]=Zero,[10]=Zero,[03]=Zero,[30]=Zero,[12]=Zero,[21]=Zero,[32]=Zero,[23]=Zero}
|
|
noKickSet_180={[01]=Zero,[10]=Zero,[03]=Zero,[30]=Zero,[12]=Zero,[21]=Zero,[32]=Zero,[23]=Zero,[02]=Zero,[20]=Zero,[13]=Zero,[31]=Zero}
|
|
end
|
|
local function _strToVec(list)
|
|
for i,vecStr in next,list do
|
|
list[i]={tonumber(vecStr:sub(1,2)),tonumber(vecStr:sub(3,4))}
|
|
end
|
|
return list
|
|
end
|
|
|
|
-- Use this if the block is centrosymmetry, *PTR!!!
|
|
local function _centroSymSet(L)
|
|
L[23]=L[01]L[32]=L[10]
|
|
L[21]=L[03]L[12]=L[30]
|
|
L[20]=L[02]L[31]=L[13]
|
|
end
|
|
|
|
-- Use this to copy a symmetry set
|
|
local function _flipList(O)
|
|
if not O then
|
|
return
|
|
end
|
|
local L={}
|
|
for i,s in next,O do
|
|
L[i]=string.char(88-s:byte())..s:sub(2)
|
|
end
|
|
return L
|
|
end
|
|
|
|
local function _reflect(a)
|
|
return {
|
|
[03]=_flipList(a[01]),
|
|
[01]=_flipList(a[03]),
|
|
[30]=_flipList(a[10]),
|
|
[32]=_flipList(a[12]),
|
|
[23]=_flipList(a[21]),
|
|
[21]=_flipList(a[23]),
|
|
[10]=_flipList(a[30]),
|
|
[12]=_flipList(a[32]),
|
|
[02]=_flipList(a[02]),
|
|
[20]=_flipList(a[20]),
|
|
[31]=_flipList(a[13]),
|
|
[13]=_flipList(a[31]),
|
|
}
|
|
end
|
|
|
|
local TRS
|
|
do
|
|
local OspinList={
|
|
{111,5,2, 0,-1,0},{111,5,2,-1,-1,0},{111,5,0,-1, 0,0},-- T
|
|
{333,5,2,-1,-1,0},{333,5,2, 0,-1,0},{333,5,0, 0, 0,0},-- T
|
|
{313,1,2,-1, 0,0},{313,1,2, 0,-1,0},{313,1,2, 0, 0,0},-- Z
|
|
{131,2,2, 0, 0,0},{131,2,2,-1,-1,0},{131,2,2,-1, 0,0},-- S
|
|
{131,1,2,-1, 0,0},{131,1,2, 0,-1,0},{131,1,2, 0, 0,0},-- Z(misOrder)
|
|
{313,2,2, 0, 0,0},{313,2,2,-1,-1,0},{313,2,2,-1, 0,0},-- S(misOrder)
|
|
{331,3,2, 0,-1,0},-- J(farDown)
|
|
{113,4,2,-1,-1,0},-- L(farDown)
|
|
{113,3,2,-1,-1,0},{113,3,0, 0, 0,0},-- J
|
|
{331,4,2, 0,-1,0},{331,4,0,-1, 0,0},-- L
|
|
{222,7,0,-1, 1,1},{222,7,0,-2, 1,1},{222,7,0, 0, 1,1},-- I(high)
|
|
{222,7,2,-1, 0,2},{222,7,2,-2, 0,2},{222,7,2, 0, 0,2},-- I(low)
|
|
{121,6,0, 1,-1,2},{112,6,0, 2,-1,2},{122,6,0, 1,-2,2},-- O
|
|
{323,6,0,-1,-1,2},{332,6,0,-2,-1,2},{322,6,0,-1,-2,2},-- O
|
|
}-- {keys, ID, dir, dx, dy, freeLevel (0=immovable, 1=U/D-immovable, 2=free)}
|
|
local XspinList={
|
|
{{ 1,-1},{ 1, 0},{ 1, 1},{ 1,-2},{ 1, 2}},
|
|
{{ 0,-1},{ 0,-2},{ 0, 1},{ 0,-2},{ 0, 2}},
|
|
{{-1,-1},{-1, 0},{-1, 1},{-1,-2},{-1, 2}},
|
|
}
|
|
TRS={
|
|
centerTex=GC.DO{10,10,
|
|
{'setCL',1,1,1,.4},
|
|
{'fRect',1,1,8,8},
|
|
{'setCL',1,1,1,.6},
|
|
{'fRect',2,2,6,6},
|
|
{'setCL',1,1,1,.8},
|
|
{'fRect',3,3,4,4},
|
|
{'setCL',1,1,1},
|
|
{'fRect',4,4,2,2},
|
|
},
|
|
centerDisp=TABLE.new(true,29),
|
|
kickTable={
|
|
{
|
|
[01]={'+0+0','-1+0','-1+1','+0-2','-1+2','+0+1'},
|
|
[10]={'+0+0','+1+0','+1-1','+0+2','+1-2','+1-2'},
|
|
[03]={'+0+0','+1+0','+1+1','+0-2','+1-1','+1-2'},
|
|
[30]={'+0+0','-1+0','-1-1','+0+2','-1+2','+0-1'},
|
|
[12]={'+0+0','+1+0','+1-1','+0+2','+1+2','+1+1'},
|
|
[21]={'+0+0','-1+0','-1+1','+0-2','-1-2','-1-1'},
|
|
[32]={'+0+0','-1+0','-1-1','+0+2','-1+2','+0-1'},
|
|
[23]={'+0+0','+1+0','+1+1','+0-2','+1-2','+0+1'},
|
|
[02]={'+0+0','+1+0','-1+0','+0-1','+0+1'},
|
|
[20]={'+0+0','-1+0','+1+0','+0+1','+0-1'},
|
|
[13]={'+0+0','+0-1','+0+1','+0-2'},
|
|
[31]={'+0+0','+0+1','+0-1','+0+2'},
|
|
},-- Z
|
|
false,-- S
|
|
{
|
|
[01]={'+0+0','-1+0','-1+1','+0-2','+1+1','+0+1','+0-1'},
|
|
[10]={'+0+0','+1+0','+1-1','+0+2','-1-1','+0-1','+0+1'},
|
|
[03]={'+0+0','+1+0','+1+1','+0-2','+1-2','+1-1','+0+1'},
|
|
[30]={'+0+0','-1+0','-1-1','+0+2','-1+2','+0-1','-1+1'},
|
|
[12]={'+0+0','+1+0','+1-1','+1+1','-1+0','+0-1','+0+2','+1+2'},
|
|
[21]={'+0+0','-1+0','-1+1','-1-1','+1+0','+0+1','+0-2','-1-2'},
|
|
[32]={'+0+0','-1+0','-1-1','+1+0','+0+2','-1+2','-1+1'},
|
|
[23]={'+0+0','+1+0','+1-1','-1+0','+1+1','+0-2','+1-2'},
|
|
[02]={'+0+0','-1+0','+1+0','+0-1','+0+1'},
|
|
[20]={'+0+0','+1+0','-1+0','+0+1','+0-1'},
|
|
[13]={'+0+0','+0-1','+0+1','+1+0'},
|
|
[31]={'+0+0','+0+1','+0-1','-1+0'},
|
|
},-- J
|
|
false,-- L
|
|
{
|
|
[01]={'+0+0','-1+0','-1+1','+0-2','-1-2','+0+1'},
|
|
[10]={'+0+0','+1+0','+1-1','+0+2','+1+2','+0+1','+0-1'},
|
|
[03]={'+0+0','+1+0','+1+1','+0-2','+1-2','+0+1'},
|
|
[30]={'+0+0','-1+0','-1-1','+0+2','-1+2','+0+1','+0-1'},
|
|
[12]={'+0+0','+1+0','+1-1','+0-1','-1-1','+0+2','+1+2','+1+1'},
|
|
[21]={'+0+0','-1+0','+0-2','-1-2','-1-1','+0-1','+1+1'},
|
|
[32]={'+0+0','-1+0','-1-1','+0-1','+1-1','+0+2','-1+2','-1+1'},
|
|
[23]={'+0+0','+1+0','+0-2','+1-2','+1-1','+0-1','-1+1'},
|
|
[02]={'+0+0','-1+0','+1+0','+0+1'},
|
|
[20]={'+0+0','+1+0','-1+0','+0-1'},
|
|
[13]={'+0+0','+0-1','+0+1','+1+0','+0-2','+0+2'},
|
|
[31]={'+0+0','+0-1','+0+1','-1+0','+0-2','+0+2'},
|
|
},-- T
|
|
function(P,d)
|
|
if P.gameEnv.easyFresh then
|
|
P:freshBlock('fresh')
|
|
end
|
|
if P.gameEnv.ospin then
|
|
local x,y=P.curX,P.curY
|
|
local C=P.cur
|
|
if y==P.ghoY and ((P:solid(x-1,y) or P:solid(x-1,y+1))) and (P:solid(x+2,y) or P:solid(x+2,y+1)) then
|
|
if P.sound then
|
|
SFX.play('rotatekick',nil,P:getCenterX()*.15)
|
|
end
|
|
|
|
--[Warning] Field spinSeq is a dirty data, TRS put this var into the block.
|
|
C.spinSeq=(C.spinSeq or 0)%100*10+d
|
|
if C.spinSeq<100 then
|
|
return end
|
|
for i=1,#OspinList do
|
|
local L=OspinList[i]
|
|
if C.spinSeq==L[1] then
|
|
local id,dir=L[2],L[3]
|
|
local bk=BLOCKS[id][dir]
|
|
x,y=P.curX+L[4],P.curY+L[5]
|
|
if
|
|
not P:ifoverlap(bk,x,y) and (
|
|
L[6]>0 or (P:ifoverlap(bk,x-1,y) and P:ifoverlap(bk,x+1,y))
|
|
) and (
|
|
L[6]==2 or (P:ifoverlap(bk,x,y-1) and P:ifoverlap(bk,x,y+1))
|
|
)
|
|
then
|
|
C.id=id
|
|
C.bk=bk
|
|
P.curX,P.curY=x,y
|
|
C.dir=dir
|
|
P.spinLast=2
|
|
P.stat.rotate=P.stat.rotate+1
|
|
P:freshBlock('move')
|
|
C.spinSeq=nil
|
|
return
|
|
end
|
|
end
|
|
end
|
|
else
|
|
if P.sound then
|
|
SFX.play('rotate',nil,P:getCenterX()*.15)
|
|
end
|
|
C.spinSeq=nil
|
|
end
|
|
else
|
|
if P.sound then
|
|
SFX.play('rotate',nil,P:getCenterX()*.15)
|
|
end
|
|
end
|
|
end,-- O
|
|
{
|
|
[01]={'+0+0','+0+1','+1+0','-2+0','-2-1','+1+2'},
|
|
[10]={'+0+0','+2+0','-1+0','-1-2','+2+1','+0+1'},
|
|
[03]={'+0+0','+0+1','-1+0','+2+0','+2-1','-1+2'},
|
|
[30]={'+0+0','-2+0','+1+0','+1-2','-2+1','+0+1'},
|
|
[12]={'+0+0','-1+0','+2+0','+2-1','+0-1','-1+2'},
|
|
[21]={'+0+0','-2+0','+1+0','+1-2','-2+1','+0+1'},
|
|
[32]={'+0+0','+1+0','-2+0','-2-1','+0-1','+1+2'},
|
|
[23]={'+0+0','+2+0','-1+0','-1-2','+2+1','+0+1'},
|
|
[02]={'+0+0','-1+0','+1+0','+0-1','+0+1'},
|
|
[20]={'+0+0','+1+0','-1+0','+0+1','+0-1'},
|
|
[13]={'+0+0','+0-1','-1+0','+1+0','+0+1'},
|
|
[31]={'+0+0','+0-1','+1+0','-1+0','+0+1'},
|
|
},-- I
|
|
{
|
|
[01]={'+0+0','+0+1','+1+1','-1+0','+0-3','+0+2','+0-2','+0+3','-1+2'},
|
|
[10]={'+0+0','+0-1','-1-1','+1+0','+0-3','+0+2','+0-2','+0+3','+1-2'},
|
|
[03]={'+0+0','+1+0','+0-3','+0-1','+0+1','+0-2','+0+2','+0+3','+1+2'},
|
|
[30]={'+0+0','-1+0','+0-1','+0+1','+0-2','+0-3','+0+2','+0+3','-1-2'},
|
|
},-- Z5
|
|
false,-- S5
|
|
{
|
|
[01]={'+0+0','-1+0','-1+1','+0-2','-1-2','-1-1','+0+1'},
|
|
[10]={'+0+0','+1+0','+1-1','+0+2','+1+2','+0-1','+1+1'},
|
|
[03]={'+0+0','+1+0','+1+1','+0-2','+1-2'},
|
|
[30]={'+0+0','-1+0','-1-1','+0+2','-1+2'},
|
|
[12]={'+0+0','+1+0','+1-1','+0+2','+1+2','+1+1'},
|
|
[21]={'+0+0','-1+0','-1-1','-1+1','+0-2','-1-2','-1-1'},
|
|
[32]={'+0+0','-1+0','-1-1','-1+1','+0-1','+0+2','-1+2'},
|
|
[23]={'+0+0','+1+0','+1+1','-1+0','+0-2','+1-2'},
|
|
[02]={'+0+0','-1+0','+0-1','+0+1'},
|
|
[20]={'+0+0','+1+0','+0+1','+0-1'},
|
|
[13]={'+0+0','+1+0','+0+1','-1+0'},
|
|
[31]={'+0+0','-1+0','+0-1','+1+0'},
|
|
},-- P
|
|
false,-- Q
|
|
{
|
|
[01]={'+0+0','-1+0','+1+0','-1+1','+0-2','+0-3'},
|
|
[10]={'+0+0','+1+0','+1-1','-1+0','+0+2','+0+3'},
|
|
[03]={'+0+0','+1+0','+1-1','+0+1','+0-2','+0-3'},
|
|
[30]={'+0+0','-1+1','+1+0','+0-1','+0+2','+0+3'},
|
|
[12]={'+0+0','+1+0','+0-1','-1+0','+0+2'},
|
|
[21]={'+0+0','-1+0','+0+1','+1+0','+0-2'},
|
|
[32]={'+0+0','-1+0','+0+1','-1+1','+1+0','+0+2','-2+0'},
|
|
[23]={'+0+0','+1+0','+1-1','+0-1','-1+0','+0-2','+2+0'},
|
|
[02]={'+0+0','+1+0','-1+0','-1-1'},
|
|
[20]={'+0+0','-1+0','+1+0','+1+1'},
|
|
[13]={'+0+0','+0-1','-1+1','+0+1'},
|
|
[31]={'+0+0','+0-1','+1-1','+0+1'},
|
|
},-- F
|
|
false,-- E
|
|
{
|
|
[01]={'+0+0','+0-1','-1-1','+1+0','+1+1','+0-3','-1+0','+0+2','-1+2'},
|
|
[10]={'+0+0','+1+0','+0-1','-1-1','+0-2','-1+1','+0-3','+1-2','+0+1'},
|
|
[03]={'+0+0','+0-1','+1-1','-1+0','-1+1','+0-3','+1+0','+0+2','+1+2'},
|
|
[30]={'+0+0','-1+0','+0-1','+1-1','+0-2','+1+1','+0-3','-1-2','+0+1'},
|
|
[12]={'+0+0','+1+0','-1+0','+0-2','+0-3','+0+1','-1+1'},
|
|
[21]={'+0+0','+1-1','-1+0','+1+0','+0-1','+0+2','+0+3'},
|
|
[32]={'+0+0','-1+0','+1+0','+0-2','+0-3','+0+1','+1+1'},
|
|
[23]={'+0+0','-1-1','+1+0','-1+0','+0-1','+0+2','+0+3'},
|
|
[02]={'+0+0','+0-1','+0+1','+0+2'},
|
|
[20]={'+0+0','+0-1','+0+1','+0-2'},
|
|
[13]={'+0+0','+1+0','-1+1','-2+0'},
|
|
[31]={'+0+0','-1+0','+1+1','+2+0'},
|
|
},-- T5
|
|
{
|
|
[01]={'+0+0','-1+0','-1+1','+0-2','-1-2'},
|
|
[10]={'+0+0','+1+0','+1-1','+0+2','+1+2'},
|
|
[03]={'+0+0','+1+0','+1+1','+0-2','+1-2'},
|
|
[30]={'+0+0','-1+0','-1-1','+0-2','-1+2'},
|
|
[12]={'+0+0','+1+0','+1-1','+1+1'},
|
|
[21]={'+0+0','-1-1','-1+1','-1-1'},
|
|
[32]={'+0+0','-1+0','-1-1','-1+1'},
|
|
[23]={'+0+0','+1-1','+1+1','+1-1'},
|
|
[02]={'+0+0','+0+1'},
|
|
[20]={'+0+0','+0-1'},
|
|
[13]={'+0+0','+0-1','+0+1','+1+0'},
|
|
[31]={'+0+0','+0-1','+0+1','-1+0'},
|
|
},-- U
|
|
{
|
|
[01]={'+0+0','+0+1','-1+0','+0-2','-1-2'},
|
|
[10]={'+0+0','+0+1','+1+0','+0-2','+1-2'},
|
|
[03]={'+0+0','+0-1','+0+1','+0+2'},
|
|
[30]={'+0+0','+0-1','+0+1','+0-2'},
|
|
[12]={'+0+0','+0-1','+0+1','+0+2'},
|
|
[21]={'+0+0','+0-1','+0+1','+0-2'},
|
|
[32]={'+0+0','+1+0','-1+0'},
|
|
[23]={'+0+0','-1+0','+1+0'},
|
|
[02]={'+0+0','-1+1','+1-1'},
|
|
[20]={'+0+0','+1-1','-1+1'},
|
|
[13]={'+0+0','+1+1','-1-1'},
|
|
[31]={'+0+0','-1-1','+1+1'},
|
|
},-- V
|
|
{
|
|
[01]={'+0+0','+0-1','-1+0','+1+0','+1-1','+0+2'},
|
|
[10]={'+0+0','+0-1','-1-1','+0+1','+0-2','+1-2','+0+2'},
|
|
[03]={'+0+0','+1+0','+1+1','+0-1','+0-2','+0-3','+1-1','+0+1','+0+2','+0+3'},
|
|
[30]={'+0+0','-1+0','-1+1','+0-1','+0-2','+0-3','-1-1','+0+1','+0+2','+0+3'},
|
|
[12]={'+0+0','+1+0','+0-1','-2+0','+1+1','-1+0','+0+1','-1-1'},
|
|
[21]={'+0+0','-1+0','+0-1','+2+0','-1+1','+1+0','+0+1','+1-1'},
|
|
[32]={'+0+0','+0-1','+1+0','+0+1','-1+0','-1-1','+0+2'},
|
|
[23]={'+0+0','+0-1','+1-1','+0+1','+0-2','-1-2','+0+2'},
|
|
[02]={'+0+0','+0-1','-1+0'},
|
|
[20]={'+0+0','+0+1','+1+0'},
|
|
[13]={'+0+0','+0+1','-1+0'},
|
|
[31]={'+0+0','+0-1','+1+0'},
|
|
},-- W
|
|
function(P,d)
|
|
if P.type=='human' then
|
|
SFX.play('rotate',nil,P:getCenterX()*.15)
|
|
end
|
|
local kickData=XspinList[d]
|
|
for test=1,#kickData do
|
|
local x,y=P.curX+kickData[test][1],P.curY+kickData[test][2]
|
|
if not P:ifoverlap(P.cur.bk,x,y) then
|
|
P.curX,P.curY=x,y
|
|
P.spinLast=1
|
|
P:freshBlock('move')
|
|
P.stat.rotate=P.stat.rotate+1
|
|
return
|
|
end
|
|
end
|
|
P:freshBlock('fresh')
|
|
end,-- X
|
|
{
|
|
[01]={'+0+0','-1+0','-1+1','+0-3','-1+1','-1+2','+0+1'},
|
|
[10]={'+0+0','-1+0','+1-1','+0+3','+1-1','+1-2','+0+1'},
|
|
[03]={'+0+0','+0-1','+1-1','-1+0','+1+1','+0-2','+1-2','+0-3','+1-3','-1+1'},
|
|
[30]={'+0+0','+0+1','-1+1','+1+0','-1-1','+0+2','-1+2','+0+3','-1+3','+1-1'},
|
|
[12]={'+0+0','+1+0','+1-1','+0-1','+1-2','+0-2','+1+1','-1+0','+0+2','+1+2'},
|
|
[21]={'+0+0','-1+0','-1+1','+0+1','-1+2','+0+2','-1-1','+1+0','+0-2','-1-2'},
|
|
[32]={'+0+0','-1+0','-1+1','-1-1','+1+0','+0+2','-1+2','+0-2'},
|
|
[23]={'+0+0','+1+0','+1-1','+1+1','-1+0','+0-2','+1-2','+0+2'},
|
|
[02]={'+0+0','+0-1','-1-1','+1-1','-1+0','+2-1'},
|
|
[20]={'+0+0','+0+1','+1+1','-1+1','+1+0','-2+1'},
|
|
[13]={'+0+0','-1+0','-1-1','+0+1','-1-2'},
|
|
[31]={'+0+0','+1+0','+1+1','+0-1','+1+2'},
|
|
},-- J5
|
|
false,-- L5
|
|
{
|
|
[01]={'+0+0','-1+0','-1+1','+1+0','-1+2','-1-1','+0-3','+0+1'},
|
|
[10]={'+0+0','-1+0','+1+0','+1-1','+1-2','+1+1','+0+3','+0+1'},
|
|
[03]={'+0+0','+0-1','+1+0','+0+1','+1-1','-1+0','+1+1','+0-2','+1-2','+0-3','+1-3','-1+1'},
|
|
[30]={'+0+0','+0-1','-1+0','+0+1','-1+1','+1+0','-1-1','+0+2','-1+2','+0+3','-1+3','+1-1'},
|
|
[12]={'+0+0','+1+0','+1-1','+0-1','+1-2','+0-2','+1+1','-1+0','+0+2','+1+2'},
|
|
[21]={'+0+0','-1+0','-1+1','+0+1','-1+2','+0+2','-1-1','+1+0','+0-2','-1-2'},
|
|
[32]={'+0+0','+0-1','-1+0','-1+1','-1-1','+1+0','+0+2','-1+2','+0-2'},
|
|
[23]={'+0+0','+0+1','+1+0','+1-1','+1+1','-1+0','+0-2','+1-2','+0+2'},
|
|
[02]={'+0+0','+0-1','+1-1','-1+0','+2-1','+0+1'},
|
|
[20]={'+0+0','+0+1','-1+1','+1+0','-2+1','+0-1'},
|
|
[13]={'+0+0','-1+0','-1-1','+0+1','-1-2'},
|
|
[31]={'+0+0','+1+0','+1+1','+0-1','+1+2'},
|
|
},-- R
|
|
false,-- Y
|
|
{
|
|
[01]={'+0+0','-1+0','-1+1','+0+1','+1+0','+1+1','-1+2','-2+0','+0-2'},
|
|
[10]={'+0+0','+1+0','-1+0','+0-1','-1-1','+1-1','+1-2','+2+0','+0+2'},
|
|
[03]={'+0+0','-1+0','+1-1','+0-2','+0-3','+1+0','+1-2','+1-3','+0+1','-1+1'},
|
|
[30]={'+0+0','-1+0','+1-1','+1-2','+1+0','+0-2','+1-3','-1+2','+0+3','-1+3'},
|
|
[12]={'+0+0','-1+0','+1-1','-1-1','+1-2','+1+0','+0-2','+1-3','-1+2','+0+3','-1+3'},
|
|
[21]={'+0+0','-1+0','+1-1','+1+1','+0-2','+0-3','+1+0','+1-2','+1-3','+0+1','-1+1'},
|
|
[32]={'+0+0','-1+0','+0-1','-1-2','+1-1','+1+0','+1+1','+0+2','+0+3'},
|
|
[23]={'+0+0','+0-2','+0-3','+1+2','+1+0','+0+1','-1+1','+0-1','+0+2'},
|
|
[02]={'+0+0','-1+0','+0+2','+0-1'},
|
|
[20]={'+0+0','+1+0','+0-2','+0+1'},
|
|
[13]={'+0+0','-1+0','-1-1','+0+1','+1+2'},
|
|
[31]={'+0+0','+1+0','+1+1','+0-1','-1-2'},
|
|
},-- N
|
|
false,-- H
|
|
{
|
|
[01]={'+0+0','+1-1','+1+0','+1+1','+0+1','-1+1','-1+0','-1-1','+0-1','+0-2','-2-1','-2-2','+2+0','+2-1','+2-2','+1+2','+2+2','-1+2','-2+2'},
|
|
[10]={'+0+0','-1+0','-1-1','+0-1','+1-1','-2-2','-2-1','-2+0','-1-2','+0-2','+1-2','+2-2','-1+1','-2+1','-2+2','+1+0','+2+0','+2-1','+0+1','+1-1','+2-2'},
|
|
[03]={'+0+0','-1-1','-1+0','-1+1','+0+1','+1+1','+1+0','+1-1','+0-1','+0-2','+2-1','+2-2','-2+0','-2-1','-2-2','-1+2','-2+2','+1+2','+2+2'},
|
|
[30]={'+0+0','+1+0','+1-1','+0-1','-1-1','+2-2','+2-1','+2+0','+1-2','+0-2','-1-2','-2-2','+1+1','+2+1','+2+2','-1+0','-2+0','-2-1','+0+1','-1-1','-2-2'},
|
|
},-- I5
|
|
{
|
|
[01]={'+0+0','-1+0','-1-1','+1+1','-1+1'},
|
|
[10]={'+0+0','-1+0','+1+0','-1-1','+1+1'},
|
|
[03]={'+0+0','+1+0','+1-1','-1+1','+1+1'},
|
|
[30]={'+0+0','+1+0','-1+0','+1-1','-1+1'},
|
|
},-- I3
|
|
{
|
|
[01]={'+0+0','-1+0','+1+0'},
|
|
[10]={'+0+0','+1+0','-1+0'},
|
|
[03]={'+0+0','+0+1','+0-1'},
|
|
[30]={'+0+0','+0-1','+0+1'},
|
|
[12]={'+0+0','+0+1','+0-1'},
|
|
[21]={'+0+0','+0-1','+0+1'},
|
|
[32]={'+0+0','-1+0','+1+0'},
|
|
[23]={'+0+0','+1+0','-1+0'},
|
|
[02]={'+0+0','+0-1','+1-1','-1-1'},
|
|
[20]={'+0+0','+0+1','-1+1','+1+1'},
|
|
[13]={'+0+0','+0-1','-1-1','+1-1'},
|
|
[31]={'+0+0','+0+1','+1+1','-1+1'},
|
|
},-- C
|
|
{
|
|
[01]={'+0+0','-1+0','+0+1'},
|
|
[10]={'+0+0','+1+0','+0+1'},
|
|
[03]={'+0+0','+1+0','+0+1'},
|
|
[30]={'+0+0','-1+0','+0+1'},
|
|
[12]={'+0+0','+1+0','+0+2'},
|
|
[21]={'+0+0','+0-1','-1+0'},
|
|
[32]={'+0+0','-1+0','+0+2'},
|
|
[23]={'+0+0','+0-1','-1+0'},
|
|
[02]={'+0+0','+0-1','+0+1'},
|
|
[20]={'+0+0','+0+1','+0-1'},
|
|
[13]={'+0+0','-1+0','+1+0'},
|
|
[31]={'+0+0','+1+0','-1+0'},
|
|
},-- I2
|
|
nil,-- O1
|
|
}
|
|
}
|
|
TRS.centerDisp[6]=false
|
|
TRS.centerDisp[18]=false
|
|
TRS.kickTable[2]= _reflect(TRS.kickTable[1])-- SZ
|
|
TRS.kickTable[4]= _reflect(TRS.kickTable[3])-- LJ
|
|
TRS.kickTable[9]= _reflect(TRS.kickTable[8])-- S5Z5
|
|
TRS.kickTable[11]=_reflect(TRS.kickTable[10])-- PQ
|
|
TRS.kickTable[13]=_reflect(TRS.kickTable[12])-- FE
|
|
TRS.kickTable[20]=_reflect(TRS.kickTable[19])-- L5J5
|
|
TRS.kickTable[22]=_reflect(TRS.kickTable[21])-- RY
|
|
TRS.kickTable[24]=_reflect(TRS.kickTable[23])-- NH
|
|
_centroSymSet(TRS.kickTable[8])_centroSymSet(TRS.kickTable[9])-- S5Z5
|
|
_centroSymSet(TRS.kickTable[25])_centroSymSet(TRS.kickTable[26])-- I5I3
|
|
end
|
|
|
|
local SRS
|
|
do
|
|
SRS={
|
|
centerTex=GC.DO{10,10,
|
|
{'setCL',1,1,1,.3},
|
|
{'fCirc',5,5,4},
|
|
{'setCL',1,1,1,.6},
|
|
{'fCirc',5,5,3},
|
|
{'setCL',1,1,1},
|
|
{'fCirc',5,5,2},
|
|
},
|
|
kickTable={
|
|
{
|
|
[01]={'+0+0','-1+0','-1+1','+0-2','-1-2'},
|
|
[10]={'+0+0','+1+0','+1-1','+0+2','+1+2'},
|
|
[03]={'+0+0','+1+0','+1+1','+0-2','+1-2'},
|
|
[30]={'+0+0','-1+0','-1-1','+0+2','-1+2'},
|
|
[12]={'+0+0','+1+0','+1-1','+0+2','+1+2'},
|
|
[21]={'+0+0','-1+0','-1+1','+0-2','-1-2'},
|
|
[32]={'+0+0','-1+0','-1-1','+0+2','-1+2'},
|
|
[23]={'+0+0','+1+0','+1+1','+0-2','+1-2'},
|
|
[02]={'+0+0'},[20]={'+0+0'},[13]={'+0+0'},[31]={'+0+0'},
|
|
},-- Z
|
|
false,-- S
|
|
false,-- J
|
|
false,-- L
|
|
false,-- T
|
|
noKickSet,-- O
|
|
{
|
|
[01]={'+0+0','-2+0','+1+0','-2-1','+1+2'},
|
|
[10]={'+0+0','+2+0','-1+0','+2+1','-1-2'},
|
|
[12]={'+0+0','-1+0','+2+0','-1+2','+2-1'},
|
|
[21]={'+0+0','+1+0','-2+0','+1-2','-2+1'},
|
|
[23]={'+0+0','+2+0','-1+0','+2+1','-1-2'},
|
|
[32]={'+0+0','-2+0','+1+0','-2-1','+1+2'},
|
|
[30]={'+0+0','+1+0','-2+0','+1-2','-2+1'},
|
|
[03]={'+0+0','-1+0','+2+0','-1+2','+2-1'},
|
|
[02]={'+0+0'},[20]={'+0+0'},[13]={'+0+0'},[31]={'+0+0'},
|
|
}-- I
|
|
}
|
|
}
|
|
for i=2,5 do SRS.kickTable[i]=SRS.kickTable[1] end
|
|
for i=8,29 do SRS.kickTable[i]=SRS.kickTable[1] end
|
|
end
|
|
|
|
local SRS_plus
|
|
do
|
|
SRS_plus={
|
|
centerTex=GC.DO{10,10,
|
|
{'setCL',1,1,1,.4},
|
|
{'fCirc',5,5,5},
|
|
{'setCL',1,1,1,.6},
|
|
{'fCirc',5,5,4},
|
|
{'setCL',1,1,1,.9},
|
|
{'fCirc',5,5,3},
|
|
{'setCL',1,1,1},
|
|
{'fCirc',5,5,2},
|
|
},
|
|
kickTable={
|
|
{
|
|
[01]={'+0+0','-1+0','-1+1','+0-2','-1-2'},
|
|
[10]={'+0+0','+1+0','+1-1','+0+2','+1+2'},
|
|
[03]={'+0+0','+1+0','+1+1','+0-2','+1-2'},
|
|
[30]={'+0+0','-1+0','-1-1','+0+2','-1+2'},
|
|
[12]={'+0+0','+1+0','+1-1','+0+2','+1+2'},
|
|
[21]={'+0+0','-1+0','-1+1','+0-2','-1-2'},
|
|
[32]={'+0+0','-1+0','-1-1','+0+2','-1+2'},
|
|
[23]={'+0+0','+1+0','+1+1','+0-2','+1-2'},
|
|
[02]={'+0+0','-1+0','+1+0','+0-1','+0+1'},
|
|
[20]={'+0+0','+1+0','-1+0','+0-1','+0+1'},
|
|
[13]={'+0+0','+0-1','-1+0','+1+0','+0+1'},
|
|
[31]={'+0+0','+0-1','-1+0','+1+0','+0+1'},
|
|
},-- Z
|
|
false,-- S
|
|
false,-- J
|
|
false,-- L
|
|
false,-- T
|
|
noKickSet,-- O
|
|
{
|
|
[01]={'+0+0','+1+0','-2+0','+1+2','-2-1'},
|
|
[10]={'+0+0','-1+0','+2+0','-1-2','+2+1'},
|
|
[03]={'+0+0','-1+0','+2+0','-1+2','+2-1'},
|
|
[30]={'+0+0','+1+0','-2+0','+1-2','-2+1'},
|
|
[12]={'+0+0','-1+0','+2+0','-1+2','+2-1'},
|
|
[21]={'+0+0','+1+0','-2+0','+1-2','-2+1'},
|
|
[32]={'+0+0','+1+0','-2+0','+1+2','-2-1'},
|
|
[23]={'+0+0','-1+0','+2+0','-1-2','+2+1'},
|
|
[02]={'+0+0','-1+0','+1+0','+0-1','+0+1'},
|
|
[20]={'+0+0','+1+0','-1+0','+0+1','+0-1'},
|
|
[13]={'+0+0','+0-1','-1+0','+1+0','+0+1'},
|
|
[31]={'+0+0','+0-1','+1+0','-1+0','+0+1'},
|
|
}-- I
|
|
}
|
|
}
|
|
for i=2,5 do SRS_plus.kickTable[i]=SRS_plus.kickTable[1] end
|
|
for i=8,29 do SRS_plus.kickTable[i]=SRS_plus.kickTable[1] end
|
|
end
|
|
|
|
local SRS_X
|
|
do
|
|
SRS_X={
|
|
centerTex=GC.DO{10,10,
|
|
{'setLW',2},
|
|
{'setCL',1,1,1,.4},
|
|
{'dCirc',5,5,4},
|
|
{'setLW',1},
|
|
{'setCL',1,1,1},
|
|
{'dCirc',5,5,3},
|
|
},
|
|
kickTable={
|
|
{
|
|
[01]={'+0+0','-1+0','-1+1','+0-2','-1-2'},
|
|
[10]={'+0+0','+1+0','+1-1','+0+2','+1+2'},
|
|
[03]={'+0+0','+1+0','+1+1','+0-2','+1-2'},
|
|
[30]={'+0+0','-1+0','-1-1','+0+2','-1+2'},
|
|
[12]={'+0+0','+1+0','+1-1','+0+2','+1+2'},
|
|
[21]={'+0+0','-1+0','-1+1','+0-2','-1-2'},
|
|
[32]={'+0+0','-1+0','-1-1','+0+2','-1+2'},
|
|
[23]={'+0+0','+1+0','+1+1','+0-2','+1-2'},
|
|
[02]={'+0+0','-1+0','+1+0','+0-1','+0+1'},
|
|
[20]={'+0+0','+1+0','-1+0','+0-1','+0+1'},
|
|
[13]={'+0+0','+0-1','-1+0','+1+0','+0+1'},
|
|
[31]={'+0+0','+0-1','-1+0','+1+0','+0+1'},
|
|
},-- Z
|
|
false,-- S
|
|
false,-- J
|
|
false,-- L
|
|
false,-- T
|
|
noKickSet,-- O
|
|
false,-- I
|
|
}
|
|
}
|
|
for i=2,5 do SRS_X.kickTable[i]=SRS_X.kickTable[1] end
|
|
for i=7,29 do SRS_X.kickTable[i]=TRS.kickTable[i] end
|
|
SRS_X.kickTable[10]=SRS_X.kickTable[1]-- P
|
|
SRS_X.kickTable[11]=SRS_X.kickTable[1]-- Q
|
|
end
|
|
|
|
local BiRS
|
|
do
|
|
local R=_strToVec{'+0+0','-1+0','-1-1','+0-1','-1+1','+1-1','+1+0','+0+1','+1+1','+0+2','-1+2','+1+2','-2+0','+2+0'}
|
|
local L=_strToVec{'+0+0','+1+0','+1-1','+0-1','+1+1','-1-1','-1+0','+0+1','-1+1','+0+2','+1+2','-1+2','+2+0','-2+0'}
|
|
local F=_strToVec{'+0+0','+0-1','+0+1','+0+2'}
|
|
local list={
|
|
{[02]=L,[20]=R,[13]=R,[31]=L},-- Z
|
|
{[02]=R,[20]=L,[13]=L,[31]=R},-- S
|
|
{[02]=L,[20]=R,[13]=L,[31]=R},-- J
|
|
{[02]=R,[20]=L,[13]=L,[31]=R},-- L
|
|
{[02]=F,[20]=F,[13]=L,[31]=R},-- T
|
|
{[02]=F,[20]=F,[13]=F,[31]=F},-- O
|
|
{[02]=F,[20]=F,[13]=R,[31]=L},-- I
|
|
|
|
{[02]=L,[20]=L,[13]=R,[31]=R},-- Z5
|
|
{[02]=R,[20]=R,[13]=L,[31]=L},-- S5
|
|
{[02]=L,[20]=R,[13]=L,[31]=R},-- P
|
|
{[02]=R,[20]=L,[13]=R,[31]=L},-- Q
|
|
{[02]=R,[20]=L,[13]=L,[31]=R},-- F
|
|
{[02]=L,[20]=R,[13]=R,[31]=L},-- E
|
|
{[02]=F,[20]=F,[13]=L,[31]=R},-- T5
|
|
{[02]=F,[20]=F,[13]=L,[31]=R},-- U
|
|
{[02]=R,[20]=L,[13]=L,[31]=R},-- V
|
|
{[02]=R,[20]=L,[13]=L,[31]=R},-- W
|
|
{[02]=F,[20]=F,[13]=F,[31]=F},-- X
|
|
{[02]=L,[20]=R,[13]=R,[31]=L},-- J5
|
|
{[02]=R,[20]=L,[13]=L,[31]=R},-- L5
|
|
{[02]=L,[20]=R,[13]=R,[31]=L},-- R
|
|
{[02]=R,[20]=L,[13]=L,[31]=R},-- Y
|
|
{[02]=L,[20]=R,[13]=R,[31]=L},-- N
|
|
{[02]=R,[20]=L,[13]=L,[31]=R},-- H
|
|
{[02]=F,[20]=F,[13]=F,[31]=F},-- I5
|
|
|
|
{[02]=F,[20]=F,[13]=F,[31]=F},-- I3
|
|
{[02]=R,[20]=L,[13]=L,[31]=R},-- C
|
|
{[02]=F,[20]=F,[13]=R,[31]=L},-- I2
|
|
{[02]=F,[20]=F,[13]=F,[31]=F},-- O1
|
|
}
|
|
for i=1,29 do
|
|
local a,b=R,L
|
|
if i==6 or i==18 then
|
|
a,b=b,a
|
|
end
|
|
list[i][01]=a; list[i][10]=b; list[i][03]=b; list[i][30]=a
|
|
list[i][12]=a; list[i][21]=b; list[i][32]=b; list[i][23]=a
|
|
end
|
|
BiRS={
|
|
centerTex=GC.DO{10,10,
|
|
{'setCL',1,1,1,.6},
|
|
{'fRect',0,3,10,4},
|
|
{'fRect',3,0,4,10},
|
|
{'setCL',1,1,1},
|
|
{'fRect',1,4,8,2},
|
|
{'fRect',4,1,2,8},
|
|
{'fRect',3,3,4,4},
|
|
},
|
|
kickTable=TABLE.new(function(P,d,ifpre)
|
|
local C=P.cur
|
|
local idir=(C.dir+d)%4
|
|
local kickList=list[C.id][C.dir*10+idir]
|
|
local icb=BLOCKS[C.id][idir]
|
|
local ix,iy do
|
|
local oldSC=C.RS.centerPos[C.id][C.dir]
|
|
local newSC=defaultCenterPos[C.id][idir]
|
|
ix,iy=P.curX+oldSC[2]-newSC[2],P.curY+oldSC[1]-newSC[1]
|
|
end
|
|
local dx,dy=0,0 do
|
|
local pressing=P.keyPressing
|
|
if pressing[1] and P:ifoverlap(C.bk,P.curX-1,P.curY) then dx=dx-1 end
|
|
if pressing[2] and P:ifoverlap(C.bk,P.curX+1,P.curY) then dx=dx+1 end
|
|
if pressing[7] and P:ifoverlap(C.bk,P.curX,P.curY-1) then dy= -1 end
|
|
end
|
|
while true do
|
|
for test=1,#kickList do
|
|
local fdx,fdy=kickList[test][1]+dx,kickList[test][2]+dy
|
|
if
|
|
dx*fdx>=0 and
|
|
fdx^2+fdy^2<=5 and
|
|
(P.freshTime>0 or fdy<=0)
|
|
then
|
|
local x,y=ix+fdx,iy+fdy
|
|
if not P:ifoverlap(icb,x,y) then
|
|
if P.gameEnv.moveFX and P.gameEnv.block then
|
|
P:createMoveFX()
|
|
end
|
|
P.curX,P.curY,C.dir=x,y,idir
|
|
C.bk=icb
|
|
P.spinLast=test==2 and 0 or 1
|
|
|
|
local t=P.freshTime
|
|
if not ifpre then
|
|
P:freshBlock('move')
|
|
end
|
|
if fdy>0 and P.freshTime==t and P.curY~=P.imgY then
|
|
P.freshTime=P.freshTime-1
|
|
end
|
|
|
|
local sfx
|
|
if ifpre then
|
|
sfx='prerotate'
|
|
elseif P:ifoverlap(icb,x,y+1) and P:ifoverlap(icb,x-1,y) and P:ifoverlap(icb,x+1,y) then
|
|
sfx='rotatekick'
|
|
P:_rotateField(d)
|
|
else
|
|
sfx='rotate'
|
|
end
|
|
if P.sound then
|
|
SFX.play(sfx,nil,P:getCenterX()*.15)
|
|
end
|
|
P.stat.rotate=P.stat.rotate+1
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Try release left/right, then softdrop, failed to rotate otherwise
|
|
if dx~=0 then
|
|
dx=0
|
|
elseif dy~=0 then
|
|
dy=0
|
|
else
|
|
return
|
|
end
|
|
end
|
|
end,29)
|
|
}
|
|
end
|
|
|
|
local ARS_Z
|
|
do
|
|
local lrOnly={'+0+0','+1+0','-1+0'}
|
|
local upOnly={'+0+0','+0+1','+0+2'}
|
|
local lrSet={
|
|
[01]=lrOnly,[10]=lrOnly,[03]=lrOnly,[30]=lrOnly,
|
|
[12]=lrOnly,[21]=lrOnly,[32]=lrOnly,[23]=lrOnly,
|
|
[02]=lrOnly,[20]=lrOnly,[13]=lrOnly,[31]=lrOnly,
|
|
}
|
|
local upSet={
|
|
[01]=upOnly,[10]=upOnly,[03]=upOnly,[30]=upOnly,
|
|
[12]=upOnly,[21]=upOnly,[32]=upOnly,[23]=upOnly,
|
|
[02]=upOnly,[20]=upOnly,[13]=upOnly,[31]=upOnly,
|
|
}
|
|
local centerPos=TABLE.copy(defaultCenterPos)
|
|
centerPos[1]={[0]={1,1},{1,0},{1,1},{1,0}}-- Z
|
|
centerPos[2]={[0]={1,1},{1,1},{1,1},{1,1}}-- S
|
|
centerPos[3]={[0]={1,1},{1,0},{1,1},{1,1}}-- L
|
|
centerPos[4]={[0]={1,1},{1,0},{1,1},{1,1}}-- J
|
|
centerPos[5]={[0]={1,1},{1,0},{1,1},{1,1}}-- T
|
|
centerPos[7]={[0]={0,2},{2,0},{0,2},{2,0}}-- I
|
|
centerPos[10]={[0]={1,1},{1,0},{1,1},{1,0}}-- P
|
|
centerPos[11]={[0]={1,1},{1,1},{1,1},{1,1}}-- Q
|
|
centerPos[15]={[0]={1,1},{1,0},{1,1},{1,1}}-- U
|
|
centerPos[16]={[0]={1,1},{1,1},{1,1},{1,1}}-- V
|
|
centerPos[19]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- J5
|
|
centerPos[20]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- L5
|
|
centerPos[21]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- R
|
|
centerPos[22]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- Y
|
|
centerPos[23]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- N
|
|
centerPos[24]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- H
|
|
centerPos[26]={[0]={0,1},{0,0},{0,1},{0,0}}-- I3
|
|
centerPos[28]={[0]={0,1},{0,0},{0,1},{0,0}}-- I2
|
|
|
|
ARS_Z={
|
|
centerTex=GC.DO{10,10,
|
|
{'setLW',2},
|
|
{'setCL',1,1,1,.5},
|
|
{'line',1,9,5,1,9,9},
|
|
{'setCL',1,1,1,1},
|
|
{'line',2,8,5,2,8,8},
|
|
},
|
|
centerPos=centerPos,
|
|
kickTable=TABLE.new(lrSet,29),
|
|
}
|
|
ARS_Z.kickTable[7]=upSet
|
|
ARS_Z.kickTable[25]=upSet
|
|
end
|
|
|
|
local DRS_weak
|
|
do
|
|
local centerPos=TABLE.copy(defaultCenterPos)
|
|
centerPos[1]={[0]={1,1},{1,0},{1,1},{1,1}}-- Z
|
|
centerPos[2]={[0]={1,1},{1,0},{1,1},{1,1}}-- S
|
|
centerPos[3]={[0]={1,1},{1,0},{1,1},{1,1}}-- L
|
|
centerPos[4]={[0]={1,1},{1,0},{1,1},{1,1}}-- J
|
|
centerPos[5]={[0]={1,1},{1,0},{1,1},{1,1}}-- T
|
|
centerPos[7]={[0]={.5,1.5},{1.5,-.5},{.5,1.5},{1.5,.5}}-- I
|
|
centerPos[10]={[0]={1,1},{1,0},{1,1},{1,0}}-- P
|
|
centerPos[11]={[0]={1,1},{1,1},{1,1},{1,1}}-- Q
|
|
centerPos[15]={[0]={1,1},{1,0},{1,1},{1,1}}-- U
|
|
centerPos[16]={[0]={1,1},{1,1},{1,1},{1,1}}-- V
|
|
centerPos[19]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- J5
|
|
centerPos[20]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- L5
|
|
centerPos[21]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- R
|
|
centerPos[22]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- Y
|
|
centerPos[23]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- N
|
|
centerPos[24]={[0]={1.5,1.5},{1.5,0.5},{1.5,1.5},{1.5,0.5}}-- H
|
|
centerPos[26]={[0]={0,1},{0,0},{0,1},{0,0}}-- I3
|
|
centerPos[28]={[0]={0,1},{0,0},{0,1},{0,0}}-- I2
|
|
|
|
local L={'+0+0','-1+0','+1+0','+0-1','-1-1','+1-1'}
|
|
local R={'+0+0','+1+0','-1+0','+0-1','+1-1','-1-1'}
|
|
|
|
local Z={
|
|
[01]=R,[10]=L,[03]=L,[30]=R,
|
|
[12]=R,[21]=L,[32]=L,[23]=R,
|
|
[02]=R,[20]=L,[13]=L,[31]=R,
|
|
}
|
|
local S=_reflect(Z)
|
|
|
|
DRS_weak={
|
|
centerTex=GC.DO{10,10,
|
|
{'setLW',2},
|
|
{'dRect',1,1,8,8},
|
|
{'fRect',3,3,4,4},
|
|
},
|
|
centerPos=centerPos,
|
|
kickTable={
|
|
Z,S,-- Z,S
|
|
Z,S,-- J,L
|
|
Z,-- T
|
|
noKickSet,-- O
|
|
Z,-- I
|
|
|
|
Z,S,-- Z5,S5
|
|
Z,S,-- P,Q
|
|
Z,S,-- F,E
|
|
Z,Z,Z,Z,-- T5,U,V,W
|
|
noKickSet,-- X
|
|
Z,S,-- J5,L5
|
|
Z,S,-- R,Y
|
|
Z,S,-- N,H
|
|
Z,-- I5
|
|
|
|
Z,Z,-- I3,C
|
|
Z,Z,-- I2,O1
|
|
}
|
|
}
|
|
end
|
|
|
|
local ASC
|
|
do
|
|
local L={'+0+0','+1+0','+0-1','+1-1','+0-2','+1-2','+2+0','+2-1','+2-2','-1+0','-1-1','+0+1','+1+1','+2+1','-1-2','-2+0','+0+2','+1+2','+2+2','-2-1','-2-2'}
|
|
local R=_flipList(L)
|
|
local F={'+0+0'}
|
|
local centerPos=TABLE.copy(defaultCenterPos)
|
|
centerPos[6]={[0]={0,0},{1,0},{1,1},{0,1}}
|
|
centerPos[7]={[0]={0,1},{2,0},{0,2},{1,0}}
|
|
ASC={
|
|
centerTex=GC.DO{10,10,
|
|
{'setLW',2},
|
|
{'setCL',1,1,1,.7},
|
|
{'line',1,1,9,9},
|
|
{'line',1,9,9,1},
|
|
{'setLW',1},
|
|
{'setCL',1,1,1},
|
|
{'line',1,1,9,9},
|
|
{'line',1,9,9,1},
|
|
},
|
|
centerPos=centerPos,
|
|
kickTable=TABLE.new({
|
|
[01]=R,[10]=L,[03]=L,[30]=R,
|
|
[12]=R,[21]=L,[32]=L,[23]=R,
|
|
[02]=F,[20]=F,[13]=F,[31]=F,
|
|
},29)
|
|
}
|
|
end
|
|
|
|
local ASC_plus
|
|
do
|
|
local L={'+0+0','+1+0','+0-1','+1-1','+0-2','+1-2','+2+0','+2-1','+2-2','-1+0','-1-1','+0+1','+1+1','+2+1','-1-2','-2+0','+0+2','+1+2','+2+2','-2-1','-2-2'}
|
|
local R=_flipList(L)
|
|
local F={'+0+0','-1+0','+1+0','+0-1','-1-1','+1-1','+0-2','-1-2','+1-2','-2+0','+2+0','-2-1','+2-1','-2+1','+2+1','+0+2','-1+2','+1+2'}
|
|
local centerPos=TABLE.copy(defaultCenterPos)
|
|
centerPos[6]={[0]={0,0},{1,0},{1,1},{0,1}}
|
|
centerPos[7]={[0]={0,1},{2,0},{0,2},{1,0}}
|
|
ASC_plus={
|
|
centerTex=GC.DO{10,10,
|
|
{'setLW',2},
|
|
{'setCL',1,1,1,.7},
|
|
{'line',1,1,9,9},
|
|
{'line',1,9,9,1},
|
|
{'setLW',1},
|
|
{'setCL',1,1,1},
|
|
{'line',1,1,9,9},
|
|
{'line',1,9,9,1},
|
|
{'fCirc',5,5,3},
|
|
},
|
|
centerPos=centerPos,
|
|
kickTable=TABLE.new({
|
|
[01]=R,[12]=R,[23]=R,[30]=R,
|
|
[10]=L,[21]=L,[32]=L,[03]=L,
|
|
[02]=F,[20]=F,[13]=F,[31]=F,
|
|
},29)
|
|
}
|
|
end
|
|
|
|
local C2
|
|
do
|
|
local L={'+0+0','-1+0','+1+0','+0-1','-1-1','+1-1','-2+0','+2+0'}
|
|
C2={
|
|
centerTex=GC.DO{10,10,
|
|
{'setLW',2},
|
|
{'dRect',2,2,6,6},
|
|
},
|
|
kickTable=TABLE.new({
|
|
[01]=L,[10]=L,[12]=L,[21]=L,
|
|
[23]=L,[32]=L,[30]=L,[03]=L,
|
|
[02]=L,[20]=L,[13]=L,[31]=L,
|
|
},29)
|
|
}
|
|
end
|
|
|
|
local C2_sym
|
|
do
|
|
local L={'+0+0','-1+0','+1+0','+0-1','-1-1','+1-1','-2+0','+2+0'}
|
|
local R={'+0+0','+1+0','-1+0','+0-1','+1-1','-1-1','+2+0','-2+0'}
|
|
|
|
local Z={
|
|
[01]=R,[10]=L,[03]=L,[30]=R,
|
|
[12]=R,[21]=L,[32]=L,[23]=R,
|
|
[02]=R,[20]=L,[13]=L,[31]=R,
|
|
}
|
|
local S=_reflect(Z)
|
|
|
|
C2_sym={
|
|
centerTex=GC.DO{10,10,
|
|
{'setLW',2},
|
|
{'dRect',1,1,8,8},
|
|
{'fRect',3,3,4,4},
|
|
},
|
|
kickTable={
|
|
Z,S,-- Z,S
|
|
Z,S,-- J,L
|
|
Z,-- T
|
|
noKickSet,-- O
|
|
Z,-- I
|
|
|
|
Z,S,-- Z5,S5
|
|
Z,S,-- P,Q
|
|
Z,S,-- F,E
|
|
Z,Z,Z,Z,-- T5,U,V,W
|
|
noKickSet,-- X
|
|
Z,S,-- J5,L5
|
|
Z,S,-- R,Y
|
|
Z,S,-- N,H
|
|
Z,-- I5
|
|
|
|
Z,Z,-- I3,C
|
|
Z,Z,-- I2,O1
|
|
}
|
|
}
|
|
end
|
|
|
|
local N64
|
|
do
|
|
local R={'+0+0','+0-1','+1+0','-1+0','+0+1'}
|
|
local L={'+0+0','+0-1','-1+0','+1+0','+0+1'}
|
|
N64={
|
|
centerTex=GC.DO{10,10,
|
|
{'setLW',2},
|
|
{'line',2,9,2,1,8,9,8,1},
|
|
},
|
|
kickTable=TABLE.new({
|
|
[01]=R,[10]=L,[12]=R,[21]=L,
|
|
[23]=R,[32]=L,[30]=R,[03]=L,
|
|
},29)
|
|
}
|
|
end
|
|
|
|
local N64_plus
|
|
do
|
|
local R={'+0+0','+0-1','+1+0','-1+0','+0+1'}
|
|
local L={'+0+0','+0-1','-1+0','+1+0','+0+1'}
|
|
local F={'+0+0','+0-1','+0+1'}
|
|
N64_plus={
|
|
centerTex=GC.DO{10,10,
|
|
{'setLW',2},
|
|
{'line',4,9,2,9,2,1,8,9,8,1,6,1},
|
|
},
|
|
kickTable=TABLE.new({
|
|
[01]=R,[10]=L,[12]=R,[21]=L,
|
|
[23]=R,[32]=L,[30]=R,[03]=L,
|
|
[02]=F,[20]=F,[13]=F,[31]=F,
|
|
},29)
|
|
}
|
|
end
|
|
|
|
local Classic do
|
|
local centerPos=TABLE.copy(defaultCenterPos)
|
|
centerPos[1]={[0]={1,1},{1,0},{1,1},{1,0}}
|
|
centerPos[2]={[0]={1,1},{1,0},{1,1},{1,0}}
|
|
centerPos[7]={[0]={0,2},{1,0},{0,2},{1,0}}
|
|
Classic={
|
|
centerTex=GC.DO{10,10,
|
|
{'setLW',2},
|
|
{'setCL',1,1,1,.5},
|
|
{'line',8,9,1,9,1,1,8,1},
|
|
{'setCL',1,1,1,1},
|
|
{'line',7,8,2,8,2,2,7,2},
|
|
},
|
|
centerPos=centerPos,
|
|
kickTable=TABLE.new(noKickSet,29)
|
|
}
|
|
end
|
|
|
|
local Classic_plus do
|
|
local centerPos=TABLE.copy(defaultCenterPos)
|
|
centerPos[1]={[0]={1,1},{1,0},{1,1},{1,0}}
|
|
centerPos[2]={[0]={1,1},{1,0},{1,1},{1,0}}
|
|
centerPos[7]={[0]={0,2},{1,0},{0,2},{1,0}}
|
|
Classic_plus={
|
|
centerTex=GC.DO{10,10,
|
|
{'setLW',2},
|
|
{'setCL',1,1,1,1},
|
|
{'line',8,9,1,9,1,1,8,1},
|
|
{'fRect',3,3,4,4},
|
|
},
|
|
centerPos=centerPos,
|
|
kickTable=TABLE.new(noKickSet_180,29)
|
|
}
|
|
end
|
|
|
|
local None={
|
|
centerTex=GC.DO{10,10,
|
|
{'setLW',2},
|
|
{'line',2,2,6,6},
|
|
},
|
|
kickTable=TABLE.new(noKickSet,29)
|
|
}
|
|
|
|
local None_plus={
|
|
centerTex=GC.DO{10,10,
|
|
{'setLW',2},
|
|
{'line',1,1,7,7},
|
|
{'fRect',2,2,4,4},
|
|
},
|
|
kickTable=TABLE.new(noKickSet_180,29)
|
|
}
|
|
|
|
local RSlist={
|
|
TRS=TRS,
|
|
SRS=SRS,
|
|
SRS_plus=SRS_plus,
|
|
SRS_X=SRS_X,
|
|
BiRS=BiRS,
|
|
ARS_Z=ARS_Z,
|
|
DRS_weak=DRS_weak,
|
|
ASC=ASC,
|
|
ASC_plus=ASC_plus,
|
|
C2=C2,
|
|
C2_sym=C2_sym,
|
|
N64=N64,
|
|
N64_plus=N64_plus,
|
|
Classic=Classic,
|
|
Classic_plus=Classic_plus,
|
|
None=None,
|
|
None_plus=None_plus,
|
|
}
|
|
|
|
for _,rs in next,RSlist do
|
|
if not rs.centerDisp then rs.centerDisp=TABLE.new(true,29) end
|
|
if not rs.centerPos then rs.centerPos=defaultCenterPos end
|
|
if not rs.centerTex then rs.centerTex=defaultCenterTex end
|
|
|
|
-- Make all string vec to the same table vec
|
|
for _,set in next,rs.kickTable do
|
|
if type(set)=='table' then
|
|
for _,list in next,set do
|
|
if type(list[1])=='string' then
|
|
_strToVec(list)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
return RSlist
|