It would be nice to have a strict/exact version of Leap and the turtle walk sites function. As it is, they always apply mirrored and rotational symmetry. Leap has a forward:true option but that doesn't prohibit reflection, but it does prevent convoluted paths that involve a step in the 'backwards' player direction from working at all. The forward:true option also prevents walks that move straight to the side.
(game "LeapTest"
(players { (player N) (player S) })
(equipment {
(board (square 6))
(piece "Pawn" Each
(move
Leap { { L F F } { R F F } }
forward:true
(to if:(is Empty (to))))
)
})
(rules
(start {
(place "Pawn1" {"C2"})
(place "Pawn2" {"D6"})
})
(play (forEach Piece))
(end (if (no Moves Next) (result Mover Win)))
)
)
I looked at the implementation of the Shogi Knight piece, and it uses a complicated chain of apply if:true to do a turtle walk. Understanding the logic of how that move is implemented requires more knowledge about how move generation works, than the documentation provides. It's too much for me to be confident enough to replicate.
(game "LeapTest"
(players { (player N) (player S) })
(equipment {
(board (square 6))
(piece "Pawn" Each
(move
Leap { { L F F } { R F F } }
forward:true
(to if:(is Empty (to))))
)
})
(rules
(start {
(place "Pawn1" {"C2"})
(place "Pawn2" {"D6"})
})
(play (forEach Piece))
(end (if (no Moves Next) (result Mover Win)))
)
)
I looked at the implementation of the Shogi Knight piece, and it uses a complicated chain of apply if:true to do a turtle walk. Understanding the logic of how that move is implemented requires more knowledge about how move generation works, than the documentation provides. It's too much for me to be confident enough to replicate.