#include #include #include "menu.h" #include "shared_define.h" #define Y_POS 88 char menu(int *level_id, char *enable_up_key, char *game_loop, unsigned int rem_step) { 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); dprint(0, 0, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "%u.%02u", rem_step/60, rem_step%60); dtext_opt(32, Y_POS, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "CONTINUE"); dtext_opt(32, Y_POS + 12, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "SELECT LEVEL"); dtext_opt(32, Y_POS + 24, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "UP KEY TO JUMP:"); dtext_opt(32, Y_POS + 36, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "EXIT GAME"); dtext_opt(16, Y_POS + (selected * 12), C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, ">"); //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_opt(152, Y_POS + 24, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "ON"); else dtext_opt(152, Y_POS + 24, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "OFF"); 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 || keydown(KEY_0)) *level_id = 5050; else if (*level_id < 5050) *level_id = LAST_LEVEL; dprint_opt(32, Y_POS + 20, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "> %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; }