#include #include #include #include #include #include #include "usbloader/wbfs.h" #include "language/gettext.h" #include "libwiigui/gui.h" #include "libwiigui/Text.hpp" #include "../xml/xml.h" #include "menu.h" #include "menu/menus.h" #include "filelist.h" #include "sys.h" #include "wpad.h" #include "fatmounter.h" #include "FileOperations/fileops.h" #include "prompts/PromptWindows.h" #include "gameinfo.h" #include "usbloader/GameList.h" #include "../gecko.h" /*** Extern variables ***/ extern u8 shutdown; extern u8 reset; extern struct gameXMLinfo gameinfo; extern struct gameXMLinfo gameinfo_reset; /*** Extern functions ***/ extern void ResumeGui(); extern void HaltGui(); /**************************************************************************** * gameinfo ***************************************************************************/ int showGameInfo(char *ID) { HaltGui();//put this first to try to get rid of the code dump caused by loading this window at the same time as loading images from the SD card mainWindow->SetState(STATE_DISABLED); ResumeGui(); bool databaseopened = true; if (databaseopened) { LoadGameInfoFromXML(ID, Settings.db_language); bool showmeminfo = false; int choice = -1; int titley = 10; int marginY = titley + 40; int indexy = marginY; int wifiY = 0; int intputX = 200, inputY = -30, txtXOffset = 90; u8 nunchuk = 0, classiccontroller = 0, balanceboard = 0, dancepad = 0, guitar = 0, gamecube = 0, wheel = 0, motionplus = 0, drums = 0, microphone = 0, zapper = 0, nintendods = 0, //vitalitysensor=0, wiispeak = 0; int newline = 1; u8 page = 1; GuiImageData * playersImgData = NULL; GuiImage * playersImg = NULL; GuiImageData * wifiplayersImgData = NULL; GuiImage * wifiplayersImg = NULL; GuiImage * ratingImg = NULL; GuiImage * classiccontrollerImg = NULL; GuiImage * nunchukImg = NULL; GuiImage * guitarImg = NULL; GuiImage * drumsImg = NULL; GuiImage * dancepadImg = NULL; GuiImage * motionplusImg = NULL; GuiImage * wheelImg = NULL; GuiImage * balanceboardImg = NULL; GuiImage * microphoneImg = NULL; GuiImage * zapperImg = NULL; GuiImage * nintendodsImg = NULL; GuiImage * wiispeakImg = NULL; //GuiImage * vitalitysensorImg = NULL; GuiImage * gcImg = NULL; GuiImage * dialogBoxImg1 = NULL; GuiImage * dialogBoxImg2 = NULL; GuiImage * dialogBoxImg3 = NULL; GuiImage * dialogBoxImg4 = NULL; GuiImage * dialogBoxImg11 = NULL; GuiImage * dialogBoxImg22 = NULL; GuiImage * dialogBoxImg33 = NULL; GuiImage * dialogBoxImg44 = NULL; GuiImage * coverImg = NULL; GuiImage * coverImg2 = NULL; GuiImageData * classiccontrollerImgData = NULL; GuiImageData * nunchukImgData = NULL; GuiImageData * guitarImgData = NULL; GuiImageData * drumsImgData = NULL; GuiImageData * motionplusImgData = NULL; GuiImageData * wheelImgData = NULL; GuiImageData * balanceboardImgData = NULL; GuiImageData * dancepadImgData = NULL; GuiImageData * microphoneImgData = NULL; GuiImageData * zapperImgData = NULL; GuiImageData * nintendodsImgData = NULL; GuiImageData * wiispeakImgData = NULL; //GuiImageData * vitalitysensorImgData = NULL; GuiImageData * gamecubeImgData = NULL; GuiImageData * ratingImgData = NULL; GuiImageData * cover = NULL; GuiText * releasedTxt = NULL; GuiText * publisherTxt = NULL; GuiText * developerTxt = NULL; GuiText * titleTxt = NULL; Text * synopsisTxt = NULL; GuiText ** genreTxt = NULL; GuiText ** wifiTxt = NULL; GuiText * wiitdb1Txt = NULL; GuiText * wiitdb2Txt = NULL; GuiText * wiitdb3Txt = NULL; GuiText * memTxt = NULL; GuiWindow gameinfoWindow(600, 308); gameinfoWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); gameinfoWindow.SetPosition(0, -50); GuiWindow gameinfoWindow2(600, 308); gameinfoWindow2.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); gameinfoWindow2.SetPosition(0, -50); GuiWindow txtWindow(350, 270); txtWindow.SetAlignment(ALIGN_CENTRE, ALIGN_RIGHT); txtWindow.SetPosition(95, 55); GuiSound btnSoundOver(button_over_pcm, button_over_pcm_size, Settings.sfxvolume); GuiSound btnClick(button_click2_pcm, button_click2_pcm_size, Settings.sfxvolume); char imgPath[100]; snprintf(imgPath, sizeof(imgPath), "%sbutton_dialogue_box.png", Settings.theme_path); GuiImageData btnOutline(imgPath, button_dialogue_box_png); snprintf(imgPath, sizeof(imgPath), "%sgameinfo1_png.png", Settings.theme_path); GuiImageData dialogBox1(imgPath, gameinfo1_png); snprintf(imgPath, sizeof(imgPath), "%sgameinfo1a_png.png", Settings.theme_path); GuiImageData dialogBox2(imgPath, gameinfo1a_png); snprintf(imgPath, sizeof(imgPath), "%sgameinfo2_png.png", Settings.theme_path); GuiImageData dialogBox3(imgPath, gameinfo2_png); snprintf(imgPath, sizeof(imgPath), "%sgameinfo2a_png.png", Settings.theme_path); GuiImageData dialogBox4(imgPath, gameinfo2a_png); GuiTrigger trig1; trig1.SetButtonOnlyTrigger(-1, WPAD_BUTTON_1 | WPAD_CLASSIC_BUTTON_X, 0); GuiTrigger trigA; trigA.SetButtonOnlyTrigger(-1, WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A, PAD_BUTTON_A); GuiTrigger trigB; trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B); GuiTrigger trigU; trigU.SetButtonOnlyTrigger(-1, WPAD_BUTTON_UP | WPAD_CLASSIC_BUTTON_UP, PAD_BUTTON_UP); GuiTrigger trigD; trigD.SetButtonOnlyTrigger(-1, WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_DOWN, PAD_BUTTON_DOWN); GuiTrigger trigH; trigH.SetButtonOnlyTrigger(-1, WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME, 0); //buttons for changing between synopsis and other info GuiButton backBtn(0, 0); backBtn.SetPosition(-20, -20); backBtn.SetTrigger(&trigB); gameinfoWindow.Append(&backBtn); GuiButton nextBtn(0, 0); nextBtn.SetPosition(20, 20); nextBtn.SetTrigger(&trigA); gameinfoWindow.Append(&nextBtn); //buttons for scrolling the synopsis GuiButton upBtn(0, 0); upBtn.SetPosition(0, 0); upBtn.SetTrigger(&trigU); GuiButton dnBtn(0, 0); dnBtn.SetPosition(0, 0); dnBtn.SetTrigger(&trigD); GuiButton homeBtn(0, 0); homeBtn.SetPosition(0, 0); homeBtn.SetTrigger(&trigH); // button to save the url for the zip file for poor people without wifi GuiButton urlBtn(0, 0); urlBtn.SetPosition(0, 0); urlBtn.SetTrigger(&trig1); gameinfoWindow.Append(&urlBtn); char linebuf[XML_SYNOPSISLEN] = ""; char linebuf2[100] = ""; // enable icons for required accessories for (int i = 1; i <= XML_ELEMMAX; i++) { if (strcmp(gameinfo.accessoriesReq[i], "classiccontroller") == 0) classiccontroller = 1; if (strcmp(gameinfo.accessoriesReq[i], "nunchuk") == 0) nunchuk = 1; if (strcmp(gameinfo.accessoriesReq[i], "guitar") == 0) guitar = 1; if (strcmp(gameinfo.accessoriesReq[i], "drums") == 0) drums = 1; if (strcmp(gameinfo.accessoriesReq[i], "dancepad") == 0) dancepad = 1; if (strcmp(gameinfo.accessoriesReq[i], "motionplus") == 0) motionplus = 1; if (strcmp(gameinfo.accessoriesReq[i], "wheel") == 0) wheel = 1; if (strcmp(gameinfo.accessoriesReq[i], "balanceboard") == 0) balanceboard = 1; if (strcmp(gameinfo.accessoriesReq[i], "microphone") == 0) microphone = 1; if (strcmp(gameinfo.accessoriesReq[i], "zapper") == 0) zapper = 1; if (strcmp(gameinfo.accessoriesReq[i], "nintendods") == 0) nintendods = 1; if (strcmp(gameinfo.accessoriesReq[i], "wiispeak") == 0) wiispeak = 1; //if (strcmp(gameinfo.accessoriesReq[i],"vitalitysensor")==0) // vitalitysensor=1; if (strcmp(gameinfo.accessoriesReq[i], "gamecube") == 0) gamecube = 1; } // switch icons if (nunchuk) nunchukImgData = new GuiImageData(nunchukR_png); else nunchukImgData = new GuiImageData(nunchuk_png); if (classiccontroller) classiccontrollerImgData = new GuiImageData(classiccontrollerR_png); else classiccontrollerImgData = new GuiImageData(classiccontroller_png); if (guitar) guitarImgData = new GuiImageData(guitarR_png); else guitarImgData = new GuiImageData(guitar_png); if (gamecube) gamecubeImgData = new GuiImageData(gcncontrollerR_png); else gamecubeImgData = new GuiImageData(gcncontroller_png); if (wheel) wheelImgData = new GuiImageData(wheelR_png); else wheelImgData = new GuiImageData(wheel_png); if (motionplus) motionplusImgData = new GuiImageData(motionplusR_png); else motionplusImgData = new GuiImageData(motionplus_png); if (drums) drumsImgData = new GuiImageData(drumsR_png); else drumsImgData = new GuiImageData(drums_png); if (microphone) microphoneImgData = new GuiImageData(microphoneR_png); else microphoneImgData = new GuiImageData(microphone_png); if (zapper) zapperImgData = new GuiImageData(zapperR_png); else zapperImgData = new GuiImageData(zapper_png); if (wiispeak) wiispeakImgData = new GuiImageData(wiispeakR_png); else wiispeakImgData = new GuiImageData(wiispeak_png); if (nintendods) nintendodsImgData = new GuiImageData(nintendodsR_png); else nintendodsImgData = new GuiImageData(nintendods_png); //if (vitalitysensor) vitalitysensorImgData = new GuiImageData(vitalitysensorR_png); //else vitalitysensorImgData = new GuiImageData(vitalitysensor_png); if (balanceboard) balanceboardImgData = new GuiImageData(balanceboardR_png); else balanceboardImgData = new GuiImageData(balanceboard_png); if (dancepad) dancepadImgData = new GuiImageData(dancepadR_png); else dancepadImgData = new GuiImageData(dancepad_png); // look for optional accessories for (int i = 1; i <= XML_ELEMMAX; i++) { if (strcmp(gameinfo.accessories[i], "classiccontroller") == 0) classiccontroller = 1; if (strcmp(gameinfo.accessories[i], "nunchuk") == 0) nunchuk = 1; if (strcmp(gameinfo.accessories[i], "guitar") == 0) guitar = 1; if (strcmp(gameinfo.accessories[i], "drums") == 0) drums = 1; if (strcmp(gameinfo.accessories[i], "dancepad") == 0) dancepad = 1; if (strcmp(gameinfo.accessories[i], "motionplus") == 0) motionplus = 1; if (strcmp(gameinfo.accessories[i], "wheel") == 0) wheel = 1; if (strcmp(gameinfo.accessories[i], "balanceboard") == 0) balanceboard = 1; if (strcmp(gameinfo.accessories[i], "microphone") == 0) microphone = 1; if (strcmp(gameinfo.accessories[i], "zapper") == 0) zapper = 1; if (strcmp(gameinfo.accessories[i], "nintendods") == 0) nintendods = 1; if (strcmp(gameinfo.accessories[i], "wiispeak") == 0) wiispeak = 1; //if (strcmp(gameinfo.accessories[i],"vitalitysensor")==0) // vitalitysensor=1; if (strcmp(gameinfo.accessories[i], "gamecube") == 0) gamecube = 1; } dialogBoxImg1 = new GuiImage(&dialogBox1); dialogBoxImg1->SetAlignment(0, 3); dialogBoxImg1->SetPosition(-9, 0); dialogBoxImg2 = new GuiImage(&dialogBox2); dialogBoxImg2->SetAlignment(0, 3); dialogBoxImg2->SetPosition(145, 0); dialogBoxImg3 = new GuiImage(&dialogBox3); dialogBoxImg3->SetAlignment(0, 3); dialogBoxImg3->SetPosition(301, 0); dialogBoxImg4 = new GuiImage(&dialogBox4); dialogBoxImg4->SetAlignment(0, 3); dialogBoxImg4->SetPosition(457, 0); gameinfoWindow.Append(dialogBoxImg1); gameinfoWindow.Append(dialogBoxImg2); gameinfoWindow.Append(dialogBoxImg3); gameinfoWindow.Append(dialogBoxImg4); snprintf(imgPath, sizeof(imgPath), "%s%s.png", Settings.covers_path, ID); cover = new GuiImageData(imgPath, 0); //load full id image if (!cover->GetImage()) { delete cover; snprintf(imgPath, sizeof(imgPath), "%snoimage.png", Settings.covers_path); cover = new GuiImageData(imgPath, nocover_png); //load no image } delete coverImg; coverImg = NULL; coverImg = new GuiImage(cover); coverImg->SetWidescreen(Settings.widescreen); coverImg->SetPosition(15, 30); gameinfoWindow.Append(coverImg); // # of players if (strcmp(gameinfo.players, "") != 0) { playersImgData = new GuiImageData(Wiimote1_png); if (atoi(gameinfo.players) > 1) { playersImgData = new GuiImageData(Wiimote2_png); } if (atoi(gameinfo.players) > 2) { playersImgData = new GuiImageData(Wiimote4_png); } playersImg = new GuiImage(playersImgData); playersImg->SetWidescreen(Settings.widescreen); playersImg->SetPosition(intputX, inputY); playersImg->SetAlignment(0, 4); gameinfoWindow.Append(playersImg); intputX += (Settings.widescreen ? playersImg->GetWidth() * .8 : playersImg->GetWidth()) + 5; } //draw the input types for this game if (motionplus == 1) { motionplusImg = new GuiImage(motionplusImgData); motionplusImg->SetWidescreen(Settings.widescreen); motionplusImg->SetPosition(intputX, inputY); motionplusImg->SetAlignment(0, 4); gameinfoWindow.Append(motionplusImg); intputX += (Settings.widescreen ? motionplusImg->GetWidth() * .8 : motionplusImg->GetWidth()) + 5; } if (nunchuk == 1) { nunchukImg = new GuiImage(nunchukImgData); nunchukImg->SetWidescreen(Settings.widescreen); nunchukImg->SetPosition(intputX, inputY); nunchukImg->SetAlignment(0, 4); gameinfoWindow.Append(nunchukImg); intputX += (Settings.widescreen ? nunchukImg->GetWidth() * .8 : nunchukImg->GetWidth()) + 5; } if (classiccontroller == 1) { classiccontrollerImg = new GuiImage(classiccontrollerImgData); classiccontrollerImg->SetWidescreen(Settings.widescreen); classiccontrollerImg->SetPosition(intputX, inputY); classiccontrollerImg->SetAlignment(0, 4); gameinfoWindow.Append(classiccontrollerImg); intputX += (Settings.widescreen ? classiccontrollerImg->GetWidth() * .8 : classiccontrollerImg->GetWidth()) + 5; } if (gamecube == 1) { gcImg = new GuiImage(gamecubeImgData); gcImg->SetWidescreen(Settings.widescreen); gcImg->SetPosition(intputX, inputY); gcImg->SetAlignment(0, 4); gameinfoWindow.Append(gcImg); intputX += (Settings.widescreen ? gcImg->GetWidth() * .8 : gcImg->GetWidth()) + 5; } if (wheel == 1) { wheelImg = new GuiImage(wheelImgData); wheelImg->SetWidescreen(Settings.widescreen); wheelImg->SetPosition(intputX, inputY); wheelImg->SetAlignment(0, 4); gameinfoWindow.Append(wheelImg); intputX += (Settings.widescreen ? wheelImg->GetWidth() * .8 : wheelImg->GetWidth()) + 5; } if (guitar == 1) { guitarImg = new GuiImage(guitarImgData); guitarImg->SetWidescreen(Settings.widescreen); guitarImg->SetPosition(intputX, inputY); guitarImg->SetAlignment(0, 4); gameinfoWindow.Append(guitarImg); intputX += (Settings.widescreen ? guitarImg->GetWidth() * .8 : guitarImg->GetWidth()) + 5; } if (drums == 1) { drumsImg = new GuiImage(drumsImgData); drumsImg->SetWidescreen(Settings.widescreen); drumsImg->SetPosition(intputX, inputY); drumsImg->SetAlignment(0, 4); gameinfoWindow.Append(drumsImg); intputX += (Settings.widescreen ? drumsImg->GetWidth() * .8 : drumsImg->GetWidth()) + 5; } if (microphone == 1) { microphoneImg = new GuiImage(microphoneImgData); microphoneImg->SetWidescreen(Settings.widescreen); microphoneImg->SetPosition(intputX, inputY); microphoneImg->SetAlignment(0, 4); gameinfoWindow.Append(microphoneImg); intputX += (Settings.widescreen ? microphoneImg->GetWidth() * .8 : microphoneImg->GetWidth()) + 5; } if (zapper == 1) { zapperImg = new GuiImage(zapperImgData); zapperImg->SetWidescreen(Settings.widescreen); zapperImg->SetPosition(intputX, inputY); zapperImg->SetAlignment(0, 4); gameinfoWindow.Append(zapperImg); intputX += (Settings.widescreen ? zapperImg->GetWidth() * .8 : zapperImg->GetWidth()) + 5; } if (wiispeak == 1) { wiispeakImg = new GuiImage(wiispeakImgData); wiispeakImg->SetWidescreen(Settings.widescreen); wiispeakImg->SetPosition(intputX, inputY); wiispeakImg->SetAlignment(0, 4); gameinfoWindow.Append(wiispeakImg); intputX += (Settings.widescreen ? wiispeakImg->GetWidth() * .8 : wiispeakImg->GetWidth()) + 5; } if (nintendods == 1) { nintendodsImg = new GuiImage(nintendodsImgData); nintendodsImg->SetWidescreen(Settings.widescreen); nintendodsImg->SetPosition(intputX, inputY); nintendodsImg->SetAlignment(0, 4); gameinfoWindow.Append(nintendodsImg); intputX += (Settings.widescreen ? nintendodsImg->GetWidth() * .8 : nintendodsImg->GetWidth()) + 5; } /* if (vitalitysensor==1) { vitalitysensorImg = new GuiImage(vitalitysensorImgData); vitalitysensorImg->SetWidescreen(Settings.widescreen); vitalitysensorImg->SetPosition(intputX , inputY); vitalitysensorImg->SetAlignment(0,4); gameinfoWindow.Append(vitalitysensorImg); intputX += (Settings.widescreen ? vitalitysensorImg->GetWidth() * .8 : vitalitysensorImg->GetWidth())+5; } */ if (dancepad == 1) { dancepadImg = new GuiImage(dancepadImgData); dancepadImg->SetWidescreen(Settings.widescreen); dancepadImg->SetPosition(intputX, inputY); dancepadImg->SetAlignment(0, 4); gameinfoWindow.Append(dancepadImg); intputX += (Settings.widescreen ? dancepadImg->GetWidth() * .8 : dancepadImg->GetWidth()) + 5; } if (balanceboard == 1) { balanceboardImg = new GuiImage(balanceboardImgData); balanceboardImg->SetWidescreen(Settings.widescreen); balanceboardImg->SetPosition(intputX, inputY); balanceboardImg->SetAlignment(0, 4); gameinfoWindow.Append(balanceboardImg); intputX += (Settings.widescreen ? balanceboardImg->GetWidth() * .8 : balanceboardImg->GetWidth()) + 5; } // # online players if ((strcmp(gameinfo.wifiplayers, "") != 0) && (strcmp(gameinfo.wifiplayers, "0") != 0)) { wifiplayersImgData = new GuiImageData(wifi1_png); if (atoi(gameinfo.wifiplayers) > 1) { wifiplayersImgData = new GuiImageData(wifi2_png); } if (atoi(gameinfo.wifiplayers) > 2) { wifiplayersImgData = new GuiImageData(wifi4_png); } if (atoi(gameinfo.wifiplayers) > 4) { //wifiplayersImgData= new GuiImageData(wifi6_png); wifiplayersImgData = new GuiImageData(wifi8_png); } /* if (atoi(gameinfo.wifiplayers)>6) { wifiplayersImgData= new GuiImageData(wifi8_png); } */ if (atoi(gameinfo.wifiplayers) > 8) { wifiplayersImgData = new GuiImageData(wifi12_png); } if (atoi(gameinfo.wifiplayers) > 12) { wifiplayersImgData = new GuiImageData(wifi16_png); } if (atoi(gameinfo.wifiplayers) > 16) { wifiplayersImgData = new GuiImageData(wifi32_png); } wifiplayersImg = new GuiImage(wifiplayersImgData); wifiplayersImg->SetWidescreen(Settings.widescreen); wifiplayersImg->SetPosition(intputX, inputY); wifiplayersImg->SetAlignment(0, 4); gameinfoWindow.Append(wifiplayersImg); intputX += (Settings.widescreen ? wifiplayersImg->GetWidth() * .8 : wifiplayersImg->GetWidth()) + 5; } // ratings if (strcmp(gameinfo.ratingtype, "") != 0) { if (strcmp(gameinfo.ratingtype, "ESRB") == 0) { if (strcmp(gameinfo.ratingvalueESRB, "EC") == 0) ratingImgData = new GuiImageData(esrb_ec_png); else if (strcmp(gameinfo.ratingvalueESRB, "E") == 0) ratingImgData = new GuiImageData(esrb_e_png); else if (strcmp(gameinfo.ratingvalueESRB, "E10+") == 0) ratingImgData = new GuiImageData(esrb_eten_png); else if (strcmp(gameinfo.ratingvalueESRB, "T") == 0) ratingImgData = new GuiImageData(esrb_t_png); else if (strcmp(gameinfo.ratingvalueESRB, "M") == 0) ratingImgData = new GuiImageData(esrb_m_png); else if (strcmp(gameinfo.ratingvalueESRB, "AO") == 0) ratingImgData = new GuiImageData(esrb_ao_png); else { ratingImgData = new GuiImageData(norating_png); } } //there are 2 values here cause some countries are stupid and else if (strcmp(gameinfo.ratingtype, "PEGI") == 0) //can't use the same as everybody else { if ((strcmp(gameinfo.ratingvaluePEGI, "3") == 0) || (strcmp(gameinfo.ratingvaluePEGI, "4") == 0)) ratingImgData = new GuiImageData(pegi_3_png); else if ((strcmp(gameinfo.ratingvaluePEGI, "7") == 0) || (strcmp(gameinfo.ratingvaluePEGI, "7") == 0)) ratingImgData = new GuiImageData(pegi_7_png); else if (strcmp(gameinfo.ratingvaluePEGI, "12") == 0) ratingImgData = new GuiImageData(pegi_12_png); else if ((strcmp(gameinfo.ratingvaluePEGI, "16") == 0) || (strcmp(gameinfo.ratingvaluePEGI, "15") == 0)) ratingImgData = new GuiImageData(pegi_16_png); else if (strcmp(gameinfo.ratingvaluePEGI, "18") == 0) ratingImgData = new GuiImageData(pegi_18_png); else { ratingImgData = new GuiImageData(norating_png); } } else if (strcmp(gameinfo.ratingtype, "CERO") == 0) { if (strcmp(gameinfo.ratingvalueCERO, "A") == 0) ratingImgData = new GuiImageData(cero_a_png); else if (strcmp(gameinfo.ratingvalueCERO, "B") == 0) ratingImgData = new GuiImageData(cero_b_png); else if (strcmp(gameinfo.ratingvalueCERO, "C") == 0) ratingImgData = new GuiImageData(cero_c_png); else if (strcmp(gameinfo.ratingvalueCERO, "D") == 0) ratingImgData = new GuiImageData(cero_d_png); else if (strcmp(gameinfo.ratingvalueCERO, "Z") == 0) ratingImgData = new GuiImageData(cero_z_png); else { ratingImgData = new GuiImageData(norating_png); } } else { ratingImgData = new GuiImageData(norating_png); } ratingImg = new GuiImage(ratingImgData); ratingImg->SetWidescreen(Settings.widescreen); ratingImg->SetPosition(-25, inputY); ratingImg->SetAlignment(1, 4); gameinfoWindow.Append(ratingImg); intputX += (Settings.widescreen ? ratingImg->GetWidth() * .8 : ratingImg->GetWidth()) + 5; } // memory info if (showmeminfo) { char meminfotxt[200]; strlcpy(meminfotxt, MemInfo(), sizeof(meminfotxt)); snprintf(linebuf, sizeof(linebuf), "%s", meminfotxt); memTxt = new GuiText(linebuf, 18, ( GXColor ) { 0, 0, 0, 255}); memTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP); memTxt->SetPosition(0, 0); gameinfoWindow.Append(memTxt); } // title int titlefontsize = 25; if (strcmp(gameinfo.title, "") != 0) { snprintf(linebuf, sizeof(linebuf), "%s", gameinfo.title); titleTxt = new GuiText(linebuf, titlefontsize, ( GXColor ) { 0, 0, 0, 255}); titleTxt->SetMaxWidth(350, SCROLL_HORIZONTAL); //while (titleTxt->GetWidth()>250) { titleTxt->SetFontSize(titlefontsize-=2); } titleTxt->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); titleTxt->SetPosition(txtXOffset, 12 + titley); gameinfoWindow.Append(titleTxt); } //date snprintf(linebuf2, sizeof(linebuf2), " "); if (strcmp(gameinfo.day, "") != 0) { snprintf(linebuf2, sizeof(linebuf2), "%s ", gameinfo.day); } if (strcmp(gameinfo.month, "") != 0) { switch (atoi(gameinfo.month)) { case 1: snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Jan" )); break; case 2: snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Feb" )); break; case 3: snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Mar" )); break; case 4: snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Apr" )); break; case 5: snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "May" )); break; case 6: snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "June" )); break; case 7: snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "July" )); break; case 8: snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Aug" )); break; case 9: snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Sept" )); break; case 10: snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Oct" )); break; case 11: snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Nov" )); break; case 12: snprintf(linebuf2, sizeof(linebuf2), "%s%s ", linebuf2, tr( "Dec" )); break; } } if (strcmp(gameinfo.year, "") != 0) { snprintf(linebuf, sizeof(linebuf), "%s : %s%s", tr( "Released" ), linebuf2, gameinfo.year); releasedTxt = new GuiText(linebuf, 16, ( GXColor ) { 0, 0, 0, 255}); if (releasedTxt->GetWidth() > 300) newline = 2; releasedTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); releasedTxt->SetPosition(-17, 12 + indexy); indexy += (20 * newline); newline = 1; gameinfoWindow.Append(releasedTxt); } //publisher if (strcmp(gameinfo.publisher, "") != 0) { snprintf(linebuf, sizeof(linebuf), "%s %s", tr( "Published by" ), gameinfo.publisher); publisherTxt = new GuiText(linebuf, 16, ( GXColor ) { 0, 0, 0, 255}); if (publisherTxt->GetWidth() > 250) newline = 2; publisherTxt->SetMaxWidth(250, WRAP); publisherTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); publisherTxt->SetPosition(-17, 12 + indexy); indexy += (20 * newline); newline = 1; gameinfoWindow.Append(publisherTxt); } //developer if (strcmp(gameinfo.developer, "") != 0 && strcasecmp(gameinfo.developer, gameinfo.publisher) != 0) { snprintf(linebuf, sizeof(linebuf), "%s %s", tr( "Developed by" ), gameinfo.developer); developerTxt = new GuiText(linebuf, 16, ( GXColor ) { 0, 0, 0, 255}); if (developerTxt->GetWidth() > 250) newline = 2; developerTxt->SetMaxWidth(250, WRAP); developerTxt->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); developerTxt->SetPosition(-17, 12 + indexy); indexy += (20 * newline); newline = 1; gameinfoWindow.Append(developerTxt); } //genre int genreY = marginY; genreTxt = new GuiText *[gameinfo.genreCnt + 1]; for (int i = 1; i <= gameinfo.genreCnt; i++) { snprintf(linebuf, sizeof(linebuf), "%s", gameinfo.genresplit[i]); genreTxt[i] = new GuiText(linebuf, 16, ( GXColor ) { 0, 0, 0, 255}); genreTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); genreTxt[i]->SetPosition(205, 12 + genreY); genreY += 20; gameinfoWindow.Append(genreTxt[i]); } //online wifiTxt = new GuiText *[gameinfo.wifiCnt + 1]; for (int i = gameinfo.wifiCnt; i >= 1; i--) { if (strcmp(gameinfo.wififeatures[i], "Nintendods") == 0) { snprintf(linebuf, sizeof(linebuf), "Nintendo DS"); } else { snprintf(linebuf, sizeof(linebuf), "%s", gameinfo.wififeatures[i]); } wifiTxt[i] = new GuiText(linebuf, 16, ( GXColor ) { 0, 0, 0, 255}); wifiTxt[i]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); wifiTxt[i]->SetPosition(215, 200 + wifiY); wifiY -= 20; gameinfoWindow.Append(wifiTxt[i]); } if (strcmp(gameinfo.wififeatures[1], "") != 0) { snprintf(linebuf, sizeof(linebuf), "%s:", tr( "WiFi Features" )); } else { strcpy(linebuf, ""); } wifiTxt[0] = new GuiText(linebuf, 16, ( GXColor ) { 0, 0, 0, 255}); wifiTxt[0]->SetAlignment(ALIGN_LEFT, ALIGN_TOP); wifiTxt[0]->SetPosition(205, 200 + wifiY); gameinfoWindow.Append(wifiTxt[0]); //synopsis int pagesize = 12; if (strcmp(gameinfo.synopsis, "") != 0) { snprintf(linebuf, sizeof(linebuf), "%s", gameinfo.synopsis); synopsisTxt = new Text(linebuf, 16, ( GXColor ) { 0, 0, 0, 255}); synopsisTxt->SetMaxWidth(350); synopsisTxt->SetAlignment(ALIGN_LEFT, ALIGN_TOP); synopsisTxt->SetPosition(0, 0); synopsisTxt->SetLinesToDraw(pagesize); synopsisTxt->Refresh(); dialogBoxImg11 = new GuiImage(&dialogBox1); dialogBoxImg11->SetAlignment(0, 3); dialogBoxImg11->SetPosition(-9, 0); dialogBoxImg22 = new GuiImage(&dialogBox2); dialogBoxImg22->SetAlignment(0, 3); dialogBoxImg22->SetPosition(145, 0); dialogBoxImg33 = new GuiImage(&dialogBox3); dialogBoxImg33->SetAlignment(0, 3); dialogBoxImg33->SetPosition(301, 0); dialogBoxImg44 = new GuiImage(&dialogBox4); dialogBoxImg44->SetAlignment(0, 3); dialogBoxImg44->SetPosition(457, 0); gameinfoWindow2.Append(dialogBoxImg11); gameinfoWindow2.Append(dialogBoxImg22); gameinfoWindow2.Append(dialogBoxImg33); gameinfoWindow2.Append(dialogBoxImg44); txtWindow.Append(synopsisTxt); txtWindow.Append(&upBtn); txtWindow.Append(&dnBtn); coverImg2 = new GuiImage(cover); coverImg2->SetWidescreen(Settings.widescreen); coverImg2->SetPosition(15, 30); gameinfoWindow2.Append(coverImg2); gameinfoWindow2.Append(&txtWindow); } snprintf(linebuf, sizeof(linebuf), "http://wiitdb.com"); //snprintf(linebuf, sizeof(linebuf), tr("Don't bother the USB Loader GX Team about errors in this file.")); wiitdb1Txt = new GuiText(linebuf, 16, ( GXColor ) { 0, 0, 0, 255}); wiitdb1Txt->SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); wiitdb1Txt->SetPosition(40, -15); gameinfoWindow.Append(wiitdb1Txt); snprintf(linebuf, sizeof(linebuf), tr( "If you don't have WiFi, press 1 to get an URL to get your WiiTDB.zip" )); wiitdb2Txt = new GuiText(linebuf, 14, ( GXColor ) { 0, 0, 0, 255}); wiitdb2Txt->SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); wiitdb2Txt->SetPosition(202, -15); gameinfoWindow.Append(wiitdb2Txt); snprintf(linebuf, sizeof(linebuf), " "); wiitdb3Txt = new GuiText(linebuf, 14, ( GXColor ) { 0, 0, 0, 255}); wiitdb3Txt->SetAlignment(ALIGN_LEFT, ALIGN_BOTTOM); wiitdb3Txt->SetPosition(202, -4); gameinfoWindow.Append(wiitdb3Txt); gameinfoWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_IN, 100); GuiTrigger trigZ; trigZ.SetButtonOnlyTrigger(-1, WPAD_NUNCHUK_BUTTON_Z | WPAD_CLASSIC_BUTTON_ZL, PAD_TRIGGER_Z); GuiButton screenShotBtn(0, 0); screenShotBtn.SetPosition(0, 0); screenShotBtn.SetTrigger(&trigZ); gameinfoWindow.Append(&screenShotBtn); HaltGui(); //mainWindow->SetState(STATE_DISABLED); mainWindow->Append(&gameinfoWindow); mainWindow->ChangeFocus(&gameinfoWindow); ResumeGui(); bool savedURL = false; while (choice == -1) { VIDEO_WaitVSync(); if (shutdown == 1) { wiilight(0); Sys_Shutdown(); } else if (reset == 1) Sys_Reboot(); else if ((backBtn.GetState() == STATE_CLICKED) || (backBtn.GetState() == STATE_HELD)) { backBtn.ResetState(); if (page == 1) { choice = 1; if (synopsisTxt) delete synopsisTxt; synopsisTxt = NULL; break; } else if (page == 2) { HaltGui(); gameinfoWindow2.Remove(&nextBtn); gameinfoWindow2.Remove(&backBtn); gameinfoWindow2.Remove(&homeBtn); gameinfoWindow2.Remove(&screenShotBtn); gameinfoWindow2.SetVisible(false); gameinfoWindow.SetVisible(true); gameinfoWindow.Append(&backBtn); gameinfoWindow.Append(&nextBtn); gameinfoWindow.Append(&homeBtn); gameinfoWindow.Append(&screenShotBtn); mainWindow->Remove(&gameinfoWindow2); ResumeGui(); page = 1; } } else if (((nextBtn.GetState() == STATE_CLICKED) || (nextBtn.GetState() == STATE_HELD)) && (strcmp( gameinfo.synopsis, "") != 0)) { nextBtn.ResetState(); if (page == 1) { HaltGui(); gameinfoWindow.Remove(&nextBtn); gameinfoWindow.Remove(&backBtn); gameinfoWindow.Remove(&homeBtn); gameinfoWindow.Remove(&screenShotBtn); gameinfoWindow.SetVisible(false); gameinfoWindow2.SetVisible(true); coverImg->SetPosition(15, 30); gameinfoWindow2.Append(&nextBtn); gameinfoWindow2.Append(&backBtn); gameinfoWindow2.Append(&homeBtn); gameinfoWindow2.Append(&screenShotBtn); mainWindow->Append(&gameinfoWindow2); ResumeGui(); page = 2; } else { HaltGui(); gameinfoWindow2.Remove(&nextBtn); gameinfoWindow2.Remove(&backBtn); gameinfoWindow2.Remove(&homeBtn); gameinfoWindow2.Remove(&screenShotBtn); gameinfoWindow2.SetVisible(false); gameinfoWindow.SetVisible(true); gameinfoWindow.Append(&backBtn); gameinfoWindow.Append(&nextBtn); gameinfoWindow.Append(&homeBtn); gameinfoWindow.Append(&screenShotBtn); mainWindow->Remove(&gameinfoWindow2); ResumeGui(); page = 1; } } else if ((upBtn.GetState() == STATE_CLICKED || upBtn.GetState() == STATE_HELD) && page == 2) { synopsisTxt->PreviousLine(); usleep(60000); if (!((ButtonsHold() & WPAD_BUTTON_UP) || (ButtonsHold() & PAD_BUTTON_UP))) upBtn.ResetState(); } else if ((dnBtn.GetState() == STATE_CLICKED || dnBtn.GetState() == STATE_HELD) && page == 2) { synopsisTxt->NextLine(); usleep(60000); if (!((ButtonsHold() & WPAD_BUTTON_DOWN) || (ButtonsHold() & PAD_BUTTON_DOWN))) dnBtn.ResetState(); } else if (homeBtn.GetState() == STATE_CLICKED) { if (page == 1) { choice = 2; if (synopsisTxt) delete synopsisTxt; synopsisTxt = NULL; break; } else if (page == 2) { HaltGui(); gameinfoWindow2.SetVisible(false); gameinfoWindow.SetVisible(true); mainWindow->Remove(&gameinfoWindow2); ResumeGui(); page = 1; } } else if (urlBtn.GetState() == STATE_CLICKED && !savedURL) { snprintf(linebuf, sizeof(linebuf), tr( "Please wait..." )); wiitdb2Txt->SetText(linebuf); gameinfoWindow.Append(wiitdb2Txt); if (save_XML_URL()) { snprintf(linebuf, sizeof(linebuf), tr( "Your URL has been saved in %sWiiTDB_URL.txt." ), Settings.update_path); wiitdb2Txt->SetText(linebuf); gameinfoWindow.Append(wiitdb2Txt); snprintf(linebuf, sizeof(linebuf), tr( "Paste it into your browser to get your WiiTDB.zip." )); wiitdb3Txt->SetText(linebuf); gameinfoWindow.Append(wiitdb3Txt); savedURL = true; } else { snprintf(linebuf, sizeof(linebuf), tr( "Could not save." )); wiitdb2Txt->SetText(linebuf); gameinfoWindow.Append(wiitdb2Txt); } urlBtn.ResetState(); } else if (screenShotBtn.GetState() == STATE_CLICKED) { gprintf("\n\tscreenShotBtn clicked"); screenShotBtn.ResetState(); ScreenShot(); gprintf("...It's easy, mmmmmmKay"); } } if (page == 1) { gameinfoWindow.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 100); while (gameinfoWindow.GetEffect() > 0) usleep(50); HaltGui(); mainWindow->Remove(&gameinfoWindow); mainWindow->SetState(STATE_DEFAULT); delete playersImgData; delete playersImg; delete wifiplayersImgData; delete wifiplayersImg; delete ratingImg; delete classiccontrollerImg; delete nunchukImg; delete guitarImg; delete drumsImg; delete dancepadImg; delete motionplusImg; delete wheelImg; delete balanceboardImg; delete microphoneImg; delete zapperImg; delete wiispeakImg; delete nintendodsImg; //delete vitalitysensorImg; delete gcImg; delete dialogBoxImg1; delete dialogBoxImg2; delete dialogBoxImg3; delete dialogBoxImg4; delete dialogBoxImg11; delete dialogBoxImg22; delete dialogBoxImg33; delete dialogBoxImg44; delete coverImg; delete coverImg2; delete classiccontrollerImgData; delete nunchukImgData; delete guitarImgData; delete drumsImgData; delete motionplusImgData; delete wheelImgData; delete balanceboardImgData; delete dancepadImgData; delete microphoneImgData; delete zapperImgData; delete wiispeakImgData; delete nintendodsImgData; //delete vitalitysensorImgData; delete gamecubeImgData; delete ratingImgData; delete cover; delete releasedTxt; delete publisherTxt; delete developerTxt; delete titleTxt; delete synopsisTxt; delete wiitdb1Txt; delete wiitdb2Txt; delete wiitdb3Txt; delete memTxt; if (gameinfo.genreCnt > 0) { for (int i = 1; i <= gameinfo.genreCnt; i++) { delete genreTxt[i]; } } if (gameinfo.wifiCnt > 0) { for (int i = 0; i <= gameinfo.wifiCnt; i++) { delete wifiTxt[i]; } } ResumeGui(); } else { gameinfoWindow2.SetEffect(EFFECT_SLIDE_LEFT | EFFECT_SLIDE_OUT, 100); while (gameinfoWindow2.GetEffect() > 0) usleep(50); HaltGui(); mainWindow->Remove(&gameinfoWindow2); mainWindow->SetState(STATE_DEFAULT); ResumeGui(); } if (savedURL) return 3; return choice; /* File not found */ } else { return -1; } } bool save_gamelist(int txt) // save gamelist { mainWindow->SetState(STATE_DISABLED); char tmp[200]; sprintf(tmp, "%s", Settings.update_path); struct stat st; if (stat(tmp, &st) != 0) { mkdir(tmp, 0777); } FILE *f; sprintf(tmp, "%sGameList.txt", Settings.update_path); if (txt == 1) sprintf(tmp, "%sGameList.csv", Settings.update_path); f = fopen(tmp, "w"); if (!f) { sleep(1); mainWindow->SetState(STATE_DEFAULT); return false; } //make sure that all games are added to the gamelist gameList.LoadUnfiltered(); f32 size = 0.0; f32 freespace, used; int i; WBFS_DiskSpace(&used, &freespace); fprintf(f, "# USB Loader Has Saved this file\n"); fprintf(f, "# This file was created based on your list of games and language settings.\n"); fclose(f); /* Closing and reopening because of a write issue we are having right now */ f = fopen(tmp, "w"); if (txt == 0) { fprintf(f, "# USB Loader Has Saved this file\n"); fprintf(f, "# This file was created based on your list of games and language settings.\n\n"); fprintf(f, "%.2fGB %s %.2fGB %s\n\n", freespace, tr( "of" ), (freespace + used), tr( "free" )); fprintf(f, "ID Size(GB) Name\n"); for (i = 0; i < gameList.size(); i++) { struct discHdr* header = gameList[i]; WBFS_GameSize(header->id, &size); if (i < 500) { fprintf(f, "%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2], header->id[3], header->id[4], header->id[5]); fprintf(f, " [%.2f] ", size); fprintf(f, " %s", get_title(header)); } fprintf(f, "\n"); } } else { fprintf(f, "\"ID\",\"Size(GB)\",\"Name\"\n"); for (i = 0; i < gameList.size(); i++) { struct discHdr* header = gameList[i]; WBFS_GameSize(header->id, &size); if (i < 500) { fprintf(f, "\"%c%c%c%c%c%c\",\"%.2f\",\"%s\"\n", header->id[0], header->id[1], header->id[2], header->id[3], header->id[4], header->id[5], size, get_title(header)); //fprintf(f, "\"%.2f\",", size); //fprintf(f, "\"%s\"",get_title(header)); } //fprintf(f, "\n"); } } fclose(f); gameList.FilterList(); mainWindow->SetState(STATE_DEFAULT); return true; } bool save_XML_URL() // save xml url as as txt file for people without wifi { char tmp[200]; sprintf(tmp, "%s", Settings.update_path); struct stat st; if (stat(tmp, &st) != 0) { mkdir(tmp, 0777); } FILE *f; sprintf(tmp, "%sWiiTDB_URL.txt", Settings.update_path); f = fopen(tmp, "w"); if (!f) { sleep(1); return false; } char XMLurl[3540]; build_XML_URL(XMLurl, sizeof(XMLurl)); fprintf(f, "# USB Loader Has Saved this file\n"); fprintf(f, "# This URL was created based on your list of games and language settings.\n"); fclose(f); // Closing and reopening because of a write issue we are having right now f = fopen(tmp, "w"); fprintf(f, "# USB Loader Has Saved this file\n"); fprintf(f, "# This URL was created based on your list of games and language settings.\n"); fprintf(f, "# Copy and paste this URL into your web browser and you should get a zip file that will work for you.\n"); fprintf(f, "%s\n\n\n ", XMLurl); fclose(f); return true; } void MemInfoPrompt() { char meminfotxt[200]; strlcpy(meminfotxt, MemInfo(), sizeof(meminfotxt)); WindowPrompt(0, meminfotxt, tr( "OK" )); } void build_XML_URL(char *XMLurl, int XMLurlsize) { gameList.LoadUnfiltered(); // NET_BUFFER_SIZE in http.c needs to be set to size of XMLurl + headerformat char url[3540]; char filename[10]; snprintf(url, sizeof(url), "http://wiitdb.com/wiitdb.zip?LANG=%s&ID=", Settings.db_language); int i; for (i = 0; i < gameList.size(); i++) { struct discHdr* header = gameList[i]; if (i < 500) { snprintf(filename, sizeof(filename), "%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2], header->id[3], header->id[4], header->id[5]); strncat(url, filename, 6); if ((i != gameList.size() - 1) && (i < 500)) strncat(url, ",", 1); } } strlcpy(XMLurl, url, XMLurlsize); gameList.FilterList(); }