Refactor move generator, and add Chu-Shogi pieces
[xboard.git] / common.h
index 9542276..d5adda1 100644 (file)
--- a/common.h
+++ b/common.h
@@ -248,12 +248,20 @@ typedef enum {
     WhitePawn, WhiteKnight, WhiteBishop, WhiteRook, WhiteQueen,
     WhiteFerz, WhiteAlfil, WhiteAngel, WhiteMarshall, WhiteWazir, WhiteMan,
     WhiteCannon, WhiteNightrider, WhiteCardinal, WhiteDragon, WhiteGrasshopper,
-    WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteKing,
+    WhiteSilver, WhiteFalcon, WhiteLance, WhiteCobra, WhiteUnicorn, WhiteLion,
+    WhiteTokin, WhiteDagger, WhitePCardinal, WhitePDragon, WhiteCat,
+    WhitePSword, WhiteMonarch, WhiteMother, WhiteNothing, WhitePRook, WhitePDagger,
+    WhiteDolphin, WhiteStag, WhiteHorned, WhiteEagle, WhiteSword,
+    WhiteCrown, WhiteHCrown, WhiteHorse, WhiteDrunk, WhitePBishop, WhiteKing,
     BlackPawn, BlackKnight, BlackBishop, BlackRook, BlackQueen,
     BlackFerz, BlackAlfil, BlackAngel, BlackMarshall, BlackWazir, BlackMan,
     BlackCannon, BlackNightrider, BlackCardinal, BlackDragon, BlackGrasshopper,
-    BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackKing,
-    EmptySquare,
+    BlackSilver, BlackFalcon, BlackLance, BlackCobra, BlackUnicorn, BlackLion,
+    BlackTokin, BlackDagger, BlackPCardinal, BlackPDragon, BlackCat,
+    BlackPSword, BlackMonarch, BlackMother, BlackNothing, BlackPRook, BlackPDagger,
+    BlackDolphin, BlackStag, BlackHorned, BlackEagle, BlackSword,
+    BlackCrown, BlackHCrown, BlackHorse, BlackDrunk, BlackPBishop, BlackKing,
+    EmptySquare, DarkSquare,
     NoRights, // [HGM] gamestate: for castling rights hidden in board[CASTLING]
     ClearBoard, WhitePlay, BlackPlay, PromotePiece, DemotePiece /*for use on EditPosition menus*/
   } ChessSquare;
@@ -264,6 +272,8 @@ typedef enum {
 #define PROMOTED       (int)WhiteDragon - (int)WhiteRook + (int)
 #define DEMOTED        (int)WhiteRook - (int)WhiteDragon + (int)
 #define SHOGI          (int)EmptySquare + (int)
+#define CHUPROMOTED    ((int)WhitePDragon - (int)WhiteDragon)*(gameInfo.variant == VariantChu) + PROMOTED
+#define IS_SHOGI(V)    ((V) == VariantShogi || (V) == VariantChu)
 
 
 typedef ChessSquare Board[BOARD_RANKS][BOARD_FILES];
@@ -279,7 +289,7 @@ typedef enum {
     WhitePromotion, WhiteNonPromotion,
     BlackPromotion, BlackNonPromotion,
     WhiteCapturesEnPassant, BlackCapturesEnPassant,
-    WhiteDrop, BlackDrop,
+    WhiteDrop, BlackDrop, FirstLeg,
     NormalMove, AmbiguousMove, IllegalMove, ImpossibleMove,
     WhiteWins, BlackWins, GameIsDrawn, GameUnfinished,
     GNUChessGame, XBoardGame, MoveNumberOne, Open, Close, Nothing,
@@ -323,6 +333,7 @@ typedef enum {
     Variant35,           /* Temporary name for possible future ICC wild 35 */
     Variant36,           /* Temporary name for possible future ICC wild 36 */
     VariantShogi,        /* [HGM] added variants */
+    VariantChu,
     VariantXiangqi,
     VariantCourier,
     VariantGothic,
@@ -342,6 +353,7 @@ typedef enum {
     VariantSChess,
     VariantGrand,
     VariantSpartan,
+    VariantLion,
     VariantUnknown       /* Catchall for other unknown variants */
 } VariantClass;
 
@@ -370,6 +382,7 @@ typedef enum {
   "wild35", \
   "wild36", \
   "shogi", \
+  "chu", \
   "xiangqi", \
   "courier", \
   "gothic", \
@@ -389,6 +402,7 @@ typedef enum {
   "seirawan",\
   "grand",\
   "spartan",\
+  "lion",\
   "unknown" \
 }