Browse Source

reduce complexity of background map. show it colored on gbc and also noflip to support dmg.

Thomas B 2 months ago
parent
commit
c1ab59ac52
3 changed files with 19 additions and 77 deletions
  1. 1
    1
      Makefile
  2. BIN
      data/bg_map.png
  3. 18
    76
      src/main.c

+ 1
- 1
Makefile View File

55
 	@mkdir -p $(@D)
55
 	@mkdir -p $(@D)
56
 	$(if $(findstring _map,$<),           \
56
 	$(if $(findstring _map,$<),           \
57
 		@echo "Converting map $<" &&  \
57
 		@echo "Converting map $<" &&  \
58
-		$(PNGA) $< -o $@ -spr8x8 -map \
58
+		$(PNGA) $< -o $@ -spr8x8 -map -use_map_attributes -noflip \
59
 	,                                     \
59
 	,                                     \
60
 		@echo "Converting tile $<" && \
60
 		@echo "Converting tile $<" && \
61
 		$(PNGA) $< -o $@ -spr8x8      \
61
 		$(PNGA) $< -o $@ -spr8x8      \

BIN
data/bg_map.png View File


+ 18
- 76
src/main.c View File

2
 #include <gbdk/metasprites.h>
2
 #include <gbdk/metasprites.h>
3
 
3
 
4
 #include "rockshp.h"
4
 #include "rockshp.h"
5
+#include "bg_map.h"
5
 
6
 
6
 #define TILE_WIDTH          8
7
 #define TILE_WIDTH          8
7
 #define TILE_HEIGHT         8
8
 #define TILE_HEIGHT         8
22
 uint8_t idx, rot;
23
 uint8_t idx, rot;
23
 
24
 
24
 size_t num_tiles;
25
 size_t num_tiles;
25
-uint8_t flipped_data[NUM_BYTES_PER_TILE];
26
 
26
 
27
 uint8_t joyp = 0, old_joyp = 0;
27
 uint8_t joyp = 0, old_joyp = 0;
28
 
28
 
30
 #define KEY_DOWN(KEY) (joyp & (KEY))
30
 #define KEY_DOWN(KEY) (joyp & (KEY))
31
 #define KEY_PRESSED(KEY) ((joyp ^ old_joyp) & joyp & (KEY))
31
 #define KEY_PRESSED(KEY) ((joyp ^ old_joyp) & joyp & (KEY))
32
 
32
 
33
-// Table for fast reversing of bits in a byte - used for flipping in X
34
-const uint8_t reverse_bits[256] = {
35
-    0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0,
36
-    0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8,
37
-    0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4,
38
-    0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC,
39
-    0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2,
40
-    0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA,
41
-    0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6,
42
-    0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE,
43
-    0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1,
44
-    0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9,
45
-    0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5,
46
-    0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD,
47
-    0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3,
48
-    0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB,
49
-    0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7,
50
-    0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF
51
-};
52
-
53
-void set_tile(uint8_t tile_idx, uint8_t* data, uint8_t flip_x, uint8_t flip_y)
54
-{
55
-    size_t i;
56
-    for(i = 0; i < TILE_HEIGHT; i++)
57
-    {
58
-        size_t y = flip_y ? (TILE_HEIGHT-1-i) : i;
59
-        flipped_data[2*i] = flip_x ? reverse_bits[data[2*y]] : data[2*y];
60
-        flipped_data[2*i+1] = flip_x ? reverse_bits[data[2*y+1]] : data[2*y+1];
61
-    }
62
-    set_sprite_data(tile_idx, 1, flipped_data);
63
-}
64
-
65
-uint8_t get_tile_offset(uint8_t flipx, uint8_t flipy)
66
-{
67
-    flipx; flipy; // suppress compiler warnings
68
-    uint8_t offset = 0;
69
-    #if !HARDWARE_SPRITE_CAN_FLIP_Y
70
-    offset += flipy ? num_tiles : 0;
71
-    #endif
72
-    #if !HARDWARE_SPRITE_CAN_FLIP_X
73
-    offset <<= 1;
74
-    offset += flipx ? num_tiles : 0;
75
-    #endif
76
-    return offset;
77
-}
78
-
79
 const palette_color_t gray_pal[4] = {   RGB8(255,255,255),
33
 const palette_color_t gray_pal[4] = {   RGB8(255,255,255),
80
                                         RGB8(170,170,170),
34
                                         RGB8(170,170,170),
81
                                         RGB8(85,85,85),
35
                                         RGB8(85,85,85),
99
     DISPLAY_OFF;
53
     DISPLAY_OFF;
100
 
54
 
101
     set_default_palette();
55
     set_default_palette();
102
-    set_sprite_palette(OAMF_CGB_PAL0, 1, gray_pal);
56
+
57
+    // bg_map as background map
58
+    set_bkg_palette(OAMF_CGB_PAL0, bg_map_PALETTE_COUNT, bg_map_palettes);
59
+    set_bkg_data(0, bg_map_TILE_COUNT, bg_map_tiles);
60
+    set_bkg_attributes(0, 0, bg_map_MAP_ATTRIBUTES_WIDTH, bg_map_MAP_ATTRIBUTES_HEIGHT, bg_map_MAP_ATTRIBUTES);
61
+    set_bkg_tiles(0, 0, bg_map_WIDTH / bg_map_TILE_W, bg_map_HEIGHT / bg_map_TILE_H, bg_map_map);
62
+
63
+
64
+    set_sprite_palette(OAMF_CGB_PAL0, 1, rockshp_palettes); //gray_pal);
103
     set_sprite_palette(OAMF_CGB_PAL1, 1, pink_pal);
65
     set_sprite_palette(OAMF_CGB_PAL1, 1, pink_pal);
104
     set_sprite_palette(OAMF_CGB_PAL2, 1, cyan_pal);
66
     set_sprite_palette(OAMF_CGB_PAL2, 1, cyan_pal);
105
     set_sprite_palette(OAMF_CGB_PAL3, 1, green_pal);
67
     set_sprite_palette(OAMF_CGB_PAL3, 1, green_pal);
106
 
68
 
107
-    // Fill the screen background with a single tile pattern
108
-    fill_bkg_rect(0, 0, DEVICE_SCREEN_WIDTH, DEVICE_SCREEN_HEIGHT, 0);
109
-
110
-    // Set tile data for background
111
-    set_bkg_data(0, 1, pattern);
112
-
113
     size_t i;
69
     size_t i;
114
     num_tiles = sizeof(rockshp_tiles) >> 4;
70
     num_tiles = sizeof(rockshp_tiles) >> 4;
115
     for(i = 0; i < num_tiles; i++)
71
     for(i = 0; i < num_tiles; i++)
116
     {
72
     {
117
-        set_tile(i + get_tile_offset(0, 0), rockshp_tiles + (i << 4), 0, 0);
118
-        #if !HARDWARE_SPRITE_CAN_FLIP_X
119
-        set_tile(i + get_tile_offset(1, 0), sprite_tiles + (i << 4), 1, 0);
120
-        #endif
121
-        #if !HARDWARE_SPRITE_CAN_FLIP_Y
122
-        set_tile(i + get_tile_offset(0, 1), sprite_tiles + (i << 4), 0, 1);
123
-        #endif
124
-        #if !HARDWARE_SPRITE_CAN_FLIP_X && !HARDWARE_SPRITE_CAN_FLIP_Y
125
-        set_tile(i + get_tile_offset(1, 1), sprite_tiles + (i << 4), 1, 1);
126
-        #endif
73
+        //set_tile(i + get_tile_offset(0, 0), rockshp_tiles + (i << 4));
74
+        set_sprite_data(i, 1, rockshp_tiles + (i << 4));
127
     }
75
     }
128
 
76
 
129
-    // Show bkg and sprites
130
-    SHOW_BKG; SHOW_SPRITES;
131
-
132
-    // Check what size hardware sprite the metasprite is using (from sprite.h)
133
-    #if sprite_TILE_H == 16
134
-    SPRITES_8x16;
135
-    #else
77
+    SHOW_BKG;
78
+    SHOW_SPRITES;
136
     SPRITES_8x8;
79
     SPRITES_8x8;
137
-    #endif
138
     DISPLAY_ON;
80
     DISPLAY_ON;
139
 
81
 
140
     // Set initial position to the center of the screen, zero out speed
82
     // Set initial position to the center of the screen, zero out speed
194
         switch (rot & 0x3) {
136
         switch (rot & 0x3) {
195
             case 1:
137
             case 1:
196
                 hiwater += move_metasprite_flipy( rockshp_metasprites[idx],
138
                 hiwater += move_metasprite_flipy( rockshp_metasprites[idx],
197
-                                                  TILE_NUM_START + get_tile_offset(0, 1),
139
+                                                  TILE_NUM_START,
198
                                                   subpal,
140
                                                   subpal,
199
                                                   hiwater,
141
                                                   hiwater,
200
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
142
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
202
                 break;
144
                 break;
203
             case 2:
145
             case 2:
204
                 hiwater += move_metasprite_flipxy(rockshp_metasprites[idx],
146
                 hiwater += move_metasprite_flipxy(rockshp_metasprites[idx],
205
-                                                  TILE_NUM_START + get_tile_offset(1, 1),
147
+                                                  TILE_NUM_START,
206
                                                   subpal,
148
                                                   subpal,
207
                                                   hiwater,
149
                                                   hiwater,
208
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
150
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
210
                 break;
152
                 break;
211
             case 3:
153
             case 3:
212
                 hiwater += move_metasprite_flipx( rockshp_metasprites[idx],
154
                 hiwater += move_metasprite_flipx( rockshp_metasprites[idx],
213
-                                                  TILE_NUM_START + get_tile_offset(1, 0),
155
+                                                  TILE_NUM_START,
214
                                                   subpal,
156
                                                   subpal,
215
                                                   hiwater,
157
                                                   hiwater,
216
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
158
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
218
                 break;
160
                 break;
219
             default:
161
             default:
220
                 hiwater += move_metasprite_ex(    rockshp_metasprites[idx],
162
                 hiwater += move_metasprite_ex(    rockshp_metasprites[idx],
221
-                                                  TILE_NUM_START + get_tile_offset(0, 0),
163
+                                                  TILE_NUM_START,
222
                                                   subpal,
164
                                                   subpal,
223
                                                   hiwater,
165
                                                   hiwater,
224
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
166
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),

Loading…
Cancel
Save