From 00a1df59ccb8de83bd7c3bb7349e65a27e369342 Mon Sep 17 00:00:00 2001 From: Askot Date: Sat, 17 Sep 2016 20:46:33 -0700 Subject: [PATCH 1/2] -Add delete sram/snapshot option by Zopenko --- source/filelist.h | 2 + source/gui/gui_savebrowser.cpp | 8 ++- source/images/icon_game_delete.png | Bin 0 -> 6035 bytes source/menu.cpp | 99 +++++++++++++++++++++++++++-- source/menu.h | 1 + 5 files changed, 104 insertions(+), 6 deletions(-) create mode 100644 source/images/icon_game_delete.png diff --git a/source/filelist.h b/source/filelist.h index e15a85f8..fcde07b9 100644 --- a/source/filelist.h +++ b/source/filelist.h @@ -93,6 +93,8 @@ extern const u8 icon_game_load_png[]; extern const u32 icon_game_load_png_size; extern const u8 icon_game_save_png[]; extern const u32 icon_game_save_png_size; +extern const u8 icon_game_delete_png[]; +extern const u32 icon_game_delete_png_size; extern const u8 icon_game_reset_png[]; extern const u32 icon_game_reset_png_size; diff --git a/source/gui/gui_savebrowser.cpp b/source/gui/gui_savebrowser.cpp index 5e181773..1c174500 100644 --- a/source/gui/gui_savebrowser.cpp +++ b/source/gui/gui_savebrowser.cpp @@ -24,6 +24,8 @@ GuiSaveBrowser::GuiSaveBrowser(int w, int h, SaveList * s, int a) if(action == 0) // load listOffset = 0; + else if(action == 2) // delete SRAM / Snapshot + listOffset = 0; else listOffset = -2; // save - reserve -2 & -1 for new slots @@ -257,7 +259,8 @@ void GuiSaveBrowser::Update(GuiTrigger * t) if(selectedItem == 0) { if((listOffset - 2 >= 0 && action == 0) || - (listOffset >= 0 && action == 1)) + (listOffset >= 0 && action == 1) || + (listOffset - 2 >= 0 && action == 2)) { // move list up by 1 listOffset -= 2; @@ -295,7 +298,8 @@ void GuiSaveBrowser::Update(GuiTrigger * t) if(selectedItem < 2) { if((listOffset - 2 >= 0 && action == 0) || - (listOffset >= 0 && action == 1)) + (listOffset >= 0 && action == 1) || + (listOffset - 2 >= 0 && action == 2)) { // move list up by 1 listOffset -= 2; diff --git a/source/images/icon_game_delete.png b/source/images/icon_game_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..0502b49a837fa53267c57824db449c86539a6d72 GIT binary patch literal 6035 zcma)=_ct3}+{c56y*darLe(A#S}R6Wt!j$;DzT+%&k}pYZfljcR%+C$TD4bEqoMZR z)T|P#RuJRy`~}bR!{@%w`TTItJ?DPT`@Zk%wH{KFftG_7001y(YpEMtYu46 zZYXR9j)>H?W1402(%zS5**Bu&nEt6LO0Nu_1Eiynl4t(9D^3s0th-#6N5d`7% zDSV;~0I)%{)e(liGuxkjC2)2%ueY|wbeGnaZ3gjXJi#R2x|fusMeta-(-Fl3{Q;)v zL!{@HAGd`>cpv?0VgE)(aj?}y_B$vQ>%uOzDEMZqJzx8{#m9T{qsa&MUQVgv#>R%2 z_kaD&2mi4IfBo9`wNLE0j&He6o!_d$Sd8`UPn-W+_I;v38#Y(x>nfveA*9)j1eMDv zUOt=*e(KpEJGv{A=oTpQ;3( zPhA|2KK*yG8^VKfg5m*-Qx$;2ftyh|D0B1qlZ~e#UoWd@4CqIGUhb!~;x78#f~C(& zf-clH*+#26F$O}ogG{Bz&KI*yyLb7hdE>Wls=<$1E`yHzl|b&gi39@Sp`xOq{BL4K zWu@m<^k_(MHc3Irt-|;)5}th3NEvdl4qY>&s?u@`e_ox{^z+uWHw8 zaFU~rEqwuJA=DRPf_$AGV#+6r;U<&b+D;4u4X!dAt_@}bzyX#TG&q?nOPaZHofnF) z+HKckDN&Djyykg2ytI^49d^$2gBUbM@UAZl&~?6;pFZHWEEo@b*KKil<~Q#hLYGqW z#o58Zq2vm#7Lz&OaU0@KvM4zY~pE zuFguyV`!i|4}I^2%DtEiOJd1;W33xz>^Zm4NJhaOxEt`h$*g#sJNRTNn&P)XC3gQu z=2AC(x)Kwb9*ox0;fq&{QFQ6_aO{DCX|sQYV=40G;R$U->Q8b}%zV$qSS2r31yxv# z5`RwO!B99n@U(+T#j6w|UalF7 z|6xy)s{sAVP|9aN9rckV7Wt!r4sQ(E8z(c77YEP&CFSHyjJMHv2J#g z11r~v8B8Fkr zAE64^5spwYAK)>HZRlMKse|WoZ+|fOxN6oYvCt{Cn)l*!qH1Lb=hQ* zdcD~CqFV(R%Ohv1xb0=6_tEF~ud~tX8#FCG3o=#7I~iUB%GR;$8US>W2S_e#r6>Q@ z$?k90u%_GY<-k8cJsq`Q52_vSYAXzVr6|1}(N*EK$9PQO4*RjP+j^yZHNP8NSOR%U zBS9MgJ9*?C>QqL?hDz5iG63H{{UVEj5 z7SuGaHR2e*2p`zl$$XxG8Ej~`r1xFQ$Ay3RM0%y0ee$QK_{;lV>M#HYNZp|^4HhMb z1c04gopZ+N^?ROUSYQ60aW}VA89YFCAhb8Jb{g$e@5o>bc%aNpNa@I~^pEq0)JZIp z5;}y6GRoe^y?1ql&02%GJ|U?Z%*qB~5HAHTT$YMtdMQW|E(b1pJ0C^xCB*tk>h_oJ zDy38Bo<*!Qg1Nb)R%k=X=;vMUXe9wrqRu5QHXHwFIhV!<`pqmv|3qhsp2$?GGwWhK zDBBo-vQ~_3)Kn;T=*Xh3S`v_rLoIKbmskDi(Df+LBavHGBL;a)VMpUNxCzj13(0jx z#PL&&8YpuYai_n$`4xkYaznU(sRBVU@@2l9$KH4JWCp3h(ZwkfoLlE+rkUimNOJWz zlS*4rgMdpU%B^i37-Eg>Fpk0AHZKZ}$f;=T2K!VAU?0q2D2%F;3o4=7S!EsdOTCaR zmyBFN2k-)t->JzHv`QXxJsvA5`H;g@i&(>>Qp_z6ig2UiNHd8P%GA*uTV`PBgf9s{ zTOUATRCIRkC%Nua1wzMyMa**fXTK;1htuF&j~1HTmDmsxTFn;ZLQe`I@#t=KgwAXJ zcmCJsvBhjIx4kV(iTT#t9GmRu`nvEbcF*aq%iwvmsg8 z!Z&3E0E-i?->HP3MgR0_dJ5+E2*WhRZI^Pv{r7;8b3+5?X|j`)J{FB;x=wLOaxa^C zJKAmIoMa)d8{tSBX1kAvsO3CajoL8yI5J*OnP=u!->jvnY1evINW8iLbq6)*`mI4Z ztF7uvA4cR9QXqZ6N&eY-GD>;3A8GB^EinB+gmBrTEeW`V%lZ!V4Q_FXz z0d^~|2NI)0DBi5W4se{?d?T3(n^j%yzJ}myT-=4`^H|tjs~KuTfZOteDXsM_sTw3U+ngXZ!Qel zT#=;)))>+Vhn0!s|2vxg6}egb#$#tr{{7>WA(2i88V(|O^w=eer`^w{}-rL8`*r<9G%?+0gQ`3agkEO#b^m z#0F3ybM(sqW>9{{*{tcp>GkYGQ&STqz(uqhd&Ab&G+@Ni+~U)97*kZCdk88c#QE-6Y{?gEAj z>~3ImQ+5E-i2q9S4#)bCGsgrZ<-@r_W+8B67| zG~S9|k>1>;~5L=C(a{L$H8*z2%_rH8Q z$+($lKt5y=Xz-Bew^T&soLv>vuR#}wq9`ML@$~Qta`Y-Yds1Fxs`85+TeWi+`%1w- zlf5@~Y8dWix-Gr<{`{Xg!&<3C=^*PHc?)g{TS}RVM4h85R>D0NQD6hDie2vs*z{-c(Vv(YR#Am{cf z`fhmZ?Bkm04|!NZqo<>n>xH)&6^pf#)152g)!d`}#84O+AK5Zo zw9HDgSlTv?Hw>Yu(*UskHHU^btjZ{C%YmW?xOqtX`vJ=_RP z6>_wDl_gB~#tG=hq)~|0=2J^N_<`>QusnE;#l z?ymkZ3t0$JFQo>72njw;sC=&Ft#H#z8Q(W(!HjQkate(txYW zwn3@Uo%A&{bp}gVScqY`JwO1ECGXA&D$1*}oK63=duzr{V4cZwjf0C9DlPq5md(c9 z?Ig0nS=ba{101LOGBIj)Txwdkx*Kv8Kp4Yes^7trqNTM**txkS(PwkOyd(#t!odp! z$U5~H!=z%VQJB1^V{KExOkYG(X_7 zQ;I8{z*smSvA=qzlR6bywHj*_FQ_fvn&^%E7o^d5D@?~&SQoB)<29)+1T3!MktVLk|`u?o{l%fRi(nWs}CmgIT@eNqQ z>6Yo^33&^i6Fn8qVV5J#aYn`5pm_K8;gPiaZS$FRaCvy$XuRnfW+c7-YC}ZAQY8aV zR)wpC0R_OE?(a1ZLSa+$B}iqH*2$K}y@k!^Z}gqS`UZ2&_J>6R={o1D9p~gAYoRiO z-?vI^aKg|6efHvPIotx}@=AhA?d_GqfI09QUyyH+jA8bv>;RT}FGw(BEGtS6Ol>_C z1ylW;1P9zVOZEFJ-}X#Yw=cf6;>7-7^hPXA^+ZhjgL7QQz_cI*n0%ccKl~+@&C2Rq zQ?nmtnDqUX-_F@{WTetp@MO>_p*m@OHO$1pgA$S96={yACXqB!m&jS* zP;!qjff7NwVZG$6<;FXvU{4Fq>V-b)} zV}iS4R?tI@eN+D5E(zPS_2 z^5ymVv>L_gTMgkAIqmkMTVp)`-I=9(+A`OEDtfb#3zM4VV;xJz9#&8tit*)R;#+jD zyIta{q>ynym!KIfm~}^R%P2M>;eH#^Ft)0%S6QS?OB8?Cjy^uie|oaad^DWDJA}Fr z5AMGqgRj}pW%_WC+Um)Q(y7n<``>?eY-0@+9)PSzhTj>X=>Et=d#(@|i7isR@caJO zqI`nS`%fy;XX*Q!yN{@9nm06^EH&ILe0_So zvn;Ip?J0zBCT@f>hbM+23b^mzqQ6DYPkrOX4d#2zk&Ll0W;J6(rWB0T#?gY8d^x^z z{ijPY_&0Ejzbq_!(+yFzd;Ci`Wih^q7@(IUE7^x;qrIPg7W90xW z@$|urHbGnZYn&9`EB*P-LjQeJ(aL}pF(wx)-_rlYHMS>mo(TzFAfF_4)(83A&I*~X zd*J8xX+IZD{P-4R_19xJ`df9iA^A5uN@qJ$k@i@uGm6GcX@86F%DNd|N?ILYw#X#j!kkcYF2sTPQsV6}R%U@Z#nf zsmtJ^ylL?1<*?nr6hk00Q0SOIY= zjl7t~^MJ>NP@9dg{LZSueG5HY3<8mDsFQFstjR+ONHk6Ngm zPsliGCHblH#)nS7%#;r$u)LJscvo)PL)MJVam~*G2Lp#wrABX^=}vu?7ZI5mLQO%_{7F0PkjtO#lD@ literal 0 HcmV?d00001 diff --git a/source/menu.cpp b/source/menu.cpp index 529e7ea7..4cb7a9a5 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -1230,6 +1230,7 @@ static int MenuGame() GuiImageData iconGameSettings(icon_game_settings_png); GuiImageData iconLoad(icon_game_load_png); GuiImageData iconSave(icon_game_save_png); + GuiImageData iconDelete(icon_game_delete_png); GuiImageData iconReset(icon_game_reset_png); GuiImageData battery(battery_png); @@ -1245,7 +1246,7 @@ static int MenuGame() GuiImage saveBtnIcon(&iconSave); GuiButton saveBtn(btnLargeOutline.GetWidth(), btnLargeOutline.GetHeight()); saveBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - saveBtn.SetPosition(-125, 120); + saveBtn.SetPosition(-200, 120); saveBtn.SetLabel(&saveBtnTxt); saveBtn.SetImage(&saveBtnImg); saveBtn.SetImageOver(&saveBtnImgOver); @@ -1262,7 +1263,7 @@ static int MenuGame() GuiImage loadBtnIcon(&iconLoad); GuiButton loadBtn(btnLargeOutline.GetWidth(), btnLargeOutline.GetHeight()); loadBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - loadBtn.SetPosition(125, 120); + loadBtn.SetPosition(0, 120); loadBtn.SetLabel(&loadBtnTxt); loadBtn.SetImage(&loadBtnImg); loadBtn.SetImageOver(&loadBtnImgOver); @@ -1273,6 +1274,56 @@ static int MenuGame() loadBtn.SetTrigger(trig2); loadBtn.SetEffectGrow(); + GuiText deleteBtnTxt("Delete", 22, (GXColor){0, 0, 0, 255}); + GuiImage deleteBtnImg(&btnLargeOutline); + GuiImage deleteBtnImgOver(&btnLargeOutlineOver); + GuiImage deleteBtnIcon(&iconDelete); + GuiButton deleteBtn(btnLargeOutline.GetWidth(), btnLargeOutline.GetHeight()); + deleteBtn.SetAlignment(ALIGN_CENTRE, ALIGN_TOP); + deleteBtn.SetPosition(200, 120); + deleteBtn.SetLabel(&deleteBtnTxt); + deleteBtn.SetImage(&deleteBtnImg); + deleteBtn.SetImageOver(&deleteBtnImgOver); + deleteBtn.SetIcon(&deleteBtnIcon); + deleteBtn.SetSoundOver(&btnSoundOver); + deleteBtn.SetSoundClick(&btnSoundClick); + deleteBtn.SetTrigger(trigA); + deleteBtn.SetTrigger(trig2); + deleteBtn.SetEffectGrow(); + + // Boktai adds an extra button for setting the sun. + GuiText *sunBtnTxt = NULL; + GuiImage *sunBtnImg = NULL; + GuiImage *sunBtnImgOver = NULL; + GuiButton *sunBtn = NULL; + if (isBoktai) { + struct tm *newtime; + time_t long_time; + + // regardless of the weather, there should be no sun at night time! + time(&long_time); // Get time as long integer. + newtime = localtime(&long_time); // Convert to local time. + if (newtime->tm_hour > 21 || newtime->tm_hour < 5) + { + sprintf(s, "Weather: Night Time"); + } else sprintf(s, "Weather: %d%% sun", SunBars*10); + sunBtnTxt = new GuiText(s, 22, (GXColor){0, 0, 0, 255}); + sunBtnTxt->SetWrap(true, btnLargeOutline.GetWidth()-30); + sunBtnImg = new GuiImage(&btnLargeOutline); + sunBtnImgOver = new GuiImage(&btnLargeOutlineOver); + sunBtn = new GuiButton(btnLargeOutline.GetWidth(), btnLargeOutline.GetHeight()); + sunBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); + sunBtn->SetPosition(0, 250); + sunBtn->SetLabel(sunBtnTxt); + sunBtn->SetImage(sunBtnImg); + sunBtn->SetImageOver(sunBtnImgOver); + sunBtn->SetSoundOver(&btnSoundOver); + sunBtn->SetSoundClick(&btnSoundClick); + sunBtn->SetTrigger(trigA); + sunBtn->SetTrigger(trig2); + sunBtn->SetEffectGrow(); + } + GuiText resetBtnTxt("Reset", 22, (GXColor){0, 0, 0, 255}); GuiImage resetBtnImg(&btnLargeOutline); GuiImage resetBtnImgOver(&btnLargeOutlineOver); @@ -1386,6 +1437,7 @@ static int MenuGame() w.Append(&titleTxt); w.Append(&saveBtn); w.Append(&loadBtn); + w.Append(&deleteBtn); w.Append(&resetBtn); w.Append(&gameSettingsBtn); @@ -1487,6 +1539,10 @@ static int MenuGame() { menu = MENU_GAME_LOAD; } + else if(deleteBtn.GetState() == STATE_CLICKED) + { + menu = MENU_GAME_DELETE; + } else if(resetBtn.GetState() == STATE_CLICKED) { if (WindowPrompt("Reset Game", "Are you sure that you want to reset this game? Any unsaved progress will be lost.", "OK", "Cancel")) @@ -1603,6 +1659,7 @@ static int MenuGameSaves(int action) int j = 0; SaveList saves; char filepath[1024]; + char deletepath[1024]; char scrfile[1024]; char tmp[MAXJOLIET+1]; struct stat filestat; @@ -1621,6 +1678,8 @@ static int MenuGameSaves(int action) if(action == 0) titleTxt.SetText("Load Game"); + else if (action == 2) + titleTxt.SetText("Delete Saves"); else titleTxt.SetText("Save Game"); @@ -1729,7 +1788,7 @@ static int MenuGameSaves(int action) FreeSaveBuffer(); saves.length = j; - if(saves.length == 0 && action == 0) + if((saves.length == 0 && action == 0) || (saves.length == 0 && action == 2)) { InfoPrompt("No game saves found."); menu = MENU_GAME; @@ -1750,7 +1809,7 @@ static int MenuGameSaves(int action) ret = saveBrowser.GetClickedSave(); - // load or save game + // load, save and delete save games if(ret > -3) { int result = 0; @@ -1769,6 +1828,35 @@ static int MenuGameSaves(int action) } if(result) menu = MENU_EXIT; + } + else if(action == 2) // delete SRAM/Snapshot + { + if (WindowPrompt("Delete File", "Delete this save file? Deleted files can not be restored.", "OK", "Cancel")) + { + MakeFilePath(filepath, saves.type[ret], saves.filename[ret]); + switch(saves.type[ret]) + { + case FILE_SRAM: + strncpy(deletepath, filepath, 1024); + deletepath[strlen(deletepath)-4] = 0; + sprintf(deletepath, "%s.sav", deletepath); + remove(deletepath); // Delete the *.srm file (Battery save file) + break; + case FILE_SNAPSHOT: + strncpy(deletepath, filepath, 1024); + deletepath[strlen(deletepath)-4] = 0; + sprintf(deletepath, "%s.png", deletepath); + remove(deletepath); // Delete the *.png file (Screenshot file) + strncpy(deletepath, filepath, 1024); + deletepath[strlen(deletepath)-4] = 0; + sprintf(deletepath, "%s.sgm", deletepath); + remove(deletepath); // Delete the *.frz file (Save State file) + break; + } + } + menu = MENU_GAME_DELETE; + + } else // save { @@ -4053,6 +4141,9 @@ MainMenu (int menu) case MENU_GAME_SAVE: currentMenu = MenuGameSaves(1); break; + case MENU_GAME_DELETE: + currentMenu = MenuGameSaves(2); + break; case MENU_GAMESETTINGS: currentMenu = MenuGameSettings(); break; diff --git a/source/menu.h b/source/menu.h index fc3cd73e..169cfbb2 100644 --- a/source/menu.h +++ b/source/menu.h @@ -35,6 +35,7 @@ enum MENU_GAME, MENU_GAME_SAVE, MENU_GAME_LOAD, + MENU_GAME_DELETE, MENU_GAMESETTINGS, MENU_GAMESETTINGS_MAPPINGS, MENU_GAMESETTINGS_MAPPINGS_CTRL, From d37fdded054a71fe92bc9c2d585f725071f23d5f Mon Sep 17 00:00:00 2001 From: Askot Date: Sat, 17 Sep 2016 21:28:35 -0700 Subject: [PATCH 2/2] -Fix delete sram/state option --- source/menu.cpp | 37 ++----------------------------------- 1 file changed, 2 insertions(+), 35 deletions(-) diff --git a/source/menu.cpp b/source/menu.cpp index 4cb7a9a5..bc2782e2 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -1290,39 +1290,6 @@ static int MenuGame() deleteBtn.SetTrigger(trigA); deleteBtn.SetTrigger(trig2); deleteBtn.SetEffectGrow(); - - // Boktai adds an extra button for setting the sun. - GuiText *sunBtnTxt = NULL; - GuiImage *sunBtnImg = NULL; - GuiImage *sunBtnImgOver = NULL; - GuiButton *sunBtn = NULL; - if (isBoktai) { - struct tm *newtime; - time_t long_time; - - // regardless of the weather, there should be no sun at night time! - time(&long_time); // Get time as long integer. - newtime = localtime(&long_time); // Convert to local time. - if (newtime->tm_hour > 21 || newtime->tm_hour < 5) - { - sprintf(s, "Weather: Night Time"); - } else sprintf(s, "Weather: %d%% sun", SunBars*10); - sunBtnTxt = new GuiText(s, 22, (GXColor){0, 0, 0, 255}); - sunBtnTxt->SetWrap(true, btnLargeOutline.GetWidth()-30); - sunBtnImg = new GuiImage(&btnLargeOutline); - sunBtnImgOver = new GuiImage(&btnLargeOutlineOver); - sunBtn = new GuiButton(btnLargeOutline.GetWidth(), btnLargeOutline.GetHeight()); - sunBtn->SetAlignment(ALIGN_CENTRE, ALIGN_TOP); - sunBtn->SetPosition(0, 250); - sunBtn->SetLabel(sunBtnTxt); - sunBtn->SetImage(sunBtnImg); - sunBtn->SetImageOver(sunBtnImgOver); - sunBtn->SetSoundOver(&btnSoundOver); - sunBtn->SetSoundClick(&btnSoundClick); - sunBtn->SetTrigger(trigA); - sunBtn->SetTrigger(trig2); - sunBtn->SetEffectGrow(); - } GuiText resetBtnTxt("Reset", 22, (GXColor){0, 0, 0, 255}); GuiImage resetBtnImg(&btnLargeOutline); @@ -1839,7 +1806,7 @@ static int MenuGameSaves(int action) case FILE_SRAM: strncpy(deletepath, filepath, 1024); deletepath[strlen(deletepath)-4] = 0; - sprintf(deletepath, "%s.sav", deletepath); + sprintf(deletepath, "%s.srm", deletepath); remove(deletepath); // Delete the *.srm file (Battery save file) break; case FILE_SNAPSHOT: @@ -1849,7 +1816,7 @@ static int MenuGameSaves(int action) remove(deletepath); // Delete the *.png file (Screenshot file) strncpy(deletepath, filepath, 1024); deletepath[strlen(deletepath)-4] = 0; - sprintf(deletepath, "%s.sgm", deletepath); + sprintf(deletepath, "%s.frz", deletepath); remove(deletepath); // Delete the *.frz file (Save State file) break; }