-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathking.c
156 lines (148 loc) · 6.07 KB
/
king.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include "board.h"
#include "pieces.h"
#include "constants.h"
Vtx king_verts[] = {
{ 70, -74, -4, 0, 0, 0, 43, 43, 43, 255 },
{ 70, -74, 40, 0, 0, 0, 189, 189, 189, 255 },
{ 91, 0, 424, 0, 0, 0, 176, 176, 176, 255 },
{ 27, -28, 104, 0, 0, 0, 199, 199, 199, 255 },
{ -70, -74, -4, 0, 0, 0, 43, 43, 43, 255 },
{ -70, -74, 40, 0, 0, 0, 115, 115, 115, 255 },
{ 0, -25, 369, 0, 0, 0, 74, 74, 74, 255 },
{ 0, -98, 424, 0, 0, 0, 193, 193, 193, 255 },
{ -27, -28, 104, 0, 0, 0, 199, 199, 199, 255 },
{ 0, -111, -4, 0, 0, 0, 54, 54, 54, 255 },
{ 0, -111, 40, 0, 0, 0, 115, 115, 115, 255 },
{ 0, -67, 452, 0, 0, 0, 254, 254, 254, 255 },
{ 0, -40, 104, 0, 0, 0, 197, 197, 197, 255 },
{ 112, 0, -4, 0, 0, 0, 43, 43, 43, 255 },
{ 70, 74, -4, 0, 0, 0, 43, 43, 43, 255 },
{ 112, 0, 40, 0, 0, 0, 195, 195, 195, 255 },
{ 70, 74, 40, 0, 0, 0, 115, 115, 115, 255 },
{ 28, 0, 369, 0, 0, 0, 74, 74, 74, 255 },
{ 63, 0, 451, 0, 0, 0, 255, 255, 255, 255 },
{ 27, 28, 104, 0, 0, 0, 199, 199, 199, 255 },
{ 42, 0, 104, 0, 0, 0, 199, 199, 199, 255 },
{ -112, 0, -4, 0, 0, 0, 43, 43, 43, 255 },
{ -70, 74, -4, 0, 0, 0, 43, 43, 43, 255 },
{ -112, 0, 40, 0, 0, 0, 195, 195, 195, 255 },
{ -70, 74, 40, 0, 0, 0, 189, 189, 189, 255 },
{ -28, 0, 369, 0, 0, 0, 69, 69, 69, 255 },
{ 0, 25, 369, 0, 0, 0, 99, 99, 99, 255 },
{ -91, 0, 424, 0, 0, 0, 172, 172, 172, 255 },
{ 0, 98, 424, 0, 0, 0, 175, 175, 175, 255 },
{ -63, 0, 451, 0, 0, 0, 255, 255, 255, 255 },
{ -27, 28, 104, 0, 0, 0, 199, 199, 199, 255 },
{ -42, 0, 104, 0, 0, 0, 199, 199, 199, 255 },
{ 0, 111, -4, 0, 0, 0, 54, 54, 54, 255 },
{ 0, 111, 40, 0, 0, 0, 192, 192, 192, 255 },
{ 0, 67, 452, 0, 0, 0, 254, 254, 254, 255 },
{ 0, 40, 104, 0, 0, 0, 197, 197, 197, 255 },
{ -6, 9, 465, 0, 0, 0, 69, 69, 69, 255 },
{ 6, 9, 465, 0, 0, 0, 75, 75, 75, 255 },
{ -6, 9, 501, 0, 0, 0, 224, 224, 224, 255 },
{ 6, 9, 501, 0, 0, 0, 236, 236, 236, 255 },
{ -6, 9, 516, 0, 0, 0, 164, 164, 164, 255 },
{ 6, 9, 516, 0, 0, 0, 173, 173, 173, 255 },
{ -6, 9, 533, 0, 0, 0, 255, 255, 255, 255 },
{ 6, 9, 533, 0, 0, 0, 255, 255, 255, 255 },
{ -6, -13, 465, 0, 0, 0, 94, 94, 94, 255 },
{ 6, -13, 465, 0, 0, 0, 104, 104, 104, 255 },
{ -6, -13, 501, 0, 0, 0, 218, 218, 218, 255 },
{ 6, -13, 501, 0, 0, 0, 172, 172, 172, 255 },
{ -6, -13, 516, 0, 0, 0, 172, 172, 172, 255 },
{ 6, -13, 516, 0, 0, 0, 173, 173, 173, 255 },
{ -6, -13, 533, 0, 0, 0, 255, 255, 255, 255 },
{ 6, -13, 533, 0, 0, 0, 255, 255, 255, 255 },
{ 22, 9, 501, 0, 0, 0, 255, 255, 255, 255 },
{ 22, 9, 516, 0, 0, 0, 255, 255, 255, 255 },
{ -22, 9, 516, 0, 0, 0, 255, 255, 255, 255 },
{ -22, 9, 501, 0, 0, 0, 255, 255, 255, 255 },
{ 22, -13, 501, 0, 0, 0, 255, 255, 255, 255 },
{ 22, -13, 516, 0, 0, 0, 255, 255, 255, 255 },
{ -22, -13, 516, 0, 0, 0, 255, 255, 255, 255 },
{ -22, -13, 501, 0, 0, 0, 255, 255, 255, 255 },
};
Gfx king_commands[] = {
gsSPVertex(king_verts, 60, 0),
gsSP2Triangles(13, 0, 9, 0, 3, 10, 1, 0),
gsSP2Triangles(1, 9, 0, 0, 2, 11, 7, 0),
gsSP2Triangles(2, 6, 17, 0, 20, 1, 15, 0),
gsSP2Triangles(17, 3, 20, 0, 6, 12, 3, 0),
gsSP2Triangles(2, 7, 6, 0, 15, 0, 13, 0),
gsSP2Triangles(17, 6, 3, 0, 21, 9, 4, 0),
gsSP2Triangles(8, 10, 12, 0, 5, 9, 10, 0),
gsSP2Triangles(27, 6, 7, 0, 29, 27, 7, 0),
gsSP2Triangles(31, 5, 8, 0, 25, 31, 8, 0),
gsSP2Triangles(6, 8, 12, 0, 23, 4, 5, 0),
gsSP2Triangles(25, 8, 6, 0, 13, 32, 14, 0),
gsSP2Triangles(19, 33, 35, 0, 16, 32, 33, 0),
gsSP2Triangles(2, 28, 34, 0, 20, 16, 19, 0),
gsSP2Triangles(17, 20, 19, 0, 26, 19, 35, 0),
gsSP2Triangles(2, 26, 28, 0, 15, 14, 16, 0),
gsSP2Triangles(17, 19, 26, 0, 21, 22, 32, 0),
gsSP2Triangles(30, 33, 24, 0, 24, 32, 22, 0),
gsSP2Triangles(27, 26, 25, 0, 29, 28, 27, 0),
gsSP2Triangles(31, 24, 23, 0, 25, 30, 31, 0),
gsSP2Triangles(26, 35, 30, 0, 23, 22, 21, 0),
gsSP2Triangles(25, 26, 30, 0, 3, 12, 10, 0),
gsSP2Triangles(1, 10, 9, 0, 20, 3, 1, 0),
gsSP2Triangles(15, 1, 0, 0, 8, 5, 10, 0),
gsSP2Triangles(5, 4, 9, 0, 27, 25, 6, 0),
gsSP2Triangles(31, 23, 5, 0, 23, 21, 4, 0),
gsSP2Triangles(19, 16, 33, 0, 16, 14, 32, 0),
gsSP2Triangles(2, 17, 26, 0, 20, 15, 16, 0),
gsSP2Triangles(15, 13, 14, 0, 30, 35, 33, 0),
gsSP2Triangles(24, 33, 32, 0, 27, 28, 26, 0),
gsSP2Triangles(31, 30, 24, 0, 23, 24, 22, 0),
gsSP2Triangles(28, 29, 34, 0, 7, 11, 29, 0),
gsSP2Triangles(2, 18, 11, 0, 2, 34, 18, 0),
gsSP2Triangles(36, 18, 34, 0, 36, 29, 11, 0),
gsSP2Triangles(36, 34, 29, 0, 36, 11, 18, 0),
gsSP2Triangles(36, 39, 37, 0, 38, 41, 39, 0),
gsSP2Triangles(40, 43, 41, 0, 44, 47, 46, 0),
gsSP2Triangles(46, 49, 48, 0, 48, 51, 50, 0),
gsSP2Triangles(46, 58, 59, 0, 38, 44, 46, 0),
gsSP2Triangles(41, 51, 49, 0, 39, 53, 52, 0),
gsSP2Triangles(37, 47, 45, 0, 42, 48, 50, 0),
gsSP2Triangles(52, 57, 56, 0, 54, 59, 58, 0),
gsSP2Triangles(38, 59, 55, 0, 47, 52, 56, 0),
gsSP2Triangles(40, 55, 54, 0, 49, 56, 57, 0),
gsSP2Triangles(36, 38, 39, 0, 38, 40, 41, 0),
gsSP2Triangles(40, 42, 43, 0, 44, 45, 47, 0),
gsSP2Triangles(46, 47, 49, 0, 48, 49, 51, 0),
gsSP2Triangles(46, 48, 58, 0, 38, 36, 44, 0),
gsSP2Triangles(41, 43, 51, 0, 39, 41, 53, 0),
gsSP2Triangles(37, 39, 47, 0, 42, 40, 48, 0),
gsSP2Triangles(52, 53, 57, 0, 54, 55, 59, 0),
gsSP2Triangles(38, 46, 59, 0, 47, 39, 52, 0),
gsSP2Triangles(40, 38, 55, 0, 49, 47, 56, 0),
gsSPEndDisplayList(),
};
static const Pos2 kingOffsets[] = {
{ 1, 0 },
{ -1, 0 },
{ 0, 1 },
{ 0,-1 },
{ 1, 1 },
{ -1, 1 },
{ 1,-1 },
{ -1,-1 },
};
void kingLegalMove(u32 ourIndex, const u8* piecesActive, const Pos2* piecePositions, u8* legalSpots) {
const Pos2* ourPosition = &(piecePositions[ourIndex]);
for (int i = 0; i < 8; i++) {
int spotX = ourPosition->x + kingOffsets[i].x;
if (spotX < 0 || spotX >= BOARD_WIDTH) {
continue;
}
int spotY = ourPosition->y + kingOffsets[i].y;
if (spotY < 0 || spotY >= BOARD_HEIGHT) {
continue;
}
if (isSpaceOccupied(spotX, spotY) > -1) {
continue;
}
legalSpots[spotX + (BOARD_WIDTH * spotY)] = 1;
}
}