From 94b9f28648c83c2428de103f92fa7a45eda39059 Mon Sep 17 00:00:00 2001 From: infinitefusion Date: Sat, 19 Nov 2022 16:29:36 -0500 Subject: [PATCH] Multi saves (commented out until future release) --- Data/Map098.rxdata | Bin 58875 -> 58870 bytes Data/MapInfos.rxdata | Bin 37625 -> 37625 bytes Data/Scripts/001_Settings.rb | 2 +- Data/Scripts/050_AddOns/Autosave.rb | 5 +- Data/Scripts/050_AddOns/MultiSaves.rb | 709 ++++++++++++++++++++++++++ Data/System.rxdata | Bin 29383 -> 28341 bytes Data/Tilesets.rxdata | Bin 342437 -> 342137 bytes 7 files changed, 713 insertions(+), 3 deletions(-) create mode 100644 Data/Scripts/050_AddOns/MultiSaves.rb diff --git a/Data/Map098.rxdata b/Data/Map098.rxdata index d36e12240a4b5da405234417142f0dbb313de8ee..cd71d88ffa7ec33912a2a922093bb95d1724b6a8 100644 GIT binary patch literal 58870 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≪tc>zY#IM0d&1|0&yDExi;dkP^)TgA?14#c>p>YS9yIU>a+RlnIbLd{0XJ2A z&x{!#&dP|PdT7UtUAB1)mWr~?94|G>HfmpC03OqdQNM`l;;B&Kee1xzmf8;6ec+c) z;2RL?c8FNwPHV%k^W4e9a0%`f+{j}ixb#8A!;Wa=`xbI{*J7s@@45iAIP8du+2ciU zu#tVWv`+X1a}9TFlhdW4d3L=#veD~(^;O*D?*^) zBjyJ*{68`0g3IYwm5gcKg;@;F_p2x?25>iVh|%@IR1C$?*-8OEC1jgAgkUxkA)G@j zQ(E)XTc+-lWOq}Cw@eM`-G#GboPf;-WQEiPHfyKq$UURAWsXmUpu44J657j32wZH< zEik1UXD2v8wDX~7R>8sM#HE<1BLH$Sv0#BZ-GkIpqzA1$tjY2N+B7A-2DCK^#2n7ll*9~>6JflZ z1LI}7I@?8ZA1R4AuR5s(F~!%NrF8o2uobFsoid?nu`Ca^*y_f7C``n`^{TURPko|5 z`9vHLv5qY1rlm`|R^=yLH*KsX5u)Xs6zqiy`$pNFnh;}J2k~F{qiU4Kn9#2R9>UG= zagjdQ;5n_#PxSU}+HhXy(o<PQGJtmnLw$l{K0>0eF2dJoWCGSkMpkL?ZMX7^ z7N695%vStQ8dQsb(D#AIt%V?xKzg5X3((WYN-Lu0ATqJLVG~(;>dLKM+|;Mco-Dep zSJ^&b!^~p4R2*jR5LPz5sy1Hw;H!X#8aP7~FGI&X&gwfr2AraT*tK}UKo;oZKfa*M z?izg`IDh?`)xGD@G05WM<|rg~3eRR(VB{~DD=p3KyBIPo0w> zLtRVJ6N6e+22!1%O12SoxF-X*!m6W#vrf;$z^scR6=#ed2IhM$4s)N=TA+sH|CBgP zH^wdFFkWz#i=>`v5pB9^r&f(R)a(X>=JLQ3v8E}4r7r$BT zDji&0G0QOU)CC=003ALRcOT_c?!mTY%z?GY?VAY!a3FYP?;AtQX=Zthdrxmnc`a@N z=%&T#$BoNKUvvthD+WIlv`{_X!cA>k%1V06=n2er zmeR5Am^7MMTb@t2SmYjrIHUsDFe|&!BZgnq#WfzstKf&_e6wtWKTp5xX%4^anyGfo zP9?U=nx2)JwhR3s=$xGg*b3uD(wszS+j1B;UjT`F4@g}2qmqe zjZ>Es)tNS%*%XF{DT=%sY`ue%ygQYa_#~%~-RQi-jf0Q|Gu2ib4gOnh8q|lIY7*nb z%xkP(@Zfuvd?|fqd<2nn3Hp~70!eY>pw>jVXK=K@4Iv-KF%um}PJt$r1FVd$xevo?w6Ms_yPsqQ!;j>}dL;m+mVVxSR%t%$Ou#{*zs8SOv_v0!<;T1muLwXdFZ|G!9u7Pb zc+_b3vtfGRT?zsHrElObPhEGokXP{7<-deGc0(y&kMsQTz!QPJ93I#c6b|~!?$iPg z{}!Gzcpf(Kz(3;+4?aahZ(Bh35>O$6fK@ga;{z2c@FDM!Y_h@F0YExKmMw zu6}r~@zeeWk7+zc?>X%~-U%M_M1U{XOInZFA2?v4kQGalfrs{2?=}5D_TK$YCEQGo zUf1~d1@?1C3*dwH-g<|BsvK^v@pt%Nsc1>k@ve`0D|Y!SC;#$yt>>Q!ALkGH-{&|g zLxZ|ehlKv$S~I&sc&z;5<8E?TkVS3d^ z@j8QGiebch#(0Ku63;jL16az#V||;ysupuP<@h(<&)qr6T8h%N5GXp15{%Bn1<$U) zrH*6wQFuU0>DupL=Fo^vUWIr(R*;Gyj@ou!|l#-axsNwveHOM>#F9_0WXUuK`UE*W{*h*A;9*Czs>v>g9LxSPUXd6ZFj=o|K5qzFAwlX)Ge!{qY1 zT6n0OX1^3J9&hFKCc@KUXs;P2JhYz4!n3bqe@(}M4upsHKU6n7OmkQ@$ZH+1*L1w$ z3J=8>t=mi2JLfx$^Xw!->t2* zmbxhQ=GIUFzo+BL=d-_sa7CJYzR!jsRyB!#4EMEE^2Kln+UEbY z!F31x?F?K|H#|tG^6-4oi0H6BpB=(uPk2XwM&R_{ses3hbH2a&`JS*(^os$J_4#1J z!;cgvELgH991_D~lAN=ZH+gQrbw7ds4kJr?~%l=2U@KgZ0Kkl_lCnN2$bpP9sn z*WsBd9Vg9_V$y8scxg;h0iMqoH2fQ5?CRG~MxTm49o-k*A3YG=5%BriOn5$SL~|zs zJE5HR#)@q5t&vu|t_~WMeUCNlbKz*dZ~Qrv3m92=G{COu z*`p0i@9XgJ@AKzwR>Yq0lMPQ9$Ne?H#n;Qu*GEPpdm9+1l!M0&8lUg)P27IWLu;|t zDxGyTR|`*N8;fc!uQop-q=Z3XNEjBpp78lrnD9`GO~((j6euMt+gO$08530DVqu$* zCh&|#*26*n&mg4u0gKJ@@7pckX}P}jyRBD*_qP42?bmJYw6eTnXm!5qMv-3KDCUGq zguGA?iUgkZ7Ku!s>S{&^k$>#)+}QGimYZ5{26zs%J=6A^I^p?|3D1wj9m0gLQ`jY3 zS_YmKp70>Vx3%65@VwOaa@%j)D%+rL^t#K0=PvOw;p4*P!Y71J8uX$#vHp7D2cNp9 z^QGjggF_*J`I#0~x}@q^z#X zK4uyJy8Ny*=J$m6HSD(?_c!P=#tsLTHId)!0 z3R74RQXb1ncqBY(+5*htay#Sc;e>}`--!!^(v8#Hp48!SyW=cFeq@A%8vHyv>$zFq3SSHLzBFrZkv^ujx>rBaL7qw+MU28R?H`m4W# z7{L;2{Z2eL#^`(O*A4D!FwAPOo*@k0eZ4I9@z~|DPsBbMyCU|#U7*3b^tWlBXoJiJy_Gp2$ zP+9~ri(3EPCfzRmSh_>HQ@Ts~cjJAGSWfoeQ{vO&K5@TzKzv60jo2kEk-DX&Rls+T zbgy)u^b_f)(*4rUrVyUz#OK8q#23Yv#Fxe2iYug*QbI~rgr}|P0qH^MA?ac15$RFs zKc*0#SHxGv*TmPwH^eu^x5OT)SL%~iRRPaq(l4Z6N{>rVNPDGUO(8sQi|>ek5dSE? zEB;CRv$#fDE4^Pjw+eWkl%A5Fmi9^er32D4QwWb=3P{ID?~@v&pwuXBl>S0GU)od! zJkLtcNzY3!NH0n+NiRCnGV<}@HHFR-kTPPjEQS(6b z!RSNLhog@~AB|$X-T7}S##g&E*AhRSD-D|P{$$Ra_2(+v)_40KCVnyWjnU)Lh9@F%z|aZOiPA~ZJm7;nn-4_x8FgP4`grK_ z&?iEl4En+ND9p_0tElZfam#XFPQLP+q8W0aL^i@@cgR*4}F6Ddf#EsO!iEN zN9P{BuK(`|kM|u4#Tk(^Oy2u_%iAsQ0A9~EM&bs?h@@}vzX%UI@XphpB6qNeAY9T;hQ8pUl#vPyh^;99A6RX)mK~~`&;32!j;13g)azS6u#tu z=N{o+;XdIf!cT?!g`WvOciiWDR_^>7@vGw3#IKX%T9IB|>jKZ0g})Q760R1$BK*DZ z503U85FQjB5*`*F5grx(L-K;x%;Th*LjFMe12o_GT}zAw_N?~6_ue2wr`;cLRzg=>X>6u#lW z&y&Ja!qdV&VZU%dct-e*fU#VRpH>3{|IAI|&EhTM56N+>NUv@coig~Jg>MS~B794@ zPWZO)9S1zm3eO483oi&S3NHyS3%?Z*7L1?rZB=uAn|QnUWAP4h+$qwlJ6-tadf~gm z_kR)+P2nv8Vfm+)duxX09`RoBKJh2y_^C**e(D0x zO~TE>Ey53lTZJD9|K@<__rlx4JHj7?KML;(e-i#IU@RBor`6!3zGp@ww+lZO?hx)2 z?h^jp0gqdq|4N{t@l)Ot>-KatW#?3-eOOH|TkHV6yt%!ly%plQQ}GYA;oRxf*0h>H ze^L0u;jIu)*##L}-yti|OI*I2TV3U(u-o(1m7Nz_7g`Sx(Kr=buX{xWc-*D%-Tvy@ z^?GU`^nuU^0Uj2o@_N!<&ZMyY4qn@NfL=R)S3&EmLoZJ|Cv_MLSHh$)*kPVjqI}?8)25J4 zqs?`|z-qnQ&!lj<2*~-dO|b!w*p6NsqY_f3Fu?u4tm4Rq7G}7DA zWn?+5P51wqcOMm>E!!dOAVKCIPr>~)>7ZmXOCjwCCC8JpkZnkH-W~NAY zSJR&)LyY|7#oZNFQCSsrv%Bs`L05Nm7ZhC(Tz;Z_cToreNszxkKta)W&aJvtx9V2) zZzdmfQVd;ntLol!&pG#;bI&>V)`=mlxA}t2=k@k(Naosl!+pbJ8Lf9FDd{hzRBcdA zE1}*QeLJ;uDWjWJZav*sSfi;|m!rD-WcTBRk~N`dm>47b?-NAjwNg=`^xOcby8sJ9i8c$rSZd&`G10NjmzYHmQ`n*A zatP@lU@ouZlw@(Jx4EyFSI5Sbyc$Lbib`&KGOK3bnOS;!qj}|$l9C;nP($$WSU#B> zS4Xtoc|2;*)9=lI$Fy8>L@iFJ{@+72BjZ4{5un+2!e&0WpGy|uItySy`@oLaWu%?i zWwjBY0Z_9k${916dd3N!XZ9u2yOI-y?SP@8mO~8fN~U+{@DEXZ6>^G_BCr?70e55L zgNbmweN(BJ(zN{f>ezU(x3OD1>W+TWv6guKBL5EJcHK=OyCCkmgf_nVV@wZk%(#up(QbUFd+iRCnNxA&S2ss zsBrFJA_iCU1`{X4k35)|Z*&pRVs;U_GMG4ZC~+D*vT!i5NDUHSg)_c}HS}Iw$cCRZ6T>W%YCy5&#Mb z34-yHO<}bmnJvH|xhT7Fle}i*&;=J7xVYGX8{d@m(>J+(E?WuxoDKb)5B)q{jTrre zz5%PXZKHh*sexSq@<*xr0j@{LnDP+q*bpV4|4?Gi5J$nlsuL;@(Cipc$40}JfvwxO zB-ON*XNcKk64Rt4Gg^Q}2&pLWJo*E>18!he!DuF&HXy5Fw5EdIjTP$YK!G?=Afm2t z;j|_Le4xS}paT2_4ZfmOfIGY44*a>?*$a2z&*hFmQquwuD2ECsJy`KlYKTT~jdLL#a9ta~H16ranlnALRAZ~Ucr-7*hR*aI&_hGo}^gq+C#vV*rDelXJ;J zVLom8qm)5|ahZj31weTLA)c)4Rz~RK45W$v{Mh(>m@p-avRWX}WQdI`!xUp2A)0>< zKwi|+DZLlFl!fUu58tX>azgJF&cM=1u#)G?L(n&b6KgJD4Pf!hFx|>e>>5|{iW~Sf zAbHhBKuKmo&gC^QxHC)Tjhd`w6?sf47T|>RWs8ZgQZ}ssBs^k)022#$!fQ|)62l#_ z!02G|8QlK^I$+dRqewGKbQ8PLD78#%I!ai13`5WyCG(hbPdObB{7^C4-K^#ah!KoC3D1Z zq^TKz{Kgg-IdG|hzt%e!HGx4 zm2{5hcreBc^9gB&+J>5G^xCvPO)DA9Yd8B7&E$$xolu=q07hM$O1ZyQS+jC=GFJro z)+y^kq?p{HkRdm!VHx3}}O%^jv&S>5x52$Bt{%# zWkd|S0Desgyo5PttET5cQp=glQ=XPh;BWaxq3@q^Exp0D^s_FdhIRICu+Cc6>;}Pi zE;xc%qYV5wx*eys8=bb)5}gcEsY0bpP+j177CLNNfh~g?7#q9f4GOel+HhstF{YNz zcIdS!&CDqQ$Uiq}R>f?3QnIXV+iC+{?y3-cOD1o4Q~Ev^I;l>hpk~eUP9m|;L|Rw? zF$K~kyHm}Mpe32iPJqr?+KE;qxrr(Vyq{oNj=c+M&CMV-w=NpG{{%gL}6Qn7TaiIVul_}$b91}Kzzlb+rtClI2 zJBd=>lpwWCjApJajf47!*~U3wuFp5%rVI-(8j_jyVJu-rB9+D{(djuanMLLe@39+q zL0ezo6xY(zTuT?ZmM(EARjKBu5}8Wb%F^6&@~~6v>crE48z_>2btfn|?XM*8`yKD{ z6bqvBe3r^8N_L_{&w~($n5E8Q2<4c2fNS1VIF{2OFyzvszQB82OaIKZ^u4a77rB&j zYP2RFz&l~~i$<-s112eGhOR?NjdO%i5ZJPk#h4DrbK(Lp9>n>lV@w3&?dHVCGFJnp zP_7B4MVrQ9#!PHtobV?zXcmK~YYdI=6fudE(6~-{LzQ0(6fB#&O7wlM}luKA9Dt&JnfzGPEga> zsnH2)1ZP0rIHDRJK1$EvMtShe$VQFe89v(XZtzlKU;{%-ZECmSrKF*yO$PLhsMNVw zB~=8hQowU>(SIw?4xqTd?NZ9|gk!wv*#i&;UMw5T6JWe+OSV9KcRm>E)b9raJOd-n zHrM5~;G4XrcGm*cDY{4aep!fw;IL`uverqB=c1>jc_I%jT@P zOTFmbD=12*<@iBYaZ-j1AMlk!2elFKB&TGRdUJQGDjjFkXbi^RrKk0POK=M~n8)SO zyq1x1_5?Z?CrL?k5f>pP1!_v>l_c1oa1)$Rv?^AcF4RVgO4b;oWNNfaO{dc8D7fiM z`JKu{fx33sw`wJ3|2ojV>4FB%s9a9Tg5zD2hjnLI8m)sJ;GD|JS*1`UlRgAm8^uW) zz)zvJ5OB7cQ!oO-0qErhEnUnjFyC7TwWd{Yxx=&$Fbn^o?TvH133O>v8Zy>Ia}xTW zcegZZ?PcG(QF#dBN3s!v7}FG>23R~P$dxMPhfO$%byUHDdKUB`yF*S6V-SJ#B7?p+ z1B2*=#a^KmQ-m%~O$QSF04xSVuuZ7m@ii;28G3fuvXHpT!%vv_-O>Zw4K;(U?-g* zz_Z|Q1#TYKa>{(!a3O);!QeKlQAmR;s3~}T9mbRj%X8j2dgTVFlv*Po~*j7bYAVm)#>dWM%l}GLQ<}!qpqdnuB8{dmZn`xv#zB% zzSL*HTFx6o5!}oml|^tRM6!loy-58q4?0*N*SeN|#I^J~*V2!>mR|2#`boaj6Md%V zi1*;afzXhGp&?Xa!^so~n2{ue*V1yq=+Vs4pSLpb(oum?XB1C zY)*A-{bX}dtPTP;*mRVZ!ib7_zl9=9cTO>qGP+fmT9KqpeY%4aGm?yHpyBlOka4P{ zm*$4o6_v~YX!u2&2k^Ae+dFuE|AsZ2&+i{vv)JglHT`IWq)2n(>fggn06C28@_RVq zhpJ7#vta~s?=}rz3}#mWXy0fgQZ}2pcPwg{=pu}D$3)c$rJ3)5>`$}n^x3SC$LT@chxM;C&?cHo~g z*v=McHRmU;QTAW+%D@`|aQDGzIVjCYFdg@FDoaxaANscASTZMF^TEyJs8kq)~>W| z1F>1VF6!SxO)SVcgq%b&GbK(S>Qu@q$^0+#6KQ@m6dru!~Df!9&;8>9Qv# zd(SFX{97W{6#s_jz6(9~Xj7~J8V1#N2Mu|X$RqCHVHuV0f@u~xXC3b9frZ^^7M%=T zz~Do>I@i$!=#n9MkKm$!z)dF_qRN)r`DMPevPiRH1*{XF4XLx`;FR}B;rce;I82Fe z<4Zk3auGcqJ|rh&u3~gRL$PoW?k-_ z&rY_CfxB!u^d1)moD98RsK#x*Z`%gG7+v_5GY8PO;J3_yYV{*|&29={5o-$gzYXdU zZ30w}!5)lD1*JHoWO7@`n)FTCMe+VP?~JNAUQTkK9+ubt^(I9aBCs1> zItyUD%!ctYTRp=uUMye8OcF6TQ+6LUZ3b^$Q zTq?&nm2`6jq<~?nR$hW_m?5U?-+S#fEYvRFF?SbD)bc1Ta=MeIzzsa@QPMXguuW- zn$Uuai}i$-v@!;Jr6j@gLDLi{=U6`en$Xa<6?i8<27AF=s(@!T2YaaCRy1U3D>z=X z>qj?Bjr{p!TsTPX=to$e1cu|{_U^(YKuoN8f@X~1`1&HL^VHOYU?F6}08cMLF zF2Stz=<>O0iXW=;==j3dAj6g{%)~XG6hcd$G;V8*hb~kK@y3lB1g3TSdxycq;F9kP zoI$+~f$RL$FgMPvtiXFP4!d=cbynsQe^_w^YhFSAz+{P}^x8!0$1-ISONp@*qD}g@?f*UkEEJqtN zP@IIVtU577OV+>+o6G;{x@fW@+R?ROJPK5@7R{E(Rt5x%W-21>7VQOIlZn#DDM@IF z%bLPVECbyp5-YBcE~DR9+C-vzj)yT@T4pc}3D%AH35gJPbG~2B;v#5ZlE}OI$2B94 z0me@e(&aD-6xkipLQ!*p3WF>;}Gsh*lUFEs*T%dYoo<{Y;FDG; zYzN#G3O-?}{Yh|<>F&fjkguExl-6qYVGqqSb;h`*c}!!R`ZF=0g{!FM!nCqOg&8a} z=dZL6Bpp=VL&)-Tvhl;(ZqY zGJtb|WPgEM!i*4{ehN%`71+9VAUOsJo_|_`2_o!2x~O+U|HdurHf>zL=EBAAI=kE8 zI?H^BU$l86*x&^vkBeH+Vm5Y@l-Da0I9X+d5S!u>9?*7m!)6ZeHJ&k}cft7VA*cp7 z7nNbJB;x9JTBQ1_a;(~nNt6pE;e%%VR-A2;*)vu}?nywT)C``O8AqVGJHVQTKgv~9 zbJJ^Y#)s{uMBMZa<&-)!5%)RY^{B%V*yaJtU`ckVHo zibk~wV4aa_OcO$H8AhrXsbE~&#M*J08CPv6oQx3~R1QvO#U0D6xZ^02zkCI-JZ8pW zLg+Gesg31z@4XeBtRV|+U;{XEk~?9u7~CKoHn&!Hg1SLxehT(0JR=2{FtNvNU^asj zIZgJ_Bl~pAJzYy>Lk&@@F&OW<5N4sUZVQv>ir~s2yRm7V@Cy!M+~-eDmqzkQXvN&1 z&2EqBwvr4jr_tx{BdzkcY%gAzZ z-!I3UH%y%w0O~ANVHGwJNVwc7SfMnznrP>Jw>Ws!!By z?!@x2u#T8gFsvvVBRTH#EdCokj40-$EoG3VIS~9foCuuy|X`;)a}{uVFQzo)Hh*2IP{k_W;?Z7Xp&7%pK#(hWNKs|7>*k z5|=G(;E;v5s=^0are0~dYx35Ct^FFLn1DB&QQ=n3x{C^5hRHN@4Ux1!oo7Sw@#88v zmmdfa%NgWLsY>A{vGvS7ZF$I(oO{~8o?*^BsjCF1cIYa>6zqBGOq*snJ}jwksWajD zgSDh|B)@Gm!-u?C|A<;s$BAa>M%Uu0Fka4s@iJ2d^}<+EIw>nVax9D8=47g<)ylhZ z0vFqzOsvo~Y<3VYnc zpfyNtQU3(fLVfaRB~l8f*?)^49$Va?Q$Sz_ZDpbYe^DDK-_MlQLo|&l;TA=P*mW@uQig5!hG+GJW&#`A7JY zrz2k+w{9CQ!5)5~c4-=~HI1#I*&fj5WY@eRXmu@{#%hm6$%i_2_CH1O^V zHm+UMe?Gqgtk&&_yaY^ri&1b{?Aw12qAu!4odaZQ!A-UanSeATvj8F?T+pFuS$Eg! z{DkXwBFbeUq6Nw(`n8;wgilYwmeo$qhQRs;2&}^&wNq(e9bNMd7wH0<)3W zA4l{<d&Im829Ga84-a~P@ngA5)U#Z8oKAy4(X9eS2Y*gQ z7gGI)@IPlcz2=uISvHQ%e_OG)Frusf9=7YIrpqzXjNijv3>`j8ZFTAJALK?rUqER= zrZ{E_`rAG+%HZK{^tvnolHw*nt?C>Xk{)X>@QA&945VUIB2)+gmTw{W5SoovL=( z#*=PUm@=&vrxtvn9CrPrJ5R_Ou0RFvE_^wr(uaY|Z<5ltS<&DF#$*Fhk_(+ATh`+~ zqTnxv|3RWOe)uJsC*Nqn4`skob$u&PLord0QZT-xl!b)sVkrx2f7$QFkk4=ETXI<7 zR+C;`uTXTKK;X{Ukgk3PsMDqJcP2!}yWqDQ{@7WB;aaJSOpEPgB0IOjxAdltUcKJ* z!f)u<=wna=Xu(lxF7q`XmO9kdu&r&^v#C9%!{APJ&w(#LAvP)Gw9m^B$u!Zae~AY6 zMHp*cy={H)ITr;Mn8P>D)CIlazTvR~6NmPpW4X7ZFIj@G-=vch+lR+8L%or{RI-=^ zU+55glR*hQvh@TI?Q7w0IsD=IQ>XiUKbtu^t;8ouY|E~#@*4eS-+>rl^l^^qNydnU-yzoO?dN}Y%;8CO9Ys2)w zyA%TYOW(j>mb&h6A+O-E$A1ZP?1fUc9{&9Cz!QN33?8f}C>-?Hx>E~0>|1zl!Sk?* z2lg3nc;#P z7QhGXz5NdRR5{%2_jmYzUeS`I<6R&1cI>iOJpZzH?dR8oPx1%-Cvrz+XizumkkJ3z zYqqWs9y`DAJY1|G^oUcc7J+S|bD5lf@s8Ee7uF#WOOdnroOLZHYUB^aH@3Z6ZI_jAYIX?Q?O z>Duo|&+gsI}iB}k)zr-%i)J@N5>WIHG8N0ImL0cZ&nLW`BtayE`{IX zfNFa(budiVG>w623`}F-SYQCcs5SjN5V0O-&#lsa2-9UkWwtQ+##db!n@Yf6iWK*{%&ohwbVtaM}I#Z z2{na{qqbJPpDs@==X*Myd_Lz}2v?-Z=esrxv8qY@vv6NaC7%d~pl$YF8(eq5-=%@8 z>xKs@RUV#C7!e(-&*z5l*caX%pb!WbVxI$ zSyEIIq}kG6NJ+`(v*2kH+r;O zywb<+BMtTg@pE@G`|Q2O)d7x@&qbe)z7Tye`cm{|0uSPd;)O;otA}S__yN+wm`!)O z!!r+c8VAqMqCb!RBKphdtI^k@mj@6hRzK>2=P|AYpU)j0Y=?)(=R-KHe+ZLBDIKC( z@Z$x~1I-Vb6nn7wAy0Z)kg#VuR0tU!S60nG`@(MUxM4wW&HD}ujec&&TXp<=B;jEp z+#CK}RT_2b;n^GhfO%xX;nqkiURMVV%D%@M4!UqO+c);yk_#AFcr;*L)3Zk#EWNM8 z!@kd+yIB$Y!cR3kZ5;R402f=Yb-pn&7CF#haY{LO+@SIKK5OFkG7qg~wN~k@tGQZu zD%)68Yk9T#7eZ1P7Dj}W;Pr&hx6*`%T5LLgEK7k>va*d;37&C56)qNb2x$V(SY#s{ z^#2xw6hC0G+5Ua0<;yK!Y5i*J)!_qePqzKI&7D@ZR}8JrmVI5MS6>%%!X-jpCrcZS>BZSC5PI$iF@}Dg?x84Hq9BzBI?I(4@^DPseZ;88w3E@&%>g<+fMae%e;q26dy?cTIS{D_$;KAzUe3C4A7J7sZMF*9$-R)ZMN306ed? zz25e#I^ntBgvUD5+jpmz&sPqfe{1=>maD^Wwf(N`_jST!?>l?7F>)Kh6I({l-S~&z zyE@#^9&B%Hua91|mfC*H!J}K0IO;2pc(hXWQ9NdhWE{PAJFObX5FSg)>bmSQ+xXYz zccn4EFMP1!kmI<&L6j_^32w~zno;Bofp1L68Kh#Nfix>46x!VcRb zs$IP1VeGT~xf?t#Pq|7|{yBt&@|qh3ofPG-58LRK31`C^M?Y`;P|c_7yz9dh7KD_= zvJxH*kD0cBWpTNkvGm~Kq1fkffl#_}n%k2)JZ^XRGW2)SQXU?*$Mh-sTRl8hz1W(5 z&|1p<-Wa|q{3W25jujSC{;lhv-fHmk+}!8q-WdKo)cf+>1CgK3r8QYtpe6h-LV*6Q za#*2n;WI3cuvT|DD%1C=|B_z2{ZcePR6Sxj*&Z#HmPn^V%%awR zw@J54-;wT+?v%bO{g3fJMl2`$?`iQF@t}A}JS;vd{zUAOx}_dzSrzczE!`vCE8Qo3 zPr6_F{uILVy!e9nqWF^dviOSlQ*ouVO6rvo72#=XdO&(mdPsU$dPI6u`rj#p=jY-t z#9xZ9im!>Ui@y^4q<(2YT3rP^k4Zn2ek46EJs};Co}5B>-Vomue-FH5gXAv|Fz0ztJIQnS<|wMu^`T`0X*qOp|mkQ%x;v?G)b;i!2a`e5{-=)=)R zqK`%~-p>DRk>8m! zXZ^X#w)I{9hlyVdePi@^wBdbgFckv=I2<&gR3BgGSw#hpq@+8M-R;!O%ao z{BsKn&npC;+Zt|f_zsDMG&BX9e(QjUect^X{dDLXr3d=74{^2ZGh6;p=r2Qm75eMY zhePOhx5|CK*KPQ5Z>@4E!o&Ir5gz@maT2B6LH_?Y20YKqI5>mWiGFulPRl0$>x2j9 zs0KVa0!g9yC4k^>4R~Id@uCS2woS_?4+pJ*hv&Zxc<2+>ulF76naQ5%@aWv5*Y)3? z@Oa;$P@Ek(+vL4px4hBvCg63wF%ma%Ba*(w{vtfqfp_lmgvYvbbHgnS-{79JU?DBE z`db67Y+KcxJH3*Jxpw$^^!O=XZY!x19$Lpo#E**Ci60}!$IWO8z03Z7NccN75oeMI=EaGmfm;p4(5gzGtY?iTJ5?iKD6 zz9-x-d|&thcc1N9x%2(v-;4hs{v$a)FVd^eyTJ2F;Zwq=g&Ty=2%i-`$F=u>@SyOJ z@UZZR@Tl;=!v6_QIbIG1_TImWUl6}2-bjv{M0$0T$jV^-`SS2QCj3zNk?^?igm6H3 zQuwhzS>B2u>5xy$?yYL^v*MzSN z|H;AgGvVjLFN9wTuL`dTuM58t5SD*wxu<4$?iTM6?-lPO$M-~f^*tAOZWeA4z9D>5 zxK;R;@NEvBUkh&tZwkK=ek;5s{7(42fU#VRpH_pD`kon!+%9}axI?&8_^$9j96WAy z{uhCU#!p#KtlQJol$}?V_OWVu#byWS<<0Fa?X3{cor-^`4HwL;wx%@%`uBzZJiHy^ zDSIGe>&s*XdWp$*bE~VI6n1;Qy0Y^_8$ufaA{wW%*6Utf0UmcLe3!qvcDw#6=ry{`;JlcAB`jxHn1VTHnz zj19*|VyT!?1|IsX^LHvFvAxdmm>Rn{wj-8~Wn$SnAhOps`Kw&)l2|@gh!ta{*v{hs zp53vD*rl;OvG>RJ#y${pi=R%u&$ZNWIfE0g_-QTmO+P!0foTjJ4Gh?K{Vfdk&gdIg t)UolRx~g|ppOPKXO4%ZOhp For instance, just change the menu text to "Quit to Title" and change `$scene = nil` to `$scene = pbCallTitle`. +# # Call Game.auto_save whenever you want. +# # -> Autosaving during an event script will correctly resume event execution when you load the game. +# # -> I haven't investigated if it might be possible to autosave on closing the window with the X or Alt-F4 yet. +# # You can rename the slots to your liking, or change how many there are. +# # In some cases, you might want to remove the option to save to a different slot than the one you loaded from. +# +# # Notes: +# # On the first Load, the old Game.rxdata will be copied to the first slot in MANUAL_SLOTS. It won't have a known save time though. +# # The interface to `Game.save` has been changed. +# # Due to the slots, alters the save backup system in the case of save corruption/crashes - backups will be named Backup000.rxdata and so on. +# # Heavily modifies the SaveData module and Save and Load screens. This may cause incompatibility with some other plugins or custom game code. +# # Not everything here has been tested extensively, only what applies to normal usage of my game. Please let me know if you run into any problems. +# +# # Future development ideas: +# # There isn't currently support for unlimited slots but it wouldn't be too hard. +# # Letting the user name their slots seems cool. +# # It would be nice if there was a sliding animation for switching files on that load screen. :) +# # It would be nice if the file select arrows used nicer animated graphics, kind of like the Bag. +# # Maybe auto-save slots should act like a queue instead of cycling around. +# +# # Autosave every 30 steps +# # Events.onStepTaken += proc { +# # $Trainer.autosave_steps = 0 if !$Trainer.autosave_steps +# # $Trainer.autosave_steps += 1 +# # if $Trainer.autosave_steps >= 30 +# # echo("Autosaving...") +# # $Trainer.autosave_steps = 0 +# # Game.auto_save +# # echoln("done.") +# # end +# # } +# +# #=============================================================================== +# # +# #=============================================================================== +# module SaveData +# # You can rename these slots or change the amount of them +# # They change the actual save file names though, so it would take some extra work to use the translation system on them. +# AUTO_SLOTS = [ +# 'Auto 1', +# 'Auto 2' +# ] +# MANUAL_SLOTS = [ +# 'File A', +# 'File B', +# 'File C', +# 'File D', +# 'File E', +# 'File F', +# 'File G', +# 'File H' +# ] +# +# # For compatibility with games saved without this plugin +# OLD_SAVE_SLOT = 'Game' +# +# SAVE_DIR = if File.directory?(System.data_directory) +# System.data_directory +# else +# '.' +# end +# +# def self.each_slot +# (AUTO_SLOTS + MANUAL_SLOTS).each { |f| yield f } +# end +# +# def self.get_full_path(file) +# return "#{SAVE_DIR}/#{file}.rxdata" +# end +# +# def self.get_backup_file_path +# backup_file = "Backup000" +# while File.file?(self.get_full_path(backup_file)) +# backup_file.next! +# end +# return self.get_full_path(backup_file) +# end +# +# # Given a list of save file names and a file name in it, return the next file after it which exists +# # If no other file exists, will just return the same file again +# def self.get_next_slot(file_list, file) +# old_index = file_list.find_index(file) +# ordered_list = file_list.rotate(old_index + 1) +# ordered_list.each do |f| +# return f if File.file?(self.get_full_path(f)) +# end +# # should never reach here since the original file should always exist +# return file +# end +# # See self.get_next_slot +# def self.get_prev_slot(file_list, file) +# return self.get_next_slot(file_list.reverse, file) +# end +# +# # Returns nil if there are no saves +# # Returns the first save if there's a tie for newest +# # Old saves from previous version don't store their saved time, so are treated as very old +# def self.get_newest_save_slot +# newest_time = Time.at(0) # the Epoch +# newest_slot = nil +# self.each_slot do |file_slot| +# full_path = self.get_full_path(file_slot) +# next if !File.file?(full_path) +# temp_save_data = self.read_from_file(full_path) +# save_time = temp_save_data[:player].last_time_saved || Time.at(1) +# if save_time > newest_time +# newest_time = save_time +# newest_slot = file_slot +# end +# end +# # Port old save +# if newest_slot.nil? && File.file?(self.get_full_path(OLD_SAVE_SLOT)) +# file_copy(self.get_full_path(OLD_SAVE_SLOT), self.get_full_path(MANUAL_SLOTS[0])) +# return MANUAL_SLOTS[0] +# end +# return newest_slot +# end +# +# # @return [Boolean] whether any save file exists +# def self.exists? +# self.each_slot do |slot| +# full_path = SaveData.get_full_path(slot) +# return true if File.file?(full_path) +# end +# return false +# end +# +# # This is used in a hidden function (ctrl+down+cancel on title screen) or if the save file is corrupt +# # Pass nil to delete everything, or a file path to just delete that one +# # @raise [Error::ENOENT] +# def self.delete_file(file_path=nil) +# if file_path +# File.delete(file_path) if File.file?(file_path) +# else +# self.each_slot do |slot| +# full_path = self.get_full_path(slot) +# File.delete(full_path) if File.file?(full_path) +# end +# end +# end +# +# # Moves a save file from the old Saved Games folder to the new +# # location specified by {MANUAL_SLOTS[0]}. Does nothing if a save file +# # already exists in {MANUAL_SLOTS[0]}. +# def self.move_old_windows_save +# return if self.exists? +# game_title = System.game_title.gsub(/[^\w ]/, '_') +# home = ENV['HOME'] || ENV['HOMEPATH'] +# return if home.nil? +# old_location = File.join(home, 'Saved Games', game_title) +# return unless File.directory?(old_location) +# old_file = File.join(old_location, 'Game.rxdata') +# return unless File.file?(old_file) +# File.move(old_file, MANUAL_SLOTS[0]) +# end +# +# # Runs all possible conversions on the given save data. +# # Saves a backup before running conversions. +# # @param save_data [Hash] save data to run conversions on +# # @return [Boolean] whether conversions were run +# def self.run_conversions(save_data) +# validate save_data => Hash +# conversions_to_run = self.get_conversions(save_data) +# return false if conversions_to_run.none? +# File.open(SaveData.get_backup_file_path, 'wb') { |f| Marshal.dump(save_data, f) } +# echoln "Backed up save to #{SaveData.get_backup_file_path}" +# echoln "Running #{conversions_to_run.length} conversions..." +# conversions_to_run.each do |conversion| +# echo "#{conversion.title}..." +# conversion.run(save_data) +# echoln ' done.' +# end +# echoln '' if conversions_to_run.length > 0 +# save_data[:essentials_version] = Essentials::VERSION +# save_data[:game_version] = Settings::GAME_VERSION +# return true +# end +# end +# +# #=============================================================================== +# # +# #=============================================================================== +# class PokemonLoad_Scene +# def pbChoose(commands, continue_idx) +# @sprites["cmdwindow"].commands = commands +# loop do +# Graphics.update +# Input.update +# pbUpdate +# if Input.trigger?(Input::USE) +# return @sprites["cmdwindow"].index +# elsif @sprites["cmdwindow"].index == continue_idx +# @sprites["leftarrow"].visible=true +# @sprites["rightarrow"].visible=true +# if Input.trigger?(Input::LEFT) +# return -3 +# elsif Input.trigger?(Input::RIGHT) +# return -2 +# end +# else +# @sprites["leftarrow"].visible=false +# @sprites["rightarrow"].visible=false +# end +# end +# end +# +# def pbStartScene(commands, show_continue, trainer, frame_count, map_id) +# @commands = commands +# @sprites = {} +# @viewport = Viewport.new(0, 0, Graphics.width, Graphics.height) +# @viewport.z = 99998 +# addBackgroundOrColoredPlane(@sprites,"background","loadbg",Color.new(248,248,248),@viewport) +# +# @sprites["leftarrow"] = AnimatedSprite.new("Graphics/Pictures/leftarrow",8,40,28,2,@viewport) +# @sprites["leftarrow"].x=10 +# @sprites["leftarrow"].y=140 +# @sprites["leftarrow"].play +# +# #@sprites["leftarrow"].visible=true +# +# @sprites["rightarrow"] = AnimatedSprite.new("Graphics/Pictures/rightarrow",8,40,28,2,@viewport) +# @sprites["rightarrow"].x = 460 +# @sprites["rightarrow"].y = 140 +# @sprites["rightarrow"].play +# #@sprites["rightarrow"].visible=true +# +# y = 16*2 +# for i in 0...commands.length +# @sprites["panel#{i}"] = PokemonLoadPanel.new(i,commands[i], +# (show_continue) ? (i==0) : false,trainer,frame_count,map_id,@viewport) +# @sprites["panel#{i}"].x = 24*2 +# @sprites["panel#{i}"].y = y +# @sprites["panel#{i}"].pbRefresh +# y += (show_continue && i==0) ? 112*2 : 24*2 +# end +# @sprites["cmdwindow"] = Window_CommandPokemon.new([]) +# @sprites["cmdwindow"].viewport = @viewport +# @sprites["cmdwindow"].visible = false +# end +# +# end +# +# #=============================================================================== +# # +# #=============================================================================== +# class PokemonLoadScreen +# def initialize(scene) +# @scene = scene +# @selected_file = SaveData.get_newest_save_slot +# end +# +# # @param file_path [String] file to load save data from +# # @return [Hash] save data +# def load_save_file(file_path) +# save_data = SaveData.read_from_file(file_path) +# unless SaveData.valid?(save_data) +# if File.file?(file_path + ".bak") +# pbMessage(_INTL("The save file is corrupt. A backup will be loaded.")) +# save_data = load_save_file(file_path + ".bak") +# else +# self.prompt_save_deletion(file_path) +# return {} +# end +# end +# return save_data +# end +# +# # Called if save file is invalid. +# # Prompts the player to delete the save files. +# def prompt_save_deletion(file_path) +# pbMessage(_INTL("A save file is corrupt, or is incompatible with this game.")) +# self.delete_save_data(file_path) if pbConfirmMessageSerious( +# _INTL("Do you want to delete that save file? The game will exit afterwards either way.") +# ) +# exit +# end +# +# # nil deletes all, otherwise just the given file +# def delete_save_data(file_path=nil) +# begin +# SaveData.delete_file(file_path) +# pbMessage(_INTL("The save data was deleted.")) +# rescue SystemCallError +# pbMessage(_INTL("The save data could not be deleted.")) +# end +# end +# +# def pbStartLoadScreen +# copyKeybindings() +# save_file_list = SaveData::AUTO_SLOTS + SaveData::MANUAL_SLOTS +# first_time = true +# loop do # Outer loop is used for switching save files +# if @selected_file +# @save_data = load_save_file(SaveData.get_full_path(@selected_file)) +# else +# @save_data = {} +# end +# commands = [] +# cmd_continue = -1 +# cmd_new_game = -1 +# cmd_options = -1 +# cmd_language = -1 +# cmd_mystery_gift = -1 +# cmd_debug = -1 +# cmd_quit = -1 +# show_continue = !@save_data.empty? +# new_game_plus = show_continue && (@save_data[:player].new_game_plus_unlocked || $DEBUG) +# +# if show_continue +# commands[cmd_continue = commands.length] = "#{@selected_file}" +# if @save_data[:player].mystery_gift_unlocked +# commands[cmd_mystery_gift = commands.length] = _INTL('Mystery Gift') # Honestly I have no idea how to make Mystery Gift work well with this. +# end +# end +# +# commands[cmd_new_game = commands.length] = _INTL('New Game') +# if new_game_plus +# commands[cmd_new_game_plus = commands.length] = _INTL('New Game +') +# end +# commands[cmd_options = commands.length] = _INTL('Options') +# commands[cmd_language = commands.length] = _INTL('Language') if Settings::LANGUAGES.length >= 2 +# commands[cmd_debug = commands.length] = _INTL('Debug') if $DEBUG +# commands[cmd_quit = commands.length] = _INTL('Quit Game') +# cmd_left = -3 +# cmd_right = -2 +# +# map_id = show_continue ? @save_data[:map_factory].map.map_id : 0 +# @scene.pbStartScene(commands, show_continue, @save_data[:player], +# @save_data[:frame_count] || 0, map_id) +# @scene.pbSetParty(@save_data[:player]) if show_continue +# if first_time +# @scene.pbStartScene2 +# first_time = false +# else +# @scene.pbUpdate +# end +# +# loop do # Inner loop is used for going to other menus and back and stuff (vanilla) +# command = @scene.pbChoose(commands, cmd_continue) +# pbPlayDecisionSE if command != cmd_quit +# +# case command +# when cmd_continue +# @scene.pbEndScene +# Game.load(@save_data) +# return +# when cmd_new_game +# @scene.pbEndScene +# Game.start_new +# return +# when cmd_new_game_plus +# @scene.pbEndScene +# Game.start_new(@save_data[:bag],@save_data[:storage_system],@save_data[:player]) +# @save_data[:player].new_game_plus_unlocked=true +# return +# when cmd_mystery_gift +# pbFadeOutIn { pbDownloadMysteryGift(@save_data[:player]) } +# when cmd_options +# pbFadeOutIn do +# scene = PokemonOption_Scene.new +# screen = PokemonOptionScreen.new(scene) +# screen.pbStartScreen(true) +# end +# when cmd_language +# @scene.pbEndScene +# $PokemonSystem.language = pbChooseLanguage +# pbLoadMessages('Data/' + Settings::LANGUAGES[$PokemonSystem.language][1]) +# if show_continue +# @save_data[:pokemon_system] = $PokemonSystem +# File.open(SaveData.get_full_path(@selected_file), 'wb') { |file| Marshal.dump(@save_data, file) } +# end +# $scene = pbCallTitle +# return +# when cmd_debug +# pbFadeOutIn { pbDebugMenu(false) } +# when cmd_quit +# pbPlayCloseMenuSE +# @scene.pbEndScene +# $scene = nil +# return +# when cmd_left +# @scene.pbCloseScene +# @selected_file = SaveData.get_prev_slot(save_file_list, @selected_file) +# break # to outer loop +# when cmd_right +# @scene.pbCloseScene +# @selected_file = SaveData.get_next_slot(save_file_list, @selected_file) +# break # to outer loop +# else +# pbPlayBuzzerSE +# end +# end +# end +# end +# end +# +# #=============================================================================== +# # +# #=============================================================================== +# class PokemonSave_Scene +# def pbUpdateSlotInfo(slottext) +# pbDisposeSprite(@sprites, "slotinfo") +# @sprites["slotinfo"]=Window_AdvancedTextPokemon.new(slottext) +# @sprites["slotinfo"].viewport=@viewport +# @sprites["slotinfo"].x=0 +# @sprites["slotinfo"].y=160 +# @sprites["slotinfo"].width=228 if @sprites["slotinfo"].width<228 +# @sprites["slotinfo"].visible=true +# end +# end +# +# #=============================================================================== +# # +# #=============================================================================== +# class PokemonSaveScreen +# def doSave(slot) +# if Game.save(slot) +# pbMessage(_INTL("\\se[]{1} saved the game.\\me[GUI save game]\\wtnp[30]", $Trainer.name)) +# return true +# else +# pbMessage(_INTL("\\se[]Save failed.\\wtnp[30]")) +# return false +# end +# end +# +# # Return true if pause menu should close after this is done (if the game was saved successfully) +# def pbSaveScreen +# ret = false +# @scene.pbStartScreen +# if !$Trainer.save_slot +# # New Game - must select slot +# ret = slotSelect +# else +# choices = [ +# _INTL("Save to #{$Trainer.save_slot}"), +# _INTL("Save to another slot"), +# _INTL("Don't save") +# ] +# opt = pbMessage(_INTL('Would you like to save the game?'),choices,3) +# if opt == 0 +# pbSEPlay('GUI save choice') +# ret = doSave($Trainer.save_slot) +# elsif opt == 1 +# pbPlayDecisionSE +# ret = slotSelect +# else +# pbPlayCancelSE +# end +# end +# @scene.pbEndScreen +# return ret +# end +# +# # Call this to open the slot select screen +# # Returns true if the game was saved, otherwise false +# def slotSelect +# ret = false +# choices = SaveData::MANUAL_SLOTS +# choice_info = SaveData::MANUAL_SLOTS.map { |s| getSaveInfoBoxContents(s) } +# index = slotSelectCommands(choices, choice_info) +# if index >= 0 +# slot = SaveData::MANUAL_SLOTS[index] +# # Confirm if slot not empty +# if !File.file?(SaveData.get_full_path(slot)) || +# pbConfirmMessageSerious(_INTL("Are you sure you want to overwrite the save in #{slot}?")) # If the slot names were changed this grammar might need adjustment. +# pbSEPlay('GUI save choice') +# ret = doSave(slot) +# end +# end +# pbPlayCloseMenuSE if !ret +# return ret +# end +# +# # Handles the UI for the save slot select screen. Returns the index of the chosen slot, or -1. +# # Based on pbShowCommands +# def slotSelectCommands(choices, choice_info, defaultCmd=0) +# msgwindow = Window_AdvancedTextPokemon.new(_INTL("Which slot to save in?")) +# msgwindow.z = 99999 +# msgwindow.visible = true +# msgwindow.letterbyletter = true +# msgwindow.back_opacity = MessageConfig::WINDOW_OPACITY +# pbBottomLeftLines(msgwindow, 2) +# $game_temp.message_window_showing = true if $game_temp +# msgwindow.setSkin(MessageConfig.pbGetSpeechFrame) +# +# cmdwindow = Window_CommandPokemonEx.new(choices) +# cmdwindow.z = 99999 +# cmdwindow.visible = true +# cmdwindow.resizeToFit(cmdwindow.commands) +# pbPositionNearMsgWindow(cmdwindow,msgwindow,:right) +# cmdwindow.index=defaultCmd +# command=0 +# loop do +# @scene.pbUpdateSlotInfo(choice_info[cmdwindow.index]) +# Graphics.update +# Input.update +# cmdwindow.update +# msgwindow.update if msgwindow +# if Input.trigger?(Input::BACK) +# command = -1 +# break +# end +# if Input.trigger?(Input::USE) +# command = cmdwindow.index +# break +# end +# pbUpdateSceneMap +# end +# ret = command +# cmdwindow.dispose +# msgwindow.dispose +# $game_temp.message_window_showing = false if $game_temp +# Input.update +# return ret +# end +# +# # Show the player some data about their currently selected save slot for quick identification +# # This doesn't use player gender for coloring, unlike the default save window +# def getSaveInfoBoxContents(slot) +# full_path = SaveData.get_full_path(slot) +# if !File.file?(full_path) +# return _INTL("(empty)") +# end +# temp_save_data = SaveData.read_from_file(full_path) +# +# # Last save time +# time = temp_save_data[:player].last_time_saved +# if time +# date_str = time.strftime("%x") +# time_str = time.strftime(_INTL("%I:%M%p")) +# datetime_str = "#{date_str}#{time_str}
" +# else +# datetime_str = _INTL("(old save)") +# end +# +# # Map name +# map_str = pbGetMapNameFromId(temp_save_data[:map_factory].map.map_id) +# +# # Elapsed time +# totalsec = (temp_save_data[:frame_count] || 0) / Graphics.frame_rate +# hour = totalsec / 60 / 60 +# min = totalsec / 60 % 60 +# if hour > 0 +# elapsed_str = _INTL("Time{1}h {2}m
", hour, min) +# else +# elapsed_str = _INTL("Time{1}m
", min) +# end +# +# return "#{datetime_str}"+ # blue +# "#{map_str}"+ # green +# "#{elapsed_str}" +# end +# end +# +# #=============================================================================== +# # +# #=============================================================================== +# module Game +# # Fix New Game bug (if you saved during an event script) +# # This fix is from Essentials v20.1 Hotfixes 1.0.5 +# def self.start_new(ngp_bag = nil, ngp_storage = nil, ngp_trainer = nil) +# if $game_map && $game_map.events +# $game_map.events.each_value { |event| event.clear_starting } +# end +# $game_temp.common_event_id = 0 if $game_temp +# $PokemonTemp.begunNewGame = true +# pbMapInterpreter&.clear +# pbMapInterpreter&.setup(nil, 0, 0) +# $scene = Scene_Map.new +# SaveData.load_new_game_values +# $MapFactory = PokemonMapFactory.new($data_system.start_map_id) +# $game_player.moveto($data_system.start_x, $data_system.start_y) +# $game_player.refresh +# $PokemonEncounters = PokemonEncounters.new +# $PokemonEncounters.setup($game_map.map_id) +# $game_map.autoplay +# $game_map.update +# # +# # if ngp_bag != nil +# # $PokemonBag = ngp_clean_item_data(ngp_bag) +# # end +# if ngp_storage != nil +# $PokemonStorage = ngp_clean_pc_data(ngp_storage, ngp_trainer.party) +# end +# end +# +# # Loads bootup data from save file (if it exists) or creates bootup data (if +# # it doesn't). +# def self.set_up_system +# SaveData.move_old_windows_save if System.platform[/Windows/] +# save_slot = SaveData.get_newest_save_slot +# if save_slot +# save_data = SaveData.read_from_file(SaveData.get_full_path(save_slot)) +# else +# save_data = {} +# end +# if save_data.empty? +# SaveData.initialize_bootup_values +# else +# SaveData.load_bootup_values(save_data) +# end +# # Set resize factor +# pbSetResizeFactor([$PokemonSystem.screensize, 4].min) +# # Set language (and choose language if there is no save file) +# if Settings::LANGUAGES.length >= 2 +# $PokemonSystem.language = pbChooseLanguage if save_data.empty? +# pbLoadMessages('Data/' + Settings::LANGUAGES[$PokemonSystem.language][1]) +# end +# end +# +# # Saves the game. Returns whether the operation was successful. +# # @param save_file [String] the save file path +# # @param safe [Boolean] whether $PokemonGlobal.safesave should be set to true +# # @return [Boolean] whether the operation was successful +# # @raise [SaveData::InvalidValueError] if an invalid value is being saved +# def self.save(slot=nil, auto=false, safe: false) +# slot = $Trainer.save_slot if slot.nil? +# return false if slot.nil? +# +# file_path = SaveData.get_full_path(slot) +# $PokemonGlobal.safesave = safe +# $game_system.save_count += 1 +# $game_system.magic_number = $data_system.magic_number +# $Trainer.save_slot = slot unless auto +# $Trainer.last_time_saved = Time.now +# begin +# SaveData.save_to_file(file_path) +# Graphics.frame_reset +# rescue IOError, SystemCallError +# $game_system.save_count -= 1 +# return false +# end +# return true +# end +# +# # Overwrites the first empty autosave slot, otherwise the oldest existing autosave +# def self.auto_save +# oldest_time = nil +# oldest_slot = nil +# SaveData::AUTO_SLOTS.each do |slot| +# full_path = SaveData.get_full_path(slot) +# if !File.file?(full_path) +# oldest_slot = slot +# break +# end +# temp_save_data = SaveData.read_from_file(full_path) +# save_time = temp_save_data[:player].last_time_saved || Time.at(1) +# if oldest_time.nil? || save_time < oldest_time +# oldest_time = save_time +# oldest_slot = slot +# end +# end +# self.save(oldest_slot, true) +# end +# end +# +# #=============================================================================== +# # +# #=============================================================================== +# +# # Lol who needs the FileUtils gem? +# # This is the implementation from the original pbEmergencySave. +# def file_copy(src, dst) +# File.open(src, 'rb') do |r| +# File.open(dst, 'wb') do |w| +# while s = r.read(4096) +# w.write s +# end +# end +# end +# end +# +# # When I needed extra data fields in the save file I put them in Player because it seemed easier than figuring out +# # how to make a save file conversion, and I prefer to maintain backwards compatibility. +# class Player +# attr_accessor :last_time_saved +# attr_accessor :save_slot +# attr_accessor :autosave_steps +# end +# +# def pbEmergencySave +# oldscene = $scene +# $scene = nil +# pbMessage(_INTL("The script is taking too long. The game will restart.")) +# return if !$Trainer +# return if !$Trainer.save_slot +# current_file = SaveData.get_full_path($Trainer.save_slot) +# backup_file = SaveData.get_backup_file_path +# file_copy(current_file, backup_file) +# if Game.save +# pbMessage(_INTL("\\se[]The game was saved.\\me[GUI save game] The previous save file has been backed up.\\wtnp[30]")) +# else +# pbMessage(_INTL("\\se[]Save failed.\\wtnp[30]")) +# end +# $scene = oldscene +# end diff --git a/Data/System.rxdata b/Data/System.rxdata index 007975284175ffc4e147296e032b737851171967..64487ec1126dcd4aecb95921108c8741bf3b4a33 100644 GIT binary patch delta 4126 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 Wg~E|tZoqFpVFsNyft)g6;rJVNF>ap# delta 5586 zcmd5<&rcgi6lQkE#@NO<{*5VNaY##vh=4{^Vp~Gf5HO|1g;YhMiM_xQZ(@7VdTkV> zCaHSL1;t9FcWBihMf8vy09n;mY7eM~sA><%A5c~4p}F)>D%7-5RHd`KHa|@iOQ7sw zwX^fh%zp39oA14Ovg%n_^DIr#mT;)T+-2@PosZLfbfx;m+D_+}%|mp1;p4?$Hyqa5 z&cg66Z_hX<%L#s*o46QFaY?=ixO!wE!KZn7b8r3wYd>8@e$Cp2UbZ^lex#0eISNzQ z8li%9lIK7^*IP%QagEtuoK$fQw}5_RJ;g6?vEeH={6Zxg$a6Q_Y0FDxVKD@YDnqca z8iIw*5G?G5U{P%d77jzOs4)Z!ry*DzFa!&iAy~K#!NOw*7G6WJ@EL-I-w-SUhG0=! z7K`zHs`!FzK&TMe3Lk5Rm<45(2y6vXq9n&lB57ho+&rNDbK7b>r?1BDUKv*pW#maw zlseS4S-()n29(*)(f6aIj9*03HJg4f{N(~{Z9Dp9X|G{@jN5QaS{zoIxb3DT!%wd zr!qU-3J0?|a8iv??J8Kj9_{WzTR5f0h~{X&aB#ze@Zlvos63JB0qhQkY$N;(FQv6% zTDT|#9>b+fDbAy4c#uU-hzubMJiLso5RWWQMMQ$pJl; zCJc<*WQE0Jv;~}Y(u#gYe-qnd4Y8#+?C}c?W$D>|-C!9*uxKoc#eQjfXj34n+OGV4 zi@w8>d;eBZ(?gLA_}T|6jVK1w3~I?me1-R~aP?2>F~ruWez^VyvMP_8keOEA`6SeEW#l8r;~~)DF=y6w(RDJDI?szKW-3uot)0#;l~-UjgT1xt*7#=BtlXO9q;$Ns zm}E5B>|B@4=XltDULv`Q*OkyO944kEviOl}!?ZKk@XxMNrV${h%w_RBwY}DGenj-| z_%+I+L~r5SH4}R*c8+8wAq&}}e*1-232S~4545bahU6j+-aa%-E6%T|d0JV0M4dn| zUyr_oST}OO(Vx&I z7ObRkM=mm{>-)0{MBm$LiRO!gv>B$8Xfzk;R+_3zPn*gOL|0p9N9((%qJvzPYioaQ e(Eyi@n(9=u{laTy9ga`-cvH0eOjtClO7}mDKbsT)