Garry,
I have a working ZRF implementing all the rules as you have given them on
the web page. Please send me the graphics files and I will finish the
implementation.
The Valkyrie swap is evaluated correctly when involving non-royal pieces,
only the swap with a King is problematic. The bug is in the evaluation of
win/loss/draw conditions within the consideration of the move: removing a
royal piece temporarily to replace it elsewhere is deemed a loss, whereas
after the move is executed and Zillions checks the conditions, it is
handled correctly. In other words, during a swap move, Zillions mistakenly
thinks the temporary disappearance of the King while it is being swapped to
another square is permanent.
In any case, the indirect capture target technique solves the problem.
One question: is it legal to use the Valkyrie swap to make a null move?
That is if a Valkyrie on c6 swaps the other Valkyrie at c9 back to c6,
then you have made a move but the position on the board hasn't changed.
In most CV's the answer is 'No', so I have coded accordingly: a
Valkyrie cannot swap positions with the other Valkyrie and a King using a
Valkyrie move connot swap positions with the other King.
If you intend to allow null moves it is trivially simple to change the
code to allow them.