|
@@ -2,6 +2,7 @@
|
2
|
2
|
#include <gbdk/metasprites.h>
|
3
|
3
|
|
4
|
4
|
#include "rockshp.h"
|
|
5
|
+#include "bg_map.h"
|
5
|
6
|
|
6
|
7
|
#define TILE_WIDTH 8
|
7
|
8
|
#define TILE_HEIGHT 8
|
|
@@ -22,7 +23,6 @@ uint8_t PosF;
|
22
|
23
|
uint8_t idx, rot;
|
23
|
24
|
|
24
|
25
|
size_t num_tiles;
|
25
|
|
-uint8_t flipped_data[NUM_BYTES_PER_TILE];
|
26
|
26
|
|
27
|
27
|
uint8_t joyp = 0, old_joyp = 0;
|
28
|
28
|
|
|
@@ -30,52 +30,6 @@ uint8_t joyp = 0, old_joyp = 0;
|
30
|
30
|
#define KEY_DOWN(KEY) (joyp & (KEY))
|
31
|
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
|
33
|
const palette_color_t gray_pal[4] = { RGB8(255,255,255),
|
80
|
34
|
RGB8(170,170,170),
|
81
|
35
|
RGB8(85,85,85),
|
|
@@ -99,42 +53,30 @@ void main(void) {
|
99
|
53
|
DISPLAY_OFF;
|
100
|
54
|
|
101
|
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
|
65
|
set_sprite_palette(OAMF_CGB_PAL1, 1, pink_pal);
|
104
|
66
|
set_sprite_palette(OAMF_CGB_PAL2, 1, cyan_pal);
|
105
|
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
|
69
|
size_t i;
|
114
|
70
|
num_tiles = sizeof(rockshp_tiles) >> 4;
|
115
|
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
|
79
|
SPRITES_8x8;
|
137
|
|
- #endif
|
138
|
80
|
DISPLAY_ON;
|
139
|
81
|
|
140
|
82
|
// Set initial position to the center of the screen, zero out speed
|
|
@@ -194,7 +136,7 @@ void main(void) {
|
194
|
136
|
switch (rot & 0x3) {
|
195
|
137
|
case 1:
|
196
|
138
|
hiwater += move_metasprite_flipy( rockshp_metasprites[idx],
|
197
|
|
- TILE_NUM_START + get_tile_offset(0, 1),
|
|
139
|
+ TILE_NUM_START,
|
198
|
140
|
subpal,
|
199
|
141
|
hiwater,
|
200
|
142
|
DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
|
|
@@ -202,7 +144,7 @@ void main(void) {
|
202
|
144
|
break;
|
203
|
145
|
case 2:
|
204
|
146
|
hiwater += move_metasprite_flipxy(rockshp_metasprites[idx],
|
205
|
|
- TILE_NUM_START + get_tile_offset(1, 1),
|
|
147
|
+ TILE_NUM_START,
|
206
|
148
|
subpal,
|
207
|
149
|
hiwater,
|
208
|
150
|
DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
|
|
@@ -210,7 +152,7 @@ void main(void) {
|
210
|
152
|
break;
|
211
|
153
|
case 3:
|
212
|
154
|
hiwater += move_metasprite_flipx( rockshp_metasprites[idx],
|
213
|
|
- TILE_NUM_START + get_tile_offset(1, 0),
|
|
155
|
+ TILE_NUM_START,
|
214
|
156
|
subpal,
|
215
|
157
|
hiwater,
|
216
|
158
|
DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
|
|
@@ -218,7 +160,7 @@ void main(void) {
|
218
|
160
|
break;
|
219
|
161
|
default:
|
220
|
162
|
hiwater += move_metasprite_ex( rockshp_metasprites[idx],
|
221
|
|
- TILE_NUM_START + get_tile_offset(0, 0),
|
|
163
|
+ TILE_NUM_START,
|
222
|
164
|
subpal,
|
223
|
165
|
hiwater,
|
224
|
166
|
DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
|