@@ -139,6 +139,8 @@ public static BoardState CreateBoardFromArray(Piece[] pieces)
139
139
boardState . Evaluator . ShouldWhiteMirrored = boardState . WhiteKingSquare . IsMirroredSide ( ) ;
140
140
boardState . Evaluator . ShouldBlackMirrored = boardState . BlackKingSquare . IsMirroredSide ( ) ;
141
141
boardState . Evaluator . FillAccumulators ( boardState ) ;
142
+
143
+ boardState . UpdateCheckStatus ( ) ;
142
144
return boardState ;
143
145
}
144
146
@@ -218,6 +220,7 @@ public static BoardState CreateBoardFromFen(string fen)
218
220
boardState . Evaluator . WhiteMirrored = boardState . WhiteKingSquare . IsMirroredSide ( ) ;
219
221
boardState . Evaluator . BlackMirrored = boardState . BlackKingSquare . IsMirroredSide ( ) ;
220
222
boardState . Evaluator . FillAccumulators ( boardState ) ;
223
+ boardState . UpdateCheckStatus ( ) ;
221
224
222
225
return boardState ;
223
226
}
@@ -588,8 +591,14 @@ public static bool PartialApply(this BoardState board, uint m)
588
591
[ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
589
592
public static void UpdateCheckStatus ( this BoardState board )
590
593
{
591
- board . InCheck = ( board . WhiteToMove && board . IsAttackedByBlack ( board . WhiteKingSquare ) ) ||
592
- ( ! board . WhiteToMove && board . IsAttackedByWhite ( board . BlackKingSquare ) ) ;
594
+ if ( board . WhiteToMove )
595
+ {
596
+ board . InCheck = board . IsAttackedByBlack ( board . WhiteKingSquare ) ;
597
+ }
598
+ else
599
+ {
600
+ board . InCheck = board . IsAttackedByWhite ( board . BlackKingSquare ) ;
601
+ }
593
602
}
594
603
595
604
[ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
@@ -774,11 +783,11 @@ private static void UpdateRepetitions(this BoardState board, uint move)
774
783
public static void PartialUnApply ( this BoardState board , uint m ,
775
784
ulong oldHash ,
776
785
byte oldEnpassant ,
777
- bool prevWhiteCheck ,
786
+ bool prevInCheck ,
778
787
CastleRights prevCastleRights ,
779
788
int prevFiftyMoveCounter )
780
789
{
781
- board . InCheck = prevWhiteCheck ;
790
+ board . InCheck = prevInCheck ;
782
791
board . EnPassantFile = oldEnpassant ;
783
792
board . TurnCount -- ;
784
793
board . WhiteToMove = ! board . WhiteToMove ;
@@ -982,15 +991,17 @@ public static void ApplyNullMove(this BoardState board)
982
991
983
992
board . TurnCount ++ ;
984
993
board . WhiteToMove = ! board . WhiteToMove ;
994
+ board . InCheck = false ;
985
995
}
986
996
987
997
[ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
988
- public static void UnApplyNullMove ( this BoardState board , ulong oldHash , byte oldEnpassant )
998
+ public static void UnApplyNullMove ( this BoardState board , ulong oldHash , byte oldEnpassant , bool oldCheck )
989
999
{
990
1000
board . Hash = oldHash ;
991
1001
board . EnPassantFile = oldEnpassant ;
992
1002
board . TurnCount -- ;
993
1003
board . WhiteToMove = ! board . WhiteToMove ;
1004
+ board . InCheck = oldCheck ;
994
1005
}
995
1006
996
1007
[ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
0 commit comments