void DrawSelectableButton(int x1, int y1, int x2, int y2, char *message, int mode, u32 color) { int middleY, borderSize; color = (color == -1) ? BUTTON_COLOUR_INNER : color; //never used borderSize = (mode==B_SELECTED) ? 6 : 4; middleY = (((y2-y1)/2)-12)+y1; //determine length of the text ourselves if x2 == -1 x1 = (x2 == -1) ? x1+2:x1; x2 = (x2 == -1) ? GetTextSizeInPixels(message)+x1+(borderSize*2)+6 : x2; if(middleY+24 > y2) { middleY = y1+3; } GXColor selectColor = (GXColor) {96,107,164,GUI_MSGBOX_ALPHA}; //bluish GXColor noColor = (GXColor) {0,0,0,0}; //black GXColor borderColor = (GXColor) {200,200,200,GUI_MSGBOX_ALPHA}; //silver //Draw Text and backfill (if selected) if(mode==B_SELECTED) { DrawSimpleBox( x1, y1, x2-x1, y2-y1, 0, selectColor, borderColor); WriteFontStyled(x1 + borderSize+3, middleY, message, 1.0f, false, defaultColor); } else { DrawSimpleBox( x1, y1, x2-x1, y2-y1, 0, noColor, borderColor); WriteFontStyled(x1 + borderSize+3, middleY, message, 1.0f, false, defaultColor); } }
void drawParameterForArgsSelector(Parameter *param, int x, int y, int selected) { char *name = ¶m->arg.name[0]; char *selValue = ¶m->values[param->currentValueIdx].name[0]; int chkWidth = 32, nameWidth = 300, gapWidth = 13, paramWidth = 120; // [32px 10px 250px 10px 5px 80px 5px] // If not selected and not enabled, use greyed out font for everything GXColor fontColor = (param->enable || selected) ? defaultColor : deSelectedColor; // If selected draw that it's selected if(selected) DrawSimpleBox( x+chkWidth+gapWidth-5, y, nameWidth, 35, 0, deSelectedColor, defaultColor); DrawImage(param->enable ? TEX_CHECKED:TEX_UNCHECKED, x, y, 32, 32, 0, 0.0f, 1.0f, 0.0f, 1.0f, 0); // Draw the parameter Name WriteFontStyled(x+chkWidth+gapWidth+5, y+4, name, GetTextScaleToFitInWidth(name, nameWidth-10), false, fontColor); // If enabled, draw arrows indicating where in the param list we are if(selected && param->enable && param->num_values > 1) { if(param->currentValueIdx != 0) { WriteFontStyled(x+(chkWidth+nameWidth+(gapWidth*4)), y+5, "<-", .8f, false, defaultColor); } if(param->currentValueIdx != param->num_values-1) { WriteFontStyled(x+(chkWidth+nameWidth+paramWidth+(gapWidth*6)), y+5, "->", .8f, false, defaultColor); } } // Draw the current value WriteFontStyled(x+chkWidth+nameWidth+(gapWidth*6), y+2, selValue, GetTextScaleToFitInWidth(selValue, paramWidth), false, fontColor); }
void DrawFileBrowserButton(int x1, int y1, int x2, int y2, char *message, file_handle *file, int mode, u32 color) { char file_name[1024]; int borderSize = 4; color = (color == -1) ? BUTTON_COLOUR_INNER : color; //never used memset(file_name, 0, 1024); strcpy(&file_name[0], message); // Hide extension when rendering ISO/GCM files if(file->fileAttrib == IS_FILE) { if(endsWith(file_name,".gcm") || endsWith(file_name,".GCM") || endsWith(file_name,".iso")|| endsWith(file_name,".ISO") || endsWith(file_name,".dol")|| endsWith(file_name,".DOL")) { if(strlen(file_name) > 4) { file_name[strlen(file_name)-4] = '\0'; } } } float scale = GetTextScaleToFitInWidth(file_name, (x2-x1-96-35)-(borderSize*2)); GXColor selectColor = (GXColor) {46,57,104,GUI_MSGBOX_ALPHA}; //bluish GXColor noColor = (GXColor) {0,0,0,0}; //black GXColor borderColor = (GXColor) {200,200,200,GUI_MSGBOX_ALPHA}; //silver //Draw Text and backfill (if selected) if(mode==B_SELECTED) { DrawSimpleBox( x1, y1, x2-x1, y2-y1, 0, selectColor, borderColor); } else { DrawSimpleBox( x1, y1, x2-x1, y2-y1, 0, noColor, borderColor); } // Draw banner if there is one if(file->meta && file->meta->banner) { DrawTexObj(&file->meta->bannerTexObj, x1+7, y1+4, 96, 32, 0, 0.0f, 1.0f, 0.0f, 1.0f, 0); } if(file->meta && file->meta->regionTexId != -1 && file->meta->regionTexId != 0) { DrawImage(file->meta->regionTexId, x2 - 37, y1+borderSize+2, 30,20, 0, 0.0f, 1.0f, 0.0f, 1.0f, 0); } WriteFontStyled(x1 + borderSize+5+96, y1+borderSize, file_name, scale, false, defaultColor); // Print specific stats if(file->fileAttrib==IS_FILE) { if(curDevice == WODE) { ISOInfo_t* isoInfo = (ISOInfo_t*)&file->other; sprintf(txtbuffer,"Partition: %i, ISO: %i", isoInfo->iso_partition,isoInfo->iso_number); } else if(curDevice == MEMCARD) { sprintf(txtbuffer,"%.2fKB (%i blocks)", (float)file->size/1024, file->size/8192); } else if(curDevice == QOOB_FLASH) { sprintf(txtbuffer,"%.2fKB (%i blocks)", (float)file->size/1024, file->size/0x10000); } else { sprintf(txtbuffer,"%.2f %s",file->size > (1024*1024) ? (float)file->size/(1024*1024):(float)file->size/1024,file->size > (1024*1024) ? "MB":"KB"); } WriteFontStyled(x2 - ((borderSize+3) + (GetTextSizeInPixels(txtbuffer)*0.45)), y1+borderSize+24, txtbuffer, 0.45f, false, defaultColor); } }
void _DrawBackdrop() { char ver[32]; memset(ver,0,16); DrawImage(TEX_BACKDROP, 0, 0, 640, 480, 0, 0.0f, 1.0f, 0.0f, 1.0f, 0); WriteFontStyled(40,27, "Swiss v0.4", 1.5f, false, defaultColor); sprintf(ver, "commit: %s rev: %s", GITREVISION, GITVERSION); WriteFontStyled(210,60, ver, 0.55f, false, defaultColor); }
void _DrawBackdrop() { char ver[16]; memset(ver,0,16); DrawImage(TEX_BACKDROP, 0, 0, 640, 480, 0, 0.0f, 1.0f, 0.0f, 1.0f, 0); WriteFontStyled(40,30, "Swiss v0.3", 1.5f, false, defaultColor); sprintf(ver, "Rev: %s", SVNREVISION); WriteFontStyled(250,60, ver, 0.55f, false, defaultColor); }
void DrawArgsSelector(char *fileName) { Parameters* params = getParameters(); int param_selection = 0; int params_per_page = 6; while ((PAD_ButtonsHeld(0) & PAD_BUTTON_A)){ VIDEO_WaitVSync (); } while(1) { doBackdrop(); DrawEmptyBox(20,60, vmode->fbWidth-20, 460, COLOR_BLACK); sprintf(txtbuffer, "%s Parameters:", fileName); WriteFontStyled(25, 62, txtbuffer, GetTextScaleToFitInWidth(txtbuffer, vmode->fbWidth-50), false, defaultColor); int j = 0; int current_view_start = MIN(MAX(0,param_selection-params_per_page/2),MAX(0,params->num_params-params_per_page)); int current_view_end = MIN(params->num_params, MAX(param_selection+params_per_page/2,params_per_page)); int scrollBarHeight = 90+(params_per_page*20); int scrollBarTabHeight = (int)((float)scrollBarHeight/(float)params->num_params); DrawVertScrollBar(vmode->fbWidth-45, 120, 25, scrollBarHeight, (float)((float)param_selection/(float)(params->num_params-1)),scrollBarTabHeight); for(j = 0; current_view_start<current_view_end; ++current_view_start,++j) { drawParameterForArgsSelector(¶ms->parameters[current_view_start], 25, 120+j*35, current_view_start==param_selection); } // Write about the default if there is any DrawTransparentBox( 35, 350, vmode->fbWidth-35, 400); WriteFontStyled(33, 345, "Default values will be used by the DOL being loaded if a", 0.8f, false, defaultColor); WriteFontStyled(33, 365, "parameter is not enabled. Please check the documentation", 0.8f, false, defaultColor); WriteFontStyled(33, 385, "for this DOL if you are unsure of the default values.", 0.8f, false, defaultColor); WriteFontStyled(640/2, 440, "(A) Toggle Param - (Start) Load the DOL", 1.0f, true, defaultColor); DrawFrameFinish(); while (!(PAD_ButtonsHeld(0) & (PAD_BUTTON_RIGHT|PAD_BUTTON_LEFT|PAD_BUTTON_UP|PAD_BUTTON_DOWN|PAD_BUTTON_START|PAD_BUTTON_A))) { VIDEO_WaitVSync (); } u16 btns = PAD_ButtonsHeld(0); if((btns & (PAD_BUTTON_RIGHT|PAD_BUTTON_LEFT)) && params->parameters[param_selection].enable) { int curValIdx = params->parameters[param_selection].currentValueIdx; int maxValIdx = params->parameters[param_selection].num_values; curValIdx = btns & PAD_BUTTON_LEFT ? ((--curValIdx < 0) ? maxValIdx-1 : curValIdx):((curValIdx + 1) % maxValIdx); params->parameters[param_selection].currentValueIdx = curValIdx; } if(btns & (PAD_BUTTON_UP|PAD_BUTTON_DOWN)) { param_selection = btns & PAD_BUTTON_UP ? ((--param_selection < 0) ? params->num_params-1 : param_selection) :((param_selection + 1) % params->num_params); } if(btns & PAD_BUTTON_A) { params->parameters[param_selection].enable ^= 1; } if(btns & PAD_BUTTON_START) { break; } while (PAD_ButtonsHeld(0) & (PAD_BUTTON_RIGHT|PAD_BUTTON_LEFT|PAD_BUTTON_UP|PAD_BUTTON_DOWN|PAD_BUTTON_START|PAD_BUTTON_A)) { VIDEO_WaitVSync (); } } }
void drawCheatForCheatsSelector(CheatEntry *cheat, int x, int y, int selected) { char *name = &cheat->name[0]; int chkWidth = 32, nameWidth = 525, gapWidth = 13; // If not selected and not enabled, use greyed out font for everything GXColor fontColor = (cheat->enabled || selected) ? defaultColor : deSelectedColor; // If selected draw that it's selected if(selected) DrawSimpleBox( x+chkWidth+gapWidth-5, y, nameWidth, 35, 0, deSelectedColor, defaultColor); DrawImage(cheat->enabled ? TEX_CHECKED:TEX_UNCHECKED, x, y, 32, 32, 0, 0.0f, 1.0f, 0.0f, 1.0f, 0); // Draw the cheat Name WriteFontStyled(x+chkWidth+gapWidth+5, y+4, name, GetTextScaleToFitInWidth(name, nameWidth-10), false, fontColor); }
void DrawProgressBar(int percent, char *message) { int x1 = ((640/2) - (PROGRESS_BOX_WIDTH/2)); int x2 = ((640/2) + (PROGRESS_BOX_WIDTH/2)); int y1 = ((480/2) - (PROGRESS_BOX_HEIGHT/2)); int y2 = ((480/2) + (PROGRESS_BOX_HEIGHT/2)); int middleY = (y2+y1)/2; float scale = GetTextScaleToFitInWidth(message, x2-x1); GXColor fillColor = (GXColor) {0,0,0,GUI_MSGBOX_ALPHA}; //black GXColor noColor = (GXColor) {0,0,0,0}; //blank GXColor borderColor = (GXColor) {200,200,200,GUI_MSGBOX_ALPHA}; //silver GXColor progressBarColor = (GXColor) {255,128,0,GUI_MSGBOX_ALPHA}; //orange DrawSimpleBox( x1, y1, x2-x1, y2-y1, 0, fillColor, borderColor); int multiplier = (PROGRESS_BOX_WIDTH-20)/100; int progressBarWidth = multiplier*100; DrawSimpleBox( (640/2 - progressBarWidth/2), y1+20, (multiplier*100), 20, 0, noColor, borderColor); DrawSimpleBox( (640/2 - progressBarWidth/2), y1+20, (multiplier*percent), 20, 0, progressBarColor, noColor); WriteFontStyled(640/2, middleY, message, scale, true, defaultColor); sprintf(txtbuffer,"%d%% percent complete",percent); WriteFontStyled(640/2, middleY+30, txtbuffer, 1.0f, true, defaultColor); }
void DrawFileBrowserButton(int x1, int y1, int x2, int y2, char *message, file_handle *file, int mode, u32 color) { char file_name[1024]; int borderSize; color = (color == -1) ? BUTTON_COLOUR_INNER : color; //never used memset(file_name, 0, 1024); strcpy(&file_name[0], message); borderSize = (mode==B_SELECTED) ? 6 : 4; // Hide extension when rendering ISO/GCM files if(file->fileAttrib == IS_FILE) { if(endsWith(file_name,".gcm") || endsWith(file_name,".GCM") || endsWith(file_name,".iso")|| endsWith(file_name,".ISO") || endsWith(file_name,".dol")|| endsWith(file_name,".DOL")) { if(strlen(file_name) > 4) { file_name[strlen(file_name)-4] = '\0'; } } } float scale = GetTextScaleToFitInWidth(file_name, (x2-x1-96)-(borderSize*2)); GXColor selectColor = (GXColor) {46,57,104,GUI_MSGBOX_ALPHA}; //bluish GXColor noColor = (GXColor) {0,0,0,0}; //black GXColor borderColor = (GXColor) {200,200,200,GUI_MSGBOX_ALPHA}; //silver //Draw Text and backfill (if selected) if(mode==B_SELECTED) { DrawSimpleBox( x1, y1, x2-x1, y2-y1, 0, selectColor, borderColor); } else { DrawSimpleBox( x1, y1, x2-x1, y2-y1, 0, noColor, borderColor); } // Draw banner if there is one if(file->meta && file->meta->banner) { DrawTexObj(&file->meta->bannerTexObj, x1+7, y1+4, 96, 32, 0, 0.0f, 1.0f, 0.0f, 1.0f, 0); } WriteFontStyled(x1 + borderSize+5+96, y1+borderSize, file_name, scale, false, defaultColor); // Print specific stats if(file->fileAttrib==IS_FILE) { if(curDevice == WODE) { sprintf(txtbuffer,"Partition: %i, ISO: %i", (int)(file->fileBase>>24)&0xFF,(int)(file->fileBase&0xFFFFFF)); } else if(curDevice == MEMCARD) {
void DrawMessageBox(int type, char *message) { int x1 = ((640/2) - (PROGRESS_BOX_WIDTH/2)); int x2 = ((640/2) + (PROGRESS_BOX_WIDTH/2)); int y1 = ((480/2) - (PROGRESS_BOX_HEIGHT/2)); int y2 = ((480/2) + (PROGRESS_BOX_HEIGHT/2)); int middleY = y2-y1 < 23 ? y1+3 : (y2+y1)/2-12; GXColor fillColor = (GXColor) {0,0,0,GUI_MSGBOX_ALPHA}; //black GXColor borderColor = (GXColor) {200,200,200,GUI_MSGBOX_ALPHA}; //silver DrawSimpleBox( x1, y1, x2-x1, y2-y1, 0, fillColor, borderColor); char *tok = strtok(message,"\n"); while(tok != NULL) { WriteFontStyled(640/2, middleY, tok, 1.0f, true, defaultColor); tok = strtok(NULL,"\n"); middleY+=24; } }
int DrawYesNoDialog(char *message) { int sel = 0; while ((PAD_ButtonsHeld(0) & PAD_BUTTON_A)){ VIDEO_WaitVSync (); } while(1) { doBackdrop(); DrawEmptyBox(75,190, vmode->fbWidth-78, 330, COLOR_BLACK); WriteFontStyled(640/2, 215, message, 1.0f, true, defaultColor); DrawSelectableButton(100, 280, -1, 310, "Yes", (sel==1) ? B_SELECTED:B_NOSELECT,-1); DrawSelectableButton(380, 280, -1, 310, "No", (!sel) ? B_SELECTED:B_NOSELECT,-1); DrawFrameFinish(); while (!(PAD_ButtonsHeld(0) & PAD_BUTTON_RIGHT) && !(PAD_ButtonsHeld(0) & PAD_BUTTON_LEFT) && !(PAD_ButtonsHeld(0) & PAD_BUTTON_B)&& !(PAD_ButtonsHeld(0) & PAD_BUTTON_A)) { VIDEO_WaitVSync (); } u16 btns = PAD_ButtonsHeld(0); if((btns & PAD_BUTTON_RIGHT) || (btns & PAD_BUTTON_LEFT)) { sel^=1; } if((btns & PAD_BUTTON_A) || (btns & PAD_BUTTON_B)) break; while (!(!(PAD_ButtonsHeld(0) & PAD_BUTTON_RIGHT) && !(PAD_ButtonsHeld(0) & PAD_BUTTON_LEFT) && !(PAD_ButtonsHeld(0) & PAD_BUTTON_B) && !(PAD_ButtonsHeld(0) & PAD_BUTTON_A))) { VIDEO_WaitVSync (); } } while ((PAD_ButtonsHeld(0) & PAD_BUTTON_A)){ VIDEO_WaitVSync (); } return sel; }
/* Initialise Video, PAD, DVD, Font */ void* Initialise (void) { VIDEO_Init (); PAD_Init (); DVD_Init(); *(volatile unsigned long*)0xcc00643c = 0x00000000; //allow 32mhz exi bus // Disable IPL modchips to allow access to IPL ROM fonts ipl_set_config(6); usleep(1000); //wait for modchip to disable (overkill) __SYS_ReadROM(IPLInfo,256,0); // Read IPL tag // Wii has no IPL tags for "PAL" so let libOGC figure out the video mode if(!is_gamecube()) { vmode = VIDEO_GetPreferredMode(NULL); //Last mode used } else { // Gamecube, determine based on IPL int retPAD = 0, retCnt = 10000; while(retPAD <= 0 && retCnt >= 0) { retPAD = PAD_ScanPads(); usleep(100); retCnt--; } // L Trigger held down ignores the fact that there's a component cable plugged in. if(VIDEO_HaveComponentCable() && !(PAD_ButtonsDown(0) & PAD_TRIGGER_L)) { if(strstr(IPLInfo,"MPAL")!=NULL) { swissSettings.sramVideo = 2; vmode = &TVMpal480Prog; //Progressive 480p } else if((strstr(IPLInfo,"PAL")!=NULL)) { swissSettings.sramVideo = 1; vmode = &TVPal576ProgScale; //Progressive 576p } else { swissSettings.sramVideo = 0; vmode = &TVNtsc480Prog; //Progressive 480p } } else { //try to use the IPL region if(strstr(IPLInfo,"MPAL")!=NULL) { swissSettings.sramVideo = 2; vmode = &TVMpal480IntDf; //PAL-M } else if(strstr(IPLInfo,"PAL")!=NULL) { swissSettings.sramVideo = 1; vmode = &TVPal576IntDfScale; //PAL } else { swissSettings.sramVideo = 0; vmode = &TVNtsc480IntDf; //NTSC } } } initialise_video(vmode); populateVideoStr(vmode); init_font(); init_textures(); whichfb = 0; drive_version(&driveVersion[0]); swissSettings.hasDVDDrive = *(u32*)&driveVersion[0] ? 1 : 0; if(!driveVersion[0]) { // Reset DVD if there was a modchip DrawFrameStart(); WriteFontStyled(640/2, 250, "Initialise DVD .. (HOLD B if NO DVD Drive)", 0.8f, true, defaultColor); DrawFrameFinish(); dvd_reset(); // low-level, basic dvd_read_id(); if(!(PAD_ButtonsHeld(0) & PAD_BUTTON_B)) { dvd_set_streaming(*(char*)0x80000008); } drive_version(&driveVersion[0]); swissSettings.hasDVDDrive = *(u32*)&driveVersion[0] ? 1 : 0; if(!swissSettings.hasDVDDrive) { DrawFrameStart(); DrawMessageBox(D_INFO, "No DVD Drive Detected !!"); DrawFrameFinish(); sleep(2); } } return xfb[0]; }
void DrawCheatsSelector(char *fileName) { CheatEntries* cheats = getCheats(); int cheat_selection = 0; int cheats_per_page = 6; while ((PAD_ButtonsHeld(0) & PAD_BUTTON_A)){ VIDEO_WaitVSync (); } while(1) { doBackdrop(); DrawEmptyBox(20,60, vmode->fbWidth-20, 460, COLOR_BLACK); sprintf(txtbuffer, "%s Cheats:", fileName); WriteFontStyled(25, 62, txtbuffer, GetTextScaleToFitInWidth(txtbuffer, vmode->fbWidth-50), false, defaultColor); int j = 0; int current_view_start = MIN(MAX(0,cheat_selection-cheats_per_page/2),MAX(0,cheats->num_cheats-cheats_per_page)); int current_view_end = MIN(cheats->num_cheats, MAX(cheat_selection+cheats_per_page/2,cheats_per_page)); int scrollBarHeight = 90+(cheats_per_page*20); int scrollBarTabHeight = (int)((float)scrollBarHeight/(float)cheats->num_cheats); DrawVertScrollBar(vmode->fbWidth-45, 120, 25, scrollBarHeight, (float)((float)cheat_selection/(float)(cheats->num_cheats-1)),scrollBarTabHeight); for(j = 0; current_view_start<current_view_end; ++current_view_start,++j) { drawCheatForCheatsSelector(&cheats->cheat[current_view_start], 25, 120+j*35, current_view_start==cheat_selection); } // Write about how many cheats are enabled DrawTransparentBox( 35, 350, vmode->fbWidth-35, 410); WriteFontStyled(33, 345, "Space taken by cheats:", 0.8f, false, defaultColor); GXColor noColor = (GXColor) {0,0,0,0}; //blank GXColor borderColor = (GXColor) {200,200,200,GUI_MSGBOX_ALPHA}; //silver GXColor progressBarColor = (GXColor) {255,128,0,GUI_MSGBOX_ALPHA}; //orange float multiplier = (float)getEnabledCheatsSize() / (float)kenobi_get_maxsize(); DrawSimpleBox( 33, 370, vmode->fbWidth-66, 20, 0, noColor, borderColor); DrawSimpleBox( 33, 370, (int)((vmode->fbWidth-66)*multiplier), 20, 0, progressBarColor, noColor); sprintf(txtbuffer, "WiiRD Debug %s", swissSettings.wiirdDebug ? "Enabled":"Disabled"); WriteFontStyled(33, 395, txtbuffer, 0.8f, false, defaultColor); WriteFontStyled(640/2, 440, "(A) Toggle Cheat - (X) WiiRD Debug - (B) Return", 0.9f, true, defaultColor); DrawFrameFinish(); while (!(PAD_ButtonsHeld(0) & (PAD_BUTTON_UP|PAD_BUTTON_DOWN|PAD_BUTTON_B|PAD_BUTTON_A|PAD_BUTTON_X))) { VIDEO_WaitVSync (); } u16 btns = PAD_ButtonsHeld(0); if(btns & (PAD_BUTTON_UP|PAD_BUTTON_DOWN)) { cheat_selection = btns & PAD_BUTTON_UP ? ((--cheat_selection < 0) ? cheats->num_cheats-1 : cheat_selection) :((cheat_selection + 1) % cheats->num_cheats); } if(btns & PAD_BUTTON_A) { cheats->cheat[cheat_selection].enabled ^= 1; if(getEnabledCheatsSize() > kenobi_get_maxsize()) // No room cheats->cheat[cheat_selection].enabled = 0; } if(btns & PAD_BUTTON_X) { swissSettings.wiirdDebug ^=1; } if(btns & PAD_BUTTON_B) { break; } while (PAD_ButtonsHeld(0) & (PAD_BUTTON_UP|PAD_BUTTON_DOWN|PAD_BUTTON_B|PAD_BUTTON_A|PAD_BUTTON_X)) { VIDEO_WaitVSync (); } } }
void settings_draw_page(int page_num, int option, file_handle *file) { doBackdrop(); DrawEmptyBox(20,60, vmode->fbWidth-20, 460, COLOR_BLACK); // Save Settings to current device (**Shown on all tabs**) /** Global Settings (Page 1/) */ // IPL/Game Language [English/German/French/Spanish/Italian/Dutch] // IPL/Game Audio [Mono/Stereo] // SD/IDE Speed [16/32 MHz] // Swiss Video Mode [576i (PAL 50Hz), 480i (NTSC 60Hz), 480p (NTSC 60Hz)] // Stop DVD Motor on startup [Yes/No] /** Advanced Settings (Page 2/) */ // Enable USB Gecko Debug via Slot B [Yes/No] // Force No DVD Drive Mode [Yes/No] // Hide Unknown file types [Yes/No] // TO BE IMPLEMENTED /** Current Game Settings - only if a valid GCM file is highlighted (Page 3/) */ // Force Video Mode [576i (PAL 50Hz), 480i (NTSC 60Hz), 480p (NTSC 60Hz), Auto] // Mute Audio Streaming [Yes/No] // Try to mute audio stutter [Yes/No] if(!page_num) { WriteFont(30, 65, "Global Settings (1/3):"); WriteFontStyled(30, 120, "IPL/Game Language:", 1.0f, false, defaultColor); DrawSelectableButton(400, 120, -1, 150, getSramLang(swissSettings.sramLanguage), option == 0 ? B_SELECTED:B_NOSELECT,-1); WriteFontStyled(30, 160, "IPL/Game Audio:", 1.0f, false, defaultColor); DrawSelectableButton(400, 160, -1, 190, swissSettings.sramStereo ? "Stereo":"Mono", option == 1 ? B_SELECTED:B_NOSELECT,-1); WriteFontStyled(30, 200, "SD/IDE Speed:", 1.0f, false, defaultColor); DrawSelectableButton(400, 200, -1, 230, swissSettings.exiSpeed ? "32 MHz":"16 MHz", option == 2 ? B_SELECTED:B_NOSELECT,-1); WriteFontStyled(30, 240, "Swiss Video Mode:", 1.0f, false, defaultColor); DrawSelectableButton(400, 240, -1, 270, uiVModeStr[swissSettings.uiVMode], option == 3 ? B_SELECTED:B_NOSELECT,-1); } else if(page_num == 1) { WriteFont(30, 65, "Advanced Settings (2/3):"); WriteFontStyled(30, 120, "Enable USB Gecko Debug via Slot B:", 1.0f, false, defaultColor); DrawSelectableButton(500, 120, -1, 150, swissSettings.debugUSB ? "Yes":"No", option == 0 ? B_SELECTED:B_NOSELECT,-1); WriteFontStyled(30, 160, "Force No DVD Drive Mode:", 1.0f, false, defaultColor); DrawSelectableButton(500, 160, -1, 190, swissSettings.hasDVDDrive ? "No":"Yes", option == 1 ? B_SELECTED:B_NOSELECT,-1); WriteFontStyled(30, 200, "Hide Unknown file types:", 1.0f, false, defaultColor); DrawSelectableButton(500, 200, -1, 230, swissSettings.hideUnknownFileTypes ? "Yes":"No", option == 2 ? B_SELECTED:B_NOSELECT,-1); WriteFontStyled(30, 240, "Stop DVD Motor on startup:", 1.0f, false, defaultColor); DrawSelectableButton(500, 240, -1, 270, swissSettings.stopMotor ? "Yes":"No", option == 3 ? B_SELECTED:B_NOSELECT,-1); WriteFontStyled(30, 280, "Enable WiiRD debugging in Games:", 1.0f, false, defaultColor); DrawSelectableButton(500, 280, -1, 310, swissSettings.wiirdDebug ? "Yes":"No", option == 4 ? B_SELECTED:B_NOSELECT,-1); WriteFontStyled(30, 320, "Enable File Management:", 1.0f, false, defaultColor); DrawSelectableButton(500, 320, -1, 350, swissSettings.enableFileManagement ? "Yes":"No", option == 5 ? B_SELECTED:B_NOSELECT,-1); } else if(page_num == 2) { WriteFont(30, 65, "Current Game Settings (3/3):"); WriteFontStyled(30, 110, "Force Video Mode:", 1.0f, false, file != NULL ? defaultColor : disabledColor); DrawSelectableButton(480, 110, -1, 135, gameVModeStr[swissSettings.gameVMode], option == 0 ? B_SELECTED:B_NOSELECT,-1); WriteFontStyled(30, 140, "If Progressive, Soften:", 1.0f, false, file != NULL ? defaultColor : disabledColor); DrawSelectableButton(480, 140, -1, 165, softProgressiveStr[swissSettings.softProgressive], option == 1 ? B_SELECTED:B_NOSELECT,-1); WriteFontStyled(30, 170, "Force Widescreen:", 1.0f, false, file != NULL ? defaultColor : disabledColor); DrawSelectableButton(480, 170, -1, 195, forceWidescreenStr[swissSettings.forceWidescreen], option == 2 ? B_SELECTED:B_NOSELECT,-1); WriteFontStyled(30, 200, "Force Anisotropy:", 1.0f, false, file != NULL ? defaultColor : disabledColor); DrawSelectableButton(480, 200, -1, 225, swissSettings.forceAnisotropy ? "Yes":"No", option == 3 ? B_SELECTED:B_NOSELECT,-1); WriteFontStyled(30, 230, "Disable Audio Streaming:", 1.0f, false, file != NULL ? defaultColor : disabledColor); DrawSelectableButton(480, 230, -1, 255, swissSettings.muteAudioStreaming ? "Yes":"No", option == 4 ? B_SELECTED:B_NOSELECT,-1); WriteFontStyled(30, 260, "Force Encoding:", 1.0f, false, file != NULL ? defaultColor : disabledColor); DrawSelectableButton(480, 260, -1, 285, forceEncodingStr[swissSettings.forceEncoding], option == 5 ? B_SELECTED:B_NOSELECT,-1); } if(page_num != 0) { DrawSelectableButton(40, 390, -1, 420, "Back", option == settings_count_pp[page_num]-(page_num != 2 ? 3:2) ? B_SELECTED:B_NOSELECT,-1); } if(page_num != 2) { DrawSelectableButton(510, 390, -1, 420, "Next", option == settings_count_pp[page_num]-2 ? B_SELECTED:B_NOSELECT,-1); } DrawSelectableButton(100, 425, -1, 455, "Save & Exit", option == settings_count_pp[page_num]-1 ? B_SELECTED:B_NOSELECT,-1); DrawSelectableButton(320, 425, -1, 455, "Discard & Exit", option == settings_count_pp[page_num] ? B_SELECTED:B_NOSELECT,-1); DrawFrameFinish(); }
void info_draw_page(int page_num) { doBackdrop(); DrawEmptyBox(20,60, vmode->fbWidth-20, 420, COLOR_BLACK); syssram* sram = __SYS_LockSram(); __SYS_UnlockSram(0); // System Info (Page 1/3) if(!page_num) { WriteFont(30, 65, "System Info (1/3):"); // Model if(is_gamecube()) { if(*(u32*)&driveVersion[0] == 0x20010831) { sprintf(topStr, "Panasonic Q SL-GC10-S"); } else if(IPLInfo[0x55]=='M') { // MPAL 1.1 (Brazil) sprintf(topStr, "Nintendo GameCube DOL-002 (BRA)"); } else if((!IPLInfo[0x55]) // NTSC 1.0 || (IPLInfo[0x55] == 'P' && IPLInfo[0x65]=='0') // PAL 1.0 || (IPLInfo[0x55] != 'P' && IPLInfo[0x65]=='1')) { // NTSC 1.1 sprintf(topStr, "Nintendo GameCube DOL-001"); } else if((IPLInfo[0x55] == 'P' && IPLInfo[0x65]=='0') // PAL 1.1 || IPLInfo[0x65]=='2') { // NTSC 1.2 sprintf(topStr, "Nintendo GameCube DOL-101"); } } else { sprintf(topStr, "Nintendo Wii"); } WriteFontStyled(640/2, 110, topStr, 1.0f, true, defaultColor); // IPL version string if(is_gamecube()) { if(!IPLInfo[0x55]) { sprintf(topStr, "NTSC Revision 1.0"); } else { sprintf(topStr, "%s", &IPLInfo[0x55]); } } else { sprintf(topStr, "Wii IPL"); } WriteFontStyled(640/2, 140, topStr, 1.0f, true, defaultColor); if(swissSettings.hasDVDDrive) { if((!__wkfSpiReadId() || (__wkfSpiReadId() == 0xFFFFFFFF))) { sprintf(topStr, "DVD Drive %02X %02X%02X/%02X (%02X)",driveVersion[2],driveVersion[0],driveVersion[1],driveVersion[3],driveVersion[4]); } else { sprintf(topStr, "WKF Serial %s",wkfGetSerial()); } } else sprintf(topStr, "No DVD Drive present"); WriteFontStyled(640/2, 170, topStr, 1.0f, true, defaultColor); sprintf(topStr, "%s",videoStr); WriteFontStyled(640/2, 200, topStr, 1.0f, true, defaultColor); sprintf(topStr,"%s / %s",getSramLang(sram->lang), sram->flags&4 ? "Stereo":"Mono"); WriteFontStyled(640/2, 230, topStr, 1.0f, true, defaultColor); sprintf(topStr,"PVR %08X ECID %08X:%08X:%08X",mfpvr(),mfspr(0x39C),mfspr(0x39D),mfspr(0x39E)); WriteFontStyled(640/2, 260, topStr, 0.75f, true, defaultColor); } else if(page_num == 1) { WriteFont(30, 65, "Device Info (2/3):"); sprintf(topStr,"BBA: %s", bba_exists ? "Installed":"Not Present"); WriteFont(30, 110, topStr); if(exi_bba_exists()) { sprintf(topStr,"IP: %s", net_initialized ? bba_ip:"Not Available"); } else { sprintf(topStr,"IP: Not Available"); } WriteFont(270, 110, topStr); sprintf(topStr,"Component Cable Plugged in: %s",VIDEO_HaveComponentCable()?"Yes":"No"); WriteFont(30, 140, topStr); if(usb_isgeckoalive(0)||usb_isgeckoalive(1)) { sprintf(topStr,"USB Gecko: Installed in %s",usb_isgeckoalive(0)?"Slot A":"Slot B"); } else { sprintf(topStr,"USB Gecko: Not Present"); } WriteFont(30, 170, topStr); if (!deviceHandler_initial) { sprintf(topStr, "Current Device: No Device Selected"); } else if(deviceHandler_initial == &initial_SD0 || deviceHandler_initial == &initial_SD1) { int slot = (deviceHandler_initial->name[2] == 'b'); sprintf(topStr, "Current Device: %s Card in %s @ %s",!SDHCCard?"SDHC":"SD",!slot?"Slot A":"Slot B",!swissSettings.exiSpeed?"16Mhz":"32Mhz"); } else if(deviceHandler_initial == &initial_DVD) { sprintf(topStr, "Current Device: %s DVD Disc",dvdDiscTypeStr); } else if(deviceHandler_initial == &initial_IDE0 || deviceHandler_initial == &initial_IDE1) { int slot = (deviceHandler_initial->name[3] == 'b'); sprintf(topStr, "Current Device: %d GB HDD in %s",ataDriveInfo.sizeInGigaBytes,!slot?"Slot A":"Slot B"); } else if(deviceHandler_initial == &initial_Qoob) { sprintf(topStr, "Current Device: Qoob IPL Replacement"); } else if(deviceHandler_initial == &initial_WODE) { sprintf(topStr, "Current Device: Wode Jukebox"); } else if(deviceHandler_initial == &initial_CARDA || deviceHandler_initial == &initial_CARDB) { sprintf(topStr, "Current Device: Memory Card in %s",!deviceHandler_initial->fileBase?"Slot A":"Slot B"); } else if(deviceHandler_initial == &initial_USBGecko) { sprintf(topStr, "Current Device: USB Gecko"); } else if(deviceHandler_initial == &initial_WKF) { sprintf(topStr, "Current Device: Wiikey Fusion"); } else if(deviceHandler_initial == &initial_SYS) { sprintf(topStr, "Current Device: System"); } WriteFont(30, 200, topStr); } else if(page_num == 2) { WriteFont(30, 65, "Credits (3/3):"); WriteFontStyled(640/2, 115, "Swiss ver 0.4", 1.0f, true, defaultColor); WriteFontStyled(640/2, 140, "by emu_kidid 2015", 0.75f, true, defaultColor); sprintf(txtbuffer, "Commit %s Revision %s SD Gecko Slot B Cheats Mod", GITREVISION, GITVERSION); WriteFontStyled(640/2, 165, txtbuffer, 0.75f, true, defaultColor); WriteFontStyled(640/2, 210, "Thanks to", 0.75f, true, defaultColor); WriteFontStyled(640/2, 228, "Testers & libOGC/dkPPC authors", 0.75f, true, defaultColor); WriteFontStyled(640/2, 246, "sepp256 for GX / FIX94 for Audio Streaming", 0.75f, true, defaultColor); WriteFontStyled(640/2, 264, "Extrems for video patches / Megalomaniac for builds", 0.75f, true, defaultColor); WriteFontStyled(640/2, 282, "Fishaman P for cheats support with all devices", 0.75f, true, defaultColor); WriteFontStyled(640/2, 318, "Web/Support http://www.gc-forever.com/", 0.75f, true, defaultColor); WriteFontStyled(640/2, 336, "Source at https://github.com/emukidid/swiss-gc", 0.75f, true, defaultColor); WriteFontStyled(640/2, 354, "Visit us at #gc-forever on EFNet", 0.75f, true, defaultColor); } if(page_num != 2) { WriteFont(520, 390, "->"); } if(page_num != 0) { WriteFont(100, 390, "<-"); } WriteFontStyled(640/2, 400, "Press A to return", 1.0f, true, defaultColor); DrawFrameFinish(); }