|
@@ -27,6 +27,22 @@
|
27
|
27
|
|
28
|
28
|
#define MAX_DIGITS 7
|
29
|
29
|
|
|
30
|
+// TODO inverted score color not visible on DMG
|
|
31
|
+
|
|
32
|
+const unsigned char num_attr_1[40] = {
|
|
33
|
+ 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,
|
|
34
|
+ 0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,0x81,
|
|
35
|
+};
|
|
36
|
+
|
|
37
|
+const unsigned char num_attr_2[40] = {
|
|
38
|
+ 0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,
|
|
39
|
+ 0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,
|
|
40
|
+};
|
|
41
|
+const palette_color_t num_pal_inv[4] = {
|
|
42
|
+ //RGB8( 0, 0, 0), RGB8(248,252,248), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
|
|
43
|
+ RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8(248,252,248), RGB8( 0, 0, 0)
|
|
44
|
+};
|
|
45
|
+
|
30
|
46
|
void map_title(void) {
|
31
|
47
|
set_bkg_palette(OAMF_CGB_PAL0, title_map_PALETTE_COUNT, title_map_palettes);
|
32
|
48
|
set_bkg_data(0, title_map_TILE_COUNT, title_map_tiles);
|
|
@@ -41,17 +57,32 @@ void map_game(void) {
|
41
|
57
|
set_bkg_tiles(0, 0, bg_map_WIDTH / bg_map_TILE_W, bg_map_HEIGHT / bg_map_TILE_H, bg_map_map);
|
42
|
58
|
}
|
43
|
59
|
|
44
|
|
-static void digit(uint8_t val, uint8_t digit, uint8_t x_off) {
|
|
60
|
+inline void set_win_based(uint8_t x, uint8_t y, uint8_t w, uint8_t h, const uint8_t *tiles, uint8_t base_tile, const uint8_t *attributes)
|
|
61
|
+{
|
|
62
|
+ VBK_REG = VBK_ATTRIBUTES;
|
|
63
|
+ set_win_tiles(x, y, w, h, attributes);
|
|
64
|
+ VBK_REG = VBK_TILES;
|
|
65
|
+ set_win_based_tiles(x, y, w, h, tiles, base_tile);
|
|
66
|
+}
|
|
67
|
+
|
|
68
|
+static void digit(uint8_t val, uint8_t digit, uint8_t x_off, uint8_t is_black) {
|
45
|
69
|
uint8_t off = val * numbers_WIDTH / numbers_TILE_W;
|
46
|
|
- set_win_based_tiles(x_off + (digit * numbers_WIDTH / numbers_TILE_W), 0,
|
47
|
|
- numbers_WIDTH / numbers_TILE_W, 1,
|
48
|
|
- numbers_map + off, bg_map_TILE_COUNT);
|
49
|
|
- set_win_based_tiles(x_off + (digit * numbers_WIDTH / numbers_TILE_W), 1,
|
50
|
|
- numbers_WIDTH / numbers_TILE_W, 1,
|
51
|
|
- numbers_map + off + (sizeof(numbers_map) / 2), bg_map_TILE_COUNT);
|
|
70
|
+
|
|
71
|
+ set_win_based(x_off + (digit * numbers_WIDTH / numbers_TILE_W), 0,
|
|
72
|
+ numbers_WIDTH / numbers_TILE_W, 1,
|
|
73
|
+ numbers_map + off, bg_map_TILE_COUNT,
|
|
74
|
+ (is_black ? num_attr_2 : num_attr_1) + off);
|
|
75
|
+
|
|
76
|
+ set_win_based(x_off + (digit * numbers_WIDTH / numbers_TILE_W), 1,
|
|
77
|
+ numbers_WIDTH / numbers_TILE_W, 1,
|
|
78
|
+ numbers_map + off + (sizeof(numbers_map) / 2), bg_map_TILE_COUNT,
|
|
79
|
+ (is_black ? num_attr_2 : num_attr_1) + off);
|
52
|
80
|
}
|
53
|
81
|
|
|
82
|
+
|
54
|
83
|
void win_game_load(void) {
|
|
84
|
+ set_bkg_palette(OAMF_CGB_PAL0 + bg_map_PALETTE_COUNT, numbers_PALETTE_COUNT, numbers_palettes);
|
|
85
|
+ set_bkg_palette(OAMF_CGB_PAL0 + bg_map_PALETTE_COUNT + 1, numbers_PALETTE_COUNT, num_pal_inv);
|
55
|
86
|
set_win_data(bg_map_TILE_COUNT, numbers_TILE_COUNT, numbers_tiles);
|
56
|
87
|
}
|
57
|
88
|
|
|
@@ -59,8 +90,6 @@ void win_game_draw(int32_t score) {
|
59
|
90
|
// TODO can not set numbers larger than int16 max?!
|
60
|
91
|
//score = 32767 + 1; // wtf?!
|
61
|
92
|
|
62
|
|
- // TODO support color switch, but how?
|
63
|
|
-
|
64
|
93
|
uint8_t is_black = 0;
|
65
|
94
|
if (score < 0) {
|
66
|
95
|
score = -score;
|
|
@@ -83,6 +112,6 @@ void win_game_draw(int32_t score) {
|
83
|
112
|
}
|
84
|
113
|
|
85
|
114
|
for (uint8_t i = 0; i < len; i++) {
|
86
|
|
- digit(digits[len - i - 1], i, 10 - len);
|
|
115
|
+ digit(digits[len - i - 1], i, 10 - len, is_black);
|
87
|
116
|
}
|
88
|
117
|
}
|