Support configuration of mobility area
authorFabian Fichter <ianfab@users.noreply.github.com>
Fri, 15 May 2020 13:14:11 +0000 (15:14 +0200)
committerFabian Fichter <ianfab@users.noreply.github.com>
Fri, 15 May 2020 13:14:11 +0000 (15:14 +0200)
Closes #130.

src/parser.cpp
src/variants.ini

index 33261c8..0bfd656 100644 (file)
@@ -143,6 +143,7 @@ Variant* VariantParser<DoCheck>::parse(Variant* v) {
     // piece types
     for (const auto& pieceInfo : pieceMap)
     {
+        // piece char
         const auto& keyValue = config.find(pieceInfo.second->name);
         if (keyValue != config.end() && !keyValue->second.empty())
         {
@@ -155,6 +156,14 @@ Variant* VariantParser<DoCheck>::parse(Variant* v) {
                 v->remove_piece(pieceInfo.first);
             }
         }
+        // mobility region
+        std::string capitalizedPiece = pieceInfo.second->name;
+        capitalizedPiece[0] = toupper(capitalizedPiece[0]);
+        for (Color c : {WHITE, BLACK})
+        {
+            std::string color = c == WHITE ? "White" : "Black";
+            parse_attribute("mobilityRegion" + color + capitalizedPiece, v->mobilityRegion[c][pieceInfo.first]);
+        }
     }
     parse_attribute("variantTemplate", v->variantTemplate);
     parse_attribute("pieceToCharTable", v->pieceToCharTable);
index 0df72f4..815e140 100644 (file)
 # chess960: allow chess960 castling [bool] (default: false)
 # twoBoards: the game is influenced by a second board (e.g., bughouse) [bool] (default: false)
 # startFen: FEN of starting position (default: rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1)
+# mobilityRegion: the mobility area can be defined via options specific to color and piece,
+#                 .e.g., mobilityRegionWhiteRook, mobilityRegionBlackJanggiElephant, etc. [Bitboard]
 # promotionRank: relative rank required to reach for promotion [Rank] (default: 8)
 # promotionPieceTypes: pawn promotion options using their one-letter representations (default: nbrq)
 # sittuyinPromotion: enable Sittuyin-style pawn promotion [bool] (default: false)