Make engine dep-free/standalone and add Wasm target

This commit is contained in:
2025-12-19 04:01:32 +01:00
parent 509f58a379
commit 02b1ca4cfe
10 changed files with 1264 additions and 392 deletions

202
evaluations.h Normal file
View File

@@ -0,0 +1,202 @@
/* TODO: candidate for code-generation */
#pragma once
#define BITBOARD_WHITE( \
a8,b8,c8,d8,e8,f8,g8,h8, \
a7,b7,c7,d7,e7,f7,g7,h7, \
a6,b6,c6,d6,e6,f6,g6,h6, \
a5,b5,c5,d5,e5,f5,g5,h5, \
a4,b4,c4,d4,e4,f4,g4,h4, \
a3,b3,c3,d3,e3,f3,g3,h3, \
a2,b2,c2,d2,e2,f2,g2,h2, \
a1,b1,c1,d1,e1,f1,g1,h1) \
(bitboard)\
0b##\
h8##g8##f8##e8##d8##c8##b8##a8##\
h7##g7##f7##e7##d7##c7##b7##a7##\
h6##g6##f6##e6##d6##c6##b6##a6##\
h5##g5##f5##e5##d5##c5##b5##a5##\
h4##g4##f4##e4##d4##c4##b4##a4##\
h3##g3##f3##e3##d3##c3##b3##a3##\
h2##g2##f2##e2##d2##c2##b2##a2##\
h1##g1##f1##e1##d1##c1##b1##a1##\
ULL
#define BITBOARD_BLACK( \
a8,b8,c8,d8,e8,f8,g8,h8, \
a7,b7,c7,d7,e7,f7,g7,h7, \
a6,b6,c6,d6,e6,f6,g6,h6, \
a5,b5,c5,d5,e5,f5,g5,h5, \
a4,b4,c4,d4,e4,f4,g4,h4, \
a3,b3,c3,d3,e3,f3,g3,h3, \
a2,b2,c2,d2,e2,f2,g2,h2, \
a1,b1,c1,d1,e1,f1,g1,h1) \
(bitboard)\
0b##\
h1##g1##f1##e1##d1##c1##b1##a1##\
h2##g2##f2##e2##d2##c2##b2##a2##\
h3##g3##f3##e3##d3##c3##b3##a3##\
h4##g4##f4##e4##d4##c4##b4##a4##\
h5##g5##f5##e5##d5##c5##b5##a5##\
h6##g6##f6##e6##d6##c6##b6##a6##\
h7##g7##f7##e7##d7##c7##b7##a7##\
h8##g8##f8##e8##d8##c8##b8##a8##\
ULL
#define RELATIVE_DIAGONAL_A1_H8 \
RELATIVE_BITBOARD( \
0,0,0,0,0,0,0,1, \
0,0,0,0,0,0,1,0, \
0,0,0,0,0,1,0,0, \
0,0,0,0,1,0,0,0, \
0,0,0,1,0,0,0,0, \
0,0,1,0,0,0,0,0, \
0,1,0,0,0,0,0,0, \
1,0,0,0,0,0,0,0)
#define RELATIVE_DIAGONAL_A8_H1 \
RELATIVE_BITBOARD( \
1,0,0,0,0,0,0,0, \
0,1,0,0,0,0,0,0, \
0,0,1,0,0,0,0,0, \
0,0,0,1,0,0,0,0, \
0,0,0,0,1,0,0,0, \
0,0,0,0,0,1,0,0, \
0,0,0,0,0,0,1,0, \
0,0,0,0,0,0,0,1)
#define RELATIVE_BISHOP_KING_ATTACK \
RELATIVE_BITBOARD( \
0,0,0,0,0,0,1,1, \
0,0,0,0,0,1,1,0, \
0,0,0,0,1,1,0,0, \
0,0,0,1,1,0,0,0, \
0,0,1,1,0,0,0,0, \
0,1,1,0,0,0,0,0, \
1,1,0,0,0,0,0,0, \
1,0,0,0,0,0,0,0)
#define RELATIVE_BISHOP_QUEEN_ATTACK \
RELATIVE_BITBOARD( \
1,1,0,0,0,0,0,0, \
0,1,1,0,0,0,0,0, \
0,0,1,1,0,0,0,0, \
0,0,0,1,1,0,0,0, \
0,0,0,0,1,1,0,0, \
0,0,0,0,0,1,1,0, \
0,0,0,0,0,0,1,1, \
0,0,0,0,0,0,0,1)
#define RELATIVE_KING_CASTLE_KINGSIDE \
RELATIVE_BITBOARD( \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,1,0)
#define RELATIVE_KING_CASTLE_QUEENSIDE \
RELATIVE_BITBOARD( \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,1,1,0,0,0,0,0)
#define CORNERS \
BITBOARD( \
1,0,0,0,0,0,0,1, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
1,0,0,0,0,0,0,1)
#define RELATIVE_PAWN_SAFE_ZONE \
BITBOARD( \
0,0,0,0,0,0,0,0, \
0,0,0,0,0,0,0,0, \
1,0,0,0,0,0,0,0, \
1,0,0,1,1,0,0,0, \
1,1,1,1,1,0,0,0, \
1,1,1,1,1,0,0,1, \
1,1,1,1,1,1,1,1, \
0,0,0,0,0,0,0,0)
#define BOARD_CENTER_4X4 \
((FILE_MASK_C | FILE_MASK_D | FILE_MASK_E | FILE_MASK_F) \
& (RANK_MASK_3 | RANK_MASK_4 | RANK_MASK_5 | RANK_MASK_6))
#define BOARD_CENTER_2X2 \
((FILE_MASK_D | FILE_MASK_E) \
& (RANK_MASK_4 | RANK_MASK_5))
#define POSITIONAL_BONUS_0 \
/* piece bonus area*/ \
X(PIECE_PAWN, 0.02, BOARD_CENTER_4X4) \
X(PIECE_KNIGHT, 0.05, BOARD_CENTER_4X4) \
X(PIECE_BISHOP, 0.05, RELATIVE_DIAGONAL_A1_H8 | RELATIVE_DIAGONAL_A8_H1) \
X(PIECE_KING, 0.15, RELATIVE_KING_CASTLE_KINGSIDE) \
X(PIECE_QUEEN, -0.10, RANK_MASK_3 | RANK_MASK_4 | RANK_MASK_5 | RANK_MASK_6) \
/**/
#define POSITIONAL_BONUS_1 \
/* piece bonus area*/ \
X(PIECE_PAWN, 0.02, BOARD_CENTER_2X2) \
X(PIECE_BISHOP, 0.05, RELATIVE_BISHOP_KING_ATTACK) \
/**/
#define POSITIONAL_BONUS_2 \
/* piece bonus area*/ \
X(PIECE_PAWN, -0.10, ~RELATIVE_PAWN_SAFE_ZONE) \
X(PIECE_BISHOP, 0.05, CORNERS) \
/**/
#define POSITIONAL_BONUS_3 \
/* piece bonus area*/ \
X(PIECE_BISHOP, 0.02, RELATIVE_BISHOP_QUEEN_ATTACK)
#define POSITIONAL_MODIFIER_COUNT 4
static struct {bitboard const area; double const val;} const
positional_modifier[PLAYER_COUNT][POSITIONAL_MODIFIER_COUNT][PIECE_COUNT] = {
#define X(p, b, a) [p] = {.area = (a), .val = b},
#define RELATIVE_BITBOARD BITBOARD_WHITE
[PLAYER_WHITE] = {
{POSITIONAL_BONUS_0},
{POSITIONAL_BONUS_1},
{POSITIONAL_BONUS_2},
{POSITIONAL_BONUS_3},
},
[PLAYER_BLACK] = {
#undef RELATIVE_BITBOARD
#define RELATIVE_BITBOARD BITBOARD_BLACK
{POSITIONAL_BONUS_0},
{POSITIONAL_BONUS_1},
{POSITIONAL_BONUS_2},
{POSITIONAL_BONUS_3},
}
#undef X
};
#undef CORNERS
#undef BOARD_CENTER_4X4
#undef BOARD_CENTER_2X2
#undef BITBOARD_WHITE
#undef BITBOARD_BLACK
#undef RELATIVE_DIAGONAL_A1_H8
#undef RELATIVE_DIAGONAL_A8_H1
#undef RELATIVE_BISHOP_KING_ATTACK
#undef RELATIVE_BISHOP_QUEEN_ATTACK
#undef RELATIVE_KING_CASTLE_KINGSIDE
#undef RELATIVE_KING_CASTLE_QUEENSIDE