int Menu_Keydown(struct Game *game, ALLEGRO_EVENT *ev) { if (ev->keyboard.keycode==ALLEGRO_KEY_UP) { game->menu.selected--; if ((game->menu.menustate==MENUSTATE_VIDEO) && (game->menu.selected==1) && (game->menu.options.fullscreen)) game->menu.selected--; al_play_sample_instance(game->menu.click); } else if (ev->keyboard.keycode==ALLEGRO_KEY_DOWN) { game->menu.selected++; if ((game->menu.menustate==MENUSTATE_VIDEO) && (game->menu.selected==1) && (game->menu.options.fullscreen)) game->menu.selected++; al_play_sample_instance(game->menu.click); } if (ev->keyboard.keycode==ALLEGRO_KEY_ENTER) { char *text; al_play_sample_instance(game->menu.click); switch (game->menu.menustate) { case MENUSTATE_MAIN: switch (game->menu.selected) { case 0: UnloadGameState(game); game->gamestate = GAMESTATE_LOADING; game->loadstate = GAMESTATE_DISCLAIMER; break; case 1: ChangeMenuState(game,MENUSTATE_OPTIONS); break; case 2: UnloadGameState(game); game->gamestate = GAMESTATE_LOADING; game->loadstate = GAMESTATE_ABOUT; break; case 3: return 1; break; } break; case MENUSTATE_AUDIO: text = malloc(255*sizeof(char)); switch (game->menu.selected) { case 0: game->music--; if (game->music<0) game->music=10; sprintf(text, "%d", game->music); SetConfigOption("SuperDerpy", "music", text); al_set_mixer_gain(game->audio.music, game->music/10.0); break; case 1: game->fx--; if (game->fx<0) game->fx=10; sprintf(text, "%d", game->fx); SetConfigOption("SuperDerpy", "fx", text); al_set_mixer_gain(game->audio.fx, game->fx/10.0); break; case 2: game->voice--; if (game->voice<0) game->voice=10; sprintf(text, "%d", game->voice); SetConfigOption("SuperDerpy", "voice", text); al_set_mixer_gain(game->audio.voice, game->voice/10.0); break; case 3: ChangeMenuState(game,MENUSTATE_OPTIONS); break; } free(text); break; case MENUSTATE_OPTIONS: switch (game->menu.selected) { case 0: ChangeMenuState(game,MENUSTATE_CONTROLS); break; case 1: ChangeMenuState(game,MENUSTATE_VIDEO); break; case 2: ChangeMenuState(game,MENUSTATE_AUDIO); break; case 3: ChangeMenuState(game,MENUSTATE_MAIN); break; default: break; } break; case MENUSTATE_PAUSE: switch (game->menu.selected){ case 0: PrintConsole(game,"Game resumed."); al_destroy_bitmap(game->pause.bitmap); game->pause.bitmap = NULL; ResumeGameState(game); game->gamestate = game->loadstate; break; case 1: game->gamestate=game->loadstate; UnloadGameState(game); game->gamestate = GAMESTATE_LOADING; game->loadstate = GAMESTATE_MAP; break; case 2: ChangeMenuState(game,MENUSTATE_OPTIONS); break; case 3: return 1; default: break; } break; case MENUSTATE_CONTROLS: switch (game->menu.selected) { case 3: ChangeMenuState(game,MENUSTATE_OPTIONS); break; default: break; } break; case MENUSTATE_VIDEO: switch (game->menu.selected) { case 0: game->menu.options.fullscreen = !game->menu.options.fullscreen; if (game->menu.options.fullscreen) SetConfigOption("SuperDerpy", "fullscreen", "1"); else SetConfigOption("SuperDerpy", "fullscreen", "0"); break; case 3: if ((game->menu.options.fullscreen==game->fullscreen) && (game->menu.options.fps==game->fps) && (game->menu.options.width==game->width) && (game->menu.options.height==game->height)) { ChangeMenuState(game,MENUSTATE_OPTIONS); } else { PrintConsole(game, "video settings changed, restarting..."); game->restart = true; return 1; } break; default: break; } break; default: return 1; break; } } else if (ev->keyboard.keycode==ALLEGRO_KEY_ESCAPE) { switch (game->menu.menustate) { case MENUSTATE_OPTIONS: ChangeMenuState(game,MENUSTATE_MAIN); break; case MENUSTATE_VIDEO: ChangeMenuState(game,MENUSTATE_OPTIONS); break; case MENUSTATE_AUDIO: ChangeMenuState(game,MENUSTATE_OPTIONS); break; case MENUSTATE_CONTROLS: ChangeMenuState(game,MENUSTATE_OPTIONS); break; case MENUSTATE_PAUSE: PrintConsole(game,"Game resumed."); al_destroy_bitmap(game->pause.bitmap); game->pause.bitmap = NULL; ResumeGameState(game); game->gamestate = game->loadstate; break; default: return 1; break; } } if (game->menu.selected==-1) game->menu.selected=3; if (game->menu.selected==4) game->menu.selected=0; return 0; }
void Pause_Unload(struct Game* game) { game->gamestate=game->loadstate; UnloadGameState(game); PrintConsole(game, "Pause: Unloading GAMESTATE_MENU..."); Menu_Unload(game); }