💡📝H. G. Muller wrote on Mon, Jan 23, 2023 09:04 PM UTC:
OK, I see. There is something very wrong with NewClick(). The XBetza compiler inserts a dummy leg at the end of a non-final sliding leg with m rights, to act like a loop directive. The old interpreter needed that, to remember from where it had been attempting the subsequent legs, so that it could resume elongating the sliding leg for another move when it was done. The AI's move generator doesn't need that, and just ignores these dummy legs, recognized by the mode flags being set to -1. But the classification of moves in NewClick() mistakes it for a genuine leg of the move, and since -1 has all flag bits set, it mistakenly thinks that it is dealing with a castling for the myacabQ part (which the compiler already separates from the pyacabQ part, for the purpose of inserting the loop directive in the former, while the latter doesn't need one). Thinking that it is a castling makes it eliminate the request for some clicks which are really needed to distinguish different double burns from an empty square. The (af)0 notation doesn't suffer from that, because none of the moves to which it expands contains any slider legs.
OK, I see. There is something very wrong with NewClick(). The XBetza compiler inserts a dummy leg at the end of a non-final sliding leg with m rights, to act like a loop directive. The old interpreter needed that, to remember from where it had been attempting the subsequent legs, so that it could resume elongating the sliding leg for another move when it was done. The AI's move generator doesn't need that, and just ignores these dummy legs, recognized by the mode flags being set to -1. But the classification of moves in NewClick() mistakes it for a genuine leg of the move, and since -1 has all flag bits set, it mistakenly thinks that it is dealing with a castling for the myacabQ part (which the compiler already separates from the pyacabQ part, for the purpose of inserting the loop directive in the former, while the latter doesn't need one). Thinking that it is a castling makes it eliminate the request for some clicks which are really needed to distinguish different double burns from an empty square. The (af)0 notation doesn't suffer from that, because none of the moves to which it expands contains any slider legs.
I will try to fix this tomorrow.