e3a5c54c2e4ccfd1b157689add478fee5b954b8a
[ansitris] / src / pieces.h
1 #ifndef PIECES_H_
2 #define PIECES_H_
3
4 #define BLK(x, y)       ((x) | ((y) << 4))
5 #define BLKX(c)         ((unsigned char)(c) & 0xf)
6 #define BLKY(c)         ((unsigned char)(c) >> 4)
7
8 #define NUM_PIECES      7
9
10 static unsigned char pieces[NUM_PIECES][4][4] = {
11         /* straight piece */
12         {
13                 {BLK(0, 2), BLK(1, 2), BLK(2, 2), BLK(3, 2)},
14                 {BLK(1, 0), BLK(1, 1), BLK(1, 2), BLK(1, 3)},
15                 {BLK(0, 2), BLK(1, 2), BLK(2, 2), BLK(3, 2)},
16                 {BLK(1, 0), BLK(1, 1), BLK(1, 2), BLK(1, 3)}
17         },
18         /* box */
19         {
20                 {BLK(1, 1), BLK(2, 1), BLK(1, 2), BLK(2, 2)},
21                 {BLK(1, 1), BLK(2, 1), BLK(1, 2), BLK(2, 2)},
22                 {BLK(1, 1), BLK(2, 1), BLK(1, 2), BLK(2, 2)},
23                 {BLK(1, 1), BLK(2, 1), BLK(1, 2), BLK(2, 2)}
24         },
25         /* J block */
26         {
27                 {BLK(0, 1), BLK(1, 1), BLK(2, 1), BLK(2, 2)},
28                 {BLK(1, 0), BLK(1, 1), BLK(1, 2), BLK(0, 2)},
29                 {BLK(0, 0), BLK(0, 1), BLK(1, 1), BLK(2, 1)},
30                 {BLK(1, 0), BLK(2, 0), BLK(1, 1), BLK(1, 2)}
31         },
32         /* L block */
33         {
34                 {BLK(0, 1), BLK(0, 2), BLK(1, 1), BLK(2, 1)},
35                 {BLK(0, 0), BLK(1, 0), BLK(1, 1), BLK(1, 2)},
36                 {BLK(0, 1), BLK(1, 1), BLK(2, 1), BLK(2, 0)},
37                 {BLK(1, 0), BLK(1, 1), BLK(1, 2), BLK(2, 2)}
38         },
39         /* S block */
40         {
41                 {BLK(1, 1), BLK(2, 1), BLK(0, 2), BLK(1, 2)},
42                 {BLK(0, 0), BLK(0, 1), BLK(1, 1), BLK(1, 2)},
43                 {BLK(1, 1), BLK(2, 1), BLK(0, 2), BLK(1, 2)},
44                 {BLK(0, 0), BLK(0, 1), BLK(1, 1), BLK(1, 2)}
45         },
46         /* T block */
47         {
48                 {BLK(0, 1), BLK(1, 1), BLK(2, 1), BLK(1, 2)},
49                 {BLK(1, 0), BLK(1, 1), BLK(1, 2), BLK(0, 1)},
50                 {BLK(0, 1), BLK(1, 1), BLK(2, 1), BLK(1, 0)},
51                 {BLK(1, 0), BLK(1, 1), BLK(1, 2), BLK(2, 1)}
52         },
53         /* Z block */
54         {
55                 {BLK(0, 1), BLK(1, 1), BLK(1, 2), BLK(2, 2)},
56                 {BLK(0, 1), BLK(1, 1), BLK(1, 0), BLK(0, 2)},
57                 {BLK(0, 1), BLK(1, 1), BLK(1, 2), BLK(2, 2)},
58                 {BLK(0, 1), BLK(1, 1), BLK(1, 0), BLK(0, 2)}
59         }
60 };
61
62 static int piece_spawnpos[NUM_PIECES][2] = {
63         {-1, -2}, {-1, -3}, {-1, -2}, {-1, -2}, {-1, -2}, {-1, -2}, {-1, -2}
64 };
65
66
67 #endif  /* PIECES_H_ */