if ((event.type = AMessage.TOOLSELECT)&(GlobData.BActive == 1)) then do
BOldFlood = GlobData.BFlood
if (event.code1 < 1) then GlobData.BFlood = 0
if (event.code1 >= 1) then GlobData.BFlood = 1
if ((event.code1 = 7)|(GlobData.BFlood ~= BOldFlood)) then do
success = DrawChessBoard()
sendmessage "*****"||GlobData.BFlood
end
end
if (((event.type = AMessage.MOUSEDOWN)|((event.type = AMessage.MOUSEUP)&(BInitialSquareSet = 1)))&((GlobData.turn = GlobData.BActive)|(GlobData.BConnectMode = 0))) then do
if ((XTo < 0)|(XTo > 7)|(YTo < 0)|(YTo > 7)) then do
GlobData.moverr = "Can't move off of board"
return 0
end
/* A move from off of the board is illegal */
if ((XFrom < 0)|(XFrom > 7)|(YFrom < 0)|(YFrom > 7)) then do
GlobData.moverr = "Can't move from off of board"
return 0
end
/* Blanks can't move */
if (ChessBoard.XFrom.YFrom == Piece.BLANK) then do
GlobData.moverr = "Can't move a blank square"
return 0
end
/* A move to the same spot we're on is illegal */
if ((XFrom == XTo)&(YFrom == YTo)) then do
GlobData.moverr = "Can't move onto yourself"
return 0
end
/* A move onto one of your own pieces is illegal */
if ((ChessBoard.XTo.YTo * ChessBoard.XFrom.YFrom) > 0) then do
/* except when you're castling */
if (((ChessBoard.XTo.YTo == Piece.Rook)&(ChessBoard.XFrom.YFrom == Piece.King))|((ChessBoard.XTo.YTo == -Piece.Rook)&(ChessBoard.XFrom.YFrom == -Piece.King))) then do
/* nothing right now, we'll check for castling later */
end
else do
GlobData.moverr = "Can't attack your own piece"
return 0
end
end
/* Rules for the PAWN */
if (abs(ChessBoard.XFrom.YFrom) == Piece.PAWN) then do
GlobData.moverr = "Bad pawn move"
if (ChessBoard.XFrom.YFrom < 0) then do
PawnMoveDir = -1
end
else PawnMoveDir = 1
if ((XTo == XFrom)&(ChessBoard.XTo.YTo ~= Piece.BLANK)) then do
GlobData.moverr = "Pawn can't attack forward"
return 0
end
if ((XTo == XFrom)&(abs(YFrom - YTo) == 2)) then do
/* First move for a pawn can be two spaces, if both spaces are blank */
Ytemp = YFrom+PawnMoveDir
if ((ChessBoard.XFrom.Ytemp) ~= Piece.BLANK) then return 0
if ((YFrom == 1)&(PawnMoveDir ~= 1)) then return 0
if ((YFrom == 6)&(PawnMoveDir ~= -1)) then return 0
if ((YFrom ~= 1)&(YFrom ~= 6)) then return 0
end
else do
if (YTo ~= (YFrom + PawnMoveDir)) then return 0
if (abs(XFrom - XTo) > 1) then return 0
if ((abs(XFrom - XTo) == 1)&(ChessBoard.XTo.YTo == Piece.BLANK)) then return 0
end
end
/* Rules for the ROOK */
if (abs(ChessBoard.XFrom.YFrom) == Piece.ROOK) then do
if ((XFrom ~= XTo)&(YFrom ~= YTo)) then do
GlobData.moverr = "Rook must move horizontally or vertically"
return 0
end
if (GlideOK(XFrom,YFrom,XTo,YTo) == 0) then do
GlobData.moverr = "Move is blocked"
return 0
end
end
/* Rules for the KNIGHT */
if (abs(ChessBoard.XFrom.YFrom) == Piece.KNIGHT) then do