From 98b62736804560cb04b8af2df6da9e6fb72ecf55 Mon Sep 17 00:00:00 2001 From: Fabian Fichter Date: Fri, 15 Nov 2019 01:03:52 +0100 Subject: [PATCH] Improve XBoard compatibility Support pieceToCharTable in setup command to improve compatibility (#54). --- src/parser.cpp | 1 + src/ucioption.cpp | 2 +- src/variant.cpp | 11 +++++++++++ src/variant.h | 1 + src/variants.ini | 1 + 5 files changed, 15 insertions(+), 1 deletions(-) diff --git a/src/parser.cpp b/src/parser.cpp index 0d91f0f..427faf7 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -106,6 +106,7 @@ Variant* VariantParser::parse(Variant* v) { v->add_piece(pieceInfo.first, keyValue->second.at(0)); } parse_attribute("variantTemplate", v->variantTemplate); + parse_attribute("pieceToCharTable", v->pieceToCharTable); parse_attribute("pocketSize", v->pocketSize); parse_attribute("maxRank", v->maxRank); parse_attribute("maxFile", v->maxFile); diff --git a/src/ucioption.cpp b/src/ucioption.cpp index c5c562c..8a385bf 100644 --- a/src/ucioption.cpp +++ b/src/ucioption.cpp @@ -64,7 +64,7 @@ void on_variant_change(const Option &o) { return; int pocketsize = v->pieceDrops ? (v->pocketSize ? v->pocketSize : v->pieceTypes.size()) : 0; if (Options["Protocol"] == "xboard") - sync_cout << "setup (-) " + sync_cout << "setup (" << v->pieceToCharTable << ") " << v->maxFile + 1 << "x" << v->maxRank + 1 << "+" << pocketsize << "_" << v->variantTemplate << " " << v->startFen diff --git a/src/variant.cpp b/src/variant.cpp index ffa6d32..209d597 100644 --- a/src/variant.cpp +++ b/src/variant.cpp @@ -119,6 +119,7 @@ namespace { } Variant* amazon_variant() { Variant* v = chess_variant(); + v->pieceToCharTable = "PNBR..............AKpnbr..............ak"; v->remove_piece(QUEEN); v->add_piece(AMAZON, 'a'); v->startFen = "rnbakbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBAKBNR w KQkq - 0 1"; @@ -335,6 +336,7 @@ namespace { } Variant* minishogi_variant() { Variant* v = minishogi_variant_base(); + v->pieceToCharTable = "P.BR.S...G.+.++.+Kp.br.s...g.+.++.+k"; v->pocketSize = 5; v->nFoldValue = -VALUE_MATE; v->nFoldValueAbsolute = true; @@ -378,6 +380,8 @@ namespace { } Variant* dobutsu_variant() { Variant* v = minishogi_variant_base(); + v->pieceToCharTable = "C....E...G.+.....Lc....e...g.+.....l"; + v->pocketSize = 3; v->maxRank = RANK_4; v->maxFile = FILE_C; v->reset_pieces(); @@ -398,6 +402,8 @@ namespace { } Variant* gorogoroshogi_variant() { Variant* v = minishogi_variant_base(); + v->pieceToCharTable = "P....S...G.+....+Kp....s...g.+....+k"; + v->pocketSize = 3; v->maxRank = RANK_6; v->maxFile = FILE_E; v->startFen = "sgkgs/5/1ppp1/1PPP1/5/SGKGS[-] w 0 1"; @@ -406,6 +412,7 @@ namespace { } Variant* judkinsshogi_variant() { Variant* v = minishogi_variant_base(); + v->pieceToCharTable = "PNBR.S...G.++++.+Kpnbr.s...g.++++.+k"; v->maxRank = RANK_6; v->maxFile = FILE_F; v->add_piece(SHOGI_KNIGHT, 'n'); @@ -416,6 +423,7 @@ namespace { } Variant* euroshogi_variant() { Variant* v = minishogi_variant_base(); + v->pieceToCharTable = "PNBR.....G.++++Kpnbr.....g.++++k"; v->maxRank = RANK_8; v->maxFile = FILE_H; v->add_piece(EUROSHOGI_KNIGHT, 'n'); @@ -427,6 +435,7 @@ namespace { } Variant* losalamos_variant() { Variant* v = fairy_variant_base(); + v->pieceToCharTable = "PN.RQ................Kpn.rq................k"; v->maxRank = RANK_6; v->maxFile = FILE_F; v->remove_piece(BISHOP); @@ -464,6 +473,7 @@ namespace { } Variant* shatar_variant() { Variant* v = chess_variant(); + v->pieceToCharTable = "PNBR..........J......Kpnbr..........j......k"; v->remove_piece(QUEEN); v->add_piece(BERS, 'j'); v->startFen = "rnbjkbnr/ppp1pppp/8/3p4/3P4/8/PPP1PPPP/RNBJKBNR w - - 0 1"; @@ -504,6 +514,7 @@ namespace { } Variant* minixiangqi_variant() { Variant* v = fairy_variant_base(); + v->pieceToCharTable = "PN.R.....K.C.pn.r.....k.c."; v->maxRank = RANK_7; v->maxFile = FILE_G; v->reset_pieces(); diff --git a/src/variant.h b/src/variant.h index 747463c..0581227 100644 --- a/src/variant.h +++ b/src/variant.h @@ -33,6 +33,7 @@ struct Variant { std::string variantTemplate = "fairy"; + std::string pieceToCharTable = "-"; int pocketSize = 0; Rank maxRank = RANK_8; File maxFile = FILE_H; diff --git a/src/variants.ini b/src/variants.ini index 0d70262..b8b8375 100644 --- a/src/variants.ini +++ b/src/variants.ini @@ -92,6 +92,7 @@ ### Rule definition options # variantTemplate: only relevant for usage in XBoard/WinBoard GUI [values: fairy, shogi] (default: fairy) +# pieceToCharTable: mapping of piece characters to images for XBoard/WinBoard GUI (default: -) # pocketSize: number of pockets shown by XBoard/WinBoard for drop variants [int] (default: 0) # maxRank: maximum rank [Rank] (default: 8) # maxFile: maximum file [File] (default: 8) -- 1.7.0.4