Support Centaur chess
authorFabian Fichter <ianfab@users.noreply.github.com>
Thu, 14 Nov 2019 13:14:44 +0000 (14:14 +0100)
committerFabian Fichter <ianfab@users.noreply.github.com>
Thu, 14 Nov 2019 13:14:44 +0000 (14:14 +0100)
https://www.chessvariants.com/large.dir/contest/royalcourt.html

Closes #33.

bench: 4556696

src/piece.cpp
src/psqt.cpp
src/types.h
src/variant.cpp
src/variants.ini

index 199c861..78c0ad4 100644 (file)
@@ -268,6 +268,14 @@ namespace {
       p->lameLeaper = true;
       return p;
   }
+  PieceInfo* centaur_piece() {
+      PieceInfo* p = commoner_piece();
+      p->name = "centaur";
+      PieceInfo* p2 = knight_piece();
+      p->merge(p2);
+      delete p2;
+      return p;
+  }
 }
 
 void PieceMap::init() {
@@ -302,6 +310,7 @@ void PieceMap::init() {
   add(ELEPHANT, elephant_piece());
   add(WAZIR, wazir_piece());
   add(COMMONER, commoner_piece());
+  add(CENTAUR, centaur_piece());
   add(KING, king_piece());
 }
 
index c34cc32..0e003b9 100644 (file)
@@ -30,13 +30,13 @@ Value PieceValue[PHASE_NB][PIECE_NB] = {
     ArchbishopValueMg, ChancellorValueMg, AmazonValueMg, KnibisValueMg, BiskniValueMg,
     ShogiPawnValueMg, LanceValueMg, ShogiKnightValueMg, EuroShogiKnightValueMg, GoldValueMg, DragonHorseValueMg,
     ClobberPieceValueMg, BreakthroughPieceValueMg, ImmobilePieceValueMg,
-    CannonPieceValueMg, SoldierValueMg, HorseValueMg, ElephantValueMg, WazirValueMg, CommonerValueMg },
+    CannonPieceValueMg, SoldierValueMg, HorseValueMg, ElephantValueMg, WazirValueMg, CommonerValueMg, CentaurValueMg },
   { VALUE_ZERO, PawnValueEg, KnightValueEg, BishopValueEg, RookValueEg, QueenValueEg,
     FersValueEg, AlfilValueEg, FersAlfilValueEg, SilverValueEg, AiwokValueEg, BersValueEg,
     ArchbishopValueMg, ChancellorValueEg, AmazonValueEg, KnibisValueMg, BiskniValueMg,
     ShogiPawnValueEg, LanceValueEg, ShogiKnightValueEg, EuroShogiKnightValueEg, GoldValueEg, DragonHorseValueEg,
     ClobberPieceValueEg, BreakthroughPieceValueEg, ImmobilePieceValueEg,
-    CannonPieceValueEg, SoldierValueEg, HorseValueEg, ElephantValueEg, WazirValueEg, CommonerValueEg }
+    CannonPieceValueEg, SoldierValueEg, HorseValueEg, ElephantValueEg, WazirValueEg, CommonerValueEg, CentaurValueEg }
 };
 
 namespace PSQT {
index 99e4476..e38a0bb 100644 (file)
@@ -341,6 +341,7 @@ enum Value : int {
   ElephantValueMg          = 350,   ElephantValueEg          = 350,
   WazirValueMg             = 400,   WazirValueEg             = 400,
   CommonerValueMg          = 700,   CommonerValueEg          = 900,
+  CentaurValueMg           = 1500,  CentaurValueEg           = 1500,
 
   MidgameLimit  = 15258, EndgameLimit  = 3915
 };
@@ -352,7 +353,7 @@ enum PieceType {
   FERS, MET = FERS, ALFIL, FERS_ALFIL, SILVER, KHON = SILVER, AIWOK, BERS, DRAGON = BERS,
   ARCHBISHOP, CHANCELLOR, AMAZON, KNIBIS, BISKNI,
   SHOGI_PAWN, LANCE, SHOGI_KNIGHT, EUROSHOGI_KNIGHT, GOLD, DRAGON_HORSE,
-  CLOBBER_PIECE, BREAKTHROUGH_PIECE, IMMOBILE_PIECE, CANNON, SOLDIER, HORSE, ELEPHANT, WAZIR, COMMONER, KING,
+  CLOBBER_PIECE, BREAKTHROUGH_PIECE, IMMOBILE_PIECE, CANNON, SOLDIER, HORSE, ELEPHANT, WAZIR, COMMONER, CENTAUR, KING,
   ALL_PIECES = 0,
 
   PIECE_TYPE_NB = 1 << PIECE_TYPE_BITS
index dcaccbf..d6da856 100644 (file)
@@ -604,6 +604,17 @@ namespace {
         v->startFen = "rnbqkcabnr/pppppppppp/10/10/10/10/PPPPPPPPPP/RNBQKCABNR w KQkq - 0 1";
         return v;
     }
+    Variant* centaur_variant() {
+        Variant* v = fairy_variant_base();
+        v->maxRank = RANK_8;
+        v->maxFile = FILE_J;
+        v->castlingKingsideFile = FILE_I;
+        v->castlingQueensideFile = FILE_C;
+        v->add_piece(CENTAUR, 'c');
+        v->startFen = "rcnbqkbncr/pppppppppp/10/10/10/10/PPPPPPPPPP/RCNBQKBNCR w KQkq - 0 1";
+        v->promotionPieceTypes = {CENTAUR, QUEEN, ROOK, BISHOP, KNIGHT};
+        return v;
+    }
     Variant* jesonmor_variant() {
         Variant* v = fairy_variant_base();
         v->maxRank = RANK_9;
@@ -771,6 +782,7 @@ void VariantMap::init() {
     add("modern", modern_variant());
     add("chancellor", chancellor_variant());
     add("embassy", embassy_variant());
+    add("centaur", centaur_variant());
     add("jesonmor", jesonmor_variant());
     add("courier", courier_variant());
     add("grand", grand_variant());
index c6d2903..aa20f14 100644 (file)
@@ -75,6 +75,7 @@
 # elephant
 # wazir
 # commoner (non-royal king)
+# centaur (=knight + commoner)
 # king
 
 ### Option types