Browse Source

add 16 way movement

Thomas B 1 month ago
parent
commit
6e13d7a8d9
7 changed files with 367 additions and 125 deletions
  1. 4
    1
      Makefile
  2. BIN
      data/rockshp_spr24.png
  3. BIN
      data/rockshp_spr24.xcf
  4. 315
    122
      src/game.c
  5. 1
    2
      src/main.c
  6. 39
    0
      src/sprites.c
  7. 8
    0
      src/sprites.h

+ 4
- 1
Makefile View File

78
 DEPS=$(OBJS:%.o=%.d)
78
 DEPS=$(OBJS:%.o=%.d)
79
 -include $(DEPS)
79
 -include $(DEPS)
80
 
80
 
81
-.PHONY: all run sgb_run bgb_run gbe_run flash clean compile_commands.json usage $(GIT)
81
+.PHONY: all run cloc sgb_run bgb_run gbe_run flash clean compile_commands.json usage $(GIT)
82
 .PRECIOUS: $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h
82
 .PRECIOUS: $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h
83
 
83
 
84
 all: $(BIN)
84
 all: $(BIN)
85
 
85
 
86
+cloc:
87
+	@cloc . --exclude-dir=$(BUILD_DIR)
88
+
86
 compile_commands.json:
89
 compile_commands.json:
87
 	@echo "Cleaning old build"
90
 	@echo "Cleaning old build"
88
 	@make clean
91
 	@make clean

BIN
data/rockshp_spr24.png View File


BIN
data/rockshp_spr24.xcf View File


+ 315
- 122
src/game.c View File

44
 
44
 
45
 #define SPEED_MAX_ACC 23
45
 #define SPEED_MAX_ACC 23
46
 #define SPEED_MAX_ACC_DIAG 16
46
 #define SPEED_MAX_ACC_DIAG 16
47
+#define SPEED_MAX_ACC_D_LO 9
48
+#define SPEED_MAX_ACC_D_HI 21
47
 #define SPEED_MAX_IDLE 16
49
 #define SPEED_MAX_IDLE 16
48
 #define SPEED_MAX_DBG 256
50
 #define SPEED_MAX_DBG 256
49
 
51
 
59
     ACC_R = 4,
61
     ACC_R = 4,
60
 };
62
 };
61
 
63
 
64
+static int16_t spd_x = 0;
65
+static int16_t spd_y = 0;
66
+static enum SPRITE_ROT rot = 0;
67
+static enum ACCELERATION prev_acc = 0xFF; // so we draw the ship on the first frame
68
+static enum ACCELERATION acc = 0;
69
+static uint16_t health = HEALTH_MAX;
70
+static uint16_t power = POWER_MAX;
71
+static int32_t score = 0;
72
+
62
 static uint8_t pause_screen(void) NONBANKED {
73
 static uint8_t pause_screen(void) NONBANKED {
63
     snd_music_off();
74
     snd_music_off();
64
     snd_note_off();
75
     snd_note_off();
139
 }
150
 }
140
 
151
 
141
 void game_get_mp_state(void) NONBANKED {
152
 void game_get_mp_state(void) NONBANKED {
153
+    static struct mp_player_state state;
154
+
142
     // TODO pass own pos to mp
155
     // TODO pass own pos to mp
143
-    //mp_new_state();
156
+
157
+    // TODO scale?
158
+    state.spd_x = spd_x;
159
+    state.spd_y = spd_y;
160
+
161
+    state.rot = rot;
162
+
163
+    mp_new_state(&state);
144
 }
164
 }
145
 
165
 
146
 void game_set_mp_player2(struct mp_player_state *state) NONBANKED {
166
 void game_set_mp_player2(struct mp_player_state *state) NONBANKED {
151
     // TODO add shot
171
     // TODO add shot
152
 }
172
 }
153
 
173
 
174
+void handle_acceleration(void) BANKED {
175
+    switch (rot) {
176
+        case ROT_0:
177
+            spd_y -= SPEED_INC;
178
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
179
+                if (spd_y < -SPEED_MAX_ACC) spd_y = -SPEED_MAX_ACC;
180
+            } else {
181
+                if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
182
+            }
183
+            acc |= ACC_Y;
184
+            break;
185
+
186
+        case ROT_22_5:
187
+            spd_y -= SPEED_INC;
188
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
189
+                if (spd_y < -SPEED_MAX_ACC_D_HI) spd_y = -SPEED_MAX_ACC_D_HI;
190
+            } else {
191
+                if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
192
+            }
193
+            acc |= ACC_Y;
194
+            spd_x += SPEED_INC;
195
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
196
+                if (spd_x > SPEED_MAX_ACC_D_LO) spd_x = SPEED_MAX_ACC_D_LO;
197
+            } else {
198
+                if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
199
+            }
200
+            acc |= ACC_X;
201
+            break;
202
+
203
+        case ROT_45:
204
+            spd_y -= SPEED_INC;
205
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
206
+                if (spd_y < -SPEED_MAX_ACC_DIAG) spd_y = -SPEED_MAX_ACC_DIAG;
207
+            } else {
208
+                if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
209
+            }
210
+            acc |= ACC_Y;
211
+            spd_x += SPEED_INC;
212
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
213
+                if (spd_x > SPEED_MAX_ACC_DIAG) spd_x = SPEED_MAX_ACC_DIAG;
214
+            } else {
215
+                if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
216
+            }
217
+            acc |= ACC_X;
218
+            break;
219
+
220
+        case ROT_67_5:
221
+            spd_y -= SPEED_INC;
222
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
223
+                if (spd_y < -SPEED_MAX_ACC_D_LO) spd_y = -SPEED_MAX_ACC_D_LO;
224
+            } else {
225
+                if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
226
+            }
227
+            acc |= ACC_Y;
228
+            spd_x += SPEED_INC;
229
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
230
+                if (spd_x > SPEED_MAX_ACC_D_HI) spd_x = SPEED_MAX_ACC_D_HI;
231
+            } else {
232
+                if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
233
+            }
234
+            acc |= ACC_X;
235
+            break;
236
+
237
+        case ROT_90:
238
+            spd_x += SPEED_INC;
239
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
240
+                if (spd_x > SPEED_MAX_ACC) spd_x = SPEED_MAX_ACC;
241
+            } else {
242
+                if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
243
+            }
244
+            acc |= ACC_X;
245
+            break;
246
+
247
+        case ROT_112_5:
248
+            spd_x += SPEED_INC;
249
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
250
+                if (spd_x > SPEED_MAX_ACC_D_HI) spd_x = SPEED_MAX_ACC_D_HI;
251
+            } else {
252
+                if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
253
+            }
254
+            acc |= ACC_X;
255
+            spd_y += SPEED_INC;
256
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
257
+                if (spd_y > SPEED_MAX_ACC_D_LO) spd_y = SPEED_MAX_ACC_D_LO;
258
+            } else {
259
+                if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
260
+            }
261
+            acc |= ACC_Y;
262
+            break;
263
+
264
+        case ROT_135:
265
+            spd_x += SPEED_INC;
266
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
267
+                if (spd_x > SPEED_MAX_ACC_DIAG) spd_x = SPEED_MAX_ACC_DIAG;
268
+            } else {
269
+                if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
270
+            }
271
+            acc |= ACC_X;
272
+            spd_y += SPEED_INC;
273
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
274
+                if (spd_y > SPEED_MAX_ACC_DIAG) spd_y = SPEED_MAX_ACC_DIAG;
275
+            } else {
276
+                if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
277
+            }
278
+            acc |= ACC_Y;
279
+            break;
280
+
281
+        case ROT_157_5:
282
+            spd_x += SPEED_INC;
283
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
284
+                if (spd_x > SPEED_MAX_ACC_D_LO) spd_x = SPEED_MAX_ACC_D_LO;
285
+            } else {
286
+                if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
287
+            }
288
+            acc |= ACC_X;
289
+            spd_y += SPEED_INC;
290
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
291
+                if (spd_y > SPEED_MAX_ACC_D_HI) spd_y = SPEED_MAX_ACC_D_HI;
292
+            } else {
293
+                if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
294
+            }
295
+            acc |= ACC_Y;
296
+            break;
297
+
298
+        case ROT_180:
299
+            spd_y += SPEED_INC;
300
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
301
+                if (spd_y > SPEED_MAX_ACC) spd_y = SPEED_MAX_ACC;
302
+            } else {
303
+                if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
304
+            }
305
+            acc |= ACC_Y;
306
+            break;
307
+
308
+        case ROT_202_5:
309
+            spd_y += SPEED_INC;
310
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
311
+                if (spd_y > SPEED_MAX_ACC_D_HI) spd_y = SPEED_MAX_ACC_D_HI;
312
+            } else {
313
+                if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
314
+            }
315
+            acc |= ACC_Y;
316
+            spd_x -= SPEED_INC;
317
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
318
+                if (spd_x < -SPEED_MAX_ACC_D_LO) spd_x = -SPEED_MAX_ACC_D_LO;
319
+            } else {
320
+                if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
321
+            }
322
+            acc |= ACC_X;
323
+            break;
324
+
325
+        case ROT_225:
326
+            spd_y += SPEED_INC;
327
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
328
+                if (spd_y > SPEED_MAX_ACC_DIAG) spd_y = SPEED_MAX_ACC_DIAG;
329
+            } else {
330
+                if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
331
+            }
332
+            acc |= ACC_Y;
333
+            spd_x -= SPEED_INC;
334
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
335
+                if (spd_x < -SPEED_MAX_ACC_DIAG) spd_x = -SPEED_MAX_ACC_DIAG;
336
+            } else {
337
+                if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
338
+            }
339
+            acc |= ACC_X;
340
+            break;
341
+
342
+        case ROT_247_5:
343
+            spd_y += SPEED_INC;
344
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
345
+                if (spd_y > SPEED_MAX_ACC_D_LO) spd_y = SPEED_MAX_ACC_D_LO;
346
+            } else {
347
+                if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
348
+            }
349
+            acc |= ACC_Y;
350
+            spd_x -= SPEED_INC;
351
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
352
+                if (spd_x < -SPEED_MAX_ACC_D_HI) spd_x = -SPEED_MAX_ACC_D_HI;
353
+            } else {
354
+                if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
355
+            }
356
+            acc |= ACC_X;
357
+            break;
358
+
359
+        case ROT_270:
360
+            spd_x -= SPEED_INC;
361
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
362
+                if (spd_x < -SPEED_MAX_ACC) spd_x = -SPEED_MAX_ACC;
363
+            } else {
364
+                if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
365
+            }
366
+            acc |= ACC_X;
367
+            break;
368
+
369
+        case ROT_292_5:
370
+            spd_x -= SPEED_INC;
371
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
372
+                if (spd_x < -SPEED_MAX_ACC_D_HI) spd_x = -SPEED_MAX_ACC_D_HI;
373
+            } else {
374
+                if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
375
+            }
376
+            acc |= ACC_X;
377
+            spd_y -= SPEED_INC;
378
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
379
+                if (spd_y < -SPEED_MAX_ACC_D_LO) spd_y = -SPEED_MAX_ACC_D_LO;
380
+            } else {
381
+                if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
382
+            }
383
+            acc |= ACC_Y;
384
+            break;
385
+
386
+        case ROT_315:
387
+            spd_x -= SPEED_INC;
388
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
389
+                if (spd_x < -SPEED_MAX_ACC_DIAG) spd_x = -SPEED_MAX_ACC_DIAG;
390
+            } else {
391
+                if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
392
+            }
393
+            acc |= ACC_X;
394
+            spd_y -= SPEED_INC;
395
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
396
+                if (spd_y < -SPEED_MAX_ACC_DIAG) spd_y = -SPEED_MAX_ACC_DIAG;
397
+            } else {
398
+                if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
399
+            }
400
+            acc |= ACC_Y;
401
+            break;
402
+
403
+        case ROT_337_5:
404
+            spd_x -= SPEED_INC;
405
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
406
+                if (spd_x < -SPEED_MAX_ACC_D_LO) spd_x = -SPEED_MAX_ACC_D_LO;
407
+            } else {
408
+                if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
409
+            }
410
+            acc |= ACC_X;
411
+            spd_y -= SPEED_INC;
412
+            if (!(conf_get()->debug_flags & DBG_FAST)) {
413
+                if (spd_y < -SPEED_MAX_ACC_D_HI) spd_y = -SPEED_MAX_ACC_D_HI;
414
+            } else {
415
+                if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
416
+            }
417
+            acc |= ACC_Y;
418
+            break;
419
+
420
+        default:
421
+            break;
422
+    }
423
+}
424
+
154
 int32_t game(enum GAME_MODE mode) NONBANKED {
425
 int32_t game(enum GAME_MODE mode) NONBANKED {
155
     snd_music_off();
426
     snd_music_off();
156
     snd_note_off();
427
     snd_note_off();
163
     SHOW_SPRITES;
434
     SHOW_SPRITES;
164
     SPRITES_8x8;
435
     SPRITES_8x8;
165
 
436
 
166
-    int16_t spd_x = 0;
167
-    int16_t spd_y = 0;
168
-    enum SPRITE_ROT rot = 0;
169
-    enum ACCELERATION prev_acc = 0xFF; // so we draw the ship on the first frame
170
-    uint16_t health = HEALTH_MAX;
171
-    uint16_t power = POWER_MAX;
172
-    int32_t score = 0;
437
+    spd_x = 0;
438
+    spd_y = 0;
439
+    rot = 0;
440
+    prev_acc = 0xFF; // so we draw the ship on the first frame
441
+    health = HEALTH_MAX;
442
+    power = POWER_MAX;
443
+    score = 0;
173
 
444
 
174
     obj_init();
445
     obj_init();
175
 
446
 
196
             mp_handle();
467
             mp_handle();
197
         }
468
         }
198
 
469
 
199
-        enum ACCELERATION acc = 0;
470
+        acc = 0;
200
         int32_t prev_score = score;
471
         int32_t prev_score = score;
201
 
472
 
202
         if (key_pressed(J_LEFT)) {
473
         if (key_pressed(J_LEFT)) {
208
         }
479
         }
209
 
480
 
210
         if (key_down(J_A) && (power > 0)) {
481
         if (key_down(J_A) && (power > 0)) {
482
+            handle_acceleration();
483
+
211
             if (!(conf_get()->debug_flags & DBG_NO_FUEL)) {
484
             if (!(conf_get()->debug_flags & DBG_NO_FUEL)) {
212
                 if (power >= POWER_DEC) {
485
                 if (power >= POWER_DEC) {
213
                     power -= POWER_DEC;
486
                     power -= POWER_DEC;
215
                     power = 0;
488
                     power = 0;
216
                 }
489
                 }
217
             }
490
             }
218
-
219
-            switch (rot) {
220
-                case ROT_0:
221
-                    spd_y -= SPEED_INC;
222
-                    if (!(conf_get()->debug_flags & DBG_FAST)) {
223
-                        if (spd_y < -SPEED_MAX_ACC) spd_y = -SPEED_MAX_ACC;
224
-                    } else {
225
-                        if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
226
-                    }
227
-                    acc |= ACC_Y;
228
-                    break;
229
-
230
-                case ROT_45:
231
-                    spd_y -= SPEED_INC;
232
-                    if (!(conf_get()->debug_flags & DBG_FAST)) {
233
-                        if (spd_y < -SPEED_MAX_ACC_DIAG) spd_y = -SPEED_MAX_ACC_DIAG;
234
-                    } else {
235
-                        if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
236
-                    }
237
-                    acc |= ACC_Y;
238
-                    spd_x += SPEED_INC;
239
-                    if (!(conf_get()->debug_flags & DBG_FAST)) {
240
-                        if (spd_x > SPEED_MAX_ACC_DIAG) spd_x = SPEED_MAX_ACC_DIAG;
241
-                    } else {
242
-                        if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
243
-                    }
244
-                    acc |= ACC_X;
245
-                    break;
246
-
247
-                case ROT_90:
248
-                    spd_x += SPEED_INC;
249
-                    if (!(conf_get()->debug_flags & DBG_FAST)) {
250
-                        if (spd_x > SPEED_MAX_ACC) spd_x = SPEED_MAX_ACC;
251
-                    } else {
252
-                        if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
253
-                    }
254
-                    acc |= ACC_X;
255
-                    break;
256
-
257
-                case ROT_135:
258
-                    spd_x += SPEED_INC;
259
-                    if (!(conf_get()->debug_flags & DBG_FAST)) {
260
-                        if (spd_x > SPEED_MAX_ACC_DIAG) spd_x = SPEED_MAX_ACC_DIAG;
261
-                    } else {
262
-                        if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
263
-                    }
264
-                    acc |= ACC_X;
265
-                    spd_y += SPEED_INC;
266
-                    if (!(conf_get()->debug_flags & DBG_FAST)) {
267
-                        if (spd_y > SPEED_MAX_ACC_DIAG) spd_y = SPEED_MAX_ACC_DIAG;
268
-                    } else {
269
-                        if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
270
-                    }
271
-                    acc |= ACC_Y;
272
-                    break;
273
-
274
-                case ROT_180:
275
-                    spd_y += SPEED_INC;
276
-                    if (!(conf_get()->debug_flags & DBG_FAST)) {
277
-                        if (spd_y > SPEED_MAX_ACC) spd_y = SPEED_MAX_ACC;
278
-                    } else {
279
-                        if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
280
-                    }
281
-                    acc |= ACC_Y;
282
-                    break;
283
-
284
-                case ROT_225:
285
-                    spd_y += SPEED_INC;
286
-                    if (!(conf_get()->debug_flags & DBG_FAST)) {
287
-                        if (spd_y > SPEED_MAX_ACC_DIAG) spd_y = SPEED_MAX_ACC_DIAG;
288
-                    } else {
289
-                        if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
290
-                    }
291
-                    acc |= ACC_Y;
292
-                    spd_x -= SPEED_INC;
293
-                    if (!(conf_get()->debug_flags & DBG_FAST)) {
294
-                        if (spd_x < -SPEED_MAX_ACC_DIAG) spd_x = -SPEED_MAX_ACC_DIAG;
295
-                    } else {
296
-                        if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
297
-                    }
298
-                    acc |= ACC_X;
299
-                    break;
300
-
301
-                case ROT_270:
302
-                    spd_x -= SPEED_INC;
303
-                    if (!(conf_get()->debug_flags & DBG_FAST)) {
304
-                        if (spd_x < -SPEED_MAX_ACC) spd_x = -SPEED_MAX_ACC;
305
-                    } else {
306
-                        if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
307
-                    }
308
-                    acc |= ACC_X;
309
-                    break;
310
-
311
-                case ROT_315:
312
-                    spd_x -= SPEED_INC;
313
-                    if (!(conf_get()->debug_flags & DBG_FAST)) {
314
-                        if (spd_x < -SPEED_MAX_ACC_DIAG) spd_x = -SPEED_MAX_ACC_DIAG;
315
-                    } else {
316
-                        if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
317
-                    }
318
-                    acc |= ACC_X;
319
-                    spd_y -= SPEED_INC;
320
-                    if (!(conf_get()->debug_flags & DBG_FAST)) {
321
-                        if (spd_y < -SPEED_MAX_ACC_DIAG) spd_y = -SPEED_MAX_ACC_DIAG;
322
-                    } else {
323
-                        if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
324
-                    }
325
-                    acc |= ACC_Y;
326
-                    break;
327
-
328
-                default:
329
-                    break;
330
-            }
331
         } else if (!key_down(J_A) && (power < POWER_MAX)) {
491
         } else if (!key_down(J_A) && (power < POWER_MAX)) {
332
             if (power <= (POWER_MAX - POWER_INC)) {
492
             if (power <= (POWER_MAX - POWER_INC)) {
333
                 power += POWER_INC;
493
                 power += POWER_INC;
360
 
520
 
361
         if (key_pressed(J_B)) {
521
         if (key_pressed(J_B)) {
362
             int8_t ret = -1;
522
             int8_t ret = -1;
523
+
363
             switch (rot) {
524
             switch (rot) {
364
                 case ROT_0:
525
                 case ROT_0:
365
                     ret = obj_add(SPR_SHOT, 0, -SHIP_OFF, spd_x, spd_y - SHOT_SPEED);
526
                     ret = obj_add(SPR_SHOT, 0, -SHIP_OFF, spd_x, spd_y - SHOT_SPEED);
366
                     break;
527
                     break;
367
 
528
 
529
+                case ROT_22_5:
530
+                    // TODO
531
+                    break;
532
+
368
                 case ROT_45:
533
                 case ROT_45:
369
                     ret = obj_add(SPR_SHOT, SHIP_OFF / 2 + 3, -SHIP_OFF / 2 - 2, spd_x + SHOT_SPEED, spd_y - SHOT_SPEED);
534
                     ret = obj_add(SPR_SHOT, SHIP_OFF / 2 + 3, -SHIP_OFF / 2 - 2, spd_x + SHOT_SPEED, spd_y - SHOT_SPEED);
370
                     break;
535
                     break;
371
 
536
 
537
+                case ROT_67_5:
538
+                    // TODO
539
+                    break;
540
+
372
                 case ROT_90:
541
                 case ROT_90:
373
                     ret = obj_add(SPR_SHOT, SHIP_OFF, 0, spd_x + SHOT_SPEED, spd_y);
542
                     ret = obj_add(SPR_SHOT, SHIP_OFF, 0, spd_x + SHOT_SPEED, spd_y);
374
                     break;
543
                     break;
375
 
544
 
545
+                case ROT_112_5:
546
+                    // TODO
547
+                    break;
548
+
376
                 case ROT_135:
549
                 case ROT_135:
377
                     ret = obj_add(SPR_SHOT, SHIP_OFF / 2 + 3, SHIP_OFF / 2 + 2, spd_x + SHOT_SPEED, spd_y + SHOT_SPEED);
550
                     ret = obj_add(SPR_SHOT, SHIP_OFF / 2 + 3, SHIP_OFF / 2 + 2, spd_x + SHOT_SPEED, spd_y + SHOT_SPEED);
378
                     break;
551
                     break;
379
 
552
 
553
+                case ROT_157_5:
554
+                    // TODO
555
+                    break;
556
+
380
                 case ROT_180:
557
                 case ROT_180:
381
                     ret = obj_add(SPR_SHOT, 0, SHIP_OFF, spd_x, spd_y + SHOT_SPEED);
558
                     ret = obj_add(SPR_SHOT, 0, SHIP_OFF, spd_x, spd_y + SHOT_SPEED);
382
                     break;
559
                     break;
383
 
560
 
561
+                case ROT_202_5:
562
+                    // TODO
563
+                    break;
564
+
384
                 case ROT_225:
565
                 case ROT_225:
385
                     ret = obj_add(SPR_SHOT, -SHIP_OFF / 2 - 3, SHIP_OFF / 2 + 2, spd_x - SHOT_SPEED, spd_y + SHOT_SPEED);
566
                     ret = obj_add(SPR_SHOT, -SHIP_OFF / 2 - 3, SHIP_OFF / 2 + 2, spd_x - SHOT_SPEED, spd_y + SHOT_SPEED);
386
                     break;
567
                     break;
387
 
568
 
569
+                case ROT_247_5:
570
+                    // TODO
571
+                    break;
572
+
388
                 case ROT_270:
573
                 case ROT_270:
389
                     ret = obj_add(SPR_SHOT, -SHIP_OFF, 0, spd_x - SHOT_SPEED, spd_y);
574
                     ret = obj_add(SPR_SHOT, -SHIP_OFF, 0, spd_x - SHOT_SPEED, spd_y);
390
                     break;
575
                     break;
391
 
576
 
577
+                case ROT_292_5:
578
+                    // TODO
579
+                    break;
580
+
392
                 case ROT_315:
581
                 case ROT_315:
393
                     ret = obj_add(SPR_SHOT, -SHIP_OFF / 2 - 3, -SHIP_OFF / 2 - 2, spd_x - SHOT_SPEED, spd_y - SHOT_SPEED);
582
                     ret = obj_add(SPR_SHOT, -SHIP_OFF / 2 - 3, -SHIP_OFF / 2 - 2, spd_x - SHOT_SPEED, spd_y - SHOT_SPEED);
394
                     break;
583
                     break;
395
 
584
 
585
+                case ROT_337_5:
586
+                    // TODO
587
+                    break;
588
+
396
                 default:
589
                 default:
397
                     break;
590
                     break;
398
             }
591
             }

+ 1
- 2
src/main.c View File

577
     // "cheat" and enable double-speed CPU mode on GBC
577
     // "cheat" and enable double-speed CPU mode on GBC
578
     if (_cpu == CGB_TYPE) {
578
     if (_cpu == CGB_TYPE) {
579
         cpu_fast();
579
         cpu_fast();
580
-        LCDC_REG &= ~LCDCF_BGON;
581
     }
580
     }
582
 
581
 
583
     conf_init();
582
     conf_init();
595
     while (1) {
594
     while (1) {
596
         int32_t score = game(GM_SINGLE);
595
         int32_t score = game(GM_SINGLE);
597
 
596
 
598
-        if ((!(conf_get()->debug_flags & DBG_GOD_MODE)) && (score != 0) && score_ranking(score)) {
597
+        if ((!(conf_get()->debug_flags)) && (score != 0) && score_ranking(score)) {
599
             uint16_t name = ask_name(score);
598
             uint16_t name = ask_name(score);
600
             struct scores s = { .name = name, .score = score };
599
             struct scores s = { .name = name, .score = score };
601
             score_add(s);
600
             score_add(s);

+ 39
- 0
src/sprites.c View File

128
             spr_draw(SPR_SHIP, FLIP_NONE, -1, 4, moving ? 1 : 0, hiwater);
128
             spr_draw(SPR_SHIP, FLIP_NONE, -1, 4, moving ? 1 : 0, hiwater);
129
             break;
129
             break;
130
 
130
 
131
+        case ROT_22_5:
132
+            spr_draw(SPR_SHIP, FLIP_NONE, -4, 2, moving ? 7 : 6, hiwater);
133
+            break;
134
+
131
         case ROT_45:
135
         case ROT_45:
132
             spr_draw(SPR_SHIP, FLIP_NONE, 1, -1, moving ? 3 : 2, hiwater);
136
             spr_draw(SPR_SHIP, FLIP_NONE, 1, -1, moving ? 3 : 2, hiwater);
133
             break;
137
             break;
134
 
138
 
139
+        case ROT_67_5:
140
+            spr_draw(SPR_SHIP, FLIP_NONE, -2, -4, moving ? 9 : 8, hiwater);
141
+            break;
142
+
143
+        // ------------------------------
144
+
135
         case ROT_90:
145
         case ROT_90:
136
             spr_draw(SPR_SHIP, FLIP_NONE, -4, -1, moving ? 5 : 4, hiwater);
146
             spr_draw(SPR_SHIP, FLIP_NONE, -4, -1, moving ? 5 : 4, hiwater);
137
             break;
147
             break;
138
 
148
 
149
+        case ROT_112_5:
150
+            spr_draw(SPR_SHIP, FLIP_Y, -2, 4, moving ? 9 : 8, hiwater);
151
+            break;
152
+
139
         case ROT_135:
153
         case ROT_135:
140
             spr_draw(SPR_SHIP, FLIP_Y, 1, 1, moving ? 3 : 2, hiwater);
154
             spr_draw(SPR_SHIP, FLIP_Y, 1, 1, moving ? 3 : 2, hiwater);
141
             break;
155
             break;
142
 
156
 
157
+        case ROT_157_5:
158
+            spr_draw(SPR_SHIP, FLIP_Y, -2, -2, moving ? 7 : 6, hiwater);
159
+            break;
160
+
161
+        // ------------------------------
162
+        // ------------------------------
163
+
143
         case ROT_180:
164
         case ROT_180:
144
             spr_draw(SPR_SHIP, FLIP_Y, 0, -4, moving ? 1 : 0, hiwater);
165
             spr_draw(SPR_SHIP, FLIP_Y, 0, -4, moving ? 1 : 0, hiwater);
145
             break;
166
             break;
146
 
167
 
168
+        case ROT_202_5:
169
+            spr_draw(SPR_SHIP, FLIP_XY, 3, -2, moving ? 7 : 6, hiwater);
170
+            break;
171
+
147
         case ROT_225:
172
         case ROT_225:
148
             spr_draw(SPR_SHIP, FLIP_XY, -1, 1, moving ? 3 : 2, hiwater);
173
             spr_draw(SPR_SHIP, FLIP_XY, -1, 1, moving ? 3 : 2, hiwater);
149
             break;
174
             break;
150
 
175
 
176
+        case ROT_247_5:
177
+            spr_draw(SPR_SHIP, FLIP_XY, 2, 4, moving ? 9 : 8, hiwater);
178
+            break;
179
+
180
+        // ------------------------------
181
+
151
         case ROT_270:
182
         case ROT_270:
152
             spr_draw(SPR_SHIP, FLIP_X, 4, 0, moving ? 5 : 4, hiwater);
183
             spr_draw(SPR_SHIP, FLIP_X, 4, 0, moving ? 5 : 4, hiwater);
153
             break;
184
             break;
154
 
185
 
186
+        case ROT_292_5:
187
+            spr_draw(SPR_SHIP, FLIP_X, 2, -4, moving ? 9 : 8, hiwater);
188
+            break;
189
+
155
         case ROT_315:
190
         case ROT_315:
156
             spr_draw(SPR_SHIP, FLIP_X, -1, -1, moving ? 3 : 2, hiwater);
191
             spr_draw(SPR_SHIP, FLIP_X, -1, -1, moving ? 3 : 2, hiwater);
157
             break;
192
             break;
158
 
193
 
194
+        case ROT_337_5:
195
+            spr_draw(SPR_SHIP, FLIP_X, 2, 2, moving ? 7 : 6, hiwater);
196
+            break;
197
+
159
         default:
198
         default:
160
             break;
199
             break;
161
     }
200
     }

+ 8
- 0
src/sprites.h View File

51
 
51
 
52
 enum SPRITE_ROT {
52
 enum SPRITE_ROT {
53
     ROT_0 = 0,
53
     ROT_0 = 0,
54
+    ROT_22_5,
54
     ROT_45,
55
     ROT_45,
56
+    ROT_67_5,
55
     ROT_90,
57
     ROT_90,
58
+    ROT_112_5,
56
     ROT_135,
59
     ROT_135,
60
+    ROT_157_5,
57
     ROT_180,
61
     ROT_180,
62
+    ROT_202_5,
58
     ROT_225,
63
     ROT_225,
64
+    ROT_247_5,
59
     ROT_270,
65
     ROT_270,
66
+    ROT_292_5,
60
     ROT_315,
67
     ROT_315,
68
+    ROT_337_5,
61
 
69
 
62
     ROT_INVALID
70
     ROT_INVALID
63
 };
71
 };

Loading…
Cancel
Save