Browse Source

allow cycling through sprites

Thomas B 2 months ago
parent
commit
cbfe5c111a
1 changed files with 75 additions and 45 deletions
  1. 75
    45
      src/main.c

+ 75
- 45
src/main.c View File

1
+/*
2
+ * main.c
3
+ * Duality
4
+ */
5
+
1
 #include <gbdk/platform.h>
6
 #include <gbdk/platform.h>
2
 #include <gbdk/metasprites.h>
7
 #include <gbdk/metasprites.h>
3
 
8
 
4
-#include "rockshp.h"
5
 #include "bg_map.h"
9
 #include "bg_map.h"
10
+#include "rockshp.h"
11
+#include "thrustG.h"
12
+#include "light.h"
13
+#include "dark.h"
14
+#include "shoot.h"
6
 
15
 
7
 #define TILE_WIDTH          8
16
 #define TILE_WIDTH          8
8
 #define TILE_HEIGHT         8
17
 #define TILE_HEIGHT         8
30
 #define KEY_DOWN(KEY) (joyp & (KEY))
39
 #define KEY_DOWN(KEY) (joyp & (KEY))
31
 #define KEY_PRESSED(KEY) ((joyp ^ old_joyp) & joyp & (KEY))
40
 #define KEY_PRESSED(KEY) ((joyp ^ old_joyp) & joyp & (KEY))
32
 
41
 
33
-const palette_color_t gray_pal[4] = {   RGB8(255,255,255),
34
-                                        RGB8(170,170,170),
35
-                                        RGB8(85,85,85),
36
-                                        RGB8(0,0,0) };
37
-const palette_color_t pink_pal[4] = {   RGB8(255,255,255),
38
-                                        RGB8(255,0,255),
39
-                                        RGB8(170,0,170),
40
-                                        RGB8(85,0,85) };
41
-const palette_color_t cyan_pal[4] = {   RGB8(255,255,255),
42
-                                        RGB8(85,255,255),
43
-                                        RGB8(0,170,170),
44
-                                        RGB8(0,85,85) };
45
-const palette_color_t green_pal[4] = {  RGB8(255,255,255),
46
-                                        RGB8(170,255,170),
47
-                                        RGB8(0,170,0),
48
-                                        RGB8(0,85,0) };
49
-
50
-const uint8_t pattern[] = {0x80,0x80,0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x02,0x02,0x01,0x01};
42
+struct sprites {
43
+    const metasprite_t * const * ms;
44
+    const uint8_t * ti;
45
+    const palette_color_t * pa;
46
+    uint8_t cnt;
47
+    uint8_t off;
48
+};
49
+
50
+struct sprites metasprites[] = {
51
+    {
52
+        .ms = rockshp_metasprites,
53
+        .ti = rockshp_tiles,
54
+        .pa = rockshp_palettes,
55
+        .cnt = rockshp_TILE_COUNT,
56
+        .off = TILE_NUM_START
57
+    }, {
58
+        .ms = thrustG_metasprites,
59
+        .ti = thrustG_tiles,
60
+        .pa = thrustG_palettes,
61
+        .cnt = thrustG_TILE_COUNT,
62
+        .off = TILE_NUM_START
63
+    }, {
64
+        .ms = light_metasprites,
65
+        .ti = light_tiles,
66
+        .pa = light_palettes,
67
+        .cnt = light_TILE_COUNT,
68
+        .off = TILE_NUM_START
69
+    }, {
70
+        .ms = dark_metasprites,
71
+        .ti = dark_tiles,
72
+        .pa = dark_palettes,
73
+        .cnt = dark_TILE_COUNT,
74
+        .off = TILE_NUM_START
75
+    }, {
76
+        .ms = shoot_metasprites,
77
+        .ti = shoot_tiles,
78
+        .pa = shoot_palettes,
79
+        .cnt = shoot_TILE_COUNT,
80
+        .off = TILE_NUM_START
81
+    }
82
+};
51
 
83
 
52
 void main(void) {
84
 void main(void) {
85
+    disable_interrupts();
53
     DISPLAY_OFF;
86
     DISPLAY_OFF;
54
 
87
 
55
     set_default_palette();
88
     set_default_palette();
60
     set_bkg_attributes(0, 0, bg_map_MAP_ATTRIBUTES_WIDTH, bg_map_MAP_ATTRIBUTES_HEIGHT, bg_map_MAP_ATTRIBUTES);
93
     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);
94
     set_bkg_tiles(0, 0, bg_map_WIDTH / bg_map_TILE_W, bg_map_HEIGHT / bg_map_TILE_H, bg_map_map);
62
 
95
 
96
+    // metasprites
97
+    uint8_t off = TILE_NUM_START;
98
+    for (int i = 0; i < (sizeof(metasprites) / sizeof(metasprites[0])); i++) {
99
+        metasprites[i].off = off;
100
+        off += metasprites[i].cnt;
63
 
101
 
64
-    set_sprite_palette(OAMF_CGB_PAL0, 1, rockshp_palettes); //gray_pal);
65
-    set_sprite_palette(OAMF_CGB_PAL1, 1, pink_pal);
66
-    set_sprite_palette(OAMF_CGB_PAL2, 1, cyan_pal);
67
-    set_sprite_palette(OAMF_CGB_PAL3, 1, green_pal);
68
-
69
-    size_t i;
70
-    num_tiles = sizeof(rockshp_tiles) >> 4;
71
-    for(i = 0; i < num_tiles; i++)
72
-    {
73
-        //set_tile(i + get_tile_offset(0, 0), rockshp_tiles + (i << 4));
74
-        set_sprite_data(i, 1, rockshp_tiles + (i << 4));
102
+        set_sprite_palette(OAMF_CGB_PAL0 + i, 1, metasprites[i].pa);
103
+        set_sprite_data(metasprites[i].off, metasprites[i].cnt, metasprites[i].ti);
75
     }
104
     }
76
 
105
 
77
     SHOW_BKG;
106
     SHOW_BKG;
78
     SHOW_SPRITES;
107
     SHOW_SPRITES;
79
     SPRITES_8x8;
108
     SPRITES_8x8;
80
     DISPLAY_ON;
109
     DISPLAY_ON;
110
+    enable_interrupts();
81
 
111
 
82
     // Set initial position to the center of the screen, zero out speed
112
     // Set initial position to the center of the screen, zero out speed
83
     PosX = (DEVICE_SCREEN_PX_WIDTH / 2) << 4;
113
     PosX = (DEVICE_SCREEN_PX_WIDTH / 2) << 4;
113
 
143
 
114
         // Press B button to cycle through metasprite animations
144
         // Press B button to cycle through metasprite animations
115
         if (KEY_PRESSED(J_B)) {
145
         if (KEY_PRESSED(J_B)) {
116
-            idx++; if (idx >= (sizeof(rockshp_metasprites) >> 1)) idx = 0;
146
+            idx++;
147
+            if (idx >= (sizeof(metasprites) / sizeof(metasprites[0]))) idx = 0;
117
         }
148
         }
118
 
149
 
119
         // Press A button to cycle metasprite through Normal/Flip-Y/Flip-XY/Flip-X and sub-pals
150
         // Press A button to cycle metasprite through Normal/Flip-Y/Flip-XY/Flip-X and sub-pals
120
         if (KEY_PRESSED(J_A)) {
151
         if (KEY_PRESSED(J_A)) {
121
-            rot++; rot &= 0xF;
152
+            rot++; rot &= 0x3;
122
         }
153
         }
123
 
154
 
124
         PosX += SpdX, PosY += SpdY;
155
         PosX += SpdX, PosY += SpdY;
132
         // In this example they are called every frame to simplify the example code
163
         // In this example they are called every frame to simplify the example code
133
 
164
 
134
         // If not hidden the move and apply rotation to the metasprite
165
         // If not hidden the move and apply rotation to the metasprite
135
-        uint8_t subpal = rot >> 2;
136
         switch (rot & 0x3) {
166
         switch (rot & 0x3) {
137
             case 1:
167
             case 1:
138
-                hiwater += move_metasprite_flipy( rockshp_metasprites[idx],
139
-                                                  TILE_NUM_START,
140
-                                                  subpal,
168
+                hiwater += move_metasprite_flipy( metasprites[idx].ms[0],
169
+                                                  metasprites[idx].off,
170
+                                                  idx,
141
                                                   hiwater,
171
                                                   hiwater,
142
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
172
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
143
                                                   DEVICE_SPRITE_PX_OFFSET_Y + (PosY >> 4));
173
                                                   DEVICE_SPRITE_PX_OFFSET_Y + (PosY >> 4));
144
                 break;
174
                 break;
145
             case 2:
175
             case 2:
146
-                hiwater += move_metasprite_flipxy(rockshp_metasprites[idx],
147
-                                                  TILE_NUM_START,
148
-                                                  subpal,
176
+                hiwater += move_metasprite_flipxy(metasprites[idx].ms[0],
177
+                                                  metasprites[idx].off,
178
+                                                  idx,
149
                                                   hiwater,
179
                                                   hiwater,
150
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
180
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
151
                                                   DEVICE_SPRITE_PX_OFFSET_Y + (PosY >> 4));
181
                                                   DEVICE_SPRITE_PX_OFFSET_Y + (PosY >> 4));
152
                 break;
182
                 break;
153
             case 3:
183
             case 3:
154
-                hiwater += move_metasprite_flipx( rockshp_metasprites[idx],
155
-                                                  TILE_NUM_START,
156
-                                                  subpal,
184
+                hiwater += move_metasprite_flipx( metasprites[idx].ms[0],
185
+                                                  metasprites[idx].off,
186
+                                                  idx,
157
                                                   hiwater,
187
                                                   hiwater,
158
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
188
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
159
                                                   DEVICE_SPRITE_PX_OFFSET_Y + (PosY >> 4));
189
                                                   DEVICE_SPRITE_PX_OFFSET_Y + (PosY >> 4));
160
                 break;
190
                 break;
161
             default:
191
             default:
162
-                hiwater += move_metasprite_ex(    rockshp_metasprites[idx],
163
-                                                  TILE_NUM_START,
164
-                                                  subpal,
192
+                hiwater += move_metasprite_ex(    metasprites[idx].ms[0],
193
+                                                  metasprites[idx].off,
194
+                                                  idx,
165
                                                   hiwater,
195
                                                   hiwater,
166
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
196
                                                   DEVICE_SPRITE_PX_OFFSET_X + (PosX >> 4),
167
                                                   DEVICE_SPRITE_PX_OFFSET_Y + (PosY >> 4));
197
                                                   DEVICE_SPRITE_PX_OFFSET_Y + (PosY >> 4));

Loading…
Cancel
Save