Ok I think I know what you are getting at & damn... sliding puzzles; both mine & Nige's (methinks?) least favorite form of puzzle

quick tip: if you want to keep scripts compact & use less lines then don't drop lines for every little thing... sometimes you can create a query or function on a single line.
if bsizec == 1 and bsizer == 1 then
ready = board[row(curpos)][col(curpos)+1] == 0
elseif bsizec == 2 and bsizer == 1 then
ready = board[row(curpos)][col(curpos)+2] == 0
elseif bsizec == 1 and bsizer == 2 then
ready = board[row(curpos)][col(curpos)+1] == 0 and
board[row(curpos)+1][col(curpos)+1] == 0
elseif bsizec == 2 and bsizer == 2 then
ready = board[row(curpos)][col(curpos)+2] == 0 and
board[row(curpos)+1][col(curpos)+2] == 0
end
to...
if bsizec == 1 and bsizer == 1 then ready = board[row(curpos)][col(curpos)+1] == 0
elseif bsizec == 2 and bsizer == 1 then ready = board[row(curpos)][col(curpos)+2] == 0
elseif bsizec == 1 and bsizer == 2 then ready = board[row(curpos)][col(curpos)+1] == 0 and board[row(curpos)+1][col(curpos)+1] == 0
elseif bsizec == 2 and bsizer == 2 then ready = board[row(curpos)][col(curpos)+2] == 0 and board[row(curpos)+1][col(curpos)+2] == 0 end
or for example....
if something then do something; print("something"); return something
elseif other then....
etc...
I prefer to keep things compact but still keep them structured. It really helps keep amount of lines down; same goes for incrementing tables.
t,= {}
t[1] = ...
t[2] = ...
etc...
-- to
t = {something, "something_else"}
-- or
t = {"name" = "bob", "profession" = "builder"}
just a few examples on keeping scripts small. also variables are good for storing links & getObjects into for quick access.