Move all enum types definitions to types.h
[stockfish] / src / psqtab.h
1 /*
2   Stockfish, a UCI chess playing engine derived from Glaurung 2.1
3   Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
4   Copyright (C) 2008-2010 Marco Costalba, Joona Kiiski, Tord Romstad
5
6   Stockfish is free software: you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation, either version 3 of the License, or
9   (at your option) any later version.
10
11   Stockfish is distributed in the hope that it will be useful,
12   but WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   GNU General Public License for more details.
15
16   You should have received a copy of the GNU General Public License
17   along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #if !defined(PSQTAB_H_INCLUDED)
21 #define PSQTAB_H_INCLUDED
22
23 #include "types.h"
24
25 namespace {
26
27 ////
28 //// Constants modified by Joona Kiiski
29 ////
30
31 const Value MP = PawnValueMidgame;
32 const Value MK = KnightValueMidgame;
33 const Value MB = BishopValueMidgame;
34 const Value MR = RookValueMidgame;
35 const Value MQ = QueenValueMidgame;
36
37 const Value EP = PawnValueEndgame;
38 const Value EK = KnightValueEndgame;
39 const Value EB = BishopValueEndgame;
40 const Value ER = RookValueEndgame;
41 const Value EQ = QueenValueEndgame;
42
43 const int MgPST[][64] = {
44   { },
45   {// Pawn
46    // A      B      C     D      E      F      G     H
47         0,    0,     0,     0,     0,     0,    0,     0,
48     MP-28, MP-6, MP+ 4, MP+14, MP+14, MP+ 4, MP-6, MP-28,
49     MP-28, MP-6, MP+ 9, MP+36, MP+36, MP+ 9, MP-6, MP-28,
50     MP-28, MP-6, MP+17, MP+58, MP+58, MP+17, MP-6, MP-28,
51     MP-28, MP-6, MP+17, MP+36, MP+36, MP+17, MP-6, MP-28,
52     MP-28, MP-6, MP+ 9, MP+14, MP+14, MP+ 9, MP-6, MP-28,
53     MP-28, MP-6, MP+ 4, MP+14, MP+14, MP+ 4, MP-6, MP-28,
54         0,    0,     0,     0,     0,     0,    0,     0
55   },
56   {// Knight
57    //  A      B       C      D      E      F      G       H
58     MK-135, MK-107, MK-80, MK-67, MK-67, MK-80, MK-107, MK-135,
59     MK- 93, MK- 67, MK-39, MK-25, MK-25, MK-39, MK- 67, MK- 93,
60     MK- 53, MK- 25, MK+ 1, MK+13, MK+13, MK+ 1, MK- 25, MK- 53,
61     MK- 25, MK+  1, MK+27, MK+41, MK+41, MK+27, MK+  1, MK- 25,
62     MK- 11, MK+ 13, MK+41, MK+55, MK+55, MK+41, MK+ 13, MK- 11,
63     MK- 11, MK+ 13, MK+41, MK+55, MK+55, MK+41, MK+ 13, MK- 11,
64     MK- 53, MK- 25, MK+ 1, MK+13, MK+13, MK+ 1, MK- 25, MK- 53,
65     MK-193, MK- 67, MK-39, MK-25, MK-25, MK-39, MK- 67, MK-193
66   },
67   {// Bishop
68    // A      B      C      D      E      F      G      H
69     MB-40, MB-40, MB-35, MB-30, MB-30, MB-35, MB-40, MB-40,
70     MB-17, MB+ 0, MB- 4, MB+ 0, MB+ 0, MB- 4, MB+ 0, MB-17,
71     MB-13, MB- 4, MB+ 8, MB+ 4, MB+ 4, MB+ 8, MB- 4, MB-13,
72     MB- 8, MB+ 0, MB+ 4, MB+17, MB+17, MB+ 4, MB+ 0, MB- 8,
73     MB- 8, MB+ 0, MB+ 4, MB+17, MB+17, MB+ 4, MB+ 0, MB- 8,
74     MB-13, MB- 4, MB+ 8, MB+ 4, MB+ 4, MB+ 8, MB- 4, MB-13,
75     MB-17, MB+ 0, MB- 4, MB+ 0, MB+ 0, MB- 4, MB+ 0, MB-17,
76     MB-17, MB-17, MB-13, MB- 8, MB- 8, MB-13, MB-17, MB-17
77   },
78   {// Rook
79    // A      B     C     D     E     F     G     H
80     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
81     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
82     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
83     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
84     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
85     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
86     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12,
87     MR-12, MR-7, MR-2, MR+2, MR+2, MR-2, MR-7, MR-12
88   },
89   {// Queen
90    // A     B     C     D     E     F     G     H
91     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
92     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
93     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
94     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
95     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
96     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
97     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8,
98     MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8, MQ+8
99   },
100   {// King
101    //A    B    C    D    E    F    G    H
102     287, 311, 262, 214, 214, 262, 311, 287,
103     262, 287, 238, 190, 190, 238, 287, 262,
104     214, 238, 190, 142, 142, 190, 238, 214,
105     190, 214, 167, 119, 119, 167, 214, 190,
106     167, 190, 142,  94,  94, 142, 190, 167,
107     142, 167, 119,  69,  69, 119, 167, 142,
108     119, 142,  94,  46,  46,  94, 142, 119,
109      94, 119,  69,  21,  21,  69, 119,  94
110   }
111 };
112
113 const int EgPST[][64] = {
114   { },
115   {// Pawn
116    // A     B     C     D     E     F     G     H
117        0,    0,    0,    0,    0,    0,    0,    0,
118     EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8,
119     EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8,
120     EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8,
121     EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8,
122     EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8,
123     EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8, EP-8,
124        0,    0,    0,    0,    0,    0,    0,    0
125   },
126   {// Knight
127    // A       B      C      D      E      F      G      H
128     EK-104, EK-79, EK-55, EK-42, EK-42, EK-55, EK-79, EK-104,
129     EK- 79, EK-55, EK-30, EK-17, EK-17, EK-30, EK-55, EK- 79,
130     EK- 55, EK-30, EK- 6, EK+ 5, EK+ 5, EK- 6, EK-30, EK- 55,
131     EK- 42, EK-17, EK+ 5, EK+18, EK+18, EK+ 5, EK-17, EK- 42,
132     EK- 42, EK-17, EK+ 5, EK+18, EK+18, EK+ 5, EK-17, EK- 42,
133     EK- 55, EK-30, EK- 6, EK+ 5, EK+ 5, EK- 6, EK-30, EK- 55,
134     EK- 79, EK-55, EK-30, EK-17, EK-17, EK-30, EK-55, EK- 79,
135     EK-104, EK-79, EK-55, EK-42, EK-42, EK-55, EK-79, EK-104
136   },
137   {// Bishop
138    // A      B      C      D      E      F      G      H
139     EB-59, EB-42, EB-35, EB-26, EB-26, EB-35, EB-42, EB-59,
140     EB-42, EB-26, EB-18, EB-11, EB-11, EB-18, EB-26, EB-42,
141     EB-35, EB-18, EB-11, EB- 4, EB- 4, EB-11, EB-18, EB-35,
142     EB-26, EB-11, EB- 4, EB+ 4, EB+ 4, EB- 4, EB-11, EB-26,
143     EB-26, EB-11, EB- 4, EB+ 4, EB+ 4, EB- 4, EB-11, EB-26,
144     EB-35, EB-18, EB-11, EB- 4, EB- 4, EB-11, EB-18, EB-35,
145     EB-42, EB-26, EB-18, EB-11, EB-11, EB-18, EB-26, EB-42,
146     EB-59, EB-42, EB-35, EB-26, EB-26, EB-35, EB-42, EB-59
147   },
148   {// Rook
149    // A     B     C     D     E     F     G     H
150     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
151     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
152     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
153     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
154     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
155     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
156     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3,
157     ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3, ER+3
158   },
159   {// Queen
160    // A      B      C      D      E      F      G      H
161     EQ-80, EQ-54, EQ-42, EQ-30, EQ-30, EQ-42, EQ-54, EQ-80,
162     EQ-54, EQ-30, EQ-18, EQ- 6, EQ- 6, EQ-18, EQ-30, EQ-54,
163     EQ-42, EQ-18, EQ- 6, EQ+ 6, EQ+ 6, EQ- 6, EQ-18, EQ-42,
164     EQ-30, EQ- 6, EQ+ 6, EQ+18, EQ+18, EQ+ 6, EQ- 6, EQ-30,
165     EQ-30, EQ- 6, EQ+ 6, EQ+18, EQ+18, EQ+ 6, EQ- 6, EQ-30,
166     EQ-42, EQ-18, EQ- 6, EQ+ 6, EQ+ 6, EQ- 6, EQ-18, EQ-42,
167     EQ-54, EQ-30, EQ-18, EQ- 6, EQ- 6, EQ-18, EQ-30, EQ-54,
168     EQ-80, EQ-54, EQ-42, EQ-30, EQ-30, EQ-42, EQ-54, EQ-80
169   },
170   {// King
171    //A    B    C    D    E    F    G    H
172      18,  77, 105, 135, 135, 105,  77,  18,
173      77, 135, 165, 193, 193, 165, 135,  77,
174     105, 165, 193, 222, 222, 193, 165, 105,
175     135, 193, 222, 251, 251, 222, 193, 135,
176     135, 193, 222, 251, 251, 222, 193, 135,
177     105, 165, 193, 222, 222, 193, 165, 105,
178      77, 135, 165, 193, 193, 165, 135,  77,
179      18,  77, 105, 135, 135, 105,  77,  18
180   }
181 };
182
183 } // namespace
184
185 #endif // !defined(PSQTAB_H_INCLUDED)