void Direct_Launch() { int i; if (!CFG.direct_launch) return; // enable console in case there is some input // required when loading game, depends on options, like: // confirm ocarina, alt_dol=disk (asks for dol) // but this can be moved to those points and removed from here // so that console is shown only if needed... if (CFG.intro) { Gui_Console_Enable(); } // confirm_direct_start //CFG.confirm_start = 0; //sleep(1); Con_Clear(); printf(gt("Configurable Loader %s"), CFG_VERSION); printf("\n\n"); //sleep(1); for (i=0; i<gameCnt; i++) { if (strncmp(CFG.launch_discid, (char*)gameList[i].id, 6) == 0) { gameSelected = i; Menu_Boot(0); goto out; } } Gui_Console_Enable(); printf(gt("Auto-start game: %.6s not found!"), CFG.launch_discid); printf("\n"); printf(gt("Press any button...")); printf("\n"); Wpad_WaitButtons(); out: CFG.direct_launch = 0; }
void __Menu_Controls(void) { u32 buttons = Wpad_WaitButtons(); /* UP/DOWN buttons */ if (buttons & WPAD_BUTTON_UP) __Menu_MoveList(-1); if (buttons & WPAD_BUTTON_DOWN) __Menu_MoveList(1); /* LEFT/RIGHT buttons */ if (buttons & WPAD_BUTTON_LEFT) __Menu_MoveList(-ENTRIES_PER_PAGE); if (buttons & WPAD_BUTTON_RIGHT) __Menu_MoveList(ENTRIES_PER_PAGE); /* HOME button */ if (buttons & WPAD_BUTTON_HOME) Restart(); /* PLUS (+) button */ if (buttons & WPAD_BUTTON_PLUS) Menu_Install(); /* MINUS (-) button */ if (buttons & WPAD_BUTTON_MINUS) Menu_Remove(); /* ONE (1) button */ if (buttons & WPAD_BUTTON_1) Menu_Device(); /* A button */ if (buttons & WPAD_BUTTON_A) Menu_Boot(); }
int Menu_Boot_Options(struct discHdr *header) { int ret_val = 0; if (CFG.disable_options) return 0; struct Game_CFG_2 *game_cfg2 = NULL; struct Game_CFG *game_cfg = NULL; int opt_saved, opt_ios_reload; int redraw_cover = 0; int rows, cols, win_size; CON_GetMetrics(&cols, &rows); if ((win_size = rows-9) < 3) win_size = 3; Con_Clear(); FgColor(CFG.color_header); printf_x(gt("Selected Game")); printf(":"); __console_flush(0); printf(" (%.6s)\n", header->id); DefaultColor(); printf(" %s %s\n\n", CFG.cursor_space, __Menu_PrintTitle(get_title(header))); __console_flush(0); // load_dolmenu((char*)header->id); game_cfg2 = CFG_get_game(header->id); if (!game_cfg2) { printf(gt("ERROR game opt")); printf("\n"); sleep(5); return 0; } game_cfg = &game_cfg2->curr; struct Menu menu; const int NUM_OPT = 16; char active[NUM_OPT]; menu_init(&menu, NUM_OPT); for (;;) { /* // fat on 249? if (wbfs_part_fs && !disc) { if (!is_ios_idx_mload(game_cfg->ios_idx)) { game_cfg->ios_idx = CFG_IOS_222_MLOAD; } } */ menu_init_active(&menu, active, sizeof(active)); opt_saved = game_cfg2->is_saved; // if not mload disable block ios reload opt opt_ios_reload = game_cfg->block_ios_reload; // if not ocarina and not wiird, deactivate hooks if (!game_cfg->ocarina && !CFG.wiird) { active[11] = 0; } //if admin lock is off or they're not in admin // mode then they can't hide/unhide games if (!CFG.admin_lock || CFG.admin_mode_locked) { active[14] = 0; } //These things shouldn't be changed if using a disc...maybe active[0] = 0; active[8] = 0; active[9] = 0; active[14] = 0; Con_Clear(); FgColor(CFG.color_header); printf_x(gt("Selected Game")); printf(":"); printf(" (%.6s)\n", header->id); DefaultColor(); printf(" %s %s\n\n", CFG.cursor_space, __Menu_PrintTitle(get_title(header))); FgColor(CFG.color_header); printf_x(gt("Game Options: %s"), CFG_is_changed(header->id) ? gt("[ CHANGED ]") : opt_saved ? gt("[ SAVED ]") : ""); printf("\n"); DefaultColor(); char c1 = '<', c2 = '>'; //if (opt_saved) { c1 = '['; c2 = ']'; } const char *str_vpatch[3]; str_vpatch[0] = gt("Off"); str_vpatch[1] = gt("On"); str_vpatch[2] = gt("All"); // start menu draw menu_begin(&menu); menu_jump_active(&menu); #define PRINT_OPT_S(N,V) \ printf("%s%c %s %c\n", con_align(N,18), c1, V, c2) #define PRINT_OPT_A(N,V) \ printf("%s%c%s%c\n", con_align(N,18), c1, V, c2) #define PRINT_OPT_B(N,V) \ PRINT_OPT_S(N,(V?gt("On"):gt("Off"))) menu_window_begin(&menu, win_size, NUM_OPT); if (menu_window_mark(&menu)) PRINT_OPT_S(gt("Favorite:"), is_favorite(header->id) ? gt("Yes") : gt("No")); if (menu_window_mark(&menu)) PRINT_OPT_S(gt("Language:"), languages[game_cfg->language]); if (menu_window_mark(&menu)) PRINT_OPT_S(gt("Video:"), videos[game_cfg->video]); if (menu_window_mark(&menu)) PRINT_OPT_S(gt("Video Patch:"), str_vpatch[game_cfg->video_patch]); if (menu_window_mark(&menu)) PRINT_OPT_B("VIDTV:", game_cfg->vidtv); if (menu_window_mark(&menu)) PRINT_OPT_B(gt("Country Fix:"), game_cfg->country_patch); if (menu_window_mark(&menu)) PRINT_OPT_B(gt("Anti 002 Fix:"), game_cfg->fix_002); if (menu_window_mark(&menu)) PRINT_OPT_B(gt("Block IOS Reload:"), opt_ios_reload); if (menu_window_mark(&menu)) PRINT_OPT_B(gt("Ocarina (cheats):"), game_cfg->ocarina); if (menu_window_mark(&menu)) PRINT_OPT_S(gt("Hook Type:"), hook_name[game_cfg->hooktype]); if (menu_window_mark(&menu)) PRINT_OPT_A(gt("Cheat Codes:"), gt("Manage")); if (menu_window_mark(&menu)) printf("%s%s\n", con_align(gt("Cover Image:"), 18), imageNotFound ? gt("< DOWNLOAD >") : gt("[ FOUND ]")); if (menu_window_mark(&menu)) PRINT_OPT_S(gt("Hide Game:"), is_hide_game(header->id) ? gt("Yes") : gt("No")); if (menu_window_mark(&menu)) PRINT_OPT_B(gt("Write Playlog:"), game_cfg->write_playlog); DefaultColor(); menu_window_end(&menu, cols); printf_h(gt("Press %s to start game"), (button_names[CFG.button_confirm.num])); printf("\n"); bool need_save = !opt_saved || CFG_is_changed(header->id); if (need_save) printf_h(gt("Press %s to save options"), (button_names[CFG.button_save.num])); else printf_h(gt("Press %s to discard options"), (button_names[CFG.button_save.num])); printf("\n"); printf_h(gt("Press %s for global options"), (button_names[CFG.button_other.num])); DefaultColor(); __console_flush(0); if (redraw_cover) { Gui_DrawCover(header->id); redraw_cover = 0; } u32 buttons = Wpad_WaitButtonsRpt(); int change = 0; menu_move_active(&menu, buttons); if (buttons & WPAD_BUTTON_LEFT) change = -1; if (buttons & WPAD_BUTTON_RIGHT) change = +1; if (change) { switch (menu.current) { case 0: printf("\n\n"); printf_x(gt("Saving Settings... ")); __console_flush(0); if (set_favorite(header->id, change > 0)) { printf(gt("OK")); } else { printf(gt("ERROR")); sleep(1); } __console_flush(0); Gui_DrawCover(header->id); break; case 1: CHANGE(game_cfg->language, CFG_LANG_MAX); break; case 2: CHANGE(game_cfg->video, CFG_VIDEO_MAX); break; case 3: CHANGE(game_cfg->video_patch, 2); break; case 4: CHANGE(game_cfg->vidtv, 1); break; case 5: CHANGE(game_cfg->country_patch, 1); break; case 6: CHANGE(game_cfg->fix_002, 1); break; case 7: CHANGE(game_cfg->block_ios_reload, 1); break; case 8: CHANGE(game_cfg->ocarina, 1); break; case 9: CHANGE(game_cfg->hooktype, NUM_HOOK-1); break; case 10: Menu_Cheats(header); break; case 11: printf("\n\n"); Download_Cover((char*)header->id, change > 0, true); Cache_Invalidate(); Gui_DrawCover(header->id); Menu_PrintWait(); break; case 12: // hide game printf("\n\n"); printf_x(gt("Saving Settings... ")); __console_flush(0); if (set_hide_game(header->id, change > 0)) { printf(gt("OK")); } else { printf(gt("ERROR")); sleep(1); } __console_flush(0); Gui_DrawCover(header->id); break; case 13: CHANGE(game_cfg->write_playlog, 1); break; } } if (buttons & CFG.button_confirm.mask) { CFG.confirm_start = 0; Menu_Boot(); break; } if (buttons & CFG.button_save.mask) { bool ret; printf("\n\n"); if (need_save) { ret = CFG_save_game_opt(header->id); if (ret) { printf_x(gt("Options saved for this game.")); } else printf(gt("Error saving options!")); } else { ret = CFG_discard_game_opt(header->id); if (ret) printf_x(gt("Options discarded for this game.")); else printf(gt("Error discarding options!")); } sleep(1); } // HOME button if (buttons & CFG.button_exit.mask) { Handle_Home(0); } if (buttons & CFG.button_other.mask) { ret_val = 1; break; } if (buttons & CFG.button_cancel.mask) break; } CFG_release_game(game_cfg2); return ret_val; }
int Menu_Views() { struct discHdr *header = NULL; int redraw_cover = 0; struct Menu menu; if (gameCnt) { header = &gameList[gameSelected]; } const int NUM_OPT = 8; char active[NUM_OPT]; menu_init(&menu, NUM_OPT); for (;;) { menu.line_count = 0; menu_init_active(&menu, active, sizeof(active)); active[3] = 0; // disable_remove active[4] = 0; // disable_install if (CFG.disable_options) { active[1] = 0; active[2] = 0; } Con_Clear(); FgColor(CFG.color_header); printf_x(gt("Main Menu")); printf(":\n\n"); DefaultColor(); MENU_MARK(); printf("<%s>\n", gt("Start Game")); MENU_MARK(); printf("<%s>\n", gt("Game Options")); MENU_MARK(); printf("<%s>\n", gt("Global Options")); MENU_MARK(); printf("<%s>\n", gt("Sort Games")); MENU_MARK(); printf("<%s>\n", gt("Filter Games")); MENU_MARK(); printf("<%s>\n", gt("Boot Disc")); DefaultColor(); printf("\n"); printf_h(gt("Press %s button to select."), (button_names[CFG.button_confirm.num])); printf("\n"); DefaultColor(); __console_flush(0); if (redraw_cover) { if (header) Gui_DrawCover(header->id); redraw_cover = 0; } u32 buttons = Wpad_WaitButtonsRpt(); menu_move_active(&menu, buttons); int change = -2; if (buttons & WPAD_BUTTON_LEFT) change = -1; if (buttons & WPAD_BUTTON_RIGHT) change = +1; if (buttons & CFG.button_confirm.mask) change = 0; // #define CHANGE(V,M) {V+=change;if(V>M)V=M;if(V<0)V=0;} if (change > -2) { switch (menu.current) { case 0: CFG.confirm_start = 0; Menu_Boot(0); break; case 1: Menu_Game_Options(); break; case 2: Menu_Global_Options(); break; case 3: Menu_Sort(); break; case 4: Menu_Filter(); break; case 5: Menu_Boot(1); break; } } // HOME button if (buttons & CFG.button_exit.mask) { Handle_Home(0); } if (buttons & CFG.button_cancel.mask) break; } return 0; }
void DoAction(int action) { if (action & CFG_BTN_REMAP) return; switch(action) { case CFG_BTN_NOTHING: break; case CFG_BTN_OPTIONS: if (!CFG.disable_options) Menu_Options(); break; case CFG_BTN_GUI: if (go_gui) { action_string[0] = 0; action_alpha=0; } if (CFG.gui) go_gui = !go_gui; break; case CFG_BTN_REBOOT: Con_Clear(); Restart(); break; case CFG_BTN_EXIT: Con_Clear(); printf("\n"); printf_("Exiting..."); __console_flush(0); Sys_Exit(); break; case CFG_BTN_SCREENSHOT: __console_flush(0); Make_ScreenShot(); CFG.home = CFG_HOME_EXIT; break; case CFG_BTN_MAIN_MENU: Menu_Views(); break; case CFG_BTN_GLOBAL_OPS: if (!CFG.disable_options) Menu_Global_Options(); break; case CFG_BTN_PROFILE: if (CFG.current_profile == CFG.num_profiles-1) CFG.current_profile = 0; else CFG.current_profile++; Switch_Favorites(enable_favorite); sprintf(action_string, gt("Profile: %s"), CFG.profile_names[CFG.current_profile]); break; case CFG_BTN_FAVORITES: { extern void reset_sort_default(); reset_sort_default(); Switch_Favorites(!enable_favorite); } break; case CFG_BTN_BOOT_GAME: Menu_Boot(0); break; case CFG_BTN_BOOT_DISC: Menu_Boot(1); break; case CFG_BTN_THEME: CFG_switch_theme(cur_theme + 1); if (gameCnt) Gui_DrawCover(gameList[gameSelected].id);//redraw_cover = 1; Cache_Invalidate(); sprintf(action_string, gt("Theme: %s"), theme_list[cur_theme]); if (go_gui) action_alpha = 0xFF; break; case CFG_BTN_UNLOCK: if (CFG.admin_lock) Menu_Unlock(); break; case CFG_BTN_HBC: Con_Clear(); printf("\n"); printf_("HBC..."); __console_flush(0); Sys_HBC(); break; case CFG_BTN_SORT: if (sort_desc) { sort_desc = 0; if (sort_index == sortCnt - 1) sort_index = 0; else sort_index = sort_index + 1; sortList(sortTypes[sort_index].sortAsc); } else { sort_desc = 1; sortList(sortTypes[sort_index].sortDsc); } if (gameCnt) Gui_DrawCover(gameList[gameSelected].id);//redraw_cover = 1; sprintf(action_string, gt("Sort: %s-%s"), sortTypes[sort_index].name, (sort_desc) ? "DESC":"ASC"); break; case CFG_BTN_FILTER: Menu_Filter(); break; default: // Priiloader magic words, and channels if ((action & 0xFF) < 'a') { // upper case final letter implies channel Con_Clear(); Sys_Channel(action); } else { // lower case final letter implies magic word Con_Clear(); *(vu32*)0x8132FFFB = action; Restart(); } break; } }