I tried to shape up this Diagram a bit: no trailing commas in the promoChoice, and when there is only a single 'choice', don't define it as a promotion set at all, but just write that choice directly in the morph. In addition I set promoZone=0 and maxPromote=0, because you don't want to invoke the standard promotion routine, but rely entirely on the defined morphs.
This still suffers from a problem, though: it seems that promotion sets 4-7 are not recognized properly. Black Pawns do not promote on moving to rank 3, and refuse to move from rank 3 to rank 2. Black Footmen do not promote on moving to rank 2, but they morph to Rook on rank 1 (but the morph specifies that). I still have to figure that out.
I am not sure what you try to achieve here, though. Why the duplication of all the pieces?
[Edit] It appears that the Diagram would only accept promotion sets 1-3, because the set to use was specified by a return code 4+set_number (so 5, 6, 7, ...) from AlterMove, and this return code would be clipped to 3 bits. Return codes 0-4 already had other meanings (like accept, reject, ...) This clipping was used to make codes 8 larger ignore the apostrophe on Betza moves; only codes below 8 were changed to 0 (for 'accept'), for others the clipping would get rid of the 8.
I now changed this to keep the lowest 4 bits, and force all codes below 16 to 0. This allows recognition of the promotion sets 1-9. I am not sure what I broke by doing this, though. There is nothing in the script that could generate return codes that are intended to overrule an apostrophe; this was intended for allowing user-supplied custom scripts for move tinkering. So there could be a variant around that needed such an overruling mechanism, which now is broken because it would have to add 16 to the dersired return code rather than 8.
I tried to shape up this Diagram a bit: no trailing commas in the promoChoice, and when there is only a single 'choice', don't define it as a promotion set at all, but just write that choice directly in the morph. In addition I set promoZone=0 and maxPromote=0, because you don't want to invoke the standard promotion routine, but rely entirely on the defined morphs.
This still suffers from a problem, though: it seems that promotion sets 4-7 are not recognized properly. Black Pawns do not promote on moving to rank 3, and refuse to move from rank 3 to rank 2. Black Footmen do not promote on moving to rank 2, but they morph to Rook on rank 1 (but the morph specifies that). I still have to figure that out.
I am not sure what you try to achieve here, though. Why the duplication of all the pieces?
[Edit] It appears that the Diagram would only accept promotion sets 1-3, because the set to use was specified by a return code 4+set_number (so 5, 6, 7, ...) from AlterMove, and this return code would be clipped to 3 bits. Return codes 0-4 already had other meanings (like accept, reject, ...) This clipping was used to make codes 8 larger ignore the apostrophe on Betza moves; only codes below 8 were changed to 0 (for 'accept'), for others the clipping would get rid of the 8.
I now changed this to keep the lowest 4 bits, and force all codes below 16 to 0. This allows recognition of the promotion sets 1-9. I am not sure what I broke by doing this, though. There is nothing in the script that could generate return codes that are intended to overrule an apostrophe; this was intended for allowing user-supplied custom scripts for move tinkering. So there could be a variant around that needed such an overruling mechanism, which now is broken because it would have to add 16 to the dersired return code rather than 8.