Browse Source

add no-fuel and fast-movement debug flags

Thomas B 1 month ago
parent
commit
7b4fda4cd0
6 changed files with 138 additions and 46 deletions
  1. 3
    0
      src/config.h
  2. 79
    20
      src/game.c
  3. 8
    6
      src/main.c
  4. 1
    1
      src/main.h
  5. 41
    12
      src/maps.c
  6. 6
    7
      src/window.c

+ 3
- 0
src/config.h View File

33
     DBG_MARKER = (1 << 1),
33
     DBG_MARKER = (1 << 1),
34
     DBG_GOD_MODE = (1 << 2),
34
     DBG_GOD_MODE = (1 << 2),
35
     DBG_NO_OBJ = (1 << 3),
35
     DBG_NO_OBJ = (1 << 3),
36
+    DBG_NO_FUEL = (1 << 4),
37
+    DBG_FAST = (1 << 5),
36
 
38
 
39
+    // TODO could be something other than flags
37
     DBG_CLEAR_SCORE = (1 << 6),
40
     DBG_CLEAR_SCORE = (1 << 6),
38
     DBG_ZERO_SCORE = (1 << 7),
41
     DBG_ZERO_SCORE = (1 << 7),
39
 };
42
 };

+ 79
- 20
src/game.c View File

44
 #define SPEED_MAX_ACC 23
44
 #define SPEED_MAX_ACC 23
45
 #define SPEED_MAX_ACC_DIAG 16
45
 #define SPEED_MAX_ACC_DIAG 16
46
 #define SPEED_MAX_IDLE 16
46
 #define SPEED_MAX_IDLE 16
47
+#define SPEED_MAX_DBG 256
47
 
48
 
48
 #define POWER_MAX 0x1FF
49
 #define POWER_MAX 0x1FF
49
 #define POWER_SHIFT 1
50
 #define POWER_SHIFT 1
187
         }
188
         }
188
 
189
 
189
         if (key_down(J_A) && (power > 0)) {
190
         if (key_down(J_A) && (power > 0)) {
190
-            if (power >= POWER_DEC) {
191
-                power -= POWER_DEC;
192
-            } else {
193
-                power = 0;
191
+            if (!(conf_get()->debug_flags & DBG_NO_FUEL)) {
192
+                if (power >= POWER_DEC) {
193
+                    power -= POWER_DEC;
194
+                } else {
195
+                    power = 0;
196
+                }
194
             }
197
             }
195
 
198
 
196
             switch (rot) {
199
             switch (rot) {
197
                 case ROT_0:
200
                 case ROT_0:
198
                     spd_y -= SPEED_INC;
201
                     spd_y -= SPEED_INC;
199
-                    if (spd_y < -SPEED_MAX_ACC) spd_y = -SPEED_MAX_ACC;
202
+                    if (!(conf_get()->debug_flags & DBG_FAST)) {
203
+                        if (spd_y < -SPEED_MAX_ACC) spd_y = -SPEED_MAX_ACC;
204
+                    } else {
205
+                        if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
206
+                    }
200
                     acc |= ACC_Y;
207
                     acc |= ACC_Y;
201
                     break;
208
                     break;
202
 
209
 
203
                 case ROT_45:
210
                 case ROT_45:
204
                     spd_y -= SPEED_INC;
211
                     spd_y -= SPEED_INC;
205
-                    if (spd_y < -SPEED_MAX_ACC_DIAG) spd_y += SPEED_DEC;
212
+                    if (!(conf_get()->debug_flags & DBG_FAST)) {
213
+                        if (spd_y < -SPEED_MAX_ACC_DIAG) spd_y = -SPEED_MAX_ACC_DIAG;
214
+                    } else {
215
+                        if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
216
+                    }
206
                     acc |= ACC_Y;
217
                     acc |= ACC_Y;
207
                     spd_x += SPEED_INC;
218
                     spd_x += SPEED_INC;
208
-                    if (spd_x > SPEED_MAX_ACC_DIAG) spd_x -= SPEED_DEC;
219
+                    if (!(conf_get()->debug_flags & DBG_FAST)) {
220
+                        if (spd_x > SPEED_MAX_ACC_DIAG) spd_x = SPEED_MAX_ACC_DIAG;
221
+                    } else {
222
+                        if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
223
+                    }
209
                     acc |= ACC_X;
224
                     acc |= ACC_X;
210
                     break;
225
                     break;
211
 
226
 
212
                 case ROT_90:
227
                 case ROT_90:
213
                     spd_x += SPEED_INC;
228
                     spd_x += SPEED_INC;
214
-                    if (spd_x > SPEED_MAX_ACC) spd_x = SPEED_MAX_ACC;
229
+                    if (!(conf_get()->debug_flags & DBG_FAST)) {
230
+                        if (spd_x > SPEED_MAX_ACC) spd_x = SPEED_MAX_ACC;
231
+                    } else {
232
+                        if (spd_x > SPEED_MAX_DBG) spd_x = SPEED_MAX_DBG;
233
+                    }
215
                     acc |= ACC_X;
234
                     acc |= ACC_X;
216
                     break;
235
                     break;
217
 
236
 
218
                 case ROT_135:
237
                 case ROT_135:
219
                     spd_x += SPEED_INC;
238
                     spd_x += SPEED_INC;
220
-                    if (spd_x > SPEED_MAX_ACC_DIAG) spd_x -= SPEED_DEC;
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
+                    }
221
                     acc |= ACC_X;
244
                     acc |= ACC_X;
222
                     spd_y += SPEED_INC;
245
                     spd_y += SPEED_INC;
223
-                    if (spd_y > SPEED_MAX_ACC_DIAG) spd_y -= SPEED_DEC;
246
+                    if (!(conf_get()->debug_flags & DBG_FAST)) {
247
+                        if (spd_y > SPEED_MAX_ACC_DIAG) spd_y = SPEED_MAX_ACC_DIAG;
248
+                    } else {
249
+                        if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
250
+                    }
224
                     acc |= ACC_Y;
251
                     acc |= ACC_Y;
225
                     break;
252
                     break;
226
 
253
 
227
                 case ROT_180:
254
                 case ROT_180:
228
                     spd_y += SPEED_INC;
255
                     spd_y += SPEED_INC;
229
-                    if (spd_y > SPEED_MAX_ACC) spd_y = SPEED_MAX_ACC;
256
+                    if (!(conf_get()->debug_flags & DBG_FAST)) {
257
+                        if (spd_y > SPEED_MAX_ACC) spd_y = SPEED_MAX_ACC;
258
+                    } else {
259
+                        if (spd_y > SPEED_MAX_DBG) spd_y = SPEED_MAX_DBG;
260
+                    }
230
                     acc |= ACC_Y;
261
                     acc |= ACC_Y;
231
                     break;
262
                     break;
232
 
263
 
233
                 case ROT_225:
264
                 case ROT_225:
234
                     spd_y += SPEED_INC;
265
                     spd_y += SPEED_INC;
235
-                    if (spd_y > SPEED_MAX_ACC_DIAG) spd_y -= SPEED_DEC;
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
+                    }
236
                     acc |= ACC_Y;
271
                     acc |= ACC_Y;
237
                     spd_x -= SPEED_INC;
272
                     spd_x -= SPEED_INC;
238
-                    if (spd_x < -SPEED_MAX_ACC_DIAG) spd_x += SPEED_DEC;
273
+                    if (!(conf_get()->debug_flags & DBG_FAST)) {
274
+                        if (spd_x < -SPEED_MAX_ACC_DIAG) spd_x = -SPEED_MAX_ACC_DIAG;
275
+                    } else {
276
+                        if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
277
+                    }
239
                     acc |= ACC_X;
278
                     acc |= ACC_X;
240
                     break;
279
                     break;
241
 
280
 
242
                 case ROT_270:
281
                 case ROT_270:
243
                     spd_x -= SPEED_INC;
282
                     spd_x -= SPEED_INC;
244
-                    if (spd_x < -SPEED_MAX_ACC) spd_x = -SPEED_MAX_ACC;
283
+                    if (!(conf_get()->debug_flags & DBG_FAST)) {
284
+                        if (spd_x < -SPEED_MAX_ACC) spd_x = -SPEED_MAX_ACC;
285
+                    } else {
286
+                        if (spd_x < -SPEED_MAX_DBG) spd_x = -SPEED_MAX_DBG;
287
+                    }
245
                     acc |= ACC_X;
288
                     acc |= ACC_X;
246
                     break;
289
                     break;
247
 
290
 
248
                 case ROT_315:
291
                 case ROT_315:
249
                     spd_x -= SPEED_INC;
292
                     spd_x -= SPEED_INC;
250
-                    if (spd_x < -SPEED_MAX_ACC_DIAG) spd_x += SPEED_DEC;
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
+                    }
251
                     acc |= ACC_X;
298
                     acc |= ACC_X;
252
                     spd_y -= SPEED_INC;
299
                     spd_y -= SPEED_INC;
253
-                    if (spd_y < -SPEED_MAX_ACC_DIAG) spd_y += SPEED_DEC;
300
+                    if (!(conf_get()->debug_flags & DBG_FAST)) {
301
+                        if (spd_y < -SPEED_MAX_ACC_DIAG) spd_y = -SPEED_MAX_ACC_DIAG;
302
+                    } else {
303
+                        if (spd_y < -SPEED_MAX_DBG) spd_y = -SPEED_MAX_DBG;
304
+                    }
254
                     acc |= ACC_Y;
305
                     acc |= ACC_Y;
255
                     break;
306
                     break;
256
 
307
 
268
         // adjust speed down when not moving
319
         // adjust speed down when not moving
269
         if (!(acc & ACC_X)) {
320
         if (!(acc & ACC_X)) {
270
             if (spd_x != 0) {
321
             if (spd_x != 0) {
271
-                if (spd_x > SPEED_MAX_IDLE) spd_x -= SPEED_DEC;
272
-                else if (spd_x < -SPEED_MAX_IDLE) spd_x += SPEED_DEC;
322
+                if (!(conf_get()->debug_flags & DBG_FAST)) {
323
+                    if (spd_x > SPEED_MAX_IDLE) spd_x -= SPEED_DEC;
324
+                    else if (spd_x < -SPEED_MAX_IDLE) spd_x += SPEED_DEC;
325
+                } else {
326
+                    spd_x = 0;
327
+                }
273
             }
328
             }
274
         }
329
         }
275
         if (!(acc & ACC_Y)) {
330
         if (!(acc & ACC_Y)) {
276
             if (spd_y != 0) {
331
             if (spd_y != 0) {
277
-                if (spd_y > SPEED_MAX_IDLE) spd_y -= SPEED_DEC;
278
-                else if (spd_y < -SPEED_MAX_IDLE) spd_y += SPEED_DEC;
332
+                if (!(conf_get()->debug_flags & DBG_FAST)) {
333
+                    if (spd_y > SPEED_MAX_IDLE) spd_y -= SPEED_DEC;
334
+                    else if (spd_y < -SPEED_MAX_IDLE) spd_y += SPEED_DEC;
335
+                } else {
336
+                    spd_y = 0;
337
+                }
279
             }
338
             }
280
         }
339
         }
281
 
340
 

+ 8
- 6
src/main.c View File

54
     { .name = "marker",   .flag = DBG_MARKER,      .max = 1 }, // 0
54
     { .name = "marker",   .flag = DBG_MARKER,      .max = 1 }, // 0
55
     { .name = "invuln",   .flag = DBG_GOD_MODE,    .max = 1 }, // 1
55
     { .name = "invuln",   .flag = DBG_GOD_MODE,    .max = 1 }, // 1
56
     { .name = "no-spawn", .flag = DBG_NO_OBJ,      .max = 1 }, // 2
56
     { .name = "no-spawn", .flag = DBG_NO_OBJ,      .max = 1 }, // 2
57
-    { .name = "music",    .flag = DBG_NONE,        .max = SND_COUNT }, // 3
58
-    { .name = "sfx-test", .flag = DBG_NONE,        .max = SFX_COUNT }, // 4
59
-    { .name = "cl score", .flag = DBG_CLEAR_SCORE, .max = 1 }, // 5
60
-    { .name = "0 scores", .flag = DBG_ZERO_SCORE,  .max = 1 }, // 6
57
+    { .name = "no-fuel",  .flag = DBG_NO_FUEL,     .max = 1 }, // 3
58
+    { .name = "fastmove", .flag = DBG_FAST,        .max = 1 }, // 4
59
+    { .name = "music",    .flag = DBG_NONE,        .max = SND_COUNT }, // 5
60
+    { .name = "sfx-test", .flag = DBG_NONE,        .max = SFX_COUNT }, // 6
61
+    { .name = "cl score", .flag = DBG_CLEAR_SCORE, .max = 1 }, // 7
62
+    { .name = "0 scores", .flag = DBG_ZERO_SCORE,  .max = 1 }, // 8
61
 };
63
 };
62
 
64
 
63
 static void highscore(uint8_t is_black) NONBANKED {
65
 static void highscore(uint8_t is_black) NONBANKED {
405
                     snd_music(SND_MENU);
407
                     snd_music(SND_MENU);
406
                 }
408
                 }
407
 
409
 
408
-                if (switch_special && (debug_menu_index == 3)) {
410
+                if (switch_special && (debug_menu_index == 5)) {
409
                     snd_music_off();
411
                     snd_music_off();
410
                     if (debug_special_value > 0) {
412
                     if (debug_special_value > 0) {
411
                         snd_music(debug_special_value - 1);
413
                         snd_music(debug_special_value - 1);
412
                     }
414
                     }
413
                     snd_note_off();
415
                     snd_note_off();
414
-                } else if ((switch_special || (!sample_running())) && (debug_menu_index == 4)) {
416
+                } else if ((switch_special || (!sample_running())) && (debug_menu_index == 6)) {
415
                     if (debug_special_value > 0) {
417
                     if (debug_special_value > 0) {
416
                         sample_play(debug_special_value - 1);
418
                         sample_play(debug_special_value - 1);
417
                     }
419
                     }

+ 1
- 1
src/main.h View File

48
 extern uint8_t debug_menu_index;
48
 extern uint8_t debug_menu_index;
49
 extern uint8_t debug_special_value;
49
 extern uint8_t debug_special_value;
50
 
50
 
51
-#define DEBUG_ENTRY_COUNT 7
51
+#define DEBUG_ENTRY_COUNT 9
52
 extern const struct debug_entry debug_entries[DEBUG_ENTRY_COUNT];
52
 extern const struct debug_entry debug_entries[DEBUG_ENTRY_COUNT];
53
 
53
 
54
 #endif // __MAIN_H__
54
 #endif // __MAIN_H__

+ 41
- 12
src/maps.c View File

43
 #define camera_max_x ((bg_map_mapWidth - DEVICE_SCREEN_WIDTH) * 8)
43
 #define camera_max_x ((bg_map_mapWidth - DEVICE_SCREEN_WIDTH) * 8)
44
 #define camera_max_y ((bg_map_mapHeight - DEVICE_SCREEN_HEIGHT) * 8)
44
 #define camera_max_y ((bg_map_mapHeight - DEVICE_SCREEN_HEIGHT) * 8)
45
 
45
 
46
-#define set_bkg_sub_attr(x, y, w, h, attr, map_w) \
47
-    if (attr)                                     \
48
-        set_bkg_submap_attributes(x, y, w, h, attr, map_w)
49
-
50
-#define set_bkg_sub(x, y, w, h, map, attr, map_w) \
51
-    set_bkg_submap(x, y, w, h, map, map_w);       \
52
-    set_bkg_sub_attr(x, y, w, h, attr, map_w)
46
+#define MAP_FLIP_NONE 0x00
47
+#define MAP_FLIP_X 0x01 //(0x20 | 0x01)
48
+#define MAP_FLIP_Y 0x02 //(0x40 | 0x02)
53
 
49
 
54
 // current unscaled ship position
50
 // current unscaled ship position
55
 static uint16_t abs_x, abs_y;
51
 static uint16_t abs_x, abs_y;
90
     move_bkg(0, 0);
86
     move_bkg(0, 0);
91
 }
87
 }
92
 
88
 
89
+static inline void set_bkg_sub_attr(uint8_t x, uint8_t y,
90
+                                    uint8_t w, uint8_t h,
91
+                                    const uint8_t *attr,
92
+                                    uint8_t attr_val,
93
+                                    uint8_t map_w) {
94
+    if (attr) {
95
+        set_bkg_submap_attributes(x, y, w, h, attr, map_w);
96
+    } else {
97
+        VBK_REG = VBK_ATTRIBUTES;
98
+        fill_bkg_rect(x, y, w, h, attr_val);
99
+        VBK_REG = VBK_TILES;
100
+    }
101
+}
102
+
103
+static inline void set_bkg_sub(uint8_t x, uint8_t y,
104
+                               uint8_t w, uint8_t h,
105
+                               const uint8_t *map, const uint8_t *attr,
106
+                               uint8_t attr_val,
107
+                               uint8_t map_w) {
108
+    set_bkg_submap(x, y, w, h, map, map_w);
109
+    set_bkg_sub_attr(x, y, w, h, attr, attr_val, map_w);
110
+}
111
+
93
 void map_game(void) NONBANKED {
112
 void map_game(void) NONBANKED {
94
     START_ROM_BANK(BANK(bg_map)) {
113
     START_ROM_BANK(BANK(bg_map)) {
95
 
114
 
135
         set_bkg_sub(map_pos_x, map_pos_y,
154
         set_bkg_sub(map_pos_x, map_pos_y,
136
                     MIN(DEVICE_SCREEN_WIDTH + 1u, bg_map_mapWidth - map_pos_x),
155
                     MIN(DEVICE_SCREEN_WIDTH + 1u, bg_map_mapWidth - map_pos_x),
137
                     MIN(DEVICE_SCREEN_HEIGHT + 1u, bg_map_mapHeight - map_pos_y),
156
                     MIN(DEVICE_SCREEN_HEIGHT + 1u, bg_map_mapHeight - map_pos_y),
138
-                    bg_map_map, bg_map_MAP_ATTRIBUTES, bg_map_mapWidth);
157
+                    bg_map_map, bg_map_MAP_ATTRIBUTES, MAP_FLIP_NONE, bg_map_mapWidth);
139
 
158
 
140
 #endif // WRAP_BG
159
 #endif // WRAP_BG
141
 
160
 
143
 }
162
 }
144
 
163
 
145
 void map_move(int16_t delta_x, int16_t delta_y) NONBANKED {
164
 void map_move(int16_t delta_x, int16_t delta_y) NONBANKED {
165
+    // TODO
166
+    if ((delta_x < 0) && (camera_x == 0)) delta_x = 0;
167
+    if ((delta_x > 0) && (camera_x >= camera_max_x)) delta_x = 0;
168
+    if ((delta_y < 0) && (camera_y == 0)) delta_y = 0;
169
+    if ((delta_y > 0) && (camera_y >= camera_max_y)) delta_y = 0;
170
+
146
     abs_x += delta_x;
171
     abs_x += delta_x;
147
     abs_y += delta_y;
172
     abs_y += delta_y;
148
 
173
 
149
     camera_x = abs_x >> POS_SCALE_BG;
174
     camera_x = abs_x >> POS_SCALE_BG;
150
     camera_y = abs_y >> POS_SCALE_BG;
175
     camera_y = abs_y >> POS_SCALE_BG;
151
 
176
 
177
+    // TODO
178
+    if (camera_x > camera_max_x) camera_x = camera_max_x;
179
+    if (camera_y > camera_max_y) camera_y = camera_max_y;
180
+
152
     // update hardware scroll position
181
     // update hardware scroll position
153
     move_bkg(camera_x, camera_y);
182
     move_bkg(camera_x, camera_y);
154
 
183
 
164
             if (camera_y < old_camera_y) {
193
             if (camera_y < old_camera_y) {
165
                 set_bkg_sub(map_pos_x, map_pos_y,
194
                 set_bkg_sub(map_pos_x, map_pos_y,
166
                             MIN(DEVICE_SCREEN_WIDTH + 1, bg_map_mapWidth - map_pos_x), 1,
195
                             MIN(DEVICE_SCREEN_WIDTH + 1, bg_map_mapWidth - map_pos_x), 1,
167
-                            bg_map_map, bg_map_MAP_ATTRIBUTES, bg_map_mapWidth);
196
+                            bg_map_map, bg_map_MAP_ATTRIBUTES, MAP_FLIP_Y, bg_map_mapWidth);
168
             } else if ((bg_map_mapHeight - DEVICE_SCREEN_HEIGHT) > map_pos_y) {
197
             } else if ((bg_map_mapHeight - DEVICE_SCREEN_HEIGHT) > map_pos_y) {
169
                 set_bkg_sub(map_pos_x, map_pos_y + DEVICE_SCREEN_HEIGHT,
198
                 set_bkg_sub(map_pos_x, map_pos_y + DEVICE_SCREEN_HEIGHT,
170
                             MIN(DEVICE_SCREEN_WIDTH + 1, bg_map_mapWidth - map_pos_x), 1,
199
                             MIN(DEVICE_SCREEN_WIDTH + 1, bg_map_mapWidth - map_pos_x), 1,
171
-                            bg_map_map, bg_map_MAP_ATTRIBUTES, bg_map_mapWidth);
200
+                            bg_map_map, bg_map_MAP_ATTRIBUTES, MAP_FLIP_NONE, bg_map_mapWidth);
172
             }
201
             }
173
             old_map_pos_y = map_pos_y;
202
             old_map_pos_y = map_pos_y;
174
         }
203
         }
178
             if (camera_x < old_camera_x) {
207
             if (camera_x < old_camera_x) {
179
                 set_bkg_sub(map_pos_x, map_pos_y,
208
                 set_bkg_sub(map_pos_x, map_pos_y,
180
                             1, MIN(DEVICE_SCREEN_HEIGHT + 1, bg_map_mapHeight - map_pos_y),
209
                             1, MIN(DEVICE_SCREEN_HEIGHT + 1, bg_map_mapHeight - map_pos_y),
181
-                            bg_map_map, bg_map_MAP_ATTRIBUTES, bg_map_mapWidth);
210
+                            bg_map_map, bg_map_MAP_ATTRIBUTES, MAP_FLIP_X, bg_map_mapWidth);
182
             } else if ((bg_map_mapWidth - DEVICE_SCREEN_WIDTH) > map_pos_x) {
211
             } else if ((bg_map_mapWidth - DEVICE_SCREEN_WIDTH) > map_pos_x) {
183
                 set_bkg_sub(map_pos_x + DEVICE_SCREEN_WIDTH, map_pos_y,
212
                 set_bkg_sub(map_pos_x + DEVICE_SCREEN_WIDTH, map_pos_y,
184
                             1, MIN(DEVICE_SCREEN_HEIGHT + 1, bg_map_mapHeight - map_pos_y),
213
                             1, MIN(DEVICE_SCREEN_HEIGHT + 1, bg_map_mapHeight - map_pos_y),
185
-                            bg_map_map, bg_map_MAP_ATTRIBUTES, bg_map_mapWidth);
214
+                            bg_map_map, bg_map_MAP_ATTRIBUTES, MAP_FLIP_NONE, bg_map_mapWidth);
186
             }
215
             }
187
             old_map_pos_x = map_pos_x;
216
             old_map_pos_x = map_pos_x;
188
         }
217
         }

+ 6
- 7
src/window.c View File

279
                   title_map_WIDTH / title_map_TILE_W, title_map_HEIGHT / title_map_TILE_H,
279
                   title_map_WIDTH / title_map_TILE_W, title_map_HEIGHT / title_map_TILE_H,
280
                   title_map_map, 0, BANK(title_map), title_map_MAP_ATTRIBUTES, BANK(title_map));
280
                   title_map_map, 0, BANK(title_map), title_map_MAP_ATTRIBUTES, BANK(title_map));
281
 
281
 
282
-    // TODO paging when more options added
283
-    static_assert(DEBUG_ENTRY_COUNT <= 8, "too many debug menu entries");
284
-    uint8_t off = (10 - DEBUG_ENTRY_COUNT) / 2;
282
+    // TODO prettier pagination
283
+    uint8_t off = (10 - (DEBUG_ENTRY_COUNT - debug_menu_index)) / 2;
285
 
284
 
286
     str_center("Debug Menu", 0, 0);
285
     str_center("Debug Menu", 0, 0);
287
 
286
 
288
-    for (uint8_t i = 0; (i < DEBUG_ENTRY_COUNT) && (i < 8); i++) {
287
+    for (uint8_t i = debug_menu_index; (i < DEBUG_ENTRY_COUNT) && (i < (7 + debug_menu_index)); i++) {
289
         char name_buff[ENTRY_NAME_LEN + 2 + 1] = {0};
288
         char name_buff[ENTRY_NAME_LEN + 2 + 1] = {0};
290
         uint8_t n_len = get_debug(name_buff, i);
289
         uint8_t n_len = get_debug(name_buff, i);
291
-        str(name_buff, (LINE_WIDTH - n_len) * 2, (i * 2) + 3 + off, (debug_menu_index == i) ? 1 : 0);
290
+        str(name_buff, (LINE_WIDTH - n_len) * 2, ((i - debug_menu_index) * 2) + 3 + off, (debug_menu_index == i) ? 1 : 0);
292
     }
291
     }
293
 }
292
 }
294
 
293
 
316
                   title_map_map, 0, BANK(title_map), title_map_MAP_ATTRIBUTES, BANK(title_map));
315
                   title_map_map, 0, BANK(title_map), title_map_MAP_ATTRIBUTES, BANK(title_map));
317
 
316
 
318
     // TODO paging when more options added
317
     // TODO paging when more options added
319
-    static_assert(CONF_ENTRY_COUNT <= 8, "too many conf menu entries");
318
+    static_assert(CONF_ENTRY_COUNT <= 7, "too many conf menu entries");
320
     uint8_t off = (10 - CONF_ENTRY_COUNT) / 2;
319
     uint8_t off = (10 - CONF_ENTRY_COUNT) / 2;
321
 
320
 
322
     str_center("Conf Menu", 0, 0);
321
     str_center("Conf Menu", 0, 0);
323
 
322
 
324
-    for (uint8_t i = 0; (i < CONF_ENTRY_COUNT) && (i < 8); i++) {
323
+    for (uint8_t i = 0; (i < CONF_ENTRY_COUNT) && (i < 7); i++) {
325
         char name_buff[ENTRY_NAME_LEN + 2 + 1] = {0};
324
         char name_buff[ENTRY_NAME_LEN + 2 + 1] = {0};
326
         uint8_t n_len = get_conf(name_buff, i);
325
         uint8_t n_len = get_conf(name_buff, i);
327
         str(name_buff, (LINE_WIDTH - n_len) * 2, (i * 2) + 3 + off, (debug_menu_index == i) ? 1 : 0);
326
         str(name_buff, (LINE_WIDTH - n_len) * 2, (i * 2) + 3 + off, (debug_menu_index == i) ? 1 : 0);

Loading…
Cancel
Save