return WhiteKing;\r
case BlackPromotionKing:\r
return BlackKing;\r
-#ifdef FAIRY\r
case WhitePromotionChancellor:\r
return WhiteMarshall;\r
case BlackPromotionChancellor:\r
return BlackMarshall;\r
case WhitePromotionArchbishop:\r
- return WhiteCardinal;\r
+ return WhiteAngel;\r
case BlackPromotionArchbishop:\r
- return BlackCardinal;\r
-#endif\r
- }\r
-}\r
-\r
-ChessMove PromoCharToMoveType(whiteOnMove, promoChar)\r
- int whiteOnMove;\r
- int promoChar;\r
-{\r
- if (whiteOnMove) {\r
- switch (promoChar) {\r
- case 'n':\r
- case 'N':\r
- return WhitePromotionKnight;\r
- case 'b':\r
- case 'B':\r
- return WhitePromotionBishop;\r
- case 'r':\r
- case 'R':\r
- return WhitePromotionRook;\r
-#ifdef FAIRY\r
- case 'a':\r
- case 'A':\r
- return WhitePromotionArchbishop;\r
- case 'c':\r
- case 'C':\r
- return WhitePromotionChancellor;\r
-#endif\r
- case 'q':\r
- case 'Q':\r
- return WhitePromotionQueen;\r
- case 'k':\r
- case 'K':\r
- return WhitePromotionKing;\r
- case NULLCHAR:\r
- default:\r
- return NormalMove;\r
- }\r
- } else {\r
- switch (promoChar) {\r
- case 'n':\r
- case 'N':\r
- return BlackPromotionKnight;\r
- case 'b':\r
- case 'B':\r
- return BlackPromotionBishop;\r
- case 'r':\r
- case 'R':\r
- return BlackPromotionRook;\r
-#ifdef FAIRY\r
- case 'a':\r
- case 'A':\r
- return BlackPromotionArchbishop;\r
- case 'c':\r
- case 'C':\r
- return BlackPromotionChancellor;\r
-#endif\r
- case 'q':\r
- case 'Q':\r
- return BlackPromotionQueen;\r
- case 'k':\r
- case 'K':\r
- return BlackPromotionKing;\r
- case NULLCHAR:\r
- default:\r
- return NormalMove;\r
- }\r
+ return BlackAngel;\r
+ case WhitePromotionCentaur:\r
+ return WhiteSilver;\r
+ case BlackPromotionCentaur:\r
+ return BlackSilver;\r
}\r
}\r
\r
char pieceToChar[] = {\r
'P', 'N', 'B', 'R', 'Q', 'F', 'E', 'A', 'C', 'W', 'M', \r
- 'O', 'H', 'I', 'J', 'G', 'D', 'V', 'S', 'L', 'U', 'K',\r
+ 'O', 'H', 'I', 'J', 'G', 'D', 'V', 'L', 's', 'U', 'K',\r
'p', 'n', 'b', 'r', 'q', 'f', 'e', 'a', 'c', 'w', 'm', \r
- 'o', 'h', 'i', 'j', 'g', 'd', 'v', 's', 'l', 'u', 'k', \r
+ 'o', 'h', 'i', 'j', 'g', 'd', 'v', 'l', 's', 'u', 'k', \r
'x' };\r
\r
char PieceToChar(p)\r
return EmptySquare;\r
}\r
\r
+ChessMove PromoCharToMoveType(whiteOnMove, promoChar)\r
+ int whiteOnMove;\r
+ int promoChar;\r
+{ /* [HGM] made dependent on CharToPiece to alow alternate piece letters */\r
+ ChessSquare piece = CharToPiece(whiteOnMove ? ToUpper(promoChar) : ToLower(promoChar) );\r
+\r
+ switch(piece) {\r
+ case WhiteQueen:\r
+ return WhitePromotionQueen;\r
+ case WhiteRook:\r
+ return WhitePromotionRook;\r
+ case WhiteBishop:\r
+ return WhitePromotionBishop;\r
+ case WhiteKnight:\r
+ return WhitePromotionKnight;\r
+ case WhiteKing:\r
+ return WhitePromotionKing;\r
+ case WhiteAngel:\r
+ return WhitePromotionArchbishop;\r
+ case WhiteMarshall:\r
+ return WhitePromotionChancellor;\r
+ case WhiteSilver:\r
+ return WhitePromotionCentaur;\r
+ case BlackQueen:\r
+ return BlackPromotionQueen;\r
+ case BlackRook:\r
+ return BlackPromotionRook;\r
+ case BlackBishop:\r
+ return BlackPromotionBishop;\r
+ case BlackKnight:\r
+ return BlackPromotionKnight;\r
+ case BlackKing:\r
+ return BlackPromotionKing;\r
+ case BlackAngel:\r
+ return BlackPromotionArchbishop;\r
+ case BlackMarshall:\r
+ return BlackPromotionChancellor;\r
+ case BlackSilver:\r
+ return BlackPromotionCentaur;\r
+ default:\r
+ // not all promotion implemented yet! Take Queen for those we don't know.\r
+ return (whiteOnMove ? WhitePromotionQueen : BlackPromotionQueen);\r
+ }\r
+}\r
+\r
void CopyBoard(to, from)\r
Board to, from;\r
{\r
}\r
break;\r
\r
+ case WhiteSilver:\r
+ case BlackSilver:\r
+ m++; // [HGM] superchess: use for Centaur\r
case WhiteMan:\r
case BlackMan:\r
case SHOGI WhiteKing:\r
callback(board, flags, NormalMove,\r
rf, ff, rt, ft, closure);\r
}\r
+ if(m==1) goto mounted;\r
break;\r
\r
case WhiteNightrider:\r
/* [HGM] Always long notation for fairies we don't know */\r
case WhiteFalcon:\r
case BlackFalcon:\r
- case WhiteSilver:\r
- case BlackSilver:\r
case WhiteLance:\r
case BlackLance:\r
case WhiteGrasshopper:\r