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,11 +78,14 @@ $(info BUILD_TYPE is $(BUILD_TYPE))
78 78
 DEPS=$(OBJS:%.o=%.d)
79 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 82
 .PRECIOUS: $(BUILD_DIR)/$(DATA_DIR)/%.c $(BUILD_DIR)/$(DATA_DIR)/%.h
83 83
 
84 84
 all: $(BIN)
85 85
 
86
+cloc:
87
+	@cloc . --exclude-dir=$(BUILD_DIR)
88
+
86 89
 compile_commands.json:
87 90
 	@echo "Cleaning old build"
88 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,6 +44,8 @@
44 44
 
45 45
 #define SPEED_MAX_ACC 23
46 46
 #define SPEED_MAX_ACC_DIAG 16
47
+#define SPEED_MAX_ACC_D_LO 9
48
+#define SPEED_MAX_ACC_D_HI 21
47 49
 #define SPEED_MAX_IDLE 16
48 50
 #define SPEED_MAX_DBG 256
49 51
 
@@ -59,6 +61,15 @@ enum ACCELERATION {
59 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 73
 static uint8_t pause_screen(void) NONBANKED {
63 74
     snd_music_off();
64 75
     snd_note_off();
@@ -139,8 +150,17 @@ static void show_explosion(uint16_t power) NONBANKED {
139 150
 }
140 151
 
141 152
 void game_get_mp_state(void) NONBANKED {
153
+    static struct mp_player_state state;
154
+
142 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 166
 void game_set_mp_player2(struct mp_player_state *state) NONBANKED {
@@ -151,6 +171,257 @@ void game_set_mp_shot(struct mp_shot_state *state) NONBANKED {
151 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 425
 int32_t game(enum GAME_MODE mode) NONBANKED {
155 426
     snd_music_off();
156 427
     snd_note_off();
@@ -163,13 +434,13 @@ int32_t game(enum GAME_MODE mode) NONBANKED {
163 434
     SHOW_SPRITES;
164 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 445
     obj_init();
175 446
 
@@ -196,7 +467,7 @@ int32_t game(enum GAME_MODE mode) NONBANKED {
196 467
             mp_handle();
197 468
         }
198 469
 
199
-        enum ACCELERATION acc = 0;
470
+        acc = 0;
200 471
         int32_t prev_score = score;
201 472
 
202 473
         if (key_pressed(J_LEFT)) {
@@ -208,6 +479,8 @@ int32_t game(enum GAME_MODE mode) NONBANKED {
208 479
         }
209 480
 
210 481
         if (key_down(J_A) && (power > 0)) {
482
+            handle_acceleration();
483
+
211 484
             if (!(conf_get()->debug_flags & DBG_NO_FUEL)) {
212 485
                 if (power >= POWER_DEC) {
213 486
                     power -= POWER_DEC;
@@ -215,119 +488,6 @@ int32_t game(enum GAME_MODE mode) NONBANKED {
215 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 491
         } else if (!key_down(J_A) && (power < POWER_MAX)) {
332 492
             if (power <= (POWER_MAX - POWER_INC)) {
333 493
                 power += POWER_INC;
@@ -360,39 +520,72 @@ int32_t game(enum GAME_MODE mode) NONBANKED {
360 520
 
361 521
         if (key_pressed(J_B)) {
362 522
             int8_t ret = -1;
523
+
363 524
             switch (rot) {
364 525
                 case ROT_0:
365 526
                     ret = obj_add(SPR_SHOT, 0, -SHIP_OFF, spd_x, spd_y - SHOT_SPEED);
366 527
                     break;
367 528
 
529
+                case ROT_22_5:
530
+                    // TODO
531
+                    break;
532
+
368 533
                 case ROT_45:
369 534
                     ret = obj_add(SPR_SHOT, SHIP_OFF / 2 + 3, -SHIP_OFF / 2 - 2, spd_x + SHOT_SPEED, spd_y - SHOT_SPEED);
370 535
                     break;
371 536
 
537
+                case ROT_67_5:
538
+                    // TODO
539
+                    break;
540
+
372 541
                 case ROT_90:
373 542
                     ret = obj_add(SPR_SHOT, SHIP_OFF, 0, spd_x + SHOT_SPEED, spd_y);
374 543
                     break;
375 544
 
545
+                case ROT_112_5:
546
+                    // TODO
547
+                    break;
548
+
376 549
                 case ROT_135:
377 550
                     ret = obj_add(SPR_SHOT, SHIP_OFF / 2 + 3, SHIP_OFF / 2 + 2, spd_x + SHOT_SPEED, spd_y + SHOT_SPEED);
378 551
                     break;
379 552
 
553
+                case ROT_157_5:
554
+                    // TODO
555
+                    break;
556
+
380 557
                 case ROT_180:
381 558
                     ret = obj_add(SPR_SHOT, 0, SHIP_OFF, spd_x, spd_y + SHOT_SPEED);
382 559
                     break;
383 560
 
561
+                case ROT_202_5:
562
+                    // TODO
563
+                    break;
564
+
384 565
                 case ROT_225:
385 566
                     ret = obj_add(SPR_SHOT, -SHIP_OFF / 2 - 3, SHIP_OFF / 2 + 2, spd_x - SHOT_SPEED, spd_y + SHOT_SPEED);
386 567
                     break;
387 568
 
569
+                case ROT_247_5:
570
+                    // TODO
571
+                    break;
572
+
388 573
                 case ROT_270:
389 574
                     ret = obj_add(SPR_SHOT, -SHIP_OFF, 0, spd_x - SHOT_SPEED, spd_y);
390 575
                     break;
391 576
 
577
+                case ROT_292_5:
578
+                    // TODO
579
+                    break;
580
+
392 581
                 case ROT_315:
393 582
                     ret = obj_add(SPR_SHOT, -SHIP_OFF / 2 - 3, -SHIP_OFF / 2 - 2, spd_x - SHOT_SPEED, spd_y - SHOT_SPEED);
394 583
                     break;
395 584
 
585
+                case ROT_337_5:
586
+                    // TODO
587
+                    break;
588
+
396 589
                 default:
397 590
                     break;
398 591
             }

+ 1
- 2
src/main.c View File

@@ -577,7 +577,6 @@ void main(void) NONBANKED {
577 577
     // "cheat" and enable double-speed CPU mode on GBC
578 578
     if (_cpu == CGB_TYPE) {
579 579
         cpu_fast();
580
-        LCDC_REG &= ~LCDCF_BGON;
581 580
     }
582 581
 
583 582
     conf_init();
@@ -595,7 +594,7 @@ void main(void) NONBANKED {
595 594
     while (1) {
596 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 598
             uint16_t name = ask_name(score);
600 599
             struct scores s = { .name = name, .score = score };
601 600
             score_add(s);

+ 39
- 0
src/sprites.c View File

@@ -128,34 +128,73 @@ void spr_ship(enum SPRITE_ROT rot, uint8_t moving, uint8_t *hiwater) NONBANKED {
128 128
             spr_draw(SPR_SHIP, FLIP_NONE, -1, 4, moving ? 1 : 0, hiwater);
129 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 135
         case ROT_45:
132 136
             spr_draw(SPR_SHIP, FLIP_NONE, 1, -1, moving ? 3 : 2, hiwater);
133 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 145
         case ROT_90:
136 146
             spr_draw(SPR_SHIP, FLIP_NONE, -4, -1, moving ? 5 : 4, hiwater);
137 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 153
         case ROT_135:
140 154
             spr_draw(SPR_SHIP, FLIP_Y, 1, 1, moving ? 3 : 2, hiwater);
141 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 164
         case ROT_180:
144 165
             spr_draw(SPR_SHIP, FLIP_Y, 0, -4, moving ? 1 : 0, hiwater);
145 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 172
         case ROT_225:
148 173
             spr_draw(SPR_SHIP, FLIP_XY, -1, 1, moving ? 3 : 2, hiwater);
149 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 182
         case ROT_270:
152 183
             spr_draw(SPR_SHIP, FLIP_X, 4, 0, moving ? 5 : 4, hiwater);
153 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 190
         case ROT_315:
156 191
             spr_draw(SPR_SHIP, FLIP_X, -1, -1, moving ? 3 : 2, hiwater);
157 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 198
         default:
160 199
             break;
161 200
     }

+ 8
- 0
src/sprites.h View File

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

Loading…
Cancel
Save