The way pieces are defined in the fmax.ini file allows for a single change in move properties during the move. This includes range and direction of the move, (together referred to as 'step vector'), but also 'move rights', which specify what this step of the move is allowed to do (e.g. capture, non-capture).
Originally, I put in this feature to handle the Chinese pieces, Elephant and Horse. They are 'lame' leapers, meaning their move really goes in two steps, over an intermediate square, but they are not allowed to terminate the move (and end up) on this intermediate square. They can be blocked there, however. So the Chinese Elephant is defined in Fairy-Max as a double leaper, with both leaps having the same step vector (e.g. (1,1), so it is not a bent double leaper). The first step has no move rights at all, however (neither capture, nor non-capture) and is specified as 'slider type', meaning the move can continue if the target square was empty. The next step is then made according to the secondary move description, which now has both capture and non-capture rights, and is leaper type (meaning it cannot be continued even if the target square was empty). So the move stops there.
Similarly, the Horse is a bent double leaper, with no rights after its first leap other than to continue with the second leap. To implement the bend, the secondary step vector now is different from the primary one (e.g. (1,0) and (1,1)). As Fairy-Max does not assume symmetry of any kind of the described pieces (to handle, say, the Shogi Generals), all 8 move directions of the Horse have to be enetered seperately in the description. This is cumbersome, but allows maximal flexibility in defining pieces.
The Hero could be described in the Fairy-Max system as a (2,0) Dababbah step with full rights (capt + non-capt) and continuation, with secondary (1,0) Wazir step with full rights but termination. This would take care of the 'jump 2' and 'jump 2 and step 1' moves, and would have to be supplemented by the other move in the same direction given as a (1,0) Wazir move with full rights and continuation plus a secondary (2,0) leap with full rights and termination. The slight disadvantage would be that, if both intervening squares are empty, the (3,0) move is now described in duplicate, and in the Fairy-Max search woud be attempted twice. But Fairy-Max is not very sensitive to such duplicate descriptions, as the retry of the move would usually give an immediate hash-table hit.
For a Bent Hero, you would have to describe all possible bend moves separately, like for the Horse. E.g. (1,0)+(2,0), (1,0)+(0,2), (1,0)+(-2,0) and (1,0)+(0,-2) for the 'step 1 and slide 2' moves starting in the (1,0) direction. Again cumbersome, but unavoidable if you want to retain the option of allowing only a subset of all possible bends (like the Horse only used the forward diagonal secondery steps).
Fairy-Max does not go beyond a secondary move description; if the secondary step has a continuation (i.e. is also defined as slider-like) it alternates back to the primary move description. This allows implementation of pieces like the Crooked Bishop. Normal sliders are implemented by making primary and secondary move description the same. For hoppers (e.g. Chinese Cannon, or Grasshopper) the primary and secondary move descriptions are used somewhat differently: they don't alternate step by step, but only when the piece hops over its platform. So they describe the moves before and after the hop. For a Cannon this would change the move ricghts from non-capture slider to capture-only slider, for the Grasshopper from rightless slider to full leaper.