@@ -2193,23 +2193,30 @@ public function _parseFen($fen)
2193
2193
$ this ->_WCastleK = false ;
2194
2194
$ this ->_BCastleQ = false ;
2195
2195
$ this ->_BCastleK = false ;
2196
+
2197
+ $ wr1 = $ this ->getPiece ('WR1 ' );
2198
+ $ wr2 = $ this ->getPiece ('WR2 ' );
2199
+ $ br1 = $ this ->getPiece ('BR1 ' );
2200
+ $ br2 = $ this ->getPiece ('BR2 ' );
2201
+
2196
2202
if ($ splitFen [2 ] != '- ' ) {
2197
2203
for ($ i = 0 ; $ i < 4 ; $ i ++) {
2198
2204
if ($ i >= strlen ($ splitFen [2 ])) {
2199
2205
continue ;
2200
2206
}
2207
+
2201
2208
switch ($ splitFen [2 ][$ i ]) {
2202
2209
case 'K ' :
2203
- $ this ->_WCastleK = true ;
2210
+ $ this ->_WCastleK = $ wr1 === ' h1 ' || $ wr2 === ' h1 ' ;
2204
2211
break ;
2205
2212
case 'Q ' :
2206
- $ this ->_WCastleQ = true ;
2213
+ $ this ->_WCastleQ = $ wr1 === ' a1 ' || $ wr2 === ' a1 ' ;
2207
2214
break ;
2208
2215
case 'k ' :
2209
- $ this ->_BCastleK = true ;
2216
+ $ this ->_BCastleK = $ br1 === ' h8 ' || $ br2 === ' h8 ' ;
2210
2217
break ;
2211
2218
case 'q ' :
2212
- $ this ->_BCastleQ = true ;
2219
+ $ this ->_BCastleQ = $ br1 === ' a8 ' || $ br2 === ' a8 ' ;
2213
2220
break ;
2214
2221
default :
2215
2222
return $ this ->raiseError (self ::GAMES_CHESS_ERROR_FEN_CASTLEWRONG ,
@@ -3614,8 +3621,8 @@ public function rollbackTransaction()
3614
3621
public function isBishop ($ pieceName )
3615
3622
{
3616
3623
return $ pieceName [1 ] == 'B ' ||
3617
- ($ pieceName [1 ] == 'P ' &&
3618
- $ this ->_pieces [$ pieceName ][1 ] == 'B ' );
3624
+ ($ pieceName [1 ] == 'P ' &&
3625
+ $ this ->_pieces [$ pieceName ][1 ] == 'B ' );
3619
3626
}
3620
3627
3621
3628
/**
@@ -3631,8 +3638,8 @@ public function isBishop($pieceName)
3631
3638
public function isRook ($ pieceName )
3632
3639
{
3633
3640
return $ pieceName [1 ] == 'R ' ||
3634
- ($ pieceName [1 ] == 'P ' &&
3635
- $ this ->_pieces [$ pieceName ][1 ] == 'R ' );
3641
+ ($ pieceName [1 ] == 'P ' &&
3642
+ $ this ->_pieces [$ pieceName ][1 ] == 'R ' );
3636
3643
}
3637
3644
3638
3645
/**
@@ -3648,7 +3655,7 @@ public function isRook($pieceName)
3648
3655
public function isPawn ($ pieceName )
3649
3656
{
3650
3657
return $ pieceName [1 ] == 'P ' &&
3651
- $ this ->_pieces [$ pieceName ][1 ] == 'P ' ;
3658
+ $ this ->_pieces [$ pieceName ][1 ] == 'P ' ;
3652
3659
}
3653
3660
3654
3661
/**
@@ -3674,8 +3681,8 @@ public function isKing($pieceName)
3674
3681
public function _isKnight ($ pieceName )
3675
3682
{
3676
3683
return $ pieceName [1 ] == 'N ' ||
3677
- ($ pieceName [1 ] == 'P ' &&
3678
- $ this ->_pieces [$ pieceName ][1 ] == 'N ' );
3684
+ ($ pieceName [1 ] == 'P ' &&
3685
+ $ this ->_pieces [$ pieceName ][1 ] == 'N ' );
3679
3686
}
3680
3687
3681
3688
/**
0 commit comments