From cbe0a3b44b4bf242beaa7d398d40d4bedcbd6fff Mon Sep 17 00:00:00 2001 From: H.G. Muller Date: Mon, 17 Mar 2014 23:26:08 +0100 Subject: [PATCH] Fix loading positions in engine-defined variant Paste Position did not work when an engine-defined variant had redefined the pieceToCharTable, as the position would be interpreted and sent to the engine before receiving the setup command. Copying the pieceToCharTable received from an earlier game to appData cures this, because it will then be used by InitPosition, which would reset the table to default otherwise. Another problem was that setupSpoiledMachineBlack would not be reset after a game with no moves, leading to a spurious 'go' command to the engine. --- backend.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/backend.c b/backend.c index dd962a3..6cb1bf9 100644 --- a/backend.c +++ b/backend.c @@ -8852,7 +8852,10 @@ printf("score=%d count=%d\n",score,count); int dummy, w, h, hand, s=6; char buf[MSG_SIZ], varName[MSG_SIZ]; if(appData.icsActive || forwardMostMove != 0 || cps != &first) return; *buf = NULLCHAR; - if(sscanf(message, "setup (%s", buf) == 1) s = 8 + strlen(buf), buf[s-9] = NULLCHAR, SetCharTable(pieceToChar, buf); + if(sscanf(message, "setup (%s", buf) == 1) { + s = 8 + strlen(buf), buf[s-9] = NULLCHAR, SetCharTable(pieceToChar, buf); + ASSIGN(appData.pieceToCharTable, buf); + } if(startedFromSetupPosition) return; dummy = sscanf(message+s, "%dx%d+%d_%s", &w, &h, &hand, varName); if(dummy >= 3) { @@ -10424,6 +10427,7 @@ InitChessProgram (ChessProgramState *cps, int setup) SendToProgram(buf, cps); } + setboardSpoiledMachineBlack = FALSE; SendToProgram(cps->initString, cps); if (gameInfo.variant != VariantNormal && gameInfo.variant != VariantLoadable -- 1.7.0.4