From 5f428f62dae586f7308365a7b7ff6b4e069dcb1f Mon Sep 17 00:00:00 2001 From: Fabian Fichter Date: Thu, 14 Nov 2019 14:14:44 +0100 Subject: [PATCH] Support Centaur chess https://www.chessvariants.com/large.dir/contest/royalcourt.html Closes #33. bench: 4556696 --- src/piece.cpp | 9 +++++++++ src/psqt.cpp | 4 ++-- src/types.h | 3 ++- src/variant.cpp | 12 ++++++++++++ src/variants.ini | 1 + 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/piece.cpp b/src/piece.cpp index 199c861..78c0ad4 100644 --- a/src/piece.cpp +++ b/src/piece.cpp @@ -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()); } diff --git a/src/psqt.cpp b/src/psqt.cpp index c34cc32..0e003b9 100644 --- a/src/psqt.cpp +++ b/src/psqt.cpp @@ -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 { diff --git a/src/types.h b/src/types.h index 99e4476..e38a0bb 100644 --- a/src/types.h +++ b/src/types.h @@ -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 diff --git a/src/variant.cpp b/src/variant.cpp index dcaccbf..d6da856 100644 --- a/src/variant.cpp +++ b/src/variant.cpp @@ -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()); diff --git a/src/variants.ini b/src/variants.ini index c6d2903..aa20f14 100644 --- a/src/variants.ini +++ b/src/variants.ini @@ -75,6 +75,7 @@ # elephant # wazir # commoner (non-royal king) +# centaur (=knight + commoner) # king ### Option types -- 1.7.0.4