From cd906e7f1c2b39b4a67afc396356d2a1fad904b5 Mon Sep 17 00:00:00 2001 From: infinitefusion Date: Sat, 29 Oct 2022 17:27:55 -0400 Subject: [PATCH] various fixes --- 14.32ax.png | Bin 9370 -> 0 bytes 14.32x.png | Bin 8576 -> 0 bytes Data/Map018.rxdata | Bin 14911 -> 14915 bytes Data/Map050.rxdata | Bin 32090 -> 31653 bytes Data/Map095.rxdata | Bin 58263 -> 58555 bytes Data/Map129.rxdata | Bin 27409 -> 29720 bytes Data/Map265.rxdata | Bin 47833 -> 47833 bytes Data/Map266.rxdata | Bin 36387 -> 36532 bytes Data/Map359.rxdata | Bin 47568 -> 49092 bytes Data/Map406.rxdata | Bin 23313 -> 20553 bytes Data/Map407.rxdata | Bin 34268 -> 34268 bytes Data/Map532.rxdata | Bin 23345 -> 23347 bytes Data/Map556.rxdata | Bin 6218 -> 6218 bytes Data/Map647.rxdata | Bin 27353 -> 27353 bytes Data/Map665.rxdata | Bin 25974 -> 26063 bytes Data/Map696.rxdata | Bin 7604 -> 7604 bytes Data/Map697.rxdata | Bin 19001 -> 17041 bytes Data/Map704.rxdata | Bin 11210 -> 12282 bytes Data/Map768.rxdata | Bin 0 -> 12301 bytes Data/MapInfos.rxdata | Bin 37278 -> 37327 bytes Data/Scripts.rxdata | Bin 569 -> 731 bytes Data/Scripts/001_Settings.rb | 2 +- .../001_Technical/005_PluginManager.rb | 2 +- .../001_Overworld_BattleStarting.rb | 4 +- Data/Scripts/013_Items/001_Item_Utilities.rb | 2 +- Data/Scripts/014_Pokemon/001_Pokemon.rb | 12 +- .../004_UI_Evolution.rb | 1 + .../001_Non-interactive UI/007_UI_Credits.rb | 2 +- Data/Scripts/016_UI/004_UI_Pokedex_Entry.rb | 3 +- Data/Scripts/016_UI/006_UI_Summary.rb | 12 +- Data/Scripts/016_UI/019_UI_PC.rb | 2 +- .../005_Debug_PokemonCommands.rb | 3 + .../021_Compiler/002_Compiler_CompilePBS.rb | 1 - .../Scripts/025-Randomizer/RandomizerUtils.rb | 2 +- .../049_Compatibility/MarinUtilities.rb | 2316 +- .../049_Compatibility/UtilityMethods.rb | 135 + Data/Scripts/050_AddOns/FusionSprites.rb | 30 +- Data/Scripts/050_AddOns/MapExporter.rb | 189 + Data/Scripts/050_AddOns/ShinyColorOffsets.rb | 422 + Data/Scripts/050_AddOns/k_scriptsUtils.rb | 1167 + Data/Scripts/050_AddOns/mapExporter2.rb | 518 + Data/Scripts/050_AddOns/mapExporter2_ui.rb | 74 + Data/System.rxdata | Bin 28872 -> 29423 bytes Data/encounters.dat | Bin 36380 -> 35690 bytes Data/items.dat | Bin 118307 -> 118476 bytes Data/messages.dat | Bin 31243071 -> 31249834 bytes Data/town_map.dat | Bin 5627 -> 5693 bytes Data/trainers.dat | Bin 82386 -> 82404 bytes PBS/encounters.txt | 74886 ++++++++-------- PBS/items.txt | 27 +- PBS/townmap.txt | 4 +- PBS/trainers.txt | 58 +- 52 files changed, 40802 insertions(+), 39072 deletions(-) delete mode 100644 14.32ax.png delete mode 100644 14.32x.png create mode 100644 Data/Map768.rxdata create mode 100644 Data/Scripts/050_AddOns/MapExporter.rb create mode 100644 Data/Scripts/050_AddOns/ShinyColorOffsets.rb create mode 100644 Data/Scripts/050_AddOns/k_scriptsUtils.rb create mode 100644 Data/Scripts/050_AddOns/mapExporter2.rb create mode 100644 Data/Scripts/050_AddOns/mapExporter2_ui.rb diff --git a/14.32ax.png b/14.32ax.png deleted file mode 100644 index 267e4d86338c22ec536f2c15c60d0636d6497bc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9370 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 diff --git a/14.32x.png b/14.32x.png deleted file mode 100644 index 3637718a99068853ae6eb362e6d38e6bde0d3483..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8576 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 literal 14911 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 ADgXcg delta 214 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 Z)HDf4Yr7`N2)vYHz;-bKFHGC*`~OHCbIJe! literal 58263 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

=0(DBc%)50c*=fNPs62!FiD? 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 literal 36387 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 diff --git a/Data/Map359.rxdata b/Data/Map359.rxdata index a456c614de7ef5bbdbbfc5f655bbf84d38843133..56a6ca2a3a514d992e087ff892c3f2a8675451aa 100644 GIT binary patch literal 49092 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 Kk7Tl&BL5G%%gfLJ diff --git a/Data/Map406.rxdata b/Data/Map406.rxdata index 93aa8ec28bd3ce33f45b71ae141e0f8e10976bf5..851ae54a5f34d88710bc3d7c723ff3e1e5fe1938 100644 GIT binary patch delta 3686 zcmcgvOKcle6!lCZk3DuAk3UUlocNQZ`8L>bVkh%xGjWnhOF|okd}xhotk{JoLfq6Q zZ9t-|P$dv*dR17!0;w$6AR$IVV$nrdASxk>1S}9@1xTn=U6oz=ycs+8j6EY<0$q%s zf|VV!#z)V;mXm+ z-~-DUmzj49`3tzP_FN>jm0rgg5e`~UJKaJCpUYi+n6J-7qOMM2qYsfW^>5SqNXG{ z9WK<2O~{#?$RW;xTuBS2=V|3KAvd|>!LI-p9G9HbOEh%~?lM!-R}KC~>NI)#&LBFF zLoE)}Dxyb1=1FuA({nUxTS7ka&2|xWU^DWIC_s*&2*J_5@f;ekqd`plg${@8iPb>w zSfmdPk*6OeR~R!WLe61wMMX5SghsIi#Y8zx_>!GvKP#m~{{hY*FRj|nP}I-hYZ``M z?NRC%$=B3N4aoHbMNMW2l9?H`iN(B@%6UQ1AA~m?)}tg^f8D8R@{-|$TaM5B)JRMj z#4F=)sqSFaIFMGEORd^#kV$D_Rmn;-P8u{L1l|5am#T|4={BOKTHOrP)ytthMl3*~ z9O|^lzX1cI{$(`|`tj8Olvo`eMR9CLW7vVlF^ioVIy;jAg|HcSx>1h{a&~T=>cW{s>_gOW5Ti>~dmT ziCxT|S%MIGn@-U1edH}-m9RPNp-&W#h2pVTJeFwb=J5LzH3geP6Y$~4Yz;=XvL)$Q zrG^jFbZbU zX6VgE>h{MyuhZ0TS9_+ff8E!h*TU&a3(4@%nDl;y2{+ot01p31W#LwQLi%XvIz^vt zfKNM)XnLZ`pduADZ=e2Gyxp6{ae|SRVAMh|I)J$nMwUHZNkZ(dR!4F^dSk0RMry}t zw9auV?ebpTQE3!Y7E;Z`C<@6Sq}CoEz^(oZN_zam1Z@XFyOp5LVS5Q}GCPYa5BzZC z1X;jR;_<5qpR$Q*xga}t1^a4!ZZ7n7skxw|3uT9a*@*z>(!_QqEwI}*0vp1jo(fbG zL$gB3`1e-Jkxi_IM`Eh6T^dfZjlmO>oI_FJ!>;+;M1XT^*zHW(<(j3RX4`d1X9Tuf zw4hgXG_ESTVuV`C6&Kqg+PlY(X{4@=STUQjv^4fB<7^P}fALCCtE2TE-x+{ zX-ZGaGQH}>*cT>#(oFn>A%4=#JB0#X&*rm*6!}NhBb|TpPa3{>>Tw9Kye0{&m#M}( h%pC@TD_xEEn0pLNx;ogn*<{+X+-L4HlJC^-)ZeqJOcMYA literal 23313 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 F_J0GssQ3T? diff --git a/Data/Map407.rxdata b/Data/Map407.rxdata index 38dd60c082f66fad1126681354a8202275d6e210..c113e7a232e164b144414c0ce6bcaad63f9dfb12 100644 GIT binary patch literal 34268 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 literal 34268 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 diff --git a/Data/Map532.rxdata b/Data/Map532.rxdata index 493eb7555a79c5319a954a8120b003e82b318a21..1106f809e9cbab7f07955112176f99999027b7fe 100644 GIT binary patch literal 23347 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 literal 23345 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 J{($Ple*xqQ-)aB= diff --git a/Data/Map556.rxdata b/Data/Map556.rxdata index 9ef5fb8547c35f7c3e0c2797df73982063723586..cd3f71a81d66e795c4c791ebcdd6566a5bab1960 100644 GIT binary patch literal 6218 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 literal 27353 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 ue2{MlH27a6p7Ebbc(+a75jgwd0_ki diff --git a/Data/Map665.rxdata b/Data/Map665.rxdata index fc39f68bfe9f2786c659e0716764367f851e5c05..e4ba0241210e47acad97fc4731fef8e31c4b8879 100644 GIT binary patch literal 26063 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 literal 25974 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 V6ZoqpTdatuu21-GT7SzV^8fbMpdkPN diff --git a/Data/Map696.rxdata b/Data/Map696.rxdata index e2632efafa7166f7204e6c90a7b7a28cd857c3c0..f8d6e1004348931804c82fd45d74a2faa393c99b 100644 GIT binary patch literal 7604 zcmeHMTT|Oc6c*HD3!9t4grpZjou&y%n*t$ey4wetU=gOIFjPr1!-GfIi+vhdt4cD4 z$*;&u`xp8%^4eSakT!X0(%;dS_N-({HW=eVJEa|KN8Z)hbIzXq&P6*`Oy*>0V||&B zySg<>29&LGm6LIglB<<~t6(sh3@SU^s8tyNNh+pZW!WJYOqbW0O;U;lZn1(>g9_VW zrt3UPL6VaZPf1=-l7dMuGiNiw$wWjaWF4tvWJIa*9aeDnECv#;V1VOpqGe|y*4w;V z)y@XQuoVq|_ zzObVkP*O=oahS1P@TrAj1(!ne{l~cilpr3;%tbOgx()i4!33oy@R)2-)6kt(LOxGX zCVFmg1S`!4E0w@zMX`~>HtcF>i3hsPYc301eiz-aAqX-Z-HZpm64VC%34}}_C4g}r zf@KLyRYcfk7Smmg3@NS+H)|gq`0~wjiwr*9R$jQ_} zXqWxDL1g2WUIcd!`u;#Q#R>*M5&d8AB2mJ5OLy_vgoIchBUWr#m>6yuXGRq?)hq>3 zHr}MC;^925=tf=Na|(!%%Pkcp>bmjJw?D+ou^20Pw!0O?u3S+$9Uh}27(fCtKdQp` zp%a{*8K#peJ&WF_=O9jBSLqwb{H8|V!lx;fp2u!lrEhbZ^BID0`5> z-(5IMWCa0ALW{qyX*o+=P7?Y3MqyejzO(QyK1|qlfdm;7%`bZqp<{P}6>I za3*SGK;tI6D2eMg{-kY>L`VgquYyI;7{5aD1||Z$x&$&KVjO;p(9f0h$(bL957Fs@?{iXQ4J?#uXe~4b#*PLeWo2NTSQrz z*1AoaE=vg3hn6Zby!iRr)))A0aIl;l%$~58c;VNs$az+(9jt7rb;q=_eXR?P3kuyl zdMtw;8%B>M06ladbXi~|{a5ARoH9U(L`d$G~<{F-jOS-GqNKz9Aul{e+uVLU$;e8HoG5$`Lq}g8k z8xUBKR=swsD_sG%FLPgd9uw_BLx)d2Oy3>ke%v25U$&Lz&ngFOxg$k#VkBf+DZ$h6 zWuM26FZ;OvG|2|YMty)zYv0c1NG2M!O8NBDBRelGb=l?)#8t0`oK6I=#P_aaAz-Ad zY4gaNr`sua)3x-@k$1hVtR#IOd)a6|!~*Tjv=>PIC7cO3ME^4ODx~`yLav$iEcP_^ zbI8*y+dTGV#X8aTD{6}DiRk-B?PLXykl)X{|M@W4{d~dmQ`}9^{9U!$9PoA5Ka2g; zWZ{nu&E3gLQuE6GKDw3s_hh@bu*ca$;QxcbSBb9^NA2e0pwY;_+(aLP_DT6*H1>l?_s=VicebNiy2(N@1=DpxfL8WPkP@)r9S~t Co+`uu literal 7604 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 F`7g3|VKD#z diff --git a/Data/Map704.rxdata b/Data/Map704.rxdata index eff5da1a667868df2fadf3a6d88cd0d42642f5ed..76759ed9a174ee5b0687d828a7510c0216ef182f 100644 GIT binary patch literal 12282 zcmeHN-ESjT6}MgFaqPs2^RXWkwo~seO-cw!cC&5fDs+-KcIQNbed@s4=p4W1Bh?Mns!00;?Q5w9yDIOon>-Y;S4WEyJ47M)bW}lW9}DWxZ3StUw!PN*mP=SfkT4Db>g$ZPlO$at8GtmZ(^eH!(iljsu&PPpPZ*g@k*Qs!qm7hU%e)%HzrV3RhF+nO zX2>*+kr^8QtH+w8V_p;US~4_76TeT;EFFbXQZRhf)kV&^dbpDC)2H>sJUKCKTyL@i zv+NvMCJbdtuhOsGX<7Fu zgr;Rz(}X+NHtRU1aLHRR{2gpak(_iJZ1o&NfhomFLR;DU)Ups*0UV%hTBhNYv@zXj z(^}1J!&pF}V_IdSMVmk~?drSVHs9@-t;!Ki!C;NXp>brF!NLx+3cy`!8&;iGn0D#Y z_T6&(MuCi3Muj>@H2z(<^Dvdt}6hHaz2-31q`IIqom9oJXq=Dp&|;@rI7l0uCFkcGtp$t-;jGS@2{ zF(fjuK?*3l$ty#XU?4Ownh??PZjo=2bi`{C2`VUiqrncZ_mZtpNRd}D&J;$zf^nsA z9W!*wtMfP`FBQmaL1_N7u%`Z&*Od5=mW8aPwY}rc1U`5>waCxEp-7u_tVeF|0{vD=V$^HI6glH?yA4` z%fJ>t1sXXKkl~vBJWTh60=dY@7qjH~0{N0i*yPJF`b!1!0uZPL@*>po1#%fKSG@TI zC*bob=dVQOz&tM($XCIE<_qL&j4X_juS51Ci^V)oS7Zs~EyHn*D&#s`SKzo&BCi0) zt1`RX;8U|or-%j%8G)b&ZGp7%d^dKU0IRp8e&RKzfFTA7f;lAI712`Ru82Kx>5B0m zf;?{NfG_s9w2MS6@WRW&kvusul3zqdB6c7BkR)MBPHL0iMn-};1@-hpf|>rLNd6E3 z2}YaizUN_P2O0;88wZ&{96ZK2NG+}|bNB8U3JQ6()Lm$oyihm?p^$@6NYc?`p`dzR z4@=ZFckNl3-`*%XX477%na*uk+Gf4FrrldFzIkhNXB#eab6x^O69iVe^`i5Vts1J` zG#U-HW?1v;UdK^kKipt!-&PxR-^5ylbsAN5&r~gD+Z2{8)nTen=mUvt@+a4jPPAa$+s&3`luU{SP!%0vm5vB>^*=RUmG?hO7BgHH*5%fey4v7 zrGM{q9A)X`+oqlWR+%N%3gpKLZL84XS`WT7#N~FI?j5xlz2BflmTy- z65o#wWx)F-Sau^!kl*?LUpGwG_>#OzC%p|*ie}F~9DWzY+NW~!koZ${D1#1%zeI;J z=y3RZ6eypEa9H)i0dJ)*!s?KvBWE8D&m|%xpVJA4spwD!9S)bHLm6~9T#Ewb^AHa1 zgUVHU!P_j2(DAbmhf)-4pH4VbqeB^VI5^Rv3_2Ws5Cw`q9F%AHbjjTS^?bUN^gUf# za-V^__YTvrI*jvox3>R9sQcU&-+xZ(MhD(s!ONR6yx%RsOVFy}7#%HL!q*jv-{hWy zcafLixCjT9KTg4E_&2n`&;mmX3@tFUz|aDo1sb_#uJzP|<-!c+9_Btu%Vb zXP12|eLH<8BCqsG)GKO14E-<#`vgB;T^ZsUl-REiIfR@ruKv72^U3rIJ?<6tqV)c} z;XHz?Kd&4Q()E%gsbtA7SC+#{l1G#zl|Xr1x1U0A;WdcRU-MH9%g@dN!6!L3e%M?$ nX|3+ShxXGte6`FvE&R?HziXzK;RE|aT6OAB@^|vj>SO-{mm{~A literal 11210 zcmeHN&2Jk;6ki+U^;hC-K1x5JEN)8^2q8(6lqd=c2W(ci z`37xhDcxjtu>xIbovzcmZGDnvDXwK4C+AR-L?xq4t$d7YW4>I|mO(lUKC8^K^M|;$ z&+k0TYc-=@ifcn)+kluhZCH7kJz|K5)l1-*Nnl&#CCVbdaWWJqN<^&-mPMFt-+upi-M4BO~S(lWZW#!S;#tR!krBMA5$@o=oy2Qd=8+M!yppF7AO2xXGxC)J1~G9&JTN_T|V69e^AQ z4J6eCkeHL=K#Fz(G9Ma9q6;98x(9MD1Q5J=q5x`8Ck1=cq%5Y5=q1*mMVs+@;X3;` z2lY|p^%6q?*Hpih-8$E_v!ZtpY^@EPHnW9wqsmG-ZB(~t^?JdT7K)W@YzZpgZO#-} z$%!YLEt_?t!LS_BOOry0z7TNZ=_z_k&v7*Bw>=FJY1WN2q&wqm;56ZG{l(g6f^(Z! zv;p02uyUC;n2cC$Y8H$-tHIKx!FK)6FjM%7d7@JlBvSo8K2iE0=VOCg? zYlpYz>b%>R1~qOPMP_fZ$UX2|tNrXT(D`)nkrNKU7)sc zudQjMmLoBoWIlU9gW^s-apnqgqwVhB>LOHf@#JYL)XfORcgs zimf7VR!izCRZVVL3+T=o2Y)WS3TQL|>MP|^*snG)f?65(W~WG9a<^EF!I^)p6! z%3OV~X#nloo8tkbZ!gYx#)5ET*^w(21g%i@gRA-Z4^KlsvZRPD=jCkteQIUpce%sX z*tzBb1CG;8&mj7>Km#e2<0Q_mzzs+saFS#N(2~J2@~CABSK9~^XK!boa*TcE{?zm5 zGk1(3C!-n{Y5NawM80^EK;pab<(7m*?sov9?3R&IgX5iHo=)q|Ad8}N@d%VzOuqp# zyz%}`-l~OdN8_$210fN9upNAq3W-Dxa&l;pyqF^|0iBY=;OXTYQ9=Ec9LYlKNRAwZ zj{`Y!Y-gGyuY$_)92sYE@){?vr^zIX{7v4-N@NOLy$R^+c9(XJhfM7qhYZ6icwx%Tt4HqH0?61hrH2> zd6r_4Z}3+F?!m{Po2^@(N9etWziw}AOK+0lA;A&-DY~UEmL01Z=HhuErvfYur|NXW z(`aX-5zv{ksNFQj7iMOVubg}JWmHU+tl~1>%p_=T?-zKRZ5dc{GB7?fF=ZN-g%7vO z@RTXqr^mgHxlYmp~WCozWWYpjz5xDi!^VX)mE2EqDaL=`@!eQWW%<3Iu$ z?d*XTPOW_}hAJfOD0kuod@jSJ?~)#N=Z1vf2AKF=(8D%vm<4V)2;7haZjjl)7H&Ay zni;U~fidHVy4dS%uRBau=SLv+v~6CZM` zJjNC#dN~XfoE`{5f<>wG#Oq1%%WmpKGMR5Jqu+x1ABOr* zL;Vl1!KYvUc9`@&k?ni*^YBo5UH^B(L+N$>{}2YsGh6?sy!t-~^*_iGf%?a(nt}IX zVtx3ZJp+CYlj0{c2mS~TrPp)dL3k*=o&$e|f#T1BF3Eq-jZusLyCZ+GH)`kqIjDaH z_+NqgPq0j&{+~+i?-P5W;KCc1NjtACpG@t)8XiioYkwg;lwQ|dUu~&=# zR{eKa|D5P*{WCM|t^dcM{xk5_5no@zmKxt+9(MjAW3|0+l5nG`4eLe|UZKL4w*ddI zS%Lq7lnmQwYRMJcE=PYax*mdl zgul+8eiV!&j?TKSbgNFghu!S@ef7)!~bCyjjPuy5U#r V*b(>^?FK8^6}W2ebiO+){R2V^II;i$ diff --git a/Data/Map768.rxdata b/Data/Map768.rxdata new file mode 100644 index 0000000000000000000000000000000000000000..57e7fb7bd1bca33e4a9585cc7437a01a0da86602 GIT binary patch literal 12301 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 I{qW)UZ-tFS0RR91 delta 3779 zcmX|EcX-rQ*8a{UgtW;F36Kuy$;@Qt*JdWY&=LZq_dmpnB^eR7Nk4KXlYYpi-RwP;*f)$8gS8}f_5UxF_q52=2%UyVFyRzJzBuhvJhev+ujvsK zf%xf-6o$jow`!~J?|PFG+-&r#O*MfHuHmS5w$N+X?X2TX=bZEDZOn8LDFcgK%oK@U zmjUv|T^E1a3?J7b=aTzJIH<7BwUT~^w_NvACEDE-io!9sW_k=B?lJT-(%gq>IbL;F zX#Y;NiC%!9j^sFs)iqRwXVga0;g-6N-o;W63!TS+$0+W(d%#;0PA?)!6Nw_V2A!Hb zx`CH8BHhA|8in*QXk~gImD*^!iE*C4g0nonhHtb{^b`DM7@gAW*>FJS3^V;5gEOKy zgp)JMX$Gcyiugg}fkmES{O1-=fj+*5XJvG@ zg{I*wkIwkdY%6EQ;4LyRD!g^{2W;Va9iH}K!GwnrkP(795NRUYDaV6-t zQqYf>9xTyS#05W2HTXO@QFES=O1Bw;s@-H$`C(sR2%Ll5Q6HkCeb^RKOU?KuM5IoH zgj%?&C81`<vy+m2)(U;RKyrplT{~*C2<5Gkhx(&Hx#sz~! zYjD?~(9aN~jr1TYqkl)c@m;h)vk_{X!W^9&o;POxhS(+WG(}SvQcN=af)10wTYqnQ zkYbP`2;6{eLJd>G>w-e5m?k!(GQkO*qMo{OP_)opToGkDi0P7*UPZE0NohDBNt}vH zyz(8KWQ8dvUY02dD`kQH2M1&$mE$7M591fP7>8C*L-)8l>Xb;jfN`aUV)3P7V1)Xb zCHys1jbd{NZNOvZV%!cxNQd>(Hm4T2Jqxu>fVL?p$zV}C*z)9bl}BI<>A zqJbX4f<%d)$J)flXf+~|WG-=O(mV#`{v?6>_+nBfv;&R^NER_WQG@d2Kst$@zVm_I*pI!E6i^`3vQ9;&V@2}ud+};Z?*>Q3m>LG z!EcewjhMN}%55>UXbX3`TUssUU{#ul`Qt#El?HGnZJ3#%EM4XpUs0a&}R`af7OU+#78%t&GI`uLWzRqyMyk!+6;NY@I3dT#z@(A$F6zCW- zGDZ3~dNZS`7$-7K41=qgrEp)y8OsWy?@^UiK!3&)SrWP9dyjo=Dj!%Twr|*p^qqlyr+%R>3E~jy%wxFEOP&nlI2Hyq7Q131|wU zX%dMA0=5OmkSCx%)mm4+K^qioT>6uVGB35Pmz(fBdy3nbI{Lo;15M6mb2?c z0&Rm!u|iKHsaVfs(p)TZ@%I%=$SPFh?cz{+2EXv{tq@Ag>Wg;qzNcbNthX7ETNaF| z5{cI0#gb^In%gDz&YD|VhrS{Wrb+|RRIJ6>QXPNelTtmcgjbn}3&m>Wl;yB|9xjVz zow!j}#CMa*&0N~Xa*4HMZ+SGX6?x!|a(^bXuga~o1mP8W&O}Z{H66g?6|v0gpH)=S zQ^;6e##DE7xx~e~y4;M0at(Ydjr^_jN)cfdT8vbN+ljH##5(&vhhD6ac>J}-!oXK*jqJ2)Y8CncyJ}6$ynnBiScHDy`6R;YEcCx9udCv7o~w%@ z6F#borMD1RZ{d~v`bIANv-KucgHP-2==5udrVo+cP|j3zq`^YZ;(CL`qg!JczAjOt zqcNP*w6{^9Je+To*u(wYD6;1=G@0lllr@Qb_IQ)R1o(VYIa>q&W`#aQcC*adGuSNh zz0NdC_#?OTcg>;fV7zSt7ku17OI7{MPkWoZqak4&{D<; z_^M?&)5@|HM&|t96*4APdN|hGRQ-@v`LP?k&OhwH^j4V(Furwym_A#LG>Gq86-^=8 z5tV8;dYv}a&**70JN`trb(ql+MDuWNrNkuk?aESITcJVOsz?gN;3}Eo@#Lz_Y%b&4 zBsQ}v+G3d^j<#7i#2am9nh(utnVWO|YKd>RX0?R#)ml8cI*Xawv0Y?gwX{oYIhuIP z#lCg{rA=;lv)#m{P<03%3+$J=ul#FmT*3A=L8^O%nvNJIlzkoc;$7;H=s2j;puTV8 zRQIDer$St(k(1rTV;gpL%7|^#;A&?u7voN6oZafIsX|qU8y;K}#-8+VYs}oaKdjL+ ze+RD>DG_;Vcd(=SaIL^)@LDHwnHKWsh_&kk+J$558fh!syA0g>v0WBc;Zb=)%<>$k!J_%*()yVIg z%j(zJS4$7!YF{)fvO~X2p0M_dbQDefCT6DH{W4DVs_|BT2-}J~{UY|ZYY?+Ols#$r z`f}#9r`H=;2R~e|P#nBB)KMY&HW=6#o!AiZoAvOnN1v5r< zI1!`4lF={*ZQH2ChV<}gF?6|FIFE(ne7_p;W8svJ>M;eUN1U*4td9Ct>wxU+Q=Ek@6HG&{!Q<1(9y>*FFnBwQydIHgS!M)uUZ zCS>M^^Aq{_WUCg2$!s=beUk>e3!l_;ly6Mhg~(}JENg$tHi1uX+h$~l9oY5{rrg%; z3g6_=c7gwOdAph6Fl|Q+?@!txaNH|*82Rk|JU@(!J46<`yE_yX3UNx|muUTz%#W@; QQwDYYeQo^yw};+;0qna*y#N3J diff --git a/Data/Scripts.rxdata b/Data/Scripts.rxdata index 85b1d40b0e3a6bc29636c04eb57791ffc271a70c..1005890c676f6ea2bc47e0fcb4990eef869b76c9 100644 GIT binary patch delta 723 zcmV;^0xbQx1lt9W6o176c$|GyU2obj6n#hHKU`9zBq}oP!yYz?RnxjneVA62z5zle zxdE@ij%=rt0snp1HX)#W5ERANzUSPJbA1KRD`6m4Xh13p8>L@B6kt~fOTI>+O_Z75 zRu=PKx6|$9NV}S6xZv5#Tw|rQ?REg%(%WGK{T@3lSyn2E7k?)h@@%z({le~@opvlU z^`e&yr@LgDU#HWNi{eH)MG<}Fsf`4hW zwU&;1jmGdL!Zk!wIh7H8wA??HkO|qNwA(?MHz{c@49?rcP-~?fEES`LWJdf#_&9?1 zH#avS_OGHurhh7wNqq8VrCP=Vh&M5%0sCSP1>0z0G3ocx5G@2oh@TrLS8A&iEX0z* zkJ?tX1tH-Q)VX45@C?G6Tq0-Ll#1tblW9>|GcUAS&kI%NsFRA@Rq8wn3fmCG2qrVX z_WS0vz89JmO1n-4C(?+^BoIq{v#v4)j7AW%820<-n}5aONa72V3yqmodVA+lTuX+o zA4QtNT|>&M+N_cyg%8KL8pA2I#%@S#y>{uMyND}Oxzk_UlS|S8L^=vBp%Z(L!YIeQ z>B$0@LWWObe&uE25C#c;T?NBqGW`jq~`=)RppT^94Ttz%hg6Y)i8J{d_*h$ijEq&rsKL{ z9r(?SAQy=Ng>pMO`*=K@zdL9zRD}64Y^oH5e@s?BCUKLrwYzTT?V{q1|M@t&TcceM z{ch@?j{Darcyaegn+o F!zmd>UElx! delta 560 zcmV-00?+;11-S%}6n`TEc$|Gx!H(K65WOSu4?`9yi53|+wi4Y#x2<|=wQwUSGRXwo z4R&NZrCY+kuk8>_wA(6Dftf5>gKb0M>MVSipEht|rM!!LfIPAb-vFCup|1v3?WLMAh3- zG)+!XlHbS4c^bnhSl^w-^Yh01pS~@Z>GJc__n)ifdORmuq-?XEZ_dHlBDkMKT}y6j zA5bZ}L%4?^;Rz4S!PovJ7>|rUh=&8@c{h@zOkwH=Ln(!{u!al|Nfi5w@M!@bX0ut_ z`&U*X5f$<%ynkksQtZMBgvZc~0Zq|BL5`AXjK-t5?H1aK5U#o;OSKjPwroe>N3E+` z1LM#KwW(Mtyn%2oJIKv6rJ#ALGRZ2f(n5+uT8J`78C6v8W1CT!wv~Zcz+`xzRWjVrI;{oosQ( zczZOJf73Fuh!fzfoIu-;6`IOwgr%eROQ#dR(whL`c#OP!dH`M0t-9 0 indexNumber = @dexlist[@index][4] indexNumber -= 1 if @dexlist[@index][5] + indexNumber = GameData::Species.get(@species).id_number indexText = sprintf("%03d", indexNumber) # end textpos = [ @@ -586,7 +587,7 @@ class PokemonPokedexInfoScreen else region = $PokemonGlobal.pokedexDex # National Dex -1, regional Dexes 0, 1, etc. end - dexnum = pbGetRegionalNumber(region,species) + dexnum = GameData::Species.get(species).id_number#pbGetRegionalNumber(region,species) dexnumshift = Settings::DEXES_WITH_OFFSETS.include?(region) dexlist = [[species,GameData::Species.get(species).name,0,0,dexnum,dexnumshift]] @scene.pbStartScene(dexlist,0,region) diff --git a/Data/Scripts/016_UI/006_UI_Summary.rb b/Data/Scripts/016_UI/006_UI_Summary.rb index ed0fb11fd..68abd4325 100644 --- a/Data/Scripts/016_UI/006_UI_Summary.rb +++ b/Data/Scripts/016_UI/006_UI_Summary.rb @@ -422,12 +422,12 @@ class PokemonSummary_Scene # break # end # end - # if dexnum <= 0 - # textpos.push(["???", 435, 74, 2, dexNumBase, dexNumShadow]) - # else - # dexnum -= 1 if dexnumshift - # textpos.push([sprintf("%03d", dexnum), 435, 74, 2, dexNumBase, dexNumShadow]) - # end + if dexnum <= 0 + textpos.push(["???", 435, 74, 2, dexNumBase, dexNumShadow]) + else + dexnum -= 1 if dexnumshift + textpos.push([sprintf("%03d", dexnum), 435, 74, 2, dexNumBase, dexNumShadow]) + end # Write Original Trainer's name and ID number if @pokemon.owner.name.empty? textpos.push([_INTL("RENTAL"), 435, 170, 2, Color.new(64, 64, 64), Color.new(176, 176, 176)]) diff --git a/Data/Scripts/016_UI/019_UI_PC.rb b/Data/Scripts/016_UI/019_UI_PC.rb index ad84530f3..f9770ae4f 100644 --- a/Data/Scripts/016_UI/019_UI_PC.rb +++ b/Data/Scripts/016_UI/019_UI_PC.rb @@ -37,7 +37,7 @@ class StorageSystemPC command = 0 loop do command = pbShowCommandsWithHelp(nil, - [_INTL("Organize Boxes"), + [_INTL("Organize / Fuse"), _INTL("Withdraw Pokémon"), _INTL("Deposit Pokémon"), _INTL("See ya!")], diff --git a/Data/Scripts/020_Debug/003_Debug menus/005_Debug_PokemonCommands.rb b/Data/Scripts/020_Debug/003_Debug menus/005_Debug_PokemonCommands.rb index e31fbad8f..7c837ec2d 100644 --- a/Data/Scripts/020_Debug/003_Debug menus/005_Debug_PokemonCommands.rb +++ b/Data/Scripts/020_Debug/003_Debug menus/005_Debug_PokemonCommands.rb @@ -806,6 +806,9 @@ PokemonDebugMenuCommands.register("speciesform", { species = pbChooseSpeciesList(pkmn.species) if species && species != pkmn.species pkmn.species = species + if pkmn.shiny? + pkmn.debug_shiny=true + end pkmn.calc_stats $Trainer.pokedex.register(pkmn) if !settingUpBattle screen.pbRefreshSingle(pkmnid) diff --git a/Data/Scripts/021_Compiler/002_Compiler_CompilePBS.rb b/Data/Scripts/021_Compiler/002_Compiler_CompilePBS.rb index 25f3d2456..d3c408a7d 100644 --- a/Data/Scripts/021_Compiler/002_Compiler_CompilePBS.rb +++ b/Data/Scripts/021_Compiler/002_Compiler_CompilePBS.rb @@ -1055,7 +1055,6 @@ module Compiler slots.compact! slots.sort! { |a, b| (a[0] == b[0]) ? a[1].to_s <=> b[1].to_s : b[0] <=> a[0] } end - p encounter_hash GameData::Encounter.register(encounter_hash) end # Save all data diff --git a/Data/Scripts/025-Randomizer/RandomizerUtils.rb b/Data/Scripts/025-Randomizer/RandomizerUtils.rb index cb9bcc6c9..6b0d8bc1b 100644 --- a/Data/Scripts/025-Randomizer/RandomizerUtils.rb +++ b/Data/Scripts/025-Randomizer/RandomizerUtils.rb @@ -20,7 +20,7 @@ HELD_ITEMS = [:AIRBALLOON, :BRIGHTPOWDER, :EVIOLITE, :FLOATSTONE, :DESTINYKNOT, :PETAYABERRY, :APICOTBERRY, :LANSATBERRY, :STARFBERRY, :ENIGMABERRY, :MICLEBERRY, :CUSTAPBERRY, :JABOCABERRY, :ROWAPBERRY, :FAIRYGEM] -INVALID_ITEMS = [:COVERFOSSIL, :PLUMEFOSSIL, :ACCURACYUP, :DAMAGEUP, :ANCIENTSTONE, :ODDKEYSTONE_FULL, :TM00] +INVALID_ITEMS = [:COVERFOSSIL, :PLUMEFOSSIL, :ACCURACYUP, :DAMAGEUP, :ANCIENTSTONE, :ODDKEYSTONE_FULL, :TM00,:DEVOLUTIONSPRAY] RANDOM_ITEM_EXCEPTIONS = [:DNASPLICERS] def getRandomGivenTM(item) diff --git a/Data/Scripts/049_Compatibility/MarinUtilities.rb b/Data/Scripts/049_Compatibility/MarinUtilities.rb index 91b01b5b1..81e7d260f 100644 --- a/Data/Scripts/049_Compatibility/MarinUtilities.rb +++ b/Data/Scripts/049_Compatibility/MarinUtilities.rb @@ -1,985 +1,985 @@ -# # PluginManager.register({ -# # :name => "Marin's Scripting Utilities", -# # :version => "1.5", -# # :credits => "Marin", -# # :link => "https://reliccastle.com/resources/165/" -# # }) -# -# # Whether or not you want the custom/better errors message. -# SPECIAL_ERRORS = true -# -# -# -# # These two settings only apply if SPECIAL_ERRORS is TRUE -# -# DOUBLE_BACKTRACE = false # The interpreter already contains a small -# # backtrace for errors in events and such by default. -# # Settings this to false will not show the custom -# # backtrace. -# -# BACKTRACE_MAX_SIZE = 12 # The backtrace can go all the way from the very first -# # call to the very last call. This is the limit as far -# # as it can go back, because you could have a massive -# # backtrace otherwise. -# -# -# class Object -# def get_variables -# return self.instance_variables.map { |v| [v,self.method(v.to_s.gsub(/@/, "").to_sym).call] } -# end -# -# def set_variables(vars) -# vars.each do |v| -# self.method((v[0].to_s.gsub(/@/, "") + "=").to_sym).call(v[1]) -# end -# end -# end -# -# # E.g. PokeBattle_Pokemon -> to_sym -> :PokeBattle_Pokemon -# class Class -# def to_sym -# return self.to_s.to_sym -# end -# end -# -# class NilClass -# def empty? -# return true -# end -# -# def numeric? -# return false -# end -# end -# +# # # PluginManager.register({ +# # # :name => "Marin's Scripting Utilities", +# # # :version => "1.5", +# # # :credits => "Marin", +# # # :link => "https://reliccastle.com/resources/165/" +# # # }) +# # +# # # Whether or not you want the custom/better errors message. +# # SPECIAL_ERRORS = true +# # +# # +# # +# # # These two settings only apply if SPECIAL_ERRORS is TRUE +# # +# # DOUBLE_BACKTRACE = false # The interpreter already contains a small +# # # backtrace for errors in events and such by default. +# # # Settings this to false will not show the custom +# # # backtrace. +# # +# # BACKTRACE_MAX_SIZE = 12 # The backtrace can go all the way from the very first +# # # call to the very last call. This is the limit as far +# # # as it can go back, because you could have a massive +# # # backtrace otherwise. +# # +# # +# # class Object +# # def get_variables +# # return self.instance_variables.map { |v| [v,self.method(v.to_s.gsub(/@/, "").to_sym).call] } +# # end +# # +# # def set_variables(vars) +# # vars.each do |v| +# # self.method((v[0].to_s.gsub(/@/, "") + "=").to_sym).call(v[1]) +# # end +# # end +# # end +# # +# # # E.g. PokeBattle_Pokemon -> to_sym -> :PokeBattle_Pokemon +# # class Class +# # def to_sym +# # return self.to_s.to_sym +# # end +# # end +# # +# # class NilClass +# # def empty? +# # return true +# # end +# # +# # def numeric? +# # return false +# # end +# # end +# # +# # class Numeric +# # # Formats the number nicely (e.g. 1234567890 -> format() -> 1,234,567,890) +# # def format(separator = ',') +# # a = self.to_s.split('').reverse.breakup(3) +# # return a.map { |e| e.join('') }.join(separator).reverse +# # end +# # +# # # Makes sure the returned string is at least n characters long +# # # (e.g. 4 -> to_digits -> "004") +# # # (e.g. 19 -> to_digits -> "019") +# # # (e.g. 123 -> to_digits -> "123") # class Numeric -# # Formats the number nicely (e.g. 1234567890 -> format() -> 1,234,567,890) -# def format(separator = ',') -# a = self.to_s.split('').reverse.breakup(3) -# return a.map { |e| e.join('') }.join(separator).reverse +# def to_digits(n = 3) +# str = self.to_s +# return str if str.size >= n +# ret = "" +# (n - str.size).times { ret += "0" } +# return ret + str # end +# end # -# # Makes sure the returned string is at least n characters long -# # (e.g. 4 -> to_digits -> "004") -# # (e.g. 19 -> to_digits -> "019") -# # (e.g. 123 -> to_digits -> "123") -class Numeric - def to_digits(n = 3) - str = self.to_s - return str if str.size >= n - ret = "" - (n - str.size).times { ret += "0" } - return ret + str - end -end - -# -# # n root of self. Defaults to 2 => square root. -# def root(n = 2) -# return (self ** (1.0 / n)) -# end -# -# # Factorial -# # 4 -> fact -> (4 * 3 * 2 * 1) -> 24 -# def fact -# raise ArgumentError, "Cannot execute factorial on negative numerics" if self < 0 -# tot = 1 -# for i in 2..self -# tot *= i +# # +# # # n root of self. Defaults to 2 => square root. +# # def root(n = 2) +# # return (self ** (1.0 / n)) +# # end +# # +# # # Factorial +# # # 4 -> fact -> (4 * 3 * 2 * 1) -> 24 +# # def fact +# # raise ArgumentError, "Cannot execute factorial on negative numerics" if self < 0 +# # tot = 1 +# # for i in 2..self +# # tot *= i +# # end +# # return tot +# # end +# # +# # # Combinations +# # def ncr(k) +# # return (self.fact / (k.fact * (self - k).fact)) +# # end +# # +# # # k permutations of n (self) +# # def npr(k) +# # return (self.fact / (self - k).fact) +# # end +# # +# # # Converts number to binary number (returns as string) +# # def to_b +# # return self.to_s(2) +# # end +# # +# # def empty? +# # return false +# # end +# # +# # def numeric? +# # return true +# # end +# # end +# # +# # class NilClass +# # def numeric? +# # return false +# # end +# # end +# # +# # # Calculates the total amount of elements in an Enumerable. Example: +# # # ["one","two","three"].fullsize #=> 11 +# # module Enumerable +# # def fullsize +# # n = 0 +# # for e in self +# # if e.is_a?(String) +# # n += e.size +# # elsif e.respond_to?(:fullsize) +# # n += e.fullsize +# # elsif e.respond_to?(:size) && !e.is_a?(Numeric) +# # n += e.size +# # else +# # n += 1 +# # end +# # end +# # return n +# # end +# # end +# # +# # class Array +# # # Returns a random element of the array +# # def random +# # return self[Object.method(:rand).call(self.size)] +# # end +# # +# # # Returns whether or not the array is empty. +# # def empty? +# # return self.size == 0 +# # end +# # +# # # Shuffles the order of the array +# # def shuffle +# # indexes = [] +# # new = [] +# # while new.size != self.size +# # # Weird way of calling rand for compatibility +# # # with Luka's scripting utilities +# # i = Object.method(:rand).call(self.size) +# # if !indexes.include?(i) +# # indexes << i +# # new << self[i] +# # end +# # end +# # return new +# # end +# # +# # # Shuffles the order of the array and replaces itself +# # def shuffle! +# # self.replace(shuffle) +# # end +# # +# # # Breaks the array up every n elements +# # def breakup(n) +# # ret = [] +# # for i in 0...self.size +# # ret[(i / n).floor] ||= [] +# # ret[(i / n).floor] << self[i] +# # end +# # return ret +# # end +# # +# # # Breaks the array up every n elements and replaces itself +# # def breakup!(n) +# # self.replace(breakup(n)) +# # end +# # +# # # Swaps two elements' indexes +# # def swap(index1, index2) +# # new = self.clone +# # tmp = new[index2].clone +# # new[index2] = new[index1] +# # new[index1] = tmp +# # return new +# # end +# # +# # # Swaps two elements' indexes and replaces itself +# # def swap!(index1, index2) +# # self.replace(swap(index1, index2)) +# # end +# # +# # # Returns whether or not the first element is equal to the passed argument +# # def starts_with?(e) +# # return self.first == e +# # end +# # +# # # Returns whether or not the last element is equal to the passed argument +# # def ends_with?(e) +# # return self.last == e +# # end +# # +# # # Converts itself to a hash where possible +# # def to_hash(delete_nil_entries = false) +# # ret = {} +# # for i in 0...self.size +# # next if self[i].nil? && delete_nil_entries +# # ret[i] = self[i] +# # end +# # return ret +# # end +# # +# # # If you have 8 elements, if true, grabs the 5th element, the 4th if false. +# # # If you have 7 elements, grabs the 4th. +# # def mid(round_up = true) +# # i = (self.size - 1) / 2.0 +# # i = i.ceil if round_up +# # return self[i].floor +# # end +# # +# # # Returns the average of all elements in the array. Will throw errors on non-numerics. +# # # Skips entries. +# # def average +# # total = 0 +# # self.each { |n| total += n unless n.nil? } +# # return total / self.compact.size.to_f +# # end +# # +# # # Adds some aliases for : , , +# # alias has? include? +# # alias includes? include? +# # alias contains? include? +# # +# # # Evaluates the block you pass it for every number between 0 and "slots". +# # # Example usage: +# # # Array.make_table { |i| i ** 2 } +# # # => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] +# # # Array.make_table(10..16) { |i| i.to_s(2) } +# # # => ["1010", "1011", "1100", "1101", "1110", "1111", "10000"] +# # # (you can also pass it an array of values to iterate over) +# # def self.make_table(range = 1..10, &proc) +# # return range.map { |n| next proc.call(n) } +# # end +# # +# # # If true: +# # # [0, 1, 3, 4, 5] -- etc +# # # If false: +# # # [0,1,2,3,4,5] -- etc +# # Json_Extra_Space_After_Entry = false +# # +# # # Converts _self_ to a JSON string with an indent of Json_Indent_Width per layer. +# # def to_json(indent = Hash::Json_Indent_Width, inline = false) +# # return "[]" unless self.size > 0 +# # full = "[" +# # for i in 0...self.size +# # nl = false +# # if self[i].is_a?(Hash) || self[i].is_a?(Array) +# # val = self[i].to_json(indent + Hash::Json_Indent_Width, i == 0) +# # nl = !(inline && i == 0) +# # else +# # val = self[i] +# # val = "\"#{val}\"" if val.is_a?(String) +# # nl = (self.fullsize > 24 || self.map { |e| e.class.to_sym }.include?(:Hash)) +# # end +# # full += "\n" + " " * indent if nl +# # full += val.to_s + "," +# # full += " " if Json_Extra_Space_After_Entry +# # end +# # i = 2 + Json_Extra_Space_After_Entry.to_i +# # full = full[0..(-i)] +# # full += "\n#{" " * (indent - Hash::Json_Indent_Width)}" if self.fullsize > 24 || +# # self.map { |e| e.class.to_sym }.include?(:Hash) +# # full += "]" +# # return full +# # end +# # end +# # +# # class Hash +# # # Converts itself to an array where possible +# # def to_array(delete_nil_entries = false) +# # ret = [] +# # keys = self.keys.sort +# # for key in keys +# # next if self[key].nil? && delete_nil_entries +# # ret[key] = self[key] +# # end +# # return ret +# # end +# # +# # def compact +# # new = {} +# # for key in self.keys +# # new[key] = self[key] unless self[key].nil? +# # end +# # return new +# # end +# # +# # def compact! +# # self.replace(compact) +# # end +# # +# # # Amount of spaces per "layer" in the JSON. +# # Json_Indent_Width = 4 +# # +# # # Converts _self_ to a JSON string with an indent of Json_Indent_Width per layer. +# # def to_json(indent = Json_Indent_Width, _ = nil) +# # return "{}" if self.size == 0 +# # full = "{" +# # keys = self.keys.sort do |a,b| +# # if $JSON_Sort_Order +# # if $JSON_Sort_Order.include?(a) +# # if $JSON_Sort_Order.include?(b) +# # next $JSON_Sort_Order.index(a) <=> $JSON_Sort_Order.index(b) +# # else +# # next -1 +# # end +# # else +# # if $JSON_Sort_Order.include?(b) +# # next 1 +# # end +# # # If neither are in the key, go alphabetical +# # end +# # end +# # if a.numeric? +# # if b.numeric? +# # next a <=> b +# # else +# # next -1 +# # end +# # else +# # if b.numeric? +# # next 1 +# # else +# # next a <=> b +# # end +# # end +# # end +# # for key in keys +# # if self[key].is_a?(Hash) || self[key].is_a?(Array) +# # val = self[key].to_json(indent + Json_Indent_Width, key == self.keys[0]) +# # else +# # val = self[key] +# # val = "\"#{val}\"" if val.is_a?(String) +# # end +# # full += "\n#{" " * indent}\"#{key}\": #{val}," +# # end +# # full = full[0..-2] +# # full += "\n#{" " * (indent - Json_Indent_Width)}}" +# # return full +# # end +# # end +# # +# # # String class extensions +# # class String +# # # Converts to bits +# # def to_b +# # return self.unpack('b*')[0] +# # end +# # +# # # Converts to bits and replaces itself +# # def to_b! +# # self.replace(to_b) +# # end +# # +# # # Converts from bits +# # def from_b +# # return [self].pack('b*') +# # end +# # +# # # Convert from bits and replaces itself +# # def from_b! +# # self.replace(from_b) +# # end +# # +# # # Returns a random character from the string +# # def random +# # return self[rand(self.size)] +# # end +# # +# # # Shuffles the order of the characters +# # def shuffle +# # return self.split("").shuffle.join("") +# # end +# # +# # # Breaks the string up every _n_ characters +# # def breakup(n) +# # new = [] +# # for i in 0...self.size +# # new[(i / n).floor] ||= "" +# # new[(i / n).floor] += self[i] +# # end +# # return new +# # end +# # +# # def empty? +# # return (self.size == 0) +# # end +# # +# # def numeric? +# # i = 0 +# # for e in self.split("") +# # next if i == 0 && e == "-" +# # return false unless [0,1,2,3,4,5,6,7,8,9].map { |n| n.to_s }.include?(e) +# # end +# # return true +# # end +# # +# # # Deflates itself and returns the result +# # def deflate +# # return Zlib::Deflate.deflate(self) +# # end +# # +# # # Deflates and replaces itself +# # def deflate! +# # self.replace(deflate) +# # end +# # +# # # Inflates itself and returns the result +# # def inflate +# # return Zlib::Inflate.inflate(self) +# # end +# # +# # # Inflates and replaces itself +# # def inflate! +# # self.replace(inflate) +# # end +# # +# # # Adds some aliases for : , , +# # alias has? include? +# # alias includes? include? +# # alias contains? include? +# # end +# # +# # # File class extensions +# # class File +# # # Copies the source file to the destination path. +# # def self.copy(source, destination) +# # data = "" +# # t = Time.now +# # File.open(source, 'rb') do |f| +# # while r = f.read(4096) +# # if Time.now - t > 1 +# # Graphics.update +# # t = Time.now +# # end +# # data += r +# # end +# # end +# # File.delete(destination) if File.file?(destination) +# # f = File.new(destination, 'wb') +# # f.write data +# # f.close +# # end +# # +# # # Renames the old file to be the new file. //exact same as File::move +# # def self.rename(old, new) +# # File.move(old, new) +# # end +# # +# # # Copies the source to the destination and deletes the source. +# # def self.move(source, destination) +# # File.copy(source, destination) +# # File.delete(source) +# # end +# # +# # # Reads the file's data and inflates it with Zlib +# # def self.inflate(file) +# # data = "" +# # t = Time.now +# # File.open(file, 'rb') do |f| +# # while r = f.read(4096) +# # if Time.now - t > 1 +# # Graphics.update +# # t = Time.now +# # end +# # data += r +# # end +# # end +# # data.inflate! +# # File.delete(file) +# # f = File.new(file, 'wb') +# # f.write data +# # f.close +# # return data +# # end +# # +# # # Reads the file's data and deflates it with Zlib +# # def self.deflate(file) +# # data = "" +# # t = Time.now +# # File.open(file, 'rb') do |f| +# # while r = f.read(4096) +# # if Time.now - t > 1 +# # Graphics.update +# # t = Time.now +# # end +# # data += r +# # end +# # end +# # data.deflate! +# # File.delete(file) +# # f = File.new(file, 'wb') +# # f.write data +# # f.close +# # return data +# # end +# # +# # # Note: This is VERY basic compression and should NOT serve as encryption. +# # # Compresses all specified files into one, big package +# # def self.compress(outfile, files, delete_files = true) +# # start = Time.now +# # files = [files] unless files.is_a?(Array) +# # for i in 0...files.size +# # if !File.file?(files[i]) +# # raise "Could not find part of the path `#{files[i]}`" +# # end +# # end +# # files.breakup(500) # 500 files per compressed file +# # full = "" +# # t = Time.now +# # for i in 0...files.size +# # if Time.now - t > 1 +# # Graphics.update +# # t = Time.now +# # end +# # data = "" +# # File.open(files[i], 'rb') do |f| +# # while r = f.read(4096) +# # if Time.now - t > 1 +# # Graphics.update +# # t = Time.now +# # end +# # data += r +# # end +# # end +# # File.delete(files[i]) if delete_files +# # full += "#{data.size}|#{files[i]}|#{data}" +# # full += "|" if i != files.size - 1 +# # end +# # File.delete(outfile) if File.file?(outfile) +# # f = File.new(outfile, 'wb') +# # f.write full.deflate +# # f.close +# # return Time.now - start +# # end +# # +# # # Decompresses files compressed with File.compress +# # def self.decompress(filename, delete_package = true) +# # start = Time.now +# # data = "" +# # t = Time.now +# # File.open(filename, 'rb') do |f| +# # while r = f.read(4096) +# # if Time.now - t > 1 +# # Graphics.update +# # t = Time.now +# # end +# # data += r +# # end +# # end +# # data.inflate! +# # loop do +# # size, name = data.split('|') +# # data = data.split(size + "|" + name + "|")[1..-1].join(size + "|" + name + "|") +# # size = size.to_i +# # content = data[0...size] +# # data = data[(size + 1)..-1] +# # File.delete(name) if File.file?(name) +# # f = File.new(name, 'wb') +# # f.write content +# # f.close +# # break if !data || data.size == 0 || data.split('|').size <= 1 +# # end +# # File.delete(filename) if delete_package +# # return Time.now - start +# # end +# # +# # # Creates all directories that don't exist in the given path, as well as the +# # # file. If given a second argument, it'll write that to the file. +# # def self.create(path, data = nil) +# # start = Time.now +# # Dir.create(path.split('/')[0..-2].join('/')) +# # f = File.new(path, 'wb') +# # f.write data if data && data.size > 0 +# # f.close +# # return Time.now - start +# # end +# # end +# # +# # # Dir class extensions +# # class Dir +# # class << Dir +# # alias marin_delete delete +# # end +# # +# # # Returns all files in the targeted path +# # def self.get_files(path, recursive = true) +# # return Dir.get_all(path, recursive).select { |path| File.file?(path) } +# # end +# # +# # # Returns all directories in the targeted path +# # def self.get_dirs(path, recursive = true) +# # return Dir.get_all(path, recursive).select { |path| File.directory?(path) } +# # end +# # +# # # Returns all files and directories in the targeted path +# # def self.get_all(path, recursive = true) +# # files = [] +# # Dir.foreach(path) do |f| +# # next if f == "." || f == ".." +# # if File.directory?(path + "/" + f) && recursive +# # files.concat(Dir.get_files(path + "/" + f)) +# # end +# # files << path + "/" + f +# # end +# # return files +# # end +# # +# # # Deletes a directory and all files/directories within, unless non_empty is false +# # def self.delete(path, non_empty = true) +# # if non_empty +# # for file in Dir.get_all(path) +# # if File.directory?(file) +# # Dir.delete(file, non_empty) +# # elsif File.file?(file) +# # File.delete(file) +# # end +# # end +# # end +# # marin_delete(path) +# # end +# # +# # # Creates all directories that don't exist in the given path. +# # def self.create(path) +# # split = path.split('/') +# # for i in 0...split.size +# # Dir.mkdir(split[0..i].join('/')) unless File.directory?(split[0..i].join('/')) +# # end +# # end +# # end +# # +# # +# # Sprite class extensions +# class Sprite +# # Shorthand for initializing a bitmap by path, bitmap, or width/height: +# # -> bmp("Graphics/Pictures/bag") +# # -> bmp(32, 32) +# # -> bmp(some_other_bitmap) +# def bmp(arg1 = nil, arg2 = nil) +# if arg1 +# if arg2 +# arg1 = Graphics.width if arg1 == -1 +# arg2 = Graphics.height if arg2 == -1 +# self.bitmap = Bitmap.new(arg1, arg2) +# elsif arg1.is_a?(Bitmap) +# self.bitmap = arg1.clone +# else +# self.bitmap = Bitmap.new(arg1) +# end +# else +# return self.bitmap # end -# return tot # end # -# # Combinations -# def ncr(k) -# return (self.fact / (k.fact * (self - k).fact)) +# # Alternative to bmp(path): +# # -> bmp = "Graphics/Pictures/bag" +# def bmp=(arg1) +# bmp(arg1) # end # -# # k permutations of n (self) -# def npr(k) -# return (self.fact / (self - k).fact) +# # Usage: +# # -> [x] # Sets sprite.x to x +# # -> [x,y] # Sets sprite.x to x and sprite.y to y +# # -> [x,y,z] # Sets sprite.x to x and sprite.y to y and sprite.z to z +# # -> [nil,y] # Sets sprite.y to y +# # -> [nil,nil,z] # Sets sprite.z to z +# # -> [x,nil,z] # Sets sprite.x to x and sprite.z to z +# # Etc. +# def xyz=(args) +# self.x = args[0] || self.x +# self.y = args[1] || self.y +# self.z = args[2] || self.z # end # -# # Converts number to binary number (returns as string) -# def to_b -# return self.to_s(2) +# # Returns the x, y, and z coordinates in the xyz=(args) format, [x,y,z] +# def xyz +# return [self.x, self.y, self.z] # end # -# def empty? +# # Centers the sprite by setting the origin points to half the width and height +# def center_origins +# return if !self.bitmap +# self.ox = self.bitmap.width / 2 +# self.oy = self.bitmap.height / 2 +# end +# +# # Returns the sprite's full width, taking zoom_x into account +# def fullwidth +# return self.bitmap.width.to_f * self.zoom_x +# end +# +# # Returns the sprite's full height, taking zoom_y into account +# def fullheight +# return self.bitmap.height.to_f * self.zoom_y +# end +# end +# +# # +# class TextSprite < Sprite +# # Sets up the sprite and bitmap. You can also pass text to draw +# # either an array of arrays, or an array containing the normal "parameters" +# # for drawing text: +# # [text,x,y,align,basecolor,shadowcolor] +# def initialize(viewport = nil, text = nil, width = -1, height = -1) +# super(viewport) +# @width = width +# @height = height +# self.bmp(@width, @height) +# pbSetSystemFont(self.bmp) +# if text.is_a?(Array) +# if text[0].is_a?(Array) +# pbDrawTextPositions(self.bmp, text) +# else +# pbDrawTextPositions(self.bmp, [text]) +# end +# end +# end +# +# # Clears the bitmap (and thus all drawn text) +# def clear +# self.bmp.clear +# pbSetSystemFont(self.bmp) +# end +# +# # You can also pass text to draw either an array of arrays, or an array +# # containing the normal "parameters" for drawing text: +# # [text,x,y,align,basecolor,shadowcolor] +# def draw(text, clear = false) +# self.clear if clear +# if text[0].is_a?(Array) +# pbDrawTextPositions(self.bmp, text) +# else +# pbDrawTextPositions(self.bmp, [text]) +# end +# end +# +# # Draws text with outline +# # [text,x,y,align,basecolor,shadowcolor] +# def draw_outline(text, clear = false) +# self.clear if clear +# if text[0].is_a?(Array) +# for e in text +# e[2] -= 224 +# pbDrawOutlineText(self.bmp, e[1], e[2], 640, 480, e[0], e[4], e[5], e[3]) +# end +# else +# e = text +# e[2] -= 224 +# pbDrawOutlineText(self.bmp, e[1], e[2], 640, 480, e[0], e[4], e[5], e[3]) +# end +# end +# +# # Draws and breaks a line if the width is exceeded +# # [text,x,y,width,numlines,basecolor,shadowcolor] +# def draw_ex(text, clear = false) +# self.clear if clear +# if text[0].is_a?(Array) +# for e in text +# drawTextEx(self.bmp, e[1], e[2], e[3], e[4], e[0], e[5], e[6]) +# end +# else +# e = text +# drawTextEx(self.bmp, e[1], e[2], e[3], e[4], e[0], e[5], e[6]) +# end +# end +# +# # Clears and disposes the sprite +# def dispose +# clear +# super +# end +# end +# +# # A better alternative to the typical @sprites = {} +# class SpriteHash +# attr_reader :x +# attr_reader :y +# attr_reader :z +# attr_reader :visible +# attr_reader :opacity +# +# def initialize +# @hash = {} +# @x = 0 +# @y = 0 +# @z = 0 +# @visible = true +# @opacity = 255 +# end +# +# # Returns the object in the specified key +# def [](key) +# key = key.to_sym if key.respond_to?(:to_sym) && !key.is_a?(Numeric) +# return @hash[key] +# end +# +# # Sets an object in specified key to the specified value +# def []=(key, value) +# key = key.to_sym if key.respond_to?(:to_sym) && !key.is_a?(Numeric) +# add(key, value) +# end +# +# # Returns the raw hash +# def raw +# return @hash +# end +# +# # Returns the keys in the hash +# def keys +# return @hash.keys +# end +# +# def length +# return self.size; +# end +# +# def count +# return self.size; +# end +# +# # Returns the amount of keys in the hash +# def size +# return @hash.keys.size +# end +# +# # Clones the hash +# def clone +# return @hash.clone +# end +# +# # Adds an object to the specified key +# def add(key, value) +# clear_disposed +# key = key.to_sym if key.respond_to?(:to_sym) && !key.is_a?(Numeric) +# @hash[key] if @hash[key] && @hash[key].respond_to?(:dispose) +# @hash[key] = value +# clear_disposed +# end +# +# # Deletes an object in the specified key +# def delete(key) +# key = key.to_sym if key.respond_to?(:to_sym) && !key.is_a?(Numeric) +# @hash[key] = nil +# clear_disposed +# end +# +# # Iterates over all sprites +# def each +# clear_disposed +# @hash.each { |s| yield s[1] if block_given? } +# end +# +# # Updates all sprites +# def update +# clear_disposed +# for key in @hash.keys +# @hash[key].update if @hash[key].respond_to?(:update) +# end +# end +# +# # Disposes all sprites +# def dispose +# clear_disposed +# for key in @hash.keys +# @hash[key].dispose if @hash[key].respond_to?(:dispose) +# end +# clear_disposed +# end +# +# # Compatibility +# def disposed? # return false # end # -# def numeric? -# return true +# # Changes x on all sprites +# def x=(value) +# clear_disposed +# for key in @hash.keys +# @hash[key].x += value - @x +# end +# @x = value +# end +# +# # Changes y on all sprites +# def y=(value) +# clear_disposed +# for key in @hash.keys +# @hash[key].y += value - @y +# end +# @y = value +# end +# +# # Changes z on all sprites +# def z=(value) +# clear_disposed +# for key in @hash.keys +# @hash[key].z += value - @z +# end +# @z = value +# end +# +# # Changes visibility on all sprites +# def visible=(value) +# clear_disposed +# for key in @hash.keys +# @hash[key].visible = value +# end +# end +# +# # Changes opacity on all sprites +# def opacity=(value) +# clear_disposed +# for key in @hash.keys +# @hash[key].opacity += value - @opacity +# end +# @opacity = [0, value, 255].sort[1] +# end +# +# # Fades out all sprites +# def hide(frames = 16) +# clear_disposed +# frames.times do +# Graphics.update +# Input.update +# for key in @hash.keys +# @hash[key].opacity -= 255 / frames.to_f +# end +# end +# @opacity = 0 +# end +# +# # Fades in all sprites +# def show(frames = 16) +# clear_disposed +# frames.times do +# Graphics.update +# Input.update +# for key in @hash.keys +# @hash[key].opacity += 255 / frames.to_f +# end +# end +# @opacity = 255 +# end +# +# # Deletes all disposed sprites from the hash +# def clear_disposed +# for key in @hash.keys +# if (@hash[key].disposed? rescue true) +# @hash[key] = nil +# @hash.delete(key) +# end +# end +# end +# +# # Renames the old key to the new key +# def rename(old, new) +# self[new] = self[old] +# delete(old) # end # end # -# class NilClass -# def numeric? -# return false -# end -# end -# -# # Calculates the total amount of elements in an Enumerable. Example: -# # ["one","two","three"].fullsize #=> 11 -# module Enumerable -# def fullsize -# n = 0 -# for e in self -# if e.is_a?(String) -# n += e.size -# elsif e.respond_to?(:fullsize) -# n += e.fullsize -# elsif e.respond_to?(:size) && !e.is_a?(Numeric) -# n += e.size -# else -# n += 1 -# end -# end -# return n -# end -# end -# -# class Array -# # Returns a random element of the array -# def random -# return self[Object.method(:rand).call(self.size)] -# end -# -# # Returns whether or not the array is empty. -# def empty? -# return self.size == 0 -# end -# -# # Shuffles the order of the array -# def shuffle -# indexes = [] -# new = [] -# while new.size != self.size -# # Weird way of calling rand for compatibility -# # with Luka's scripting utilities -# i = Object.method(:rand).call(self.size) -# if !indexes.include?(i) -# indexes << i -# new << self[i] -# end -# end -# return new -# end -# -# # Shuffles the order of the array and replaces itself -# def shuffle! -# self.replace(shuffle) -# end -# -# # Breaks the array up every n elements -# def breakup(n) -# ret = [] -# for i in 0...self.size -# ret[(i / n).floor] ||= [] -# ret[(i / n).floor] << self[i] -# end -# return ret -# end -# -# # Breaks the array up every n elements and replaces itself -# def breakup!(n) -# self.replace(breakup(n)) -# end -# -# # Swaps two elements' indexes -# def swap(index1, index2) -# new = self.clone -# tmp = new[index2].clone -# new[index2] = new[index1] -# new[index1] = tmp -# return new -# end -# -# # Swaps two elements' indexes and replaces itself -# def swap!(index1, index2) -# self.replace(swap(index1, index2)) -# end -# -# # Returns whether or not the first element is equal to the passed argument -# def starts_with?(e) -# return self.first == e -# end -# -# # Returns whether or not the last element is equal to the passed argument -# def ends_with?(e) -# return self.last == e -# end -# -# # Converts itself to a hash where possible -# def to_hash(delete_nil_entries = false) -# ret = {} -# for i in 0...self.size -# next if self[i].nil? && delete_nil_entries -# ret[i] = self[i] -# end -# return ret -# end -# -# # If you have 8 elements, if true, grabs the 5th element, the 4th if false. -# # If you have 7 elements, grabs the 4th. -# def mid(round_up = true) -# i = (self.size - 1) / 2.0 -# i = i.ceil if round_up -# return self[i].floor -# end -# -# # Returns the average of all elements in the array. Will throw errors on non-numerics. -# # Skips entries. -# def average -# total = 0 -# self.each { |n| total += n unless n.nil? } -# return total / self.compact.size.to_f -# end -# -# # Adds some aliases for : , , -# alias has? include? -# alias includes? include? -# alias contains? include? -# -# # Evaluates the block you pass it for every number between 0 and "slots". -# # Example usage: -# # Array.make_table { |i| i ** 2 } -# # => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] -# # Array.make_table(10..16) { |i| i.to_s(2) } -# # => ["1010", "1011", "1100", "1101", "1110", "1111", "10000"] -# # (you can also pass it an array of values to iterate over) -# def self.make_table(range = 1..10, &proc) -# return range.map { |n| next proc.call(n) } -# end -# -# # If true: -# # [0, 1, 3, 4, 5] -- etc -# # If false: -# # [0,1,2,3,4,5] -- etc -# Json_Extra_Space_After_Entry = false -# -# # Converts _self_ to a JSON string with an indent of Json_Indent_Width per layer. -# def to_json(indent = Hash::Json_Indent_Width, inline = false) -# return "[]" unless self.size > 0 -# full = "[" -# for i in 0...self.size -# nl = false -# if self[i].is_a?(Hash) || self[i].is_a?(Array) -# val = self[i].to_json(indent + Hash::Json_Indent_Width, i == 0) -# nl = !(inline && i == 0) -# else -# val = self[i] -# val = "\"#{val}\"" if val.is_a?(String) -# nl = (self.fullsize > 24 || self.map { |e| e.class.to_sym }.include?(:Hash)) -# end -# full += "\n" + " " * indent if nl -# full += val.to_s + "," -# full += " " if Json_Extra_Space_After_Entry -# end -# i = 2 + Json_Extra_Space_After_Entry.to_i -# full = full[0..(-i)] -# full += "\n#{" " * (indent - Hash::Json_Indent_Width)}" if self.fullsize > 24 || -# self.map { |e| e.class.to_sym }.include?(:Hash) -# full += "]" -# return full -# end -# end -# -# class Hash -# # Converts itself to an array where possible -# def to_array(delete_nil_entries = false) -# ret = [] -# keys = self.keys.sort -# for key in keys -# next if self[key].nil? && delete_nil_entries -# ret[key] = self[key] -# end -# return ret -# end -# -# def compact -# new = {} -# for key in self.keys -# new[key] = self[key] unless self[key].nil? -# end -# return new -# end -# -# def compact! -# self.replace(compact) -# end -# -# # Amount of spaces per "layer" in the JSON. -# Json_Indent_Width = 4 -# -# # Converts _self_ to a JSON string with an indent of Json_Indent_Width per layer. -# def to_json(indent = Json_Indent_Width, _ = nil) -# return "{}" if self.size == 0 -# full = "{" -# keys = self.keys.sort do |a,b| -# if $JSON_Sort_Order -# if $JSON_Sort_Order.include?(a) -# if $JSON_Sort_Order.include?(b) -# next $JSON_Sort_Order.index(a) <=> $JSON_Sort_Order.index(b) -# else -# next -1 -# end -# else -# if $JSON_Sort_Order.include?(b) -# next 1 -# end -# # If neither are in the key, go alphabetical -# end -# end -# if a.numeric? -# if b.numeric? -# next a <=> b -# else -# next -1 -# end -# else -# if b.numeric? -# next 1 -# else -# next a <=> b -# end -# end -# end -# for key in keys -# if self[key].is_a?(Hash) || self[key].is_a?(Array) -# val = self[key].to_json(indent + Json_Indent_Width, key == self.keys[0]) -# else -# val = self[key] -# val = "\"#{val}\"" if val.is_a?(String) -# end -# full += "\n#{" " * indent}\"#{key}\": #{val}," -# end -# full = full[0..-2] -# full += "\n#{" " * (indent - Json_Indent_Width)}}" -# return full -# end -# end -# -# # String class extensions -# class String -# # Converts to bits -# def to_b -# return self.unpack('b*')[0] -# end -# -# # Converts to bits and replaces itself -# def to_b! -# self.replace(to_b) -# end -# -# # Converts from bits -# def from_b -# return [self].pack('b*') -# end -# -# # Convert from bits and replaces itself -# def from_b! -# self.replace(from_b) -# end -# -# # Returns a random character from the string -# def random -# return self[rand(self.size)] -# end -# -# # Shuffles the order of the characters -# def shuffle -# return self.split("").shuffle.join("") -# end -# -# # Breaks the string up every _n_ characters -# def breakup(n) -# new = [] -# for i in 0...self.size -# new[(i / n).floor] ||= "" -# new[(i / n).floor] += self[i] -# end -# return new -# end -# -# def empty? -# return (self.size == 0) -# end -# -# def numeric? -# i = 0 -# for e in self.split("") -# next if i == 0 && e == "-" -# return false unless [0,1,2,3,4,5,6,7,8,9].map { |n| n.to_s }.include?(e) -# end -# return true -# end -# -# # Deflates itself and returns the result -# def deflate -# return Zlib::Deflate.deflate(self) -# end -# -# # Deflates and replaces itself -# def deflate! -# self.replace(deflate) -# end -# -# # Inflates itself and returns the result -# def inflate -# return Zlib::Inflate.inflate(self) -# end -# -# # Inflates and replaces itself -# def inflate! -# self.replace(inflate) -# end -# -# # Adds some aliases for : , , -# alias has? include? -# alias includes? include? -# alias contains? include? -# end -# -# # File class extensions -# class File -# # Copies the source file to the destination path. -# def self.copy(source, destination) -# data = "" -# t = Time.now -# File.open(source, 'rb') do |f| -# while r = f.read(4096) -# if Time.now - t > 1 -# Graphics.update -# t = Time.now -# end -# data += r -# end -# end -# File.delete(destination) if File.file?(destination) -# f = File.new(destination, 'wb') -# f.write data -# f.close -# end -# -# # Renames the old file to be the new file. //exact same as File::move -# def self.rename(old, new) -# File.move(old, new) -# end -# -# # Copies the source to the destination and deletes the source. -# def self.move(source, destination) -# File.copy(source, destination) -# File.delete(source) -# end -# -# # Reads the file's data and inflates it with Zlib -# def self.inflate(file) -# data = "" -# t = Time.now -# File.open(file, 'rb') do |f| -# while r = f.read(4096) -# if Time.now - t > 1 -# Graphics.update -# t = Time.now -# end -# data += r -# end -# end -# data.inflate! -# File.delete(file) -# f = File.new(file, 'wb') -# f.write data -# f.close -# return data -# end -# -# # Reads the file's data and deflates it with Zlib -# def self.deflate(file) -# data = "" -# t = Time.now -# File.open(file, 'rb') do |f| -# while r = f.read(4096) -# if Time.now - t > 1 -# Graphics.update -# t = Time.now -# end -# data += r -# end -# end -# data.deflate! -# File.delete(file) -# f = File.new(file, 'wb') -# f.write data -# f.close -# return data -# end -# -# # Note: This is VERY basic compression and should NOT serve as encryption. -# # Compresses all specified files into one, big package -# def self.compress(outfile, files, delete_files = true) -# start = Time.now -# files = [files] unless files.is_a?(Array) -# for i in 0...files.size -# if !File.file?(files[i]) -# raise "Could not find part of the path `#{files[i]}`" -# end -# end -# files.breakup(500) # 500 files per compressed file -# full = "" -# t = Time.now -# for i in 0...files.size -# if Time.now - t > 1 -# Graphics.update -# t = Time.now -# end -# data = "" -# File.open(files[i], 'rb') do |f| -# while r = f.read(4096) -# if Time.now - t > 1 -# Graphics.update -# t = Time.now -# end -# data += r -# end -# end -# File.delete(files[i]) if delete_files -# full += "#{data.size}|#{files[i]}|#{data}" -# full += "|" if i != files.size - 1 -# end -# File.delete(outfile) if File.file?(outfile) -# f = File.new(outfile, 'wb') -# f.write full.deflate -# f.close -# return Time.now - start -# end -# -# # Decompresses files compressed with File.compress -# def self.decompress(filename, delete_package = true) -# start = Time.now -# data = "" -# t = Time.now -# File.open(filename, 'rb') do |f| -# while r = f.read(4096) -# if Time.now - t > 1 -# Graphics.update -# t = Time.now -# end -# data += r -# end -# end -# data.inflate! -# loop do -# size, name = data.split('|') -# data = data.split(size + "|" + name + "|")[1..-1].join(size + "|" + name + "|") -# size = size.to_i -# content = data[0...size] -# data = data[(size + 1)..-1] -# File.delete(name) if File.file?(name) -# f = File.new(name, 'wb') -# f.write content -# f.close -# break if !data || data.size == 0 || data.split('|').size <= 1 -# end -# File.delete(filename) if delete_package -# return Time.now - start -# end -# -# # Creates all directories that don't exist in the given path, as well as the -# # file. If given a second argument, it'll write that to the file. -# def self.create(path, data = nil) -# start = Time.now -# Dir.create(path.split('/')[0..-2].join('/')) -# f = File.new(path, 'wb') -# f.write data if data && data.size > 0 -# f.close -# return Time.now - start -# end -# end -# -# # Dir class extensions -# class Dir -# class << Dir -# alias marin_delete delete -# end -# -# # Returns all files in the targeted path -# def self.get_files(path, recursive = true) -# return Dir.get_all(path, recursive).select { |path| File.file?(path) } -# end -# -# # Returns all directories in the targeted path -# def self.get_dirs(path, recursive = true) -# return Dir.get_all(path, recursive).select { |path| File.directory?(path) } -# end -# -# # Returns all files and directories in the targeted path -# def self.get_all(path, recursive = true) -# files = [] -# Dir.foreach(path) do |f| -# next if f == "." || f == ".." -# if File.directory?(path + "/" + f) && recursive -# files.concat(Dir.get_files(path + "/" + f)) -# end -# files << path + "/" + f -# end -# return files -# end -# -# # Deletes a directory and all files/directories within, unless non_empty is false -# def self.delete(path, non_empty = true) -# if non_empty -# for file in Dir.get_all(path) -# if File.directory?(file) -# Dir.delete(file, non_empty) -# elsif File.file?(file) -# File.delete(file) -# end -# end -# end -# marin_delete(path) -# end -# -# # Creates all directories that don't exist in the given path. -# def self.create(path) -# split = path.split('/') -# for i in 0...split.size -# Dir.mkdir(split[0..i].join('/')) unless File.directory?(split[0..i].join('/')) -# end -# end -# end -# -# -# Sprite class extensions -class Sprite - # Shorthand for initializing a bitmap by path, bitmap, or width/height: - # -> bmp("Graphics/Pictures/bag") - # -> bmp(32, 32) - # -> bmp(some_other_bitmap) - def bmp(arg1 = nil, arg2 = nil) - if arg1 - if arg2 - arg1 = Graphics.width if arg1 == -1 - arg2 = Graphics.height if arg2 == -1 - self.bitmap = Bitmap.new(arg1, arg2) - elsif arg1.is_a?(Bitmap) - self.bitmap = arg1.clone - else - self.bitmap = Bitmap.new(arg1) - end - else - return self.bitmap - end - end - - # Alternative to bmp(path): - # -> bmp = "Graphics/Pictures/bag" - def bmp=(arg1) - bmp(arg1) - end - - # Usage: - # -> [x] # Sets sprite.x to x - # -> [x,y] # Sets sprite.x to x and sprite.y to y - # -> [x,y,z] # Sets sprite.x to x and sprite.y to y and sprite.z to z - # -> [nil,y] # Sets sprite.y to y - # -> [nil,nil,z] # Sets sprite.z to z - # -> [x,nil,z] # Sets sprite.x to x and sprite.z to z - # Etc. - def xyz=(args) - self.x = args[0] || self.x - self.y = args[1] || self.y - self.z = args[2] || self.z - end - - # Returns the x, y, and z coordinates in the xyz=(args) format, [x,y,z] - def xyz - return [self.x, self.y, self.z] - end - - # Centers the sprite by setting the origin points to half the width and height - def center_origins - return if !self.bitmap - self.ox = self.bitmap.width / 2 - self.oy = self.bitmap.height / 2 - end - - # Returns the sprite's full width, taking zoom_x into account - def fullwidth - return self.bitmap.width.to_f * self.zoom_x - end - - # Returns the sprite's full height, taking zoom_y into account - def fullheight - return self.bitmap.height.to_f * self.zoom_y - end -end - -# -class TextSprite < Sprite - # Sets up the sprite and bitmap. You can also pass text to draw - # either an array of arrays, or an array containing the normal "parameters" - # for drawing text: - # [text,x,y,align,basecolor,shadowcolor] - def initialize(viewport = nil, text = nil, width = -1, height = -1) - super(viewport) - @width = width - @height = height - self.bmp(@width, @height) - pbSetSystemFont(self.bmp) - if text.is_a?(Array) - if text[0].is_a?(Array) - pbDrawTextPositions(self.bmp, text) - else - pbDrawTextPositions(self.bmp, [text]) - end - end - end - - # Clears the bitmap (and thus all drawn text) - def clear - self.bmp.clear - pbSetSystemFont(self.bmp) - end - - # You can also pass text to draw either an array of arrays, or an array - # containing the normal "parameters" for drawing text: - # [text,x,y,align,basecolor,shadowcolor] - def draw(text, clear = false) - self.clear if clear - if text[0].is_a?(Array) - pbDrawTextPositions(self.bmp, text) - else - pbDrawTextPositions(self.bmp, [text]) - end - end - - # Draws text with outline - # [text,x,y,align,basecolor,shadowcolor] - def draw_outline(text, clear = false) - self.clear if clear - if text[0].is_a?(Array) - for e in text - e[2] -= 224 - pbDrawOutlineText(self.bmp, e[1], e[2], 640, 480, e[0], e[4], e[5], e[3]) - end - else - e = text - e[2] -= 224 - pbDrawOutlineText(self.bmp, e[1], e[2], 640, 480, e[0], e[4], e[5], e[3]) - end - end - - # Draws and breaks a line if the width is exceeded - # [text,x,y,width,numlines,basecolor,shadowcolor] - def draw_ex(text, clear = false) - self.clear if clear - if text[0].is_a?(Array) - for e in text - drawTextEx(self.bmp, e[1], e[2], e[3], e[4], e[0], e[5], e[6]) - end - else - e = text - drawTextEx(self.bmp, e[1], e[2], e[3], e[4], e[0], e[5], e[6]) - end - end - - # Clears and disposes the sprite - def dispose - clear - super - end -end - -# A better alternative to the typical @sprites = {} -class SpriteHash - attr_reader :x - attr_reader :y - attr_reader :z - attr_reader :visible - attr_reader :opacity - - def initialize - @hash = {} - @x = 0 - @y = 0 - @z = 0 - @visible = true - @opacity = 255 - end - - # Returns the object in the specified key - def [](key) - key = key.to_sym if key.respond_to?(:to_sym) && !key.is_a?(Numeric) - return @hash[key] - end - - # Sets an object in specified key to the specified value - def []=(key, value) - key = key.to_sym if key.respond_to?(:to_sym) && !key.is_a?(Numeric) - add(key, value) - end - - # Returns the raw hash - def raw - return @hash - end - - # Returns the keys in the hash - def keys - return @hash.keys - end - - def length - return self.size; - end - - def count - return self.size; - end - - # Returns the amount of keys in the hash - def size - return @hash.keys.size - end - - # Clones the hash - def clone - return @hash.clone - end - - # Adds an object to the specified key - def add(key, value) - clear_disposed - key = key.to_sym if key.respond_to?(:to_sym) && !key.is_a?(Numeric) - @hash[key] if @hash[key] && @hash[key].respond_to?(:dispose) - @hash[key] = value - clear_disposed - end - - # Deletes an object in the specified key - def delete(key) - key = key.to_sym if key.respond_to?(:to_sym) && !key.is_a?(Numeric) - @hash[key] = nil - clear_disposed - end - - # Iterates over all sprites - def each - clear_disposed - @hash.each { |s| yield s[1] if block_given? } - end - - # Updates all sprites - def update - clear_disposed - for key in @hash.keys - @hash[key].update if @hash[key].respond_to?(:update) - end - end - - # Disposes all sprites - def dispose - clear_disposed - for key in @hash.keys - @hash[key].dispose if @hash[key].respond_to?(:dispose) - end - clear_disposed - end - - # Compatibility - def disposed? - return false - end - - # Changes x on all sprites - def x=(value) - clear_disposed - for key in @hash.keys - @hash[key].x += value - @x - end - @x = value - end - - # Changes y on all sprites - def y=(value) - clear_disposed - for key in @hash.keys - @hash[key].y += value - @y - end - @y = value - end - - # Changes z on all sprites - def z=(value) - clear_disposed - for key in @hash.keys - @hash[key].z += value - @z - end - @z = value - end - - # Changes visibility on all sprites - def visible=(value) - clear_disposed - for key in @hash.keys - @hash[key].visible = value - end - end - - # Changes opacity on all sprites - def opacity=(value) - clear_disposed - for key in @hash.keys - @hash[key].opacity += value - @opacity - end - @opacity = [0, value, 255].sort[1] - end - - # Fades out all sprites - def hide(frames = 16) - clear_disposed - frames.times do - Graphics.update - Input.update - for key in @hash.keys - @hash[key].opacity -= 255 / frames.to_f - end - end - @opacity = 0 - end - - # Fades in all sprites - def show(frames = 16) - clear_disposed - frames.times do - Graphics.update - Input.update - for key in @hash.keys - @hash[key].opacity += 255 / frames.to_f - end - end - @opacity = 255 - end - - # Deletes all disposed sprites from the hash - def clear_disposed - for key in @hash.keys - if (@hash[key].disposed? rescue true) - @hash[key] = nil - @hash.delete(key) - end - end - end - - # Renames the old key to the new key - def rename(old, new) - self[new] = self[old] - delete(old) - end -end - # class ByteWriter # def initialize(filename) # @file = File.new(filename, "wb") @@ -1019,7 +1019,7 @@ end # ] # end # end - +# # class Bitmap # def save_to_png(filename) # f = ByteWriter.new(filename) @@ -1078,209 +1078,209 @@ end # return nil # end # end - -# Stand-alone methods - -# Fades in a black overlay -def showBlk(n = 16) - return if $blkVp || $blk - $blkVp = Viewport.new(0, 0, Settings::SCREEN_WIDTH, Settings::SCREEN_HEIGHT) - $blkVp.z = 9999999 - $blk = Sprite.new($blkVp) - $blk.bmp(-1, -1) - $blk.bitmap.fill_rect(0, 0, Settings::SCREEN_WIDTH, Settings::SCREEN_HEIGHT, Color.new(0, 0, 0)) - $blk.opacity = 0 - for i in 0...(n + 1) - Graphics.update - Input.update - yield i if block_given? - $blk.opacity += 256 / n.to_f - end -end - -# Fades out and disposes a black overlay -def hideBlk(n = 16) - return if !$blk || !$blkVp - for i in 0...(n + 1) - Graphics.update - Input.update - yield i if block_given? - $blk.opacity -= 256 / n.to_f - end - $blk.dispose - $blk = nil - $blkVp.dispose - $blkVp = nil -end - -# Returns the percentage of exp the Pokémon has compared to the next level -# def pbGetE -# xpPercentage(pokemon) -# pokemon = pokemon.pokemon if pokemon.respond_to?("pokemon") -# startexp = PBExperience.pbGetStartExperience(pokemon.level, pokemon.growthrate) -# endexp = PBExperience.pbGetStartExperience(pokemon.level + 1, pokemon.growthrate) -# return (pokemon.exp - startexp).to_f / (endexp - startexp).to_f -# end - -# unless defined?(oldrand) -# alias oldrand rand -# def rand(a = nil, b = nil) -# if a.is_a?(Range) -# l = a.min -# u = a.max -# return l + oldrand(u - l + 1) -# elsif a.is_a?(Numeric) -# if b.is_a?(Numeric) -# return a + oldrand(b - a) -# else -# return oldrand(a) -# end -# elsif a.nil? -# if b -# return rand(b) -# else -# return oldrand(2) -# end -# end -# end -# end - -# Input module extensions -# module Input -# # Returns true if any of the buttons below are pressed -# def self.any? -# return true if defined?(Game_Mouse) && $mouse && $mouse.click? -# keys = [Input::C,Input::B,Input::LEFT,Input::RIGHT,Input::UP,Input::DOWN, -# # 0-9, a-z -# 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44, -# 0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x50,0x51,0x52,0x53, -# 0x54,0x55,0x56,0x57,0x58,0x59,0x5A] -# for key in keys -# return true if Input.triggerex?(key) -# end -# return false -# end -# end - # -# if SPECIAL_ERRORS +# # Stand-alone methods # -# MessageBox = Win32API.new('user32', 'MessageBox', ['I','P','P','I'], 'I') -# -# def p_msg(msg, title = nil, icon = nil) -# case icon -# when :error, :err -# uType = 0x10 -# title ||= "Error" -# when :q, :question, :ask -# uType = 0x20 -# title ||= "Question" -# when :warning, :warn -# uType = 0x30 -# title ||= "Warning" -# when :inform, :info, :information -# uType = 0x40 -# title ||= "Info" -# else -# uType = 0 -# title ||= "Pokémon" -# end -# hwnd = Win32API.pbFindRgssWindow +# # Fades in a black overlay +# def showBlk(n = 16) +# return if $blkVp || $blk +# $blkVp = Viewport.new(0, 0, Settings::SCREEN_WIDTH, Settings::SCREEN_HEIGHT) +# $blkVp.z = 9999999 +# $blk = Sprite.new($blkVp) +# $blk.bmp(-1, -1) +# $blk.bitmap.fill_rect(0, 0, Settings::SCREEN_WIDTH, Settings::SCREEN_HEIGHT, Color.new(0, 0, 0)) +# $blk.opacity = 0 +# for i in 0...(n + 1) # Graphics.update -# t = Thread.new { MessageBox.call(hwnd, msg, title, uType); Thread.exit } -# while t.status -# Graphics.update -# end +# Input.update +# yield i if block_given? +# $blk.opacity += 256 / n.to_f # end +# end # -# def p_err(ex = $!, message = nil) -# if $Rescue -# raise -# return -# end -# if ex.is_a?(String) -# ex = RuntimeError.new ex -# elsif ex.is_a?(Class) -# ex = ex.new -# end -# trace = ex.backtrace || caller -# script_id = trace[0][7..-1].split(':')[0].to_i -# script = $RGSS_SCRIPTS[script_id][1] -# line = trace[0].split(':')[1].to_i -# msg = "Script '[#{script}]' line #{line}: #{ex.class} occurred." -# if message || ex.message != ex.class.to_s -# if message -# msg << "\n\n#{message}" -# else -# msg << "\n\n#{ex.message}" -# message = ex.message -# end -# end -# showtrace = (trace.size > 2) -# showtrace = false if !DOUBLE_BACKTRACE && message.include?(':in `') -# if showtrace -# msg << "\n\n" -# msg << trace[0...BACKTRACE_MAX_SIZE].map do |e| -# sID = e.split(':')[0][7..-1] -# if sID && sID.numeric? -# sID = sID.to_i -# s = "'" + $RGSS_SCRIPTS[sID][1] + "'" -# else -# s = "eval" -# end -# line = e.split(':')[1].to_i -# code = e.split(':')[2..-1].join(':') -# str = "from #{s} line #{line}" -# str << " #{code}" unless code.empty? -# next str -# end.join("\n") -# end -# p_msg(msg, "Error", :err) -# Kernel.exit! true +# # Fades out and disposes a black overlay +# def hideBlk(n = 16) +# return if !$blk || !$blkVp +# for i in 0...(n + 1) +# Graphics.update +# Input.update +# yield i if block_given? +# $blk.opacity -= 256 / n.to_f # end +# $blk.dispose +# $blk = nil +# $blkVp.dispose +# $blkVp = nil +# end # -# def p_info(msg, title = nil) -# p_msg(msg, title, :info) -# end +# # Returns the percentage of exp the Pokémon has compared to the next level +# # def pbGetE +# # xpPercentage(pokemon) +# # pokemon = pokemon.pokemon if pokemon.respond_to?("pokemon") +# # startexp = PBExperience.pbGetStartExperience(pokemon.level, pokemon.growthrate) +# # endexp = PBExperience.pbGetStartExperience(pokemon.level + 1, pokemon.growthrate) +# # return (pokemon.exp - startexp).to_f / (endexp - startexp).to_f +# # end # -# def p_warn(msg, title = nil) -# p_msg(msg, title, :warn) -# end +# # unless defined?(oldrand) +# # alias oldrand rand +# # def rand(a = nil, b = nil) +# # if a.is_a?(Range) +# # l = a.min +# # u = a.max +# # return l + oldrand(u - l + 1) +# # elsif a.is_a?(Numeric) +# # if b.is_a?(Numeric) +# # return a + oldrand(b - a) +# # else +# # return oldrand(a) +# # end +# # elsif a.nil? +# # if b +# # return rand(b) +# # else +# # return oldrand(2) +# # end +# # end +# # end +# # end # -# def p_question(msg, title = nil) -# p_msg(msg, title, :question) -# end +# # Input module extensions +# # module Input +# # # Returns true if any of the buttons below are pressed +# # def self.any? +# # return true if defined?(Game_Mouse) && $mouse && $mouse.click? +# # keys = [Input::C,Input::B,Input::LEFT,Input::RIGHT,Input::UP,Input::DOWN, +# # # 0-9, a-z +# # 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44, +# # 0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x50,0x51,0x52,0x53, +# # 0x54,0x55,0x56,0x57,0x58,0x59,0x5A] +# # for key in keys +# # return true if Input.triggerex?(key) +# # end +# # return false +# # end +# # end # - - +# # +# # if SPECIAL_ERRORS +# # +# # MessageBox = Win32API.new('user32', 'MessageBox', ['I','P','P','I'], 'I') +# # +# # def p_msg(msg, title = nil, icon = nil) +# # case icon +# # when :error, :err +# # uType = 0x10 +# # title ||= "Error" +# # when :q, :question, :ask +# # uType = 0x20 +# # title ||= "Question" +# # when :warning, :warn +# # uType = 0x30 +# # title ||= "Warning" +# # when :inform, :info, :information +# # uType = 0x40 +# # title ||= "Info" +# # else +# # uType = 0 +# # title ||= "Pokémon" +# # end +# # hwnd = Win32API.pbFindRgssWindow +# # Graphics.update +# # t = Thread.new { MessageBox.call(hwnd, msg, title, uType); Thread.exit } +# # while t.status +# # Graphics.update +# # end +# # end +# # +# # def p_err(ex = $!, message = nil) +# # if $Rescue +# # raise +# # return +# # end +# # if ex.is_a?(String) +# # ex = RuntimeError.new ex +# # elsif ex.is_a?(Class) +# # ex = ex.new +# # end +# # trace = ex.backtrace || caller +# # script_id = trace[0][7..-1].split(':')[0].to_i +# # script = $RGSS_SCRIPTS[script_id][1] +# # line = trace[0].split(':')[1].to_i +# # msg = "Script '[#{script}]' line #{line}: #{ex.class} occurred." +# # if message || ex.message != ex.class.to_s +# # if message +# # msg << "\n\n#{message}" +# # else +# # msg << "\n\n#{ex.message}" +# # message = ex.message +# # end +# # end +# # showtrace = (trace.size > 2) +# # showtrace = false if !DOUBLE_BACKTRACE && message.include?(':in `') +# # if showtrace +# # msg << "\n\n" +# # msg << trace[0...BACKTRACE_MAX_SIZE].map do |e| +# # sID = e.split(':')[0][7..-1] +# # if sID && sID.numeric? +# # sID = sID.to_i +# # s = "'" + $RGSS_SCRIPTS[sID][1] + "'" +# # else +# # s = "eval" +# # end +# # line = e.split(':')[1].to_i +# # code = e.split(':')[2..-1].join(':') +# # str = "from #{s} line #{line}" +# # str << " #{code}" unless code.empty? +# # next str +# # end.join("\n") +# # end +# # p_msg(msg, "Error", :err) +# # Kernel.exit! true +# # end +# # +# # def p_info(msg, title = nil) +# # p_msg(msg, title, :info) +# # end +# # +# # def p_warn(msg, title = nil) +# # p_msg(msg, title, :warn) +# # end +# # +# # def p_question(msg, title = nil) +# # p_msg(msg, title, :question) +# # end +# # # -# else # -# def p_err(*args) -# raise *args -# end +# # +# # else +# # +# # def p_err(*args) +# # raise *args +# # end +# # +# # end # if SPECIAL_ERRORS # -# end # if SPECIAL_ERRORS - -# def pbGetActiveEventPage(event, mapid = nil) -# mapid ||= event.map.map_id if event.respond_to?(:map) -# pages = (event.is_a?(RPG::Event) ? event.pages : event.instance_eval { @event.pages }) -# for i in 0...pages.size -# c = pages[pages.size - 1 - i].condition -# ss = !(c.self_switch_valid && !$game_self_switches[[mapid, -# event.id,c.self_switch_ch]]) -# sw1 = !(c.switch1_valid && !$game_switches[c.switch1_id]) -# sw2 = !(c.switch2_valid && !$game_switches[c.switch2_id]) -# var = true -# if c.variable_valid -# if !c.variable_value || !$game_variables[c.variable_id].is_a?(Numeric) || -# $game_variables[c.variable_id] < c.variable_value -# var = false -# end -# end -# if ss && sw1 && sw2 && var # All conditions are met -# return pages[pages.size - 1 - i] -# end -# end -# return nil -# end \ No newline at end of file +# # def pbGetActiveEventPage(event, mapid = nil) +# # mapid ||= event.map.map_id if event.respond_to?(:map) +# # pages = (event.is_a?(RPG::Event) ? event.pages : event.instance_eval { @event.pages }) +# # for i in 0...pages.size +# # c = pages[pages.size - 1 - i].condition +# # ss = !(c.self_switch_valid && !$game_self_switches[[mapid, +# # event.id,c.self_switch_ch]]) +# # sw1 = !(c.switch1_valid && !$game_switches[c.switch1_id]) +# # sw2 = !(c.switch2_valid && !$game_switches[c.switch2_id]) +# # var = true +# # if c.variable_valid +# # if !c.variable_value || !$game_variables[c.variable_id].is_a?(Numeric) || +# # $game_variables[c.variable_id] < c.variable_value +# # var = false +# # end +# # end +# # if ss && sw1 && sw2 && var # All conditions are met +# # return pages[pages.size - 1 - i] +# # end +# # end +# # return nil +# # end \ No newline at end of file diff --git a/Data/Scripts/049_Compatibility/UtilityMethods.rb b/Data/Scripts/049_Compatibility/UtilityMethods.rb index b65a7e32b..00b160940 100644 --- a/Data/Scripts/049_Compatibility/UtilityMethods.rb +++ b/Data/Scripts/049_Compatibility/UtilityMethods.rb @@ -1,4 +1,139 @@ def pbGetTerrainTag() return $game_player.pbTerrainTag().id +end + + +def getLevelAtWhichSpeciesEvolved(species) + levelAtWhichCurrentSpeciesEvolved=1 + evosArray = species.get_family_evolutions + for entry in evosArray + if entry[0] == species.id && entry[1] == :Level + if entry[2] && entry[2] < levelAtWhichCurrentSpeciesEvolved + levelAtWhichCurrentSpeciesEvolved = entry[2] + end + end + end +end + + +def getNextEvolutions(species, evolutions) + if !evolutions + evolutions = species.get_evolutions + end + + nextEvolutions = [] + currentLowestEvolution = nil + for evolution in evolutions + if evolution[1]== :Level + evoLevel = evolution[2] + currentLowestLevel = currentLowestEvolution ? currentLowestEvolution[2] : Settings::MAXIMUM_LEVEL + if evoLevel < currentLowestLevel + currentLowestEvolution = evolution + end + else + nextEvolutions << evolution + end + end + if currentLowestEvolution != nil + nextEvolutions << currentLowestEvolution + end + return nextEvolutions +end + +def extract_custom_sprites_that_evolve_into_non_customs(includeOnlyNextEvos=true) + outfile = "nonCustomEvos.txt" + customSpecies = getCustomSpeciesList() + + alreadyWritten = [] + + File.open(outfile,"wb") { |f| + for dexNum in customSpecies + species = GameData::Species.get(dexNum) + dex_body = getBodyID(species) + dex_head = getHeadID(species,dex_body) + + evolutions = species.get_evolutions + nextEvolutions=evolutions + if includeOnlyNextEvos + nextEvolutions = getNextEvolutions(species,evolutions) + end + + next if nextEvolutions.empty? + for evolution in nextEvolutions + evoSpecies = evolution[0] + if !customSpriteExists(evoSpecies) && !alreadyWritten.include?(evoSpecies) + body = getBodyID(evoSpecies) + head = getHeadID(evoSpecies,body) + f.write((evoSpecies.to_s) +";") + f.write((head.to_s) +";") + f.write(".;") + f.write((body.to_s) +";") + f.write("evolves from ;") + f.write(species.id.to_s) + ";" + f.write((dex_head.to_s) +";") + f.write(".;") + f.write((dex_body.to_s) +";") + f.write("\n") + + + alreadyWritten << evoSpecies + end + end + end + } + +end + + + +def extract_incomplete_evolution_lines + outfile = "incompleteLines.txt" + pokeList = [] + for i in NB_POKEMON+1..PBSpecies.maxValue + pokeList << i + end + + to_skip=[] + + File.open(outfile,"wb") { |f| + for i in pokeList + next if to_skip.include?(i) + + species = GameData::Species.get(i) + evolutions = [] + for evoArray in species.get_family_evolutions + evolutions << evoArray[1] + end + + + non_customs = [] + nbCustoms=0 + for stage in evolutions + if !customSpriteExists(stage) + non_customs << stage + else + nbCustoms+=1 + end + end + + + #write non customs + if !non_customs.empty? && nbCustoms > 0 + for missing_sprite in non_customs + f.write((missing_sprite.to_s) +";") + end + f.write((missing_sprite.to_s) +"\n") + end + + #remove evos from list + for evo in evolutions + species = GameData::Species.get(evo) + to_skip << species.id_number + end + end + + + + } end \ No newline at end of file diff --git a/Data/Scripts/050_AddOns/FusionSprites.rb b/Data/Scripts/050_AddOns/FusionSprites.rb index 1086bed11..55466299e 100644 --- a/Data/Scripts/050_AddOns/FusionSprites.rb +++ b/Data/Scripts/050_AddOns/FusionSprites.rb @@ -25,10 +25,36 @@ module GameData MINIMUM_OFFSET=40 ADDITIONAL_OFFSET_WHEN_TOO_CLOSE=40 MINIMUM_DEX_DIF=20 + def self.calculateShinyHueOffset(dex_number, isBodyShiny = false, isHeadShiny = false) + if dex_number <= NB_POKEMON + if SHINY_COLOR_OFFSETS[dex_number] + return SHINY_COLOR_OFFSETS[dex_number] + end + body_number = dex_number + head_number=dex_number + + else + body_number = getBodyID(dex_number) + head_number=getHeadID(dex_number,body_number) + end + if isBodyShiny && isHeadShiny && SHINY_COLOR_OFFSETS[body_number] && SHINY_COLOR_OFFSETS[head_number] + offset = SHINY_COLOR_OFFSETS[body_number] + SHINY_COLOR_OFFSETS[head_number] + elsif isHeadShiny && SHINY_COLOR_OFFSETS[head_number] + offset = SHINY_COLOR_OFFSETS[head_number] + elsif isBodyShiny && SHINY_COLOR_OFFSETS[body_number] + offset = SHINY_COLOR_OFFSETS[body_number] + else + offset = calculateShinyHueOffsetDefaultMethod(body_number,head_number,dex_number,isBodyShiny,isHeadShiny) + end + return offset + end + + + def self.calculateShinyHueOffsetDefaultMethod(body_number,head_number,dex_number, isBodyShiny = false, isHeadShiny = false) dex_offset = dex_number - body_number = getBodyID(dex_number) - head_number=getHeadID(dex_number,body_number) + #body_number = getBodyID(dex_number) + #head_number=getHeadID(dex_number,body_number) dex_diff = (body_number-head_number).abs if isBodyShiny && isHeadShiny dex_offset = dex_number diff --git a/Data/Scripts/050_AddOns/MapExporter.rb b/Data/Scripts/050_AddOns/MapExporter.rb new file mode 100644 index 000000000..c9dc87e5c --- /dev/null +++ b/Data/Scripts/050_AddOns/MapExporter.rb @@ -0,0 +1,189 @@ +# #==============================================================================# +# # Map Exporter # +# # by Marin # +# #==============================================================================# +# # Manually export a map using `pbExportMap(id)`, or go into the Debug menu and # +# # choose the `Export a Map` option that is now in there. # +# # # +# # `pbExportMap(id, options)`, where `options` is an array that can contain: # +# # - :events -> This will alsoEXPORTED_FILENAME = "export/" +# # +# # def exportAllMaps +# # options = [:events] +# # for id in 1..768 +# # pbExportMap(id, options) +# # end +# # end export all events present on the map # +# # - :player -> This will also export the player if they're on that map # +# # `id` can be nil, which case it will use the current map the player is on. # +# #==============================================================================# +# # Please give credit when using this. # +# #==============================================================================# +# +# # This is where the map will be exported to once it has been created. +# # If this file already exists, it is overwritten. +# ExportedMapFilename = "export/" +# +# def exportAllMaps +# options = [:events] +# for id in 1..768 +# begin +# pbExportMap(id,options) +# rescue +# echo "error in " +(id.to_s) +"\n" +# end +# end +# end +# +# +# def pbExportMap(id = nil, options = []) +# MarinMapExporter.new(id, options) +# end +# +# def pbExportAMap +# vp = Viewport.new(0, 0, Graphics.width, Graphics.height) +# vp.z = 99999 +# s = Sprite.new(vp) +# s.bitmap = Bitmap.new(Graphics.width, Graphics.height) +# s.bitmap.fill_rect(0, 0, Graphics.width, Graphics.height, Color.new(0,0,0)) +# mapid = pbListScreen(_INTL("Export Map"),MapLister.new(pbDefaultMap)) +# if mapid > 0 +# player = $game_map.map_id == mapid +# if player +# cmds = ["Export", "[ ] Events", "[ ] Player", "Cancel"] +# else +# cmds = ["Export", "[ ] Events", "Cancel"] +# end +# cmd = 0 +# loop do +# cmd = pbShowCommands(nil,cmds,-1,cmd) +# if cmd == 0 +# Graphics.update +# options = [] +# options << :events if cmds[1].split("")[1] == "X" +# options << :player if player && cmds[2].split("")[1] == "X" +# msgwindow = Window_AdvancedTextPokemon.newWithSize( +# _INTL("Saving... Please be patient."), +# 0, Graphics.height - 96, Graphics.width, 96, vp +# ) +# msgwindow.setSkin(MessageConfig.pbGetSpeechFrame) +# Graphics.update +# pbExportMap(mapid, options) +# msgwindow.setText(_INTL("Successfully exported the map.")) +# 60.times { Graphics.update; Input.update } +# pbDisposeMessageWindow(msgwindow) +# break +# elsif cmd == 1 +# if cmds[1].split("")[1] == " " +# cmds[1] = "[X] Events" +# else +# cmds[1] = "[ ] Events" +# end +# elsif cmd == 2 && player +# if cmds[2].split("")[1] == " " +# cmds[2] = "[X] Player" +# else +# cmds[2] = "[ ] Player" +# end +# elsif cmd == 3 || cmd == 2 && !player || cmd == -1 +# break +# end +# end +# end +# s.bitmap.dispose +# s.dispose +# vp.dispose +# end +# +# DebugMenuCommands.register("exportmap", { +# "parent" => "fieldmenu", +# "name" => _INTL("Export a Map"), +# "description" => _INTL("Choose a map to export it to a PNG."), +# "effect" => proc { |sprites, viewport| +# pbExportAMap +# } +# }) +# +# class MarinMapExporter +# def initialize(id = nil, options = []) +# mapinfos = load_data("Data/MapInfos.rxdata") +# filename = id.to_s + "_" + mapinfos[id].name +# +# +# +# @id = id || $game_map.map_id +# @options = options +# @data = load_data("Data/Map#{@id.to_digits}.rxdata") +# @tiles = @data.data +# @result = Bitmap.new(32 * @tiles.xsize, 32 * @tiles.ysize) +# @tilesetdata = load_data("Data/Tilesets.rxdata") +# tilesetname = @tilesetdata[@data.tileset_id].tileset_name +# @tileset = Bitmap.new("Graphics/Tilesets/#{tilesetname}") +# @autotiles = @tilesetdata[@data.tileset_id].autotile_names +# .filter { |e| e && e.size > 0 } +# .map { |e| Bitmap.new("Graphics/Autotiles/#{e}") } +# for z in 0..2 +# for y in 0...@tiles.ysize +# for x in 0...@tiles.xsize +# id = @tiles[x, y, z] +# next if id == 0 +# if id < 384 # Autotile +# build_autotile(@result, x * 32, y * 32, id) +# else # Normal tile +# @result.blt(x * 32, y * 32, @tileset, +# Rect.new(32 * ((id - 384) % 8),32 * ((id - 384) / 8).floor,32,32)) +# end +# end +# end +# end +# if @options.include?(:events) +# keys = @data.events.keys.sort { |a, b| @data.events[a].y <=> @data.events[b].y } +# keys.each do |id| +# event = @data.events[id] +# page = pbGetActiveEventPage(event, @id) +# if page && page.graphic && page.graphic.character_name && page.graphic.character_name.size > 0 +# bmp = Bitmap.new("Graphics/Characters/#{page.graphic.character_name}") +# if bmp +# bmp = bmp.clone +# bmp.hue_change(page.graphic.character_hue) unless page.graphic.character_hue == 0 +# ex = bmp.width / 4 * page.graphic.pattern +# ey = bmp.height / 4 * (page.graphic.direction / 2 - 1) +# @result.blt(event.x * 32 + 16 - bmp.width / 8, (event.y + 1) * 32 - bmp.height / 4, bmp, +# Rect.new(ex, ey, bmp.width / 4, bmp.height / 4)) +# end +# bmp = nil +# end +# end +# end +# if @options.include?(:player) && $game_map.map_id == @id && $game_player.character_name && +# $game_player.character_name.size > 0 +# bmp = Bitmap.new("Graphics/Characters/#{$game_player.character_name}") +# dir = $game_player.direction +# @result.blt($game_player.x * 32 + 16 - bmp.width / 8, ($game_player.y + 1) * 32 - bmp.height / 4, +# bmp, Rect.new(0, bmp.height / 4 * (dir / 2 - 1), bmp.width / 4, bmp.height / 4)) +# end +# @result.save_to_png(ExportedMapFilename + filename + ".png") +# echo (id.to_s) +"\n" +# Input.update +# end +# +# def build_autotile(bitmap, x, y, id) +# autotile = @autotiles[id / 48 - 1] +# return unless autotile +# if autotile.height == 32 +# bitmap.blt(x,y,autotile,Rect.new(0,0,32,32)) +# else +# id %= 48 +# tiles = CustomTilemap::Autotiles[id >> 3][id & 7] +# src = Rect.new(0,0,0,0) +# halfTileWidth = halfTileHeight = halfTileSrcWidth = halfTileSrcHeight = 32 >> 1 +# for i in 0...4 +# tile_position = tiles[i] - 1 +# src.set((tile_position % 6) * halfTileSrcWidth, +# (tile_position / 6) * halfTileSrcHeight, halfTileSrcWidth, halfTileSrcHeight) +# bitmap.blt(i % 2 * halfTileWidth + x, i / 2 * halfTileHeight + y, +# autotile, src) +# end +# end +# end +# end \ No newline at end of file diff --git a/Data/Scripts/050_AddOns/ShinyColorOffsets.rb b/Data/Scripts/050_AddOns/ShinyColorOffsets.rb new file mode 100644 index 000000000..25ae0e376 --- /dev/null +++ b/Data/Scripts/050_AddOns/ShinyColorOffsets.rb @@ -0,0 +1,422 @@ +SHINY_COLOR_OFFSETS = { + 1 => -30, + 2 => -85, + 3 => -50, + 4 => 40, + 5 => 60, + 6 => 130, + 7 => 25, + 8 => 15, + 9 => 50, + 10 => -50, + 11 => -80, + 12 => 95, + #13 => -1, + #14 => -1, + #15 => -1, + #16 => -1, + #17 => -1, + #18 => -1, + #19 => -1, + #20 => -1, + #21 => -1, + #22 => -1, + #23 => -1, + #24 => -1, + #25 => -1, + #26 => -1, + #27 => -1, + #28 => -1, + #29 => -1, + #30 => -1, + #31 => -1, + #32 => -1, + #33 => -1, + #34 => -1, + #35 => -1, + #36 => -1, + #37 => -1, + #38 => -1, + #39 => -1, + #40 => -1, + #41 => -1, + #42 => -1, + #43 => -1, + #44 => -1, + #45 => -1, + #46 => -1, + #47 => -1, + #48 => -1, + #49 => -1, + #50 => -1, + #51 => -1, + #52 => -1, + #53 => -1, + #54 => -1, + #55 => -1, + #56 => -1, + #57 => -1, + #58 => -1, + #59 => -1, + #60 => -1, + #61 => -1, + #62 => -1, + #63 => -1, + #64 => -1, + #65 => -1, + #66 => -1, + #67 => -1, + #68 => -1, + #69 => -1, + #70 => -1, + #71 => -1, + #72 => -1, + #73 => -1, + #74 => -1, + #75 => -1, + #76 => -1, + #77 => -1, + #78 => -1, + #79 => -1, + #80 => -1, + #81 => -1, + #82 => -1, + #83 => -1, + #84 => -1, + #85 => -1, + #86 => -1, + #87 => -1, + #88 => -1, + #89 => -1, + #90 => -1, + #91 => -1, + #92 => -1, + #93 => -1, + #94 => -1, + #95 => -1, + #96 => -1, + #97 => -1, + #98 => -1, + #99 => -1, + #100 => -1, + #101 => -1, + #102 => -1, + #103 => -1, + #104 => -1, + #105 => -1, + #106 => -1, + #107 => -1, + #108 => -1, + #109 => -1, + #110 => -1, + #111 => -1, + #112 => -1, + #113 => -1, + #114 => -1, + #115 => -1, + #116 => -1, + #117 => -1, + #118 => -1, + #119 => -1, + #120 => -1, + #121 => -1, + #122 => -1, + #123 => -1, + #124 => -1, + #125 => -1, + #126 => -1, + #127 => -1, + #128 => -1, + 129 => 36, + 130 => 150, + #131 => -1, + #132 => -1, + #133 => -1, + #134 => -1, + #135 => -1, + #136 => -1, + #137 => -1, + #138 => -1, + #139 => -1, + #140 => -1, + #141 => -1, + #142 => -1, + #143 => -1, + #144 => -1, + #145 => -1, + #146 => -1, + #147 => -1, + #148 => -1, + #149 => -1, + #150 => -1, + #151 => -1, + #152 => -1, + #153 => -1, + #154 => -1, + #155 => -1, + #156 => -1, + #157 => -1, + #158 => -1, + #159 => -1, + #160 => -1, + #161 => -1, + #162 => -1, + #163 => -1, + #164 => -1, + #165 => -1, + #166 => -1, + #167 => -1, + #168 => -1, + #169 => -1, + #170 => -1, + #171 => -1, + #172 => -1, + #173 => -1, + #174 => -1, + #175 => -1, + #176 => -1, + #177 => -1, + #178 => -1, + #179 => -1, + #180 => -1, + #181 => -1, + #182 => -1, + #183 => -1, + #184 => -1, + #185 => -1, + #186 => -1, + #187 => -1, + #188 => -1, + #189 => -1, + #190 => -1, + #191 => -1, + #192 => -1, + #193 => -1, + #194 => -1, + #195 => -1, + #196 => -1, + #197 => -1, + #198 => -1, + #199 => -1, + #200 => -1, + #201 => -1, + #202 => -1, + #203 => -1, + #204 => -1, + #205 => -1, + #206 => -1, + #207 => -1, + #208 => -1, + #209 => -1, + #210 => -1, + #211 => -1, + #212 => -1, + #213 => -1, + #214 => -1, + #215 => -1, + #216 => -1, + #217 => -1, + #218 => -1, + #219 => -1, + #220 => -1, + #221 => -1, + #222 => -1, + #223 => -1, + #224 => -1, + #225 => -1, + #226 => -1, + #227 => -1, + #228 => -1, + #229 => -1, + #230 => -1, + #231 => -1, + #232 => -1, + #233 => -1, + #234 => -1, + #235 => -1, + #236 => -1, + #237 => -1, + #238 => -1, + #239 => -1, + #240 => -1, + #241 => -1, + #242 => -1, + #243 => -1, + #244 => -1, + #245 => -1, + #246 => -1, + #247 => -1, + #248 => -1, + #249 => -1, + #250 => -1, + #251 => -1, + #252 => -1, + #253 => -1, + #254 => -1, + #255 => -1, + #256 => -1, + #257 => -1, + #258 => -1, + #259 => -1, + #260 => -1, + #261 => -1, + #262 => -1, + #263 => -1, + #264 => -1, + #265 => -1, + #266 => -1, + #267 => -1, + #268 => -1, + #269 => -1, + #270 => -1, + #271 => -1, + #272 => -1, + #273 => -1, + #274 => -1, + #275 => -1, + #276 => -1, + #277 => -1, + #278 => -1, + #279 => -1, + #280 => -1, + #281 => -1, + #282 => -1, + #283 => -1, + #284 => -1, + #285 => -1, + #286 => -1, + #287 => -1, + #288 => -1, + #289 => -1, + #290 => -1, + #291 => -1, + #292 => -1, + #293 => -1, + #294 => -1, + #295 => -1, + #296 => -1, + #297 => -1, + #298 => -1, + #299 => -1, + #300 => -1, + #301 => -1, + #302 => -1, + #303 => -1, + #304 => -1, + #305 => -1, + #306 => -1, + #307 => -1, + #308 => -1, + #309 => -1, + #310 => -1, + #311 => -1, + #312 => -1, + #313 => -1, + #314 => -1, + #315 => -1, + #316 => -1, + #317 => -1, + #318 => -1, + #319 => -1, + #320 => -1, + #321 => -1, + #322 => -1, + #323 => -1, + #324 => -1, + #325 => -1, + #326 => -1, + #327 => -1, + #328 => -1, + #329 => -1, + #330 => -1, + #331 => -1, + #332 => -1, + #333 => -1, + #334 => -1, + #335 => -1, + #336 => -1, + #337 => -1, + #338 => -1, + #339 => -1, + #340 => -1, + #341 => -1, + 342 => 50, + #343 => -1, + #344 => -1, + #345 => -1, + #346 => -1, + #347 => -1, + #348 => -1, + #349 => -1, + #350 => -1, + #351 => -1, + #352 => -1, + #353 => -1, + #354 => -1, + #355 => -1, + #356 => -1, + #357 => -1, + #358 => -1, + #359 => -1, + #360 => -1, + #361 => -1, + #362 => -1, + #363 => -1, + #364 => -1, + #365 => -1, + #366 => -1, + #367 => -1, + #368 => -1, + #369 => -1, + #370 => -1, + #371 => -1, + #372 => -1, + #373 => -1, + #374 => -1, + #375 => -1, + #376 => -1, + #377 => -1, + #378 => -1, + #379 => -1, + #380 => -1, + #381 => -1, + #382 => -1, + #383 => -1, + #384 => -1, + #385 => -1, + #386 => -1, + #387 => -1, + #388 => -1, + #389 => -1, + #390 => -1, + #391 => -1, + #392 => -1, + #393 => -1, + #394 => -1, + #395 => -1, + #396 => -1, + #397 => -1, + #398 => -1, + #399 => -1, + #400 => -1, + #401 => -1, + #402 => -1, + #403 => -1, + #404 => -1, + #405 => -1, + #406 => -1, + #407 => -1, + #408 => -1, + #409 => -1, + #410 => -1, + #411 => -1, + #412 => -1, + #413 => -1, + #414 => -1, + #415 => -1, + #416 => -1, + #417 => -1, + #418 => -1, + #419 => -1, + #420 => -1, +} diff --git a/Data/Scripts/050_AddOns/k_scriptsUtils.rb b/Data/Scripts/050_AddOns/k_scriptsUtils.rb new file mode 100644 index 000000000..662114783 --- /dev/null +++ b/Data/Scripts/050_AddOns/k_scriptsUtils.rb @@ -0,0 +1,1167 @@ +# # These two settings only apply if SPECIAL_ERRORS is TRUE +# +# DOUBLE_BACKTRACE = false # The interpreter already contains a small +# # backtrace for errors in events and such by default. +# # Settings this to false will not show the custom +# # backtrace. +# +# BACKTRACE_MAX_SIZE = 12 # The backtrace can go all the way from the very first +# # call to the very last call. This is the limit as far +# # as it can go back, because you could have a massive +# # backtrace otherwise. +# +# +# class Object +# def get_variables +# return self.instance_variables.map { |v| [v,self.method(v.to_s.gsub(/@/, "").to_sym).call] } +# end +# +# def set_variables(vars) +# vars.each do |v| +# self.method((v[0].to_s.gsub(/@/, "") + "=").to_sym).call(v[1]) +# end +# end +# end +# +# # E.g. PokeBattle_Pokemon -> to_sym -> :PokeBattle_Pokemon +# class Class +# def to_sym +# return self.to_s.to_sym +# end +# end +# +# class NilClass +# def empty? +# return true +# end +# +# def numeric? +# return false +# end +# end +# +# class Numeric +# # Formats the number nicely (e.g. 1234567890 -> format() -> 1,234,567,890) +# def format(separator = ',') +# a = self.to_s.split('').reverse.breakup(3) +# return a.map { |e| e.join('') }.join(separator).reverse +# end +# +# # Makes sure the returned string is at least n characters long +# # (e.g. 4 -> to_digits -> "004") +# # (e.g. 19 -> to_digits -> "019") +# # (e.g. 123 -> to_digits -> "123") +# def to_digits(n = 3) +# str = self.to_s +# return str if str.size >= n +# ret = "" +# (n - str.size).times { ret += "0" } +# return ret + str +# end +# +# # n root of self. Defaults to 2 => square root. +# def root(n = 2) +# return (self ** (1.0 / n)) +# end +# +# # Factorial +# # 4 -> fact -> (4 * 3 * 2 * 1) -> 24 +# def fact +# raise ArgumentError, "Cannot execute factorial on negative numerics" if self < 0 +# tot = 1 +# for i in 2..self +# tot *= i +# end +# return tot +# end +# +# # Combinations +# def ncr(k) +# return (self.fact / (k.fact * (self - k).fact)) +# end +# +# # k permutations of n (self) +# def npr(k) +# return (self.fact / (self - k).fact) +# end +# +# # Converts number to binary number (returns as string) +# def to_b +# return self.to_s(2) +# end +# +# def empty? +# return false +# end +# +# def numeric? +# return true +# end +# end +# +# class NilClass +# def numeric? +# return false +# end +# end +# +# # Calculates the total amount of elements in an Enumerable. Example: +# # ["one","two","three"].fullsize #=> 11 +# module Enumerable +# def fullsize +# n = 0 +# for e in self +# if e.is_a?(String) +# n += e.size +# elsif e.respond_to?(:fullsize) +# n += e.fullsize +# elsif e.respond_to?(:size) && !e.is_a?(Numeric) +# n += e.size +# else +# n += 1 +# end +# end +# return n +# end +# end +# +# class Array +# # Returns a random element of the array +# def random +# return self[Object.method(:rand).call(self.size)] +# end +# +# # Returns whether or not the array is empty. +# def empty? +# return self.size == 0 +# end +# +# # Shuffles the order of the array +# def shuffle +# indexes = [] +# new = [] +# while new.size != self.size +# # Weird way of calling rand for compatibility +# # with Luka's scripting utilities +# i = Object.method(:rand).call(self.size) +# if !indexes.include?(i) +# indexes << i +# new << self[i] +# end +# end +# return new +# end +# +# # Shuffles the order of the array and replaces itself +# def shuffle! +# self.replace(shuffle) +# end +# +# # Breaks the array up every n elements +# def breakup(n) +# ret = [] +# for i in 0...self.size +# ret[(i / n).floor] ||= [] +# ret[(i / n).floor] << self[i] +# end +# return ret +# end +# +# # Breaks the array up every n elements and replaces itself +# def breakup!(n) +# self.replace(breakup(n)) +# end +# +# # Swaps two elements' indexes +# def swap(index1, index2) +# new = self.clone +# tmp = new[index2].clone +# new[index2] = new[index1] +# new[index1] = tmp +# return new +# end +# +# # Swaps two elements' indexes and replaces itself +# def swap!(index1, index2) +# self.replace(swap(index1, index2)) +# end +# +# # Returns whether or not the first element is equal to the passed argument +# def starts_with?(e) +# return self.first == e +# end +# +# # Returns whether or not the last element is equal to the passed argument +# def ends_with?(e) +# return self.last == e +# end +# +# # Converts itself to a hash where possible +# def to_hash(delete_nil_entries = false) +# ret = {} +# for i in 0...self.size +# next if self[i].nil? && delete_nil_entries +# ret[i] = self[i] +# end +# return ret +# end +# +# # If you have 8 elements, if true, grabs the 5th element, the 4th if false. +# # If you have 7 elements, grabs the 4th. +# def mid(round_up = true) +# i = (self.size - 1) / 2.0 +# i = i.ceil if round_up +# return self[i].floor +# end +# +# # Returns the average of all elements in the array. Will throw errors on non-numerics. +# # Skips entries. +# def average +# total = 0 +# self.each { |n| total += n unless n.nil? } +# return total / self.compact.size.to_f +# end +# +# # Adds some aliases for : , , +# alias has? include? +# alias includes? include? +# alias contains? include? +# +# # Evaluates the block you pass it for every number between 0 and "slots". +# # Example usage: +# # Array.make_table { |i| i ** 2 } +# # => [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] +# # Array.make_table(10..16) { |i| i.to_s(2) } +# # => ["1010", "1011", "1100", "1101", "1110", "1111", "10000"] +# # (you can also pass it an array of values to iterate over) +# def self.make_table(range = 1..10, &proc) +# return range.map { |n| next proc.call(n) } +# end +# +# # If true: +# # [0, 1, 3, 4, 5] -- etc +# # If false: +# # [0,1,2,3,4,5] -- etc +# Json_Extra_Space_After_Entry = false +# +# # Converts _self_ to a JSON string with an indent of Json_Indent_Width per layer. +# def to_json(indent = Hash::Json_Indent_Width, inline = false) +# return "[]" unless self.size > 0 +# full = "[" +# for i in 0...self.size +# nl = false +# if self[i].is_a?(Hash) || self[i].is_a?(Array) +# val = self[i].to_json(indent + Hash::Json_Indent_Width, i == 0) +# nl = !(inline && i == 0) +# else +# val = self[i] +# val = "\"#{val}\"" if val.is_a?(String) +# nl = (self.fullsize > 24 || self.map { |e| e.class.to_sym }.include?(:Hash)) +# end +# full += "\n" + " " * indent if nl +# full += val.to_s + "," +# full += " " if Json_Extra_Space_After_Entry +# end +# i = 2 + Json_Extra_Space_After_Entry.to_i +# full = full[0..(-i)] +# full += "\n#{" " * (indent - Hash::Json_Indent_Width)}" if self.fullsize > 24 || +# self.map { |e| e.class.to_sym }.include?(:Hash) +# full += "]" +# return full +# end +# end +# +# class Hash +# # Converts itself to an array where possible +# def to_array(delete_nil_entries = false) +# ret = [] +# keys = self.keys.sort +# for key in keys +# next if self[key].nil? && delete_nil_entries +# ret[key] = self[key] +# end +# return ret +# end +# +# def compact +# new = {} +# for key in self.keys +# new[key] = self[key] unless self[key].nil? +# end +# return new +# end +# +# def compact! +# self.replace(compact) +# end +# +# # Amount of spaces per "layer" in the JSON. +# Json_Indent_Width = 4 +# +# # Converts _self_ to a JSON string with an indent of Json_Indent_Width per layer. +# def to_json(indent = Json_Indent_Width, _ = nil) +# return "{}" if self.size == 0 +# full = "{" +# keys = self.keys.sort do |a,b| +# if $JSON_Sort_Order +# if $JSON_Sort_Order.include?(a) +# if $JSON_Sort_Order.include?(b) +# next $JSON_Sort_Order.index(a) <=> $JSON_Sort_Order.index(b) +# else +# next -1 +# end +# else +# if $JSON_Sort_Order.include?(b) +# next 1 +# end +# # If neither are in the key, go alphabetical +# end +# end +# if a.numeric? +# if b.numeric? +# next a <=> b +# else +# next -1 +# end +# else +# if b.numeric? +# next 1 +# else +# next a <=> b +# end +# end +# end +# for key in keys +# if self[key].is_a?(Hash) || self[key].is_a?(Array) +# val = self[key].to_json(indent + Json_Indent_Width, key == self.keys[0]) +# else +# val = self[key] +# val = "\"#{val}\"" if val.is_a?(String) +# end +# full += "\n#{" " * indent}\"#{key}\": #{val}," +# end +# full = full[0..-2] +# full += "\n#{" " * (indent - Json_Indent_Width)}}" +# return full +# end +# end +# +# # String class extensions +# class String +# # Converts to bits +# def to_b +# return self.unpack('b*')[0] +# end +# +# # Converts to bits and replaces itself +# def to_b! +# self.replace(to_b) +# end +# +# # Converts from bits +# def from_b +# return [self].pack('b*') +# end +# +# # Convert from bits and replaces itself +# def from_b! +# self.replace(from_b) +# end +# +# # Returns a random character from the string +# def random +# return self[rand(self.size)] +# end +# +# # Shuffles the order of the characters +# def shuffle +# return self.split("").shuffle.join("") +# end +# +# # Breaks the string up every _n_ characters +# def breakup(n) +# new = [] +# for i in 0...self.size +# new[(i / n).floor] ||= "" +# new[(i / n).floor] += self[i] +# end +# return new +# end +# +# def empty? +# return (self.size == 0) +# end +# +# def numeric? +# i = 0 +# for e in self.split("") +# next if i == 0 && e == "-" +# return false unless [0,1,2,3,4,5,6,7,8,9].map { |n| n.to_s }.include?(e) +# end +# return true +# end +# +# # Deflates itself and returns the result +# def deflate +# return Zlib::Deflate.deflate(self) +# end +# +# # Deflates and replaces itself +# def deflate! +# self.replace(deflate) +# end +# +# # Inflates itself and returns the result +# def inflate +# return Zlib::Inflate.inflate(self) +# end +# +# # Inflates and replaces itself +# def inflate! +# self.replace(inflate) +# end +# +# # Adds some aliases for : , , +# alias has? include? +# alias includes? include? +# alias contains? include? +# end +# +# # File class extensions +# class File +# # Copies the source file to the destination path. +# def self.copy(source, destination) +# data = "" +# t = Time.now +# File.open(source, 'rb') do |f| +# while r = f.read(4096) +# if Time.now - t > 1 +# Graphics.update +# t = Time.now +# end +# data += r +# end +# end +# File.delete(destination) if File.file?(destination) +# f = File.new(destination, 'wb') +# f.write data +# f.close +# end +# +# # Renames the old file to be the new file. //exact same as File::move +# def self.rename(old, new) +# File.move(old, new) +# end +# +# # Copies the source to the destination and deletes the source. +# def self.move(source, destination) +# File.copy(source, destination) +# File.delete(source) +# end +# +# # Reads the file's data and inflates it with Zlib +# def self.inflate(file) +# data = "" +# t = Time.now +# File.open(file, 'rb') do |f| +# while r = f.read(4096) +# if Time.now - t > 1 +# Graphics.update +# t = Time.now +# end +# data += r +# end +# end +# data.inflate! +# File.delete(file) +# f = File.new(file, 'wb') +# f.write data +# f.close +# return data +# end +# +# # Reads the file's data and deflates it with Zlib +# def self.deflate(file) +# data = "" +# t = Time.now +# File.open(file, 'rb') do |f| +# while r = f.read(4096) +# if Time.now - t > 1 +# Graphics.update +# t = Time.now +# end +# data += r +# end +# end +# data.deflate! +# File.delete(file) +# f = File.new(file, 'wb') +# f.write data +# f.close +# return data +# end +# +# # Note: This is VERY basic compression and should NOT serve as encryption. +# # Compresses all specified files into one, big package +# def self.compress(outfile, files, delete_files = true) +# start = Time.now +# files = [files] unless files.is_a?(Array) +# for i in 0...files.size +# if !File.file?(files[i]) +# raise "Could not find part of the path `#{files[i]}`" +# end +# end +# files.breakup(500) # 500 files per compressed file +# full = "" +# t = Time.now +# for i in 0...files.size +# if Time.now - t > 1 +# Graphics.update +# t = Time.now +# end +# data = "" +# File.open(files[i], 'rb') do |f| +# while r = f.read(4096) +# if Time.now - t > 1 +# Graphics.update +# t = Time.now +# end +# data += r +# end +# end +# File.delete(files[i]) if delete_files +# full += "#{data.size}|#{files[i]}|#{data}" +# full += "|" if i != files.size - 1 +# end +# File.delete(outfile) if File.file?(outfile) +# f = File.new(outfile, 'wb') +# f.write full.deflate +# f.close +# return Time.now - start +# end +# +# # Decompresses files compressed with File.compress +# def self.decompress(filename, delete_package = true) +# start = Time.now +# data = "" +# t = Time.now +# File.open(filename, 'rb') do |f| +# while r = f.read(4096) +# if Time.now - t > 1 +# Graphics.update +# t = Time.now +# end +# data += r +# end +# end +# data.inflate! +# loop do +# size, name = data.split('|') +# data = data.split(size + "|" + name + "|")[1..-1].join(size + "|" + name + "|") +# size = size.to_i +# content = data[0...size] +# data = data[(size + 1)..-1] +# File.delete(name) if File.file?(name) +# f = File.new(name, 'wb') +# f.write content +# f.close +# break if !data || data.size == 0 || data.split('|').size <= 1 +# end +# File.delete(filename) if delete_package +# return Time.now - start +# end +# +# # Creates all directories that don't exist in the given path, as well as the +# # file. If given a second argument, it'll write that to the file. +# def self.create(path, data = nil) +# start = Time.now +# Dir.create(path.split('/')[0..-2].join('/')) +# f = File.new(path, 'wb') +# f.write data if data && data.size > 0 +# f.close +# return Time.now - start +# end +# end +# +# # Dir class extensions +# class Dir +# class << Dir +# alias marin_delete delete +# end +# +# # Returns all files in the targeted path +# def self.get_files(path, recursive = true) +# return Dir.get_all(path, recursive).select { |path| File.file?(path) } +# end +# +# # Returns all directories in the targeted path +# def self.get_dirs(path, recursive = true) +# return Dir.get_all(path, recursive).select { |path| File.directory?(path) } +# end +# +# # Returns all files and directories in the targeted path +# def self.get_all(path, recursive = true) +# files = [] +# Dir.foreach(path) do |f| +# next if f == "." || f == ".." +# if File.directory?(path + "/" + f) && recursive +# files.concat(Dir.get_files(path + "/" + f)) +# end +# files << path + "/" + f +# end +# return files +# end +# +# # Deletes a directory and all files/directories within, unless non_empty is false +# def self.delete(path, non_empty = true) +# if non_empty +# for file in Dir.get_all(path) +# if File.directory?(file) +# Dir.delete(file, non_empty) +# elsif File.file?(file) +# File.delete(file) +# end +# end +# end +# marin_delete(path) +# end +# +# # Creates all directories that don't exist in the given path. +# def self.create(path) +# split = path.split('/') +# for i in 0...split.size +# Dir.mkdir(split[0..i].join('/')) unless File.directory?(split[0..i].join('/')) +# end +# end +# end +# +# +# # Sprite class extensions +# class Sprite +# # Shorthand for initializing a bitmap by path, bitmap, or width/height: +# # -> bmp("Graphics/Pictures/bag") +# # -> bmp(32, 32) +# # -> bmp(some_other_bitmap) +# def bmp(arg1 = nil, arg2 = nil) +# if arg1 +# if arg2 +# arg1 = Graphics.width if arg1 == -1 +# arg2 = Graphics.height if arg2 == -1 +# self.bitmap = Bitmap.new(arg1, arg2) +# elsif arg1.is_a?(Bitmap) +# self.bitmap = arg1.clone +# else +# self.bitmap = Bitmap.new(arg1) +# end +# else +# return self.bitmap +# end +# end +# +# # Alternative to bmp(path): +# # -> bmp = "Graphics/Pictures/bag" +# def bmp=(arg1) +# bmp(arg1) +# end +# +# # Usage: +# # -> [x] # Sets sprite.x to x +# # -> [x,y] # Sets sprite.x to x and sprite.y to y +# # -> [x,y,z] # Sets sprite.x to x and sprite.y to y and sprite.z to z +# # -> [nil,y] # Sets sprite.y to y +# # -> [nil,nil,z] # Sets sprite.z to z +# # -> [x,nil,z] # Sets sprite.x to x and sprite.z to z +# # Etc. +# def xyz=(args) +# self.x = args[0] || self.x +# self.y = args[1] || self.y +# self.z = args[2] || self.z +# end +# +# # Returns the x, y, and z coordinates in the xyz=(args) format, [x,y,z] +# def xyz +# return [self.x,self.y,self.z] +# end +# +# # Centers the sprite by setting the origin points to half the width and height +# def center_origins +# return if !self.bitmap +# self.ox = self.bitmap.width / 2 +# self.oy = self.bitmap.height / 2 +# end +# +# # Returns the sprite's full width, taking zoom_x into account +# def fullwidth +# return self.bitmap.width.to_f * self.zoom_x +# end +# +# # Returns the sprite's full height, taking zoom_y into account +# def fullheight +# return self.bitmap.height.to_f * self.zoom_y +# end +# end +# +# class TextSprite < Sprite +# # Sets up the sprite and bitmap. You can also pass text to draw +# # either an array of arrays, or an array containing the normal "parameters" +# # for drawing text: +# # [text,x,y,align,basecolor,shadowcolor] +# def initialize(viewport = nil, text = nil, width = -1, height = -1) +# super(viewport) +# @width = width +# @height = height +# self.bmp(@width, @height) +# pbSetSystemFont(self.bmp) +# if text.is_a?(Array) +# if text[0].is_a?(Array) +# pbDrawTextPositions(self.bmp,text) +# else +# pbDrawTextPositions(self.bmp,[text]) +# end +# end +# end +# +# # Clears the bitmap (and thus all drawn text) +# def clear +# self.bmp.clear +# pbSetSystemFont(self.bmp) +# end +# +# # You can also pass text to draw either an array of arrays, or an array +# # containing the normal "parameters" for drawing text: +# # [text,x,y,align,basecolor,shadowcolor] +# def draw(text, clear = false) +# self.clear if clear +# if text[0].is_a?(Array) +# pbDrawTextPositions(self.bmp,text) +# else +# pbDrawTextPositions(self.bmp,[text]) +# end +# end +# +# # Draws text with outline +# # [text,x,y,align,basecolor,shadowcolor] +# def draw_outline(text, clear = false) +# self.clear if clear +# if text[0].is_a?(Array) +# for e in text +# e[2] -= 224 +# pbDrawOutlineText(self.bmp,e[1],e[2],640,480,e[0],e[4],e[5],e[3]) +# end +# else +# e = text +# e[2] -= 224 +# pbDrawOutlineText(self.bmp,e[1],e[2],640,480,e[0],e[4],e[5],e[3]) +# end +# end +# +# # Draws and breaks a line if the width is exceeded +# # [text,x,y,width,numlines,basecolor,shadowcolor] +# def draw_ex(text, clear = false) +# self.clear if clear +# if text[0].is_a?(Array) +# for e in text +# drawTextEx(self.bmp,e[1],e[2],e[3],e[4],e[0],e[5],e[6]) +# end +# else +# e = text +# drawTextEx(self.bmp,e[1],e[2],e[3],e[4],e[0],e[5],e[6]) +# end +# end +# +# # Clears and disposes the sprite +# def dispose +# clear +# super +# end +# end +# +# # A better alternative to the typical @sprites = {} +# class SpriteHash +# attr_reader :x +# attr_reader :y +# attr_reader :z +# attr_reader :visible +# attr_reader :opacity +# +# def initialize +# @hash = {} +# @x = 0 +# @y = 0 +# @z = 0 +# @visible = true +# @opacity = 255 +# end +# +# # Returns the object in the specified key +# def [](key) +# key = key.to_sym if key.respond_to?(:to_sym) && !key.is_a?(Numeric) +# return @hash[key] +# end +# +# # Sets an object in specified key to the specified value +# def []=(key, value) +# key = key.to_sym if key.respond_to?(:to_sym) && !key.is_a?(Numeric) +# add(key, value) +# end +# +# # Returns the raw hash +# def raw +# return @hash +# end +# +# # Returns the keys in the hash +# def keys +# return @hash.keys +# end +# +# def length; return self.size; end +# def count; return self.size; end +# +# # Returns the amount of keys in the hash +# def size +# return @hash.keys.size +# end +# +# # Clones the hash +# def clone +# return @hash.clone +# end +# +# # Adds an object to the specified key +# def add(key, value) +# clear_disposed +# key = key.to_sym if key.respond_to?(:to_sym) && !key.is_a?(Numeric) +# @hash[key] if @hash[key] && @hash[key].respond_to?(:dispose) +# @hash[key] = value +# clear_disposed +# end +# +# # Deletes an object in the specified key +# def delete(key) +# key = key.to_sym if key.respond_to?(:to_sym) && !key.is_a?(Numeric) +# @hash[key] = nil +# clear_disposed +# end +# +# # Iterates over all sprites +# def each +# clear_disposed +# @hash.each { |s| yield s[1] if block_given? } +# end +# +# # Updates all sprites +# def update +# clear_disposed +# for key in @hash.keys +# @hash[key].update if @hash[key].respond_to?(:update) +# end +# end +# +# # Disposes all sprites +# def dispose +# clear_disposed +# for key in @hash.keys +# @hash[key].dispose if @hash[key].respond_to?(:dispose) +# end +# clear_disposed +# end +# +# # Compatibility +# def disposed? +# return false +# end +# +# # Changes x on all sprites +# def x=(value) +# clear_disposed +# for key in @hash.keys +# @hash[key].x += value - @x +# end +# @x = value +# end +# +# # Changes y on all sprites +# def y=(value) +# clear_disposed +# for key in @hash.keys +# @hash[key].y += value - @y +# end +# @y = value +# end +# +# # Changes z on all sprites +# def z=(value) +# clear_disposed +# for key in @hash.keys +# @hash[key].z += value - @z +# end +# @z = value +# end +# +# # Changes visibility on all sprites +# def visible=(value) +# clear_disposed +# for key in @hash.keys +# @hash[key].visible = value +# end +# end +# +# # Changes opacity on all sprites +# def opacity=(value) +# clear_disposed +# for key in @hash.keys +# @hash[key].opacity += value - @opacity +# end +# @opacity = [0,value,255].sort[1] +# end +# +# # Fades out all sprites +# def hide(frames = 16) +# clear_disposed +# frames.times do +# Graphics.update +# Input.update +# for key in @hash.keys +# @hash[key].opacity -= 255 / frames.to_f +# end +# end +# @opacity = 0 +# end +# +# # Fades in all sprites +# def show(frames = 16) +# clear_disposed +# frames.times do +# Graphics.update +# Input.update +# for key in @hash.keys +# @hash[key].opacity += 255 / frames.to_f +# end +# end +# @opacity = 255 +# end +# +# # Deletes all disposed sprites from the hash +# def clear_disposed +# for key in @hash.keys +# if (@hash[key].disposed? rescue true) +# @hash[key] = nil +# @hash.delete(key) +# end +# end +# end +# +# # Renames the old key to the new key +# def rename(old, new) +# self[new] = self[old] +# delete(old) +# end +# end +# +# class ByteWriter +# def initialize(filename) +# @file = File.new(filename, "wb") +# end +# +# def <<(*data) +# write(*data) +# end +# +# def write(*data) +# data.each do |e| +# if e.is_a?(Array) || e.is_a?(Enumerator) +# e.each { |item| write(item) } +# elsif e.is_a?(Numeric) +# @file.putc e +# else +# raise "Invalid data for writing.\nData type: #{e.class}\nData: #{e.inspect[0..100]}" +# end +# end +# end +# +# def write_int(int) +# self << ByteWriter.to_bytes(int) +# end +# +# def close +# @file.close +# @file = nil +# end +# +# def self.to_bytes(int) +# return [ +# (int >> 24) & 0xFF, +# (int >> 16) & 0xFF, +# (int >> 8) & 0xFF, +# int & 0xFF +# ] +# end +# end +# +# class Bitmap +# def save_to_png(filename) +# f = ByteWriter.new(filename) +# +# #============================= Writing header ===============================# +# # PNG signature +# f << [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A] +# # Header length +# f << [0x00, 0x00, 0x00, 0x0D] +# # IHDR +# headertype = [0x49, 0x48, 0x44, 0x52] +# f << headertype +# +# # Width, height, compression, filter, interlacing +# headerdata = ByteWriter.to_bytes(self.width). +# concat(ByteWriter.to_bytes(self.height)). +# concat([0x08, 0x06, 0x00, 0x00, 0x00]) +# f << headerdata +# +# # CRC32 checksum +# sum = headertype.concat(headerdata) +# f.write_int Zlib::crc32(sum.pack("C*")) +# +# #============================== Writing data ================================# +# data = [] +# for y in 0...self.height +# # Start scanline +# data << 0x00 # Filter: None +# for x in 0...self.width +# px = self.get_pixel(x, y) +# # Write raw RGBA pixels +# data << px.red +# data << px.green +# data << px.blue +# data << px.alpha +# end +# end +# # Zlib deflation +# smoldata = Zlib::Deflate.deflate(data.pack("C*")).bytes +# # data chunk length +# f.write_int smoldata.size +# # IDAT +# f << [0x49, 0x44, 0x41, 0x54] +# f << smoldata +# # CRC32 checksum +# f.write_int Zlib::crc32([0x49, 0x44, 0x41, 0x54].concat(smoldata).pack("C*")) +# +# #============================== End Of File =================================# +# # Empty chunk +# f << [0x00, 0x00, 0x00, 0x00] +# # IEND +# f << [0x49, 0x45, 0x4E, 0x44] +# # CRC32 checksum +# f.write_int Zlib::crc32([0x49, 0x45, 0x4E, 0x44].pack("C*")) +# f.close +# return nil +# end +# end +# +# +# # Stand-alone methods +# +# # Fades in a black overlay +# def showBlk(n = 16) +# return if $blkVp || $blk +# $blkVp = Viewport.new(0,0,Settings::SCREEN_WIDTH,Settings::SCREEN_HEIGHT) +# $blkVp.z = 9999999 +# $blk = Sprite.new($blkVp) +# $blk.bmp(-1,-1) +# $blk.bitmap.fill_rect(0,0,Settings::SCREEN_WIDTH,Settings::SCREEN_HEIGHT,Color.new(0,0,0)) +# $blk.opacity = 0 +# for i in 0...(n + 1) +# Graphics.update +# Input.update +# yield i if block_given? +# $blk.opacity += 256 / n.to_f +# end +# end +# +# # Fades out and disposes a black overlay +# def hideBlk(n = 16) +# return if !$blk || !$blkVp +# for i in 0...(n + 1) +# Graphics.update +# Input.update +# yield i if block_given? +# $blk.opacity -= 256 / n.to_f +# end +# $blk.dispose +# $blk = nil +# $blkVp.dispose +# $blkVp = nil +# end +# +# # Returns the percentage of exp the Pokémon has compared to the next level +# def pbGetExpPercentage(pokemon) +# pokemon = pokemon.pokemon if pokemon.respond_to?("pokemon") +# startexp = PBExperience.pbGetStartExperience(pokemon.level, pokemon.growthrate) +# endexp = PBExperience.pbGetStartExperience(pokemon.level + 1, pokemon.growthrate) +# return (pokemon.exp - startexp).to_f / (endexp - startexp).to_f +# end +# +# unless defined?(oldrand) +# alias oldrand rand +# def rand(a = nil, b = nil) +# if a.is_a?(Range) +# l = a.min +# u = a.max +# return l + oldrand(u - l + 1) +# elsif a.is_a?(Numeric) +# if b.is_a?(Numeric) +# return a + oldrand(b - a) +# else +# return oldrand(a) +# end +# elsif a.nil? +# if b +# return rand(b) +# else +# return oldrand(2) +# end +# end +# end +# end +# +# # Input module extensions +# module Input +# # Returns true if any of the buttons below are pressed +# def self.any? +# return true if defined?(Game_Mouse) && $mouse && $mouse.click? +# keys = [Input::C,Input::B,Input::LEFT,Input::RIGHT,Input::UP,Input::DOWN, +# # 0-9, a-z +# 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44, +# 0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x50,0x51,0x52,0x53, +# 0x54,0x55,0x56,0x57,0x58,0x59,0x5A] +# for key in keys +# return true if Input.triggerex?(key) +# end +# return false +# end +# end +# +# +# +# def pbGetActiveEventPage(event, mapid = nil) +# mapid ||= event.map.map_id if event.respond_to?(:map) +# pages = (event.is_a?(RPG::Event) ? event.pages : event.instance_eval { @event.pages }) +# for i in 0...pages.size +# c = pages[pages.size - 1 - i].condition +# ss = !(c.self_switch_valid && !$game_self_switches[[mapid, +# event.id,c.self_switch_ch]]) +# sw1 = !(c.switch1_valid && !$game_switches[c.switch1_id]) +# sw2 = !(c.switch2_valid && !$game_switches[c.switch2_id]) +# var = true +# if c.variable_valid +# if !c.variable_value || !$game_variables[c.variable_id].is_a?(Numeric) || +# $game_variables[c.variable_id] < c.variable_value +# var = false +# end +# end +# if ss && sw1 && sw2 && var # All conditions are met +# return pages[pages.size - 1 - i] +# end +# end +# return nil +# end diff --git a/Data/Scripts/050_AddOns/mapExporter2.rb b/Data/Scripts/050_AddOns/mapExporter2.rb new file mode 100644 index 000000000..6282f4dcc --- /dev/null +++ b/Data/Scripts/050_AddOns/mapExporter2.rb @@ -0,0 +1,518 @@ + +def exportAllMaps + for id in 725..768 + begin + MapExporter.export(id, [:Events]) + rescue + echo "error in " +(id.to_s) +"\n" + end + end +end + + +module MapExporter + @@map = nil + @@bitmap = nil + @@helper = nil + + module_function + + def export(map_id, options) + map_name = pbGetMapNameFromId(map_id) + begin + @@map = $MapFactory.getMapForExport(map_id) + rescue + error("Map #{map_id} (#{map_name}) could not be loaded.") + end + @@bitmap = Bitmap.new(@@map.width * Game_Map::TILE_HEIGHT, @@map.height * Game_Map::TILE_WIDTH) + @@helper = TileDrawingHelper.fromTileset($data_tilesets[@@map.tileset_id]) + set_map_options(options) + if options.include?(:Panorama) + if !nil_or_empty?(@@map.panorama_name) + draw_panorama + else + echoln "Map #{map_id} (#{map_name}) doesn't have a Panorama." + end + end + draw_reflective_tiles + draw_all_reflections(options) + draw_regular_tiles + if !draw_all_events(options) + draw_low_priority_tiles + end + draw_high_priority_tiles + draw_all_top_events(options) + if options.include?(:Fog) + if nil_or_empty?(@@map.fog_name) + echoln "Map #{map_id} (#{map_name}) doesn't have a Fog." + else + draw_fog + end + end + draw_watermark(options) + save_map_image + end + + def draw_all_events(options) + include_player = options.include?(:Player) && $game_map.map_id == @@map.map_id + include_dep = options.include?(:DependentEvents) && $game_map.map_id == @@map.map_id + include_event = true#options.include?(:Events) + return false if !(include_player || include_dep || include_event) + for y in 0...@@map.height + for x in 0...@@map.width + event = nil + if include_event + event_hash = @@map.events.select {|_,e| e.x == x && e.y == y && !e.always_on_top } + event = event_hash.values.first if !event_hash.empty? + end + event = $game_player if !event && include_player && $game_player.x == x && $game_player.y == y && !$game_player.always_on_top + if include_dep + $PokemonTemp.dependentEvents.realEvents.each do |e| + next if !e || e.x != x || e.y != y + event = e + break + end + end + if event + deep_bush = @@map.bush?(x, y) + draw_event_bitmap(event, deep_bush) + end + for z in 0..2 + tile_id = @@map.data[x, y, z] || 0 + priority = @@map.priorities[tile_id] + next if priority != 1 + tag_data = GameData::TerrainTag.try_get(@@map.terrain_tags[tile_id]) + next if !tag_data || tag_data.shows_reflections + @@helper.bltTile(@@bitmap, x * Game_Map::TILE_WIDTH, y * Game_Map::TILE_HEIGHT, tile_id) + end + end + end + return true + end + + def draw_all_top_events(options) + include_player = options.include?(:Player) && $game_map.map_id == @@map.map_id + include_event = options.include?(:Events) + return false if !(include_player || include_event) + for y in 0...@@map.height + for x in 0...@@map.width + event = nil + if include_event + event_hash = @@map.events.select {|_,e| e.x == x && e.y == y && e.always_on_top } + event = event_hash.values.first if !event_hash.empty? + end + event = $game_player if !event && include_player && $game_player.x == x && $game_player.y == y && $game_player.always_on_top + if event + deep_bush = @@map.bush?(x, y) + draw_event_bitmap(event, deep_bush) + end + end + end + return true + end + + def draw_all_reflections(options) + include_player = options.include?(:Player) && $game_map.map_id == @@map.map_id + include_dep = options.include?(:DependentEvents) && $game_map.map_id == @@map.map_id + include_event = options.include?(:Events) + return false if !(include_player || include_dep || include_event) + for y in 0...@@map.height + for x in 0...@@map.width + dep = false + event = nil + if include_event + event_hash = @@map.events.select {|_,e| e.x == x && e.y == y } + event = event_hash.values.first if !event_hash.empty? + end + event = $game_player if !event && include_player && $game_player.x == x && $game_player.y == y + if include_dep && !event + $PokemonTemp.dependentEvents.realEvents.each do |e| + next if !e || e.x != x || e.y != y + event = e + dep = true + break + end + end + draw_event_reflection(event, dep) if event + end + end + return true + end + + def draw_reflective_tiles + for y in 0...@@map.height + for x in 0...@@map.width + for z in 0..2 + tile_id = @@map.data[x, y, z] || 0 + tag_data = GameData::TerrainTag.try_get(@@map.terrain_tags[tile_id]) + next if !tag_data || !tag_data.shows_reflections + @@helper.bltTile(@@bitmap, x * Game_Map::TILE_WIDTH, y * Game_Map::TILE_HEIGHT, tile_id) + end + end + end + end + + def draw_regular_tiles + for y in 0...@@map.height + for x in 0...@@map.width + for z in 0..2 + tile_id = @@map.data[x, y, z] || 0 + priority = @@map.priorities[tile_id] + next if priority >= 1 + tag_data = GameData::TerrainTag.try_get(@@map.terrain_tags[tile_id]) + next if !tag_data || tag_data.shows_reflections + @@helper.bltTile(@@bitmap, x * Game_Map::TILE_WIDTH, y * Game_Map::TILE_HEIGHT, tile_id) + end + end + end + end + + def draw_low_priority_tiles + for y in 0...@@map.height + for x in 0...@@map.width + for z in 0..2 + tile_id = @@map.data[x, y, z] || 0 + priority = @@map.priorities[tile_id] + next unless priority == 1 + tag_data = GameData::TerrainTag.try_get(@@map.terrain_tags[tile_id]) + next if !tag_data || tag_data.shows_reflections + @@helper.bltTile(@@bitmap, x * Game_Map::TILE_WIDTH, y * Game_Map::TILE_HEIGHT, tile_id) + end + end + end + end + + def draw_high_priority_tiles + for y in 0...@@map.height + for x in 0...@@map.width + for z in 0..2 + tile_id = @@map.data[x, y, z] || 0 + priority = @@map.priorities[tile_id] + next if priority < 2 + tag_data = GameData::TerrainTag.try_get(@@map.terrain_tags[tile_id]) + next if !tag_data || tag_data.shows_reflections + @@helper.bltTile(@@bitmap, x * Game_Map::TILE_WIDTH, y * Game_Map::TILE_HEIGHT, tile_id) + end + end + end + end + + def draw_event_bitmap(event, deep_bush) + hued = false + tile_bmp = false + if event.tile_id >= 384 + bmp = pbGetTileBitmap(@@map.tileset_name, event.tile_id, event.character_hue, event.width, event.height) + hued = true + tile_bmp = true + elsif deep_bush + event.calculate_bush_depth + temp_bmp = AnimatedBitmap.new("Graphics/Characters/" + "#{event.character_name}", event.character_hue) + bushmap = BushBitmap.new(temp_bmp, false, event.bush_depth) + bmp = bushmap.bitmap.clone + bushmap.dispose + temp_bmp.dispose + hued = true + else + bmp = RPG::Cache.load_bitmap("Graphics/Characters/", "#{event.character_name}") rescue Bitmap.new(32,32) + end + if bmp + bmp = bmp.clone + bmp.hue_change(event.character_hue) if event.character_hue != 0 && !hued + final_x = (event.x * Game_Map::TILE_WIDTH) + ((event.width * Game_Map::TILE_WIDTH)/2) - bmp.width / 8 + final_y = (event.y + 1) * Game_Map::TILE_HEIGHT - bmp.height / 4 + (event.bob_height) + final_y += 16 if event.character_name[/offset/i] + draw_event_shadow(event) if defined?(OWShadowSettings) + draw_surf_base(event) if event == $game_player + if !tile_bmp + ex = (bmp.width/4) * event.pattern + ey = (bmp.height/4) * (event.direction/2 - 1) + rect = Rect.new(ex, ey, bmp.width / 4, bmp.height / 4) + else + final_x += (bmp.width/8 - ((event.width * Game_Map::TILE_WIDTH)/2)) + final_y += (bmp.height/4) - (Game_Map::TILE_HEIGHT * event.height) + rect = Rect.new(0, 0, bmp.width, bmp.height) + end + @@bitmap.blt(final_x, final_y, bmp, rect, event.opacity) + bmp.dispose + end + bmp = nil + end + + def draw_event_shadow(event) + if OWShadowSettings::CASE_SENSITIVE_BLACKLISTS + remove = true if OWShadowSettings::SHADOWLESS_CHARACTER_NAME.any?{|e| event.character_name[/#{e}/]} + remove = true if event != $game_player && OWShadowSettings::SHADOWLESS_EVENT_NAME.any? {|e| event.name[/#{e}/]} + else + remove = true if OWShadowSettings::SHADOWLESS_CHARACTER_NAME.any?{|e| event.character_name[/#{e}/i]} + remove = true if event != $game_player && OWShadowSettings::SHADOWLESS_EVENT_NAME.any? {|e| event.name[/#{e}/i]} + end + terrain = @@map.terrain_tag(event.x, event.y) + remove = true if OWShadowSettings::SHADOWLESS_TERRAIN_NAME.any? {|e| terrain == e} if terrain + if !(nil_or_empty?(event.character_name) || event.transparent || remove) + if event == $game_player + shadow_name = OWShadowSettings::PLAYER_SHADOW_FILENAME + else + shadow_name = $~[1] if event.name[/shdw\((.*?)\)/] + end + shadow_name = OWShadowSettings::DEFAULT_SHADOW_FILENAME if nil_or_empty?(shadow_name) + shadow_bmp = RPG::Cache.load_bitmap("Graphics/Characters/Shadows/", "#{shadow_name}") + shadow_x = (event.x * Game_Map::TILE_WIDTH) + ((event.width * Game_Map::TILE_WIDTH)/2) - shadow_bmp.width/2 + shadow_y = (event.y + 1) * Game_Map::TILE_HEIGHT - shadow_bmp.height + 2 + @@bitmap.blt(shadow_x, shadow_y, shadow_bmp, Rect.new(0, 0, shadow_bmp.width, shadow_bmp.height), event.opacity) + shadow_bmp.dispose + end + end + + def draw_event_reflection(event, forced = true) + tile_bmp = false + if event.tile_id >= 384 + bmp = pbGetTileBitmap(@@map.tileset_name, event.tile_id, event.character_hue, event.width, event.height) + tile_bmp = true + else + bmp = RPG::Cache.load_bitmap("Graphics/Characters/", "#{event.character_name}") rescue Bitmap.new(32,32) + end + if bmp + bmp = bmp.clone + bmp.hue_change(event.character_hue) if event.character_hue != 0 && !tile_bmp + height = nil + fixed = false + if event == $game_player || forced + height = $PokemonGlobal.bridge + elsif event.name[/reflection/i] + height = 0 + if event.name[/reflection\((\d+)\)/i] + height = $~[1].to_i || 0 + else + height = $PokemonGlobal.bridge + end + end + if height + final_x = (event.x * Game_Map::TILE_WIDTH) + ((event.width * Game_Map::TILE_WIDTH)/2) - bmp.width/8 + final_y = (event.y + 1) * Game_Map::TILE_HEIGHT - 3 - (event.bob_height) + final_y -= 32 if event.character_name[/offset/i] + if !tile_bmp + ex = (bmp.width/4) * event.pattern + ey = (bmp.height/4) * (event.direction/2 - 1) + rect = Rect.new(ex, ey, bmp.width/4, bmp.height/4) + else + final_x += (bmp.width/8 - ((event.width * Game_Map::TILE_WIDTH)/2)) + rect = Rect.new(0, 0, bmp.width, bmp.height) + end + if height > 0 + new_bmp = colorize_and_flip_bitmap(bmp, Color.new(48,96,160), 255, rect) + opacity = event.opacity + else + new_bmp = colorize_and_flip_bitmap(bmp, Color.new(224,224,224), 96, rect) + opacity = event.opacity*3/4 + end + offset = [1.0, 0.95, 1.0, 1.05][(Graphics.frame_count%40)/10] + @@bitmap.stretch_blt(Rect.new(final_x, final_y, (new_bmp.width * offset), new_bmp.height), new_bmp, Rect.new(0, 0, new_bmp.width, new_bmp.height), opacity) + new_bmp.dispose + end + bmp.dispose + end + bmp = nil + end + + def draw_surf_base(event) + return if !$PokemonGlobal.surfing && !$PokemonGlobal.diving + bmp = nil + if $PokemonGlobal.surfing + bmp = RPG::Cache.load_bitmap("Graphics/Characters/", "base_surf") rescue Bitmap.new(32,32) + elsif $PokemonGlobal.diving + bmp = RPG::Cache.load_bitmap("Graphics/Characters/", "base_dive") rescue Bitmap.new(32,32) + end + return if !bmp + sx = event.pattern_surf * bmp.width/4 + sy = ((event.direction - 2)/2) * bmp.height/4 + final_x = (event.x * Game_Map::TILE_WIDTH) + ((event.width * Game_Map::TILE_WIDTH)/2) - bmp.width/8 + final_y = (event.y + 1) * Game_Map::TILE_HEIGHT - bmp.height / 4 + 16 + (event.bob_height) + @@bitmap.blt(final_x, final_y, bmp, Rect.new(sx,sy, bmp.width/4, bmp.height/4), event.opacity) + end + + def draw_fog + fog_bmp = create_tiled_bitmap("Graphics/Fogs/#{@@map.fog_name}", @@map.fog_hue, @@map.fog_zoom/100.0) + @@bitmap.blt(0, 0, fog_bmp, Rect.new(0, 0, fog_bmp.width, fog_bmp.height), @@map.fog_opacity) + fog_bmp.dispose + end + + def draw_panorama + pan_bmp = create_tiled_bitmap("Graphics/Panoramas/#{@@map.panorama_name}", @@map.panorama_hue) + @@bitmap.blt(0, 0, pan_bmp, Rect.new(0, 0, pan_bmp.width, pan_bmp.height)) + pan_bmp.dispose + end + + def draw_watermark(options) + return if !options.include?(:GameName) && !options.include?(:MapName) + map_name = nil_or_empty?(@@map.name)? pbGetMapNameFromId(@@map.map_id) : @@map.name + game_name = System.game_title + base_color = Color.new(248, 248, 248) + shadow_color = Color.new(64, 64, 64) + new_bmp = Bitmap.new(@@bitmap.width, @@bitmap.height) + if options.include?(:GameName) + if options.include?(:MapName) + pbSetSmallFont(new_bmp) + else + pbSetSystemFont(new_bmp) + end + pbDrawTextPositions(new_bmp, [[game_name, new_bmp.width - 8, new_bmp.height - 32, 1, base_color, shadow_color, true]]) + new_font = (@@bitmap.text_size(map_name).height + 6) + else + new_font = 0 + end + if options.include?(:MapName) + pbSetSystemFont(new_bmp) + pbDrawTextPositions(new_bmp, [[map_name, new_bmp.width - 8, new_bmp.height - new_font - 38, 1, base_color, shadow_color, true]]) + end + scale_factor = get_name_scale + x = @@bitmap.width - (new_bmp.width * scale_factor) - (8 * (scale_factor - 1)) + y = @@bitmap.height - (new_bmp.height * scale_factor) - (8 * (scale_factor - 1)) + rect = Rect.new(x, y, (new_bmp.width * scale_factor), (new_bmp.height * scale_factor)) + @@bitmap.stretch_blt(rect, new_bmp, Rect.new(0, 0, new_bmp.width, new_bmp.height)) + new_bmp.dispose + end + + def save_map_image + Dir.mkdir("Exported Maps/") if !safeExists?("Exported Maps/") + filestart = Time.now.strftime("[%Y-%m-%d %H-%M]") + map_name = nil_or_empty?(@@map.name)? pbGetMapNameFromId(@@map.map_id) : @@map.name + filename = sprintf("%03d - #{map_name} #{filestart}", @@map.map_id) + min_exists = 0 + if safeExists?("Exported Maps/" + filename + ".png") + min_exists = 1 + loop do + break if !safeExists?("Exported Maps/" + "#{filename}(#{min_exists})" + ".png") + min_exists += 1 + end + end + filename = "#{filename}(#{min_exists})" if min_exists > 0 + @@bitmap.to_file("Exported Maps/" + filename + ".png") + @@bitmap.dispose + @@bitmap = nil + @@map = nil + @@helper = nil + end + + def create_tiled_bitmap(filename, hue, zoom = 1.0) + begin + bmp = RPG::Cache.load_bitmap("", filename) + rescue + error("Could not load image file at #{filename}") + end + new_bmp = Bitmap.new(@@map.width * Game_Map::TILE_HEIGHT, @@map.height * Game_Map::TILE_WIDTH) + i = 0 + while i <= new_bmp.width + j = 0 + while j <= new_bmp.height + new_bmp.stretch_blt(Rect.new(i, j, (bmp.width * zoom), (bmp.height * zoom)), bmp, Rect.new(0, 0, bmp.width, bmp.height)) + j += (bmp.height * zoom) + end + i += (bmp.width * zoom) + end + bmp.dispose + new_bmp.hue_change(hue) + return new_bmp + end + + def get_name_scale + scale = @@map.width/3 + d = [0, -1 , -2, 2, 1, 0, -1, -2, 2, 1][scale%10] + scale = (scale + d)/10.0 + return (scale < 1.0) ? 1.0 : scale + end + + def colorize_and_flip_bitmap(bitmap, color, alpha = 255, rect = nil) + blankcolor = bitmap.get_pixel(0,0) + new_bmp = Bitmap.new(rect.width, rect.height) + temp_bmp = Bitmap.new(rect.width, rect.height) + temp_bmp.blt(0, 0, bitmap, rect) + for x in 0...temp_bmp.width + for y2 in 0...temp_bmp.height + y = temp_bmp.height - y2 + newcolor = temp_bmp.get_pixel(x, y2) + new_bmp.set_pixel(x, y, newcolor) if newcolor + end + end + temp_bmp.dispose + shadowcolor = (color ? color : blankcolor) + colorlayer = Bitmap.new(new_bmp.width, new_bmp.height) + colorlayer.fill_rect(colorlayer.rect, shadowcolor) + new_bmp.blt(0, 0, colorlayer, colorlayer.rect, alpha) + shadowcolor = new_bmp.get_pixel(0,0) + for x in 0...new_bmp.width + for y in 0...new_bmp.height + if new_bmp.get_pixel(x,y) == shadowcolor + new_bmp.set_pixel(x, y, blankcolor) + end + end + end + colorlayer.dispose + return new_bmp + end + + def set_map_options(options) + return if !options.include?(:Panorama) && !options.include?(:Fog) + @@map.events.each do |key, event| + for page in event.event.pages.reverse + c = page.condition + next if c.switch1_valid && !event.switchIsOn?(c.switch1_id) + next if c.switch2_valid && !event.switchIsOn?(c.switch2_id) + next if c.variable_valid && $game_variables[c.variable_id] < c.variable_value + if c.self_switch_valid + key = [event.map_id, event.id, c.self_switch_ch] + next if $game_self_switches[key] != true + end + page.list.each do |command| + if command.code == 204 + case command.parameters[0] + when 0 + next if !options.include?(:Panorama) + @@map.panorama_name = command.parameters[1] if !nil_or_empty?(@@map.panorama_name) + @@map.panorama_hue = command.parameters[2] if @@map.panorama_hue <= 0 + when 1 + next if !options.include?(:Fog) + @@map.fog_name = command.parameters[1] if nil_or_empty?(@@map.fog_name) + @@map.fog_hue = command.parameters[2] if @@map.fog_hue <= 0 + @@map.fog_opacity = command.parameters[3] if @@map.fog_opacity < command.parameters[3] + @@map.fog_zoom = command.parameters[5] + end + elsif command.code == 205 + next if !options.include?(:Fog) + @@map.fog_tone = command.parameters[0] + elsif command.code == 206 + next if !options.include?(:Fog) + @@map.fog_opacity = command.parameters[0] if command.parameters[0] != 0 + end + end + break + end + end + end + + def error(message) + emessage = "Map Exporter EX Error:\n\n" + message + print(_INTL(emessage)) + exit! + end +end + +class Game_Map + def tileset_id; return @map.tileset_id; end +end + +class DependentEvents + attr_accessor :realEvents +end + +class Game_Character + attr_reader :event + attr_reader :always_on_top +end + +class PokemonMapFactory + def getMapForExport(id) + map = Game_Map.new + map.setup(id) + return map + end +end diff --git a/Data/Scripts/050_AddOns/mapExporter2_ui.rb b/Data/Scripts/050_AddOns/mapExporter2_ui.rb new file mode 100644 index 000000000..c42447a06 --- /dev/null +++ b/Data/Scripts/050_AddOns/mapExporter2_ui.rb @@ -0,0 +1,74 @@ +# +# DebugMenuCommands.register("exportmap", { +# "parent" => "fieldmenu", +# "name" => _INTL("Export Map Image"), +# "description" => _INTL("Select a map and save its image as a png."), +# "effect" => proc { +# pbExportMapSelection +# } +# }) +# +# def pbExportMapSelection +# loop do +# map_id = pbListScreen(_INTL("Export Map"), MapLister.new(pbDefaultMap)) +# break if map_id <= 0 +# commands = ["Events", "Player", "Dependent Events", "Fog", "Panorama", "Map Name", "Game Name"] +# if $game_map.map_id != map_id +# commands.delete("Player") +# commands.delete("Dependent Events") +# end +# options = pbShowMapExportOptions(commands) +# if !options.include?(:Cancel) +# ret = MapExporter.export(map_id, options) +# mapname = pbGetMapNameFromId(map_id) +# pbMessage(_INTL("Sucessfully exported map image of Map {1} ({2}) to the Exported Maps folder in the games's root.", map_id, mapname)) +# return +# end +# end +# end +# +# def pbShowMapExportOptions(commands) +# sel_commands = [] +# sym_commands = [:MapName, :GameName] +# cmdwindow = Window_CommandPokemonEx.new([]) +# cmdwindow.z = 99999 +# cmdwindow.visible = true +# cmdwindow.index = 0 +# need_refresh = true +# loop do +# if need_refresh +# sel_commands = [] +# commands.each_with_index do |s, i| +# cmd_sym = s.gsub(/\s+/, "").to_sym +# x = sym_commands.include?(cmd_sym) ? "[x]" : "[ ]" +# sel_commands.push(_INTL("{1} {2}",x, s)) +# end +# sel_commands.push("Export Map...") +# cmdwindow.commands = sel_commands +# cmdwindow.resizeToFit(cmdwindow.commands) +# need_refresh = false +# end +# Graphics.update +# Input.update +# cmdwindow.update +# yield if block_given? +# if Input.trigger?(Input::USE) +# break if cmdwindow.index == sel_commands.length - 1 +# cmd_sym = commands[cmdwindow.index].gsub(/\s+/, "").to_sym +# if sym_commands.include?(cmd_sym) +# sym_commands.delete(cmd_sym) +# else +# sym_commands.push(cmd_sym) +# end +# sym_commands.uniq! +# need_refresh = true +# elsif Input.trigger?(Input::BACK) +# sym_commands = [:Cancel] +# break +# end +# pbUpdateSceneMap +# end +# cmdwindow.dispose +# Input.update +# return sym_commands +# end diff --git a/Data/System.rxdata b/Data/System.rxdata index 24d3428bdee0f65411594b57b43543432f4adec2..e022162e811a95763bedfa17c2cc648583683d39 100644 GIT binary patch delta 2776 zcmZuzO>7&-6~;1&6Sdr0>dYH{5f1FY?q2u};bd?5O5`-wkTf`pxKKY(9 zuBN(DfV`{#qQPi zrBY$X@%mOLCSbW0l8CFYkxcdB;*NWXftA@zun)3h$|Ad)O|rjd^I1d9C5?FO&Mys0pTGi3IvII7#xWB2ERDGUs-@|5hc=Eix1p{KBO!L3tE2_APqdN^u!v_?RiUE%)EXHJOl zpfk`xr`%?Nz?_k0gj((};%lpq zD-hIA3K<#HM};+E<9uDOnJ_lXxib6+^OI+PtFYVY5%!mJlk@z;vwjZri;Tcpu<2^WD?v%RVWgPKuo*C z-fdvl75@C{Azqb+8$-8H*QHm7h6i`5KTu$vN7#ay67aKvISatpCX&^7)y(kf+^);& zun+1#17K!L(L5?q>fHw&0Tnu1L*nz-cPQ-chR=>{utUNF-!C)KacOX!!pqKS(t~eyY5%!OZvwNhM zkq9cxKiQs3Zyton&ehFIEw`>)0QE4C?IYk7UpQeOU#jq7bs^?9a5HZ~>Jv#xv)}(3 zfSYT;=po!}#-SW@b{4??d2k~`SgCwpVHu{>_5V{ZI1EL7BnEha*~)mY3x&Rb6C@U6jlo_GPZh48b+8(?Cy znUyA9ZT^ribkKnnHq6C7AT;;eH#oU37b`30w91-ZHp&I9q?hYL`o4XZV`h^cMGJ`H zF7g2fLAPv_T<0_`sL1kx0h(0Y`4KsH8d!R*n7gRw(VB5CxAMI@D&$H!7lSp}1pnuF ztcBe!&8kDmu&3aCkwErX-(?)n}7rSc4$Nd4H)b|XTJpNOlOI2ne&{NEaXyPCs}pLDN~oJ$^DM|LoRRl@%=U@=a-O2neC)U@yGqMDCx;$Rqul hm`Yn3-d(HBn-1rB{{P^Hdq8<8@l9gzPVdQw{sUaIS}_0s delta 2408 zcmZ8jU2Ggz70zzkB$(Ls-~QNZJ2w|1l8|v^$5oS1aM#|kGwJM(y+2-(luYi<+}$1T z?7iDNGwZHeH9Qpw5FlFxdEs|Ye?BSS9?OLP97`qT zhi7u(#CYQwS({EjvwHFir>fzb(+?A8G(6TJqDvx+JU9Ejc@1Yh$L+Pz0T&%AJmir+ zwc`VSoBeqrqv2G?VT$9qgxQKOh)v_O-%J}1aJJ&GmP^eZ@6ax1W|!Mk!#Qr-9XjxQ z&Zxo~iq~_5<9pFDjH0b3Z<>Canl>3Is82=Lab1TqywD)N@6s(|`CJT4AGR{D4hy+Y zE>w+bUaxD3lI&&XNpo64lfTTJmlqe(;rqFJu!6RVqv2|QIKEeBlpknpdD_SNYm zRAQgEeU4&$k>Zgi5l;A>=RQh6*fEecvICoYi-v#Kr;?ZO zXBuu0B@dTF(a`EDYS1PZ6uFeN0t!fTF3js&`7mu{l5%->ZXKt)K0pQZHjk27(eR8; zeCI_k%CQTr6Su^C)DqBFM4(p!>O~hUudd05yYD=WPe8 z*M#T=vA~i1Ntr;dH{xT|Z&W;O*h!9Sndg1;0 z$=Kmx{iom~&cw7~#e}Bm3El!0dUEylr3i$>`nBOt@jRY7x(*0jtl)XUY!h0s>zV$b zN6lh>XGbl_vv*Pt@LaU!wRumA*N00uRR&?=U1(iq#|wC7Xesrq;rrC+z1sDFk#Tyc zTJ-SZ@L9V9y%XPWZmT7=oYyscBEshA2cLk4(=k{vAoX>5`R>w5{3##clDF@EdkIhF zYgMC?-&0MfE}j{^LF4v3Ir*{yz2ZWMEl|CPD!fOT?7#eR4lmI@2bS1nr%x(A5zs_t zrIIg|RQd2L4;KMc5CNbnf{ORJ@QI7Zk4@6Jw+=EhdVO^7PmvVfusDa7DDVTee&O0h zd0_qm+IUkpN@@YMIb{ra!<*!b_cQYDeGUTD;(jS;wWuHd>;8BG2vgfJtA<&~S5@=s z@{0T~`90w31)%1Z!vhagi6LTHfk$omkH!OutW086zG7|5-&#xZ-`2)Bo^*p(1sR|g zOaghuUIU8u9nXnX7-W(%!EO1P{Vh30=j8?Zbr@?PpCI-}@!99(WBLZD;f8K(zN8pC zYDp_?D@C!5IP^P4?~QH#s}xEa}OtzF029X)>= zO0c87l;6BrL)-bH3iAzA^An~R=*cE=JB$htmw|k*Wk3)k`7TybMbr1xvQ*pOhnR=A z6=6a|J?F_M?Z4i_DMjhIWB?=8CM@bv4QCX^;=O?d`N6l%ed@+{VV(D>4ugV<-B z7$|7eH0k{ta(6!^_xFEx3Xf^b7hIn0%wasaRnv7el8nAgDNGOASb<*Hh)NV{`K zzSBuV@KNuyV0bYbh;K#*%C7jwj0%Vhl0Mv{@n8&8Q(P)mt9BtL%F9HK~#pc(m|d^AmjRTK)nSYPIpy1~At$=I9SuYqYF;!7s(CYCF2rtUN2bVLF2O&Nk!6(A z(bg_KK#&5!;)}rQ$gg!57x38#R^SENDjP*)=->naI2Fw($v=000F!0pri@@XYS7{p e`GBQ>^_9wU)v-Fj`X94%iDcrv@G<|~Q~v{PWF0gB diff --git a/Data/encounters.dat b/Data/encounters.dat index 7ba0ad9dcad4c83fdfe637c1d37640b0733ae8ad..ff9946564b4b1ba19195760c3fc781918ea73ed7 100644 GIT binary patch literal 35690 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 GgZ~STErbgI literal 36380 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 diff --git a/Data/items.dat b/Data/items.dat index 05d9c2ac03ef8db1011e12d430de2ba51b04560a..09cc134782cd8b893e4ac99b14621031eb4dfdca 100644 GIT binary patch delta 357 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 GkbeRC2~uGI diff --git a/Data/town_map.dat b/Data/town_map.dat index d1ac26ad66b8198cf45b846ea84764ac7a8e4879..286d06be7fa58a0b26c846d3ef780979d84bc8fc 100644 GIT binary patch delta 65 zcmeyZy;o;~B;&q~QvU=d{}GT;m-AE-c1kQM$w^gkOH3}wFREm-W(ZMY$Yj!I$~4aO VH;CrVl*yEu%qS$a*;w!d3jp5-6YT&1 delta 23 fcmdn1^ILm@B;%fqQvU=Pr6wl`No_6_Ji!70Z|?|> diff --git a/Data/trainers.dat b/Data/trainers.dat index 9166ebc1c72d45bda7cae0e187d61e513ae464b5..c3412bf60b863e312ca597c4ba21a3788a723711 100644 GIT binary patch delta 1912 zcmah|ZA?>F81_BA<(6Vihe%s$3)Bh11Oyb6D;?q(f>;;|iK37)D%?>)i(dreWKIzk zTs+Ip)NF~{{>;pcth$@{gKcI%wwPsXf-n%&Am||ba3%&^GI#Ddm*|fLf8BH6=i~i2 z=l$id{_bIY*Y{mwSZ?adb?M84JzdKd8?xwM#=7)0jBZrvP?UhHweQs%)eOvBm!6K} z`_I^rU68_MON%I(C3uG(BiIow!~^}Y;J}ajx6Z<87_fsAA0MdHQ6D@p@OBjUvvZSJ z)!W9;F5LEO&1|qRSm&f=)5?}pm6NL~5j`)QaX2w3+ZL&w|BIT2YH|HwG`R4op;|#g zJ9YTU(0frkbySeREf%ZdrTiQx;Mki^{Nv5?=TRz#JvQc&`ix7O=7O&d2WCMxjO>^d zjmCeE9E3Q$>sGUEiCUfJoAAt8MWeCn_Lk=`F5ONN69vhbgW~b|G3%Fi9)Xy`{yp?R z20KPyh7`PQ)TTwtY1E0&jTY1BGnN@imB!M%SE|yv>Lc zTf|%zYooC!(iI0G_^0tUt6Ol*EeZIVb~iR~mmqU- zGv}aQvy6tIQJQ0tLMjXrdMXuF=@6H)qHmdTXPIhZa!Ae=1KlU|7XEZP znx_9@Is=ZKeq7`@Cb+`#_B6>2K3>Eyb2`SH{=yHYtcDP-Y!9|S_5gGS2mX^3+(3ed&q~x zygpLB9Ar!f7`l{Z0WKl9pd^bB9tz`RjTuhEJ<@B25jaVLFF+0SD%NnYAo!Uqi-4<8 zuRM$Z69P8@3(VIFm`73<(E?+R>P_A1B$n_M=~nVBP>xI!YV1WGn@}#;;5#t&s{a5V z9jQozZPx92*W6P1^*V2$hG(c|Hrth+G&*$JDPB(J9Z6}%jk|q&eVp_LCy{Sfz`g}_ zw8BC!ePC>1>lsu>iZVcEvf`#4GfU&wWY;p_RR@)YZS?tl4PGwX!G)~QeQKc&Wql^B zMi#mYVQT`icZS%+h^^$qRY1fx#{XR9M?)vsng#2{b{6}Jc+=>EyOsqJaGc!Ef+S}< zO}VBb?#@P4l*f0shz^1 zg|gqz{hB$%()Y0z$ez{oMPsrl8A7U00ng9R* delta 1878 zcmaKrZ%k8H7{+}MEw=?~3Q|fb(5@f~3JM|!7Y(wpIz%8a&6Ek0QSi<}UBL~b5seBu zAd5MfCzH5DGdGtE#?ra_K@zuROO|X#M^v1ExbbIf7h=GD@fn8Eq(n)@6G=8E0GwEg}c=djwSZ|{%&oM2v_irLo4vM zp?1WU1{9;hWkZqp=};J$vG(4p|IrP>=mru|EIxm)N+~?KchUq`#0bfJSP=ChvZ(0V z#Mf5*-cNN)RE_ud;f~>Wu;L5%CG?yMzcU;~Uo687D)Haf4~HAHxxRg5;_#7kCY#bD znfFLg)@%7X5q~*yaLK9#H;$HYB0a#L;rHJj^(;}Xe$cpN)q+)HMPzaK>=N>r=_oZt<72xuxMpe(6z$_Quj;NRfM=!&kb>ODyZMKg%mkw}85Y{vgHPUw-Re4sH0r zTs2hSTXV*!HX5+q>2e*Cf|bqPX8~<^ac(6X#|iV9rV3R)x}(oWxAhVl2Di9OCk9t) zL_|a8Bg5KQt1-P8DhW9JTr{@M>w`pe3}2hK&;)YR1B?O7-R=N$%7K(iukCYq z>iB`o1njz!8se@N!+{{i*(F!4)6>GaKLfZ+N-*iyfk5Vi;4JjXohta8UQan+fC#NH z!P<9{&qBaLTJ_KflVnN{58!R`Z8+4ypqvr`Mg%uWK_q+)lB_m>4w>m}+8qwhe%{c6 zlwXB^+U3My28(V$`Ked)%QGPFHo`8Xn^v?$u1(7WCin()gNnAEYlCvP86NpG-z6NB zPshPy#JLa$JxM#Dhe2?fox5IcoLHgcc75WCPNX} ziI@U*vt4b|RyYp1xu=AA>}ut5wJRPQxt;& zT)GC11kvOCAq_g9Qhs?Ie1L>H)?x)Yo(^#&HUr9_o-}5_-uOE8|2}#xi{X5t!pFjC^;g^wn)8)3Jho(@;!X!23}8C6fJvOtPb5=xsJ z{g=zd6Ub;5yckDqp%qS-v&q5Z8@Z8<{}vyoDjP&(q!%o7t4DJ9!Da@wk^USY!YRi0 zvF*|u&_$YZVY|@5)GyeO_|_AFjO9WEoF;$dLMn6+s|W@SXRaHtyT^>JHVvr}ArCsq z1rh9~PPI+oFO1=X+5