static int conf_action(int tok, int val) { int sound = config_get_d(CONFIG_SOUND_VOLUME); int music = config_get_d(CONFIG_MUSIC_VOLUME); int mouse = MOUSE_RANGE_MAP(config_get_d(CONFIG_MOUSE_SENSE)); int r = 1; audio_play(AUD_MENU, 1.0f); switch (tok) { case GUI_BACK: goto_state(&st_title); break; case CONF_VIDEO: goto_state(&st_conf_video); break; case CONF_PLAYER: goto_name(&st_conf, &st_conf, 1); break; case CONF_BALL: goto_state(&st_ball); break; case CONF_MOUSE_SENSE: config_set_d(CONFIG_MOUSE_SENSE, MOUSE_RANGE_UNMAP(val)); gui_toggle(mouse_id[val]); gui_toggle(mouse_id[mouse]); break; case CONF_SOUND_VOLUME: config_set_d(CONFIG_SOUND_VOLUME, val); audio_volume(val, music); audio_play(AUD_BUMPM, 1.f); gui_toggle(sound_id[val]); gui_toggle(sound_id[sound]); break; case CONF_MUSIC_VOLUME: config_set_d(CONFIG_MUSIC_VOLUME, val); audio_volume(sound, val); audio_play(AUD_BUMPM, 1.f); gui_toggle(music_id[val]); gui_toggle(music_id[music]); break; } return r; }
static int goal_action(int i) { audio_play(AUD_MENU, 1.0f); switch (i) { case GOAL_BACK: /* Fall through. */ case GOAL_OVER: progress_stop(); return goto_state(&st_over); case GOAL_SAVE: resume = 1; progress_stop(); return goto_save(&st_goal, &st_goal); case GUI_NAME: new_name = 1; resume = 1; progress_stop(); return goto_name(&st_goal, &st_goal, 0); case GOAL_DONE: progress_stop(); progress_exit(); return goto_state(&st_done); case GOAL_LAST: progress_stop(); return goto_state(&st_start); case GUI_MOST_COINS: case GUI_BEST_TIMES: case GUI_FAST_UNLOCK: gui_score_set(i); resume = 1; return goto_state(&st_goal); case GOAL_NEXT: if (progress_next()) return goto_state(&st_level); break; case GOAL_SAME: if (progress_same()) return goto_state(&st_level); break; } return 1; }
static int goal_action(int tok, int val) { audio_play(AUD_MENU, 1.0f); switch (tok) { case GUI_BACK: case GOAL_OVER: progress_stop(); return goto_state(&st_exit); case GUI_SAVE: progress_stop(); return goto_save(&st_goal, &st_goal); case GUI_NAME: progress_stop(); return goto_name(&st_goal, &st_goal, 0); case GOAL_DONE: progress_stop(); progress_exit(); return goto_state(&st_exit); case GOAL_LAST: progress_stop(); return goto_state(&st_exit); case GUI_SCORE: gui_score_set(val); return goto_state(&st_goal); case GOAL_NEXT: if (progress_next()) return goto_state(&st_level); break; case GOAL_SAME: if (progress_same()) return goto_state(&st_level); break; } return 1; }
static int done_action(int tok, int val) { audio_play(AUD_MENU, 1.0f); switch (tok) { case GUI_BACK: return goto_state(&st_exit); case GUI_NAME: return goto_name(&st_done, &st_done, 0); case GUI_SCORE: gui_score_set(val); return goto_state(&st_done); } return 1; }
static int title_action(int tok, int val) { static const char keyphrase[] = "xyzzy"; static char queue[sizeof (keyphrase)] = ""; size_t queue_len = strlen(queue); audio_play(AUD_MENU, 1.0f); switch (tok) { case GUI_BACK: return 0; break; case TITLE_PLAY: if (strlen(config_get_s(CONFIG_PLAYER)) == 0) return goto_name(&st_set, &st_title, 0); else return goto_state(&st_set); break; case TITLE_HELP: return goto_state(&st_help); break; case TITLE_DEMO: return goto_state(&st_demo); break; case TITLE_CONF: return goto_state(&st_conf); break; case GUI_CHAR: /* Let the queue fill up. */ if (queue_len < sizeof (queue) - 1) { queue[queue_len] = (char) val; queue[queue_len + 1] = '\0'; } /* Advance the queue before adding the new element. */ else { int k; for (k = 1; k < queue_len; k++) queue[k - 1] = queue[k]; queue[queue_len - 1] = (char) val; } if (strcmp(queue, keyphrase) == 0) { config_set_cheat(); gui_set_label(play_id, sgettext("menu^Cheat")); gui_pulse(play_id, 1.2f); } else if (config_cheat()) { config_clr_cheat(); gui_set_label(play_id, sgettext("menu^Play")); gui_pulse(play_id, 1.2f); } break; } return 1; }