Indeed, 'kind' is a global variable, the bits of which can be set during the tracing out of a move path by (possibly recursive) calls of NextLeg(), or the StackMove() that this results in. (Which again optionally calls xxxTinker() via AlterMove().) In the end the bit flags indicate whether the move passed through a square that was mutated in the previous two moves, and thus a discovered attack, recapture or pin enforcement. And thus now also whether it is prioritized or triggers a forced pass.
The problem is that the capture matrix also specifies what should happen for moves to an empty square. Hit-and-run captures make a capture, but end on an empty square. It is not obvious that an occupant should dominate the empty square here.
I don't think it would be wise to make the very general function of the apostrophe of exempting from capture matrix and morph board subject to restrictions that depend on the kind of move it is applied to. The trade threshold only makes sense for double captures.
Indeed, 'kind' is a global variable, the bits of which can be set during the tracing out of a move path by (possibly recursive) calls of NextLeg(), or the StackMove() that this results in. (Which again optionally calls xxxTinker() via AlterMove().) In the end the bit flags indicate whether the move passed through a square that was mutated in the previous two moves, and thus a discovered attack, recapture or pin enforcement. And thus now also whether it is prioritized or triggers a forced pass.
The problem is that the capture matrix also specifies what should happen for moves to an empty square. Hit-and-run captures make a capture, but end on an empty square. It is not obvious that an occupant should dominate the empty square here.
I don't think it would be wise to make the very general function of the apostrophe of exempting from capture matrix and morph board subject to restrictions that depend on the kind of move it is applied to. The trade threshold only makes sense for double captures.