#include #include #include "menu.h" #define LAST_LEVEL 5059 #define Y_POS 88 char menu(int *level_id, char *enable_up_key, char *game_loop) { char reload = 0; char selected = 0; char menu_loop = 1; char exit_buffer = 1; while (menu_loop) { clearevents(); if (keydown_any(KEY_EXIT, KEY_MENU, 0)) { if (!exit_buffer) menu_loop = 0; } else exit_buffer = 0; //return to game selected += keydown(KEY_DOWN) - keydown(KEY_UP); if (selected == 4) selected = 0; else if (selected == -1) selected = 3; dclear(0); dtext(32, Y_POS, "CONTINUE", C_WHITE, C_BLACK); dtext(32, Y_POS + 12, "SELECT LEVEL", C_WHITE, C_BLACK); dtext(32, Y_POS + 24, "UP KEY TO JUMP:", C_WHITE, C_BLACK); dtext(32, Y_POS + 36, "EXIT GAME", C_WHITE, C_BLACK); dtext(16, Y_POS + (selected * 12), ">", C_WHITE, C_BLACK); //action switch if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) { switch (selected) { case 0: menu_loop = 0; break; case 1: reload = menu_level_selection(level_id); menu_loop = 0; break; case 2: *enable_up_key = !*enable_up_key; break; case 3: menu_loop = 0; *game_loop = 0; break; } } //up key state display if (*enable_up_key) dtext(152, Y_POS + 24, "ON", C_WHITE, C_BLACK); else dtext(152, Y_POS + 24, "OFF", C_WHITE, C_BLACK); dupdate(); while (keydown_any(KEY_UP, KEY_DOWN, KEY_SHIFT, KEY_EXE, 0)) clearevents(); } return reload; } char menu_level_selection(int *level_id) { char confirm_buffer = 1; char menu_loop = 1; int initial_lid = *level_id; while (menu_loop) { dclear(0); clearevents(); *level_id += keydown(KEY_RIGHT) - keydown(KEY_LEFT); if (*level_id > LAST_LEVEL) *level_id = 5050; else if (*level_id < 5050) *level_id = LAST_LEVEL; dprint(32, Y_POS + 20, C_WHITE, C_BLACK, "> %02d <", *level_id - 5049); if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) { if (!confirm_buffer) { menu_loop = 0; } } else confirm_buffer = 0; if (keydown_any(KEY_EXIT, KEY_MENU, 0)) { *level_id = initial_lid; menu_loop = 0; } dupdate(); while (keydown_any(KEY_RIGHT, KEY_LEFT, KEY_SHIFT, KEY_EXE, KEY_EXIT, KEY_MENU, 0)) { clearevents(); } } dclear(0); return initial_lid != *level_id; }