Browse Source

add proper colors to score on gbc

Thomas B 1 month ago
parent
commit
2c36dec0a9
3 changed files with 40 additions and 11 deletions
  1. 1
    1
      Makefile
  2. BIN
      data/numbers.png
  3. 39
    10
      src/maps.c

+ 1
- 1
Makefile View File

86
 		$(PNGA) $< -o $@ -spr8x8 -map -use_map_attributes -noflip \
86
 		$(PNGA) $< -o $@ -spr8x8 -map -use_map_attributes -noflip \
87
 	,$(if $(findstring numbers,$<), \
87
 	,$(if $(findstring numbers,$<), \
88
 		@echo "Converting font $<" && \
88
 		@echo "Converting font $<" && \
89
-		$(PNGA) $< -o $@ -spr8x8 -sw 16 -sh 16 -map -no_palettes \
89
+		$(PNGA) $< -o $@ -spr8x8 -sw 16 -sh 16 -map \
90
 	,                                     \
90
 	,                                     \
91
 		@echo "Converting tile $<" && \
91
 		@echo "Converting tile $<" && \
92
 		$(PNGA) $< -o $@ -spr8x8      \
92
 		$(PNGA) $< -o $@ -spr8x8      \

BIN
data/numbers.png View File


+ 39
- 10
src/maps.c View File

27
 
27
 
28
 #define MAX_DIGITS 7
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
 void map_title(void) {
46
 void map_title(void) {
31
     set_bkg_palette(OAMF_CGB_PAL0, title_map_PALETTE_COUNT, title_map_palettes);
47
     set_bkg_palette(OAMF_CGB_PAL0, title_map_PALETTE_COUNT, title_map_palettes);
32
     set_bkg_data(0, title_map_TILE_COUNT, title_map_tiles);
48
     set_bkg_data(0, title_map_TILE_COUNT, title_map_tiles);
41
     set_bkg_tiles(0, 0, bg_map_WIDTH / bg_map_TILE_W, bg_map_HEIGHT / bg_map_TILE_H, bg_map_map);
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
     uint8_t off = val * numbers_WIDTH / numbers_TILE_W;
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
 void win_game_load(void) {
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
     set_win_data(bg_map_TILE_COUNT, numbers_TILE_COUNT, numbers_tiles);
86
     set_win_data(bg_map_TILE_COUNT, numbers_TILE_COUNT, numbers_tiles);
56
 }
87
 }
57
 
88
 
59
     // TODO can not set numbers larger than int16 max?!
90
     // TODO can not set numbers larger than int16 max?!
60
     //score = 32767 + 1; // wtf?!
91
     //score = 32767 + 1; // wtf?!
61
 
92
 
62
-    // TODO support color switch, but how?
63
-
64
     uint8_t is_black = 0;
93
     uint8_t is_black = 0;
65
     if (score < 0) {
94
     if (score < 0) {
66
         score = -score;
95
         score = -score;
83
     }
112
     }
84
 
113
 
85
     for (uint8_t i = 0; i < len; i++) {
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
 }

Loading…
Cancel
Save