From 10a881ac0590b2ba52a7f233b41be8410271757a Mon Sep 17 00:00:00 2001 From: Daryl Borth Date: Thu, 8 Dec 2016 17:51:57 -0700 Subject: [PATCH] merging changes from Zopenko --- .gitignore | 9 +-- readme.txt | 12 ++++ source/freeze.cpp | 6 +- source/images/button_gamesave.png | Bin 546 -> 11401 bytes source/images/button_gamesave_over.png | Bin 549 -> 11653 bytes source/images/button_prompt_over.png | Bin 1625 -> 1911 bytes source/input.cpp | 4 +- source/menu.cpp | 94 ++++++++++++++++--------- source/preferences.cpp | 33 ++++++--- source/snes9xgx.cpp | 4 +- source/snes9xgx.h | 14 ++-- 11 files changed, 115 insertions(+), 61 deletions(-) diff --git a/.gitignore b/.gitignore index 31ea311..502d5bd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ -/snes9x-gx.pnps -/snes9x-gx.pnproj -/build_wii -/executables +/snes9x-gx.pnps +/snes9x-gx.pnproj +/build_wii +/build_gc +/executables diff --git a/readme.txt b/readme.txt index 49539e4..e53312e 100644 --- a/readme.txt +++ b/readme.txt @@ -31,6 +31,18 @@ Wii homebrew is WiiBrew (www.wiibrew.org). •˜———–—––-- - —————————––––– ———–—––-- - —————————––––– ———–—––-- - ————————• | UPDATE HISTORY | •˜———–—––-- - —————————––––– ———–—––-- - —————————––––– ———–—––-- - ————————• + +[4.3.6 - September 12, 2016] + +* Added the delete save file (SRAM / Snapshot) option +* Changed the box colors for the SRAM and Snapshots files to match the color scheme of the emu GUI +* Change the "Power off Wii" exit option to completely turn off the wii, ignoring the WC24 settings +* Updated emulator credits +* Added an option to switch between screenshots, covers, or artworks images, + with their respectively named folders inside /snes9xgx at the device's root. + You can set which one to show, by going to Settings > Menu > Preview Image. + The .PNG image file needs to have the same name as the ROM (e.g.: Contra III.png) + [4.3.5 - February 06, 2016] * Added Fix94 wiiflow plugin mode diff --git a/source/freeze.cpp b/source/freeze.cpp index 234e764..dc2ff2c 100644 --- a/source/freeze.cpp +++ b/source/freeze.cpp @@ -144,8 +144,7 @@ LoadSnapshotAuto (bool silent) * SavePreview ***************************************************************************/ -int -SavePreviewImg (char * filepath, bool silent) +int SavePreviewImg (char * filepath, bool silent) { int device; @@ -161,8 +160,5 @@ SavePreviewImg (char * filepath, bool silent) sprintf(screenpath, "%s.png", screenpath); SaveFile((char *)gameScreenPng, screenpath, gameScreenPngSize, silent); } - - if(!silent) - InfoPrompt("Save successful"); return 1; } \ No newline at end of file diff --git a/source/images/button_gamesave.png b/source/images/button_gamesave.png index 1e44a737e6f7d09772e0aa73b0de81309ae7e884..78803c6af0efb581905227c32d467d22dd8504d8 100644 GIT binary patch literal 11401 zcmV;4EOyh0P)SlK94Y_+AOJ~3 zK~#9!?R`D0ZR>T_9I*=vf{mzLAy==m{iN`qFftvLYebO>ibzOlNm|+f9i|BqeMJ3w zL==h;BA${^Buz*a7l7O#rTGTMUhDhD7;~<352Ept&bIvSz5DF5_FCWHoO8@E$3$JP z?|lA~e^gcfpsIeoK3*TMkJs1b_0y{QPe1?a%l}YSg=;ha^Q!unA7k_J`gnb9U%&D5 zufF_O_|E4)`6pHN??1-l>Jb-ulG%Kl|RtFnzo}UcVr(KmOA{f9uD; zg719(6Xv_W`D_2Ue*DD`>hJ&E&p$@+D)?Tf38Y?S8f^iJ+q29-}bu9b+f$xtSVr7+UuF_C%T@Y>hCnvW_U zx2iq%wpwJ&iq~To&pJb{Df#0bBe|%pi|ao3_mVPXkmua1aDV3Y`Rn=apPeZ@pQ(E+ z&-lI85bv9m?~(O>e)YA+;p=`{Kd-To`^333lJ%o6epo;H;$>`eQ~y$K=pTRagZ&^R zU;n@V$Lr?q_xZXvo?p1u0k28EfA1QAYct;;;k{7y>+EY$$Kw2{i|BqJeeV0-@A1O@{P%s;`P}}_qMS(Q z9&}90#)Cd*IyZZ)&-0z{<-UeIe91STgQ(7Z-#@v(hs1dX88gP1m9B}3wMJPR&;##` zGw$EtbM)HGXWY~l>GwnK2mANVZ!mtR_IK^4mHDdcI(wvK{o~#zva;?qVb>bg&skgd z^>Ef;okR4;U;Ln1=(eGM^ml$3i?iAWKNCs$`I((*vR)TlRf|=tinZFp_l#K}O=b9XU{Cyh{)G7hudPT(JDU# zWwnyrYv)H_{P1m;`}?1L@3>a{m&au(+laRQ zP}`M(ZDJh|^@(Iti(3m@&*IjLC7(8RO`AHR0_rvPI)pt9Y;o!$IIfwyqxWs%vR;=L zG(5L{Kex+$dq8_w&O?ctNnS3nJlk~-Xh!A?>|Set zt%VcrT%Uos_hcO2=dR?-?KyxjUgn*Pw|8&K9pv5fDPdO_44t1M{R4Y$uC*snb8+`YMc4#8*0M#PvgsiZXCjfi& z-s}_Nt(Cad=E-n{SF0h&8ULk+(0%Jm!WeVnKLLvEm=)Drx7SH};?x_U+7GJ-F=AcF zXA9i8)3)Af5P`O7_kCaj=}N#Kw+8N3OdIe9uriLlY<+A%9UHUokCszTbkwniy7}+V z5rQP@WBR7S9S@piKUM+t0wzJRJ96V2!?_nQ!lSYcd5ur5X270ndunx%$Q#V@OVfd_ zYn->|fb?24Mn2<(HnkTRTPN;(T?%Kda*xg)mwTKxkZFLL+36C*N>QtES-I23!!w^9?L7fnM(qEJe%jao7%~z||+7+92-6Az+6i z-G{IIy$YkZ1zDVy(WuquavwlE02_ER7x$PE z9muJZ31}Gzi9gR-L>sJC>-9YtV(u1F#>r8a3n8ww9yCj~tt`Clb!hBmk1ChG(f?X! zJ(K`&JM^(b?u`vyjC6vaqsQW)WQ$8YrfCXvH!q<5oeq%H!Li(GQYixsvD9>fO=vXx zI;C+C<@@50lb*6UAomZH95x=)Y(qN6MCYj?sQ#HmG!zPg9G@@`hRmbXI^0$tVhK-7 z__8{2SV7Ts?!z~+h;tYV7U5Yb`~5TSx<*c#t0eA29*X5@$elXVXH%RZy$sH7=Y4aK zVJ1AIkzW6?q2jsWU>Z#CQNxSdqR~ADMc)yj*L|pLBpb&glHUkSgW(19(_cU<=R$5JnW%h2T$yRPseGAziN64z4w*g zRdJ7>kNfhJR?E=HT(5V;(0dcYPf814FZT+P&)a{HqkD+zsjzLa;qjqFW9{Rt368Z; zbjQTU(utcczWA|f5UX=pUGxLXadLtMe*as&5tu9OnGPSr^X&H+ZnQqI71+uacUkTS(^%*@SO1Q8xZLM7JfIUTt<=*_ z8kc!|sNVLuE_%LGuY)`GQgCfm2C>Sf*#}U??Wffy^0<-X9knENQpxZt*_dX%5NJ3m zU_C#Cc8EP#bkC4q<9a{(@l-%}UkQ!nYe?Hs0y;d*c^je~*iq4lYiw^s7veoZ=Jsq9 zeSTE11LTZ46Rwf!wob8`)uVy=Gj(};;&u~_U$Jw_NKfxVC0NEzTL${c#ublp8PcBwqtq2g$plxgb=wKDtbl43< z2_E3542fdUeY81&p{t_ilEHiE%Y&ooFSwBw#hAqeVeb%F$+Qvepr zs^us9AxU>v8}Zrs9G&3XQ4JGxzmC7$R4jkJmfPvI&J6=PZ_pE=#jUIr_Q| z4xtx`(>1Vm3D9KVQDd4pT7LL634&cDPU7|4HhyXuIqwrT~2<86R_|CkCszZDx(dk%>1SpE zEsnYWbJBSbVE0(t8_l(tO_6AGm0<}qz>t855zE~F&5XM4*JHn6`$eS+G=BaeCJK?oXh9<+rOBF>%`U(=)fus*&)CD5Zbm1J0tinJ(sJmMYQvn1 zwsq`8#Dn1LS}0+@N!DWT8w$RY;j1l8w4?qxZH0;8jK;R=&~F(c{cx0Zi;-q1PT4F{ zu#{K;ZX>69f^mbCU@@Dbims@QLczr~hi-MQ@+4k$ zs^sY9gm-}MDRBCI`sYEn#te%}&XnEJ^~+rFgfVdT5gIdantS6(lq2*FGo0KvRx5>L z&lp(!2$GjQWi1|3pqwC&ce>na4V1~VT_s`Ow9-3CSe|^c07P;cv&v#gvxId#0R*xL zB@Af(`UXq@V^1;IS%^3a3g#HPe-QGrilwp((mV`0S9r6K^ zO4=!n%P?@LjiXcn)_F-KE%)qJ-182XJ1SQE9y=+3b+?t`*@>kF%#$IS!BUx%0>4_gg$O2iwi|keye~DF&XZ+Bh<> z$Iy!LSjjDKbxt!i?Wy5oBe5iJKufn6WD`$-59Nuu_=l29BVK6jZW%gNEFOvVmNnZ&E!?1u zHR5_xeZJjO&Ld@f!!UB!na3ChNlWMbX-5w+w9~#@>_a}pVFE{@#}pjg2(-AP=NTuj zpwah`VG@&;;9x~zK;MT7991A`o`|B_8M|VSI-VF=)hBl3Ee{#h&gM}Sz&K^ zPb{>(G*Fu+k4~P+Ql3Gxd~jLjFNsQCkR3L^_ zfw?M^;>SR@RJX?HfBRmRQDK>mms(J_O`%}XfhiS<7{i-;j^xyz>dh;>itaH-DeD%9 z5Q`iKI87iR#RQW0a9wwKYLJ^=>uJw1T%jw*7_GQZu!~si@n1%19bHEq4?0<-nz!=2 z8EHy6x)zszMm>bMb@$XN6m81NGv7!3#29=S{7=nGp~pif{qUT_E6E8`shI1T)n)WOo>GU(;F}NETKfuVwzMvu>mWV;y_#F?YH5(ZIS} zdFht5%EBP=q-uCtR!uesFOFJFJ&Z&>BG7 z!9t_C)lo=a4iI5HGP!3%6QYqyAlfwj+qU`TKE{`q9)WLajS-qqsP^j z-Fp+|)`MUra;(7wI+eG3}WtKzgz4_516f*Gogp6(W5e z3LU3l1t6VUbae@+%pk~ElJ?Jv`p_|zITK3&sU%_0CS7cxF~ktxU4nEf(LzM>=-{{! z@Ljs7TslZ~p-o@89H|xJq#G1wC1J$lm^V6x(5s!aG~xu6>@u*4?0zakLMQmlT3#5k z#fN%`tqjtN;jCOm=g_U2PXdU}!OsGo$y!)dD7r#QRH!w%rADvs!jNX6hi!G(Z6yS! zE-HXLAW#i#ETLy=K}_SWH%YHktb=0rIAh0UX+3jDEeBp%j_6JfMdMHl4tZMXtC{Ww{H2|r7`g! zG$=0BGBke)I=?!4T~E26W7(H!Jab?&YE~n#3XwYyFrXcrF3&4oSY@)`1sUC~>#4LA zbHY)~LWLz)Rpu3>I@I_R>XlYGHdM31Yj^pN#k{>$#X}s^q3Nhstlf@D94v>%vsm>c z*Ycn#c2GJP8S@CMsf5g-$WGkpWK+RTs*F-MZBOWdE$*s_MTH7#`d5q?B&ApLq`u?! zNk2ilPgs1-j2;o2+PxjHqubfALt|d`F%)gK;{DPN4n*_3~M>T&a`LxoB-FvYpIC;!v*b z-d?OALC}f>vUpzV+Vzrq!K^_``(!7U0af}8s{;JfjnvtXR}noleJ>!_{l#7wj~&mU zks0(mPuB+@FXe~Dg+Ky`{xmRHknoO5m0F~@1gBC-6+<8jMn`aeE^Xa!qlP|N&XPlV1&M8J zwMr3sRPPAVFDwd6%zN9Oo2qu6vP7>wI|jqv7jelp>hQvmvcd>hLx8=CcS|P`TWEp) zwAQ_n46*>nBoH7fHFR~Vw>I=DS|d2B?O~pcH51C&MerIqpphJo%#pH~FvujZ$was% z+^#8Q!B#UkSrTpay=pbn{n4T>lev*&cNq*PJ&;tkW>pbhxY>*EQx)S#N$eD$Xp(VJ zvT)pWxmwG-Y+P4i;ZizUQhOdj(Sle>r|@NiyY#xz$VD#cJ5}V~$nxI2t6XYWaf;pV zO603z^jS@AL>9wIV{OAqt*dtN%#*5JgRJzbTyXo_)xotlrmib+JeJzE1U~L>=b<%u zAEzGJ+&WM1s*FpW^1+RoXO}-(>7DY2RSb?m432P?#Ed}LOLyl->pD4Fe$I&0=V76RL(+3=VW|^&~!d+VO$b-OXTc@p_vBxyP&TctCxub;CN4R@NF3? zA{y2t=fErad!06#bF9raO;$&q9pT>aC`5{21e)-~?m8N42DXV@Sw!^_!4SKTV3xsa zKr~s@0uBs5fQNu(;uL9ZTx245C~d#L9YaTs$l}AL01+al9mo+8xZ|E#iI+AcdC$ zqN?ddKNo$p0DnKn^6c4A)5_zQ?3T22b)n1@u(bvli6MImAXyYRai=v}ND+%S3QLl& zk5$&HR~4o}2S^{=AW2AJZFJRNF%W0P&7x(9PRr)Esh`iPpC~)|H|7fTb}^A_!{GnB z3V&FV3i;nHb3;Q(0XhAp$FiTstlTrLIhyuG4w@G3SV$1r9aC{6!iUH25^7k~QSR45e(r0_3zDzneBTtWqn@a`A;NmQm&zwe=Q~MJ*)I zv6p8eW)A*{a=%Wh)Pyd#d@UDUg9yR37?u+nmb86I>x-n1KKz?alpssmFca_f8jB4u zS)YSkL9c~+nwD{ci3V!I`LD+KSg@(0zs;we6$@$|q_G8v}wczMU_=)#Y{ ziAxJK{6SH3R!9)hr}DI{f;E?ei0&K-sWT3U#(4+ApjY3aOd!y;=8m_e*bHdAy1?AY6%RZM_>8wehqSY18$3WR35>A>m5Tx#1y{$}IWzg{9gSBe__gm6G^&oHh z*t2BlmpgXi;4Dj&r`#L&Fe~@+4Mx^vx!h`41mCR6)U;sA91JJ&WN|sffPBgl^m+EQ z4_gs`wV%y$Q%_SliXaZ9ilawS5473%>?oJW8f20laGYLXlT$iBXQ#_ec$!YbXC-E)p@Dc&g9@}i*lFL)+NUCte@{Q7}WnE@i8cH7lznc1= zEg6gT>g8P=fTcCWvd2sE{?(3;sGRi{Y2a}0DJqff|603b`8-pIbKLi~_-3Q~kyv8V z2Cf6x(6*@xVRtyl0=JBVHNDTUZZ(MSVL~Zq;r0;)MI?BOA+i}F_&I4=$n6S>=|K97Nrh3(qeLH(j@A zts{X{;Vm@LpIhJ0vIombZ`E3Ipsn_JxSHG4dNNGlY)DW?$QmJJAPpfUOg>P4hi(hE zR%Nwpj^5}RvqbOaa-&>i;->K(Ypq0kIi;dd14dBM^2?~Hj^03Ho({f9yzjACjF7)k zNu{yPt(uA&=tM1(9o|Vr7e*s~Xpb!R27D7jm*c;CKIL9i_dh#oU*zw=X&(S`oOh|9O| zWYcbn+UXoX2qqzf7CRhZo@>@Ryd!NDD*yM8Nm-tsKI;^wtJ@peV!nr^1n_P(vO$jJ zd{~);1-9aDD?Z1eP~IhjJuZTCe#5OwPT-33BpD;8AbmB64C^RKo-)P=Gfc!q)INn) zNpa61rI=Q`u3F<#jmAk?^)ABK*1B8O1&5y=n%Rf@w}cHhWk+~dTb5S&Qyb1zl38Sn z;uOzNICzMj*|wIV&$Q7id01qZjDn@Wt)y|uJ=a@+WN%z>TyfgGQd%-QAAgDP#7i7v zw`Fc=G+y*n)MNg#K2dFjtc}vR6BvO6T!joK9SgYZ3~Ce*M{DPDpT2CgM{hqPHM}>C zQD}|~`>G3s^MO91j9z1+&)EeIU)>o)0A5?pdX-;^)3<^m^K~%+f_&DKI&UZ*- z_iKuG=_b(bKQ-tvwWQf17HqA3@~Ge5L5WbL%)znf;inNHb#eE4b_(aot0U$`dpxUW z$kP$Ejsz7Fk&cG;)kFaW8&?=#yH5_p;UfUzqW@s@mA*&O$|7MLh9({j>DSIwPkB#& zXa!L=3J9+U$0@i-#EcZlqWk975+3$_3a#UG3}gc~s^75+M`a+6&4HM(wuPXSoqEnR zHMLYYV7rS2DW}9KC%q=yDU-PgaPrykZi5)ekvqPH^Pqk2>!CzbX*um#V{XdpYt5>e zEYUg#Zxn-4s@?7)|Gh%jsZ86O5^DfMT_WiSXlht>Zw^|eu6bTDWNX4s^Y<&N-Nc}8 zzmcwds{#@|wRuF0p_vba{E?2a)KiP}g<%Z4WR$!-V7k=Tdy6wT#F5%FxQn;djwux3 z1fulP$o!|*G#TaaO+`%3Cb2q?(L?OG%ZQmsxoUcm zIcBYF*FKLCKhe_LvV+|VDlBZXTFeSBLk|@f=ztXsi31J<7XZdy+eIg`UL<<_blOTy zgsD7a$1&8vkH)clR`R#DB^$};cSOW$8^~fgwNR5@*yL_nurwjkxy)4Ng$*qRTxdv~ zl3jqGMF;!LSf`2ytq=oEXmJY{Ua{XSByrGH7|0ZoPD?AhoaqEB)ElxFntDXWjKcJz z%-8kMOSls*yCb#O2|TW_${fmaD+n&;P=+2^uRM`8P3fF5kat#7iZtL%bub>uLg5)r z^x5MaDM9CK@>Q6r^hBU7@4Kb7GNHVrY-cIk90f zu=ISi>Fq^vYnFdS|;Zgz3b*J^Lxck z#6*#0XrvwN0SNx4#cq>q&T>MFn2NcdHwG^BOjelbJLjGr4>h&HH|H2N$DiySHf~R3 zI~6<%uU#1H;wC%+zf{?xXacX^i%26UiB}azG;P%jK!U1TokqL&fMj{nyShKWq(*#$ ze8Zahe`1QIs2|^GUUv(Qs|W$5NL_M7*W!h%cUoHKoQyCAQx|@-xCfrgV@MylRhM`N z6aP7wY<8$3e3uiJSj3$EP2h4ccL+58gSss3XbLafh2rQ0?@;4;YKrbV$G9y)?P)idiQ1Qqzkxfa_T^k1Dgt|+Nh8nY?@$mZv2U?LGLbM@!T9L%_V!RWft3V{P$(h^Z7$7DjLb5f9MFAb`+`8xgN-FPwWlth~1iZ)S~!9==8; z->hRb)IW66k^X#1I!twnXHBuk)<>UqxwF-$O8}uOoCc(WXx=4qZ*Y)Gtu#`MKl*_w zYmKIYr1HXQso*J|KrKx~4rp9yk$D^%1&Cx0<(|q#+UVm0Jz(=Kn zD=8on`%yq0=(FE(BP6bDWR>G}sbtc@7$DCT&>bTlH)&*-+p!ERy!Fiyy5}r{DBN}+ zNKqR1mut>LItoxT59Q4Yb`*@*T*|R9&*mN%sB*G#0q!OV+QCCRFmx}HCUsQxE|I|H zjGHASeM3?EIl=II*h=_o&Yv`E*1~fC90zuipn^T&HB&9!a~Qfz@+pq&gnSMi=j~3k zVyHQah8d4sV3pOKo{H00a&)DJd!OWrI0`KANhl#I$$}_57Zvas$4DCIa}{8hg!{kqXAF5BEtcq;-$?aRK1V6Xyj^H7 z&7`s0O!`QQGmx$vRgx$VC6^~+$SGCpsoaV~?WpNpp(}(1C_)91lH^oI%8>IJ3<00C zx}t!FF3P}B9g2f&RdtY%Q8biYSXB-wj|{rBl!<^?AqP4rD{@jaIjcCRR3?e`9P#*(=Q30e+^)pYXLD7;WJB0S0>)k7Q7Tx6Z)F%PXgO?R7;ik&;48kvLMH|^ZMYC9aKShg7bvm5leRazM$Dv?bC-{08KIqg za;mfU@=XbuX_0rSoMDsD{S6a#Gg+Uq6Wf%4Qg(RG;7^}7n6yqXv3V+ zM@)w)ydocacdu2d>AA$udrlATb9y=Tur5Lt%h#H_@be2G zCNGRn#VAE?BHRf^d99bmdWrA*sGoyG4VMwCsG9S^WP_z?RW-?C`*zGj#?M9VsK(KFilKh9kyqvFcQBu*!t za0PZ2#3U$oh(p#L1F4p%1OfYhvljq4O?V2Qz-^O6_ zyD_@lW}*N1PyaluVuZ_a^7W#6mtf^E2CQ`n6)@tO)wS}Ny_4AVSb3LuutYS$m1?>> z{Vc0y{c;sBXp#B@7}`3F&^Jn2TBdMghEr!gUrIldoRH4R5Du_Ly|+EQYn`r_ zdf$4ut&7CM)FN7QdXCFOh~^nzd-g30{XhQlf7ajr?%z5WLWax?dY=#8ot)oPNpda> zVe~j^ks2m=&zp|hRzP!)o&QbcX&es(Zk?T9%+Z2Q@i^-(l)R$eL9Bz-9PvvpSblv zJR!&TZwcR*ehfFEydK2sJ9RF>mk_Smgq3ARW7aEPJBCSbW53BR$-XR3+h6UXa6N*Y zHx#|m053@+`^fURdRbh%JZ|IKmUum)vx=6B{L^)W@yqo$zy0m{_Fw;NjaEpY*Q`AjTu=X& z^BbK-qjWv%NI5pd#dzL#zg46HFyA38mYnWa!p-O{ow7&MqZXgYdRfv?Lae~}H2D>M zXih(9*r|?9(S5>6@u~OwkUW1F(?C@3x*5v=(-%Fx*DF8z`hr$hed0lfuXDkHX+rQs zRf~C^9wQb9QKuJI{QkAb{^DoJR@vF7WaCczwKnabAD;jlcTYpZ&LQefP8fQ&s=)V>~`yAFr?N z>o

)tCSF8&y?*^|L?w&)@p)XaBvbepXd~?_+E}ULUWo&FiOC^{;>a)tCRSs_Op& X!jtQk1g8^>00000NkvXXu0mjf{x~u2 literal 546 zcmeAS@N?(olHy`uVBq!ia0vp^Ux3(ygAGU?RKM{7NJ*BsMwA5SrAr>EaktaqG?Xjb1W=A`K6%1686U*DQFT%n~B7hRG{v z*;cOuYWWFICrxk?So~-&a zN-xLieczV+E!iwNjN9P#F~h?%>Yi_sd(!>N?nU#Azp8xt&##%EK6G=XuH)%D`|5(1E&lUK zubJmpxQy8R{(V!kN{^N;$Tk1EL$Cgt`KOAhj^>qJ@AGFjPW!d@%X_1`G|>+w98xU2 z98v-%3K<~maG_xVqhm7=GdHn;Bxox6;m3mYpDy%d-)<1gdevUG-uQ)l<*YY*w@YR$ zJh{8QtX=ZU@fj~mOmrsS-M)0^k4)zaZL=+-&Zcd?n`05ZE^pWAp9KQNIj$F?_MS_v z{bc`Qi|l6k&7zx=>p(y^|LE`T--I!PC{xWt~$(69D>N B-%$Vn diff --git a/source/images/button_gamesave_over.png b/source/images/button_gamesave_over.png index 0f44608a3e4a93b50c6398d7dd348fb71f1f6133..ce132c3e8857fdab8194a7c488160c706715669a 100644 GIT binary patch literal 11653 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 We6}P-j8}310000 70 || userInput[0].WPAD_StickX(1) > 70 || userInput[0].wupcdata.substickX > 560 ); // RIGHT on c-stick and on classic controller right joystick -*/ + /* Check for menu: * CStick left * OR "L+R+X+Y" (eg. Homebrew/Adapted SNES controllers) diff --git a/source/menu.cpp b/source/menu.cpp index bc2782e..2619427 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -787,13 +787,13 @@ static void WindowCredits(void * ptr) creditsBoxImg.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); creditsWindowBox.Append(&creditsBoxImg); - int numEntries = 24; + int numEntries = 23; GuiText * txt[numEntries]; txt[i] = new GuiText("Credits", 30, (GXColor){0, 0, 0, 255}); txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,y); i++; y+=32; - txt[i] = new GuiText("Official Site: http://code.google.com/p/snes9x-gx/", 20, (GXColor){0, 0, 0, 255}); + txt[i] = new GuiText("Official Site: https://github.com/dborth/snes9xgx", 20, (GXColor){0, 0, 0, 255}); txt[i]->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); txt[i]->SetPosition(0,y); i++; y+=40; txt[i]->SetPresets(20, (GXColor){0, 0, 0, 255}, 0, @@ -803,9 +803,9 @@ static void WindowCredits(void * ptr) txt[i]->SetPosition(60,y); i++; txt[i] = new GuiText("Tantric"); txt[i]->SetPosition(350,y); i++; y+=24; - txt[i] = new GuiText("Coding"); + txt[i] = new GuiText("Additional improvements"); txt[i]->SetPosition(60,y); i++; - txt[i] = new GuiText("michniewski"); + txt[i] = new GuiText("Zopenko, michniewski"); txt[i]->SetPosition(350,y); i++; y+=24; txt[i] = new GuiText("Menu artwork"); txt[i]->SetPosition(60,y); i++; @@ -841,11 +841,9 @@ static void WindowCredits(void * ptr) txt[i] = new GuiText("Snes9x - Copyright (c) Snes9x Team 1996 - 2006"); txt[i]->SetPosition(0,y); i++; y+=20; - txt[i] = new GuiText("This software is open source and may be copied,"); + txt[i] = new GuiText("This software is open source and may be copied, distributed, or modified "); txt[i]->SetPosition(0,y); i++; y+=20; - txt[i] = new GuiText("distributed, or modified under the terms of the"); - txt[i]->SetPosition(0,y); i++; y+=20; - txt[i] = new GuiText("GNU General Public License (GPL) Version 2."); + txt[i] = new GuiText("under the terms of the GNU General Public License (GPL) Version 2."); txt[i]->SetPosition(0,y); i++; y+=20; char iosVersion[20]; @@ -989,8 +987,8 @@ static int MenuGameSelection() preview.SetPosition(174, -8); u8* imgBuffer = MEM_ALLOC(512 * 512 * 4); int previousBrowserIndex = -1; - char screenshotPath[MAXJOLIET + 1]; - + char imagePath[MAXJOLIET + 1]; + HaltGui(); btnLogo->SetAlignment(ALIGN_RIGHT, ALIGN_TOP); btnLogo->SetPosition(-50, 24); @@ -1013,11 +1011,11 @@ static int MenuGameSelection() gameBrowser.fileList[0]->SetState(STATE_SELECTED); gameBrowser.TriggerUpdate(); titleTxt.SetText(inSz ? szname : "Choose Game"); - + while(menu == MENU_NONE) { usleep(THREAD_SLEEP); - + if(selectLoadedFile == 2) { selectLoadedFile = 0; @@ -1050,8 +1048,7 @@ static int MenuGameSelection() menu = MENU_GAMESELECTION; break; } - - + titleTxt.SetText(inSz ? szname : "Choose Game"); ResumeGui(); @@ -1071,20 +1068,19 @@ static int MenuGameSelection() } } - //update game screenshot + //update gamelist image if(previousBrowserIndex != browser.selIndex) { previousBrowserIndex = browser.selIndex; - snprintf(screenshotPath, MAXJOLIET, "%s%s/%s.png", pathPrefix[GCSettings.LoadMethod], GCSettings.ScreenshotsFolder, browserList[browser.selIndex].displayname); + snprintf(imagePath, MAXJOLIET, "%s%s/%s.png", pathPrefix[GCSettings.LoadMethod], GCSettings.ImageFolder, browserList[browser.selIndex].displayname); AllocSaveBuffer(); int width, height; - if(LoadFile(screenshotPath, SILENT)) + if(LoadFile(imagePath, SILENT)) { if(DecodePNG(savebuffer, &width, &height, imgBuffer, 512, 512)) { preview.SetImage(imgBuffer, width, height); - //preview.SetScale(225.0f / width); preview.SetScale( MIN(225.0f / width, 235.0f / height) ); } else @@ -1290,7 +1286,7 @@ static int MenuGame() deleteBtn.SetTrigger(trigA); deleteBtn.SetTrigger(trig2); deleteBtn.SetEffectGrow(); - + GuiText resetBtnTxt("Reset", 22, (GXColor){0, 0, 0, 255}); GuiImage resetBtnImg(&btnLargeOutline); GuiImage resetBtnImgOver(&btnLargeOutlineOver); @@ -1776,7 +1772,7 @@ static int MenuGameSaves(int action) ret = saveBrowser.GetClickedSave(); - // load, save and delete save games + //load, save and delete save games if(ret > -3) { int result = 0; @@ -1796,7 +1792,7 @@ static int MenuGameSaves(int action) if(result) menu = MENU_EXIT; } - else if(action == 2) // delete SRAM/Snapshot + else if(action == 2) // delete RAM/State { if (WindowPrompt("Delete File", "Delete this save file? Deleted files can not be restored.", "OK", "Cancel")) { @@ -1822,8 +1818,6 @@ static int MenuGameSaves(int action) } } menu = MENU_GAME_DELETE; - - } else // save { @@ -1869,7 +1863,6 @@ static int MenuGameSaves(int action) } } } - if(backBtn.GetState() == STATE_CLICKED) { menu = MENU_GAME; @@ -3518,6 +3511,8 @@ static int MenuSettingsFile() sprintf(options.name[i++], "Save Folder"); sprintf(options.name[i++], "Cheats Folder"); sprintf(options.name[i++], "Screenshots Folder"); + sprintf(options.name[i++], "Covers Folder"); + sprintf(options.name[i++], "Artworks Folder"); sprintf(options.name[i++], "Auto Load"); sprintf(options.name[i++], "Auto Save"); options.length = i; @@ -3593,14 +3588,22 @@ static int MenuSettingsFile() case 5: OnScreenKeyboard(GCSettings.ScreenshotsFolder, MAXPATHLEN); break; - + case 6: + OnScreenKeyboard(GCSettings.CoverFolder, MAXPATHLEN); + break; + + case 7: + OnScreenKeyboard(GCSettings.ArtworkFolder, MAXPATHLEN); + break; + + case 8: GCSettings.AutoLoad++; if (GCSettings.AutoLoad > 2) GCSettings.AutoLoad = 0; break; - case 7: + case 9: GCSettings.AutoSave++; if (GCSettings.AutoSave > 3) GCSettings.AutoSave = 0; @@ -3667,15 +3670,17 @@ static int MenuSettingsFile() snprintf (options.value[3], 35, "%s", GCSettings.SaveFolder); snprintf (options.value[4], 35, "%s", GCSettings.CheatFolder); snprintf (options.value[5], 35, "%s", GCSettings.ScreenshotsFolder); + snprintf (options.value[6], 35, "%s", GCSettings.CoverFolder); + snprintf (options.value[7], 35, "%s", GCSettings.ArtworkFolder); - if (GCSettings.AutoLoad == 0) sprintf (options.value[6],"Off"); - else if (GCSettings.AutoLoad == 1) sprintf (options.value[6],"SRAM"); - else if (GCSettings.AutoLoad == 2) sprintf (options.value[6],"Snapshot"); + if (GCSettings.AutoLoad == 0) sprintf (options.value[8],"Off"); + else if (GCSettings.AutoLoad == 1) sprintf (options.value[8],"SRAM"); + else if (GCSettings.AutoLoad == 2) sprintf (options.value[8],"Snapshot"); - if (GCSettings.AutoSave == 0) sprintf (options.value[7],"Off"); - else if (GCSettings.AutoSave == 1) sprintf (options.value[7],"SRAM"); - else if (GCSettings.AutoSave == 2) sprintf (options.value[7],"Snapshot"); - else if (GCSettings.AutoSave == 3) sprintf (options.value[7],"Both"); + if (GCSettings.AutoSave == 0) sprintf (options.value[9],"Off"); + else if (GCSettings.AutoSave == 1) sprintf (options.value[9],"SRAM"); + else if (GCSettings.AutoSave == 2) sprintf (options.value[9],"Snapshot"); + else if (GCSettings.AutoSave == 3) sprintf (options.value[9],"Both"); optionBrowser.TriggerUpdate(); } @@ -3710,6 +3715,7 @@ static int MenuSettingsMenu() sprintf(options.name[i++], "Sound Effects Volume"); sprintf(options.name[i++], "Rumble"); sprintf(options.name[i++], "Language"); + sprintf(options.name[i++], "Preview Image"); options.length = i; for(i=0; i < options.length; i++) @@ -3794,6 +3800,12 @@ static int MenuSettingsMenu() GCSettings.language = LANG_ENGLISH; break; + + case 6: + GCSettings.PreviewImage++; + if(GCSettings.PreviewImage > 2) + GCSettings.PreviewImage = 0; + break; } if(ret >= 0 || firstRun) @@ -3861,6 +3873,22 @@ static int MenuSettingsMenu() case LANG_TURKISH: sprintf(options.value[5], "Turkish"); break; } + switch(GCSettings.PreviewImage) + { + case 0: + sprintf(options.value[6], "Screenshots"); + snprintf(GCSettings.ImageFolder, MAXJOLIET, "%s", GCSettings.ScreenshotsFolder); + break; + case 1: + sprintf(options.value[6], "Covers"); + snprintf(GCSettings.ImageFolder, MAXJOLIET, "%s", GCSettings.CoverFolder); + break; + case 2: + sprintf(options.value[6], "Artworks"); + snprintf(GCSettings.ImageFolder, MAXJOLIET, "%s", GCSettings.ArtworkFolder); + break; + } + optionBrowser.TriggerUpdate(); } diff --git a/source/preferences.cpp b/source/preferences.cpp index 4968ef0..6639b4d 100644 --- a/source/preferences.cpp +++ b/source/preferences.cpp @@ -127,7 +127,10 @@ preparePrefsData () createXMLSetting("SaveFolder", "Save Folder", GCSettings.SaveFolder); createXMLSetting("CheatFolder", "Cheats Folder", GCSettings.CheatFolder); createXMLSetting("ScreenshotsFolder", "Screenshots Folder", GCSettings.ScreenshotsFolder); - + createXMLSetting("CoverFolder", "Covers Folder", GCSettings.CoverFolder); + createXMLSetting("ArtworkFolder", "Artworks Folder", GCSettings.ArtworkFolder); + createXMLSetting("ImageFolder", "Image Folder", GCSettings.ImageFolder); + createXMLSection("Network", "Network Settings"); createXMLSetting("smbip", "Share Computer IP", GCSettings.smbip); @@ -156,7 +159,8 @@ preparePrefsData () createXMLSetting("SFXVolume", "Sound Effects Volume", toStr(GCSettings.SFXVolume)); createXMLSetting("Rumble", "Rumble", toStr(GCSettings.Rumble)); createXMLSetting("language", "Language", toStr(GCSettings.language)); - + createXMLSetting("PreviewImage", "Preview Image", toStr(GCSettings.PreviewImage)); + createXMLSection("Controller", "Controller Settings"); createXMLSetting("Controller", "Controller", toStr(GCSettings.Controller)); @@ -270,9 +274,6 @@ decodePrefsData () int verMajor = version[0] - '0'; int verMinor = version[2] - '0'; int verPoint = version[4] - '0'; - int curMajor = APPVERSION[0] - '0'; - int curMinor = APPVERSION[2] - '0'; - int curPoint = APPVERSION[4] - '0'; // first we'll check that the versioning is valid if(!(verMajor >= 0 && verMajor <= 9 && @@ -283,9 +284,6 @@ decodePrefsData () result = false; // reset settings else if(verMajor == 4 && verMinor == 0 && verPoint < 2) // anything less than 4.0.2 result = false; // reset settings - else if((verMajor*100 + verMinor*10 + verPoint) > - (curMajor*100 + curMinor*10 + curPoint)) // some future version - result = false; // reset settings else result = true; } @@ -304,7 +302,10 @@ decodePrefsData () loadXMLSetting(GCSettings.SaveFolder, "SaveFolder", sizeof(GCSettings.SaveFolder)); loadXMLSetting(GCSettings.CheatFolder, "CheatFolder", sizeof(GCSettings.CheatFolder)); loadXMLSetting(GCSettings.ScreenshotsFolder, "ScreenshotsFolder", sizeof(GCSettings.ScreenshotsFolder)); - + loadXMLSetting(GCSettings.CoverFolder, "CoverFolder", sizeof(GCSettings.CoverFolder)); + loadXMLSetting(GCSettings.ArtworkFolder, "ArtworkFolder", sizeof(GCSettings.ArtworkFolder)); + loadXMLSetting(GCSettings.ImageFolder, "ImageFolder", sizeof(GCSettings.ImageFolder)); + // Network Settings loadXMLSetting(GCSettings.smbip, "smbip", sizeof(GCSettings.smbip)); @@ -336,6 +337,7 @@ decodePrefsData () loadXMLSetting(&GCSettings.SFXVolume, "SFXVolume"); loadXMLSetting(&GCSettings.Rumble, "Rumble"); loadXMLSetting(&GCSettings.language, "language"); + loadXMLSetting(&GCSettings.PreviewImage, "PreviewImage"); // Controller Settings @@ -409,7 +411,10 @@ DefaultSettings () sprintf (GCSettings.LoadFolder, "%s/roms", APPFOLDER); // Path to game files sprintf (GCSettings.SaveFolder, "%s/saves", APPFOLDER); // Path to save files sprintf (GCSettings.CheatFolder, "%s/cheats", APPFOLDER); // Path to cheat files - sprintf (GCSettings.ScreenshotsFolder, "%s/screenshots", APPFOLDER); // Path to cheat files + sprintf (GCSettings.ScreenshotsFolder, "%s/screenshots", APPFOLDER); // Path to screenshot files + sprintf (GCSettings.CoverFolder, "%s/covers", APPFOLDER); // Path to cover files + sprintf (GCSettings.ArtworkFolder, "%s/artworks", APPFOLDER); // Path to artwork files + sprintf (GCSettings.ImageFolder, "%s/covers", APPFOLDER); GCSettings.AutoLoad = 1; GCSettings.AutoSave = 1; @@ -431,6 +436,8 @@ DefaultSettings () GCSettings.MusicVolume = 40; GCSettings.SFXVolume = 40; GCSettings.Rumble = 1; + GCSettings.PreviewImage = 0; + #ifdef HW_RVL GCSettings.language = CONF_GetLanguage(); @@ -667,6 +674,12 @@ bool LoadPrefs() if(strcmp(GCSettings.ScreenshotsFolder, "snes9x/screenshots") == 0) sprintf(GCSettings.ScreenshotsFolder, "snes9xgx/screenshots"); + if(strcmp(GCSettings.CoverFolder, "snes9x/covers") == 0) + sprintf(GCSettings.CoverFolder, "snes9xgx/covers"); + + if(strcmp(GCSettings.ArtworkFolder, "snes9x/artworks") == 0) + sprintf(GCSettings.ArtworkFolder, "snes9xgx/artworks"); + ResetText(); return prefFound; } diff --git a/source/snes9xgx.cpp b/source/snes9xgx.cpp index 9556d0d..3daf4fc 100644 --- a/source/snes9xgx.cpp +++ b/source/snes9xgx.cpp @@ -121,7 +121,7 @@ void ExitApp() ExitCleanup(); if(ShutdownRequested) - SYS_ResetSystem(SYS_POWEROFF, 0, 0); + SYS_ResetSystem(SYS_POWEROFF_STANDBY, 0, 0); #ifdef HW_RVL if(GCSettings.ExitAction == 0) // Auto @@ -153,7 +153,7 @@ void ExitApp() } else if(GCSettings.ExitAction == 2) // Shutdown Wii { - SYS_ResetSystem(SYS_POWEROFF, 0, 0); + SYS_ResetSystem(SYS_POWEROFF_STANDBY, 0, 0); } else // Exit to Loader { diff --git a/source/snes9xgx.h b/source/snes9xgx.h index c88e009..66f8372 100644 --- a/source/snes9xgx.h +++ b/source/snes9xgx.h @@ -22,7 +22,7 @@ #define APPNAME "Snes9x GX" #define APPVERSION "4.3.6" #define APPFOLDER "snes9xgx" -#define PREF_FILE_NAME "settings.xml" +#define PREF_FILE_NAME "settings.xml" #define NOTSILENT 0 #define SILENT 1 @@ -84,12 +84,15 @@ struct SGCSettings{ int AutoSave; int LoadMethod; // For ROMS: Auto, SD, DVD, USB, Network (SMB) int SaveMethod; // For SRAM, Freeze, Prefs: Auto, SD, USB, SMB - char LoadFolder[MAXPATHLEN]; // Path to game files + char LoadFolder[MAXPATHLEN]; // Path to game files char LastFileLoaded[MAXPATHLEN]; //Last file loaded filename - char SaveFolder[MAXPATHLEN]; // Path to save files - char CheatFolder[MAXPATHLEN]; // Path to cheat files + char SaveFolder[MAXPATHLEN]; // Path to save files + char CheatFolder[MAXPATHLEN]; // Path to cheat files char ScreenshotsFolder[MAXPATHLEN]; //Path to screenshots files - + char CoverFolder[MAXPATHLEN]; //Path to cover files + char ArtworkFolder[MAXPATHLEN]; //Path to artwork files + char ImageFolder[MAXPATHLEN]; //Saved image folder path + char Exit_Dol_File[MAXPATHLEN]; // Exit Path char LoaderName[20]; // Menu Loader Name u32 Exit_Channel[2]; // Exit Channel @@ -115,6 +118,7 @@ struct SGCSettings{ int SFXVolume; int Rumble; int language; + int PreviewImage; int sfxOverclock; };