This can be used for Bishop, Rook, or Queen moves, though it does have a special one for Rook moves that also sets an attribute for whether it can still castle to false.
The main feature that makes this a slide instead of a single-step move is the while loop. $1 is the parameter with the value of the direction to move. After moving once in this direction, it checks whether it is empty, and if it is empty, it allows the move with the add command, and it moves again in the same direction. If it reaches an occupied space or the end of the board, it breaks out of the loop, because the empty? condition is no longer met. At this point, it tests the same space with (verify not-friend?) to tell whether it is one without a piece belonging to the same player. If it's an enemy piece or empty, it will allow the move with the add command.
This uses the same method of a while loop, but in addition to allowing a move to a certain space, it makes sure that the allowed move includes the the operation of setting the attribute never-moved? to false.
For a slide, you need a loop. Since I don't know how your Mason piece moves, I'll give you an example from the Chess.zrf:
This can be used for Bishop, Rook, or Queen moves, though it does have a special one for Rook moves that also sets an attribute for whether it can still castle to false.
The main feature that makes this a slide instead of a single-step move is the while loop. $1 is the parameter with the value of the direction to move. After moving once in this direction, it checks whether it is empty, and if it is empty, it allows the move with the add command, and it moves again in the same direction. If it reaches an occupied space or the end of the board, it breaks out of the loop, because the empty? condition is no longer met. At this point, it tests the same space with (verify not-friend?) to tell whether it is one without a piece belonging to the same player. If it's an enemy piece or empty, it will allow the move with the add command.
The Rook-slide looks like this:
This uses the same method of a while loop, but in addition to allowing a move to a certain space, it makes sure that the allowed move includes the the operation of setting the attribute never-moved? to false.