Rev 96 | Rev 169 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 96 | Rev 154 | ||
|---|---|---|---|
| Line 121... | Line 121... | ||
| 121 | result = INVALID; | 121 | result = INVALID; | 
| 122 | 122 | ||
| 123 |     // Immediate win if a pawn can be promoted without getting captured | 123 |     // Immediate win if a pawn can be promoted without getting captured | 
| 124 | else if ( us == WHITE | 124 | else if ( us == WHITE | 
| 125 | && rank_of(psq) == RANK_7 | 125 | && rank_of(psq) == RANK_7 | 
| 126 | && ksq[us] != psq + | 126 | && ksq[us] != psq + NORTH | 
| 127 | && ( distance(ksq[~us], psq + | 127 | && ( distance(ksq[~us], psq + NORTH) > 1 | 
| 128 | || (StepAttacksBB[KING][ksq[us]] & (psq + | 128 | || (StepAttacksBB[KING][ksq[us]] & (psq + NORTH)))) | 
| 129 | result = WIN; | 129 | result = WIN; | 
| 130 | 130 | ||
| 131 |     // Immediate draw if it is a stalemate or a king captures undefended pawn | 131 |     // Immediate draw if it is a stalemate or a king captures undefended pawn | 
| 132 | else if ( us == BLACK | 132 | else if ( us == BLACK | 
| 133 | && ( !(StepAttacksBB[KING][ksq[us]] & ~(StepAttacksBB[KING][ksq[~us]] | StepAttacksBB[PAWN][psq])) | 133 | && ( !(StepAttacksBB[KING][ksq[us]] & ~(StepAttacksBB[KING][ksq[~us]] | StepAttacksBB[PAWN][psq])) | 
| Line 164... | Line 164... | ||
| 164 | : db[index(Them, pop_lsb(&b), ksq[Them] , psq)]; | 164 | : db[index(Them, pop_lsb(&b), ksq[Them] , psq)]; | 
| 165 | 165 | ||
| 166 | if (Us == WHITE) | 166 | if (Us == WHITE) | 
| 167 |     { | 167 |     { | 
| 168 | if (rank_of(psq) < RANK_7) // Single push | 168 | if (rank_of(psq) < RANK_7) // Single push | 
| 169 | r |= db[index(Them, ksq[Them], ksq[Us], psq + | 169 | r |= db[index(Them, ksq[Them], ksq[Us], psq + NORTH)]; | 
| 170 | 170 | ||
| 171 | if ( rank_of(psq) == RANK_2 // Double push | 171 | if ( rank_of(psq) == RANK_2 // Double push | 
| 172 | && psq + | 172 | && psq + NORTH != ksq[Us] | 
| 173 | && psq + | 173 | && psq + NORTH != ksq[Them]) | 
| 174 | r |= db[index(Them, ksq[Them], ksq[Us], psq + | 174 | r |= db[index(Them, ksq[Them], ksq[Us], psq + NORTH + NORTH)]; | 
| 175 |     } | 175 |     } | 
| 176 | 176 | ||
| 177 | return result = r & Good ? Good : r & UNKNOWN ? UNKNOWN : Bad; | 177 | return result = r & Good ? Good : r & UNKNOWN ? UNKNOWN : Bad; | 
| 178 |   } | 178 |   } | 
| 179 | 179 | ||