Files
Techmino/parts/RSlist.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