No functional change.
parse_attribute("kingPassOnStalemate", v->kingPassOnStalemate);
parse_attribute("makpongRule", v->makpongRule);
parse_attribute("flyingGeneral", v->flyingGeneral);
- parse_attribute("xiangqiSoldier", v->xiangqiSoldier);
+ parse_attribute("soldierPromotionRank", v->soldierPromotionRank);
// game end
parse_attribute("nMoveRule", v->nMoveRule);
parse_attribute("nFoldRule", v->nFoldRule);
if (type_of(m) != NORMAL || is_gating(m))
return MoveList<LEGAL>(*this).contains(m);
- // Xiangqi soldier
- if (type_of(pc) == SOLDIER && unpromoted_soldier(us, from) && file_of(from) != file_of(to))
- return false;
-
// Handle the case where a mandatory piece promotion/demotion is not taken
if ( mandatory_piece_promotion()
&& (is_promoted(from) ? piece_demotion() : promoted_piece_type(type_of(pc)) != NO_PIECE_TYPE)
inline bool Position::unpromoted_soldier(Color c, Square s) const {
assert(var != nullptr);
- return var->xiangqiSoldier && relative_rank(c, s, var->maxRank) <= RANK_5;
+ return relative_rank(c, s, var->maxRank) < var->soldierPromotionRank;
}
inline bool Position::makpong() const {
v->mobilityRegion[BLACK][FERS] = black_castle;
v->mobilityRegion[WHITE][ELEPHANT] = Rank1BB | Rank2BB | Rank3BB | Rank4BB | Rank5BB;
v->mobilityRegion[BLACK][ELEPHANT] = Rank6BB | Rank7BB | Rank8BB | Rank9BB | Rank10BB;
- v->xiangqiSoldier = true;
+ v->soldierPromotionRank = RANK_6;
return v;
}
// Manchu/Yitong chess
SQ_D10, SQ_E10, SQ_F10);
v->mobilityRegion[WHITE][WAZIR] = white_castle;
v->mobilityRegion[BLACK][WAZIR] = black_castle;
- v->xiangqiSoldier = false;
+ v->soldierPromotionRank = RANK_1;
v->flyingGeneral = false;
v->bikjangRule = true;
v->diagonalLines = make_bitboard(SQ_D1, SQ_F1, SQ_E2, SQ_D3, SQ_F3,
bool kingPassOnStalemate = false;
bool makpongRule = false;
bool flyingGeneral = false;
- bool xiangqiSoldier = false;
+ Rank soldierPromotionRank = RANK_1;
// game end
int nMoveRule = 50;
int nFoldRule = 3;
# kingPassOnStalemate: allow passing by king in case of stalemate [bool] (default: false)
# makpongRule: the king may not move away from check [bool] (default: false)
# flyingGeneral: disallow general face-off like in xiangqi [bool] (default: false)
-# xiangqiSoldier: restrict soldier to shogi pawn movements on first five ranks [bool] (default: false)
+# soldierPromotionRank: restrict soldier to shogi pawn movements until reaching n-th rank [bool] (default: 1)
# nMoveRule: move count for 50/n-move rule [int] (default: 50)
# nFoldRule: move count for 3/n-fold repetition rule [int] (default: 3)
# nFoldValue: result in case of 3/n-fold repetition [Value] (default: draw)