From 4d6e0fe4126f2c01ccee336ff116352ad1b6482f Mon Sep 17 00:00:00 2001 From: giantpune Date: Tue, 29 Sep 2009 08:09:09 +0000 Subject: [PATCH] Free up ~24KB for every 150 games installed. Add button to mount DVD drive. Not completely tested, but somewhat. *Tested and working* retail Wii DVD Wii backup Wii backup w/ alt dol (redsteel) Wii backup w/ alt dol & ocarina (redsteel) Wii backup w/ alt dol & WiiRD Retail & Backup forcing video modes Saving individual settings for games on DVD (only Wii as BC is loaded before any settings would be used) Display disc images for DVD games Loading GC games retail & backup (w/ working MIOS patch installed) I did change some stuff after testing GC so it might be broken. Theme stuff for the button is not tested and I'm not quite up to speed with ardi's changes to the theme stuff so it might not work. Changed images are not compressed or optimized. --- gui.pnproj | 2 +- gui.pnps | 2 +- source/filelist.h | 3 + source/images/arrangeCarousel.png | Bin 1868 -> 4414 bytes source/images/dvd.png | Bin 0 -> 4937 bytes source/menu.cpp | 124 +++++++++++++++++++++++------- source/prompts/DiscBrowser.cpp | 80 +++++++++++++++---- source/prompts/DiscBrowser.h | 1 + source/prompts/PromptWindows.cpp | 36 +++++---- source/settings/Settings.cpp | 22 ++++-- source/settings/cfg.c | 27 +++++++ source/settings/cfg.h | 6 ++ source/usbloader/alternatedol.c | 20 ++++- source/usbloader/apploader.c | 24 +++++- source/usbloader/disc.c | 2 + 15 files changed, 281 insertions(+), 68 deletions(-) create mode 100644 source/images/dvd.png diff --git a/gui.pnproj b/gui.pnproj index c65840bb..04a3e2a1 100644 --- a/gui.pnproj +++ b/gui.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/gui.pnps b/gui.pnps index 3c3ba32e..e865af66 100644 --- a/gui.pnps +++ b/gui.pnps @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/source/filelist.h b/source/filelist.h index 993f3f9f..06feaac1 100644 --- a/source/filelist.h +++ b/source/filelist.h @@ -504,4 +504,7 @@ extern const u32 pegi_18_png_size; extern const u8 usbport_png[]; extern const u32 usbport_png_size; +extern const u8 dvd_png[]; +extern const u32 dvd_png_size; + #endif diff --git a/source/images/arrangeCarousel.png b/source/images/arrangeCarousel.png index b76d5d8baea98041fc68f9e06f2d5d7fa1fb73b4..48e502435b356fc38ef8b8c9714e4aadadac5086 100644 GIT binary patch delta 4411 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 BYPbLZ delta 1845 zcmV-52g>-qBFqkuEPoOJ01FZU(%pXi000L5Nkl!actMI z5>={YNvSN!8fz|^bJ=_K;mnLBOC!6Kge>?tx5fF^`PN!{?|-wEi11Z5yRfkE!vohh zzXVPPw18b;2dLL-wRn)T`qSM{CCC@B*$j#E0Gz1lOA3C}?b)4ZzrEdQwjS?o|K~3& z|NQuuz^A~ITCJ8G3GlCX7iFkaA{XRIynk8#m-9QpNvrgE*lF)>tuFuO?u~!^1X!un zYT=;(Ke%;I3V)?xf_#CvtKk0~pbYYPc1J4(K_rxbbQY1b29;A=Rc_QaYM3IP6`7`t1ow@SO9|1E93k$jzppD{$ zDDfC4FH}&Docxc%Uo29)B<3MNlXZ!4}K&qf=+UUEf$;0`_cUze6^PF^Q)c9qDqEb8IX>;L+j(8ueXJ zaO%`4Hg~qk<#K=mYuVn~!5EFwnjn`WjAEiF;_vUjOL1h3OeV|F=ok~T=djt_z{GnI z^5du9s&B0Rx*K3fE{xEzLml|ao|K)&E}IWmXn!{9n2bd$jn*3Rf_TANOBD9TS%uLC zYYZLV!D>z1YO~X50+0y;lu}I0oyTUf1B0}M(ivbFz-p!F;h=RIdu*>gWP9Tg$|WdK zC_u!c1VjYyJw_{>i}Bv0wZ<5Y^Nu8r(I$fcN^3-fI1E|;^ggZn4yAIHVx>xPbPTQa zA%AX@%@u(Fz$!o~^-MkIc=*X3KD%=hmpF_uRI63I_kABPsd^%k)~g4^qY#YN#Bq$E zP%8B~X#1@O?d3gSiSe0P=D+bR3Z>!05~e&V4N#?LeF2pxi8>gi(KdbHl7vjgkT{oS z9*>Am$(7)|OO;Zo5^)p*g2>=uOKXF%hJQ>p!}FDO@LDUaP+FmTFqSjtE-*Siffo=D zVHgqw0p9zx^&}-%2wL?5@@S*+-Vw)fS`L0NY$ii>YMP)>c*fnu!CufDNU>51Wemmg z7?sJ>c%L9RI$?((ACM#o&I?{rIPcNM5=9XTMK)sy!?3HUM{on+(bh0rsUGI;;eU|Q z2b!c0W0;tlrZ_x`c)=wJif$uymFp>KjY(@xz}gI97WcluFyO63Ye#nMsk=NeXP zjtkIIDpxpv`4yb^co8~bNH&|rJKrZ!3Zf`NE67-bbB-iVkZvQLgfsIOu{LvTaEDT? zv_4j58|0b2c$s{@fOt>T>5$I{IDc`ecnH>5qA*<@<#IXNtrp#}2=RU(j4_N&Ori&H z9}ZB-ks|HENrju&ZXm`NOvV7;GD;3i%SxmcX+^w9|)xllV|71*niAG-fo)+ zfbC6P=DE?lSD}^3)6AZ~z}Ch(Vb~!E^3WY#(xJqW3j#WwD4k8zG4DBGBV!e+lT&1K zxua8S*L)l`fewH*Mq`vZK0pAQ;q=TbBcr2qT21nW0^$W@G`%%lI_)JW0q`d-3P-CI zhRbEFF#~<#c4HmbO9SlApMNRgF=jNwV`I!-yu|&FZj#Mr*;wBoo6Qi%G5JEC;z*gH zQjvDEN#kjqcDsd3+>vPxV6-w$5CntyfcnPjALuSvZ7;n86$Es?z@;l!*<4>^bA63$ zE=!?UVsd(hxvzbl@u_L@g(1TIHv6q6jruNYD@&{{EzxQ=5T8zY<$v)BCZ}h}X0rp+ z+uYe&-dSCFpY+!ht6^{r_9N7cj8&OFJI9mFO)k9hDpy{6opN>jkee+HGgKO;GBL^Y zxp}U=`4&%iws>&+7N6a}$5?fo(Q;*Add2%>?e49glK$N}0IQB^?c+>kGF*A>8n3?o z20^}XqA%KDY#xA#>3_3SCQozq+8gO&v{)F(_3+;9ceWp`yaPP#f3!6Qqh6pOfYua; zM^5$`U?!WRGI46)a}jZC_wW2}`R4T>1CMI8T7Ma2L0(G1FUs~CdyiK>zWIx_PwxJl zG_}#e=eAfZkqdH1R@7glbz05sc76Bp_WJ6dmv4XgD`1fUTP`2=!5`my`@r>=wRzMA j>cAE++C2KIZ@>K)q2Wq>8YRGO00000NkvXXu0mjfAI*~` diff --git a/source/images/dvd.png b/source/images/dvd.png new file mode 100644 index 0000000000000000000000000000000000000000..35f78a5dbb3eddb53f5ef71c078d5ea2ae9f809b GIT binary patch literal 4937 zcmV-P6SnM$P)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000PdNklg#yS6qlrehoZJZg$Mo!gv298 zh`hifN_gOj7lhKLAcP7nFQBR*TGU3pq^Q`n9Xn29J6`X`Uhih_XLrxc@X+jXcD+u^ zTSr>$nR8}-zwdm1m-)>Itug%F=K-w7e;wusL6&A!$eAw*YY564KL zEQH8utq*_)3kwU4qX3Ha^>ytP*r}jf|EO=>TDL_wj*}^u%X^tj=DnLYZ(ak|f$YM< zf_n(y_V%`Z6gx*T_+`L#TaaNGZF3#R$?fdy{OQJx8@~kZE-Wn6+OXWdeOr44J<6n= z!0v2rvb3_w+{_7jdwZ$7F6q=RpDi!(@=Gr=I55yA*E_%2mr|mX(wm!`e_LE!{0XqO zu&_{XGx7h+&IjvD*pJV0X8Z)l%>Y7ylAr`w7ARo3a=_B!zZohiW+$hQl%dLI}_TB>)6v>Kyo7%=sBI za+BS+-{r#8#Y1LpHYp{p>oPhz`kibx`$0OL{tb`=Fr<{N0ZJ)c*KN{{QmXZB_09@A z=TM!RGcJrb_qVO_($e1E!my&rIZLEP)b=-Q&Zm; zLQG%2eAxsrngg}gZU5f)sdN(Y>_@2HJxb0#4YiMAkE*Csq>j=OiA3X~luJ(3C{n~Q z_HY|}9JqHGdN#*W>dlr}z4E1$trQiBL}rGDhQ0-a0W8OHx<+l&tV$^|*?)4pavv-o zX}_eVEDXbsCPp3~4QYV@p+TX^nN=F%KBi7nCqvB0Gkj2DAQ53{`8vmD&bG<-np`PG ze}DfA>2&%JK*4GbY(|#XN3_-?ckZIf4GRB}B*v=Plaif?#8KcQ#seas0~QLDz!91Q zawzU0NfGCOle;A%+f^F*3UM+m0-CzKx&ea0;201Cu)OHK;oqE)Btx>CV`4)vnv)FV zON3^t+)30Z3!9wir&#x)oC=m@Qwo^m#TLTYWW1i@%2Q?b7rW-k?`AhW#ryG#7+ z=f5~)wI&wZwj)3QzydG~qZMINN=(xPAeYaw*}K69ffRlDD6`oRXAXQkkuG!giETC} zE%vvfTz&m5l54jJg~H5z<7tLof|1&7PAumsuJ*8zjLUr;aiNIcG|LommJSe zbY-wfIlvDu{QzsKf-fOxj0dUo#wb+=D69>h{ZBWv?)G`Ii2Xz`UdMKTF-Kt3#faNu-)*90^TZ5Gfu(?vg5@1&Kiq%lN54g%(_5GjX;40JK8w3Q*~yNHU^I>p>$Xv22F%zg3rJ*4SJMj$dH_# z^iy_%*gikGT#k4=j%k`~Z{NcZ2D1Y_*ySJvyGqRwR2op%3MC;NIvkANNNxk@4G`}n zfJPkbbAy<+z!wq3dIW<}i!tG2(i$P`Oz`@(>kJMg7#tcTpU+cwYMeMV$aC`}Opg`G zGALiU$px3Iqco9;NpXgPo4qT1i7PeLg}kCJ4rZ1pN`hjR1p{9-{tUhQ0qU|F|vlC zEBFEqiF*ljv4~a4P}LP0CllPyl-odbmUmvzRwpR$N7FQ!zCTA{q<~NO={JV)2Z99S ziUebr)(8!MoXL?E_q$WRT|NEkGff=FBKwK?j`H)bKIKaYcGGZYpvN) z5QHvlKFUjHn+spb5teMjMk@kwK(CLfnlqpnMpn#xG!8MkttZ>L%ER zjS<`;KT*Wq3vyh}5ZoJ~Z=$bjf!us{UAF`{57{(Yxv%-$^aIm0iA7@!<%SWqL9`D> zYZLfG!x+&JQ5j@N1_)w;p)rLfj-L@7!#2WL_Aq{Pf?g|zH6yTzbN;c5`2BtYfdD?A z53hb91g2?HtyYslh(e3Oqs|h|3D2Fs$n~4=Gdes$E#$}Tv#|-#qkKg0VG6E#x z#t3MO02Y=oF?hIt8Uj<8gt3XK5W)%&4iBSJVJ7#_Fg1RxO=gpTX5X?ba=F}{ot>Sx zfpS|O{4yuBvyVT;+KpRO5`Jb*%@H>u*fjwS1A#zm5QZQcj4)={RI63;AFXoX*pv9j z{D%^8=Q&zy?XIq_{`%pWM79M+w_PtQHmb~y5yvbpy+^(`+izmZHP-_Tm;TM?d0rSwtJ)NRGx-aTqRebgM! zZG>D~Tl?$BAAfwQ^Vn&1R??lqIup54iq63DDpX3*tpM@LY5psvs8lL@OG`_ytgo;C z_MvI(ZFe(XP@U1$t-9!pyv|MEYqD;v3Lz+$%b8-axR*>O|FyWd_pI4pm0~+W;g`0UiMRLWoCS9(~oX-~KxQSNaTMseXRb00000NkvXX Hu0mjfvZ+CI literal 0 HcmV?d00001 diff --git a/source/menu.cpp b/source/menu.cpp index 720adcf0..72e8ed3d 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -64,6 +64,9 @@ float gamesize; int currentMenu; int idiotFlag=-1; char idiotChar[50]; +u8 dvdMounted=0; +struct discHdr *dvdheader = NULL; + /*** Variables used only in menu.cpp ***/ static GuiImage * coverImg = NULL; @@ -76,6 +79,7 @@ static int ExitRequested = 0; static char gameregion[7]; static bool altdoldefault = true; + /*** Extern variables ***/ extern FreeTypeGX *fontClock; extern u8 shutdown; @@ -209,15 +213,16 @@ void ExitGUIThreads() { } void rockout(int f = 0) { + HaltGui(); int num=(f==2?-1:gameSelected); char imgPath[100]; #ifdef HW_RVL - if (!(strcasestr(get_title(&gameList[num]),"guitar")|| + if ((!(strcasestr(get_title(&gameList[num]),"guitar")|| strcasestr(get_title(&gameList[num]),"band")|| strcasestr(get_title(&gameList[num]),"rock")|| - f==1)) { + f==1))||dvdMounted) { for (int i = 0; i < 4; i++) delete pointer[i]; snprintf(imgPath, sizeof(imgPath), "%splayer1_point.png", CFG.theme_path); @@ -299,11 +304,11 @@ GuiImageData *LoadCoverImage(struct discHdr *header, bool Prefere3D, bool noCove /**************************************************************************** * MenuDiscList ***************************************************************************/ -GuiButton *Toolbar[7]; +GuiButton *Toolbar[8]; void DiscListWinUpdateCallback(void * e) { GuiWindow *w = (GuiWindow *)e; - for(int i=0; i<7; ++i) + for(int i=0; i<8; ++i) { if(Toolbar[i]->GetState() == STATE_SELECTED) { @@ -328,7 +333,11 @@ int MenuDiscList() { char IDfull[7]; u32 covert = 0; char imgPath[100]; - + char dvdID[8]; + if (!dvdheader) + dvdheader = new struct discHdr; + + WDVD_GetCoverStatus(&covert); u32 covertOld=covert; @@ -424,6 +433,8 @@ int MenuDiscList() { GuiImageData imgarrangeCarousel(imgPath, arrangeCarousel_png); // snprintf(imgPath, sizeof(imgPath), "%sarrangeCarousel_gray.png", CFG.theme_path); // GuiImageData imgarrangeCarousel_gray(imgPath, arrangeCarousel_gray_png); + snprintf(imgPath, sizeof(imgPath), "%sdvd.png", CFG.theme_path); + GuiImageData imgdvd(imgPath, dvd_png); snprintf(imgPath, sizeof(imgPath), "%sbrowser.png", CFG.theme_path); GuiImageData homebrewImgData(imgPath, browser_png); @@ -608,6 +619,18 @@ int MenuDiscList() { GuiButton carouselBtn(&carouselBtnImg_g,&carouselBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_carousel_x, THEME.gamelist_carousel_y, &trigA, &btnSoundOver, &btnClick,1, &carouselBtnTT, 15, 52, 1, 3); carouselBtn.SetAlpha(180); + GuiTooltip dvdBtnTT(tr("Mount DVD drive")); + if (Settings.wsprompt == yes) + dvdBtnTT.SetWidescreen(CFG.widescreen); + dvdBtnTT.SetAlpha(THEME.tooltipAlpha); + GuiImage dvdBtnImg(&imgdvd); + dvdBtnImg.SetWidescreen(CFG.widescreen); + GuiImage dvdBtnImg_g(dvdBtnImg); //dvdBtnImg_g.SetGrayscale(); +// GuiImage carouselBtnImg_g(&imgarrangeCarousel_gray); + dvdBtnImg_g.SetWidescreen(CFG.widescreen); + GuiButton dvdBtn(&dvdBtnImg_g,&dvdBtnImg_g, ALIGN_LEFT, ALIGN_TOP, THEME.gamelist_dvd_x, THEME.gamelist_dvd_y, &trigA, &btnSoundOver, &btnClick,1, &dvdBtnTT, 15, 52, 1, 3); + dvdBtn.SetAlpha(180); + GuiTooltip homebrewBtnTT(tr("Homebrew Launcher")); if (Settings.wsprompt == yes) homebrewBtnTT.SetWidescreen(CFG.widescreen); @@ -664,6 +687,7 @@ int MenuDiscList() { listBtn.SetPosition(THEME.gamelist_list_x, THEME.gamelist_list_y); gridBtn.SetPosition(THEME.gamelist_grid_x, THEME.gamelist_grid_y); carouselBtn.SetPosition(THEME.gamelist_carousel_x, THEME.gamelist_carousel_y); + dvdBtn.SetPosition(THEME.gamelist_dvd_x, THEME.gamelist_dvd_y); } else if(Settings.gameDisplay==grid) { favoriteBtn.SetPosition(THEME.gamegrid_favorite_x, THEME.gamegrid_favorite_y); searchBtn.SetPosition(THEME.gamegrid_search_x, THEME.gamegrid_search_y); @@ -672,6 +696,7 @@ int MenuDiscList() { listBtn.SetPosition(THEME.gamegrid_list_x, THEME.gamegrid_list_y); gridBtn.SetPosition(THEME.gamegrid_grid_x, THEME.gamegrid_grid_y); carouselBtn.SetPosition(THEME.gamegrid_carousel_x, THEME.gamegrid_carousel_y); + dvdBtn.SetPosition(THEME.gamegrid_dvd_x, THEME.gamegrid_dvd_y); } else if(Settings.gameDisplay==carousel) { favoriteBtn.SetPosition(THEME.gamecarousel_favorite_x, THEME.gamecarousel_favorite_y); searchBtn.SetPosition(THEME.gamecarousel_search_x, THEME.gamecarousel_favorite_y); @@ -680,6 +705,7 @@ int MenuDiscList() { listBtn.SetPosition(THEME.gamecarousel_list_x, THEME.gamecarousel_list_y); gridBtn.SetPosition(THEME.gamecarousel_grid_x, THEME.gamecarousel_grid_y); carouselBtn.SetPosition(THEME.gamecarousel_carousel_x, THEME.gamecarousel_carousel_y); + dvdBtn.SetPosition(THEME.gamecarousel_dvd_x, THEME.gamecarousel_dvd_y); } @@ -778,6 +804,8 @@ int MenuDiscList() { Toolbar[5] = &gridBtn; w.Append(&carouselBtn); Toolbar[6] = &carouselBtn; + w.Append(&dvdBtn); + Toolbar[7] = &dvdBtn; w.SetUpdateCallback(DiscListWinUpdateCallback); // End Toolbar @@ -1255,6 +1283,19 @@ int MenuDiscList() { menu = MENU_DISCLIST; break; } + } + else if (dvdBtn.GetState() == STATE_CLICKED) { + dvdMounted=DiscMount(dvdID); + dvdheader->id[0]=dvdID[0]; + dvdheader->id[1]=dvdID[1]; + dvdheader->id[2]=dvdID[2]; + dvdheader->id[3]=dvdID[3]; + dvdheader->id[4]=dvdID[4]; + dvdheader->id[5]=dvdID[5]; + + dvdBtn.ResetState(); + rockout(1); + //break; } if (Settings.gameDisplay==grid) { int selectimg; @@ -1384,31 +1425,36 @@ int MenuDiscList() { } } - if ((gameSelected >= 0) && (gameSelected < (s32)gameCnt)) { + if (((gameSelected >= 0) && (gameSelected < (s32)gameCnt)) || dvdMounted) { if(searchBar) { HaltGui(); mainWindow->Remove(searchBar); ResumeGui(); } - rockout(); - struct discHdr *header = &gameList[gameSelected]; - WBFS_GameSize(header->id, &size); - if (strlen(get_title(header)) < (MAX_CHARACTERS + 3)) { - sprintf(text, "%s", get_title(header)); - } else { - strlcpy(text, get_title(header), MAX_CHARACTERS+1); - text[MAX_CHARACTERS] = '\0'; - strcat(text, "..."); - } + rockout(); + struct discHdr *header = (dvdMounted?dvdheader:&gameList[gameSelected]); + // struct discHdr *header = dvdheader:&gameList[gameSelected]); + if (!dvdMounted)//only get this stuff it we are booting a game from USB + { + WBFS_GameSize(header->id, &size); + if (strlen(get_title(header)) < (MAX_CHARACTERS + 3)) { + sprintf(text, "%s", get_title(header)); + } else { + strncpy(text, get_title(header), MAX_CHARACTERS); + text[MAX_CHARACTERS] = '\0'; + strncat(text, "...", 3); + } + } //check if alt Dol and gct file is present FILE *exeFile = NULL; char nipple[100]; - header = &gameList[gameSelected]; //reset header + header = (dvdMounted?dvdheader:&gameList[gameSelected]); //reset header snprintf (IDfull,sizeof(IDfull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); struct Game_CFG* game_cfg = CFG_get_game_opt(header->id); - if (game_cfg) { + + if (game_cfg) { alternatedol = game_cfg->loadalternatedol; ocarinaChoice = game_cfg->ocarina; } else { @@ -1518,7 +1564,7 @@ int MenuDiscList() { menu = MENU_EXIT; } else if (choice == 2) { - wiilight(0); + wiilight(0); HaltGui(); if (Settings.gameDisplay==list) mainWindow->Remove(gameBrowser); else if (Settings.gameDisplay==grid) mainWindow->Remove(gameGrid); @@ -1527,7 +1573,7 @@ int MenuDiscList() { ResumeGui(); //re-evaluate header now in case they changed games while on the game prompt - header = &gameList[gameSelected]; + header = (dvdMounted?dvdheader:&gameList[gameSelected]); int settret = GameSettings(header); /* unneeded for now, kept in case database gets a separate language setting //menu = MENU_DISCLIST; // refresh titles (needed if the language setting has changed) @@ -1546,7 +1592,7 @@ int MenuDiscList() { rockout(2); } - else if (choice == 3) { //WBFS renaming + else if (choice == 3 && !dvdMounted) { //WBFS renaming wiilight(0); //re-evaluate header now in case they changed games while on the game prompt header = &gameList[gameSelected]; @@ -1563,6 +1609,7 @@ int MenuDiscList() { } } else if (choice == 0) { rockout(2); + dvdMounted =0; if (Settings.gameDisplay==list) { gameBrowser->SetFocus(1); } else if (Settings.gameDisplay==grid) { @@ -1600,7 +1647,7 @@ int MenuDiscList() { // set alt dol default if (menu == MENU_EXIT && altdoldefault) { - struct discHdr *header = &gameList[gameSelected]; + struct discHdr *header = (dvdMounted?dvdheader:&gameList[gameSelected]); struct Game_CFG* game_cfg = CFG_get_game_opt(header->id); // use default only if no alt dol was selected manually if (game_cfg) { @@ -1640,6 +1687,8 @@ int MenuDiscList() { gameGrid = NULL; delete gameCarousel; gameCarousel = NULL; + //delete dvdheader; + //dvdheader = NULL; ResumeGui(); return menu; } @@ -2113,7 +2162,12 @@ int MainMenu(int menu) { } //MemInfoPrompt(); - + if (dvdMounted) + { + char tmp[30]; + sprintf(tmp,"boot method --> %i",dvdMounted); + WindowPrompt(0,tmp,0,0,0,0,100); + } CloseXMLDatabase(); ExitGUIThreads(); bgMusic->Stop(); @@ -2131,6 +2185,11 @@ int MainMenu(int menu) { delete fontSystem; ShutdownAudio(); StopGX(); + if (dvdMounted==2) + { + WII_Initialize(); + WII_LaunchTitle(0x0000000100000100ULL); + } if (boothomebrew == 1) { BootHomebrew(Settings.selected_homebrew); @@ -2139,7 +2198,7 @@ int MainMenu(int menu) { } else { int ret = 0; - struct discHdr *header = &gameList[gameSelected]; + struct discHdr *header = (dvdMounted?dvdheader:&gameList[gameSelected]); struct Game_CFG* game_cfg = CFG_get_game_opt(header->id); @@ -2174,7 +2233,7 @@ int MainMenu(int menu) { } reloadblock = off; } - int ios2; + int ios2; switch (iosChoice) { case i249: ios2 = 249; @@ -2200,15 +2259,24 @@ int MainMenu(int menu) { Sys_IosReload(249); } } - ret = Disc_SetUSB(header->id); - if (ret < 0) Sys_BackToLoader(); + if (!dvdMounted) + { + ret = Disc_SetUSB(header->id); + if (ret < 0) Sys_BackToLoader(); + } ret = Disc_Open(); if (ret < 0) Sys_BackToLoader(); SDCard_deInit(); USBDevice_deInit(); - if (reloadblock == on && (IOS_GetVersion() == 222 || IOS_GetVersion() == 223)) { + if (gameList){ + free(gameList); + } + if(dvdheader) + delete dvdheader; + + if (reloadblock == on && (IOS_GetVersion() == 222 || IOS_GetVersion() == 223)) { patch_cios_data(); mload_close(); } diff --git a/source/prompts/DiscBrowser.cpp b/source/prompts/DiscBrowser.cpp index a1c25858..9fad3e89 100644 --- a/source/prompts/DiscBrowser.cpp +++ b/source/prompts/DiscBrowser.cpp @@ -18,6 +18,9 @@ #include "settings/cfg.h" #include "memory.h" #include "../wad/title.h" +#include "../patches/dvd_broadway.h" + +#define BC 0x0000000100000100ULL /*** Extern functions ***/ extern void ResumeGui(); @@ -27,25 +30,28 @@ extern void HaltGui(); extern GuiWindow * mainWindow; extern u8 shutdown; extern u8 reset; +extern u8 dvdMounted; /******************************************************************************** -*Game specific settings +*Disk Browser *********************************************************************************/ int DiscBrowse(struct discHdr * header) { bool exit = false; int ret, choice; u64 offset; - //Halt Gui seems to fix that pain in the ass code dump. We'll see. HaltGui(); - ret = Disc_SetUSB(header->id); - if (ret < 0) { - ResumeGui(); - WindowPrompt(tr("ERROR:"), tr("Could not set USB."), tr("OK")); - return ret; - } + if (!dvdMounted) + { + ret = Disc_SetUSB(header->id); + if (ret < 0) { + ResumeGui(); + WindowPrompt(tr("ERROR:"), tr("Could not set USB."), tr("OK")); + return ret; + } + } - ret = Disc_Open(); + ret = Disc_Open(); if (ret < 0) { ResumeGui(); WindowPrompt(tr("ERROR:"), tr("Could not open disc."), tr("OK")); @@ -65,8 +71,8 @@ int DiscBrowse(struct discHdr * header) { WindowPrompt(tr("ERROR:"), tr("Could not open WBFS partition"), tr("OK")); return ret; } - - int *buffer = (int*)allocate_memory(0x20); + + int *buffer = (int*)allocate_memory(0x20); if (buffer == NULL) { ResumeGui(); @@ -80,8 +86,8 @@ int DiscBrowse(struct discHdr * header) { WindowPrompt(tr("ERROR:"), tr("Could not read the disc."), tr("OK")); return ret; } - - void *fstbuffer = allocate_memory(buffer[2]*4); + + void *fstbuffer = allocate_memory(buffer[2]*4); FST_ENTRY *fst = (FST_ENTRY *)fstbuffer; if (fst == NULL) { @@ -193,7 +199,6 @@ int DiscBrowse(struct discHdr * header) { mainWindow->Append(&w); ResumeGui(); - while (!exit) { VIDEO_WaitVSync(); @@ -396,3 +401,50 @@ int autoSelectDolMenu(const char *id, bool force) { return -1; } + + +/******************************************************************************** +* Mount a DVD, get the type and ID. +*********************************************************************************/ +static vu32 dvddone = 0; +static dvddiskid *g_diskID = (dvddiskid*)0x80000000; +void __dvd_readidcb(s32 result) +{ + dvddone = result; +} + +u8 DiscMount(char *id) { + int ret; + char gameidbuffer[8]; + HaltGui(); + memset((char*)0x80000000, 0, 6); + + ret = bwDVD_LowInit(); + dvddone = 0; + ret = bwDVD_LowReset(__dvd_readidcb); + while(ret>=0 && dvddone==0); + + dvddone = 0; + ret = bwDVD_LowReadID(g_diskID,__dvd_readidcb); + while(ret>=0 && dvddone==0); + + memset(gameidbuffer, 0, 8); + memcpy(gameidbuffer, (char*)0x80000000, 6); + strcpy(id,gameidbuffer); + if(gameidbuffer[1] == 0 && + gameidbuffer[2] == 0 && + gameidbuffer[3] == 0 && + gameidbuffer[4] == 0 && + gameidbuffer[5] == 0 && + gameidbuffer[6] == 0) + { + ResumeGui(); + return 0; + } + if(*((u32 *) 0x8000001C) == 0xC2339F3D){ + ResumeGui(); + return 2; + } + ResumeGui(); + return 1; +} diff --git a/source/prompts/DiscBrowser.h b/source/prompts/DiscBrowser.h index fa41f54c..5c02b3d6 100644 --- a/source/prompts/DiscBrowser.h +++ b/source/prompts/DiscBrowser.h @@ -11,5 +11,6 @@ int DiscBrowse(struct discHdr * header); int autoSelectDol(const char *id, bool force); int autoSelectDolMenu(const char *id, bool force); +u8 DiscMount(char *id); #endif diff --git a/source/prompts/PromptWindows.cpp b/source/prompts/PromptWindows.cpp index c2955fbc..18483cf4 100644 --- a/source/prompts/PromptWindows.cpp +++ b/source/prompts/PromptWindows.cpp @@ -51,6 +51,8 @@ extern float gamesize; extern struct discHdr * gameList; extern u8 shutdown; extern u8 reset; +extern u8 dvdMounted; +extern struct discHdr *dvdheader; /*** Extern functions ***/ extern void ResumeGui(); @@ -1031,7 +1033,7 @@ int GameWindowPrompt() { GuiImage dialogBoxImg(&dialogBox); GuiTooltip nameBtnTT(tr("Rename Game on WBFS")); - if (Settings.wsprompt == yes) + if (Settings.wsprompt == yes && !dvdMounted) nameBtnTT.SetWidescreen(CFG.widescreen); GuiText nameTxt("", 22, THEME.prompttext); if (Settings.wsprompt == yes) @@ -1046,7 +1048,7 @@ int GameWindowPrompt() { nameBtn.SetSoundClick(&btnClick); nameBtn.SetToolTip(&nameBtnTT,24,-30, ALIGN_LEFT); - if (Settings.godmode == 1) { + if (Settings.godmode == 1 && !dvdMounted) { nameBtn.SetTrigger(&trigA); nameBtn.SetEffectGrow(); } @@ -1088,7 +1090,7 @@ int GameWindowPrompt() { btn2Img.SetWidescreen(CFG.widescreen); } GuiButton btn2(&btn2Img,&btn2Img, 1, 5, 0, 0, &trigA, &btnSoundOver, &btnClick,1); - if (Settings.godmode == 1) { + if (Settings.godmode == 1 && dvdMounted!=2) { btn2.SetAlignment(ALIGN_RIGHT, ALIGN_BOTTOM); btn2.SetPosition(-50, -40); } else { @@ -1138,15 +1140,18 @@ int GameWindowPrompt() { promptWindow.Append(&dialogBoxImg); promptWindow.Append(&nameBtn); - promptWindow.Append(&sizeTxt); promptWindow.Append(&playcntTxt); promptWindow.Append(&btn2); - promptWindow.Append(&btnLeft); - promptWindow.Append(&btnRight); - promptWindow.Append(&btnFavorite); + if (!dvdMounted)//stuff we don't show if it is a DVD mounted + { + promptWindow.Append(&sizeTxt); + promptWindow.Append(&btnLeft); + promptWindow.Append(&btnRight); + promptWindow.Append(&btnFavorite); + } //check if unlocked - if (Settings.godmode == 1) { + if (Settings.godmode == 1 && dvdMounted!=2) { promptWindow.Append(&btn3); } @@ -1174,7 +1179,7 @@ int GameWindowPrompt() { } //load disc image based or what game is seleted - struct discHdr * header = &gameList[gameSelected]; + struct discHdr * header = (dvdMounted?dvdheader:&gameList[gameSelected]); snprintf (ID,sizeof(ID),"%c%c%c", header->id[0], header->id[1], header->id[2]); snprintf (IDFull,sizeof(IDFull),"%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); @@ -1253,10 +1258,14 @@ int GameWindowPrompt() { nameTxt.SetEffect(EFFECT_FADE, 17); } else diskImg.SetImage(diskCover); - - WBFS_GameSize(header->id, &size); - sizeTxt.SetTextf("%.2fGB", size); //set size text; - nameTxt.SetText(get_title(header)); + + if (!dvdMounted) + { + WBFS_GameSize(header->id, &size); + sizeTxt.SetTextf("%.2fGB", size); //set size text; + } + + nameTxt.SetText(!dvdMounted?get_title(header):IDFull); struct Game_NUM* game_num = CFG_get_game_num(header->id); if (game_num) { @@ -1312,7 +1321,6 @@ int GameWindowPrompt() { } choice = 1; - //SDCard_deInit();// moved this into menu.cpp after checking for gct file and alt dol } else if (btn2.GetState() == STATE_CLICKED) { //back diff --git a/source/settings/Settings.cpp b/source/settings/Settings.cpp index 462c7179..32c54591 100644 --- a/source/settings/Settings.cpp +++ b/source/settings/Settings.cpp @@ -35,6 +35,8 @@ extern GuiImageData * pointer[4]; extern GuiImageData * background; extern u8 shutdown; extern u8 reset; +extern u8 dvdMounted; +extern struct discHdr *dvdheader; /**************************************************************************** * MenuSettings @@ -1795,18 +1797,26 @@ int GameSettings(struct discHdr * header) { trigB.SetButtonOnlyTrigger(-1, WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B, PAD_BUTTON_B); char gameName[31]; + if (!dvdMounted) + { + if (strlen(get_title(header)) < (27 + 3)) { + sprintf(gameName, "%s", get_title(header)); + } else { + strncpy(gameName, get_title(header), 27); + gameName[27] = '\0'; + strncat(gameName, "...", 3); + } + } + else sprintf(gameName, "%c%c%c%c%c%c", header->id[0], header->id[1], header->id[2],header->id[3], header->id[4], header->id[5]); - if (strlen(get_title(header)) < (27 + 3)) { + if (strlen(get_title(header)) < (27 + 3)) { strcpy(gameName, get_title(header)); } else { strlcpy(gameName, get_title(header), 27+1); strcat(gameName, "..."); } - - - - GuiText titleTxt(get_title(header), 28, (GXColor) {0, 0, 0, 255}); + GuiText titleTxt(!dvdMounted?get_title(header):gameName, 28, (GXColor) {0, 0, 0, 255}); titleTxt.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); titleTxt.SetPosition(12,40); titleTxt.SetMaxWidth(356, GuiText::SCROLL); @@ -2373,7 +2383,7 @@ int GameSettings(struct discHdr * header) { switch (ret) { case 0: choice1 = WindowPrompt(tr("Do you really want to delete:"),gameName,tr("Yes"),tr("Cancel")); - if (choice1 == 1) { + if (choice1 == 1 && !dvdMounted) { CFG_forget_game_opt(header->id); CFG_forget_game_num(header->id); ret = WBFS_RemoveGame(header->id); diff --git a/source/settings/cfg.c b/source/settings/cfg.c index 62c2caf3..58d1c7d3 100644 --- a/source/settings/cfg.c +++ b/source/settings/cfg.c @@ -279,6 +279,8 @@ void CFG_Default(int widescreen) { // -1 = non forced Mode THEME.gamelist_grid_y = 13; THEME.gamelist_carousel_x = CFG.widescreen ? 480 : 500; THEME.gamelist_carousel_y = 13; + THEME.gamelist_dvd_x = CFG.widescreen ? 512 : 540; + THEME.gamelist_dvd_y = 13; THEME.gamegrid_favorite_x = CFG.widescreen ? 208 : 180; THEME.gamegrid_favorite_y = 13; @@ -294,6 +296,8 @@ void CFG_Default(int widescreen) { // -1 = non forced Mode THEME.gamegrid_grid_y = 13; THEME.gamegrid_carousel_x = CFG.widescreen ? 400 : 420; THEME.gamegrid_carousel_y = 13; + THEME.gamegrid_dvd_x = CFG.widescreen ? 432 : 460; + THEME.gamegrid_dvd_y = 13; THEME.gamecarousel_favorite_x = CFG.widescreen ? 208 : 180; THEME.gamecarousel_favorite_y = 13; @@ -309,6 +313,8 @@ void CFG_Default(int widescreen) { // -1 = non forced Mode THEME.gamecarousel_grid_y = 13; THEME.gamecarousel_carousel_x = CFG.widescreen ? 400 : 420; THEME.gamecarousel_carousel_y = 13; + THEME.gamecarousel_dvd_x = CFG.widescreen ? 432 : 460; + THEME.gamecarousel_dvd_y = 13; } void Global_Default(void) { @@ -571,6 +577,7 @@ void path_set(char *name, char *val) { #define OLD_LIST_ICON 8 #define OLD_GRID_ICON 16 #define OLD_CAROUSEL_ICON 32 +#define OLD_DVD_ICON 64 short WorkAroundIconSet=0; short WorkAroundBarOffset=100; @@ -647,6 +654,10 @@ void theme_set(char *name, char *val) { else CFG_COORDS2(gamegrid_carousel) else CFG_COORDS2(gamecarousel_carousel) + else CFG_COORDS2(gamelist_dvd) + else CFG_COORDS2(gamegrid_dvd) + else CFG_COORDS2(gamecarousel_dvd) + //********************************** // Workaround for old Themes //********************************** @@ -748,6 +759,17 @@ void theme_set(char *name, char *val) { } } + else if (strcmp(cfg_name, "dvd_coords") == 0) { + short x,y; + if (sscanf(val, "%hd,%hd", &x, &y) == 2) { + if(!CFG.widescreen) x+=24; + THEME.gamelist_dvd_x = x; + THEME.gamegrid_dvd_x = THEME.gamecarousel_dvd_x = x-WorkAroundBarOffset; + THEME.gamelist_dvd_y = THEME.gamegrid_dvd_y = THEME.gamecarousel_dvd_y = y; + WorkAroundIconSet |= OLD_DVD_ICON; + } + } + else if (strcmp(cfg_name, "sortBarOffset") == 0) { short o; if (sscanf(val, "%hd", &o) == 1) { @@ -783,6 +805,11 @@ void theme_set(char *name, char *val) { THEME.gamegrid_carousel_x += WorkAroundBarOffset - o; THEME.gamecarousel_carousel_x += WorkAroundBarOffset - o; } + if(WorkAroundIconSet & OLD_DVD_ICON) + { + THEME.gamegrid_dvd_x += WorkAroundBarOffset - o; + THEME.gamecarousel_dvd_x += WorkAroundBarOffset - o; + } WorkAroundBarOffset = o; } } diff --git a/source/settings/cfg.h b/source/settings/cfg.h index 497ee1d2..5696b69f 100644 --- a/source/settings/cfg.h +++ b/source/settings/cfg.h @@ -143,6 +143,8 @@ extern "C" { short gamelist_grid_y; short gamelist_carousel_x; short gamelist_carousel_y; + short gamelist_dvd_x; + short gamelist_dvd_y; // Toolbar Icons in GameGrid short gamegrid_favorite_x; short gamegrid_favorite_y; @@ -158,6 +160,8 @@ extern "C" { short gamegrid_grid_y; short gamegrid_carousel_x; short gamegrid_carousel_y; + short gamegrid_dvd_x; + short gamegrid_dvd_y; // Toolbar Icons in GameCarousel short gamecarousel_favorite_x; short gamecarousel_favorite_y; @@ -173,6 +177,8 @@ extern "C" { short gamecarousel_grid_y; short gamecarousel_carousel_x; short gamecarousel_carousel_y; + short gamecarousel_dvd_x; + short gamecarousel_dvd_y; }; diff --git a/source/usbloader/alternatedol.c b/source/usbloader/alternatedol.c index 490d31e8..8f9b0283 100644 --- a/source/usbloader/alternatedol.c +++ b/source/usbloader/alternatedol.c @@ -8,6 +8,9 @@ #include "apploader.h" #include "wdvd.h" #include "fstfile.h" +#include "../patches/dvd_broadway.h" + +extern u8 dvdMounted; /** Alternate dolloader made by WiiPower modified by dimok **/ bool Load_Dol(void **buffer, int* dollen, char * filepath) { @@ -180,7 +183,11 @@ bool load_dol_image_modified(void **offset, u32 *pos, u32 *len) { } return false; } - +static vu32 dvddone = 0; +void __dvd_readidcb(s32 result) +{ + dvddone = result; +} u32 Load_Dol_from_disc(u32 doloffset, u8 videoSelected, u8 patchcountrystring, u8 vipatch) { int ret; void *dol_header; @@ -191,8 +198,14 @@ u32 Load_Dol_from_disc(u32 doloffset, u8 videoSelected, u8 patchcountrystring, u return -1; } - ret = WDVD_Read(dol_header, sizeof(dolheader), (doloffset<<2)); - + if (!dvdMounted)ret = WDVD_Read(dol_header, sizeof(dolheader), (doloffset<<2)); + + else{ + dvddone = 0; + ret = bwDVD_LowRead(dol_header, sizeof(dolheader), doloffset, __dvd_readidcb); + while(ret>=0 && dvddone==0); + } + entrypoint = load_dol_start(dol_header); if (entrypoint == 0) { @@ -221,4 +234,5 @@ u32 Load_Dol_from_disc(u32 doloffset, u8 videoSelected, u8 patchcountrystring, u free(dol_header); return entrypoint; + } diff --git a/source/usbloader/apploader.c b/source/usbloader/apploader.c index 4fc25292..7c3e3291 100644 --- a/source/usbloader/apploader.c +++ b/source/usbloader/apploader.c @@ -13,10 +13,15 @@ #include "fstfile.h" #include "settings/cfg.h" +#define BC 0x0000000100000100ULL +#define MIOS 0x0000000100000101ULL +static tikview view ATTRIBUTE_ALIGN(32); + /*KENOBI! - FISHEARS*/ extern const unsigned char kenobiwii[]; extern const int kenobiwii_size; /*KENOBI! - FISHEARS*/ +extern u8 dvdMounted; /* Apploader function pointers */ typedef int (*app_main)(void **dst, int *size, int *offset); @@ -300,6 +305,23 @@ s32 Apploader_Run(entry_point *entry, u8 cheat, u8 videoSelected, u8 vipatch, u8 ret = WDVD_Read(appldr, appldr_len, APPLDR_OFFSET + 0x20); if (ret < 0) return ret; + + if (dvdMounted==2) + { + int retval; + retval = ES_GetTicketViews(BC, &view, 1); + if (retval != 0){ + // error. do something smart here like exit. anything besides return 0; + return 0; + } + + WPAD_Shutdown(); + *(volatile unsigned int *)0xCC003024 |= 7; + + retval = ES_LaunchTitle(BC, &view); // bushing's code + return 0; + } + /* Set apploader entry function */ appldr_entry = (app_entry)buffer[4]; @@ -309,7 +331,7 @@ s32 Apploader_Run(entry_point *entry, u8 cheat, u8 videoSelected, u8 vipatch, u8 /* Initialize apploader */ appldr_init(__noprint); - + if (error002fix!=0) { /* ERROR 002 fix (thanks to WiiPower for sharing this)*/ *(u32 *)0x80003140 = *(u32 *)0x80003188; diff --git a/source/usbloader/disc.c b/source/usbloader/disc.c index cc7db4e2..6c46f054 100644 --- a/source/usbloader/disc.c +++ b/source/usbloader/disc.c @@ -318,6 +318,8 @@ s32 Disc_WiiBoot(u8 videoselected, u8 cheat, u8 vipatch, u8 patchcountrystring, return Disc_BootPartition(offset, videoselected, cheat, vipatch, patchcountrystring, error002fix, alternatedol, alternatedoloffset); } + + void PatchCountryStrings(void *Address, int Size) { u8 SearchPattern[4] = { 0x00, 0x00, 0x00, 0x00 }; u8 PatchData[4] = { 0x00, 0x00, 0x00, 0x00 };