🕸Fergus Duniho wrote on Mon, May 25, 2020 09:41 PM UTC:
This code is in the Post-Move section, which means it is running after the move has been performed. The ask command does not perform a move right then and there. What it does is insert a move into the moves list. To guarantee that a move is allowed before it is made, you should define what is allowed in the Pre-Game section.
Also, the ask command should be used only as an alternative to entering the notation for a move. Once the ask command has been used on the current turn, the move it adds to the move list will be in the move list, and there will no longer be any need to use the ask command each time the same move is repeated. Remember that when you run Game Courier, it repeats all past moves, but when past moves have already been made, there is no longer any need to ask the player which move to make. Moreover, continuing to do so would stop the game from moving forward.
There are three things to check in determining whether to use the ask command. The first is whether the move made possible by the ask command has already been made. If it has been made, there is no need to ask whether to make the move. If it hasn't been made, there are two other things to check. The White_Pawn and Black_Pawn subroutines are designed to allow optional promotion in games with extended promotion zones, such as Grand Chess. Instead of entering a placeholder for an empty move, such as the skip command, these don't do anything special to mark that a Pawn has not promoted. Instead, they both use this condition to tell whether to use askpromote:
if not $answered and == mln $maxmln:
When the ask or askpromote command is used, it sets $answered to true. But this lasts only for the current turn. It will not help when you repeat past moves. So, this line also checks whether it is the latest move with == mln $maxmln. If a promotion move has not been made, and the command has not been answered on the current move, and it is the latest move, it asks what to promote to. Otherwise, it does not.
This code is in the Post-Move section, which means it is running after the move has been performed. The ask command does not perform a move right then and there. What it does is insert a move into the moves list. To guarantee that a move is allowed before it is made, you should define what is allowed in the Pre-Game section.
Also, the ask command should be used only as an alternative to entering the notation for a move. Once the ask command has been used on the current turn, the move it adds to the move list will be in the move list, and there will no longer be any need to use the ask command each time the same move is repeated. Remember that when you run Game Courier, it repeats all past moves, but when past moves have already been made, there is no longer any need to ask the player which move to make. Moreover, continuing to do so would stop the game from moving forward.
There are three things to check in determining whether to use the ask command. The first is whether the move made possible by the ask command has already been made. If it has been made, there is no need to ask whether to make the move. If it hasn't been made, there are two other things to check. The White_Pawn and Black_Pawn subroutines are designed to allow optional promotion in games with extended promotion zones, such as Grand Chess. Instead of entering a placeholder for an empty move, such as the skip command, these don't do anything special to mark that a Pawn has not promoted. Instead, they both use this condition to tell whether to use askpromote:
if not $answered and == mln $maxmln:
When the ask or askpromote command is used, it sets $answered to true. But this lasts only for the current turn. It will not help when you repeat past moves. So, this line also checks whether it is the latest move with == mln $maxmln. If a promotion move has not been made, and the command has not been answered on the current move, and it is the latest move, it asks what to promote to. Otherwise, it does not.