Browse Source

add animation to splash screen

Thomas B 1 month ago
parent
commit
edc6b1ee95
7 changed files with 83 additions and 31 deletions
  1. 2
    3
      Makefile
  2. 0
    4
      src/game.c
  3. 70
    8
      src/main.c
  4. 1
    1
      src/main.h
  5. 10
    4
      src/maps.c
  6. 0
    10
      src/obj.c
  7. 0
    1
      src/obj.h

+ 2
- 3
Makefile View File

@@ -62,9 +62,8 @@ FLASHFLAGS := --mode dmg --action flash-rom
62 62
 
63 63
 $(info BUILD_TYPE is $(BUILD_TYPE))
64 64
 
65
-# TODO this is not working. why?!
66
-#DEPS=$(OBJS:%.o=%.d)
67
-#-include $(DEPS)
65
+DEPS=$(OBJS:%.o=%.d)
66
+-include $(DEPS)
68 67
 
69 68
 .PHONY: all run sgb_run flash clean compile_commands.json usage $(GIT)
70 69
 .PRECIOUS: $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h

+ 0
- 4
src/game.c View File

@@ -109,10 +109,6 @@ static void show_explosion(uint16_t power) NONBANKED {
109 109
     for (uint8_t n = 0; n < (4 * 4); n++) {
110 110
         uint8_t hiwater = SPR_NUM_START;
111 111
         spr_draw(SPR_EXPL, FLIP_NONE, 0, 0, n >> 2, &hiwater);
112
-
113
-        // can't draw objects, we used the pallettes for the explosion
114
-        //obj_draw(0, 0, &hiwater);
115
-
116 112
         status(0, power >> POWER_SHIFT, &hiwater);
117 113
         hide_sprites_range(hiwater, MAX_HARDWARE_SPRITES);
118 114
         vsync();

+ 70
- 8
src/main.c View File

@@ -47,7 +47,6 @@ uint8_t debug_menu_index = 0;
47 47
 BANKREF(main)
48 48
 
49 49
 const struct debug_entry debug_entries[DEBUG_ENTRY_COUNT] = {
50
-    { .name = "menu", .flag = DBG_MENU },
51 50
     { .name = "marker", .flag = DBG_MARKER },
52 51
     { .name = "invuln", .flag = DBG_GOD_MODE },
53 52
     { .name = "cl score", .flag = DBG_CLEAR_SCORE },
@@ -108,18 +107,78 @@ static void splash_win(void) NONBANKED {
108 107
         // initially show the top 1 scores
109 108
         int32_t low = score_lowest(0).score;
110 109
         int32_t high = score_highest(0).score;
110
+        win_splash_draw(-low, high);
111 111
 
112
-        // only show on splash if they fit
113
-        if ((low >= -99999) && (high <= 99999)) {
114
-            win_splash_draw(-low, high);
115
-        }
116
-
117
-        move_win(MINWNDPOSX, MINWNDPOSY + DEVICE_SCREEN_PX_HEIGHT - 16);
112
+        move_win(MINWNDPOSX, MINWNDPOSY + DEVICE_SCREEN_PX_HEIGHT - (8 * 4));
118 113
     }
119 114
 
120 115
     SHOW_WIN;
121 116
 }
122 117
 
118
+static void splash_anim(uint8_t *hiwater) NONBANKED {
119
+    static uint8_t frame = 0;
120
+    static uint8_t state = 0;
121
+
122
+    if (++frame >= 60) {
123
+        frame = 0;
124
+        if (++state >= 10) {
125
+            state = 0;
126
+        }
127
+    }
128
+
129
+    int16_t spd_off_x = 0;
130
+    int16_t spd_off_y = 0;
131
+    int32_t score = 0;
132
+    obj_do(&spd_off_x, &spd_off_y, &score, hiwater);
133
+
134
+    switch (state) {
135
+        case 0:
136
+        case 2:
137
+            spr_draw(SPR_SHIP, FLIP_NONE, -4, -42 - 1, 4, hiwater);
138
+            break;
139
+
140
+        case 1:
141
+            spr_draw(SPR_SHIP, FLIP_NONE, -4, -42 - 1, 4, hiwater);
142
+            if (frame == 0) {
143
+                obj_add(SPR_SHOT, SHIP_OFF, -42, SHOT_SPEED, 0);
144
+                snd_shot();
145
+            }
146
+            break;
147
+
148
+        case 3:
149
+            if (frame == 30) {
150
+                obj_add(SPR_LIGHT, 42, -42, 0, 0);
151
+            }
152
+            spr_draw(SPR_SHIP, FLIP_NONE, -1, -42 + 4, 0, hiwater);
153
+            break;
154
+
155
+        case 8:
156
+            if (frame == 30) {
157
+                obj_add(SPR_DARK, -42, -42, 0, 0);
158
+            }
159
+            spr_draw(SPR_SHIP, FLIP_NONE, -1, -42 + 4, 0, hiwater);
160
+            break;
161
+
162
+        case 4:
163
+        case 9:
164
+            spr_draw(SPR_SHIP, FLIP_NONE, -1, -42 + 4, 0, hiwater);
165
+            break;
166
+
167
+        case 5:
168
+        case 7:
169
+            spr_draw(SPR_SHIP, FLIP_X, 4, -42, 4, hiwater);
170
+            break;
171
+
172
+        case 6:
173
+            spr_draw(SPR_SHIP, FLIP_X, 4, -42, 4, hiwater);
174
+            if (frame == 0) {
175
+                obj_add(SPR_SHOT, -SHIP_OFF, -42, -SHOT_SPEED, 0);
176
+                snd_shot();
177
+            }
178
+            break;
179
+    }
180
+}
181
+
123 182
 static void splash(void) NONBANKED {
124 183
     disable_interrupts();
125 184
     DISPLAY_OFF;
@@ -186,6 +245,9 @@ static void splash(void) NONBANKED {
186 245
                     SWITCH_ROM(BANK(main));
187 246
                     debug_flags ^= debug_entries[debug_menu_index].flag;
188 247
                     splash_win();
248
+                } else if (key_pressed(J_B)) {
249
+                    debug_flags &= ~DBG_MENU;
250
+                    splash_win();
189 251
                 }
190 252
             }
191 253
         }
@@ -193,7 +255,7 @@ static void splash(void) NONBANKED {
193 255
         uint8_t hiwater = SPR_NUM_START;
194 256
 
195 257
         if (!(debug_flags & DBG_MENU)) {
196
-            obj_draw(&hiwater);
258
+            splash_anim(&hiwater);
197 259
         }
198 260
 
199 261
         hide_sprites_range(hiwater, MAX_HARDWARE_SPRITES);

+ 1
- 1
src/main.h View File

@@ -47,7 +47,7 @@ BANKREF_EXTERN(main)
47 47
 extern enum debug_flag debug_flags;
48 48
 extern uint8_t debug_menu_index;
49 49
 
50
-#define DEBUG_ENTRY_COUNT 4
50
+#define DEBUG_ENTRY_COUNT 3
51 51
 
52 52
 extern const struct debug_entry debug_entries[DEBUG_ENTRY_COUNT];
53 53
 

+ 10
- 4
src/maps.c View File

@@ -209,11 +209,17 @@ static void fill_win(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t tile, u
209 209
 
210 210
 void win_splash_draw(int32_t lowest, int32_t highest) NONBANKED {
211 211
     // reuse full black and white tiles at 0 and 1 from splash bg
212
-    fill_win(0, 0, 10, 2, 0, 0x00);
213
-    fill_win(10, 0, 10, 2, 1, 0x00);
212
+    fill_win(0, 0, 10, 4, 0, 0x00);
213
+    fill_win(10, 0, 10, 4, 1, 0x00);
214 214
 
215
-    number(lowest, 0, 0, 1);
216
-    number(highest, 0xFE, 0, 0);
215
+    // only show on splash if they fit
216
+    if ((lowest <= 99999) && (highest <= 99999)) {
217
+        number(lowest, 0, 0, 1);
218
+        number(highest, 0xFE, 0, 0);
219
+
220
+        str("top", 0, 2, 1);
221
+        str("score", 10, 2, 0);
222
+    }
217 223
 }
218 224
 
219 225
 void win_score_clear(uint8_t is_black) NONBANKED {

+ 0
- 10
src/obj.c View File

@@ -248,13 +248,3 @@ int16_t obj_do(int16_t *spd_off_x, int16_t *spd_off_y, int32_t *score, uint8_t *
248 248
 
249 249
     return damage;
250 250
 }
251
-
252
-void obj_draw(uint8_t *hiwater) NONBANKED {
253
-    for (uint8_t i = 0; i < MAX_OBJ; i++) {
254
-        if (!objs[i].active) {
255
-            continue;
256
-        }
257
-
258
-        spr_draw(objs[i].sprite, FLIP_NONE, objs[i].off_x >> POS_SCALE_OBJS, objs[i].off_y >> POS_SCALE_OBJS, 0, hiwater);
259
-    }
260
-}

+ 0
- 1
src/obj.h View File

@@ -31,6 +31,5 @@ enum OBJ_STATE {
31 31
 void obj_init(void);
32 32
 enum OBJ_STATE obj_add(enum SPRITES sprite, int16_t off_x, int16_t off_y, int16_t spd_x, int16_t spd_y);
33 33
 int16_t obj_do(int16_t *spd_off_x, int16_t *spd_off_y, int32_t *score, uint8_t *hiwater);
34
-void obj_draw(uint8_t *hiwater);
35 34
 
36 35
 #endif // __OBJ_H__

Loading…
Cancel
Save