From 6113355561d6a4bc600391993f463e73690b881f Mon Sep 17 00:00:00 2001 From: wiidev Date: Sun, 12 Apr 2020 19:03:51 +0100 Subject: [PATCH 1/7] RiiTag should use HTTPS --- source/defines.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/defines.h b/source/defines.h index f8415c31..dcb95ab5 100644 --- a/source/defines.h +++ b/source/defines.h @@ -52,5 +52,5 @@ uLoader, NeoGamma, Mighty Channels, WiiXplorer, Triiforce, \ postLoader" -#define WIINNERTAG_URL "http://tag.rc24.xyz/wii?game={ID6}&key={KEY}"// RiiTag as of 3/11/2020 +#define WIINNERTAG_URL "https://tag.rc24.xyz/wii?game={ID6}&key={KEY}"// RiiTag as of 3/11/2020 #define DUTAG_URL "http://tag.darkumbra.net/{KEY}.update={ID6}" From 0c8477548c269769675f603d274334340ffc416d Mon Sep 17 00:00:00 2001 From: wiidev Date: Sun, 12 Apr 2020 19:33:31 +0100 Subject: [PATCH 2/7] Prevent crash caused by debug logging & gamercards --- source/menu/menu_download.cpp | 1 - source/network/gcard.c | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/source/menu/menu_download.cpp b/source/menu/menu_download.cpp index e7c60495..8c49dad8 100644 --- a/source/menu/menu_download.cpp +++ b/source/menu/menu_download.cpp @@ -756,7 +756,6 @@ s32 CMenu::_networkComplete(s32 ok, void *usrData) if(networkInit) wolfSSL_Init(); - gprintf("NET: Network init complete, enabled wifi_gecko: %s\n", m->m_use_wifi_gecko ? "yes" : "no"); if(m->m_use_wifi_gecko) { const string &ip = m->m_cfg.getString("DEBUG", "wifi_gecko_ip"); diff --git a/source/network/gcard.c b/source/network/gcard.c index f65b7468..f3e122b6 100644 --- a/source/network/gcard.c +++ b/source/network/gcard.c @@ -52,7 +52,7 @@ void add_game_to_card(const char *gameid) strcpy(url, providers[i].url); str_replace(url, "{KEY}", providers[i].key, MAX_URL_SIZE); str_replace(url, "{ID6}", gameid, MAX_URL_SIZE); - gprintf("Gamertag URL:\n%s\n", url); + gprintf("Gamertag URL: %s\n", url); struct download file = {}; file.skip_response = 1; downloadfile(url, &file); From 9ad0c6da0817b596ae295e981cc2845bae2537a0 Mon Sep 17 00:00:00 2001 From: wiidev Date: Sun, 12 Apr 2020 19:34:05 +0100 Subject: [PATCH 3/7] Support paletted images --- source/gui/pngu.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/source/gui/pngu.c b/source/gui/pngu.c index b93617e6..ff54a11f 100644 --- a/source/gui/pngu.c +++ b/source/gui/pngu.c @@ -1114,8 +1114,12 @@ int pngu_decode (IMGCTX ctx, PNGU_u32 width, PNGU_u32 height, PNGU_u32 stripAlph if ( (ctx->prop.imgWidth != width) || (ctx->prop.imgHeight != height) ) return PNGU_INVALID_WIDTH_OR_HEIGHT; + // Support paletted images + if (ctx->prop.imgColorType == PNG_COLOR_TYPE_PALETTE) + png_set_palette_to_rgb(ctx->png_ptr); + // Check if color type is supported by PNGU - if ( (ctx->prop.imgColorType == PNGU_COLOR_TYPE_PALETTE) || (ctx->prop.imgColorType == PNGU_COLOR_TYPE_UNKNOWN) ) + if ( (ctx->prop.imgColorType == PNGU_COLOR_TYPE_UNKNOWN) ) return PNGU_UNSUPPORTED_COLOR_TYPE; // error handling From 1ce62ffb75b1e74b466d0bf12e710a80ca945c0c Mon Sep 17 00:00:00 2001 From: wiidev Date: Sun, 12 Apr 2020 19:35:57 +0100 Subject: [PATCH 4/7] Optimize images --- out/imgs/background.jpg | Bin 854 -> 0 bytes out/imgs/background.png | Bin 0 -> 2034 bytes out/imgs/btncat.png | Bin 3355 -> 3066 bytes out/imgs/btncats.png | Bin 4369 -> 4074 bytes out/imgs/checkboxhids.png | Bin 5254 -> 3400 bytes out/imgs/checkboxoffs.png | Bin 4306 -> 2383 bytes out/imgs/checkboxons.png | Bin 4917 -> 3012 bytes out/imgs/checkboxreqs.png | Bin 4789 -> 2930 bytes out/imgs/dvdskin.jpg | Bin 984 -> 0 bytes out/imgs/dvdskin.png | Bin 0 -> 4877 bytes out/imgs/dvdskin_black.jpg | Bin 636 -> 0 bytes out/imgs/dvdskin_black.png | Bin 0 -> 2100 bytes out/imgs/dvdskin_greenone.jpg | Bin 858 -> 0 bytes out/imgs/dvdskin_greenone.png | Bin 0 -> 2475 bytes out/imgs/dvdskin_greentwo.jpg | Bin 951 -> 0 bytes out/imgs/dvdskin_greentwo.png | Bin 0 -> 3163 bytes out/imgs/dvdskin_red.jpg | Bin 964 -> 0 bytes out/imgs/dvdskin_red.png | Bin 0 -> 4074 bytes out/imgs/dvdskin_yellow.jpg | Bin 888 -> 0 bytes out/imgs/dvdskin_yellow.png | Bin 0 -> 3095 bytes out/imgs/esrb_ao.jpg | Bin 1547 -> 0 bytes out/imgs/esrb_ao.png | Bin 0 -> 1705 bytes out/imgs/esrb_e.jpg | Bin 1551 -> 0 bytes out/imgs/esrb_e.png | Bin 0 -> 1599 bytes out/imgs/esrb_ec.jpg | Bin 1611 -> 0 bytes out/imgs/esrb_ec.png | Bin 0 -> 1816 bytes out/imgs/esrb_eten.jpg | Bin 1586 -> 0 bytes out/imgs/esrb_eten.png | Bin 0 -> 1717 bytes out/imgs/esrb_m.jpg | Bin 1573 -> 0 bytes out/imgs/esrb_m.png | Bin 0 -> 1751 bytes out/imgs/esrb_t.jpg | Bin 1470 -> 0 bytes out/imgs/esrb_t.png | Bin 0 -> 1532 bytes out/imgs/flatloading.jpg | Bin 3081 -> 0 bytes out/imgs/flatloading.png | Bin 0 -> 9556 bytes out/imgs/keyboard.png | Bin 970 -> 966 bytes out/imgs/loading.jpg | Bin 4327 -> 0 bytes out/imgs/loading.png | Bin 0 -> 10762 bytes out/imgs/microphone.png | Bin 1427 -> 1298 bytes out/imgs/microphoneR.png | Bin 1953 -> 1788 bytes out/imgs/motionplus.png | Bin 4412 -> 1053 bytes out/imgs/motionplusR.png | Bin 4677 -> 1859 bytes out/imgs/norating.jpg | Bin 1541 -> 0 bytes out/imgs/norating.png | Bin 0 -> 1628 bytes out/imgs/nunchuk.png | Bin 1618 -> 1486 bytes out/imgs/nunchukR.png | Bin 2480 -> 2356 bytes out/imgs/wiimote1.png | Bin 3669 -> 999 bytes out/imgs/wiimote2.png | Bin 3779 -> 1144 bytes out/imgs/wiimote3.png | Bin 3773 -> 1168 bytes out/imgs/wiimote4.png | Bin 3765 -> 1107 bytes out/imgs/wiimote6.png | Bin 3826 -> 1181 bytes out/imgs/wiimote8.png | Bin 3816 -> 1176 bytes source/gui/coverflow.cpp | 16 ++++++++-------- source/menu/menu.cpp | 8 ++++---- source/menu/menu_gameinfo.cpp | 12 ++++++------ 54 files changed, 18 insertions(+), 18 deletions(-) delete mode 100644 out/imgs/background.jpg create mode 100644 out/imgs/background.png delete mode 100644 out/imgs/dvdskin.jpg create mode 100644 out/imgs/dvdskin.png delete mode 100644 out/imgs/dvdskin_black.jpg create mode 100644 out/imgs/dvdskin_black.png delete mode 100644 out/imgs/dvdskin_greenone.jpg create mode 100644 out/imgs/dvdskin_greenone.png delete mode 100644 out/imgs/dvdskin_greentwo.jpg create mode 100644 out/imgs/dvdskin_greentwo.png delete mode 100644 out/imgs/dvdskin_red.jpg create mode 100644 out/imgs/dvdskin_red.png delete mode 100644 out/imgs/dvdskin_yellow.jpg create mode 100644 out/imgs/dvdskin_yellow.png delete mode 100644 out/imgs/esrb_ao.jpg create mode 100644 out/imgs/esrb_ao.png delete mode 100644 out/imgs/esrb_e.jpg create mode 100644 out/imgs/esrb_e.png delete mode 100644 out/imgs/esrb_ec.jpg create mode 100644 out/imgs/esrb_ec.png delete mode 100644 out/imgs/esrb_eten.jpg create mode 100644 out/imgs/esrb_eten.png delete mode 100644 out/imgs/esrb_m.jpg create mode 100644 out/imgs/esrb_m.png delete mode 100644 out/imgs/esrb_t.jpg create mode 100644 out/imgs/esrb_t.png delete mode 100644 out/imgs/flatloading.jpg create mode 100644 out/imgs/flatloading.png delete mode 100644 out/imgs/loading.jpg create mode 100644 out/imgs/loading.png delete mode 100644 out/imgs/norating.jpg create mode 100644 out/imgs/norating.png diff --git a/out/imgs/background.jpg b/out/imgs/background.jpg deleted file mode 100644 index 60ebf8af57d6f04987975d7f0b05290464945ae9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 854 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<HEAm;@P_1sVSzVUPei6$luR05cOKJ4i+VLxxd^Nf0O_ zf~p>*6(lN%VhULF76T76BhWHtK?Zwb>$_atyZkd z{mxCCYq}uZ@1?F3>y}I)Ve)M9#RYj^&c5umtYTa5bL;GyTf9+6*F~LO5Oo$z8fI{M z-C1$!%7QIxPqnN)*O(bKSJ^77gxhZ}kj{44HusY8@)GXMyUNQ;xL#a}GU3X&R8{P- zY|dWw<@yeHU(UX4zAWG2>dV=YdyT8u)}~#{_qoM)OC4zF6`-LnfDQ|qYYlXmuOHB1 zPzPEsi1&LbYYlQHh;*BD5y;H6wOkMkCWF2_eQ67H?R%elGxkDV{c`pN(~P+?egA1)vBzd=jF-^xAC|RJjksvbmSycE13b05%6? x+G5YlyG*lyx`71HNFZwt%(S8}$Ja5JFRLwJz5q)^{QeFg>kH7$^V$ diff --git a/out/imgs/background.png b/out/imgs/background.png new file mode 100644 index 0000000000000000000000000000000000000000..db6a3a689cba5333b950d4a7767a1c33552fb8a7 GIT binary patch literal 2034 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 diff --git a/out/imgs/btncats.png b/out/imgs/btncats.png index 881d87df3312dd91a994dfe59f493e3f5cf54ebc..48e772027e391ece1aceb003db9b12efc8e4e537 100644 GIT binary patch literal 4074 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 literal 4369 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 literal 5254 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 Hsi=Pe!FLY- diff --git a/out/imgs/checkboxoffs.png b/out/imgs/checkboxoffs.png index c17bfcfae35d4c0eb5cee7732db4039a90566ec2..077bacb108304f799cd0d302c6cb3efe7adca251 100644 GIT binary patch delta 2373 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 B$M^sM literal 4917 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 diff --git a/out/imgs/checkboxreqs.png b/out/imgs/checkboxreqs.png index 815e7933c3766a2fc6535ee1aaf22901c9736dfa..414ff63dd96e2b42207e3f33462adb29dc9748b6 100644 GIT binary patch delta 2924 zcmV-y3zPJ458702&=`*`*lk3AmSadu-9;w&seVQW<& zp^<1S1T+-UR&iy z+ne#5nYZ7b^Jb>9B8Vq6@X1HHzVF#Hxj&tI&i|Zy$^T(1wtr$Pwqh%`Vk@>{^z#5b z`odcsZGQjViqF4O6s2xn6gwnIi6Ve$>Z)y-S;w+wtChv!sNWkue~!FA`sSgNm2$Dhf$=;~L{a2qSr!yU z;bEqdB=KMzrIbjDU+EpZdTmetwoQVh$Our(rT6DD>3{nkxa%hCk^w()@V)kEJaNb$ z3}5AfojP`O^sR%>zhA4AbEG1NnSDJ~ublH9bAuGc`4pg!h=^IDYW7?DzZSKp-FogFz9! zU(QVCMh-uFu%?wtvd`ZWiN=R<&Cl)Oct`R{41WXk?7^ph|JUs7q)I-;02U`P7*8g; z;;FTQAO#^7APxwVd0OElnw1r$q{y<3UeZrIHI6FGyS<6!)**a77>(i_0P}a<1!8Pz=J=a+=>C zsDH|mNWt6gQW<1mnpUcfy>Z|l+rD6&@0?@)Y<}RfS-NaL#H0lMam^T{FOTSOeTE#kj{OAb2gk$Y{TL4C7IMNA;b_MF?_=)PY0xlrILLxvm-RO}uwp8*J z^1M;2GRL+F#03F(R;^Z8F_&dTmwz~jSptv*AW5xOBjs`#6~jSz7zCkfTHY)y%+AG= zz1@-aDkeutM36gZe`Nf_EGevI!q?2`4kxVNGb=G+YQs!FE^x zz2;apb0yaU2OyHp=9Tnp1w+flt%qH34byaO%eF1c);Y?Ez!4pH0iYT5C4UnL40*J3 zSztjBdvPx1(<%=JD>x8qxMh3*nhDt-?qZBc;3W^35=LyxbOlM~;@zucB@h${VU(c( z925jW3dGvfyd}HfMUEFJV?1+sk#Um1pfu{tF{oBd7hoM1y`P<*&LaazNNU-T5JV|~ zb9GVGF&rrFKg=$y(zA9To`34=kHTjJ@J%x!2%?FiOahT8iN%tX7eow0$^%raJw>=p zyj;=B3}HOEVFYIe=|^kTnpDV~Gf&MsAsV#@-HvK*}g7htO>$72@; z(gQQ;NUfIFT{eW8biPJDD&B^ncLtrpu@&4>V z3y_e!ED(UAVD-;7|G9){uz8R-Hf*E==3aESW|>Bj_X(YC!Kk7YGc~}a;9+bTO}kny z*;+otiDAh$O@>fl0DlO}As#P6b!Zca7pIMgL7_7%Hpj3e6XrGWj8GIwQB*if%him< zJm!nl1cAoikF#m$rDcI_)5w8TbhZT|idINh3HTR*p>omr$?;j&)T%zkCxSn)s-c`Q zT{kRv5h97MWY4-Q+LdrjB3Nsf!_-{Hnw>b2(bQ}XcFMu#zJCdT0avM1jD`8xA^iMn=C2)?Om(ljYDjDIbb|% z4Z|_$)~>$(o_`bX43G2JCW49J8IVm!hqN{ggJC)^Da|PSOjV1P4g~>xPk2UfW>sBh zCADB{CDjl`(Z(IQK#S^G&$_|2I9JN*@Uo>@E33}~fE!7qk`QBpgL+FT5x`_cklh%35e)*tZd$UE7leW zOM_S5cz-oM7Z&CoZTZBJ>Rb0@Wl{ZwKN#sB+Ocb3^v#z~@LZitgotP+9dc6B#H2$} zV2a=GhQm>=O%XhQNA`zvrF>U4joUs`)dk`!_$*azBhWGK(ek z0eoJ&>6*=*y&I#3VVDRBAL0;N@%i9v+9rYAiGSd2id9V@ZpGErMOG~toUNH|RW+DV zE>prP*e9HqaMYu$UubX}hOSM)*p2|%x#^#`ax26yeR=7*$0lyOPpNSTY^sO5F@8gv14dHYwsv1#3=Ylb*5^lZ6Y`YOU+(#ybDqT`u(M}O*W zd`EAeK6Z2r4viC*SwnCh2Kuk*L4vFvF+e(CqU00$x81O2!ARN8?VlK2Hc|R&<(~qp$aQS1G z@It$F`@=JbQo(3^Pn$ou3k10fMqF&16fEdxEmJRmg3MR6(rfwj%>G~f=+0?!iR{0- WLmliR1)VSe00007jK!dF z{NFwNOB=L_|LxDbJOltj&q$6g3>O<~gbyW1%gdMIjn@hbqVjP7K$?Y7y?g@j45&Ar zNFt+P+=^-#l;n$oIUCq$+fXg=ek4o;4et

*x~^;A7$oGusPBh9UR_L3oB2G%P5P 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 U>gTyFYj2ydmbT~z=ANhj1O28(Q2+n{ diff --git a/out/imgs/dvdskin.jpg b/out/imgs/dvdskin.jpg deleted file mode 100644 index 10fddd77c8576aa6fc5abbdde444e3a79a6feaf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 984 zcmex=5A1R0qH8UG()kYZq9W&{ET1Yl%gW@2Rn%IOI(FflPQ zu`;nTvqGgAnV1C)jaXQP6di?)MU(;)3)z$>syGETJ_M>4K`{ob10*VlY&b;p76T76 zBhV4df(-Tyzi-a)53ZcyA7FVR#Up{i?gfL`vJVDPvk$NvbH2(4Vs;IdHg=yUFFP2s z@|jsz?qMi4n7QYS8oQu-l%b32V&-L^?>IhWV7hXTjXSu4;aQ?_<>d1LLT~tYRPZa< zvY07Ifn_p)GPb_YyvtUwi_bf0{zJZWO@!kkZT8y8ZXcds`_BL1Tf!mNVDc}yLdfyY zi**c^lj3)Zp6Ppgk$LNa3ws!tKdDot3yurY5 ztwD7G;~d*VyG}fQH!X~LL*Gf&q?4)b&F7z%WcDxAJXZPdcpLljSMI0k4^&<7d{^I6 zQyTc(>&5<8zlxvkkxxFnv#Q|r-M*g;VTa`cs;;h$;}w&c`SkOvD?7}7XR&UWG<9e9 zDcv<6Dn(){B9?zm-yOks`SA1YR$48WPWxNf-sacuf0*@XBlqUZ-x4aO)-9VnCs9wb zyyDdSKX#K={+fC$;#io!mQ44wV_6ZivtO%KO`KbLROOPlgGtxv^x5ZU#R&g4`f*b> z*k#Z0_8+%u?E~HaGU_W%59gFWZF{R4N_NPMdjgW02$B;0-JPSfzd*uJ)?&_= Z4J;;lZKeXItBZ73bnQK{ZGrv&n*hpMdy@bF diff --git a/out/imgs/dvdskin.png b/out/imgs/dvdskin.png new file mode 100644 index 0000000000000000000000000000000000000000..0c02afb0fbc61eae98dce7e959dfb8a1dd1bbe9a GIT binary patch literal 4877 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 YeOV literal 0 HcmV?d00001 diff --git a/out/imgs/dvdskin_black.jpg b/out/imgs/dvdskin_black.jpg deleted file mode 100644 index 870e737d799bc26015864ccc621e58d2e23f15a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 636 zcmex=5A1R0qH8UG()kOVpv1Q-y2nURTw4Jf4|02F3oVq|7v zhDkCq88QnBDLOU^8wDmRB^3fyiJ<5OD+GxOBAW;iy~V)83^Y)XS&+e=;peMUw@&c@ zB}!#>HH3v-3rJwN#=y6DdH~n6UF$L!xp)&8W!?1_h)&%)MFObmm1QZzy6jbt6*51# zeSg98<_%Dv@9u_h$=thz(;k>GFt8hExjef96v(q)XLN_Hfq~&!uE(5P6Sy9|z3V*d zW_pOor}im-_xxu#|Jzog{L1@;O6ODNcl9b?>c5daeJ`%deSUkq_JQ2WpL^$ZO{+Mw z=8f>2?H|RCeeYTMSI6G;&L+RcE8g?p&VM!OxXg^7XPf8A)~pwLeEj(3tqEq!r#+f# zvz>7PLn(u#-BYFFEC;R1cbdWH6Bu|o9a3&hwA`v7YO`&rzi#6j!38JorujFDz#wh5#4p!_cjeQqT9r968~4gG$ObQfXte)- F69CJ+)?EMq diff --git a/out/imgs/dvdskin_black.png b/out/imgs/dvdskin_black.png new file mode 100644 index 0000000000000000000000000000000000000000..581783c00361f934ccbaebd10b9fcf687d00fece GIT binary patch literal 2100 zcmWO8`9IY81Hke3`}3L0FbFe-#78;DtQpt1$H!F^8YQX3nC(z4_0Z+2{R|2lno|J3Bi$Iayg*357y|K;Youz~}QF9UX0KY^<%V?d|PtZEblx zo}HbYx3{;CkB_IPr-z4!ySuwcByw|eb9Hs~_4W1h^An53E-o%Ojz{gJV*t?0LxcRI zQseqw^d=8sIy7mkTo0W5r}=xv^RO(w0RvX8|M1PYC9i#TuTvqj^3lJa(p&p`7c&kA zUTtx^{9>e);xXJ$S2E7|(0F%OHs)v(2lFP%#ehvB4S<~1>6~(5*CLt){RYHYzz4^% zOGwatf>sTy7LaMu#sjS^^|XztFw@waZx9i``4pu~Wl7GEHU1zpJNS+RX-Pa{|FQ;O zSq+HY_{kAGc~8c6HfSQkm%TTYec#mK`CMG%RR7=!_s6P<6mVUGW)O<7|kbC7dWGpp8SJ#$j=R&bM zt>M@1i`~K!&Mb$+mO(0NTnjUAht|8*!v3~BbdsTXcztaQT@fw6V=kpCDRpmk5)T49 zX9@v>>5D)tcseG($mFJ_=LCfl!GkL@8F9aQMFt1ex0|*zi4IQaNbEPChWk;!?X3U$ z1e6A6PG?={b$Qqtee}~sM|9j!NzGMr*&YGI83~>_9QFDMq-K9lHwx^id%?OEz*!5amc2$(XD zQPDLH0L2S##``CNR4}~T5k_HA^1p!?y_2Aq=aiIUB7$y8Tm@xXSTymH7NCbAlNr<) zde%0y6iJC93OPo0ZPlFGEDmW5_@Z`>z9}K!OIYDABcg%AoK(n1jpAd(n*a-YPE73+ zDZ2xTR!!*F+@#iVn(%*r!f>Z-OA<#17&|!0K(YCd(I88|8g7jO|5;@YQyH4s^Uw#h zd&K*1%X5Afz*ZYH)3bK*z~rPQS;o&mcXJf6DzQ7>5RPWXSW}P+BqWd_1hbY7% zJJVBpZiOtjw72ejJA4R0*GIxe{WvqfN-|1eWJ%mWt9W`g`g z1DVeD{751}o4?|g=uXf5?y_T&fW2^WSO&gUJ;fHT?RrrMp2i zUUA4rqATT|F!}h|$YR1XWt6GnO}K64oBS1)G$ejfnE3%{bbY$)g)3uKj2)NJA{ahk z63baaw(b4XlRgo`Zve3}1NE1AnpZ%Hiz{{(k1kPXJPV5fvYM>4Nx@jrEF)}CvvFP; zH;XF(dCaIyN<2YOZ{LQ z2~2Jyu|-AoNSeFrhu$>pIpwKvs`95tGel@VI^SQOQuDfO85ditLq2{QGD5P|34Z7n zYOD=Du<r)$E2lu$d1mzg}yu-{NjlNzS0HTBx~EIrp;%2Gs5AB2TF=WM*_riV3JT%#_D z^*ZcaQ2Fglt|pL1>$AnuTk4pph=TZoDebDz(*G7su*fGx7s4+`E6MGDAV}u?yd>% zXv%58-zI9=!pp#)&SPXKt6sN@K`t*ZLwe&%&Pz%G(t}*z)No!z>yScMY{|9=53L*= zXpO1u+~JEGzhAtiqQ~AWt4Hz*nHTUa2~a3Hf#J&L!zmCalBv86OW^1#!W(}=-E>6@ART_VnHob{w zA&}A42B^;5BBNHBbom#PNeT7i>qs?_=)c+nhtOQ3JXgA_5$~r6G;s19&i!G3g+V(^5e$SFo+)}->BZt4ne96 zq$27xi-e`!M3Q0WI|J#^8toltuK_9%4bIp|t%;dBaw}jbpGGrnurJ2MYO3@&Xz!y} zu;H^cB+dlxFpgpb9tJ88ffG}It|B7eNT@YX=|H5-rdsIBC1A+pDpS3b#qH5A1R0qH8UG()kYr$BW(2tw0T`K?SXhBl>H>@mOiYZ- z%*?DXNk%3?LuM8sBSptR;lzooO2&naATxjlfB;MtkY;3JW@Q6P$q0fafL6dIfo3oZ zDH=Kczs11A475RzS&+e=;qf%pok?*nHE$G{wlKbEaJ${6oO>u_xsG?yk%@{7qKhY4 z>M-Nr9}dd zuRC9}ZK-m6Zm=p+l7S_6hoAa)P0pZBzu&DobHB3~C9noCuqB_2@UofOvT|X{+Z{nC zZ=d2wIl#4mf#>+74O1$$Sxt1NE*ERfdGtE%qQ{$=oxdgL?uqfcXH~tRJpA3K)v_^h z_LJrB?Db0DX1wj|{IKu+@h{%>@BDuK$>Y4bZ95;O`Q0;~srzW7q1l(Pb#{G*$N5gp znzP6ET%7Ej+SJ|JV)s;UrrVp#RvL<*;Bq5yDIhapPBO2ZNJ=Fv886|`Qu+#-@e;c{ApwVtZByqkUNtM^;!Qo@L)*M3 z7fdu__{MedfZzgU!zWt<*H5~txiDp?IZ*3crIc#H19O~xIqZ{qIOn@??T%V;J?qNK z#hb!!ZS(r=F*D_a$;~E)!mU|Ta-)`}yQi$*n$!EuStWRZ>auetTs(Zc!&Zi8U7dBT z@5KG=Na;6ikqonP4oaBDt`1qfHS26LSi{tB6HX<3h{(ObAu;(tFHpJG+o;VEm;c`c E08m**&j0`b diff --git a/out/imgs/dvdskin_greenone.png b/out/imgs/dvdskin_greenone.png new file mode 100644 index 0000000000000000000000000000000000000000..6097bfabfe714d0ecc1b0d657ec997bff6b47053 GIT binary patch literal 2475 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 literal 0 HcmV?d00001 diff --git a/out/imgs/dvdskin_greentwo.jpg b/out/imgs/dvdskin_greentwo.jpg deleted file mode 100644 index 6c234b5895d3aae73383dc8b993f2be6eaafad4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 951 zcmex=5A1R0qH8UG()kYZq9W&{ET1Yl%gW@2Rn%Bc%5Ff%YR zGqW%;!{iy644DOuScMc>gdGDD3q_QZCIS^of=mDcgc%HsOw24GGh_rIQb@8uDM2Ae zMZ^EM7tX4S5 zz>smH?Fe(E$z;>Xo;)vJoa)Uu)i}wq!QrsmpANeQwoRF8*=my{FJ7D~1=J#`!oawI zfdQ!0IMQUoSu3N(Q3h8|#I$@rKJjNfkNP32`z42V-2W!Ma6zI|oo~vaO6e2nPCceZ zy>AW&PZBu1w1I(3fQi9kp4+EHo8BkE?ru_ZChiq}RqUiD+rW^)pu^xUeCD3#b)ycE zi#Kieu9d!j@>!|-iY?c-y$t`EWO~{@{OI1-pX8qWtAF_U!>+C?{=dK7f4ceprTk6R zo3~H8`FMR?@cj47*3~P%^Ez!67p?TFVE*zu?lzulJ(fk4@6u>K^Rhda^|!5ts^89^ z`(*#j%MZTt?NO%gxAf&HajTt7zs>di_J?Cn&a7#BZoJmt>3uP-rpUI|>RrpXlOkWv zyREccx%J!WP#2ZSA9~~MWvk=L&v(2EpXPa0?%vF)+VN>}>)n4^)y{q8X@A|W{_N?9 zlH>bY{+;*Zs8#FVsAYaXf6@z)x2ab*UY(p(>}uk>`lOKMgKzQ9AGfhEF20%DqC5RU z4G*9COdnx)qZy)RB|rrtH_f)IC?y=QV=!Uk{2_lp#^0zzZCP&RJ@}-E zqs=E*0k7wqH|54m0n5p-COCWu51#&@dd|YeD@CpbzLKs62n8-a#tee7J?R<=<&v6B s87EzYcIE>8kOH*dNGWl$;AN+`+8bD8*JLu@Nm<1CSXIF5>GuCO0Y~m|lmGw# diff --git a/out/imgs/dvdskin_greentwo.png b/out/imgs/dvdskin_greentwo.png new file mode 100644 index 0000000000000000000000000000000000000000..7077a15d514603b027ed0eeff20d5e4ad6799a9d GIT binary patch literal 3163 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 diff --git a/out/imgs/dvdskin_yellow.png b/out/imgs/dvdskin_yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..1778c6dcee18add70647894c451ca49d5fbb4a2f GIT binary patch literal 3095 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 literal 0 HcmV?d00001 diff --git a/out/imgs/esrb_e.jpg b/out/imgs/esrb_e.jpg deleted file mode 100644 index c37a613b163f351651fb1e6c508bd225dd2dd6d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1551 zcmb79dpHw%82-)7HYSEsE^`oNvSMrQ+fZwBJCVqxQc~(9x4FcG=p0gQm|Mv$xfV+0 z`VgWfs>vg=rsFblORiDU4(FVnr+?4;{qsHV`+V>BzM{9HK_F{Gv!($E1OUkT0MR?J z7a$}g;1Vzd91ce!5t1kcX_S-{N=Z&$MnP3s?N?Q03`SjRm$v#=oF)c?HPXT93M{fTsd+43jnKmGZS07l-xSC0A;7Z~^6K zuN>)wFl;*-Do3qHINTgQF|_G5N7&17ApWk9J_VtrQhbklB1VN4cY97ziW5(>BKfYi zZg<^Ejz@TF+XV+b6{B@H^@+fNO{^Bx6-~B@>FL%X@(v#6YV88Oqv(-?jZgiRNoH)o zYgr5RUq^EIuyB5nO>N8O{R&kas?D%n2!TaP`zCaBHnHSY3K-$y43oa=h5{pH?8GRC zma+7@JXYaCe+Kw(ym=^vJd;uu1bWs^eJZwlkdJaIOM+K5g{KvOzC zFOFD*HkN0kzwG9Rkz4Dj46E+e-IvkO(gmg^ereW?Ss$^9UKC4a74+x|YP`02*i;sz zSPZkU)Yr(ZPJVT=SfN$;hxZNAPM+m1I}^A^YaAciYw7hom!!XGdjM&-fRg~3%#Usv z@@3A_j~Z?F&0`xTc%_WbV`%}x^`?<|GM#Kb-BPmmSx=0$?v|{JxsI>|T1@uf{hb`a zq++STT(kai6t93bEl|mS=KbBwAhYq*)c#qLKOWgp3GY{pFK)F@6c+*JjK9z;TCdQE ztr(avM_J8Z_Z~Ap6#wb%w-@yi$6})!&l}C-n=-omyAR6r*&;KkBH;VJj5Y7s)AS{J zsx%5c78sUQJ*r)d={twqDiL;P7ka z@v6FOkDxL`b~P6-u&3U+_AK8OdZlp(ixcPHh=9zHc3hg|K`q`KMH62&Mq0s&4}HuUnE`)H4Mcp zw0NJe5^fSqY_524uwuL=Ig?RVoJ8;5HbaC}zlUqy$kiod&k%z-shp|=CD$cq2Oy;q z#1&7BS(zj`9Bpbi`A)VqCiY3sn%5T=>cXP&$2V%*R+8;OWXyu;)!0{pc;)RCRB1oO z^k$X-_t#Hx>S~D?{f$LiR{5M&8;&WJMHhuP|_*!m* zW|iMeFLlcvD99fO3CrB)sxo{>5o;dTU>)U_-~LqNe4)9~t^Z zEvKZEyMSUmEFxg9u32z_S4kY@fQPG*_yr2->@5o`{jfRwm`4JW$Kz#WW8wo(PPyC@ z-(18tox7YTMZDOS75JpaMLmGbb;@qZt=c1W_Sq*##~fMRH*o#oLyj$8i^H`P_5TfA C`<)p8 diff --git a/out/imgs/esrb_e.png b/out/imgs/esrb_e.png new file mode 100644 index 0000000000000000000000000000000000000000..0d2cbe11bb1b351a9030f56ab1dd2cbdbfe8d632 GIT binary patch literal 1599 zcmV-F2Eh4=P)_e&|GWSHp5wPW_qpf!{hsgh`M>tx^W5%cSxf6xL{x>}#Y9wv zR$3ogp%uH>!uxkMU(mkNigj(my31M16D}*ph69;QHY*s$44MddiGfVg&Il@*r+$bxT){{JusFgp`covZj6`bDjB>h?!5JdC!WzNR zl=3u~6!!+@Xp96v8u%s?!qhoJMkLUXF@r`VV>o*|E8g8KqpZTKk~0x6ti1Y0R( z4^Q(KK}hh1%UH@VqVVS;(4N**GMgmg`A67T3I%rtqP3o5y(X1B$d4rRERfF#${Ed* z1bf24Y~v6GjKX3ioAIF;J2W{?nyw=0$98JamfeI4?!^&Kinhq3HzDjHi=G_dFb4_u zfCUArV21$w30C~=1nIh-eGbv;ucN-sb=0V(BY?V^)Fx1?+5~t%<4AsEll{(%xvE@K zwAwozUgsi8_?J?TrhTS@bWb>jL(F9oTfrn^c5u|OFu@zn=XI8_ovPb#E-td4`Sh`0 zQKAXlkv~|^8cu>^irB+sx^WMdJ7HY8GkhQafy1{gy+yKh?fmNi?%;U!y z!iyc@T1+B|Hu!l=@2AQf{u0YLLHuqG-=MWQ%~o?5Qq5tWuMV7J4iibaIegHVZOCA* zn!|t7^o}pB2Q%5HCSVRjk~2sc{aMUmE_rI^@LP_o4@bZ&<(yzS=S|^nso_Ykbp!u! ziVdU@j<2Xqrf?Z;9O0*cAIK${<_L6Wv?&Y&9N}Q1sp&9}qQVr;7GoY?3QXZ+Sk+3N zDO^f;wcxR)FpR7g9B&SU9k6P{xdKDz%{&fs0}NsaUlI7H6JQSeiN2p`+VcP%>|LbRjyz1P zCecJ`+Lex4W7O-QS)``=jE*Qe(OGBpH4pZL8#0YJ9$`GK=tB(s7)JtWJV;*wy&1zG zEKQ%I1+nVIFhO@xc}T}70;#R;qq^T+h6g;Jxx(IL3bQ%DJM_}c$H^D6gDu+4q`%;$ zY-BVGG;5{ZV|*ZH6)Q+4h)-EZD!)qcfF~-0R7q!%*aAARO!y~6kj+UF7)xitON314 zV@}Y8H|WV~I z#50@-kqOKa97dql@zl}O@`QbI!Z| z1FiSq;|<4AP6_Avp40q6mdz~S3RgM7Wr}Y8ijUZ>Le8plkpqMa3FaK7YM$15iLZ$E zgnI*Ul!YuOlcqvy^AqqVt60a|JgaMqL;&*W&Kdywg@$kq)E&cS;BR7`;9uCqezx3v z6c3ThKECD>|M49$Zn%&FN`RdNx#2=q^BJf+$O%41HaV({6B5d9F0hwL_6J~y8=fQX zWdKs$@NZES8*-X&!DsY z$i_2OSBqFcx+cE2;Cm|%vsl9^x@||hnVMuVk7-QTeuieV$kJ>+Q%lt~UK9WT002ovPDHLkV1f^H`XK-S literal 0 HcmV?d00001 diff --git a/out/imgs/esrb_ec.jpg b/out/imgs/esrb_ec.jpg deleted file mode 100644 index bd8efeca4adbec6c4e85f0f5337ac3feac059d6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1611 zcmb78dpOg39RAMFY-4CHJ!5m-SY|S786{z;%^9}2RHGXTMGp<#baX-WJcXDd9G50@ z88RxRS|r^}F+_AP3gsNSm}93p&vTx0{ygvJzxVyT7xkd}IatK@W%&Xa3;@{o1L|SG z1V}9{gccl$Kp;>kq&C_}7p!7i^x>%YO-ir3Wp}q+)NZ5AU|j(qK#j^Z3woE}F>Mk^M@Y;uyGcQr=w$${u zwGr*xy<2u?7hkbtDDK}`0iQTnsN95Fp!Vio-Sq{BF!2vKQ*ROQS&8AEt@1cx8yS5s zyE0!?*TNeN83vUof}0XukUzwdC$)d&x!-8eI3UZDEtN+J zzNAMwpV{QSPq5QjdM|}Yl;R?!;p?2U1pdPJj% zTs3|saj0i5MmdK*s}lL{^P?3^yE>ewz)7U*qiW!_yyE@mI;}RE+r4HoWuSs67Q3I6 zTNah*BQBL33hs$74XTmk?g}1B_RA@pj$rL3b3H7L>^4S5VoDNz<2VHTu}%#_)qpxB ztCsHf%}^P2^o=KkCw0jBLKYW^4AY!1Tq3QnV`3t*Qht1;$zpM{9~RHVl8s(XuNV7y z8PI|-7H`$yI9C;W+v8YftH5@wC4S%GsiWS5YH<63-r~>MVR3e$kd-Uz<8XhQUjbvvzOsWAI=?~1qUZ*TbkBx*!g+J`w(?9p(`bfY`OzslbqZGn}h@u+E za{AdXJ8p>c9TbkQwhjzdvIg_)Z=KG>Sy{q<7bT>D=ZC82_0oqN+(ki-$*-ODmqc;s z0WEBiN~U98Ahu7Qy zr^vaHy##uNsEXw&$W*dPq=n|9i^h6REKP%HO>;GFvYhdv3B{4e>PRJD zj70d`V6#p0c6`oQYEu7#bJ^Z=F~|C_igMd9Dx>P*=z6IH}%Tx9dBx7a%23XYGYE&O!7-l_PV_-AuqL$>#*4= zGL7!=yM%cH(=Gs7KH8%mARP8)@otY?txuPJ>lcnXr1!#V5{VP@Av zfI`(++R!`EI&o9UIx94=r*!7ucf8zm)R~c2^;M8qT6bZ1z_h|=8g7j^k@)sb%AW^P zmemj#!69yY9zDsHF-#hIu}OPlKm;me;uJ8O^{F2qdKW(3GfB@F-sL8$t&*_0M2Yul K_NgQ4Cw~DnpPO3% diff --git a/out/imgs/esrb_ec.png b/out/imgs/esrb_ec.png new file mode 100644 index 0000000000000000000000000000000000000000..7877c944f6fc166afe50cba6b6cf711c10b37afa GIT binary patch literal 1816 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 diff --git a/out/imgs/esrb_eten.png b/out/imgs/esrb_eten.png new file mode 100644 index 0000000000000000000000000000000000000000..9430c73575d28dcdbf1474d2107a795f041c867d GIT binary patch literal 1717 zcmV;m21@yfP)>mB8W1;V9QJ9P>r)HAgF?XKoCSIQ~_0N5mlh5 zATNhZ6h&l<;-+&912H~X)XYuXR#ku&%4au8)8yXVz~6*?bCZAmIr-$5d;TXUghgr9 z1t&YzoVf~W(vOFV(BkN;Hd=QETW`0V>X2WvK{&&$b$LzbRP&M`#qAcDVyNIUx0q$F z!KRtvDn)`qnWmT_7^b00wF)zdS2C&H;dQ*Dt69=6aVCw*b2N+~9t5?Q+s5(&FLP)<_Wy@h`W!(>TE>>ufhhBU_}{s+)Yo8T#4eCDRoO?vtfheT_Y*LNjAEHQser+h&xYfg3eaVp8(2 zqMnw{(OR}tt(~p8RB6uAMoVp^$&?{AR)*L+Y1&HHOu8(YT4}9?*qT^bn#9974q9iW z0}iV^ML(&+QM-JYbmeg)lj3b z>3NFny2!lv6Br#n>ONV5poyLe4c5Mv9cRCqgv(%u8*GRIzav{88wGg|IP6`YtMPy! zm}y+W_w2PE2D9< zAeN@Ssom1?uF+gbOvUM7*dl1+0bE=M{6V!0L3f>mB;6Pl?&}S7iJPdSV1Wrq;Y^33 z!Ph#D?sdQh)h@NnKJR%V>1A6H4K4y#)&YBcEmbp*o2jLg1T@t}Hb#e8RSWd0JLqE! ziX)pCy0KRI0*D4zdf%7WqL-I^=pD1PP)EvAXsts) zbQpjiv`^f7w|G72+UPJCRSVYB*)*@J1fs(^$zd-F`j}~t6TmNpvmH|HNJ7W_+xx0O zl_L>ibUYknYAZ`y*)p}$UK{PS(LtWT9SOirncEqx3P@WFrK_O?1Bg3iUM0)r$2t(Ris^nWQMzwFU|*>R`8; z>vGFYGT+-?(ANsXyr#QXZ8OBZdJ9Uupx836$g$dBYYk9tiC=4HyJy_wpllH++5I$10v{uOgvW0+}r z=x2;vMLL+OU#y|J=%cORDxHlp&>$BXCeL(Nnxa@^txPsTbAuA$hB_&5zOF9NLktm1 zhD#07ORf|_&|FuYbk?0+n=}@T0MF|0c^uWN?r7~d z*>-%PeKPoC&w0^PS_&HIZK)S+_BsCPvbu>6dPgN*)2a^s)O@RP$cXsQ?Go^**nGBH zAZX=nhwU@pTj1)tiSH3i2G#a4)=#3D;Psmvbv$3v*dJu&cP|C%$`z?%G;@aF#kN8{lTCagHj00000 LNkvXXu0mjfEwok# literal 0 HcmV?d00001 diff --git a/out/imgs/esrb_m.jpg b/out/imgs/esrb_m.jpg deleted file mode 100644 index e0e95220f4a6a30b9529243f427312d10b5034cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1573 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 literal 0 HcmV?d00001 diff --git a/out/imgs/esrb_t.jpg b/out/imgs/esrb_t.jpg deleted file mode 100644 index 49aa662e2a60d73a11d09584a03ea1350db9edd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1470 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 diff --git a/out/imgs/flatloading.png b/out/imgs/flatloading.png new file mode 100644 index 0000000000000000000000000000000000000000..bf509d40d5cc2d35470e34cc658a01b0e57600fc GIT binary patch literal 9556 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 literal 0 HcmV?d00001 diff --git a/out/imgs/keyboard.png b/out/imgs/keyboard.png index 68f6d2d6466eac7ee53a826a86493db0580fee17..5f05346bf25a75211f1a89a22153987b075bd4b4 100644 GIT binary patch delta 955 zcmV;s14R7F2gV1G8Gi%-005Bn5%~ZB1C2>UK~z}7?bm;3Rb?0l@Xxuw=AE0aZMGJ! zO$~)6s7V9{Y6)spQe}w+5lMfhWk6LBR6s$1Bu11~fEg7CNM$$+#R^tVr9f1}+)}5y zdoSvC(`|R>1YjVtT^DR-aL@nm`S3pHdB4wlg2;dK#FXF?Tz`T~@c#`?04<|w+--|D zy$me8iaSoDe25(b0D=(#BQXsYdmgzf!7)#HRI>_&5y4Z+#T>TvO7JUQ7s=}%p)!X~ z_||*&6o)5ShPS=zm~ey&PE@3;0k>%Og%^q~7~$h&f^o*X4OQj}B}c(3b3{%T5JaG5 zli3R?6SalfeW^|SAelvW!7076*{4&7yn1(8muw5_Wn(T4Z1M+TAW1F!~`U`Q#txzG9(yrZ7XEYjPudMAZ znB=%Vft1~v|4nku(JiLO$DZ?~cGWif!CGBTNFuVt$%}W4ImT;O=OYOpIwq&gTFccM zP=BsR-*Dlaue>Ay&T6x~X!U+kZ5d#rXH5YOrLG>j)PWEMaRrfrKqMg)pIF84@?#2m3?xbQk}2?Yow^?^uI zps&b}TqGsZF90e1B18fe#o+S*C{s3SpEUOT delta 959 zcmV;w13>)72g(PK8Gi-<0027t*>V5?1CdEYK~#8N?b?56&3hcj@mUwuFmt)+Vl>;% zjsy4HWH5m1%;tecayqtFP4H4 zw&OA?3cjAztNQk-I?Xv-XJ4P{QQzMC{ODQVb8`2Q&u+<|-e2|=VK5aEW5iXqK`P2_AwR1W~8p2F%0^ z%;_OQ$j6X)!GC9Q8;%D&!r6GiF*qI)d*9&S5Jn{;vKfa_<(gHZ7W=T?m>)t7!kUFq zt@#E-qyl?Ur{{=l)Y`3jj%Z&P=aU`$9kQ_&rC5O_=#S+nm2w0y92KtlIt;{YtkG;W zzQ6#Kp;Rh#S1#7O=BsqyS6Hc88GKlf?BF6CH)id~!+$Gd9z`)6LjVoNtO-7ItzshP zT=(5HW~cDEW@3YFunjh>KpFz@p#Zt)gM0~KG6o?76EvTM&$M)F2oC z;2i$MEfgS(X05-3pYbWqY4*F;F2iJ8)!#1SKa9dY{9)Yx7q(z}7kx|X+Y&MXIp~ck zC{kb$nKD-qey#5VA7<%{i5Q`I5vIG&$iPsY5r4!u$CB#u_ptwP@>slOhl&E&cj-4L_hd-ZwO(0jgV{a z2rNu$uwn{v2vO`tHL_5TAF%^RP^8e)IF9Xz$}X*~*K<_+4&sE?9(8>KpTQBW*@KT! zg?~EjJ%D+blS03i;_LojOE%aB&%{wU3Ve$P$i)l1c7^Xm2wK}|4wfVAKEoA!1CDEU zvMYki(F+C0ld;G`o=X9SV=(-hb(SBWV3=`VzV6FGzGgo3#nNO4ztrE_&@M4_pxvbn zPw*64+i7ju|HM2)_r=_6HGlEG!L4vSq&PKRa4mkpE5v%R*Jwno{a-vb*n4cS*V$mN hv%y|xgT2fKzXN>AvE17%Z7%=-002ovPDHLkV1nTX*W~~J diff --git a/out/imgs/loading.jpg b/out/imgs/loading.jpg deleted file mode 100644 index 2240b7924607e46582d51719ea4ff31e207af6bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4327 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 diff --git a/out/imgs/loading.png b/out/imgs/loading.png new file mode 100644 index 0000000000000000000000000000000000000000..b2329ee915b5b56e28a86deb9747b4898e45a53c GIT binary patch literal 10762 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 literal 0 HcmV?d00001 diff --git a/out/imgs/microphone.png b/out/imgs/microphone.png index 3ed6db48dbc553375eca3bb3e8df1aaa3d5986b7..7b553e4026e598b89554974c25e843bbd9d05cb7 100644 GIT binary patch delta 1279 zcmVFxp%vB!=-DHn1-^lFdd0gw5&q2 zRA?$Wttj^@geWKkD4|9L>e46yElkP16V-0%z>#Q}bN+qd^E}`49G>^kFKf3b0wEmva{^I!VDzZQ1>SIE|T;}kW}4?qwUKF&}?4Wk%90BN8R;vhB_ zm^2242bfGfyJ;Yc?li5^N8%thN;|-6h7g9L8x0%+Qg_T*3F}p?#38MKS;}jG5QdN> ze{tZvJr7y0W=b4}%gka8;6#>>jmM$!)p>qG#8PZVQh!Ve(qZw7^fK;><$90yCiVvb%0M#Z>eqqLa&DB@Xer-a2E)s6q0ibK@q3ueM?G4Elru7!{`#$xjhc^zmE zF-}*9lrewD=4J9CiWUHlk)x|OhG}EivGHiz3}qMT{F_5e)|G^aZO7U+y~*!Ddz>6y zSzy8Cgn#eG?wqxA#;&(YGGiz<9zJ6*4w3xH6n)yLTnCOlQ@y2nP3`*XwRP(%Qez-C z3V=K&MieW+1#FiRZeD9bS_nRM?UA#dayd=8R3!$+*QP_0 zi_2bU>*k}0q(M#1-3=Sm^mg$tk5q1J%v5dV37$ausy<6Huee?k<~`mgl16g$E+V05 zVSoKnJJg9dDuvXk?aA0ET6jfo z?`Ye;wDSR-6m;4POg=hk^yuT;Ef->=!1Sd*x9|`|>%u#&y=KSpf`B**>~y@4E_8_Z zUW3I-1`=#L=P*Nmc_%H%4c|8@EjPvmQ-4wqa*i{<`?!uf%-crVo}KX~Zfl z-y-{RJGGt6NIn7pHu1EcrZ?ZYTPRcj%5emOt+->Wf>qs3XS$`gq z{SRJ)Y=>x23M|)RCEhv@4}D7X1OICbOOL01owqJ2|I*gDb zQKF$rAOvxD*$wu>!@DY8J{c zFA8je?dJt6Tug#v**I9IlYZ*6Z1|~8c3i542^`6~wD{WapjU}V#05j$Dnuco0*S3D p70FxrZtdS#pmK%(i!Qq8;%~A6|1p^QdjkLf002ovPDHLkV1h1aVDbO} delta 1409 zcmV-{1%CRH3X=x?7^(4-5HLc*Vq6ekQ3MP@A);791b;zfkqQMZNLmr0EViY4 zr_-5t{LrDy&`#TVo%+G_e0eYLF28%v`=4{qd(dv}_J1=KooRkjqXjbGl7%R?uu&J9 z3beE___FFNuxY6)!}+j+YaHhjodu=}kB$O(mwHj)_cd2mlu(Hhrvm(})N9(*)tM?? zAa{A!wQiJk(SOLMO5*)EftU5xHg@&4rOpj8B+5Y5ok9+Ahj>9z#29@soVy*Z$7T-T z%i5S~xuf#&(vK8MC{#|An+~amw72n5M(e>cSKJ1%Djo;t_!h-v2I9qnsSF7>DhgnF z0SJP^#TE8Z$Qb%jiDgl5tZ)7Nra)k$>uq`fMA3O{Fbh6GKDQ8c!+N zK*#+{*27j6WpJHZ&3Bjsgy>d?lbf8l=3jJ66YRbV!`DW^SAnGf(8{TuP#VKO+UE1Eta zY=X4_>wg#v4cvT`G+lI0deL|F8!Tu9o6QVeROjI4u(rfyzQDfFoQVR?ldAJSSM#K0 zvqS_o9olaW;{eGGnzEUuueM?7V|L>JgBm=(z*L=|X{1}XW6qEBK89C0<4%stiJG`f z2k$eeLBjZxG@Wm%bPLWu_0JCPg9bvvsl16PWq+*}S0E-=Gc{z40N0tRFWptKw~HsK zh8jH7_A2Qd1yySSb1}>B%gc(tNY!WVsn}U;R0f)ECzeIU)#e1&g@%wq3YevT369zR zrQNE$9Yh=|Cb!?6D2U5U;d@d-v8v2^ULOm_?jPpanb14NVPR0|^?W^ZuJWH&BgEE@ zO@F1ubhAAK>&HQ{OxMRkQ-$xz@;-%iUJ)bKJ-H~ETh$7&@s0!g+05f1-f>XMob)5G zEy!ah`*>dwT;ftLT*`?*?$nB$&SNcG;?e@<+vxiqS1>z03t)cGZf?!09(-?kN_;Wp zuU&t}wyMn(bdZ+ouJiPPhCN-s#s=wFlz&5FkGpbhgLNLi)$hZPqJ|lIZ)2zJr0*Wm zaXzblf$npuN}F+PzRJ45Z4MXNtG{UOkQd{tKWb7Q)qkTi zo1WR(OgZ;%;C4HUbVbv(#U3?XKv}y5eBS1?69&9nrOC!bHUvKEKGcgs3ZF)8dZ0xa zf;5|$!iXzP3OXfyEW-gg3_QeHs zeO+;L+vy=K#~vMXb&G}j@W8xQ7W7&3Z)X}->}uE1SY>#PT2VnG9rY3tD|*Ho@9pBB z;+f(jA-C_ep_dM;abgpEP)!s#m|FOzjBujBkFUPJU<8ASu?#;JMt6w&m=J% P00000NkvXXu0mjf?JlCu diff --git a/out/imgs/microphoneR.png b/out/imgs/microphoneR.png index cf558338af6df4b6ba8d4bf4d306ef1e9ed18d76..bc5cf994e0b6c1c6a38aa3482ed7c725b7693fe7 100644 GIT binary patch delta 1773 zcmV~BYy_NNkl*H^C2f(V2FD>gXi!ko>j zGKUI~3~e32m>HR71~W{UKc` z`38Vh)Sxx=#X}1xw&DuWkZx?RQ?XuWjb+Jd5zGcKlYW_g|F#2dcaE!I5%ImS@Ve(d zKH0Y|n5$1SZNPOvFrBWXdlDY$>0BtNc1l3lKp+c#11L zJ7ZUv7e9mJnBySeI08|C*HHKzgV&bjqpi=uGbf^W^=uz}9tEY~0(g-=!j%qZ;tE&O zfUYyttH3A_>}l@7L$zUkL*aWj7NTlqE^J#E3=O~?bbnSx-qJ%|IHTb8D>R%lao^!E znqxM;$12Df*GrGe4B2-2yk7X(5GQ$ z(DTm0=70Fj$Ch4m9wd{3@8$R%MggOpxG9yd-!o}%Mt#y^Yz4>j7$us9jn_<8`!eeA zz}Pa5{d5{ePCI>^{(=VxCu4#cdsY8!JP#w|FkM3%8ER+L@sP0w$5#3TvQ7YK2Gs{t8UUrdyPIQcH@^`Lj&1P3L4Gs656S5j!GHa) z+*NV_!_e02EJ|%+7PztatG0sHob*)jWJQXWkMps}M`adqdj1lk=zgEw;8>S@L z854Zkzb6Nb=2Qf~L0gk;N4l7?f5Qmb^s&NM%8I>Bfbw8Cso}_!}a$F$~)`nI8 z?7IEskh!rjvJB***TZVeKX@?c29BTMQufg=aaAwk1K_!vf&yZ@P!K3vV1Ix-J2xm} zdRm(M()nVJ-GhGqM|4G!*egB6ilSrw0^ld7Vns4Dc9T$JidEH=_^E(UtD; zs43zCaFGxP-wG7V4;h;P8F#^R3O(H(UBw&=n2@KpFPRnCap0y&0x~Xxk4G%Wrz=PE z0Mqh}Uq4z}&<-+ggO^SVSbsT&I`8u;JpGBHC-MKl+WM~QTlTfdmXpy{7y}-7E!;3~ zZ(G-frtWzuc}-hdXuRh4slMYKi7#Rdh&yt%0Jf&!AXPk2+j+2JZ(HB`hREIc5czR) zY|&@_9FjZ!6ncC6+p$?l6+b;4D_!*WcDeiDg;P&9MrOXy5>xnqd4Kv;_l=c@I+}0( z{dxJqzdHURBA%4Kh~IFmYvqwpVpp!Ag^PUJ4;+QMJVSGJ4WJcs`xnZ;9btG+TL_h?Fk2_8M#wWK9tRojr;4NU<8TPY;K;3R)j zr`Digh`?}x9NPt4*Jg!Bsir)?{%Tp!v;B$d3YtJt9{kr(uU6k_m%rOEC}b!g zkkP?bM62LBiY-gWqGcuw1;&ofsI=0SR?(KBWBpOvPMuv;W+8-?`_r=iYPgxeq2a zsYy+0QWIA)5uN({fi^=#e-F47Fo9jb?pVZby;9q1!qGm_AgLaAb1tVhY0W}l9`Fs| zXW?l4`VSSb)_>anOk~khpP1=?v?^%SW*zWc0OkPefqmg4SGLT9(b zy$zkbm49^Dyf8$l%pjN5yOfVNiwZa#jR%39z()t)s=)FI?cFZBPj^#kD*UFr{Mw62#z`lopn@1aV z%+Au`XnbA%>|4k-cm%j97O~rk^2Q?^jV}TI0#p^y{TT3-{*i4+WF?>kO9}IXrk=3C z;eTj+Hn0y^Qb6~Uz}i^EZu)P-A6io-4IR1V85bMD1&nG-8h`xp%99f=Y2|Mu9xD*` zU->nA>e9x>i%z)dT=rQPriw!69E{mj=09F&?OtAA8|z`&!x%?0#p0j`fl?3Vry zGOjMqYAUp$Er6VcoTsOE=5*;uDy0uBOMi!>@lC+pef7?eI+LHqEdw6(6&V3nJW#rC z{TV{qQsPXQDIJc+R|1a=l_QjZr#TDU8jILR2D5cTO=jn@J%4O;GLP)bmWuAHM+yt2w}81xFH@#5mP9`{ARVusNdU<`poRwtDq&40U> zRe#Pek{-7R=abZ)p=#Uw-+R&Z^p{>)W&eFBd)--YZanE+<+<+*OUP%kpfTZ80_kyC z!{KOL(f4&=*^tvoco$*)Usnzd`=h4B>|R%I)qpZV8UOo<0z|C6&8a&d{AaRi%z^WT z{DZ*8%XID0nr|Mwp(c7coADm6{(oG`{j}Bt{%PcL+H6TWTU(R4>&7F(b-=m;`mK&d z>=z3$IIToAR`^v`53w?)_|@w(17`D>C#`%H^fIt~u;mEU$0GKD;n=VaK(V4^U(pHgHJ9sj!UKGQFCIPo?U|!b#Dz zcv|-;CFjN*7+^t#`L`0k^uBQ+vtcZN)2{xA21oVXT#h~PZS%^G)K;3Ww{|$oesC=D z)ejQ(SIwza=TeSsS%1bmCO z+1|&~-5%3IM)U1+f-R$Sh8dx@AMad$xGnQs&{Q3je)V%#Xecw4XDG4)-VpW;!0Go~ zyB=n@ZE0^!D(xB7<*MbzS-~~mnj1ViuD}5I9DnUxeI}8+!$E)1R00}D zgbaPagNWl^CzqRr#LSwy6BXXv~@`zQkKO)7sxyqAtAC z<8-&Dy}FF6OU1)u;B&9e!>WOR0WE@C=~q1!B}Qwd&v;%52evILzrds>HK|EWYEmCQ a{RbXAr+?2`#tjz$00007zFfLpgUHVVBaIK5FHYA!5HN+)B(GVg(?f6+E5dCESA(35Db+$Y1vvz|I*-2t{gAUgeB?9c$ z_8uSB13}I~eSaDtLCy_D0T^gjE@>Lv3sGv+9y8`Fm{(R&GisMQkV1PMpY@i$s7t?} zy$HBOdKBGImB<0yZolI> zQvlJh_Y9ixno+4J0NiRnxa2wz{gQiOMkAl9b8!S2f#LcPMg3PYz>ybphBm7MeX5TX8(;o`2oh z?`@qRN(K0>5Hl!sp=u%u@(B3F5AGr$0GFFrYsE3=5)YhLms2!u%0&csU6#O&=B08i zf$s!WMSrQ1e%&gDP_}4UN<}d%a5tnHe)Xo~7VR|Qjy$lWlofaZNR*s$K$k0u2tcLz zq;3^_A0V~lqJUHYShWmUfR}-~yd0u{H6*ZFXk-OmRME|dgQ|i=P2QsO$`a;Uk!o!_ z%~_}$c1TH&)SLlJx*P)X*@2f-VAU1N=3K?i=6_GZCn$AAC3Vkr?}+;C6&{=aNm$r22JAUrg9 zTL2EmomB>a)h+7rHP_Z>Mo)Ih1ptmJ*#`gtWZ&bwj`ggVx#IxNna1;*{OnDEYhb@_ zPk*DPu{Ge}FH3rj7y;9&&0hpONsklDE?5N=O|&*uPg3f{lm&Zrm~&fA0%Q;FlB$}N zh&m8U0HfMgSMy-6?t zL_vT|vpVO|rS8aVxW@VnMX5vt069SvvVQ}6%22T8{(rzx6sTnfe$`O0q5=;W`*mMu z)#G;|r{kd~g^$Kgv~bk4@E2y-rMSD>;D)=qWKH literal 4412 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 Hu0mjfi8$2^ diff --git a/out/imgs/norating.jpg b/out/imgs/norating.jpg deleted file mode 100644 index d22025ba37bfd9a0a13210fcc7d85330c3cca5e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1541 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 diff --git a/out/imgs/nunchukR.png b/out/imgs/nunchukR.png index dfe5d534d161c41a3879090151b37a4a6c59eada..353bd66b5c80b1fe2a49beb381af35b517faa361 100644 GIT binary patch delta 2346 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 diff --git a/out/imgs/wiimote1.png b/out/imgs/wiimote1.png index 661795da719d6395aa3934042e76f28f228b02a4..81f66b15d10c5bb7f83ac4376381abf5f63976c0 100644 GIT binary patch delta 978 zcmV;@11c?|9=Ww3LOtY2P;cmPkjR_F`I|uPpK4`mHN`GZ`v#k!}H%)N+LNS9j zaT&J2V1m&3@+^6*l0sm?ABw3t7*;Gh!%j&|wh|6Blc%x>b-!)*G3>EzAd zFhu*`@EByU#2fnoLj*b%f$7!^89*>p!$2mPbWb5M;+&^)4$>x&$?{R&SA0Oi0A6YQQuJv3p z#6zE=hYnHGWFfnBqOPe%nHb`SN%ovzYz`xHsXJt8yMJ_(z|Vj4^f!!D9PiNE`;54RbTcT8O6*OHoEatQO_;LexT}mQK0|(kJw=Lq8>$zo|)eHD= z9ZTjCK@F8zB-JoYLV@5!XP7@up+DA3C=^T|7;$Dy;b2Hm@J*`< z>Hwe)s`%G@ITdabNd(Zeh_lb;7ormcHZJ3d6=aV(1{s_z z80MvGd1fVx=P@z2Ki;y2c^#_YwHtVL6%+Gl+J8Y_(!rn8Y}&>A4!=zT&+p;rG?P8r z8|KIq_0S-L(Iz_&09B1($Bziqz|Mn6sv(*ja4^&zph@JJDmMA=c?tkGIphC1 zOQrN&0GFN%;B%7;;6R*D;B3eqvT$%6NUk2^=1Z9v0is0kNJZ1-#tF8rrb5M6$(xWPWE_VFRR|;qr(gb6#7gXHD4d?e;P(Avg9S5s4C`kkhD-T7}})Q zp09W5B+n;s1a$yWGB^QKJr17YSeKJc!As4wCedO0uY7QbDmXHYD6}CCg2`_G0}xOu z7~;YcPch)bfHZRwaBPsl&*BtvX0*UbJZ~2B4?VR%YfR!SG5`Po07*qoM6N<$f_p&D AMgRZ+ literal 3669 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 diff --git a/out/imgs/wiimote2.png b/out/imgs/wiimote2.png index 30a1177f83a5871ac7365fdc0ba381edf7871de6..91b6c26020669a858c9154acdba6fe4d8b242b99 100644 GIT binary patch delta 1124 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 diff --git a/out/imgs/wiimote3.png b/out/imgs/wiimote3.png index e48bfc5f8df42f3782365106a114792a946d1289..9afc621207a234956e76a3da77dcf2d2bf9f9718 100644 GIT binary patch delta 1148 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�P;2R)={{i59=+<(N8$t7uQBS7T2Zz3a z@kN-d!hupk)HDJ1tbl#$JX~27h2C&g@&iMOJX=%oV0z%>w1A9&jk=s4tH{(&Dzy%V zdu2MW)V5|>PkeQgn5k0f06v_B%PW$6d~|VZhNTX0%=GRe+*@pI_o#})9j-1mL8Dku z4LD}nv&tQhe=}5srKB*$g+#08Iv5TTQ#okDY$DA}HQcMrA@eNPynvgB`$Xrh3Ql?oC~3Q3|<&_ z4u=mfPC$35VbOM%L)VmU5__kvH`eg`KPuc?N`|JL15liUC4?zE6Ebp}Qo&FjCfjo&d05jx000000NkvXXu0mjfPSpxK diff --git a/out/imgs/wiimote4.png b/out/imgs/wiimote4.png index 4e5a6368634d2eb3ab009f028d5ee91e3e0c51d3..dc72d27896626838fc3c114d02c90498fd07fb3e 100644 GIT binary patch delta 1087 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 literal 3826 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 z zb8Xo051CFbut%^xPk_1h41&r)%C87rQko#i3I{uS1$L?ky9U+-Ch5R98eSe0*fl^` zR-%EG7FAV7UOO6Uvrw0{7&zt2ax^Fp)K{PyY*yGnD-Z5$hp)%rQ~_>khP3~8?`;LJ zqd~cFcRQTBERO7kW?L0*f-N2J<}e&M38V8+Lf-Eif(H(X`k_-xyq8uPcy)-1*SjZ0 z{TkmEg&Af3BB|TY|O!R*+^NdfWuXng?l^T!9$fJFROr8Aie(qaN0L}xxp-N^_0<`NUITc z9)=^6aBK>m?u$7!n}8iHuutaU_bcL|izZ9Hy)71J+mt-026*dxfee6RNnY<864Q=* zYC9Cph&j(Lmq%HTbYJDntn$(xynhPL%}Vg`!AN<8WgT#+^ewG$Yis3lk5%Vzjme9Z z7bOc;1BXgG+VYCWzgbosOL4~(CK8oCw?knsX3E|w%ErRXL<86O(s9^7Wa4NSUONuE z2jw$I!=9t?`f-WI(teVGJ=oj|;|r4i-qr@2T41CAGfQxDP5|diaxQOb6{QocaLR}J zZ{hhPro!RE3jsiMp(;OS`bW2UT z`MwpvFAYY(&-H`)ENYBjS`;g=2iS#e-EiLYmAb~^y&qxDbRiC2klC%eEOs^1-Z@d; zW+??wSb~i$FfSyyD ex7YJG{WSnzgPhe#^jwJm0000xG0tY diff --git a/source/gui/coverflow.cpp b/source/gui/coverflow.cpp index 577e8949..70be9230 100644 --- a/source/gui/coverflow.cpp +++ b/source/gui/coverflow.cpp @@ -1926,17 +1926,17 @@ bool CCoverFlow::start(const string &m_imgsDir) /* load the colored skin/spine images if not already done */ if(!m_dvdskin_loaded) { - if(TexHandle.fromImageFile(m_dvdSkin, fmt("%s/dvdskin.jpg", m_imgsDir.c_str())) != TE_OK) + if(TexHandle.fromImageFile(m_dvdSkin, fmt("%s/dvdskin.png", m_imgsDir.c_str())) != TE_OK) return false; - if(TexHandle.fromImageFile(m_dvdSkin_Red, fmt("%s/dvdskin_red.jpg", m_imgsDir.c_str())) != TE_OK) + if(TexHandle.fromImageFile(m_dvdSkin_Red, fmt("%s/dvdskin_red.png", m_imgsDir.c_str())) != TE_OK) return false; - if(TexHandle.fromImageFile(m_dvdSkin_Black, fmt("%s/dvdskin_black.jpg", m_imgsDir.c_str())) != TE_OK) + if(TexHandle.fromImageFile(m_dvdSkin_Black, fmt("%s/dvdskin_black.png", m_imgsDir.c_str())) != TE_OK) return false; - if(TexHandle.fromImageFile(m_dvdSkin_Yellow, fmt("%s/dvdskin_yellow.jpg", m_imgsDir.c_str())) != TE_OK) + if(TexHandle.fromImageFile(m_dvdSkin_Yellow, fmt("%s/dvdskin_yellow.png", m_imgsDir.c_str())) != TE_OK) return false; - if(TexHandle.fromImageFile(m_dvdSkin_GreenOne, fmt("%s/dvdskin_greenone.jpg", m_imgsDir.c_str())) != TE_OK) + if(TexHandle.fromImageFile(m_dvdSkin_GreenOne, fmt("%s/dvdskin_greenone.png", m_imgsDir.c_str())) != TE_OK) return false; - if(TexHandle.fromImageFile(m_dvdSkin_GreenTwo, fmt("%s/dvdskin_greentwo.jpg", m_imgsDir.c_str())) != TE_OK) + if(TexHandle.fromImageFile(m_dvdSkin_GreenTwo, fmt("%s/dvdskin_greentwo.png", m_imgsDir.c_str())) != TE_OK) return false; m_dvdskin_loaded = true; } @@ -1945,7 +1945,7 @@ bool CCoverFlow::start(const string &m_imgsDir) { if(m_pngLoadCover.empty() || TexHandle.fromImageFile(m_boxLoadingTexture, m_pngLoadCover.c_str(), GX_TF_CMPR, 32, 512) != TE_OK) { - if(TexHandle.fromImageFile(m_boxLoadingTexture, fmt("%s/loading.jpg", m_imgsDir.c_str()), GX_TF_CMPR, 32, 512) != TE_OK) + if(TexHandle.fromImageFile(m_boxLoadingTexture, fmt("%s/loading.png", m_imgsDir.c_str()), GX_TF_CMPR, 32, 512) != TE_OK) return false; } if(m_pngNoCover.empty() || TexHandle.fromImageFile(m_boxNoCoverTexture, m_pngNoCover.c_str(), GX_TF_CMPR, 32, 512) != TE_OK) @@ -1955,7 +1955,7 @@ bool CCoverFlow::start(const string &m_imgsDir) } if(m_pngLoadCoverFlat.empty() || TexHandle.fromImageFile(m_flatLoadingTexture, m_pngLoadCoverFlat.c_str(), GX_TF_CMPR, 32, 512) != TE_OK) { - if(TexHandle.fromImageFile(m_flatLoadingTexture, fmt("%s/flatloading.jpg", m_imgsDir.c_str()), GX_TF_CMPR, 32, 512) != TE_OK) + if(TexHandle.fromImageFile(m_flatLoadingTexture, fmt("%s/flatloading.png", m_imgsDir.c_str()), GX_TF_CMPR, 32, 512) != TE_OK) return false; } if(m_pngNoCoverFlat.empty() || TexHandle.fromImageFile(m_flatNoCoverTexture, m_pngNoCoverFlat.c_str(), GX_TF_CMPR, 32, 512) != TE_OK) diff --git a/source/menu/menu.cpp b/source/menu/menu.cpp index fe01ddce..2f68c67f 100644 --- a/source/menu/menu.cpp +++ b/source/menu/menu.cpp @@ -1215,8 +1215,8 @@ void CMenu::_buildMenus(void) theme.btnTexMinusS = _texture("GENERAL", "minus_button_texture_selected", theme.btnTexMinusS); // Default background - TexHandle.fromImageFile(theme.bg, fmt("%s/background.jpg", m_imgsDir.c_str())); - TexHandle.fromImageFile(m_mainBgLQ, fmt("%s/background.jpg", m_imgsDir.c_str()), GX_TF_CMPR, 64, 64); + TexHandle.fromImageFile(theme.bg, fmt("%s/background.png", m_imgsDir.c_str())); + TexHandle.fromImageFile(m_mainBgLQ, fmt("%s/background.png", m_imgsDir.c_str()), GX_TF_CMPR, 64, 64); m_gameBgLQ = m_mainBgLQ; // Build menus @@ -2785,9 +2785,9 @@ const char *CMenu::getBlankCoverPath(const dir_discHdr *element) } blankCoverTitle = m_platform.getString("PLUGINS", m_plugin.PluginMagicWord, "wii"); } - snprintf(blankCoverPath, sizeof(blankCoverPath), "%s/blank_covers/%s.jpg", m_boxPicDir.c_str(), blankCoverTitle.c_str()); + snprintf(blankCoverPath, sizeof(blankCoverPath), "%s/blank_covers/%s.png", m_boxPicDir.c_str(), blankCoverTitle.c_str()); if(!fsop_FileExist(blankCoverPath)) - snprintf(blankCoverPath, sizeof(blankCoverPath), "%s/blank_covers/%s.png", m_boxPicDir.c_str(), blankCoverTitle.c_str()); + snprintf(blankCoverPath, sizeof(blankCoverPath), "%s/blank_covers/%s.jpg", m_boxPicDir.c_str(), blankCoverTitle.c_str()); return blankCoverPath; } diff --git a/source/menu/menu_gameinfo.cpp b/source/menu/menu_gameinfo.cpp index b4fa02a2..b0bba1d6 100644 --- a/source/menu/menu_gameinfo.cpp +++ b/source/menu/menu_gameinfo.cpp @@ -654,17 +654,17 @@ void CMenu::_textGameInfo(void) break; case GAMETDB_RATING_TYPE_ESRB: if(RatingValue[0] == 'E') - TexHandle.fromImageFile(m_rating, fmt("%s/esrb_e.jpg", m_imgsDir.c_str())); + TexHandle.fromImageFile(m_rating, fmt("%s/esrb_e.png", m_imgsDir.c_str())); else if(memcmp(RatingValue, "EC", 2) == 0) - TexHandle.fromImageFile(m_rating, fmt("%s/esrb_ec.jpg", m_imgsDir.c_str())); + TexHandle.fromImageFile(m_rating, fmt("%s/esrb_ec.png", m_imgsDir.c_str())); else if(memcmp(RatingValue, "E10+", 4) == 0) - TexHandle.fromImageFile(m_rating, fmt("%s/esrb_eten.jpg", m_imgsDir.c_str())); + TexHandle.fromImageFile(m_rating, fmt("%s/esrb_eten.png", m_imgsDir.c_str())); else if(RatingValue[0] == 'T') - TexHandle.fromImageFile(m_rating, fmt("%s/esrb_t.jpg", m_imgsDir.c_str())); + TexHandle.fromImageFile(m_rating, fmt("%s/esrb_t.png", m_imgsDir.c_str())); else if(RatingValue[0] == 'M') - TexHandle.fromImageFile(m_rating, fmt("%s/esrb_m.jpg", m_imgsDir.c_str())); + TexHandle.fromImageFile(m_rating, fmt("%s/esrb_m.png", m_imgsDir.c_str())); else if(memcmp(RatingValue, "AO", 2) == 0) - TexHandle.fromImageFile(m_rating, fmt("%s/esrb_ao.jpg", m_imgsDir.c_str())); + TexHandle.fromImageFile(m_rating, fmt("%s/esrb_ao.png", m_imgsDir.c_str())); break; case GAMETDB_RATING_TYPE_PEGI: if(RatingValue[0] == '3') From a85d33ffd7254b67978ea78f2f9a76682fe22630 Mon Sep 17 00:00:00 2001 From: wiidev Date: Sun, 12 Apr 2020 19:39:10 +0100 Subject: [PATCH 5/7] Use the memory manager for downloads --- source/menu/menu_cheat.cpp | 4 ++-- source/menu/menu_download.cpp | 19 +++++++------------ source/network/https.c | 11 ++++++----- 3 files changed, 15 insertions(+), 19 deletions(-) diff --git a/source/menu/menu_cheat.cpp b/source/menu/menu_cheat.cpp index bc9427bf..5d9d9339 100644 --- a/source/menu/menu_cheat.cpp +++ b/source/menu/menu_cheat.cpp @@ -33,12 +33,12 @@ int CMenu::_downloadCheatFileAsync() m_thrdMessageAdded = true; update_pThread(1);// its downloaded fsop_WriteFile(fmt("%s/%s.txt", m_txtCheatDir.c_str(), id), file.data, file.size); - free(file.data); + MEM2_free(file.data); return 0; } if(file.size > 0)// received a 301/302 redirect instead of a 404? { - free(file.data); + MEM2_free(file.data); return -4;// the file doesn't exist on the server } return -3;// download failed diff --git a/source/menu/menu_download.cpp b/source/menu/menu_download.cpp index 8c49dad8..5cbb03bf 100644 --- a/source/menu/menu_download.cpp +++ b/source/menu/menu_download.cpp @@ -1199,8 +1199,7 @@ int CMenu::_coverDownloader() m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), path); m_thrdMessageAdded = true; fsop_WriteFile(path, file.data, file.size); - if(file.size > 0) - free(file.data); + MEM2_free(file.data); /* make cover cache file (wfc) */ update_pThread(1); @@ -1338,8 +1337,7 @@ int CMenu::_coverDownloader() m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), path); m_thrdMessageAdded = true; fsop_WriteFile(path, file.data, file.size); - if(file.size > 0) - free(file.data); + MEM2_free(file.data); /* make cover cache file (wfc) */ update_pThread(1); @@ -1471,8 +1469,7 @@ int CMenu::_coverDownloader() m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), path); m_thrdMessageAdded = true; fsop_WriteFile(path, file.data, file.size); - if(file.size > 0) - free(file.data); + MEM2_free(file.data); /* make cover cache file (wfc) */ update_pThread(1); @@ -1608,8 +1605,7 @@ int CMenu::_coverDownloader() m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), path); m_thrdMessageAdded = true; fsop_WriteFile(path, file.data, file.size); - if(file.size > 0) - free(file.data); + MEM2_free(file.data); /* make wfc */ update_pThread(1); @@ -1673,8 +1669,7 @@ int CMenu::_gametdbDownloaderAsync() m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), "wiitdb.zip"); m_thrdMessageAdded = true; res = fsop_WriteFile(zippath, file.data, file.size); - if(file.size > 0) - free(file.data); + MEM2_free(file.data); } if(res == false) { @@ -1788,7 +1783,7 @@ int CMenu::_bannerDownloader() if(file.size < 0x5000) { if(file.size > 0) - free(file.data); // More than 0 bytes and less than 50kb + MEM2_free(file.data); // More than 0 bytes and less than 50kb downloadfile(banner_url_id3, &file); } @@ -1799,7 +1794,7 @@ int CMenu::_bannerDownloader() count++; } if(file.size > 0) - free(file.data); + MEM2_free(file.data); update_pThread(1); } return 0; diff --git a/source/network/https.c b/source/network/https.c index 6d790ed5..b062c549 100644 --- a/source/network/https.c +++ b/source/network/https.c @@ -12,6 +12,7 @@ #include "https.h" #include "gecko/gecko.hpp" #include "picohttpparser.h" +#include "memory/mem2.hpp" u8 loop; @@ -99,7 +100,7 @@ void read_chunked(HTTP_INFO *httpinfo, struct download *buffer, size_t start_pos gprintf("Increased buffer size\n"); #endif capacity *= 2; - buffer->data = realloc(buffer->data, capacity); + buffer->data = MEM2_realloc(buffer->data, capacity); } while ((rret = https_read(httpinfo, &buffer->data[start_pos], capacity - start_pos)) == -1 && errno == EINTR) ; @@ -122,7 +123,7 @@ void read_chunked(HTTP_INFO *httpinfo, struct download *buffer, size_t start_pos start_pos += rsize; } while (pret == -2); buffer->size = start_pos; - buffer->data = realloc(buffer->data, buffer->size); + buffer->data = MEM2_realloc(buffer->data, buffer->size); } void read_all(HTTP_INFO *httpinfo, struct download *buffer, size_t start_pos) @@ -140,7 +141,7 @@ void read_all(HTTP_INFO *httpinfo, struct download *buffer, size_t start_pos) gprintf("Increased buffer size\n"); #endif capacity *= 2; - buffer->data = realloc(buffer->data, capacity); + buffer->data = MEM2_realloc(buffer->data, capacity); } while ((ret = https_read(httpinfo, &buffer->data[start_pos], capacity - start_pos)) == -1 && errno == EINTR) ; @@ -150,7 +151,7 @@ void read_all(HTTP_INFO *httpinfo, struct download *buffer, size_t start_pos) start_pos += ret; }; buffer->size = start_pos; - buffer->data = realloc(buffer->data, buffer->size); + buffer->data = MEM2_realloc(buffer->data, buffer->size); } int connect(char *host, u16 port) @@ -420,7 +421,7 @@ void downloadfile(const char *url, struct download *buffer) // We got what we wanted if (status == 200) { - buffer->data = malloc(4096); + buffer->data = MEM2_alloc(4096); buffer->size = 4096; memcpy(buffer->data, &response[pret], buflen - pret); // Determine how to read the data From 4d6f75112be87f6b20612fb82f1690493fa13467 Mon Sep 17 00:00:00 2001 From: wiidev Date: Sun, 12 Apr 2020 20:25:10 +0100 Subject: [PATCH 6/7] Improved file formatting --- source/menu/menu_download.cpp | 207 +++++++++++++++++----------------- 1 file changed, 103 insertions(+), 104 deletions(-) diff --git a/source/menu/menu_download.cpp b/source/menu/menu_download.cpp index 5cbb03bf..d69eba9d 100644 --- a/source/menu/menu_download.cpp +++ b/source/menu/menu_download.cpp @@ -82,52 +82,52 @@ void CMenu::_showSettings() m_btnMgr.show(m_downloadLblPrio); m_btnMgr.show(m_downloadBtnPrioM); m_btnMgr.show(m_downloadBtnPrioP); - m_btnMgr.show(m_downloadLblRegion); + m_btnMgr.show(m_downloadLblRegion); if( m_downloadPrioVal&C_TYPE_EN ) m_btnMgr.show(m_downloadBtnENs); else m_btnMgr.show(m_downloadBtnEN); - + if( m_downloadPrioVal&C_TYPE_JA ) m_btnMgr.show(m_downloadBtnJAs); else m_btnMgr.show(m_downloadBtnJA); - + if( m_downloadPrioVal&C_TYPE_FR ) m_btnMgr.show(m_downloadBtnFRs); else m_btnMgr.show(m_downloadBtnFR); - + if( m_downloadPrioVal&C_TYPE_DE ) m_btnMgr.show(m_downloadBtnDEs); else - m_btnMgr.show(m_downloadBtnDE); - + m_btnMgr.show(m_downloadBtnDE); + if( m_downloadPrioVal&C_TYPE_ES ) m_btnMgr.show(m_downloadBtnESs); else m_btnMgr.show(m_downloadBtnES); - + if( m_downloadPrioVal&C_TYPE_IT ) m_btnMgr.show(m_downloadBtnITs); else m_btnMgr.show(m_downloadBtnIT); - + if( m_downloadPrioVal&C_TYPE_NL ) m_btnMgr.show(m_downloadBtnNLs); else m_btnMgr.show(m_downloadBtnNL); - + if( m_downloadPrioVal&C_TYPE_PT ) m_btnMgr.show(m_downloadBtnPTs); else - m_btnMgr.show(m_downloadBtnPT); - + m_btnMgr.show(m_downloadBtnPT); + if( m_downloadPrioVal&C_TYPE_RU ) m_btnMgr.show(m_downloadBtnRUs); else m_btnMgr.show(m_downloadBtnRU); - + if( m_downloadPrioVal&C_TYPE_KO ) m_btnMgr.show(m_downloadBtnKOs); else @@ -137,16 +137,16 @@ void CMenu::_showSettings() m_btnMgr.show(m_downloadBtnZHCNs); else m_btnMgr.show(m_downloadBtnZHCN); - + if( m_downloadPrioVal&C_TYPE_AU ) m_btnMgr.show(m_downloadBtnAUs); else m_btnMgr.show(m_downloadBtnAU); - + // if( m_downloadPrioVal&C_TYPE_ONOR ) { - m_btnMgr.setText(m_downloadLblPrio, _t("dl24", L"Custom only")); + m_btnMgr.setText(m_downloadLblPrio, _t("dl24", L"Custom only")); } else { @@ -158,7 +158,7 @@ void CMenu::_showSettings() { m_btnMgr.setText(m_downloadLblPrio, _t("dl23", L"Custom/Custom")); } - else + else { m_btnMgr.setText(m_downloadLblPrio, _t("dl22", L"Custom/Original")); } @@ -221,7 +221,7 @@ void CMenu::_showDownload(void) m_btnMgr.show(m_downloadBtnBanners); for(u8 i = 0; i < ARRAY_SIZE(m_downloadLblUser); ++i) if(m_downloadLblUser[i] != -1) - m_btnMgr.show(m_downloadLblUser[i]); + m_btnMgr.show(m_downloadLblUser[i]); } int count, countFlat; @@ -265,8 +265,8 @@ void CMenu::_download(string gameId, int dl_type) { if(m_btnMgr.selected(m_downloadBtnAll) || dl_type == 1) { - m_refreshGameList = true;// not needed instead just initcf() - + m_refreshGameList = true; // Not needed instead just initcf() + m_btnMgr.hide(m_downloadLblCovers); m_btnMgr.hide(m_downloadBtnAll); m_btnMgr.hide(m_downloadLblGameTDBDownload); @@ -276,14 +276,14 @@ void CMenu::_download(string gameId, int dl_type) m_btnMgr.hide(m_downloadLblBanners); m_btnMgr.hide(m_downloadBtnBanners); m_btnMgr.hide(m_downloadBtnBack); - + m_btnMgr.setProgress(m_wbfsPBar, 0.f, true); m_btnMgr.setText(m_wbfsLblMessage, L"0%"); m_btnMgr.setText(m_wbfsLblDialog, L""); m_btnMgr.show(m_wbfsPBar); m_btnMgr.show(m_wbfsLblMessage); m_btnMgr.show(m_wbfsLblDialog); - + _start_pThread(); int ret = _coverDownloader(); _stop_pThread(); @@ -308,13 +308,13 @@ void CMenu::_download(string gameId, int dl_type) m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg30", L"No covers missing.")); dl_finished = true; dl_type = 0; - //maybe show back button + // Maybe show back button //m_btnMgr.show(m_downloadBtnBack); } if(m_btnMgr.selected(m_downloadBtnBanners) || dl_type == 2) { //m_refreshGameList = true; - + m_btnMgr.hide(m_downloadLblCovers); m_btnMgr.hide(m_downloadBtnAll); m_btnMgr.hide(m_downloadLblGameTDBDownload); @@ -324,14 +324,14 @@ void CMenu::_download(string gameId, int dl_type) m_btnMgr.hide(m_downloadLblBanners); m_btnMgr.hide(m_downloadBtnBanners); m_btnMgr.hide(m_downloadBtnBack); - + m_btnMgr.setProgress(m_wbfsPBar, 0.f, true); m_btnMgr.setText(m_wbfsLblMessage, L"0%"); m_btnMgr.setText(m_wbfsLblDialog, L""); m_btnMgr.show(m_wbfsPBar); m_btnMgr.show(m_wbfsLblMessage); m_btnMgr.show(m_wbfsLblDialog); - + _start_pThread(); int ret = _bannerDownloader(); _stop_pThread(); @@ -346,19 +346,19 @@ void CMenu::_download(string gameId, int dl_type) m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg14", L"Done.")); } else if(ret == -1) - m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg34", L"Banner URL not set properly!"));//banner url not set + m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg34", L"Banner URL not set properly!")); // Banner URL not set else if(ret == -2) m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg2", L"Network initialization failed!")); else if(ret == -3) - m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg33", L"No banners missing."));// no banners missing + m_btnMgr.setText(m_wbfsLblDialog, _t("dlmsg33", L"No banners missing.")); // No banners missing dl_finished = true; dl_type = 0; - //maybe show back button + // Maybe show back button //m_btnMgr.show(m_downloadBtnBack); } else if(m_btnMgr.selected(m_downloadBtnGameTDBDownload)) { - m_refreshGameList = true;// to refresh titles + m_refreshGameList = true; // To refresh titles m_btnMgr.hide(m_downloadLblCovers); m_btnMgr.hide(m_downloadBtnAll); m_btnMgr.hide(m_downloadBtnMissing); @@ -369,14 +369,14 @@ void CMenu::_download(string gameId, int dl_type) m_btnMgr.hide(m_downloadLblBanners); m_btnMgr.hide(m_downloadBtnBanners); m_btnMgr.hide(m_downloadBtnBack); - + m_btnMgr.setProgress(m_wbfsPBar, 0.f, true); m_btnMgr.setText(m_wbfsLblMessage, L"0%"); m_btnMgr.setText(m_wbfsLblDialog, L""); m_btnMgr.show(m_wbfsPBar); m_btnMgr.show(m_wbfsLblMessage); m_btnMgr.show(m_wbfsLblDialog); - + _start_pThread(); int ret = _gametdbDownloaderAsync(); _stop_pThread(); @@ -402,7 +402,7 @@ void CMenu::_download(string gameId, int dl_type) else if(m_btnMgr.selected(m_downloadBtnCoverSet)) { settingsmenu = true; - _showSettings(); + _showSettings(); } else if(m_btnMgr.selected(m_downloadBtnBack)) { @@ -667,7 +667,7 @@ void CMenu::_initDownloadMenu() _setHideAnim(m_downloadPBar, "DOWNLOAD/PROGRESS_BAR", 0, 0, -2.f, 0.f); _setHideAnim(m_downloadBtnCancel, "DOWNLOAD/CANCEL_BTN", 0, 0, 1.f, -1.f); - // Cover settings + // Cover settings _setHideAnim(m_downloadLblSetTitle, "DOWNLOAD/SETTITLE", 0, 0, -2.f, 0.f); _setHideAnim(m_downloadLblCoverPrio, "DOWNLOAD/COVERPRIO", 50, 0, -2.f, 0.f); _setHideAnim(m_downloadLblPrio, "DOWNLOAD/PRIO_BTN", -50, 0, 1.f, 0.f); @@ -712,15 +712,15 @@ void CMenu::_textDownload(void) m_btnMgr.setText(m_downloadLblCovers, _t("dl8", L"Covers")); m_btnMgr.setText(m_downloadBtnAll, _t("dl6", L"Download")); m_btnMgr.setText(m_downloadLblCoverSet, _t("dl15", L"Cover download settings")); - m_btnMgr.setText(m_downloadBtnCoverSet, _t("dl16", L"Set")); + m_btnMgr.setText(m_downloadBtnCoverSet, _t("dl16", L"Set")); m_btnMgr.setText(m_downloadLblGameTDBDownload, _t("dl12", L"GameTDB")); m_btnMgr.setText(m_downloadBtnGameTDBDownload, _t("dl6", L"Download")); m_btnMgr.setText(m_downloadLblBanners, _t("dl26", L"GC Custom Banners")); - m_btnMgr.setText(m_downloadBtnBanners, _t("dl6", L"Download")); + m_btnMgr.setText(m_downloadBtnBanners, _t("dl6", L"Download")); m_btnMgr.setText(m_downloadLblGameTDB, _t("dl10", L"Please donate\nto GameTDB.com")); m_btnMgr.setText(m_downloadBtnCancel, _t("dl1", L"Cancel")); - + m_btnMgr.setText(m_downloadLblSetTitle, _t("dl17", L"Cover Download Settings")); m_btnMgr.setText(m_downloadLblCoverPrio, _t("dl13", L"Download order")); m_btnMgr.setText(m_downloadLblRegion, _t("dl14", L"Select regions to check for covers:")); @@ -752,7 +752,7 @@ s32 CMenu::_networkComplete(s32 ok, void *usrData) networkInit = ok == 0; m->m_thrdNetwork = false; - + if(networkInit) wolfSSL_Init(); @@ -786,7 +786,7 @@ int CMenu::_initNetwork() { while(net_get_status() == -EBUSY && m_thrdNetwork == true) { - usleep(100);// Async initialization may be busy, wait to see if it succeeds. + usleep(100); // Async initialization may be busy, wait to see if it succeeds. } if(networkInit) return 0; @@ -892,7 +892,7 @@ static string makeURL(const string format, const string gameId, const string cou { string url = format; if(url.find(TAG_LOC) != url.npos) - url.replace(url.find(TAG_LOC), strlen(TAG_LOC), country.c_str()); + url.replace(url.find(TAG_LOC), strlen(TAG_LOC), country.c_str()); if(url.find(TAG_CONSOLE) != url.npos) url.replace(url.find(TAG_CONSOLE), strlen(TAG_CONSOLE), "wii"); @@ -999,15 +999,15 @@ int CMenu::_coverDownloader() c_gameTDB.OpenFile(fmt("%s/wiitdb.xml", m_settingsDir.c_str())); c_gameTDB.SetLanguageCode(m_curLanguage.c_str()); } - + vector fmtURLBox = stringToVector(m_cfg.getString("GENERAL", "url_full_covers", FMT_BPIC_URL), '|'); vector fmtURLFlat = stringToVector(m_cfg.getString("GENERAL", "url_flat_covers", FMT_PIC_URL), '|'); vector fmtURLCBox = stringToVector(m_cfg.getString("GENERAL", "url_custom_full_covers", FMT_CBPIC_URL), '|'); vector fmtURLCFlat = stringToVector(m_cfg.getString("GENERAL", "url_custom_flat_covers", FMT_CPIC_URL), '|'); vector coverIDList; - - /* create list of cover ID's that need downloading */ + + /* Create list of cover ID's that need downloading */ if(dl_gameID.empty()) { for(u32 i = 0; i < m_gameList.size(); ++i) @@ -1022,7 +1022,7 @@ int CMenu::_coverDownloader() coverIDList.push_back(dl_gameID); n = coverIDList.size(); - m_thrdTotal = n * 3;// 3 = download cover, save png, and make wfc + m_thrdTotal = n * 3; // 3 = Download cover, save png and make wfc if(m_thrdTotal == 0) { @@ -1032,7 +1032,7 @@ int CMenu::_coverDownloader() return -3; } - /* initialize network connection */ + /* Initialize network connection */ m_thrdMessage = _t("dlmsg1", L"Initializing network..."); m_thrdMessageAdded = true; if(_initNetwork() < 0) @@ -1043,7 +1043,7 @@ int CMenu::_coverDownloader() return -2; } - /* download covers in the list */ + /* Download covers in the list */ u32 CoverType = 0; string url; char path[256]; @@ -1056,20 +1056,20 @@ int CMenu::_coverDownloader() bool custom = false; int c_altCase = 0; - /* try downloading the cover 4 times but a different type each time.*/ + /* Try downloading the cover 4 times but a different type each time.*/ for(int p = 0; p < 4; ++p) { - /* the cover type (BOX, CBOX, FLAT, CFLAT) is different each time based on m_downloadPrioVal */ + /* The cover type (BOX, CBOX, FLAT, CFLAT) is different each time based on m_downloadPrioVal */ switch(p) { case 0: CoverType = m_downloadPrioVal & C_TYPE_PRIOA ? CBOX : BOX; break; case 1: - CoverType = m_downloadPrioVal & C_TYPE_PRIOA ? (m_downloadPrioVal & C_TYPE_PRIOB ? CFLAT : BOX) : (m_downloadPrioVal & C_TYPE_PRIOB ? CBOX : FLAT); + CoverType = m_downloadPrioVal & C_TYPE_PRIOA ? (m_downloadPrioVal & C_TYPE_PRIOB ? CFLAT : BOX) : (m_downloadPrioVal & C_TYPE_PRIOB ? CBOX : FLAT); break; case 2: - CoverType = m_downloadPrioVal & C_TYPE_PRIOA ? (m_downloadPrioVal & C_TYPE_PRIOB ? BOX : CFLAT) : (m_downloadPrioVal & C_TYPE_PRIOB ? FLAT : CBOX); + CoverType = m_downloadPrioVal & C_TYPE_PRIOA ? (m_downloadPrioVal & C_TYPE_PRIOB ? BOX : CFLAT) : (m_downloadPrioVal & C_TYPE_PRIOB ? FLAT : CBOX); break; case 3: CoverType = m_downloadPrioVal & C_TYPE_PRIOA ? FLAT : CFLAT; @@ -1083,11 +1083,11 @@ int CMenu::_coverDownloader() original = false; if(!success && original) { - /* each fmtURL may have more than one URL */ + /* Each fmtURL may have more than one URL */ for(u8 j = 0; !success && j < fmtURLBox.size(); ++j) { url = makeURL(fmtURLBox[j], coverID, countryCode(coverID)); - + m_thrdMessage = wfmt(_fmt("dlmsg3", L"Downloading %i/%i from %s"), i + 1, n, url.c_str()); m_thrdMessageAdded = true; struct download file = {}; @@ -1095,7 +1095,7 @@ int CMenu::_coverDownloader() for(int o = 0; o < 12; ++o) { - bool tdl = false;// tdl = try download + bool tdl = false; // tdl = try download if(file.size > 0)// && checkPNGBuf(file.data)) break; switch( o ) @@ -1180,32 +1180,30 @@ int CMenu::_coverDownloader() case ZHCN: break; } - if(tdl)// try another download + if(tdl) // Try another download { m_thrdMessage = wfmt(_fmt("dlmsg3", L"Downloading %i/%i from %s"), i + 1, n, url.c_str()); m_thrdMessageAdded = true; downloadfile(url.c_str(), &file); } } - /* if none of the downloads succeeded */ + /* If none of the downloads succeeded */ if(file.size == 0)// || !checkPNGBuf(file.data)) continue; - - /* a download succeeded */ - - /* save cover png */ + + /* Download succeeded - save png */ strncpy(path, fmt("%s/%s.png", m_boxPicDir.c_str(), coverID.c_str()), 255); update_pThread(1); m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), path); m_thrdMessageAdded = true; fsop_WriteFile(path, file.data, file.size); MEM2_free(file.data); - - /* make cover cache file (wfc) */ + + /* Make cover cache file (wfc) */ update_pThread(1); m_thrdMessage = wfmt(_fmt("dlmsg10", L"Making %s.wfc"), coverID.c_str()); m_thrdMessageAdded = true; - CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, true);//it may fail + CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, true); // Might fail if OOM ++count; update_pThread(1); @@ -1219,7 +1217,7 @@ int CMenu::_coverDownloader() c_altCase = c_gameTDB.GetCaseVersions(coverID.c_str()); if(!success && c_gameTDB.IsLoaded() && c_altCase > 1 && custom) { - /* each fmtURL may have more than one URL */ + /* Each fmtURL may have more than one URL */ for(u8 j = 0; !success && j < fmtURLCBox.size(); ++j) { url = makeURL(fmtURLCBox[j], coverID, countryCode(coverID)); @@ -1228,7 +1226,7 @@ int CMenu::_coverDownloader() m_thrdMessageAdded = true; struct download file = {}; downloadfile(url.c_str(), &file); - + for(int o = 0; o < 12; ++o) { bool tdl = false; @@ -1308,7 +1306,7 @@ int CMenu::_coverDownloader() break; case AU: if(coverID[3] == 'W' && m_downloadPrioVal&C_TYPE_ZHCN) - { + { url = makeURL(fmtURLCBox[j], coverID, "ZH"); tdl = true; } @@ -1325,28 +1323,26 @@ int CMenu::_coverDownloader() } } - /* if none of the downloads succeeded */ + /* If none of the downloads succeeded */ if(file.size <= 0)// || !checkPNGBuf(file.data)) continue; - /* a download succeeded */ - - /* save cover png */ + /* Download succeeded - save png */ strncpy(path, fmt("%s/%s.png", m_boxPicDir.c_str(), coverID.c_str()), 255); update_pThread(1); m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), path); m_thrdMessageAdded = true; fsop_WriteFile(path, file.data, file.size); MEM2_free(file.data); - - /* make cover cache file (wfc) */ + + /* Make cover cache file (wfc) */ update_pThread(1); m_thrdMessage = wfmt(_fmt("dlmsg10", L"Making %s.wfc"), coverID.c_str()); m_thrdMessageAdded = true; - CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, true);//it may fail - - update_pThread(1); + CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, true); // Might fail if OOM + ++count; + update_pThread(1); success = true; } } @@ -1356,10 +1352,11 @@ int CMenu::_coverDownloader() original = false; if(!success && original) { + /* Each fmtURL may have more than one URL */ for(u8 j = 0; !success && j < fmtURLFlat.size(); ++j) { url = makeURL(fmtURLFlat[j], coverID, countryCode(coverID)); - + m_thrdMessage = wfmt(_fmt("dlmsg3", L"Downloading %i/%i from %s"), i + 1, n, url.c_str()); m_thrdMessageAdded = true; struct download file = {}; @@ -1460,22 +1457,23 @@ int CMenu::_coverDownloader() } } + /* If none of the downloads succeeded */ if(file.size <= 0)// || !checkPNGBuf(file.data)) continue; - /*download succeeded - save png */ + /* Download succeeded - save png */ strncpy(path, fmt("%s/%s.png", m_picDir.c_str(), coverID.c_str()), 255); update_pThread(1); m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), path); m_thrdMessageAdded = true; fsop_WriteFile(path, file.data, file.size); MEM2_free(file.data); - - /* make cover cache file (wfc) */ + + /* Make cover cache file (wfc) */ update_pThread(1); m_thrdMessage = wfmt(_fmt("dlmsg10", L"Making %s"), sfmt("%s.wfc", coverID.c_str())); m_thrdMessageAdded = true; - CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, false);//it may fail + CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, false); // Might fail if OOM ++countFlat; update_pThread(1); @@ -1488,15 +1486,16 @@ int CMenu::_coverDownloader() custom = true; if(!success && c_gameTDB.IsLoaded() && c_altCase > 1 && custom) { + /* Each fmtURL may have more than one URL */ for(u8 j = 0; !success && j < fmtURLCFlat.size(); ++j) { url = makeURL(fmtURLCFlat[j], coverID, countryCode(coverID)); - + m_thrdMessage = wfmt(_fmt("dlmsg3", L"Downloading %i/%i from %s"), i + 1, n, url.c_str()); m_thrdMessageAdded = true; struct download file = {}; downloadfile(url.c_str(), &file); - + for(int o = 0; o < 12; ++o) { bool tdl = false; @@ -1591,27 +1590,27 @@ int CMenu::_coverDownloader() m_thrdMessage = wfmt(_fmt("dlmsg3", L"Downloading %i/%i from %s"), i + 1, n, url.c_str()); m_thrdMessageAdded = true; LWP_MutexUnlock(m_mutex); - downloadfile(url.c_str(), &file); } } + /* If none of the downloads succeeded */ if(file.size <= 0)// || !checkPNGBuf(file.data)) continue; - /* save png */ + /* Download succeeded - save png */ strncpy(path, fmt("%s/%s.png", m_picDir.c_str(), coverID.c_str()), 255); update_pThread(1); m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), path); m_thrdMessageAdded = true; fsop_WriteFile(path, file.data, file.size); MEM2_free(file.data); - - /* make wfc */ + + /* Make cover cache file (wfc) */ update_pThread(1); m_thrdMessage = wfmt(_fmt("dlmsg10", L"Making %s"), sfmt("%s.wfc", coverID.c_str())); m_thrdMessageAdded = true; - CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, false);//it may fail + CoverFlow.cacheCoverFile(fmt("%s/%s.wfc", m_cacheDir.c_str(), coverID.c_str()), path, false); // Might fail if OOM ++countFlat; update_pThread(1); @@ -1624,7 +1623,7 @@ int CMenu::_coverDownloader() if(!success) update_pThread(3); } - /* cover list done and downloading complete */ + /* Cover list done and downloading complete */ if(c_gameTDB.IsLoaded()) c_gameTDB.CloseFile(); coverIDList.clear(); @@ -1637,8 +1636,8 @@ int CMenu::_coverDownloader() int CMenu::_gametdbDownloaderAsync() { const string &langCode = m_loc.getString(m_curLanguage, "gametdb_code", "EN"); - m_thrdTotal = 3;// download, save, and unzip - + m_thrdTotal = 3; // Download, save and unzip + m_thrdMessage = _t("dlmsg1", L"Initializing network..."); m_thrdMessageAdded = true; if(_initNetwork() < 0) @@ -1657,17 +1656,17 @@ int CMenu::_gametdbDownloaderAsync() } else { - update_pThread(1);//its downloaded + update_pThread(1); // It's downloaded bool res = false; char *zippath = fmt_malloc("%s/wiitdb.zip", m_settingsDir.c_str()); if(zippath != NULL) { gprintf("Writing file to '%s'\n", zippath); - + fsop_deleteFile(zippath); - + m_thrdMessage = wfmt(_fmt("dlmsg4", L"Saving %s"), "wiitdb.zip"); - m_thrdMessageAdded = true; + m_thrdMessageAdded = true; res = fsop_WriteFile(zippath, file.data, file.size); MEM2_free(file.data); } @@ -1680,15 +1679,15 @@ int CMenu::_gametdbDownloaderAsync() } else { - update_pThread(1);//its saved + update_pThread(1); // It's saved gprintf("Extracting zip file: "); m_thrdMessage = wfmt(_fmt("dlmsg24", L"Extracting %s"), "wiitdb.zip"); - m_thrdMessageAdded = true; + m_thrdMessageAdded = true; ZipFile zFile(zippath); bool zres = zFile.ExtractAll(m_settingsDir.c_str()); gprintf(zres ? "success\n" : "failed\n"); - //may add if zres failed return -4 extraction failed + // May add if zres failed return -4 extraction failed // We don't need the zipfile anymore fsop_deleteFile(zippath); @@ -1696,8 +1695,8 @@ int CMenu::_gametdbDownloaderAsync() // We should always remove the offsets file to make sure it's reloaded fsop_deleteFile(fmt("%s/gametdb_offsets.bin", m_settingsDir.c_str())); - - update_pThread(1);//its extracted + + update_pThread(1); // It's extracted // Update cache m_cfg.setBool(WII_DOMAIN, "update_cache", true); @@ -1724,7 +1723,7 @@ int CMenu::_bannerDownloader() string gameDir(fmt(gc_games_dir, DeviceName[currentPartition])); string cacheDir(fmt("%s/%s_gamecube.db", m_listCacheDir.c_str(), DeviceName[currentPartition])); m_cacheList.CreateList(COVERFLOW_GAMECUBE, gameDir, stringToVector(".iso|.ciso|root", '|'), cacheDir, false); - + for(u32 i = 0; i < m_cacheList.size(); ++i) { if(!fsop_FileExist(fmt("%s/%s.bnr", m_customBnrDir.c_str(), m_cacheList[i].id))) @@ -1734,16 +1733,16 @@ int CMenu::_bannerDownloader() } else BnrIDList.push_back(dl_gameID); - + n = BnrIDList.size(); m_thrdTotal = n; - + if(n == 0) { BnrIDList.clear(); return -3; } - + const char *banner_url = NULL; const char *banner_url_id3 = NULL; const char *GAME_BNR_ID = "{gameid}"; @@ -1761,7 +1760,7 @@ int CMenu::_bannerDownloader() BnrIDList.clear(); return -2; } - + for(u32 i = 0; i < BnrIDList.size(); ++i) { string base_url_id6 = base_url; @@ -1787,7 +1786,7 @@ int CMenu::_bannerDownloader() downloadfile(banner_url_id3, &file); } - /* minimum 50kb */ + /* Minimum 50kb */ if(file.size > 51200 && file.data[0] != '<') { fsop_WriteFile(fmt("%s/%s.bnr", m_customBnrDir.c_str(), BnrIDList[i].c_str()), file.data, file.size); @@ -1804,7 +1803,7 @@ int CMenu::_bannerDownloader() /**************************************************************************************/ const char *url_dl = NULL; -void CMenu::_downloadUrl(const char *url, u8 **dl_file, u32 *dl_size)// nothing uses this +void CMenu::_downloadUrl(const char *url, u8 **dl_file, u32 *dl_size) // Nothing uses this { m_file = NULL; m_filesize = 0; From 28ae5daf1886f7327652055e841c70bb9a28bca0 Mon Sep 17 00:00:00 2001 From: wiidev Date: Sun, 12 Apr 2020 20:27:47 +0100 Subject: [PATCH 7/7] Covers and banners download faster --- source/network/https.c | 76 +++++++++++++++++++++++++++++++----------- source/network/https.h | 11 +++--- 2 files changed, 62 insertions(+), 25 deletions(-) diff --git a/source/network/https.c b/source/network/https.c index b062c549..824f0871 100644 --- a/source/network/https.c +++ b/source/network/https.c @@ -1,7 +1,6 @@ -/* - Code by blackb0x @ GBAtemp.net - This allows the Wii to download from servers that use SNI. -*/ +// Code by blackb0x @ GBAtemp.net +// This allows the Wii to download from servers that use SNI. + #include #include #include @@ -15,6 +14,7 @@ #include "memory/mem2.hpp" u8 loop; +WOLFSSL_SESSION *session; int https_write(HTTP_INFO *httpinfo, char *buffer, int len) { @@ -40,11 +40,31 @@ int https_write(HTTP_INFO *httpinfo, char *buffer, int len) int https_read(HTTP_INFO *httpinfo, char *buffer, int len) { - if (len > 8192) - len = 8192; // 16KB is the max on a Wii, but 8KB is safe - if (httpinfo->use_https) - return wolfSSL_read(httpinfo->ssl, buffer, len); - return net_read(httpinfo->sock, buffer, len); + struct pollsd fds[1]; + fds[0].socket = httpinfo->sock; + fds[0].events = POLLIN; + + net_fcntl(httpinfo->sock, F_SETFL, 4); + switch (net_poll(fds, 1, READ_WRITE_TIMEOUT)) + { + case -1: +#ifdef DEBUG_NETWORK + gprintf("net_poll error\n"); +#endif + return -1; + case 0: +#ifdef DEBUG_NETWORK + gprintf("The connection timed out\n"); +#endif + return -ETIMEDOUT; + default: + net_fcntl(httpinfo->sock, F_SETFL, 0); + if (len > 8192) + len = 8192; // 16KB is the max on a Wii, but 8KB is safe + if (httpinfo->use_https) + return wolfSSL_read(httpinfo->ssl, buffer, len); + return net_read(httpinfo->sock, buffer, len); + } } void https_close(HTTP_INFO *httpinfo) @@ -182,7 +202,7 @@ int connect(char *host, u16 port) if (ticks_to_millisecs(diff_ticks(t, gettime())) > TCP_CONNECT_TIMEOUT) { #ifdef DEBUG_NETWORK - gprintf("The connection has timed out\n"); + gprintf("The connection timed out\n"); #endif net_close(sock); return -ETIMEDOUT; @@ -203,11 +223,6 @@ int connect(char *host, u16 port) break; } net_fcntl(sock, F_SETFL, 0); - // Set a read and write timeout - struct timeval timeout; - timeout.tv_sec = READ_WRITE_TIMEOUT; - net_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)); - net_setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)); return sock; } @@ -256,8 +271,9 @@ void downloadfile(const char *url, struct download *buffer) if (httpinfo.use_https) { - // Create a new SSL context and use the highest possible protocol version - if ((httpinfo.ctx = wolfSSL_CTX_new(wolfSSLv23_client_method())) == NULL) + // Create a new SSL context + // wolfSSLv23_client_method() works, but resume would require further changes + if ((httpinfo.ctx = wolfSSL_CTX_new(wolfTLSv1_2_client_method())) == NULL) { #ifdef DEBUG_NETWORK gprintf("Failed to create WOLFSSL_CTX\n"); @@ -294,6 +310,14 @@ void downloadfile(const char *url, struct download *buffer) https_close(&httpinfo); return; } + // Attempt to resume the session + if (session != NULL && wolfSSL_set_session(httpinfo.ssl, session) != SSL_SUCCESS) + { +#ifdef DEBUG_NETWORK + gprintf("Failed to set session (session timed out?)\n"); +#endif + session = NULL; + } // Initiate a handshake if (wolfSSL_connect(httpinfo.ssl) != SSL_SUCCESS) { @@ -303,6 +327,14 @@ void downloadfile(const char *url, struct download *buffer) https_close(&httpinfo); return; } + // Check if we resumed successfully + if (session != NULL && !wolfSSL_session_reused(httpinfo.ssl)) + { +#ifdef DEBUG_NETWORK + gprintf("Failed to resume session\n"); +#endif + session = NULL; + } // Cipher info #ifdef DEBUG_NETWORK /*char ciphers[4096]; @@ -314,13 +346,13 @@ void downloadfile(const char *url, struct download *buffer) } // Send our request - char request[2048]; + char request[2200]; char isgecko[36] = "Cookie: challenge=BitMitigate.com\r\n"; int ret, len; if (strcmp(host, "www.geckocodes.org") != 0) memset(isgecko, 0, sizeof(isgecko)); // Not geckocodes, so don't set a cookie - len = snprintf(request, 2048, + len = snprintf(request, 2200, "GET %s HTTP/1.1\r\n" "Host: %s\r\n" "User-Agent: WiiFlow-Lite\r\n" @@ -429,6 +461,9 @@ void downloadfile(const char *url, struct download *buffer) read_chunked(&httpinfo, buffer, buflen - pret); else read_all(&httpinfo, buffer, buflen - pret); + // Save the session + if (httpinfo.use_https) + session = wolfSSL_get_session(httpinfo.ssl); // Finished https_close(&httpinfo); #ifdef DEBUG_NETWORK @@ -440,5 +475,8 @@ void downloadfile(const char *url, struct download *buffer) return; } // Close on all other status codes +#ifdef DEBUG_NETWORK + gprintf("Status code: %i - %s\n", status, url); +#endif https_close(&httpinfo); } diff --git a/source/network/https.h b/source/network/https.h index 4a7349bb..ba76b68e 100644 --- a/source/network/https.h +++ b/source/network/https.h @@ -1,7 +1,6 @@ -/* - Code by blackb0x @ GBAtemp.net - This allows the Wii to download from servers that use SNI. -*/ +// Code by blackb0x @ GBAtemp.net +// This allows the Wii to download from servers that use SNI. + #ifndef _HTTPS_H_ #define _HTTPS_H_ @@ -16,11 +15,11 @@ extern "C" // #define DEBUG_NETWORK #define REDIRECT_LIMIT 3 #define TCP_CONNECT_TIMEOUT 5000 -#define READ_WRITE_TIMEOUT 10 +#define READ_WRITE_TIMEOUT 5000 struct download { - u8 skip_response; // Used by WiinnerTag + u8 skip_response; // Used by WiinnerTag u64 size; char *data; };