From 02f2f1be74d671777588bf7903a224c6a8daf648 Mon Sep 17 00:00:00 2001 From: Michael Ficocelli Date: Fri, 22 Aug 2025 16:12:09 -0400 Subject: [PATCH] IPVGO: Ensure getValidMoves correctly handles playing as white (#2292) --- src/Go/boardState/boardState.ts | 5 +++++ src/Go/effects/netscriptGoImplementation.ts | 8 +++++++- src/NetscriptFunctions/Go.ts | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Go/boardState/boardState.ts b/src/Go/boardState/boardState.ts index 56269d7eb..92bc3071b 100644 --- a/src/Go/boardState/boardState.ts +++ b/src/Go/boardState/boardState.ts @@ -71,11 +71,16 @@ export function getNewBoardStateFromSimpleBoard( simpleBoard: SimpleBoard, priorSimpleBoard?: SimpleBoard, ai: GoOpponent = GoOpponent.Netburners, + priorColor: GoColor | undefined = undefined, ): BoardState { const newState = getNewBoardState(simpleBoard.length, ai, false, updatedBoardFromSimpleBoard(simpleBoard)); if (priorSimpleBoard) { newState.previousBoards.push(priorSimpleBoard.join("")); + } + if (priorColor) { + newState.previousPlayer = priorColor; + } else if (priorSimpleBoard) { // Identify the previous player based on the difference in pieces const priorWhitePieces = priorSimpleBoard.join("").match(/O/g)?.length ?? 0; const priorBlackPieces = priorSimpleBoard.join("").match(/X/g)?.length ?? 0; diff --git a/src/Go/effects/netscriptGoImplementation.ts b/src/Go/effects/netscriptGoImplementation.ts index 73ea0d4fc..5b753e89f 100644 --- a/src/Go/effects/netscriptGoImplementation.ts +++ b/src/Go/effects/netscriptGoImplementation.ts @@ -426,6 +426,7 @@ export function validateBoardState( error: (s: string) => never, _boardState?: unknown, _priorBoardState?: unknown, + playAsWhite = false, ): BoardState | undefined { const simpleBoard = getSimpleBoardFromUnknown(error, _boardState); const priorSimpleBoard = getSimpleBoardFromUnknown(error, _priorBoardState); @@ -435,7 +436,12 @@ export function validateBoardState( } try { - return getNewBoardStateFromSimpleBoard(simpleBoard, priorSimpleBoard); + return getNewBoardStateFromSimpleBoard( + simpleBoard, + priorSimpleBoard, + undefined, + playAsWhite ? GoColor.black : GoColor.white, + ); } catch (e) { error(boardValidity.failedToCreateBoard); } diff --git a/src/NetscriptFunctions/Go.ts b/src/NetscriptFunctions/Go.ts index 496344667..35b30bd52 100644 --- a/src/NetscriptFunctions/Go.ts +++ b/src/NetscriptFunctions/Go.ts @@ -97,7 +97,7 @@ export function NetscriptGo(): InternalAPI { return getValidMoves(undefined, true); } const playAsWhite = helpers.boolean(ctx, "playAsWhite", _playAsWhite ?? false); - const State = validateBoardState(error(ctx), _boardState, _priorBoardState); + const State = validateBoardState(error(ctx), _boardState, _priorBoardState, playAsWhite); return getValidMoves(State, playAsWhite); }, getChains: (ctx) => (_boardState) => {