It might have something to do with the locust captures, especially hit-and-run captures, since Chess has no multi-moves (except for castling and en passant, which do not affect Queens at all). Hit-and-run captures of a Lion would move it to either an empty square or a square with a non-Lion piece, so that might mess up the call stack a bit. However, since this works just fine in games that only have single captures affecting the target piece for forced turn passes, I'm currently stumped.
I do have a theory though. If AlphaBeta() repeatedly calls itself, it would also call Tinker() repeatedly. This would mean that when kind |= 64 is set, it is never unset if AlphaBeta() decides to do a move that doesn't capture a Lion. That might have something to do with it.
It might have something to do with the locust captures, especially hit-and-run captures, since Chess has no multi-moves (except for castling and en passant, which do not affect Queens at all). Hit-and-run captures of a Lion would move it to either an empty square or a square with a non-Lion piece, so that might mess up the call stack a bit. However, since this works just fine in games that only have single captures affecting the target piece for forced turn passes, I'm currently stumped.
I do have a theory though. If AlphaBeta() repeatedly calls itself, it would also call Tinker() repeatedly. This would mean that when kind |= 64 is set, it is never unset if AlphaBeta() decides to do a move that doesn't capture a Lion. That might have something to do with it.