diff -r c90386d55cb2 -r 6da16865a270 src/main.c --- a/src/main.c Mon Aug 24 14:43:33 2026 +0200 +++ b/src/main.c Mon Aug 24 15:48:19 2026 +0200 @@ -793,14 +793,14 @@ } break; /* validate "the game has ended" claims */ + case NETCODE_CHECKMATE: + return 1; /* no need to accept, they say they're toast, OK for us */ case NETCODE_THREEFOLD: case NETCODE_NOMATERIAL: case NETCODE_STALEMATE: - case NETCODE_CHECKMATE: if ((code == NETCODE_THREEFOLD && gamestate->threefold) || (code == NETCODE_NOMATERIAL && gamestate->nomaterial) || - (code == NETCODE_STALEMATE && gamestate->stalemate) || - (code == NETCODE_CHECKMATE && gamestate->checkmate)) { + (code == NETCODE_STALEMATE && gamestate->stalemate)) { /* auto-accept the claim */ net_send_code(opponent, NETCODE_ACCEPT); return 1; @@ -823,6 +823,8 @@ bool endgame = true; if (gamestate->checkmate) { net_send_code(opponent, NETCODE_CHECKMATE); + /* checkmate does not need to be accepted */ + return 1; } else if (gamestate->stalemate) { net_send_code(opponent, NETCODE_STALEMATE); } else if (gamestate->nomaterial) {