Support resetting of piece types in configuration
authorFabian Fichter <ianfab@users.noreply.github.com>
Sat, 18 Jan 2020 12:30:07 +0000 (13:30 +0100)
committerFabian Fichter <ianfab@users.noreply.github.com>
Sat, 18 Jan 2020 12:30:07 +0000 (13:30 +0100)
src/parser.cpp
src/variants.ini

index ad14701..996f562 100644 (file)
@@ -116,7 +116,12 @@ Variant* VariantParser::parse(Variant* v) {
     {
         const auto& keyValue = config.find(pieceInfo.second->name);
         if (keyValue != config.end() && !keyValue->second.empty())
-            v->add_piece(pieceInfo.first, keyValue->second.at(0));
+        {
+            if (isalpha(keyValue->second.at(0)))
+                v->add_piece(pieceInfo.first, keyValue->second.at(0));
+            else
+                v->remove_piece(pieceInfo.first);
+        }
     }
     parse_attribute("variantTemplate", v->variantTemplate);
     parse_attribute("pieceToCharTable", v->pieceToCharTable);
@@ -156,7 +161,7 @@ Variant* VariantParser::parse(Variant* v) {
         size_t idx, idx2;
         std::stringstream ss(it_prom_pt->second);
         while (   ss >> token && (idx = v->pieceToChar.find(toupper(token))) != std::string::npos && ss >> token
-               && ss >> token && (idx2 = v->pieceToChar.find(toupper(token))) != std::string::npos)
+               && ss >> token && (idx2 = (token == '-' ? 0 : v->pieceToChar.find(toupper(token)))) != std::string::npos)
             v->promotedPieceType[idx] = PieceType(idx2);
     }
     parse_attribute("piecePromotionOnCapture", v->piecePromotionOnCapture);
@@ -212,6 +217,7 @@ Variant* VariantParser::parse(Variant* v) {
     const auto& it_ext = config.find("extinctionPieceTypes");
     if (it_ext != config.end())
     {
+        v->extinctionPieceTypes = {};
         char token;
         size_t idx;
         std::stringstream ss(it_ext->second);
index 61c3c0d..13d790c 100644 (file)
@@ -219,19 +219,10 @@ whiteDropRegion = *1 *2 *3 *4 *5
 blackDropRegion = *6 *7 *8 *9 *10
 
 # Hybrid variant of antichess and losalamos
-[anti-losalamos]
-pawn = p
-knight = n
-rook = r
-queen = q
+[anti-losalamos:losalamos]
+king = -
 commoner = k
-maxRank = 6
-maxFile = 6
-startFen = rnqknr/pppppp/6/6/PPPPPP/RNQKNR w - - 0 1
-promotionRank = 6
 promotionPieceTypes = nrqk
-doubleStep = false
-castling = false
 mustCapture = true
 stalemateValue = win
 extinctionValue = win