From 63402857b7b36e0df065747c648c66b40f8b26da Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Mon, 20 Nov 2023 19:41:18 +0100 Subject: [PATCH 01/52] MainForm - Fixed renaming folder throwing exception --- PCK-Studio/MainForm.cs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index fb74cc44..183f207e 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -749,15 +749,13 @@ namespace PckStudio if (diag.ShowDialog(this) == DialogResult.OK) { - PckFileData test; - if (currentPCK.TryGetFile(diag.NewText, (node.Tag as PckFileData).Filetype, out test)) - { - MessageBox.Show($"{diag.NewText} already exists", "File already exists"); - return; - } - if (node.Tag is PckFileData file) { + if (currentPCK.TryGetFile(diag.NewText, file.Filetype, out _)) + { + MessageBox.Show($"{diag.NewText} already exists", "File already exists"); + return; + } file.Filename = diag.NewText; } else // folders From 01bea15cfb1400ead5c4dd231a59feefa3101893 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Mon, 11 Dec 2023 08:29:17 -0500 Subject: [PATCH 02/52] Fixed missing label for some PS4 tiles --- PCK-Studio/Resources/tileData.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 221d62de..4a25fc48 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -3898,11 +3898,11 @@ }, { "internalName": "bamboo", - "displayName": "Bamboo" + "displayName": "Bamboo [PS4 ONLY]" }, { "internalName": "lantern_carried", - "displayName": "Lantern" + "displayName": "Lantern [PS4 ONLY]" }, { "internalName": "kelp", From 08b769b70d25ae63f13eb8d884fe186674b7c4d0 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Mon, 4 Mar 2024 18:41:31 -0500 Subject: [PATCH 03/52] Updated entity resources -Added an icon for invalid entity entries on the entity atlas resource -Fix for "Spectral Arrow" icon being incorrectly offset on the entity atlas resource -Fix for "Zombie Villager" appearing as "Villager" in the Materials Editor --- PCK-Studio/Forms/Editor/MaterialsEditor.resx | 10 +++++----- PCK-Studio/Resources/entities.png | Bin 46157 -> 49985 bytes PCK-Studio/Resources/entityData.json | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/PCK-Studio/Forms/Editor/MaterialsEditor.resx b/PCK-Studio/Forms/Editor/MaterialsEditor.resx index 64662fee..b78bf73d 100644 --- a/PCK-Studio/Forms/Editor/MaterialsEditor.resx +++ b/PCK-Studio/Forms/Editor/MaterialsEditor.resx @@ -127,11 +127,11 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADfSURBVDhPYxg8 - QLt++3yTGbf/Fm599P/Nh49wfPXxq/+rTt37f+Dak/8gOSBgAGEMANIMxGBFyAasPf/0v8GE8//z1t8C - y4HU4DIALIluwLpLL+HiMANAGKoNAWASCavv/n/57gPcgOvP3oENOXj7NViOoAFGU6791+k4ghWD5Aga - QCyGakMAkODcU89R/I8Ng9TgNADk14dPn/8/c+kqVgySgwUqVBsCwAx49urN/zsPHmPFIDmaGvAXJInN - 38gYasBfqDYE0K7dOn/Wvut/sfkdGYPUgJI9VNuAAwYGAGn6yvdevWgPAAAAAElFTkSuQmCC + vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4yMfEgaZUAAADdSURBVDhPzZJB + CoJQEIa9jy0iPFAnCDpAtG3ZooUE4b6oVtIuClpJIAgqZEVlKpqEHUAm5pGPmhTbRA18G//5P5iHgvA3 + I7ZniiQ7aVM9QZzcOKYbwVDbw8I6A2YAICBvg2VJdtjSs2Cse1Dt6tCYbliGO0UCFlLBxAj590yA0D4X + 1Ec7CK8JF9j+lUmWzoVlpYJaz4JKZ5ULZqWCT6F9Jhhowcv9eeBOoQBvPXoBrA0zF8yyR6V9LvCjGLYH + NxfMvipIMaQ3Ux6ClPYFsaUq/bmd0rspuIO/Pe3/bu5p+sr3gTvFEQAAAABJRU5ErkJggg== diff --git a/PCK-Studio/Resources/entities.png b/PCK-Studio/Resources/entities.png index 31371595e4822382bae1364327fa7fd501faeb7a..46881de8483a3d436834c4f878fbddfc2e9cc96f 100644 GIT binary patch literal 49985 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 ScN;;#ua}Ci6)NS;!u~(}uG|^` literal 46157 zcmXtf1yEbx6K-%PP_$62ltOWe)1XBPMGF*ncZc9soIqO~iWdm(Qru~AcXuZ^L6XPs z|K6L)o!m2b=H5Mf&e{F;+ubNtWjO*|DqH{nKp_7~`U?Pn@_dW3j*a>Jryx+f{oly# zi<}goV)WI)^8npSQb`g3sE)^bG{JZt<2ZlPaRUGdyZ*aSnts@w006a{^3swTV8fG4 zEI(?Qn*lk;pF68tLds_ZpQJva=JwFg5DKlc$VKF*|VQ;VSGz=g>JvQ%l zU%u{d{$sQjinDc_98ifB@Q}6_NnJR+E39mXH|Cta0{VFO3IdXQrTYeHxJLT7!wO&J z;SJZackEd%HDLm0j%bongB>4-Bb}?P`CXF!j7*+Dw`9q>?l~PTmG0Nn}5L0aKvYu8F*OA>{U{6 zbHf9a5A0y$3En#sT1?6KImqhmk9GLuz*D}DBEdk<9cXxBZK{RbJL06PEmAcDobwoF z;VGL+4P-a6(#^4*T%4b~faI1v*U7UO2|q+z3H2?3!_}(<$FNzw2h|$2;0^?1&Is72 zZ5QZ@j1}Y6Lor1ZFY-vmoAW*WTNtI;WVI7bBl8%sVa6*Gn8-HWbmZkIQz?{q( zGLYQWOCW&uR8nUlbxcvod_n$S8MNdl+)qrv2|nwYZO4}myNW{XG-Y5!c?a5tjXSZH zcHag?7& ziGaQ)CJgPItgPMcu=OtDY$LC{e)PjbTkkkZ5PjHQh`K(*9P!DGc@`si1e%Q17I9WS=xkEgh`O}}6Sm#BFk)Zz)iavy+&h%*+9qmdg{r=_RBCiS=ePD%#tE7=> zbTwdLED5qu?UP`1QsB*<>u-ZWv{^@#P|l#;cE5LMPfwM#s%&d5#Ml3N0?*ShW{AJv zeYkehG;JBl5ab=7E!R_9BpH`Rd)8f($WuiC0wyV_kZr_&mKAvv00T%W9sJT0>+euA zL+vs}|IrU{UVHo1DQ7k;v=F~XqtCL|1Xt<1MAKpTe#SaA7`2d5b{u?c(qoOZEt7_5* zyF!DOl>Dqv_iR|cKOgYNywrDY*KQ5n!!`>9$x%Kew9l#K?@&ragDi|cw5JrMn(2VZ zUh)655?aC{+!j`@e)W`9`{&jS&=G+6=}yqC_B5i9mGDo*{r#9sKds#3%ujCHpYHbF zzr)W(IJ5R58w!207(oyMkX$d@7IG<37?s1*+g>s|3gwvdTLDGn+@l#}*Gnmz129Yz z7`vAYc}1_M0Ffo3?I<|1(*(HjuFWAu2O6iGJ!E)Ij0!t6QECd6tkef6s*;nx=F=D5 zQoS0npXqmPILp%Dxa4c(QTa^WE@*Z^Pi|(<(h$}yE|8o)y12Ob*k$yowLdWC>#2Ed z5x$9GCB?0oQl!PrHs9>L>cHlf=>i;y7@y281u)Q2UI!D(S>eSRNOAyj=m3u}ZX#^K z{hn_}SVWHPLF7&Y%9)G6_4z1Ql&WMYdKBHA0F1A+)?^x&8aW`OVp@2+0gCH1j(Y0U zN(j)^Paoe-fYv>wD5@0e(1`<%OIdr=y}BQ_lK~e6Afdo)fO*k7&U)e9*xWilE*J0Nub|;~6ht>XzOYvl zv+QF$3(Tc}Lk(jX%&VX=r|?$TIosv9)8^v>v@1<^Ln{(4K1%iPX34G!d7b-!f7^jo z2}~9FM$>xBE#UAdfm{ow2cC6VRT0?Z1=e z2+~!ya(nXxIiRtUGSG+6{NNxxh#5dm+o05-w=hUx!7k1m#-zJ7-V;>P6Lf6;*fJu+ zUpBEYY}+H%<9PJ*1y zTixxksmzPLk+0sXaD{k#muZ%{Ku7T;egT1+bRUYLA%$*$u|7LGoZb4*hDWSRKTm&P zcXXq78zr^%qoa3=oo?Tl3~2QyY{5z|EG~Y>7C$`w*u%C;Yt53&z6MOU zBX+A%)7yJ=kiX3ST%D?L9AN0!!;^6>hdx=pOFJkl{5K+yG+p!7i`R`3XdAkLpqSyS ziI!z9b@A5zXvbD+<6r_QOVXsSq=t-bk(laa_Kf^0cPLv08`x=(ur~-LCt6zA9LNu! zT-HpAVCnrSPh7d3R3Qi7!ELVe?#)qhZm#G2kq=_x91ESx;rtJd8$JR~UAi|t7Y@fo zWFO|`)+)`;#vULJ^M)hjoNHZTPXVG2=Bpw%X+K5{>Y_LdbcP!oD|s4pVwOe)5ta$n zCxw~(_D`d>4f`oH_UF;BZ%#Iqj$^U~s>dko&DWk3TX+QoqjA zl@}bEE~0SGwP~z*m6yykFpM+!GRQd6=AbW{()D6}8CLI>o#Q#g1lW0#bXtd@FM4Zh z!ezhOfw9X+3~&CriNh;D23DY6{fm&E@;~NzZPbinwzaL7SFRZ#fIw9GdUFbWPG;Zu zv+j32kpYs^zghHnMm^1v0it3ysAI$fR@u*}F5u?LI}ZHe$R&$WU(*$(?(pd38K!kO z$Y+BwadG#(SUEXQW-m`_c>oaE+9PQP6#DQ3&y+hy{&X>%I_scj>Jt=ezNb`ZInupx zX7;0BD6faTWKqTCno~>mUdYrUD^|g2D_l2=@u$5jY1KWuw?m6O?+*M@;cz?hsmUIG z>9F>1st+ixdHQZon`;12F_dgZ$!j%wOmf?oBYE}VWLc-o3_t}b^c}|tlAXeW!CRrH zZ*B1aJr+*PJWfVJ7!P_7*{Lk+3S?brhV0@J@IDqxasUtl8xdS{2dh|2dP+Vhp(VdpAbh5zzc=FS1P9 zd+=xDDf0VXqRveKB#2kai$juVv=y zBat6X+-q4vPG`U<#fSfV7EwD7(9#AUxgh+@Su4z#t~ot>hegvG4Gni+V&A}rm&A`@ z^G|KKReua=TgElx)|?a@SB$z?wnu_wR+jN8Cq@a^0;4MnIJou9LD}DkY5#t$oI@@u zdKfV3HMp9ksN6gZ5FWt#kJ+*G#Tu75^_@ron;T-MD$KROHQ$UA!Pgl~I%uJ}QvS3R z0PgRjWN*j#YUiM+S&XCY$Io8R(64o?8ih@O{PGoX{*~pDQ!prEJe+!`OPNgkFYofN zI&<+X#^{E>XwKx>tSZ8ZJUmHzkt9ej`Y~d;#?=A07FjPc05h!!S|G47VwYV}euMYD z%a))sJ%RKftweE;%+sq@TCBpIf@v-(P$kF6^jP;vuKN{qBXu-YX^tl^Aslr*#9wcI zv{~ZdSAwsgLVS5?yvz)EO1q6K z?P)7_YypQtv^SZ&abwRzHdk}X)MDrKO+M|a*Jh0I`N&r~cCr0YJY|We8ZZG`@D5fm z6IQSVR+vxQo*0ShSYSOSzpDnOLMt7P)`cNl+I-w)l%t)YS_NPFJr_}{|#`9xeQ_=Bf*OjN`ka5KaM#eAO%ic&>?yxk7+ zUJNQp$87Mo@=kdQT8%`3Y6jEoehI>%wUqGK>1iVe!WRTvza4A|z6vjnq>+9>t^L>; z);>mo2nhpd-*&8>?EyB?O+o`r+2v`UF3n^LCuuuVC%`7nmB> zA*Y@|VpLT4g{-rmS(g~)v`#U762u%a*`!TnR&BvJ@>+jR0xuj)a0Cp}LcymJA)N{Z zWaCAUtXZ4pb(3?t3WBFWi{gM^eXW6pX!bIg6sOE1GsM`rIG zHQz|k&}mfr^V=dn7Uq82iMy(oI6mt`K9cdf$A_vdgqf-R08BiJ$Bqq%w7ncCRWZ@^ zWg}?tzR3tQK6GtK8{6uQpwmU;quFw9emsnq)&ShKI+W2@{~&wwM<;70YEaP`o|2jV zg{bF3eep4yN#~cn*OlJsm;^(W_mnI-g&dRr0Du`{P~Ef4+*+It~IFI`TNS*Mn=SY{}&knv`R2{&pk(h>oxjGg9)HvK*$W zb2bFMW(BbGRI`iEjpAZytHIyV3RvgF6RaJ#h5j2ZpjjC_3Y3ziU zuK7F?q+-Zht{3zDGp#<=h5j&5+Ha0^(L3R-=QmHXC%6qU)ex!hQ{V z51dZz_^u4w$eqP^L=4G~1RWIf6(41(7mMs!=Ov}hRuue`qNau`C_V1;fJm|>{H1@j z+A^8~NZw9dH|f-xN@a@xlR zNidc>M@Csbj5tc+=syqJNW4Xdbuddj;Fo9T>-v)`I0tJCE$EHbBTv0X#U0Zy`8OXZ$@Pkn0eKhNfx)$ zu4pQ_^5o`?CBNe*?G~Dw{DW8b_qX^n78U_rAGzFDFb3{Dj*_(QELK;`+7;tF_fRT+6C%jeK6yDs=kKcVpLKji?U0UV3&%j4sj;`CS7j13u@~#7xw#~)^Rg9hE+&l!RB8<&l&XnpAsv`U1mbu_Io za-POFt819ELg><3MqIZj%_C@lPTU22EfUA~RjkgJnp&D0zQzz;$Q(ca40vm1c9t@^ zILcwIA&EcZ>nQ{hWnp7ODmd;==>NpulJUKu??O}0Pp@&Z6SrwXS68nJfisK2POME| z#qF#_Y91&^P1p?~d z2kiOTiJB6|v#`CLKj+HhmMMODajoTe*-+gdjv1Iq>L?reRb|x;H$%YNyhx$Y_z0C$ zR_Kq_L>vu>!q}Nkk0Ph2qT>){`Dxzm*-yZ?6F_p2tJ%4KN0XUhO%INTxhz6kcRkO% z)-?lx3K{AA_Qn7g9TH=VSgZX`D~l0VZ-;Y6(2#lV;F2(zV(OJwA}FHgpdtdyDFO=O zjsJih2u#UfZ(mZ%3W~fOIKPY2X2SM?qi}?~0G?O)@87@X!hgKOedTF_a!zpsDW^rZ z@a@pe0PDMGcIe54Q0ouvKtUr~eh8JeE8KVkYF zLA11GykFW`LkF<={Ms$A6&eCobZE&~Kg&R5SXjBdcf z+nmxyd+B8=r60_I_31T%*9|ZCA@Nsrg(KdKfLhrUXe!P$pXdv+4L7Q5&pM8hU}?SAo(q zw*&*4S_VujbU^V(=ZL+vg%e-umKDxSF0hwny0@K#7EWWwciLyD4u6_DDljv;1|R|s zaKNieG1f?@z^f@vgCRLOe~eo}AEE2xngus*58)D?>+>mhzRBNdF@d?&C>f38=eOCi z2~u$xpZwSS#aNd}68@<>^G^f_I5MfMN3)G4jy6J6cHVTWYfgXf#C-v^JRnvVJ$e24 zSKZdayK`cL$_~VJ<)n*|&p`npvZ8kBR$vir-1?sK-^1|%-dluAb{<=SSrgY{v406| z=Q=^)mawU2tbKKnP>YlT=dzydDa_?ql|G;NA)8q@AWMQW@S2^iDHum=Q$;-H2 z_iJ5S(}#dATg4AY#I4s`y>)1g{F@nPk!pg|(PjXt5+BA&cwqW-rKitbT3~aDqZWnXCqdySJ6}p~Qck%7|CF~~h*fQ$4MkXbCtP~S? za8=#y4Pe~>g^VKFZUB7g+|Xn(Wa`H>9h->Lm@kc6fwVKyUrgnV-Uz1nd^PaAkxXre zztc$^R4B>#s`1yuF_bW#_=Gm7>alw>LJEu;lCt(YN~GHxm9Fg;|Fk2C>zLb}bmYyk z^Z2c`P2p`OVa+}*g*RphP3zp&Uo|uCdZsT|Ygtm{%?mPHiwWx1g`0(M7oBu)Jfg)< z%BasDrJjXj6I+a3D%c)Jv_E$6r*ba9&M<z;(RC9MyyascG01CFCE`Gz+5zxlDqXkS$CWepCOELZ9L%!i^gfly`` z*IQx~L|AiSy_zw|CCi$t(%A_`jx__7{5GmXn}sT2qwjs~2eld8{KQwP+Q*5X^^ai&UdgmoW-{FtKVbw@aZ3VeQ6zp%zM8#OJ*&$N2 zPs&9ugp9Ir{dHxr$#i!1^f7D4xy_y-N$kFg>?aN8AFd_G*eJtnYBNmH&%Z`v^!80$ zzvKgh3O{&#-*K}29e@@nmRZO`Lfgr<_JkePFZRA2cM)xEhUZoG_;VbNtf%T1#zdvlDL`G0Nt0p5rci8Q{eAtB$+6J-v zHqP&&qNylX4Lq9Bya>i+L>*Sn1Pe5ojut##T!h5n-yf`1`Hh*LRM3)=HC;3~ zPT?bHLtW*!@XEJ7ieIjz^@0QCd41$#piMtTBSZ*!%wxr_w_=Ckwow_+es$gq+J4y% zg}VSbY6Sx<9{u<-an`X|LGr#cS^^GIL=LA_TPcRA^ z=DLg2%t06i$yv+^y6KzWcluz=&8JTwz{~|+OyFfgyz%|!Jz1*b6Ga<&uN68S#(Z-C zTVWRnSU|$e`MY+#U?X;6V2s zL<1kdks@XS@F$bHp{o-k)}co=rxgK zGgmEHUK{n3anc6<9=XD7XB80bL>nPp#VDDdR)@kU|-uPN+Rxk{`UBrT^u;Rf+$NAig z*O0TfuB?oG-(>_!3ut-@vW0Kt3X)`JcDa3nVT)VU zmZ7z;9G_dch_WR322ewi!oeYpMuE8PcT3*{xjp7SYuell?jd_Lz^Jy0omRQZPiN$! zp$8Y58hO;824V%Csn=wq93Mc4YF4MH7ZMn+rTN+6pBzncgw03MYa^DOlj|w0pG=N1 z%%91llYOF3D{WrmWoAiU&Ofx8cddc5K~cm#2O?{MXFFiAxUbPD>;dU?v0q(`aOheV1P-DcSJPgfK+g$zB61U~u_pkH~Jbm?~h>^qc_ors84MSF5@K;}96 ze;Sb%&Sei2!aU{0AR9qvBdC^sF@gLyn!rQQ2QM-Rvav%uDY52A>Rq#E8e`B83`#g_ z(tLkjTOoAfn?*1fBDW?KWEDEO&=L5MyyQEBMwAcOYi+?cGV8~La+0f4NCf3C3)W@3eT zaYlO5St%F^B0T%u;ply=&Pi#i19Oa>_+kb&JXT* zy_Wmg3fZJ03h`>1ny`ewl}wE2G1 z1={=DJaI}5QnT=EYEa;3|4U8SH>rRwmVVX85W6l z!1sAz9Wu1n4ifw97pMrEcIo%K@j@!vc2C>Z7ehN|fN#&?Re=UkFUqmk??ZbL@YB4I zIAzS3A&R&n>ki`^hN8D^(&T1d*oAx^-ASg|f+wY4#GL}iIV9})?%C;y( z?^PpsLK5+Xo1b-!Za{;U^P+;TlbUNKVxW4FrP;Aoy?1`AP|a6)HNyYsekb)UlR8`Q zl#Cggsp-Mlu|SDegU(-%k&*oC%V}bayYAx zkCM}Ch8d9|*5dzZI}br$_4xK^%_^fmbZ)B0Fea5Tgav110k~f#jp?=VI&`mdRkFxu*}ZzR&b?2o)X?G%Lt@ zkIw6AgT)yx>1F83#F~DD2>GOJs}(aw81HgHqtS?O{KGK9ZVni+czULg#P%awAAS}$ zb~f){a4CF5dPql%tF}k+t>ghu48Cr$+(Frv^4AQ&)VD3#^>a-^>eb0xuD~~ih-N4D zOhY}k84p3Hy!*qyKk70?(-tBAV$n?V>iZrx#C`U?u@WK99v;MasbW5XejJPN9>{%+ zyBL6n@w-Iq78X~hVpDTf)xCh&TdDCRI3S0*^5q1VMBQafp&0gE+5z;GYn&I=hEFZJ zYPtI-9*&B{F!pcRhp@bb3%q7m*Dq0I-;_^y7exVNGmNS@R_B_lz6r8u_fSS!YVPl{ zE&P0{zZa6F^Wp5V>;Xzl-k1VnbU~3WjW7%{SFG{1%EvGtazYwe(aYn1b!}6UOWsRR zO^IP#{S_(Z?__ifWu4-N7X)t*v;qG?$%v12sNYH&W4;3T$(HcOJ~?m@RWiOLfaVdd ztBInbfUYcGd*9Xn&-OiwTAXb7X(bNntub}P3?C@vN>b=d9A-c8U^Jp_DTSUOM#z#T zy$A)Fja3->(anp#ICV_BA3m(9))J~`rzlUI6r9z1k|bT3TIA#d_jr-oHi#erIyfeO zy@r?a=lo`82a-O_>7?KQ``=;*9(^>8)=&>G;)!^roN5fyUxCn1fzamv&SK<^{{$W2 z^<$9j#tZ^=92I~)Ch?mFf*DIX!${=5lY3?_9%LYMP4u75c7HK5iFY3VK-v~Cxrp{1 zerFJk!;Pm?H?4R$p=G4xaFR@U4;~RY++dcyCScp1`$rKkuSPt=3Ua20AY!6&o6oD6 z4JVi#HD*YNpdJY4$W#eUO-+per~j;Bx*_ACLLYOMzd%i18;Q^>z7K@XPnuftYw+$% z=oqptimylUXXfFcj*hu768y8(-wM8&8R3GQnX$NA-1sea_gPDw51F>N8m}<4y_bFb zA?t_=IbaL_a>f8u%3D=i*I4lI}j zQ?W7JTam{8uIMWL>IbpWWgXGEJFLTl-H!d1&((Qh)HEoI2db7v1em5T-_ITvS~Z3> z%Tw+t*?@$c%+vk(6sD+#<{T9Zp2UR@%^yeJ|6?%z z*G;lsN#bp*^fty(+w=E=d~u2w`bMZ!TDft(`0qlmdhj9faR@Wfp$XRmJVH6}jHaV4 z>_I{KEnar-)X0*J=Qic);rfmy><;W0BAloBI@lNA#jpmJhm`VX%nt1O_{3`pPmjot zQ0~6!%ANjL^IgUDm!dlE-O*JZp_5V`iO{B--^-sWP_wsgf-Xa2X6PfN&Bn^@+MZ0A z$v1#|)MvnkvM91oA0Z%9<@LSOR8_aa?ZpGYV z6wc{Xo+K!m%F8ejcn#WfK@v7Fnb5xrZJ+(eGi*IQ1&(K)AiFcMZfWJ$&c8w4ft$x_)r*ZJMc14xM0NI~ z%xnmQA$rzg;qU>Yh&=&Q)OPbfThP+IGAowYO5Ml$jAAkyxUI-3^PDPhB7XO0k?T>0 zJM9PCZQ8IgNRHKtWJWcWt9c#PI7JZFOLU+BHm&$?JC{s32ATd*Oa?PgcPe;R>s0!Ud)57khs9t{o%poq-oH7MFM zL}2e=sCw)w3yd+*`0z72P~5Kru_cYOvtt46?UmNBnem)%5=DlTlr2ToXzQsuIx!Az zIOn~1VW!3?7c0F0X%@FW8m(vX%BXJ3t*hhH&@{jqoH~}2jF3{*4erB29auW{qq~go zS5=+Edd{|G1}tk#_cbQxnohN#ES<1zjH%ee4Do=91;D`Ne$G&&yQR8;np;Dira z_&c-gyuq`3JiLUy_5SfPpbfd35#W)0x~RgZrd=hd07$|sF@9|SODlq!^lLf1`G(6X zFB#cDrTGiSei$m4B?qBQgOspTO3;YFtrLfKBzNKm92bkIr_W#kLf%)FY95AREg^Ud?#I~IU`Gp%8-g? zPu9U~;gf9}fy2+yIb(Gt*1KsD6&JzAq;%Me*D^~1a*-#!Yf(?Icz!imDL+(J z9sx9q`sc~2>Y5U=uBOC>7)Iu3JH58un`KR0nuuLAn^n}XkYQrwnTT^0)`uqVT534J zbrbUoFq6bXa%*J!a?!_EfiKho)CMSCU;|AyNB7hs-tZ(EpFYm8NRIdjmQ<5lE=5ZL z*JItruI-*vMgiV$`|fvKUsCW#4lku5XIsbGpA9o_xY3Zr9`#om4b>{a!w$Lt$i0Ie ze#tKaN&gOa-a`d5JyoM?^oEL33I672Rh;v8(4Qv+Pyy}xq3?Z7zLLW5VwUQPKpA11 z{m{M#6B|-@GJ5oJGa$O?oy3nDETW~T4w47>3ZUGkOLtnTjc&(&tr~6TTp;Hg zkBzft?((Wnq9_9zhA2`3lBJ;0%7Iz$eezyIvWs5B^6OhxP6onf?Q7WJcl`>?;mc=5 zvxSOgA3+zG+rkf z8mHeirX?w2CyP*tF+E-G-<|ok2d9SC1^D$b(7x$!M5l z-DRBDXf*T76+l-vW2v~lydd+}X}@PkaiWHfsp%pPCU)_pG$v_F&aIdq+Dx}S3;319 zI%ANs=&5ufxTA8@(N?zYMo0KCn|UpU_1$^S*UGYw1gYOcb?fUeF@R#9uF&nX@b<|T7zuLs%y-5eY+1A!n z*#Haj@BGaV3N?Nern-~&_oHAy2)1bOr-MOjiG6(Z1K7vExE;=0-l>R78QZ-E<{wE8 z>n`R3nvHqx zfH*a`&f-_71a+_8LA~}8F+LNw<*~M+R{5K=kMs?tEJaUqk4K)MB6V<)7+toIgaZ>v zR!|kJ_9oZYzsr@~TogM% zWE`4%09D-T$AY{}52~rQB-OybQ~cupf*5c9{jDD6{gh^7zCHn(8iz-Z+8?-F-WLa~ zoa8c{_+~^Gh1xTL>b@e*CxSgM(>aM}2ehBp|Mp^9P)Jn`sJ%|uza5IpEd$$`l0Uh{&|lo4-dJ9ogFo67j!CALE*D1nZ*u^cvX0QZc@i%w1U#G zq(uR~G~CZHao+`d$~?7bkegk6axAuB5F>G^_g$-Yb39F%mD(8 z@qgn5vB*lF(}`azO`}Z7=HcqRv^~omfp*Y%QI`C^vzo3CKLWmh=3_tLc9TE_%0#S3 z8h=AFK+tbxxYIREJJ7RL-B4WtFHQwL1WbCR4~Gm*yXK85)$Z=a-%=?VjPgW0#cZ+6 zy=G?2oY{lEhh+1Tc)TNVRxUhse#`MBN`N~mYR)^Nro;i%U9JKhV_QlYq>A_{i(*U+ zg_%#r!3Gw&gEwI6&CpEl7(=ub200Ik-3yt~+5uJG&f%VSvvtS5J{{&{GZ9Pa#k92l zdO9ptj+&hG@J~vAr=KQGzMz`tZu%Y|9Q2$)B=}OR#{QU$sdXX!zU8Pt936LgeP{+?=iID@8v0vG)t|>; z8IEs+az$>UO3096v#xW%?0c_nQ6;ocnxpEb-y{NPADuZc)xva{Bd})K!8sooug@?J zU3}7noL-gWRud4OPpCSRIU#jh;$p6!2cH@!0A;ofxL%R^ATsD$r>cLpbOo0C%R zXEt)|cO1C@W7;#KIvbM2fLJp8ynoVReO#P{@}RBb>5q(zY4=LNOxT{GKc?^Xx&adv z9w7L>9sIO9w{~*z=lT;$&WjR>$V3+3bWIY zl}ltw(i9rk*BcZr0MQe6!-;;pjl%0|`g+*S<5xT~7E`i~W|0!sVG&sP^M^dha)1n$ z4`d-&qN#VgR7%?SPa~V>unJ9+AY#+5ptQ(g>E_H%+j`jExxb~SgQ*9ZzyObScW*Xo88|P zP8BNk@R9y-WCn#;p930<1ZgUJJl;KQ9)Z~Etu=gD!ik3lCN+Ba-ecaLXh$BbyOq{@?$jeU~us%uaJ6JA|^A=y7mDbF);`gnn9a({P?Je|wxEa7te0Sao# zx_@ph7#f@UM)0V@m*Qg5ufxVd~VJP#4GPrmE1GAbd|~{5RX-xAKfIk(Ha#T}M%)|3@9! z+mQdK1fy{+(V*vww_@~Do5`su-|J?Y0E|9B>*Lq?zg0!O8jV*f#nJYf+MYLR8dRb|c=XU_3GSJND@=fAzjADk*@;(z=PpOfg zYYPkCvKJ@AtUWzQW=@n>7uuLiRq}lRuYHiiyko{xxYw6>T&>^tLKwxg^w4~k(1i96 zdCwn!H4~H(v8W{(bBU@d9d8BuP=Eepi8dO`N4{*$mSDd{FEQW~H=?>FqDr?pmbOKO zL{$||JXDd3bH9m*yX+-sqelBw^8>51=+JE0tiyoYklCozsJaOVV)s1IkQ&wM}#9`Fl+H*ODA>mE|z@l;g&c(nG+?7Lh zC%WMkfn&NM7!G&us^dy5(if%~W5*51ozn0>a1TNNObsk|(}$cPqU8O{di zu1AHQJg4nlu?w&LHnC8aBRiM>xbcvEI~1>K(M8!E$zXm`?g>|0(c^aCS3Lj+BK8WJ z{4W|z{hr&}Mg$%%y-;xRF7H|W9^iSHtFUn!BB z(8qB@Tsuds1&)c{UUi)jgaJUy;S8oaIyyo}ypNV?X=w=Wvm982Npru`;IZe2(y}u1 z7;=v1d7^zeK$pQ^-wfRmer4QYkXsJH*I);-M$ToCE9_Mi%nu%;?bxL7y6(5fCCaXH zF_IdtCh(G~(V+!l5zzW*cfSnq1H&Lv!DQs*c}#!D#<1ApYO%TmV5`%`>QCfSQ@6x; zZm6o*5|Tim5C8)O^xHWbdkheZ0$8#UDeRe?h=lT2>aEo2S{!;Duw+~AlC=)!Sv~@?~a3z}lYWtm-NXqUt z1xA9JOs57|ab#p#;VmwM8VmpBoOl`IkmzO5LMrYvLk;jy0p~o|YV`^@tqzlO>PI>v zYb=I3+Xil9BYruoG?SI14C7%Za7uVcDz@hwv~->Ufx;l`^+hyTOLQxM*6;j#*G(S% zxVvIRLH71I}0Gq_|6M-2&dir;J`Jo zK*XjnGepfatl-1gA8hrlf8E<%TPoce&evFHs{L|VU28^uR8wVdsHm$FZuuVRy~zrX zQq;dY-xnQ;JjXe!zD{(cyX*HKO#mq3&et0#6j^lI1}sFzAF$E8A5;y{k6OUzn}oO7 z$)9K?Ud2N)0|7e5@e#2R@dMoNy~Qa_CS*{y8t*vF&%=sTdmdCG<)vjd>T+X2B~Eiw zPo8~!R;H}r^ARpErx4cIa?D<2sy6({pEpo=3}Y{r1pYes7xWgeE*D0(Oc(nea7(A} zhz*bo!Y;ui!bV@00=|6z4MHubtQWk7B945lwLm<=$@4|5;8#;BPl70Q}$cu=IBG=Z@Obun?Kgi_Qh% z;S^u`;T`QMalxf!tDDtWH=h%|KVtoy*^IR*+!wG@z$bb?wWgkZ^IWtQs!L)cZj)iN zcv3jg!{dM15Fz4$Jnldu#JB<6`2x3b}aN6C@8`2VEy4=?wp0yp&hCs7iZLcQ^;- z0f6wnTgjydv4`WHH3mT=#UcDGfOI4S_ZvsdPG{u!f4!$ScHJ4zSxz#S1P?8IiD|fI zY(|q_ZyHfPg1>H#=H-(SEnJ44Y!pU&t+2c*nn=wq<^Tg0y+v!T=j7RF@? zb<7yn`sV07dG5KDh#;&LLq58Bu6WGl zI<~_t6*olh@bypf@?H-|*e*_88RS$^L`spRKhO(74?x5z$)YPjZ3yHu`<26}Rn`wt(H@UCv%{Kfts8 zl#Y;}ocq~)I<^Hon?=H=bXhdrKbMIqGI;va0$=6~Cw3b9m3XojZK;enWs!Xs`7`I7 zJ=cC>PhEaGjXqdUE8MHsULH6j^nCo;mbA^t{`Gtm-@{u99srPT*=Gaco`r)`r(!Z; zVqqNA!58nmriS@&^uPu-s{oT9bVY4Q0*cRSrLP2!)qUq`BNOAnK22^op z93u}5!w;E+eh!VyFC9|}4EW~b3!QQUky#9zleRm9Nnhma5uXlu3L8)r2bB{W^fY%4 zHKJJN^)w%s*^2{=4R-_M;h+YdD-b9X|8gq9^H{F;$?L; zGeGV=8g@6qJ&s`HCkTeS7k*CdFHgJ?1-%LBlUeVVd@N9N>XEB0`>H6Y2ES^> z|HIZ>hDGteVc)ZKx`cEp64FQsE+qmY(%mIpN;gY4ScD)QlCnrQNGaV7OLuqgJ^ud3 z{T%m;=PhrRnd3V%SDfeP42-{UyKu&@^IE}rdxBSJWe|46h)%yC!5F7qE#|Az^Wsq# z+UeK<&pJBM_X-}aHD(wPh&X)=%EAwE^k)BrPH93V^Xj#J&ghs2)x5;9O*=jZcjTae zsXS3jh~$+U0Z;<(_cU3Q3sa->zuhik_l1^76(7~-=Tiq<&dg8~;5h!LPxg-N?CSVc zDUg!>X0&Fg1-1WUbV5$YbNpAhcS|v+aaCuH+m2;lJ9K_zCg@CpZN7~JjtM8BcZ{l^ z(R0OJ@*8Faj)|C+l$1=R!w9YT^J56TjUHnm8g}m4ACnKw^T7v>u@~?@c5%76TVmy( zovjk*&a$QOtOJ}yxuVvxk2|p_%U(<#Cj?_bbKOsk1M+oLAsH4redLYh5oW;Fw}*C~ z!mlLY>DPCi){?>~`lKT*V7Q_zEpH=TDTWgL(ZVFX>2;duPK zfI`)4>8Hm3G|U(Tx3B-FVU9Qce>BWpu}MT_vk^Dc*B1v=qMCZ&wtm+8vrX7@9+eth z;ZJO3#!cGl0PiZ=b5=uR(F3)N+W(`S&Y|nkU`2IUzk)G=G_IE7i zlwpL9q*FJ50j{3a(;hZ4d{Y`eBy<}a*{qfVMzs}Al1Q&6lnUeERf0Kfnwy`c=Y~c3N zgfKIghkYjQpgle#?MtuP=m-6zz_TG=7J!Nz0~`2>};{G%!}%Z%Mc7L z`&)Q#B6rvQ0;ond4Gj)A`Afk4`0M>5b-jU7wdtK`wduUm<;4oClBE~=v97u~ItLqV z-~D@)!+Lj6NWuPFS|#U_9c=X?$f1(&Px~oWz;?5yYe*xd$-|Dz3(WzxjVdEUnxzP* zn_(wSop%WYUKAA1y(z`fl`as3d$7G@K%Qy5Le~874*;*d{yr32l_NYrfU#_~yIZ{& zE;<^2h|zJ0!fs)Y-n_xB#3l;rc-5dno-!DuR)qPH67sGv*p?FgP9$sJ^^H{O#3Tjo0G7q)-?-}@oU(B|yq_TZLT?MblB zE8N266|o$mQI=8Y^IUc2)qTsoLFnT2xVGlXj!LdYuUJ7$Hu)FtW;3OR!FH9((Cn@7 zjAO|kKf8sM)1o)@HDvs@H3#ahRtoBy8+v+;eOcyBZct0_)0x8bF5iV1J~6C+L6vhK zpOs}q0$D9j+RHK`hK%|9harcGTeQc#L3N7d#pusd-6roUjmOuKd`(>IDp;Or(8Ixp zc0(g1l*$h0Pgs<{k!zB_@dV25PegpvT63Bm<|-mJ8#A$nZD0h2TI@TW=gV&V@%aqz z?}?M$L2a1i6WZjO@7X)h#zx+vp9eo5|0i#(#75YiK7}%#!MB=UcL+~f3z&lJ4ka}M zPCQNl92oG?lS_cHGfa&t(KP9ua)k66v%aeCImXxLN>*NHsDZP<9$QLuK_7lqHzgW& z9xhzBUaty2#(S%Vm@>=q!ICh#6O~(YiBFCc4w64iD>C=GI1z`If!HSG!9(%7c-!ai zH-9w33an`L1YYD}7?cXe}S~?M#j__`W?hN!M6vRp&XV>}4vs zF7QZio!nO(>lo9McjySJrM;Ec8IHX$t1pZ85T%k-bXNAO%$YBjAzQrDH}05xz$dJM zGvaVM-%Gu=PVTwcU+Wo8O#GzkB<=~JV?Fuk085h42s;3~g+;&1AN43L%&}8Zd*d)4 ztF(r%Z)i0=uL-OSd>qgZ_3%8;iDQpYW$8ZRiMJ5f3LEIj{1UuiN=PS zIZ?&lPl&wUPqO_goAb#=`?}<23qK%o(-Dt?bPwipzcj|3$l{x zUDNCs{=b_UFew&Y=5VCJBIH6L9#}^HtxF8R_t^R(?U}yj`0LPpUw+I*nK4b@p7nt5 zeB;Gno9o=dq^zshn73b4n<d&a-&G(X}0W+1m3m35C)pkHp|OHR`yN1E}^S<0IPP zX@6kpT;lIzANPzyfrpjiYS!XwHf(WAg_%-5z$YeHpbEABh9UumCS>SD&M=ytN(hoS zZ2j)qj{`Ub1TN6tR&?b!e{o>LxemnJ{ZJ4n5AOVMF-8jnIPk8;O;FfuNW$^DR8=B< zps7fbz*pyZJDa)lfrs7waTSk2OOUmz*BF!5QS2-F)D4`{?cXBBLjM zGM~=rmBf(~@_x|gk~(DP-?HEW%VCF7**(&YS)t?kDeibHRD!LMZir(}#2XOq;!w}cOq4#f1e90jY8IBY^t$i@aWboBk0|I)0ZO9nM zkUQ*>64=*=!M{jWREG>$Q+DB>Y;f6zfAU;o<48%%^G3Gx3OC|ZbbRRez+^G@(X=23 zDncn}x1C<_Ng6xnoK~1b(A9)x`)}&tdEjM64b$8PnrEg|Z!=0>?d1&c_3(YijfCGZ zq{l8&M&<<~ze1PasyD^r>!f8{OrWI{pLJq=6S#Mm;VrJ&8pQ-a#U%A!xCz5+2f86^ zfoCfI3SWO3uh-yRndcvW?_2L2o4|iqdK0=q`Qorl81&xNdmS9pnwvvK%jfwTqTb(u zl9(~;7HdJGQgjtcV4c0yF5Wm~RwJMsFn-~8ytU>ra;E)sO%o!eeFF(8LJN5b-U!_* zg?(SX?3I^d3?sU72Ek=X_ot%y**Woy%-^mf-_Bm}BoCm1CTQQ%I=hB zU=!SJzrR5pqW0HC%s@SRd}!kHQ+};Fx-s2rn$?Wds|Slz1FzQv+&9@JH;5A%wr~Gw zy?-B{^b1fcQqG8Rf}##^;6`{|2n~2b51%2^Ih`VX_(b(%!KXnYCRyyRmoms#sa_$u zk$QE~CP@uw0q3j8JoFMHn%aF!taWJDX-t4P!?1t*qaZjJ`8KJ?SwfB3^$=5yIlBrn z{$d!0y99$TuxM`KzJ8=g`X)L5l}&AyTRhs(+bD=NOUICXgb=hd-r zZTm6}2eG||EE_Ug!))jAh(7K1rYMrrDma?kLd(M;<*2THpS<@@}m$$wm*fqJRwKQ3K_ zMs#dIeq1&tgC-UM{a=?)WPqXDRYMRrASz1%JQLFdBJzf5<5+Tt3amux>T20ZN)j<_ z+}$5=a4-BlKE_(S#zDu&TH2OJKR)3L?NrZXgk!4X;o(h7-6-Pz`?>QPG)4^xI9|9x zHyN=XU$R^u4G|v77tI&*n?N&CtNB+SZcRq4P3{Qv9{`?ofj^KMZR?9b$b0D)B7e8Pd2KQr zDhEKHmwdu`3iRf->qQ|<*cm4TIXP*6TMj1Eo<3J4L!TNKZIM0kdCbgArY#*7-q?XS zKRgU}3%_W^hbMe#yKWCQ*4J-ONlBSHchLW^_71{XkdjF5J*C=!29z|bG>VB7n3Q@x z`q93my)-2j+;a;an36;D*Oi0P#(pY}pEW;I_On{vVJf$B@;SkY`ksVT;7XNS6fBGe z9bcd?cJFZ#-C?)&NM;UFl*sHkX5s<1Ke?r^j;N8C9T4cFuSp0F_!?9&_u}HUpCKJM z3gxADq)|{FluTMMg)Pd<%j+-_{9*V*vghu4x6~FcNMg#T;WR#XYiRd@QL!1~diDhXsj>6*T@0p3&R+is5(JPZDu-$5raUmds6y z!9ft%Aqu=)e!g6rhMCxbMP|8?$r3jpiyNQWKrD7W_tR42r7St#_H9AFsLlTCqx*x< zmn+kJ_}jOZe&+u(`EJM-A@RWVusFpZ zVxVJ_XJYf(_UYKuNglLL4Ol94P@+9#$+Ff4BtI%ycZdhz6pf_Gy#4bQ;h=e>7>qXR z9$dLLdFt`(*)zUnW2><}2-tH!0^Cr~+i42;4Sabq775{b|MfD`lDscilk)QOOd*io z@dM6mL8hSLyzt$)7Gv^=@70*=gDq=WeG`;mf1I7a6E5{eWN<^`Ow-iEkmSOJuIv9Ig9$6s?)<2f})H zUg};wkYcB>E=jESM;emVFIv}$1{b^bG@G;OW_5jEqHze(FIp&2RIIOC3OSEa#$Zc^ zFcjgKTxHn;{eCnPW#%*!!_Pk+k+SA&42?~-;^AReNYDx}ZGLbilgx>H*&52j#brq& zTw<;ay9Rt#s*buM>K!dz|-nvBdi+UT~Onf-JZp2~e+Z z^kISSIr^({o;3Fy7-jjU&&nM{FTc3w@{7N=oz8pR3;%}Q|HpVVyW`Ugr}Mi<>9nd6 ziSN9841v>UDgdpqYTM`7YXfO>COg6H_d`vj*>yh?$t{HqTCtd71r3@(8(-gSOnqAW zdu)DEQr*xaBVYRxRf*GI&&_FGjNK3<@&0|CHe}jyNpL^mV9(Ir5UWLX_OeyP9BWp< z$w_| zr9#w-jxWIqTXb(oOQ6Jj6?@d`R9I~8v$0X3QJhfvl*^*33yG82ZC3JV_H>Jrj|m;= zqNSbFS>rg{l@fbbEoo}HJA2bD@yp_%xnZ`~k)EL27I=h?0wR9m&QYr~Ur%q1^svz539iowVZ0p%nrIIkieZ zzUUHYi(!enQ$qPx+fo|D=(X&14)s<7o%pJIg^KXdV_u?_)OLFo@Vhuq0V}4;fz|Zop%yeyiC0lI4#)xb{an?rO6D|EtQyeP-Q*P`S*@g~JH{@Ok#O7FdcblvNdua+B zLHHfI&<(`h*zHoDf2vYU?c$U*Z0=#R&uWHZ2F_llQn#C1my~w8FBbajb>4g3olO<@ zInZJk5e&)W7GYvyw)?e#qivo@22r!1J<`hJn{ij3dSKIH@sT}miNx4lDj_~}0dU<5 z!EX7>MzH9|MgZ_3O@faQ(5Ia5q_LrvRI*|W_gGVAwUW9;1NoZ$p=6 zta5);JkNR0R$S0}!S8?ntuDr4=6n{)8ky{#evCDsrZELL;43fqAIqYBtHpV2M*t-l+W6%M|HfSZqqe1oGILS zurHoFUxmEt@vF~pW)SG;l+XB4O-;5b-da7oss#^m_3HVgW3dn^RCX)M!pn(SULZ8j zZX8D0d|3*P{8a&+6Wg4h5BB|Hm(I20X}Yl}6U9g0A7nLHdFxR>z~o{OiqVY`6^9M+ zJ~@R?S4{KC(f{osz(?Ko@>E!51f)-w;Btx#ckL=#^wl{Krm7{k4P37@a}KMvnavW! z|7N58-qjA3dIiYF24Wn-qrzRarwsp{8Wq@U=8sY5z|3eGJ>ZIwQsqb|eo2((K?xPs zxx9s-BL<8dYA+V)E@OPhd5t@h_n&bK+r%D+-mR8SB4B`n=b|2^Qti+4Z{r$mG?cWL;&ZrFxI0LC7B9v(hG z`1ki^rx#DR(7k^8SeJa!CjNeNf9B~wgFbX=bFOb8EQA7C64{yIi_=!=k*c@559_6# zQ7Ik+^e>f^s#OhNTj1_{uM6BiNHJ!8OBvq}f8nufg1phnO@fnP$WIS%2$%-gGp*jr4D?hj~J#``VoON6V=J zhii}l)ywewBiRFX6QNWxp8Vc5OR~JqlI;4#>DX;aMF%<#c5aKm2}qGiUJ!B^ONSg z#Dt`;iw~8_ojBsq!yicD9(~|s7Wqa<1BL z>G>XT2F8Lj($h+8UV+eo?zSI%>Uf-%g4>m?^>2O+n5~b>d$~&c)UI7P_YSfyS(uSz zh;@A`eZCse&fBz)y0_A;=0rUH^^J)^xSU~K!RK)#8-xFL-cC6&BdOgWj%8v5?G9^3 z$3}*XMo*{JYj>s`~Y#Zex_L zyII4(?sZ&fZ0|>N(~S6|sFN>o#bR)Otg&|W7;hNt_C4!VY-9H&v5OArO}i1(^jKCM z=d@w3p52?6Yk%6C(GPMJr>n0(hNe^PHFx6Y&wb7=g@2v&Rrxr$xy+ST?ov`j%_X?{ zzRdR-=yH`XN7COXKhOC{_oY+q*_z2mNgaF7!|{Kh9s|EWfhq^lci;${MbuiD8u5b< zhEbSHpV%V?ECf9<1I#SGQW_zIT}HXLZ+{<0lk~TX0ep1Suet)IFg0pk9A@e!FC4AD zXxfHIa6U`Rrfp9S*}*Ht}bFtX}RZ^n-u%2z(ycn$MKBYClBD zIMEpVae38f=*SGG&#}yu{`QJF7M<8LWtA$Z3Y!SCH9~wdIe6G>MesIcVhV$thGK9| ziS_(cL0-YCYFzX35M4zO!AyDPwX#$uScFsMYoe_7na(QEZ9|yfiB|0PeY{THSv(&e zn&)K}0w>J&O2()8Be-P^#mK7Gz9^1-kUfEZc!;L{&>HthLn3a4WAF0P;B?tVl_;uS z+&Cg!#FH`Lwze(#0efcWccW_ogp!GqH!wu{esiYk9+b&jnwEDZiC!(c4Cy(|H-7Vi z(F=LcJ+JoU>#s5qr1uRs-Ew(0qU)8gMAb@UoP+nso5Zn<(=^sbF>GA8x{5{<-+W{7 zUf74=X0u|^=lmVVjf1A+3#jDjB55*%nIx>^F*zgAen7zl4zqdzx<{qN(y0U_gl-2YHJta4R zy0~ynPYQS3bQKSl=gJ7x z2Jso|M0da9f4Dq+EdRk-Zokvzna5leNG^4( zlfVBN6s5@FskDAsA<;%DY1_wB(q9ntk^#7+50nGS8>1$n@}WZ{A<#$YZmO; zS}zWFA~dYkbws4OTt#+v8YO{1y2HfKW^0g%k1C%F8OAm5le|toV%qx_{*mc^mu*5Q zV_d@5SSMlT5|djLT%I^JcDZ!a zS)md(aH5ZILCXeSgrLE3M=nO<3${>;ceA<{Hs~%wUQ^Y_BrCqF+Zn-Pz3m_iVvdxK=bb%D7wt(Bl%PA&_jcJzqIDnty7!%p!0 zQ!>fmHpgEdcu=c@25Hd_Yv?I}@tc%r?-EULyQ~^7WLu7?lwQ&aJdLrc$zG~jI+pg5 zBnofito}aLTDP~ha3~eGtm^zV_V(8$*~A;IVGVOw^6GMX4?-y^H9`Gamm*VAgtdY(H4uZNZm=~`Ejw}IeCqg1p!u0n!BRZGF%o|h&B!8!rVn{-Be_dqx!bD zsSzRwk*sfCC0u=}n}P_Yf*ooLUsQ7#<4^8S(*cW5&A;%7?V&8_2bE7cyUNOsPsQpi_9B8|l+1Two%j zD>6uoQ2R(V`#$ALmq?vu@Z`DW@8{`EzNOADBL9^Oh~GqoJV@O^qpSKjMOw;UEUUKF z%&?nuJF7Z$b)7f$gu$NWUBOPm240ALWLA;VkaVTSV)W+z@+cV82NUdjaLIMT+G1(nv2&>8{ zCN$G^gW36M--nWebnGWKZx5$EPO!xy`QXWk2RdJl5G+5sE4~L7g0jQJy(yjcWddQ= z0BdRvo}z9og3Wd)IW0B59?Zz{Ll=UaLGY?`+H?R&R-`0HnRH1X@NZvnUDkJwhS8Jk zBJJ$IBs#SJ4q>KkYYte#-13f0hlBFkjnU1&pv()Z9$0q*&5R>VhDv`VG-2aqgasPz z;ZEs7O;);M8(bUbV?iteXmxlmL_I5TGn5KnG&4>oHy9PG zJOR4=ufY;dS^VnBAhD+AaSt;)FMjE_hJ*ai#)nnQkb+X+G1lTTi=mDuw_ijEXlX8+4CGr{R&?j=7#r{XuD|_wv{g$7>sVay zF)iYuNZ7@#ejdY$)9M08!>9(Qe2<7zXjeY)eyp%)ap!}d?MyBkml@Pi8{@Mmr$-bb zPJjQ#4+&?41*-%|SoYN#{`w=M1Ht=Pq|;YfU2QlMpsaqLf%?*{Y?o^PWhJDzw_Jzt zVjyHNpJ3aWgM6VjsZZxsIAz@Jn^BHdCp0Llz*MkX7_c~?=yuvl4RtkWG+iPTrcXH` ziJ>vsxc1i4-xA{V#y_E+1zT$)sh4JpOUekTOdfg^IUa6-5IhNTV_k5B7~zV2P7#~{YIun*@1HO?r z;GJW79UL#P4ZT66gncS$^roHF68Ox#PCuZAb^pnNK;*Lp80C;h2n(Ek7H7IJCGjgU z89h12OTvC3_~KW1TEwgcp#+d*=xqV0C$1gZHyEd7%^*{Tt)sm6;bC$Hm z@QDMGMbz^B&)Ss$sj`!;ZiYv9hQY}=FCPg;UK4lxP#v578589qYNKJI;K!A}?cafn zzUbVU6u)dVM%~Y#N0>P_nieQqFQj4mAH@@&2;Fi$89S$r{kG2qv~J^{sShNJFJOy) zaOI9_DaA$Cv8))!!gnCo@i)DLATEDzrxMQ=29)hf%oLQAoPN_(RVCKYueSeGX*0?q z&!PR3plENlMqxR8{Ga$f!$uo5okuB&5fTOIOBbUtmcxrnLt^@0E@8iI;J^a37)E4S ztFC@@sod;waI|0e2{&y0%$J-O;;U;4ML*^bx_?ztDRi0ja_=NFHCj4-*1X1uk?x)3 z5>7gkQuCthmJ`zdoZjZirgT+dowJ@MsbldgtejhPZ}xPG(u#f9>A+ZSXP8bWxI8Lgd{aqT2;xAK-8ZUk2?V zV7SUl%xZ&!u-}!N1)EjqRBF;IfXphP)0XnAb&FuXL!+t7y_l#dXjTyzYi4TI; zu>Uy)i8H`^{vii5`A;Z|%XCv~EB{AH(8dSUF2B6xS}hTg_uuom(`u=H$c&xfMRS5o z!FA&VE3A1%lQ_ukgNwVAULL6T%J}4@g4^q=I4ABZ;KWr2e(m)f9J70DL29kfU15u( z5?GcLSoxMix5w?rc!y^%cA`Yxz7IOm?x7x2`2FU`N=?G{9`#; z_PVxC=X-vfPDq?K*fe=3Q=b{y-gQj-VTQTp&5hTJyqAXl@B|3%HV8oONX65zV-fZB z9N=YLHvG!*4(V#(J`XA9#g)JgqD@ z4o^P@UMaV#IGkp|f^(m|q3fv!mb@|WI{b6;SWU)2If*!`(b%cwzTTLZr%8qFKMyD; zn2R6={*>jw_ooS~K{;^}=^L336SaAWlkvlqB|dJD5pf#S@>)kWc;5S7)gs~&sF<_G z{dv6dv&Zcw4r%3#wquV%LvD8)4*HZ5ZYfZK+eONLRE-0k`%)E$CmS1Fn`8cg)~5h{ z-Il=?+5>8CAAmJ|!x%~Lbs^&AKAWch4!YRWkPh`O8P1V=6EHbyKZPh9ZJFGcJVj^Y z{Hl!>B*@U`dx>bI_NYiE3U)a@gC5ald5`GVICi>DAxtj=;~=jf>wj)DBh8bEU?nfX z!}w~4+9#MhkpWas(_F_xC}***WaMO zjj`WUZg%kve8;lHhw7#&_=i3-EBIz!#QQuvYiW0qGlU)DVTo=GO^XwuT>1}^)#ulg7TEHs19m zN{n%q+Hy#G*TZ`4gP#Rj)D{F3JzJ}~zF5+OaKqL-VXgjzH;X&vC~=HYx0?P=4Ga5q z-nWzEDs(&QNNteR7utBN#H$zGg6m^0pfThhm}V!wEb>i?G;U2~jtPX+)BA%-Cg9Tj2hYrClEk|w>!fOV!-bD!KY9|U&30>b7mpo>o021}DcnE1EHZ==qN^Xfzj{%34fj%7)y+uSnd z%$pT1FQw7W(Qo-!mBm68-@~uDwl`A#Xd(O|TbaE@;nQ;ajP`R2iailrWHie^+cM%b zQOBQyGEXsqt^cR$bLWTbc8ii@RIId53r*~3@i-+4>a&WZBS9~B;SFgwRYP|=8(9Hb z?yNd5^z5dE?14oEo@|Ah{>vYuq`nn8Hg(Z!YaQhv`!u#Q?``XyEa~3dCu|0vzJt$( ze$y5()&?`Hw_qmIJ0rt0mchS2C#B;h23$UQU~KQPx9WD^5kucwpFl44O3@<1B_u?! zM-2`1JmWYofUor$;B^mj(0viRn+`qpDai zL>HgvJVj1TwN6lIBh&};^IBhI*AxMJO1m=wx9unk7w64&Ec<-Z)}4vJ4vj&$q-f0F z>%tSgVouOKkaVYJ0zyJ>DC(-Unu)dk0eoLIphUg(H}EZhpjr#6HT@11=reWR!&-$*D)T#w0@H;C_cy zQv31SfTNQ*c|fstA}J!m3T!NeKQXkq&2=g0Y{ySaHmOabtQCaSQ3ew~dZ zFzw5KW<20!Cy>aQRnPS?RRQua0dG`qcl3wyM%^DXfRK>zvy2*kO2B=vRxw$DABr_) z8QQw%G1unO(T2^?=kh97N-{oN>#2B;^YeUgh%x2)Bvw@gBv|clVdI6R!@yVAXnLk4T7^$g?rn^m=DC-T{=ve ztPW{S*C29jtai;CBFnW3PAeiWW3tEi;B090uO8tn;C>4<$@ssQtuPvI1Fm;ZjS3p3 z=x*lb8*i5=$cc2`6AA1D(iiyajmVYVLNOB=o>WsTH;jgu+?}VfksUP?>72eUsh?81 z^GQ%SxFF}%w|>~kUb=kf!;ZWSv3eDN(xLZGWDeYT3Swc26UGp_sxy`MmV zriM9iv)2GZ?eZ)vU~&Z~S;Z^q*y|f7v`3>snBe3jH}_SOn@~4aA9ur*Uq!T&BQ8#r zU+zy7h~eP6qu(ZYTUzRzaRU-Uz$hn@RkuBq_dL2({Ot4<@cGM&^u*@ELYE31nOlL`hE+}(xz54iojTppRSjJ4C@)&th@+`vo@K41ti)&q>! z-jK{{v;r3(O33%fdyTy=LB`_vNy^hVcQ20g_SA{EN`a=(+hW^nJWrj_OZ|weyS^sw z!`@qQeQ6i4f+PW$6K zs4}k~@<<8V1ddfHa}l4sy^$-_PNuN;+0BipNLm$44bJD4EA8{!p$z<7 zFxZQ8MBVFSIo;Ay^&OAuBU_Z#%0jJ7*2=_g1uvf5W`uhhE=bb1wliRanV*wG#r?G# z)Gkwc9iuiI>AjaxGk1IAN%s}=$gmkDA7BQ3aXMn?AI*15$SiXJiq=bj)(a&m8~svC z&O?Awvj)h%%*^^Gt-AHJ%T5~Y$V1vCW{?mU3W=ta_E!#4pw-Tabbf*_0oJWp-pdk6 zIUq$nl;ogzww-1eTqzJRF8+PxdP#4WcJ}@&IR=d}$BmrBsspU;iRQk!mgB(QjGHUrsg!Um%fn6qXsF%obA*aqI4>dj26TadF9g z%BM%&AKGIPoa){x6JujwBHvLbg~!&lD}^mbYkh)iK*(b&Yw|(NAI|!Mpp|5I6+VgQ zI)n$`=qwd&xF^wbG2OGYZPIH_ktOkW?k9gMkun>xRqCWhu|Oxdw@fG%uTGjz)@nL7 z`a+r{<3#ymVFzK%3Rr6WcT7l`w)Y=nG3r5X;h5M`ZKm9?%uPTFV$S`p)g&;pSRAK5 zghtJrz@}P2<9X|GaJtVq#n;)tDhtV+UwOD`m=^+0?=w{UJfV5RyJ+3FrVL|t4BXQH zzl0vLz5l%+bkbY4y()LsG&O37-A=R6FAad~BCaSrJ{;vn@(JUyyUuq^J;+Eth#9In z1bn5wNE(4%nal@j8{d(Qa-hWVM=9~?7LTxPDv?ir3?C~9H50UE+EBRG1~BR-iQ{@+&ri~o6rwV@78x}Vy4sYn`Tkjxm-V^0#1CR;RO|VLJrwy_%DgM zu@IhryGO1pEFZLLXc+421=W-a3%D9kQ21`8w7Y~*qg$W+k?4o>MQO7_@hmK8*3v(h zYhCTg5TUoCr=PRx;aK`m-K|sXOI^%cAx96&`P24Wq}-0#)Z5Ik?;gz7ICYPOxWcMf z87uoe!ld4$88iP6z!!(Shdj0tHp%d#yn@eae}eS%tlhIOA1&p~-A$vv z?#(=khjNSU-@fW#azF?#7iADqkngh1@-clqC`{Lwu z#do=aV47s=*WIK4y%_{KYwkipDVCe_@Qt!ggPl<$mO{zrdXKg2=LG1Z${j5}_jvT? zi{wZK^aun49ErY2>=zy!L^xZ$+p6(3qh0QynXNL*VCTro?r4UQDu1A6&N&)&vyfH7 z2h6#r!jPiiEE<)%fi~wls+epE{mS(M$bm@QovLruFZkc=!6<0kzbuNpq`PB{qlg0C zX^9&VLJU>r_|VLf7}yU|Wl?H%GSj6&@f)Y)iLs&OFHnhN<+q?yr|LE+VBVYD|DflT zed|UV<)1FIt94ah$WQ#usupu>Fm-nIhzxW3_^nJ94BpFq%imm(j3Up^^4xZhiY&QK zzlM~oa6vpA@>fE3pdjcroX(wckk|>#6Bv|{tsM?5lKa<4~MyL#!|U+d`20Pl&Hlap`cDsnI>z=E3o9`Uk|c_KuBE zI0}^zXCxDoX2F~w#HcR&%+=91J?S1Dx{2#Oie7uM;FD+Ga`SUn*G<^=#YvjS!qc=# zdDesQjgx`d6Q9)!{0)e!F!3q6ij9Yp>*og-JTSY!8KttggM*S#X!!p=*d2Mk+CFHu zqWLvqaNI9{euFbFoG~3q|U)29b3?J57GyXH^g^x;w}sJaeA0n0teEeG0B z)!j@f(O9eTiE2o88nPw(qmF6Bpx_kfIcV|VZn<^-i&nq^8j^O4o^X(7%a=25ZGq7x zu~DJPLSoqJRSa+w4_*JjZAb{yT#uylERp$G7jX*sqw`V!{x)TRvi#lus34Ah>^~&N zQ5oT;T~1KJf{e>qw8%~8w%EO9Fx{<7b6WD`Aj*prHCK8oc5uO?MfcMwUx0c7YgZAZ z9e6H6yypFf@ffG(OCg{r&R0n*{!>Ni>iVodFR&8l0tBDSlq z)0yt;Zpq%-rEG~#2&gN!*K57`k*5xAoj<#>Q7HB~qx#=f3}eDs*tVwY3WiBpu*ciN z86L^s8QeChRIUgSJS%7(4=+0OR1KQH^K#0<|1a)$>$y{n9+)aHj4z}1b}RVk_{=c! zgZfi#Skh6=myh$~uxvm1Z4b*;$qhmL`v0l=nZL7Uioq8%{teqe=*S}l2Gc8P5K1z` zZ`1$gmkwFu-Pz7TOSgs(TASBfD#QHho9>RDr2e&hs!tgGQP@OfeP58Pxd}cP9Kt;( zLLKZEl2%|Iz%l;gGvNGYG;-tu@L=xj!Rv zp1=k6H{!_{$`;NpE_|ru;f%|mX%YBey(-2A9Ihm-z=ltJ1#-Iq=28-yvjp{HS+I<` zZzo5qWGH`omZzN&4cgPO2&lF=C|hcr77@eAmhs8EG|#+)oTk!muGR3nuaCQx62uu` zHepV?^rN>2NAr~{^B%~vz<*QZhXMLIk?cbBqC+*FC>U~s-`UscZSS$$xgb*U^-O|z z*7kk&PaavCNL86EErzqNqu;$H?%wPa@$8y$0`#kWeFO@MilscmmYsEBY25LHlQZ^_ z3W#4*wVvzlB7_Q58_}jl(c_kw99uNWUo59p_4YWBh{u~pi%a1Gtl?el2cX@&NsWXd z#}g1#UmJJx*I^kHy?LUHnRKX;>3@$@J+^HNm}M)|4)CG`_fZ!D2X|o(GN2@*qc=J1 z*R3)NNthf*|E3gbV{TiAP_H0iKzU{DE@x2pY+^S^Q<~os`)N z=!aw4&pa>vetNI8onNNVavQ7J)0}j6T+K9!XS6RJwzVJpEH-fvkA~9U3(0Zm*VO%? zn0?Gs>agBHs$2;-@p2g2KgM{Y@C~|p^67GxT2X`O7XW~bP_I+msk9*jMj``7I$SqM zEgZe7SZCBZd7j#-{7HWKM51LooFc z7%N)!QxstprQ@R%H72LXNK?LBF;6;D>CyMy9n1)<1*)f%HAc=6(9@kcR;tYas6n*% z;*7a(+v%pneF#Yag*{D0hkI`#9~L_YlZ~<@sbXa@L%}dg#m%=3_%beB5mAFxVpxSY zx~5<~P&d#8Fn+|IU?>7U{QdUaTq$U>zZIXTbwr;lc6^gdQiHadEI|F2oAl61Tl?RN zKh|kF+V@)K!-us1Nh02H$EvSd6PF~*E1X29{D+Zw-9#CahZtsl zT>bP4cBvG2kceF67l>pb$2z zsWHO%b*I&`7zBfc=_&A13zF$1@w#*cKT-$yDq>kGaF6u_!NQX5j@w?U{N~L|4~Fy` z%KMyPp1m{gZ0o-p99A)A3O8i$g3)@A!r>Z#U49b3^^5$sXi~#H6Nh{?*YLFwM~Oa$u;r&7}FVSXuO(ED8zzEnZ<^>B%8X`uWxT35dQA zkuH54Qj7*WAL$*rC@aX_!{F1|#4aexabte@skAR>S8e_ETZNqILd+HH9x>W*f-Lqg zwt3P`Je%9dwD-Sp=@vY?r1wb!?ChhVVvXcpk{Z~r?(Z%N53pz(dNtwJS>?Zy!RNk+ zD_lupY8~p8^Yeh;z~9)}`B?`#qMt$h%fK26Rv`DXsjZ^V6^1T&gEP@MJm4Lc`3LP8i#JU-j^@p@23X66L1Img@Mv&Jn# zZX68y)D-HYUJ8nX4jvt|T%gfilBy(`MI>%ks?y7oz#AiS3S~CxU+eeq?_h z^Vd)`em-^^@{aJM)uC>sHQykyxm-`iq;L;?+ko11&_FUD7$mOk$2>?JtyPlnvlkQ- zW$!a=S+`D#-@m%PHy+6ICvAxKvl^MgXlolZ3biRXx^56%keJ)Zy57DRyJHyV1K2Pf z!iv$2N!|!v9*=8kUebRJEA84zNwK|MuBsBO<(vRrM!FS$_o8DX1?R-4xyG!o(ZoKW zJZ9L7=mXzqb2az;FXm0H7tMD#ae}-ACAo#g{OBt@yR_wJHM!wqPlgmgX2EhS{PP#} zsgI`Z(=kuY8`c`@Q=9i8A-`_X_8_kPV9?!-gsm7*HmG3y=Q8Mj8Ewt9U;XoBx3KdJ zG%c8oh&DmwZi;Q=&sLuQmv8W2M%xOekYI{+&X0XmL1k2HN-T5pI7dL6DB;)#y;u^W zIV$U$a9FL3V-1Z$UGD#B>Z{|L`r`ga2q-ZWNhw7_LO?)jlnSVHOCw09Gzc4@gw#~J zQKVD42hyRVLFpVldepYx#qaZbUeEs6pS$;-oqNvbeBO0`Gj?Xp*(!#T5+`-jgd!qQ z{ePm_bfE_0M7@J|Iz2jPVWAe&}bTF_nIuI2p z^lV3tuy) z7``Ip;?Rz1*J|)|UzpS&Y zecK^*(wPIU5I1}GvE}0A&UUG|S^J&huU}a?viHtX$NB!8dpZ7*b_Kj^aO*N->67M` zL(!GaTXe0;F?r~#yVjkEdiO;OrI8T19D_HW$eCO@$)Aghb)^(R0t9uWG`l9=3~RDF z5rw}WINyLVrI~|x-SRQb#;j}k$jmMt2LhyqChRGd4tjj6ys@ZbSp%~D2)`dU!b4SA zEU`%>AX1EgHg_x|us?}rVOW;ncMF39E}vuB#<4(N$*)~SdQj@8pjEm@R#3V4Mxu(D zCpLrVaBYLP;$o+IrppO ze?e7R?yX%9S}%N&DE41Y^i2!zWezQK1^O%FJ3xsDeCKsM?#qa!#Hoqok#WEM}|kiuOKyqArOh0V>Q<73Os z;KFgMt(O_r*#0cP*r3ceHknO$n+-}2xggVzYttifzUp%tw&w)fFGbmGKGP**MpK|5 zajN)ycKYa9jtWG@>40vx|{5q#6@sa;r^x0Cp+6lss>d4?JH)It4V+@Hr_8^_8`{#c2kfG8!C4CoECq@4w$2P z%OTKk{3+gV>3Zh0m`nYUcIFl*c%cn;`AZzuLl>|f4rXw^2}S^2dsF^=SxmNIS7ztq zvdhri6`LR5$5e5jDV&HzrC5>$`S>h}NN%44eS6|fS>`K3mEfhx1@T?WMmyav&n8T_(Lo2wy|bp9W_CP4u_ux%Nqt%y;C^Y)h(9yVu<8B~vG=43KwhvyH=nX2g}o0XCtvoUKl8Tv_~0iAS=*Eyp(oA{ zrWfAF!@dK3m(Q$@*Xp+`mVfM)1DWb-M?+g+%X!Z?*tuFe?0w&I4{&o-qmhbfQG^4!=Eny!RA|Y=ex0Y`Q~*(+F>MWR zUgyGs>{Cq^3P!E`XI&Z~qtON#>@07D8n01tVggJ_b^gm%GvGTr(d z7fe_D{l1YohzEz`%Zz&RA!O`hP7pEWGK~Mv%5!Ps(tc9=ZV`z%P|Mr2ICTygy9i zO5v;HJ{&OwgXZ;-D24&H`{HUhUiy%vGGo#tKVDh*R=jy(5z{#{vv7E9pi8_qpCub8 zh4gwzVzCRnl^KqH>RdbPPkq(%aB&NKci6l<*dGG{Px1u}K`D*7!A}@i0~ET~+r-3k zfd4Xvi>DDZ^o;nG=U2^Vm1@;QRp(^w>#Y_y6f2w+)&jl76T_qsjer3B3dssT{)}r& zw=GN9T*x;&m4};(g7^yHoavY~O(wrCvdFr-`>hTE z^IPytHzCbTF`bUwQ;Who{u7A?iGQ5qO;v_xRo^u~6)m4b{8%kziMY9E-(CbkRRk{1ru(H=H zTYW1sfY!8nHA;oHy~06m_wxpXX)ff?FtPRtTlM32RzVygijgeXIoLemZ3(;tJQQC-|5PeQeV@-MRhvWj z%Zzu)j*hIHk&e|EVE(u!9+3iWgzLQu5as)w13Tw^kI&BQXAh1=m~}EaHaAztjqao$ z9AED5kB_k3x8__vi$IU-jz^@tcTEmM!!ELN4+y+(0+fiSIgl9t1Xmg4&4jK4)K<}I zLb4evOL8l-oenf;YOHMr8pK3Yzc;*m39EnxT2Ls42-KIlcn@I0*;@qM*v7gh4w)6_{cF$^yndJE7~|^8mkiy}i~xF&GvZ>dt^L#Ev#`s-n@oxRwd8JS})%AJ4$|QpNg<|H%HIwm#s+t)Z;1#=d&Uj49$KS#N4Hrewt}4 zDPTPy599Ku#{@M+iUM$EFS*RYqGYW}>qY^;;slUrTs z&(eIJUT2XL&PW`1xv;ZJr-fPj@gdRXoVCoTG4oil+S8y*sv%1$pf*5G&i$|$2!1~N z1#nGgtp8-8B3{$1&P!uUs(fQB9$;-KzRxdfh_fuNE5GDO%nxD zJsKsnqE37WE>Wq_{8!@<0`twEHsU<0SB{#V=6$3X1xN45nxf(Il4h)>;ARs2#JAc2 z!w(K7rco~+m9Y0tj)Xb5xP5U*(~ONI(d~$p(yi9gH`$nMOcEy@PpqpwuUYt<3k~$Z z1R&-b_lXcjGS1M#b;2v6$}7M|`0hA?YvTqNu=bex%yxMIDnDG~R@rjH!i@h`DS$=o ztN`6aRKo%V$@Y_-c2qG<@+6#SY#Es%5{?S-n0g()Z{pU9J9h+r!bYr1N@|3y|G_8x{{)DD32xfT9MWUsC@QiV>=W&baGI}`18~*IDOlpISWik*T_dZWM7mOrgnEU-SNW* zDHToI!ui{({Z%;gSY^!{^TS3)1gz_GF4$U(&vD~52Uw-7+F_{YHlCirM^y#q7dC(g&+1&2Kq$)~S?oCO))ZW~2ONKFBk&%GkgI8r_1nTY-j zA-bByX#u*S5L@W8QoId|!}N$VfC~RScl>wWy6#XbemYKJMN~hyZDP7(@cq>da`IKF zd~Fo;Sg%3Q(^hghTEsV2^J0^mH*kFXj8saxR^GY|)L^R5f-h&4o55s>7A_~a8kF8B z$pL@3zyYy&U&I>skFdG(9HpPmyNiMCu=$eY*tS6MMoA&*%;8_~$i7WFOMwSrtAt-b zLz6ly`KMc!CXLxeMrAbIs6OGZiCkxSv!ZazCqf6{DfG9(?nQry1`AK@6*_l)Y zs|OHD&-8BX#y^MMLku57k^CF+UWoNDo$qM;P9@kc_PI(gO7fn#%Wa_S*+>I+dN>$Q zj=X7G2K|JJFrR<>90gFkHO-kBJcM~Th34+JA2mA_l1E!T=OgQM@w~#Mh_8<4W?fpd zZwU62!fIYV>-zIoGt-~GsLM*xZ?i~q;-g2 zv=!zLzX~EY7RW38HRjsUj{51!`xSc6ki$;qW0?Ej--c?KUwI7&e|;7;QN#fk;oN?) zJY`eu9?#4Yo6DXyJ|bQ2UW!G7;mSDNz})9|9AS|J$uG*{mPJGIjuuW#dVtMSmJpKt zWMHj?oOgZuwrYFrwG>Prcv%@3&;t3vYssJ1mAX1PzoxR(6woD+u8Pzud@WzHp16Id z=+|_}h$q#*l7wO4Jy@1!Ja|m1@vpjB?%*Gk_Qagd*5&43Kj)XIP}{8B#-i-}NfeuB zJhSl5#_>L~RW(x?H$i!Dda(b(-5j@EwJN!GQZ?W)(vop3fxKD9+wi+#)6uW>!&#lz zj0V&M(xyqoU=&to$Q8$5xO~zpUYpZ>Q4hv?%KR_u8Vx2x|+R< z8D;4Yf8s$+F}uo5F_zX>HQKo_Fg-kDFngqnXnp^4RmP3rWZ?fHG?1>oUS%3+T(q1lylEk@zy2s1O|Uta-% z{T~DKeda~Y2}aGrq5^o>wlEe+SO=|>pz|AuxRoO5=MKcJ{P@v&3@ zA6&2I!0*jDcw#&m~irdA9PtuwsV-^#ivd_^^7nkyHo~*8}j_m8sHNe1lY<;e1MUk_ScD9%G zc0^l=o{ghZ?a0<+(y&gKB5-;~AlxaUXxTh)L8yPvr|bKW+3xjv<8{BHw?pXlB|c`( zo?)K0(s6bC86j%tE^_^7rhLpH$r;|kQSZyATN3*F1 z5NV9x%0FNZGyHhK40oLsg!^QP+JEudN>!xtTyw*F= z!M@;h(%QD`D&2gKOb{_EjomWZ;PLR=XRx3plAb7|pkMKoF0 z7(IvnwG6{R1$MLRZUo5>e;;OOdruznii%8MjzppTMhGd(RUYAu8`Pa3`6YDc$x;oM zgo_V(QQmM&krTUEov#*St?yVZQ$Cm&EW2K_940~ySzme$?rwjoqeXoOBx&3ttLbh+ zLA3E-T{j2RZb9>wpW>e#4w389o9`H#8@@O!BOj}|cpHV-| z1BxKZrrpo{aPMjG+)dH=w0*6%a4`l6H}*L&`R{CDA~DR!F%Z9Qg2$pXn`(@XZMlG^B7FG#)~wOIpykhFdcNBVN>H zP~{2MUPkIyq(jlCO`~!%Asg#&m{z|1Ac9h_4XI85an&*moE7Mmj~RwvC9bqd-UjczyW<)?u;IJQ?h4Z8urLJ<;~}VgM&RN z^)DZXsw_Z*HV06U06qZp=P}W`D{EVpl2%n?acC;0$k#w-I0qfi=#JD#crHUwBkAUE z^e8j@($PV*g@X9vL!wK`zT+RUZlb>9avgOt-owXN!Xpu8fD~ZP7I2tro)4ey5%kS| zzmYu{fEa|`v5mp-{k`gRJpmBZs8XeKf?=HCIZ?qaEI}vK;`W{A%@e)y2sX{AeYWSI zM5d#?Nj^=Wv3va+uKga~Vqc-Wv`FbAR!yVMSl-+Gf2TAn?DB2lD^|#>hiYSG4Qx;z zA5J~V-TGyq?lLCu-u|@3uL8pYqfqoH6=OP7P%=(m=2#JV?w2}}@aNHs-J+S%tz~o1 z4o-lmB8{QRb3Q@w=4Bv>F^{sQ(Q#7~g&^ zHp`q|+}EhLNW`C(Dv8NcE5G0PgjMPjunys#f7R^~9W(Difn>Z8F1@yQ#wVxJBNvRM zpXyaU6Fc0;7hd&^HZ4!9dgxf+tIX>shb=iw);`_?RStfi0@CyDOVnz`3BgQ-Yj~U-J3b z&bXB9RYtt}^P%P%9Fja^5*tnI~m~sRY*dP{F0b23H!cL z_HJDjps~B5cz^oC(`Y2A0$-5kTH9>|mFyHMY1ZX z6?Q`!E6pGJI&ddGI?#A-ov75&Q$*7~jXw7uKh3J) z@?Zd)OAPvKEV8)iZ$Ud);E2i1AMn~%vYwbnBF@54WI)MmFnNIy^_j`gnU$S;6B_hg zw*mKxg}ZJG1FYoBXsR)AFyWn;RGQ|1OL{=XdA4K@l&ww)JzO)svvR(%z0wjwt};Tq z1;M}@B7-IE<1ZEl4Yvwficl|->N=KnyL1NL->khyDb6IMOVJkHpzg}`Wv8PH6f5E3 zir-%@X-8x4Ag|BRMA2Q_Ek{rEV_Mso$!40XUrOQZTR8_>(9-ObDWcTFGw2#XjvWqxius|`}8|Qych=^ZI+tlMt6>5fxvi3q{tl6ANLo8fH!X81ATHH8NrXiC6eCp z|5~J~m_2r9sy}$2$#9*c6j69lTZ|G>)B0*ec; z(ZKBVXl4>7IXfO+84(&WNE5Z5un^IBMGZlX?;r2@@&>wu1Zl#AFGfNAd^1D|>8Wra zhSMN`9Xb^eJnq>Q*@)o&4@~?fOOk!-A=l6!M3(5wOnh5jH8$@daGoleH{P|bEiiMz z`CGh)Ald~a&mhXLmR7Lv-)ixeAeq3+zau*>{$OVJRYSWNQqEBc%`?i?3?}@Tl%6ogRinHk({&}?W7A5Li|fnC z$n^^_5TD0g>0$dL_9|0;p7dW+g$U@`Nv9QQ);PQ9I>wQ%7M3cP&eh(m@w%|l^|O{N z%8S%BY-G{XuD-c?Q2mW*lS%V;HJ z6J9(T&M|}AEr?56)}NlWvSX-WOETWwY$|G9R!KGzEI+EMY79X|a5KjJd)g_pR#GZN z2;i(_c#O?Qc6!?WQCH0fJ0@|M(M2I&elJ7Ok$1_SAahS}%^_OJkDDBYV^AJs-TP-O zB$Ro_4BorhP&&1kG1rBk5@WuGx0SVN^(ifB$~BxfHYe&z3Ko>MvZ)Q@3x#c)1sfVX#|x%0eL4yN>iK zF7I3Doi{m#-j8k+jDHJ55|6LswZFFf)$h-WMOKV#>DZ|DjEz2@A9cvbR*R0JnOr$E z*dkdnm-m3FD{AFy(m6EYA5p{-txexL`KTX0^lJ22k zW|4Fc{qB@zQP%++wJg}>bsc<#6{7H4BaEVM_-V_^O=73V&Vn`^{R$1pCT}j?hk=md_a-pl zdUYsL?czZ>mr7C_cfFl+E*6NlM3X{bEO}OWpSoIkkDsd=Z`xa?FmdNj;`ez}Jr3=U z@ zDa&cxFI7Ecyf!!fo2Y(g&K7_#=O;&dpNn*W8(v%u3YSF7EzIDP-R{~^3XXT0Q=d1DNT7`PjCZ|^U#BD|>K zu_Ew4ITaWC!g-5h*1=>fwiQ|5BIInx4lZmC<1bDVe5W}9m^Jh?t2ipErwNnm%t2gV z>GpSaeX_6F8)!{HA`Q%*W%jPH?LTh&9M~oowi^zlYi-U^ks2QSi`UYkhwYul3ALau z(89Bo(Uv43U3Zc!QspB4;#-_O&7I~HSc7FgmURe-r+>6(mO}&1FAx6cPYeeproKeo z?Y84Lt^nx>>(Q4i5nUc?oiplz7bfWYj3$#tF&^=sl}Gz!fHo`(^2_)CndbDMiFam+ zqDyjhDx3V9^TijF&q%MgGUz^aB=5Ikc&r(iLsXM%2{dHB1XXtZ)v`#GFYTTWdF(nL zY^jM6kGI$+e;rZ=$T^@j|mDJ{}?)8t3 zgdNmA&Y58qzrl~Fz}YN)DJ^(xg<|)K`_Tf#&@Yz2G_GD)u1H3Rcb2#R;u$K0cdB-A zFG;>9>##_d-e7u1dRmZuW*)Zplkw&;vF`OrUSJDgd#q{ZDx;O6G?U3QnQ|v>MgP6^ zbYY7Db$K+xRcCFzYHGD+wTHX@JA=Fi8@^oHE&x(acsS+1P*YK}q_o)Xjz__O_2NhK zEg1{y@eCQYqa@k6uCmH7e|96^lDlCD{9YZ}A~j8Q`8<&B+~o4*e{oe4ADpC}4F(XC z&=k*>?OF=eY5s@6i&9X--lsG_X_GS%UQ5?#rcST8F9?J%6ILGxLN{Jl*R~arILN%v z$n_&WNpIxNgU?`u@TazdWqGTdH?q;Gu+;`Eqs8pIiL>90Spy)34A9W zqCdY|h#`f`CuKX4j{`pU+8^v^=U|zd*>q3#;({X)OZc=vAu6O)IQCVJec>(K$P0@9PPEL7S z+Y6=F)am`G9ra6o>Z;BSvJmOdm0Ya@qdn`#+Qn6+pr)4qJ!KHmfWBPn8jIz#vkg9T zAB6VT?o)hjWHXcqjzfBJCx5RdJUZGp7BAfe?z^QYRuOD5ZN#Kg0j2C>&BSF+a0clG zv&)RX*uij&_K8euDo^+LK1dV_tILsll-k{bUlpD2^7xu}nH&v;*QZ}74 zT~$tGtOgu6LQo9yq~yO!MTJ&cIq5X@mAHt;jZ?KQC{lv@)saei(M-`sKyy^e4nJHl zlP(c2!wJ?iKx)1xq5U>8QmJWi7J4jBG|K=4Rr3gQfwpCNfV5CR6;I5AaDkfV;__v7b!CA>0%Oj$xA0Tyo4bcGX^;1rg(EQ<)Xi>anE(Ik zdsspFm6cz9Hgg38oG>cr&>Sm^FRu>UixlZSS5aAR06h((_z1`zWrA=(r-u~3-F>1% z&Gz;uRpwUmu}Wc1Xo`Shz)Ncy<+;&)(XN)zhoE~vc{r>CYChRcUygJ7S|C|0-hdy{EX08t^@JeWyUi}hz-;>xec+AZ zV*0d6**$CT~HOn7ee zXq$T}ScaHz&sMl|0OYLS30W#VF|`bBQ;VYh8lS}E&HfaGmY;I$i4J(3S8qFIa@0Eg z1)Lt<-|A_=_x0|&1~YZ)XuXH3=c_c%dB6L1bb&kFmBu04vpvJSwoZ=F#d%?1+wCC3 zD#B&i4>w1y#Ax9>ys4WsMpfNiA8wGBLY?QfPaJ!xi_PZ)#oM_%eSq$3OrG4mqKZb) zLT67;UEK6eVtjJ)l={+>R8EpuvchB7BGg{AB}R86B8(yEmrdMng;F2b=^iD3iLxlG zx8m+*ax4VvlKEd+U_qUYo`gTvnp5;;RmvFQBNHXvw}M`Ggk6Ξ)bieb#VXXFUiY z;GKph^j!29t#$y}d2M`LW2nx(nu8}_yFp>jGOr>D?lW8~Pg$d5LJCIEN1eW9RzJf% zSNY2LfmrPLfZ_#jQl_8M(EQ!o7uXkuCfYzAa=&GKMjLaX_~hiTpeha!ZyBY#2YEl{a&--m50 zBC@*`u}2GHwl7dZJQ}P3yQ(rZnASl0Tm8#SG0eHLIoSWQva-^9Ugp6IGevHO_H&Yg zA4FvAMbUS}AFlfqSP^hheihpwF0*NX2mb}jV*_*wAq+|^WjTv+a6_ zk$h^kjJ!=$zjC=S{-V8!tskRXa?4y22Y90a;G--+O1vq4xwAxt?#b+ACK8&QRE{R= z%zPw5gjI*)BsC}H_S)KfC9z!h!UjW1}v$sauj5qe!Bq{KValFUXH zu~TuLk4c1lT(Zkxy?2Ar*0Ge#0d5Oe#VA5_mhY1P2&18^_Dkrv`;_(_Il!OkY_Ux9~RLuLtPbbP^NE=n#{e0IN7U~$Cv zrK0^}C3dy#HxzPY#Q<5Gii*l~Am){IS+E5bH!isZ^5O^Sa_f>%Fi;;s&ZpCZtW@Cf z=L7+gJ`a&QtS1?gaj1wW^)rufj8*m9i=9y1#d7l@;UQQSW5VuztMB64wSg;V8jx}+ z`n`jrBd4MilO~H^K`a%qz34EY75e`qJ=xCEIy%D-Z87xy{gGBr=Ap*u$%@zdh{5T@ z*=uZf=Gp#KTB|fQimOsMaMfYc(F#51bq@~dNQ|Y~rKP2L%UYO-$ikU8G`Eg+xg>F~ zRb1rQzNL(r=f4mJiJ1`s7p&m(5S2)frSE$g-Thj3XVAn;{~{se;+_UXco4Rzt@B>c zfZ1sWKnws57{d<1kw-P@-o+lM5in#2?vdOI58i(|vIw`iD-QxbFBH|El|8Wt`F~MF BMGF7` diff --git a/PCK-Studio/Resources/entityData.json b/PCK-Studio/Resources/entityData.json index 27621c86..42c39cb0 100644 --- a/PCK-Studio/Resources/entityData.json +++ b/PCK-Studio/Resources/entityData.json @@ -225,7 +225,7 @@ { "": "" }, { "": "" }, { "villager": "Villager (PS4 EXCLUSIVE)" }, - { "zombie_villager": "Villager (PS4 EXCLUSIVE)" }, + { "zombie_villager": "Zombie Villager (PS4 EXCLUSIVE)" }, { "": "" }, { "phantom_invisible": "Phantom (Second Layer)" }, { "enderman_invisible": "Enderman (Second Layer)" }, From 89c29051d417d4ceb2400f815d3c8657b2052796 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Mon, 4 Mar 2024 23:13:55 -0500 Subject: [PATCH 04/52] EntityMaterials Editor fix -Files with invalid materials, such as TNBC pack, no longer crash the program -Invalid material entries now have a unique icon -Invalid materials can be hidden by the user should they be detected. -Entity Materials Editor UI has been improved slightly --- .../Forms/Editor/MaterialsEditor.Designer.cs | 13 ++-- PCK-Studio/Forms/Editor/MaterialsEditor.cs | 65 ++++++++++++------- PCK-Studio/PckStudio.csproj | 4 +- Vendor/OMI-Lib | 2 +- 4 files changed, 51 insertions(+), 33 deletions(-) diff --git a/PCK-Studio/Forms/Editor/MaterialsEditor.Designer.cs b/PCK-Studio/Forms/Editor/MaterialsEditor.Designer.cs index ce1049e5..7d93ab77 100644 --- a/PCK-Studio/Forms/Editor/MaterialsEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/MaterialsEditor.Designer.cs @@ -54,12 +54,11 @@ this.treeView1.Location = new System.Drawing.Point(20, 84); this.treeView1.Margin = new System.Windows.Forms.Padding(0); this.treeView1.Name = "treeView1"; - this.treeView1.Size = new System.Drawing.Size(136, 176); + this.treeView1.Size = new System.Drawing.Size(246, 234); this.treeView1.TabIndex = 13; this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); this.treeView1.NodeMouseClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick); this.treeView1.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeView1_KeyDown); - this.treeView1.MouseHover += new System.EventHandler(this.treeView1_MouseHover); // // metroContextMenu1 // @@ -92,7 +91,7 @@ this.helpToolStripMenuItem}); this.menuStrip.Location = new System.Drawing.Point(20, 60); this.menuStrip.Name = "menuStrip"; - this.menuStrip.Size = new System.Drawing.Size(348, 24); + this.menuStrip.Size = new System.Drawing.Size(246, 24); this.menuStrip.TabIndex = 14; this.menuStrip.Text = "menuStrip1"; // @@ -123,7 +122,7 @@ // xLabel // this.xLabel.AutoSize = true; - this.xLabel.Location = new System.Drawing.Point(159, 147); + this.xLabel.Location = new System.Drawing.Point(98, 325); this.xLabel.Name = "xLabel"; this.xLabel.Size = new System.Drawing.Size(91, 19); this.xLabel.TabIndex = 30; @@ -141,9 +140,9 @@ "entity_emissive_alpha_only", "entity_alphatest_change_color", "entity_change_color"}); - this.materialComboBox.Location = new System.Drawing.Point(159, 169); + this.materialComboBox.Location = new System.Drawing.Point(20, 347); this.materialComboBox.Name = "materialComboBox"; - this.materialComboBox.Size = new System.Drawing.Size(209, 29); + this.materialComboBox.Size = new System.Drawing.Size(246, 29); this.materialComboBox.TabIndex = 31; this.materialComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; this.materialComboBox.UseSelectable = true; @@ -153,7 +152,7 @@ // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(388, 280); + this.ClientSize = new System.Drawing.Size(286, 399); this.Controls.Add(this.materialComboBox); this.Controls.Add(this.xLabel); this.Controls.Add(this.menuStrip); diff --git a/PCK-Studio/Forms/Editor/MaterialsEditor.cs b/PCK-Studio/Forms/Editor/MaterialsEditor.cs index 88bb11e8..c1364ab3 100644 --- a/PCK-Studio/Forms/Editor/MaterialsEditor.cs +++ b/PCK-Studio/Forms/Editor/MaterialsEditor.cs @@ -23,6 +23,11 @@ namespace PckStudio.Forms.Editor private readonly JObject EntityJSONData = JObject.Parse(Properties.Resources.entityData); + private bool showInvalidEntries; + + //Holds invalid entries so they can be added back to the material file on save should the user decide to hide them + List hiddenInvalidEntries = new List(); + void SetUpTree() { treeView1.BeginUpdate(); @@ -31,6 +36,8 @@ namespace PckStudio.Forms.Editor { TreeNode EntryNode = new TreeNode(entry.Name); + EntryNode.ImageIndex = -1; + foreach (JObject content in EntityJSONData["materials"].Children()) { var prop = content.Properties().FirstOrDefault(prop => prop.Name == entry.Name); @@ -38,13 +45,27 @@ namespace PckStudio.Forms.Editor { EntryNode.Text = (string)prop.Value; EntryNode.ImageIndex = EntityJSONData["materials"].Children().ToList().IndexOf(content); - EntryNode.SelectedImageIndex = EntryNode.ImageIndex; break; } } EntryNode.Tag = entry; + // check for invalid material entry + if (EntryNode.ImageIndex == -1) + { + EntryNode.ImageIndex = 127; // icon for invalid entry + EntryNode.Text += " (Invalid)"; + + if (!showInvalidEntries) + { + hiddenInvalidEntries.Add(entry); + continue; + } + } + + EntryNode.SelectedImageIndex = EntryNode.ImageIndex; + treeView1.Nodes.Add(EntryNode); } treeView1.EndUpdate(); @@ -58,13 +79,21 @@ namespace PckStudio.Forms.Editor using (var stream = new MemoryStream(file.Data)) { var reader = new MaterialFileReader(); - materialFile = reader.FromStream(stream); - } + materialFile = reader.FromStream(stream); - treeView1.ImageList = new ImageList(); - ApplicationScope.EntityImages.ToList().ForEach(treeView1.ImageList.Images.Add); - treeView1.ImageList.ColorDepth = ColorDepth.Depth32Bit; - SetUpTree(); + if (materialFile.hasInvalidEntries()) + { + DialogResult dr = MessageBox.Show(this, "Unsupported entities were found in this file. Would you like to display them?", "Invalid data found", MessageBoxButtons.YesNoCancel); + if(dr == DialogResult.Cancel) Close(); + + showInvalidEntries = dr == DialogResult.Yes; + } + + treeView1.ImageList = new ImageList(); + ApplicationScope.EntityImages.ToList().ForEach(treeView1.ImageList.Images.Add); + treeView1.ImageList.ColorDepth = ColorDepth.Depth32Bit; + SetUpTree(); + } } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) @@ -93,26 +122,11 @@ namespace PckStudio.Forms.Editor materialComboBox.Enabled = false; } - private void addNewPositionOverrideToolStripMenuItem_Click(object sender, EventArgs e) - { - - } - - private void addNewEntryToolStripMenuItem_Click(object sender, EventArgs e) - { - - } - private void treeView1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Delete) removeToolStripMenuItem_Click(sender, e); } - private void treeView1_MouseHover(object sender, EventArgs e) - { - - } - private void saveToolStripMenuItem1_Click(object sender, EventArgs e) { materialFile = new MaterialContainer(); @@ -125,6 +139,11 @@ namespace PckStudio.Forms.Editor } } + foreach (MaterialContainer.Material mat in hiddenInvalidEntries) + { + materialFile.Add(mat); + } + _file.SetData(new MaterialFileWriter(materialFile)); DialogResult = DialogResult.OK; @@ -158,8 +177,6 @@ namespace PckStudio.Forms.Editor } } treeView1.Nodes.Add(NewEntryNode); - - addNewPositionOverrideToolStripMenuItem_Click(sender, e); // adds a Position Override to the new Override } } diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index c7685cff..3013435f 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -4,7 +4,7 @@ preview true - NDEBUG + NDEBUG publish\ true Disk @@ -456,6 +456,7 @@ AddEntry.cs + Designer AddLanguage.cs @@ -531,6 +532,7 @@ AddParameter.cs + Designer InProgressPrompt.cs diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib index 3209ecca..036d680f 160000 --- a/Vendor/OMI-Lib +++ b/Vendor/OMI-Lib @@ -1 +1 @@ -Subproject commit 3209ecca8568933fac8c20c20a9952ee3dc1b526 +Subproject commit 036d680f977f1db2e2ec7ab8fc5813b990278aed From 4809f6a71f80d485e68028a3e89285759a7337a0 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Tue, 5 Mar 2024 01:39:00 -0500 Subject: [PATCH 05/52] Improved file extraction code --- PCK-Studio/MainForm.cs | 129 ++++++++++++++++++++++++----------------- 1 file changed, 76 insertions(+), 53 deletions(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 183f207e..d9c7cb3d 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -555,74 +555,97 @@ namespace PckStudio } } + private void extractFile(string outFilePath, PckFileData file) + { + File.WriteAllBytes(outFilePath, file.Data); + if (file.Properties.Count > 0) + { + using var fs = File.CreateText($"{outFilePath}.txt"); + file.Properties.ForEach(property => fs.WriteLine($"{property.Key}: {property.Value}")); + } + } + + private void extractFolderFile(string outPath, PckFileData file) + { + TreeNode node = treeViewMain.SelectedNode; + + // abb = "Abbreviated Path" + string abbPath = Path.GetDirectoryName(file.Filename); + int startIndex = abbPath.IndexOf(node.Text); + abbPath = abbPath.Substring(startIndex, abbPath.Length - startIndex); + string finalPath = ($"{outPath}/{abbPath}/").Replace('\\', '/'); + + if (!Directory.Exists(finalPath)) Directory.CreateDirectory(finalPath); + + extractFile(finalPath + "/" + Path.GetFileName(file.Filename), file); + } + + private void extractFolder(string outPath) + { + TreeNode node = treeViewMain.SelectedNode; + + string selectedFolder = node.FullPath; + + if (IsSubPCKNode(node.FullPath)) + { + GetAllChildNodes(node.Nodes).ForEach(fileNode => + { + if (fileNode.TryGetTagData(out PckFileData file)) + { + extractFolderFile(outPath, file); + } + } + ); + } + else + { + foreach (var _file in currentPCK.GetFiles()) + { + if (_file.Filename.StartsWith(selectedFolder)) + { + extractFolderFile(outPath, _file); + } + }; + } + } + private void extractToolStripMenuItem_Click(object sender, EventArgs e) { var node = treeViewMain.SelectedNode; + if (node == null) + { + MessageBox.Show(this, "The selected node was null. Please select a node and try again.", "Node not extracted"); + return; - if (node.TryGetTagData(out PckFileData file)) + } + + if (node.Tag == null) + { + OpenFolderDialog dialog = new OpenFolderDialog(); + dialog.Title = @"Select destination folder"; + + if (dialog.ShowDialog(Handle) == true) extractFolder(dialog.ResultPath); + } + else if (node.TryGetTagData(out PckFileData file)) { using SaveFileDialog exFile = new SaveFileDialog(); exFile.FileName = Path.GetFileName(file.Filename); exFile.Filter = Path.GetExtension(file.Filename).Replace(".", string.Empty) + " File|*" + Path.GetExtension(file.Filename); if (exFile.ShowDialog() != DialogResult.OK || // Makes sure chosen directory isn't null or whitespace AKA makes sure its usable - string.IsNullOrWhiteSpace(Path.GetDirectoryName(exFile.FileName))) return; - string extractFilePath = exFile.FileName; + string.IsNullOrWhiteSpace(Path.GetDirectoryName(exFile.FileName))) + { + MessageBox.Show(this, "The chosen directory is invalid. Please choose a different one and try again.", "Node not extracted"); - File.WriteAllBytes(extractFilePath, file.Data); - if (file.Properties.Count > 0) - { - using var fs = File.CreateText($"{extractFilePath}.txt"); - file.Properties.ForEach(property => fs.WriteLine($"{property.Key}: {property.Value}")); + return; } - // Verification that file extraction path was successful - MessageBox.Show("File Extracted"); - return; + + extractFile(exFile.FileName, file); } - string selectedFolder = node.FullPath; - OpenFolderDialog dialog = new OpenFolderDialog(); - dialog.Title = @"Select destination folder"; - - if (dialog.ShowDialog() == true) - { - string extractPath = dialog.ResultPath; - if (IsSubPCKNode(node.FullPath) && node.Tag == null) - { - GetAllChildNodes(node.Nodes).ForEach(fileNode => - { - if (fileNode.TryGetTagData(out PckFileData file)) - { - Directory.CreateDirectory($"{extractPath}/{Path.GetDirectoryName(file.Filename)}"); - File.WriteAllBytes($"{extractPath}/{file.Filename}", file.Data); - if (file.Properties.Count > 0) - { - using var fs = File.CreateText($"{extractPath}/{file.Filename}.txt"); - file.Properties.ForEach(property => fs.WriteLine($"{property.Key}: {property.Value}")); - } - } - } - ); - } - else - { - foreach (var _file in currentPCK.GetFiles()) - { - if (_file.Filename.StartsWith(selectedFolder)) - { - Directory.CreateDirectory($"{extractPath}/{Path.GetDirectoryName(_file.Filename)}"); - File.WriteAllBytes($"{extractPath}/{_file.Filename}", _file.Data); - if (_file.Properties.Count > 0) - { - using var fs = File.CreateText($"{extractPath}/{_file.Filename}.txt"); - _file.Properties.ForEach(property => fs.WriteLine($"{property.Key}: {property.Value}")); - } - } - }; - } - MessageBox.Show("Folder Extracted"); - } + // Verification that file extraction path was successful + MessageBox.Show($"\"{node.Text}\" successfully extracted"); } private void SaveTemplate() From 11fe0e1ff1ff3ca27d124fc0fe8b89250f058102 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Tue, 5 Mar 2024 11:23:16 -0500 Subject: [PATCH 06/52] Removed cancel option from invalid entry prompt --- PCK-Studio/Forms/Editor/MaterialsEditor.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/PCK-Studio/Forms/Editor/MaterialsEditor.cs b/PCK-Studio/Forms/Editor/MaterialsEditor.cs index c1364ab3..614487e1 100644 --- a/PCK-Studio/Forms/Editor/MaterialsEditor.cs +++ b/PCK-Studio/Forms/Editor/MaterialsEditor.cs @@ -83,8 +83,7 @@ namespace PckStudio.Forms.Editor if (materialFile.hasInvalidEntries()) { - DialogResult dr = MessageBox.Show(this, "Unsupported entities were found in this file. Would you like to display them?", "Invalid data found", MessageBoxButtons.YesNoCancel); - if(dr == DialogResult.Cancel) Close(); + DialogResult dr = MessageBox.Show(this, "Unsupported entities were found in this file. Would you like to display them?", "Invalid data found", MessageBoxButtons.YesNo); showInvalidEntries = dr == DialogResult.Yes; } From b862ffbf0fcb4a2de33d9b9339685ccf7d734c08 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Tue, 5 Mar 2024 13:26:29 -0500 Subject: [PATCH 07/52] Update tileData.json -Added color variants for stems, double tall grass, tall fern, vines -Added internal names for kelp for use in the atlas editor --- PCK-Studio/Resources/tileData.json | 108 ++++++++++++++++++++++++----- 1 file changed, 91 insertions(+), 17 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 4a25fc48..9bbd3d12 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -521,7 +521,16 @@ }, { "internalName": "stem_straight", - "displayName": "Stem" + "displayName": "Stem", + "hasColourEntry": true, + "colourEntry": { + "isWaterColour": false, + "defaultName": "Tile_StemMin", + "variants": [ + "Tile_StemMin", + "Tile_StemMax" + ] + } }, { "internalName": "rail_normal_turned", @@ -585,7 +594,16 @@ }, { "internalName": "stem_bent", - "displayName": "Stem (Attached)" + "displayName": "Stem (Attached)", + "hasColourEntry": true, + "colourEntry": { + "isWaterColour": false, + "defaultName": "Tile_StemMin", + "variants": [ + "Tile_StemMin", + "Tile_StemMax" + ] + } }, { "internalName": "rail_normal", @@ -673,7 +691,19 @@ }, { "internalName": "vine", - "displayName": "Vines" + "displayName": "Vines", + "hasColourEntry": true, + "colourEntry": { + "isWaterColour": false, + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } }, { "internalName": "lapis_block", @@ -971,8 +1001,8 @@ "hasColourEntry": true, "colourEntry": { "isWaterColour": true, - "defaultName": "default", - "variants": [ "default" ] + "defaultName": "", + "variants": [] } }, { @@ -981,8 +1011,8 @@ "hasColourEntry": true, "colourEntry": { "isWaterColour": true, - "defaultName": "default", - "variants": [ "default" ] + "defaultName": "", + "variants": [] } }, { @@ -1439,11 +1469,33 @@ }, { "internalName": "double_plant_fern_top", - "displayName": "Large Fern (Top)" + "displayName": "Large Fern (Top)", + "hasColourEntry": true, + "colourEntry": { + "isWaterColour": false, + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } }, { "internalName": "double_plant_grass_top", - "displayName": "Double Tall Grass (Top)" + "displayName": "Double Tall Grass (Top)", + "hasColourEntry": true, + "colourEntry": { + "isWaterColour": false, + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } }, { "internalName": "double_plant_paeonia_top", @@ -1527,11 +1579,33 @@ }, { "internalName": "double_plant_fern_bottom", - "displayName": "Large Fern (Bottom)" + "displayName": "Large Fern (Bottom)", + "hasColourEntry": true, + "colourEntry": { + "isWaterColour": false, + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } }, { "internalName": "double_plant_grass_bottom", - "displayName": "Double Tall Grass (Bottom)" + "displayName": "Double Tall Grass (Bottom)", + "hasColourEntry": true, + "colourEntry": { + "isWaterColour": false, + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } }, { "internalName": "double_plant_paeonia_bottom", @@ -2318,15 +2392,15 @@ "displayName": "Kelp (Bottom)" }, { - "internalName": "", + "internalName": "kelp_a", "displayName": "" }, { - "internalName": "", + "internalName": "kelp_a", "displayName": "" }, { - "internalName": "", + "internalName": "kelp_a", "displayName": "" }, { @@ -2334,15 +2408,15 @@ "displayName": "Kelp (Top)" }, { - "internalName": "", + "internalName": "kelp_top_a", "displayName": "" }, { - "internalName": "", + "internalName": "kelp_top_a", "displayName": "" }, { - "internalName": "", + "internalName": "kelp_top_a", "displayName": "" }, { From 550ee7ab6d75897fde3ca81891e466511734b8c9 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Tue, 5 Mar 2024 13:28:09 -0500 Subject: [PATCH 08/52] Updated Atlas Editor -Fixed keyboard input not working on tiles with duplicate names -Duplicate tiles now display the texture, variants, and name of its "parent" tile -Fixed Animated tiles not correctly displaying variant box -Water tiles now automatically fill in colors from the water table --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 68 +++++++++++++------ 1 file changed, 46 insertions(+), 22 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 1d71098f..99cb4972 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -56,6 +56,8 @@ namespace PckStudio.Forms.Editor private readonly List _tiles; private AtlasTile _selectedTile; + // the "parent" tile for tiles that share name; i.e. parts of water_flow + private AtlasTile dataTile; private sealed class AtlasTile { internal readonly int Index; @@ -137,18 +139,20 @@ namespace PckStudio.Forms.Editor if (_tiles is null || !_tiles.IndexInRange(index) || (_selectedTile = _tiles[index]) is null) return; - if(string.IsNullOrEmpty(_selectedTile.Tile.DisplayName)) - { - // changes the selected tile to the base flowing tile (carries all properties over) - Matt - _selectedTile = _tiles.Find(t => t.Tile.InternalName == _selectedTile.Tile.InternalName); - } + dataTile = _selectedTile; - tileNameLabel.Text = $"{_selectedTile.Tile.DisplayName}"; + if (string.IsNullOrEmpty(dataTile.Tile.DisplayName)) + { + dataTile = _tiles.Find(t => t.Tile.InternalName == _selectedTile.Tile.InternalName); + } + + selectTilePictureBox.Image = dataTile.Texture; + tileNameLabel.Text = $"{dataTile.Tile.DisplayName}"; selectTilePictureBox.BlendColor = GetBlendColor(); selectTilePictureBox.UseBlendColor = applyColorMaskToolStripMenuItem.Checked; bool hasAnimation = - _pckFile.TryGetValue($"res/textures/{_atlasType}/{_selectedTile.Tile.InternalName}.png", PckFileType.TextureFile, out var animationFile); + _pckFile.TryGetValue($"res/textures/{_atlasType}/{dataTile.Tile.InternalName}.png", PckFileType.TextureFile, out var animationFile); animationButton.Text = hasAnimation ? "Edit Animation" : "Create Animation"; replaceButton.Enabled = !hasAnimation; @@ -158,16 +162,24 @@ namespace PckStudio.Forms.Editor { var animation = AnimationHelper.GetAnimationFromFile(animationFile); selectTilePictureBox.Start(animation); - return; } - if (variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = _selectedTile.Tile.HasColourEntry && _selectedTile.Tile.ColourEntry.Variants.Length > 1) + if (variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = + dataTile.Tile.HasColourEntry && dataTile.Tile.ColourEntry.Variants.Length > 1) { - variantComboBox.Items.AddRange(_selectedTile.Tile.ColourEntry.Variants); - variantComboBox.SelectedItem = _selectedTile.Tile.ColourEntry.DefaultName; + variantComboBox.Items.AddRange(dataTile.Tile.ColourEntry.Variants); + variantComboBox.SelectedItem = dataTile.Tile.ColourEntry.DefaultName; + } + else if(variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = + dataTile.Tile.HasColourEntry && dataTile.Tile.ColourEntry.IsWaterColour && _colourTable.WaterColors.Count > 0) + { + foreach (var col in _colourTable.WaterColors) + { + variantComboBox.Items.Add(col.Name); + } + + variantComboBox.SelectedItem = _colourTable.WaterColors[0].Name; } - - selectTilePictureBox.Image = _selectedTile.Texture; } private static int GetSelectedImageIndex( @@ -291,18 +303,21 @@ namespace PckStudio.Forms.Editor private Color GetBlendColor() { - if (_selectedTile.Tile.HasColourEntry && _selectedTile.Tile.ColourEntry is not null) - return FindBlendColorByKey(_selectedTile.Tile.ColourEntry.DefaultName); + if (dataTile.Tile.HasColourEntry && dataTile.Tile.ColourEntry is not null) + { + var col = FindBlendColorByKey(dataTile.Tile.ColourEntry.DefaultName); + return col; + } return Color.White; } private Color FindBlendColorByKey(string colorKey) { if (_colourTable is not null && - _selectedTile.Tile.HasColourEntry && - _selectedTile.Tile.ColourEntry is not null) + dataTile.Tile.HasColourEntry && + dataTile.Tile.ColourEntry is not null) { - if (_selectedTile.Tile.ColourEntry.IsWaterColour && + if (dataTile.Tile.ColourEntry.IsWaterColour && _colourTable.WaterColors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.WaterColor waterColor) { return waterColor.SurfaceColor; @@ -408,6 +423,8 @@ namespace PckStudio.Forms.Editor } AnimationHelper.SaveAnimationToFile(file, animation); + // so animations can automatically update upon saving + SelectedIndex = _selectedTile.Index; } private void extractTileToolStripMenuItem_Click(object sender, EventArgs e) @@ -425,13 +442,20 @@ namespace PckStudio.Forms.Editor private void variantComboBox_SelectedIndexChanged(object sender, EventArgs e) { - if (_selectedTile.Tile.ColourEntry is not null && - _selectedTile.Tile.ColourEntry.Variants.IndexInRange(variantComboBox.SelectedIndex)) + if (dataTile.Tile.ColourEntry is not null && + dataTile.Tile.ColourEntry.Variants.IndexInRange(variantComboBox.SelectedIndex)) { - string colorKey = _selectedTile.Tile.ColourEntry.Variants[variantComboBox.SelectedIndex]; + string colorKey = dataTile.Tile.ColourEntry.IsWaterColour ? variantComboBox.SelectedValue.ToString() : dataTile.Tile.ColourEntry.Variants[variantComboBox.SelectedIndex]; selectTilePictureBox.BlendColor = FindBlendColorByKey(colorKey); - selectTilePictureBox.Image = _selectedTile.Texture; + selectTilePictureBox.Image = dataTile.Texture; } + else if(dataTile.Tile.ColourEntry is not null && + dataTile.Tile.ColourEntry.IsWaterColour) + { + string colorKey = variantComboBox.GetItemText(variantComboBox.SelectedItem); + selectTilePictureBox.BlendColor = FindBlendColorByKey(colorKey); + selectTilePictureBox.Image = dataTile.Texture; + } } private void applyColorMaskToolStripMenuItem_CheckedChanged(object sender, EventArgs e) From c645cef9edd4c4958e8d783e57020ea0e48fe984 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Sun, 10 Mar 2024 16:40:25 -0400 Subject: [PATCH 09/52] Added Classic Water variant support --- .../Editor/TextureAtlasEditor.Designer.cs | 8 +- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 55 ++++++------ PCK-Studio/Resources/tileData.json | 90 ++++++++++++++++++- 3 files changed, 118 insertions(+), 35 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index 0b9c0290..9487197b 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -90,14 +90,14 @@ // saveToolStripMenuItem // this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); // // extractTileToolStripMenuItem // this.extractTileToolStripMenuItem.Name = "extractTileToolStripMenuItem"; - this.extractTileToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.extractTileToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.extractTileToolStripMenuItem.Text = "Extract Tile"; this.extractTileToolStripMenuItem.Click += new System.EventHandler(this.extractTileToolStripMenuItem_Click); // @@ -117,7 +117,7 @@ this.applyColorMaskToolStripMenuItem.CheckOnClick = true; this.applyColorMaskToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.applyColorMaskToolStripMenuItem.Name = "applyColorMaskToolStripMenuItem"; - this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.applyColorMaskToolStripMenuItem.Text = "Apply Color Mask"; this.applyColorMaskToolStripMenuItem.CheckedChanged += new System.EventHandler(this.applyColorMaskToolStripMenuItem_CheckedChanged); // @@ -127,7 +127,7 @@ this.playAnimationsToolStripMenuItem.CheckOnClick = true; this.playAnimationsToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.playAnimationsToolStripMenuItem.Name = "playAnimationsToolStripMenuItem"; - this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.playAnimationsToolStripMenuItem.Text = "Play Animations"; this.playAnimationsToolStripMenuItem.CheckedChanged += new System.EventHandler(this.playAnimationsToolStripMenuItem_CheckedChanged); // diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 99cb4972..fe569733 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -164,21 +164,26 @@ namespace PckStudio.Forms.Editor selectTilePictureBox.Start(animation); } - if (variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = - dataTile.Tile.HasColourEntry && dataTile.Tile.ColourEntry.Variants.Length > 1) + if (variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = + dataTile.Tile.HasColourEntry) { - variantComboBox.Items.AddRange(dataTile.Tile.ColourEntry.Variants); - variantComboBox.SelectedItem = dataTile.Tile.ColourEntry.DefaultName; - } - else if(variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = - dataTile.Tile.HasColourEntry && dataTile.Tile.ColourEntry.IsWaterColour && _colourTable.WaterColors.Count > 0) - { - foreach (var col in _colourTable.WaterColors) + if (dataTile.Tile.ColourEntry.IsWaterColour && _colourTable.WaterColors.Count > 0) { - variantComboBox.Items.Add(col.Name); + foreach (var col in _colourTable.WaterColors) + { + if(!variantComboBox.Items.Contains(col.Name)) + variantComboBox.Items.Add(col.Name); + } + + dataTile.Tile.ColourEntry.DefaultName = _colourTable.WaterColors[0].Name; } - variantComboBox.SelectedItem = _colourTable.WaterColors[0].Name; + if (dataTile.Tile.ColourEntry.Variants.Length > 1) + { + variantComboBox.Items.AddRange(dataTile.Tile.ColourEntry.Variants); + } + + variantComboBox.SelectedItem = dataTile.Tile.ColourEntry.DefaultName; } } @@ -317,15 +322,18 @@ namespace PckStudio.Forms.Editor dataTile.Tile.HasColourEntry && dataTile.Tile.ColourEntry is not null) { - if (dataTile.Tile.ColourEntry.IsWaterColour && - _colourTable.WaterColors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.WaterColor waterColor) + // basic way to check for classic water colors + if(!dataTile.Tile.ColourEntry.IsWaterColour || colorKey.StartsWith("Water_")) + { + if (_colourTable.Colors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.Color color) + { + return color.ColorPallette; + } + } + else if (_colourTable.WaterColors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.WaterColor waterColor) { return waterColor.SurfaceColor; } - else if (_colourTable.Colors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.Color color) - { - return color.ColorPallette; - } } return Color.White; } @@ -442,20 +450,13 @@ namespace PckStudio.Forms.Editor private void variantComboBox_SelectedIndexChanged(object sender, EventArgs e) { - if (dataTile.Tile.ColourEntry is not null && - dataTile.Tile.ColourEntry.Variants.IndexInRange(variantComboBox.SelectedIndex)) + if (dataTile.Tile.ColourEntry is not null) { - string colorKey = dataTile.Tile.ColourEntry.IsWaterColour ? variantComboBox.SelectedValue.ToString() : dataTile.Tile.ColourEntry.Variants[variantComboBox.SelectedIndex]; + string colorKey = variantComboBox.SelectedItem.ToString(); + selectTilePictureBox.BlendColor = FindBlendColorByKey(colorKey); selectTilePictureBox.Image = dataTile.Texture; } - else if(dataTile.Tile.ColourEntry is not null && - dataTile.Tile.ColourEntry.IsWaterColour) - { - string colorKey = variantComboBox.GetItemText(variantComboBox.SelectedItem); - selectTilePictureBox.BlendColor = FindBlendColorByKey(colorKey); - selectTilePictureBox.Image = dataTile.Texture; - } } private void applyColorMaskToolStripMenuItem_CheckedChanged(object sender, EventArgs e) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 9bbd3d12..d617d7a5 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -1001,8 +1001,49 @@ "hasColourEntry": true, "colourEntry": { "isWaterColour": true, - "defaultName": "", - "variants": [] + "defaultName": "Water_Plains", + "variants": [ + "Water_Ocean", + "Water_Plains", + "Water_Desert", + "Water_ExtremeHills", + "Water_Forest", + "Water_Taiga", + "Water_Swampland", + "Water_River", + "Water_Hell", + "Water_Sky", + "Water_FrozenOcean", + "Water_FrozenRiver", + "Water_IcePlains", + "Water_IceMountains", + "Water_MushroomIsland", + "Water_MushroomIslandShore", + "Water_Beach", + "Water_DesertHills", + "Water_ForestHills", + "Water_TaigaHills", + "Water_ExtremeHillsEdge", + "Water_Jungle", + "Water_JungleHills", + "Water_JungleEdge", + "Water_DeepOcean", + "Water_StoneBeach", + "Water_ColdBeach", + "Water_BirchForest", + "Water_BirchForestHills", + "Water_RoofedForest", + "Water_ColdTaiga", + "Water_ColdTaigaHills", + "Water_MegaTaiga", + "Water_MegaTaigaHills", + "Water_ExtremeHillsPlus", + "Water_Savanna", + "Water_SavannaPlateau", + "Water_Mesa", + "Water_MesaPlateauF", + "Water_MesaPlateau" + ] } }, { @@ -1011,8 +1052,49 @@ "hasColourEntry": true, "colourEntry": { "isWaterColour": true, - "defaultName": "", - "variants": [] + "defaultName": "Water_Plains", + "variants": [ + "Water_Ocean", + "Water_Plains", + "Water_Desert", + "Water_ExtremeHills", + "Water_Forest", + "Water_Taiga", + "Water_Swampland", + "Water_River", + "Water_Hell", + "Water_Sky", + "Water_FrozenOcean", + "Water_FrozenRiver", + "Water_IcePlains", + "Water_IceMountains", + "Water_MushroomIsland", + "Water_MushroomIslandShore", + "Water_Beach", + "Water_DesertHills", + "Water_ForestHills", + "Water_TaigaHills", + "Water_ExtremeHillsEdge", + "Water_Jungle", + "Water_JungleHills", + "Water_JungleEdge", + "Water_DeepOcean", + "Water_StoneBeach", + "Water_ColdBeach", + "Water_BirchForest", + "Water_BirchForestHills", + "Water_RoofedForest", + "Water_ColdTaiga", + "Water_ColdTaigaHills", + "Water_MegaTaiga", + "Water_MegaTaigaHills", + "Water_ExtremeHillsPlus", + "Water_Savanna", + "Water_SavannaPlateau", + "Water_Mesa", + "Water_MesaPlateauF", + "Water_MesaPlateau" + ] } }, { From c4e797d4032ad53c461fd1503846481f29b65a90 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Mon, 11 Mar 2024 16:54:52 -0400 Subject: [PATCH 10/52] Fix for tiles with only one variant not displaying correctly --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index fe569733..63829c17 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -164,9 +164,10 @@ namespace PckStudio.Forms.Editor selectTilePictureBox.Start(animation); } - if (variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = - dataTile.Tile.HasColourEntry) + if (dataTile.Tile.HasColourEntry) { + variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = dataTile.Tile.ColourEntry.Variants.Length > 1; + if (dataTile.Tile.ColourEntry.IsWaterColour && _colourTable.WaterColors.Count > 0) { foreach (var col in _colourTable.WaterColors) @@ -178,10 +179,7 @@ namespace PckStudio.Forms.Editor dataTile.Tile.ColourEntry.DefaultName = _colourTable.WaterColors[0].Name; } - if (dataTile.Tile.ColourEntry.Variants.Length > 1) - { - variantComboBox.Items.AddRange(dataTile.Tile.ColourEntry.Variants); - } + variantComboBox.Items.AddRange(dataTile.Tile.ColourEntry.Variants); variantComboBox.SelectedItem = dataTile.Tile.ColourEntry.DefaultName; } From f2c990be11ce72538822e925c090094548b32fd4 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Tue, 12 Mar 2024 02:01:34 -0400 Subject: [PATCH 11/52] Adjusted variant column size --- .../Editor/TextureAtlasEditor.Designer.cs | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index 9487197b..98e76ae4 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -58,7 +58,7 @@ this.variantLabel.AutoSize = true; this.variantLabel.Location = new System.Drawing.Point(3, 254); this.variantLabel.Name = "variantLabel"; - this.variantLabel.Size = new System.Drawing.Size(82, 28); + this.variantLabel.Size = new System.Drawing.Size(56, 28); this.variantLabel.TabIndex = 18; this.variantLabel.Text = "Variant:"; this.variantLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; @@ -90,14 +90,14 @@ // saveToolStripMenuItem // this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(131, 22); this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); // // extractTileToolStripMenuItem // this.extractTileToolStripMenuItem.Name = "extractTileToolStripMenuItem"; - this.extractTileToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.extractTileToolStripMenuItem.Size = new System.Drawing.Size(131, 22); this.extractTileToolStripMenuItem.Text = "Extract Tile"; this.extractTileToolStripMenuItem.Click += new System.EventHandler(this.extractTileToolStripMenuItem_Click); // @@ -117,7 +117,7 @@ this.applyColorMaskToolStripMenuItem.CheckOnClick = true; this.applyColorMaskToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.applyColorMaskToolStripMenuItem.Name = "applyColorMaskToolStripMenuItem"; - this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(168, 22); this.applyColorMaskToolStripMenuItem.Text = "Apply Color Mask"; this.applyColorMaskToolStripMenuItem.CheckedChanged += new System.EventHandler(this.applyColorMaskToolStripMenuItem_CheckedChanged); // @@ -127,7 +127,7 @@ this.playAnimationsToolStripMenuItem.CheckOnClick = true; this.playAnimationsToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.playAnimationsToolStripMenuItem.Name = "playAnimationsToolStripMenuItem"; - this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(168, 22); this.playAnimationsToolStripMenuItem.Text = "Play Animations"; this.playAnimationsToolStripMenuItem.CheckedChanged += new System.EventHandler(this.playAnimationsToolStripMenuItem_CheckedChanged); // @@ -136,9 +136,9 @@ this.tableLayoutPanel1.AutoSize = true; this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 15F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10.52632F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 26.31579F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.15789F)); this.tableLayoutPanel1.Controls.Add(this.originalPictureBox, 2, 0); this.tableLayoutPanel1.Controls.Add(this.selectTilePictureBox, 0, 0); this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 5); @@ -164,10 +164,10 @@ this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; this.originalPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; - this.originalPictureBox.Location = new System.Drawing.Point(238, 3); + this.originalPictureBox.Location = new System.Drawing.Point(220, 3); this.originalPictureBox.Name = "originalPictureBox"; this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 6); - this.originalPictureBox.Size = new System.Drawing.Size(349, 559); + this.originalPictureBox.Size = new System.Drawing.Size(367, 559); this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.originalPictureBox.TabIndex = 4; this.originalPictureBox.TabStop = false; @@ -186,7 +186,7 @@ this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); this.selectTilePictureBox.Name = "selectTilePictureBox"; - this.selectTilePictureBox.Size = new System.Drawing.Size(229, 220); + this.selectTilePictureBox.Size = new System.Drawing.Size(211, 220); this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.selectTilePictureBox.TabIndex = 0; this.selectTilePictureBox.TabStop = false; @@ -200,7 +200,7 @@ this.tableLayoutPanel1.SetColumnSpan(this.replaceButton, 2); this.replaceButton.Location = new System.Drawing.Point(3, 539); this.replaceButton.Name = "replaceButton"; - this.replaceButton.Size = new System.Drawing.Size(229, 23); + this.replaceButton.Size = new System.Drawing.Size(211, 23); this.replaceButton.TabIndex = 14; this.replaceButton.Text = "Replace"; this.replaceButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -215,7 +215,7 @@ this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); this.animationButton.Location = new System.Drawing.Point(3, 511); this.animationButton.Name = "animationButton"; - this.animationButton.Size = new System.Drawing.Size(229, 22); + this.animationButton.Size = new System.Drawing.Size(211, 22); this.animationButton.TabIndex = 16; this.animationButton.Text = "Animation"; this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -230,7 +230,7 @@ this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); this.tileNameLabel.Location = new System.Drawing.Point(3, 235); this.tileNameLabel.Name = "tileNameLabel"; - this.tileNameLabel.Size = new System.Drawing.Size(229, 19); + this.tileNameLabel.Size = new System.Drawing.Size(211, 19); this.tileNameLabel.TabIndex = 19; this.tileNameLabel.Text = "TileName"; this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -242,9 +242,9 @@ this.variantComboBox.Enabled = false; this.variantComboBox.FormattingEnabled = true; this.variantComboBox.ItemHeight = 23; - this.variantComboBox.Location = new System.Drawing.Point(91, 257); + this.variantComboBox.Location = new System.Drawing.Point(65, 257); this.variantComboBox.Name = "variantComboBox"; - this.variantComboBox.Size = new System.Drawing.Size(141, 29); + this.variantComboBox.Size = new System.Drawing.Size(149, 29); this.variantComboBox.TabIndex = 17; this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; this.variantComboBox.UseSelectable = true; From 8213fe391f7bcd7cedb010aa2ec0084f1f39a592 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 05:21:09 -0400 Subject: [PATCH 12/52] Added Custom Color support for specific tiles -Custom Color Tiles are Leather Armor, Potion (Overlay) / Potion Contents, Leather Horse Armor, and Cauldron Water --- .../Editor/TextureAtlasEditor.Designer.cs | 129 ++++++++++++------ PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 51 ++++++- PCK-Studio/Internal/Json/ColorEntry.cs | 3 + PCK-Studio/Resources/tileData.json | 40 +----- 4 files changed, 148 insertions(+), 75 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index 98e76ae4..ca8a591d 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -37,13 +37,16 @@ this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.applyColorMaskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.playAnimationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.sToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); this.replaceButton = new MetroFramework.Controls.MetroButton(); - this.animationButton = new MetroFramework.Controls.MetroButton(); this.tileNameLabel = new MetroFramework.Controls.MetroLabel(); this.variantComboBox = new MetroFramework.Controls.MetroComboBox(); + this.setColorButton = new MetroFramework.Controls.MetroButton(); + this.animationButton = new MetroFramework.Controls.MetroButton(); + this.clearColorButton = new MetroFramework.Controls.MetroButton(); this.menuStrip1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.originalPictureBox)).BeginInit(); @@ -56,9 +59,9 @@ | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.variantLabel.AutoSize = true; - this.variantLabel.Location = new System.Drawing.Point(3, 254); + this.variantLabel.Location = new System.Drawing.Point(3, 232); this.variantLabel.Name = "variantLabel"; - this.variantLabel.Size = new System.Drawing.Size(56, 28); + this.variantLabel.Size = new System.Drawing.Size(55, 25); this.variantLabel.TabIndex = 18; this.variantLabel.Text = "Variant:"; this.variantLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; @@ -69,7 +72,8 @@ this.menuStrip1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20))))); this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.fileToolStripMenuItem, - this.viewToolStripMenuItem}); + this.viewToolStripMenuItem, + this.sToolStripMenuItem}); this.menuStrip1.Location = new System.Drawing.Point(20, 60); this.menuStrip1.Name = "menuStrip1"; this.menuStrip1.Size = new System.Drawing.Size(590, 24); @@ -131,31 +135,45 @@ this.playAnimationsToolStripMenuItem.Text = "Play Animations"; this.playAnimationsToolStripMenuItem.CheckedChanged += new System.EventHandler(this.playAnimationsToolStripMenuItem_CheckedChanged); // + // sToolStripMenuItem + // + this.sToolStripMenuItem.Name = "sToolStripMenuItem"; + this.sToolStripMenuItem.Size = new System.Drawing.Size(24, 20); + this.sToolStripMenuItem.Text = "s"; + // // tableLayoutPanel1 // this.tableLayoutPanel1.AutoSize = true; this.tableLayoutPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; this.tableLayoutPanel1.ColumnCount = 3; - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10.52632F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 26.31579F)); - this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.15789F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10.43842F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 26.09603F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.46555F)); this.tableLayoutPanel1.Controls.Add(this.originalPictureBox, 2, 0); this.tableLayoutPanel1.Controls.Add(this.selectTilePictureBox, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 5); - this.tableLayoutPanel1.Controls.Add(this.animationButton, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 6); this.tableLayoutPanel1.Controls.Add(this.tileNameLabel, 0, 1); this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 1, 2); this.tableLayoutPanel1.Controls.Add(this.variantLabel, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.setColorButton, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.animationButton, 1, 6); + this.tableLayoutPanel1.Controls.Add(this.clearColorButton, 1, 4); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(20, 84); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 6; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5F)); + this.tableLayoutPanel1.RowCount = 7; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.09524F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.09524F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.Size = new System.Drawing.Size(590, 565); this.tableLayoutPanel1.TabIndex = 17; // @@ -164,10 +182,10 @@ this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; this.originalPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; - this.originalPictureBox.Location = new System.Drawing.Point(220, 3); + this.originalPictureBox.Location = new System.Drawing.Point(217, 3); this.originalPictureBox.Name = "originalPictureBox"; - this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 6); - this.originalPictureBox.Size = new System.Drawing.Size(367, 559); + this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 7); + this.originalPictureBox.Size = new System.Drawing.Size(370, 533); this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.originalPictureBox.TabIndex = 4; this.originalPictureBox.TabStop = false; @@ -186,7 +204,7 @@ this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); this.selectTilePictureBox.Name = "selectTilePictureBox"; - this.selectTilePictureBox.Size = new System.Drawing.Size(211, 220); + this.selectTilePictureBox.Size = new System.Drawing.Size(208, 201); this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.selectTilePictureBox.TabIndex = 0; this.selectTilePictureBox.TabStop = false; @@ -198,39 +216,24 @@ | System.Windows.Forms.AnchorStyles.Right))); this.replaceButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.replaceButton, 2); - this.replaceButton.Location = new System.Drawing.Point(3, 539); + this.replaceButton.Location = new System.Drawing.Point(3, 517); this.replaceButton.Name = "replaceButton"; - this.replaceButton.Size = new System.Drawing.Size(211, 23); + this.replaceButton.Size = new System.Drawing.Size(208, 19); this.replaceButton.TabIndex = 14; this.replaceButton.Text = "Replace"; this.replaceButton.Theme = MetroFramework.MetroThemeStyle.Dark; this.replaceButton.UseSelectable = true; this.replaceButton.Click += new System.EventHandler(this.replaceButton_Click); // - // animationButton - // - this.animationButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.animationButton.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); - this.animationButton.Location = new System.Drawing.Point(3, 511); - this.animationButton.Name = "animationButton"; - this.animationButton.Size = new System.Drawing.Size(211, 22); - this.animationButton.TabIndex = 16; - this.animationButton.Text = "Animation"; - this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.animationButton.UseSelectable = true; - this.animationButton.Click += new System.EventHandler(this.animationButton_Click); - // // tileNameLabel // this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.tileNameLabel.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); - this.tileNameLabel.Location = new System.Drawing.Point(3, 235); + this.tileNameLabel.Location = new System.Drawing.Point(3, 213); this.tileNameLabel.Name = "tileNameLabel"; - this.tileNameLabel.Size = new System.Drawing.Size(211, 19); + this.tileNameLabel.Size = new System.Drawing.Size(208, 19); this.tileNameLabel.TabIndex = 19; this.tileNameLabel.Text = "TileName"; this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -242,14 +245,55 @@ this.variantComboBox.Enabled = false; this.variantComboBox.FormattingEnabled = true; this.variantComboBox.ItemHeight = 23; - this.variantComboBox.Location = new System.Drawing.Point(65, 257); + this.variantComboBox.Location = new System.Drawing.Point(64, 235); this.variantComboBox.Name = "variantComboBox"; - this.variantComboBox.Size = new System.Drawing.Size(149, 29); + this.variantComboBox.Size = new System.Drawing.Size(147, 29); this.variantComboBox.TabIndex = 17; this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; this.variantComboBox.UseSelectable = true; this.variantComboBox.SelectedIndexChanged += new System.EventHandler(this.variantComboBox_SelectedIndexChanged); // + // setColorButton + // + this.setColorButton.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.tableLayoutPanel1.SetColumnSpan(this.setColorButton, 2); + this.setColorButton.Location = new System.Drawing.Point(3, 467); + this.setColorButton.Name = "setColorButton"; + this.setColorButton.Size = new System.Drawing.Size(208, 19); + this.setColorButton.TabIndex = 25; + this.setColorButton.Text = "Set Custom Colour"; + this.setColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.setColorButton.UseSelectable = true; + this.setColorButton.Click += new System.EventHandler(this.setColorButton_Click); + // + // animationButton + // + this.animationButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.animationButton.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); + this.animationButton.Location = new System.Drawing.Point(3, 542); + this.animationButton.Name = "animationButton"; + this.animationButton.Size = new System.Drawing.Size(208, 20); + this.animationButton.TabIndex = 16; + this.animationButton.Text = "Animation"; + this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.animationButton.UseSelectable = true; + this.animationButton.Click += new System.EventHandler(this.animationButton_Click); + // + // clearColorButton + // + this.clearColorButton.Anchor = System.Windows.Forms.AnchorStyles.Left; + this.tableLayoutPanel1.SetColumnSpan(this.clearColorButton, 2); + this.clearColorButton.Location = new System.Drawing.Point(3, 492); + this.clearColorButton.Name = "clearColorButton"; + this.clearColorButton.Size = new System.Drawing.Size(208, 19); + this.clearColorButton.TabIndex = 24; + this.clearColorButton.Text = "Clear Custom Colour"; + this.clearColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.clearColorButton.UseSelectable = true; + this.clearColorButton.Click += new System.EventHandler(this.clearColorButton_Click); + // // TextureAtlasEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -294,5 +338,8 @@ private System.Windows.Forms.ToolStripMenuItem playAnimationsToolStripMenuItem; private MetroFramework.Controls.MetroLabel tileNameLabel; private MetroFramework.Controls.MetroLabel variantLabel; + private MetroFramework.Controls.MetroButton clearColorButton; + private MetroFramework.Controls.MetroButton setColorButton; + private System.Windows.Forms.ToolStripMenuItem sToolStripMenuItem; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 63829c17..09403f6f 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -164,8 +164,11 @@ namespace PckStudio.Forms.Editor selectTilePictureBox.Start(animation); } - if (dataTile.Tile.HasColourEntry) + if (setColorButton.Enabled = clearColorButton.Enabled = dataTile.Tile.HasColourEntry) { + setColorButton.Enabled = clearColorButton.Enabled = dataTile.Tile.ColourEntry.HasCustomColour; + clearColorButton.Enabled = false; + variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = dataTile.Tile.ColourEntry.Variants.Length > 1; if (dataTile.Tile.ColourEntry.IsWaterColour && _colourTable.WaterColors.Count > 0) @@ -472,5 +475,51 @@ namespace PckStudio.Forms.Editor if (selectTilePictureBox.IsPlaying) selectTilePictureBox.Stop(); } + + private void setColorButton_Click(object sender, EventArgs e) + { + ColorDialog colorPick = new ColorDialog(); + colorPick.AllowFullOpen = true; + colorPick.AnyColor = true; + colorPick.SolidColorOnly = true; + + // custom colors are read as BGR for some reason, so hex values are "backwards" + // values below are the default Minecraft dyed leather armor values for convenience + + colorPick.CustomColors = new int[] { + 0x262EB0, // Red + 0x1D80F9, // Orange + 0x3DD8FE, // Yellow + 0x1FC780, // Lime + 0x167C5E, // Green + 0xDAB33A, // Light Blue + 0x9C9C16, // Cyan + 0xAA443C, // Blue + 0xB83289, // Purple + 0xBD4EC7, // Magenta + 0xAA8BF3, // Pink + 0xFEFFF9, // White + 0x979D9D, // Light Gray + 0x524F47, // Gray + 0x211D1D, // Black + 0x325483 // Brown + }; + + if (colorPick.ShowDialog() != DialogResult.OK) return; + + selectTilePictureBox.BlendColor = colorPick.Color; + selectTilePictureBox.Image = dataTile.Texture; + variantComboBox.Enabled = false; + clearColorButton.Enabled = true; + } + + private void clearColorButton_Click(object sender, EventArgs e) + { + variantComboBox.Enabled = true; + + variantComboBox_SelectedIndexChanged(sender, e); + + clearColorButton.Enabled = false; + } } } \ No newline at end of file diff --git a/PCK-Studio/Internal/Json/ColorEntry.cs b/PCK-Studio/Internal/Json/ColorEntry.cs index 8523a311..39390d81 100644 --- a/PCK-Studio/Internal/Json/ColorEntry.cs +++ b/PCK-Studio/Internal/Json/ColorEntry.cs @@ -15,6 +15,9 @@ namespace PckStudio.Internal.Json [JsonProperty("isWaterColour", DefaultValueHandling = DefaultValueHandling.Populate)] public bool IsWaterColour { get; set; } + [JsonProperty("hasCustomColour", DefaultValueHandling = DefaultValueHandling.Populate)] + public bool HasCustomColour { get; set; } + [JsonProperty("variants", DefaultValueHandling = DefaultValueHandling.Populate)] public string[] Variants { get; set; } } diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index d617d7a5..2cc73295 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -7,7 +7,6 @@ "displayName": "Grass Block (Top)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -170,7 +169,6 @@ "displayName": "Grass Side (Overlay)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -185,7 +183,6 @@ "displayName": "Tall Grass", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -248,7 +245,6 @@ "displayName": "Oak Leaves", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -264,7 +260,6 @@ "displayName": "Oak Leaves (Opaque)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -288,7 +283,6 @@ "displayName": "Fern", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -524,7 +518,6 @@ "displayName": "Stem", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Tile_StemMin", "variants": [ "Tile_StemMin", @@ -597,7 +590,6 @@ "displayName": "Stem (Attached)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Tile_StemMin", "variants": [ "Tile_StemMin", @@ -626,7 +618,6 @@ "displayName": "Spruce Leaves", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Evergreen", "variants": [ "Foliage_Default", @@ -642,7 +633,6 @@ "displayName": "Spruce Leaves (Opaque)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Evergreen", "variants": [ "Foliage_Default", @@ -694,7 +684,6 @@ "displayName": "Vines", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -790,7 +779,6 @@ "displayName": "Redstone Dust (Cross)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Tile_RedstoneDust", "variants": [ "Tile_RedstoneDust", @@ -805,7 +793,6 @@ "displayName": "Redstone Dust (Line)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Tile_RedstoneDust", "variants": [ "Tile_RedstoneDust", @@ -940,7 +927,6 @@ "displayName": "Jungle Leaves", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -956,7 +942,6 @@ "displayName": "Jungle Leaves (Opaque)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -1554,7 +1539,6 @@ "displayName": "Large Fern (Top)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -1569,7 +1553,6 @@ "displayName": "Double Tall Grass (Top)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -1620,7 +1603,6 @@ "displayName": "Acacia Leaves", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -1636,7 +1618,6 @@ "displayName": "Acacia Leaves (Opaque)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -1664,7 +1645,6 @@ "displayName": "Large Fern (Bottom)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -1679,7 +1659,6 @@ "displayName": "Double Tall Grass (Bottom)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Grass_Common", "variants": [ "Grass_Common", @@ -1730,7 +1709,6 @@ "displayName": "Dark Oak Leaves", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -1746,7 +1724,6 @@ "displayName": "Dark Oak Leaves (Opaque)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Default", "variants": [ "Foliage_Default", @@ -1818,7 +1795,6 @@ "displayName": "Birch Leaves", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Birch", "variants": [ "Foliage_Default", @@ -1834,7 +1810,6 @@ "displayName": "Birch Leaves (Opaque)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Foliage_Birch", "variants": [ "Foliage_Default", @@ -2318,7 +2293,7 @@ "displayName": "Cauldron Water", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, + "hasCustomColour": true, "defaultName": "Cauldron_Water", "variants": [ "Cauldron_Water", @@ -2924,7 +2899,7 @@ "displayName": "Leather Cap", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, + "hasCustomColour": true, "defaultName": "Armour_Default_Leather_Colour", "variants": [ "Armour_Default_Leather_Colour" ] } @@ -2994,7 +2969,7 @@ "displayName": "Leather Tunic", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, + "hasCustomColour": true, "defaultName": "Armour_Default_Leather_Colour", "variants": [ "Armour_Default_Leather_Colour" ] } @@ -3064,7 +3039,7 @@ "displayName": "Leather Pants", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, + "hasCustomColour": true, "defaultName": "Armour_Default_Leather_Colour", "variants": [ "Armour_Default_Leather_Colour" ] } @@ -3134,7 +3109,7 @@ "displayName": "Leather Boots", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, + "hasCustomColour": true, "defaultName": "Armour_Default_Leather_Colour", "variants": [ "Armour_Default_Leather_Colour" ] } @@ -3512,8 +3487,8 @@ "displayName": "Potion (Overlay)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Potion_BaseColour", + "hasCustomColour": true, "variants": [ "Potion_BaseColour", "Effect_MovementSpeed", @@ -3664,7 +3639,6 @@ "displayName": "Bed (Overlay)", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, "defaultName": "Bed_White", "variants": [ "Bed_Black", @@ -3899,7 +3873,7 @@ "displayName": "Leather Horse Armor", "hasColourEntry": true, "colourEntry": { - "isWaterColour": false, + "hasCustomColour": true, "defaultName": "Armour_Default_Leather_Colour", "variants": [ "Armour_Default_Leather_Colour" ] } From 513e73fa1a6ca4a45794be644280659f20ec7de2 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 05:34:44 -0400 Subject: [PATCH 13/52] Update tileData.json -Filled empty clock and compass slots for texture atlas editor --- PCK-Studio/Resources/tileData.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 2cc73295..39076f79 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -3908,34 +3908,34 @@ }, { "internalName": "compass", - "displayName": "Compass" - }, - { - "internalName": "", "displayName": "" }, { - "internalName": "", + "internalName": "compass", "displayName": "" }, { - "internalName": "", + "internalName": "compass", + "displayName": "" + }, + { + "internalName": "compass", "displayName": "" }, { "internalName": "clock", - "displayName": "Clock" - }, - { - "internalName": "", "displayName": "" }, { - "internalName": "", + "internalName": "clock", "displayName": "" }, { - "internalName": "", + "internalName": "clock", + "displayName": "" + }, + { + "internalName": "clock", "displayName": "" }, { From f6e72b0e6ede61cb86f2f7c7416a6d954f73c796 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 07:01:31 -0400 Subject: [PATCH 14/52] Added atlas editor support for moon phases --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 26 +++++++----- PCK-Studio/Internal/Json/Tiles.cs | 21 ++++++++++ PCK-Studio/MainForm.cs | 14 +++++-- PCK-Studio/PckStudio.csproj | 1 + PCK-Studio/Properties/Resources.Designer.cs | 38 +++++++++++------- PCK-Studio/Properties/Resources.resx | 3 ++ PCK-Studio/Resources/moon_phases.png | Bin 0 -> 1569 bytes PCK-Studio/Resources/tileData.json | 34 ++++++++++++++++ 8 files changed, 108 insertions(+), 29 deletions(-) create mode 100644 PCK-Studio/Resources/moon_phases.png diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 09403f6f..12ed5b6e 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -94,6 +94,7 @@ namespace PckStudio.Forms.Editor { "terrain" => (Tiles.BlockTileInfos, "blocks"), "items" => (Tiles.ItemTileInfos, "items"), + "moon_phases" => (Tiles.MoonPhasesTileInfos, "moon_phases"), _ => (null, null), }; originalPictureBox.Image = atlas; @@ -151,17 +152,20 @@ namespace PckStudio.Forms.Editor selectTilePictureBox.BlendColor = GetBlendColor(); selectTilePictureBox.UseBlendColor = applyColorMaskToolStripMenuItem.Checked; - bool hasAnimation = - _pckFile.TryGetValue($"res/textures/{_atlasType}/{dataTile.Tile.InternalName}.png", PckFileType.TextureFile, out var animationFile); - animationButton.Text = hasAnimation ? "Edit Animation" : "Create Animation"; - replaceButton.Enabled = !hasAnimation; - - if (playAnimationsToolStripMenuItem.Checked && - hasAnimation && - animationFile.Size > 0) + if (animationButton.Enabled = _atlasType == "blocks" || _atlasType == "items") { - var animation = AnimationHelper.GetAnimationFromFile(animationFile); - selectTilePictureBox.Start(animation); + bool hasAnimation = + _pckFile.TryGetValue($"res/textures/{_atlasType}/{dataTile.Tile.InternalName}.png", PckFileType.TextureFile, out var animationFile); + animationButton.Text = hasAnimation ? "Edit Animation" : "Create Animation"; + replaceButton.Enabled = !hasAnimation; + + if (playAnimationsToolStripMenuItem.Checked && + hasAnimation && + animationFile.Size > 0) + { + var animation = AnimationHelper.GetAnimationFromFile(animationFile); + selectTilePictureBox.Start(animation); + } } if (setColorButton.Enabled = clearColorButton.Enabled = dataTile.Tile.HasColourEntry) @@ -504,7 +508,7 @@ namespace PckStudio.Forms.Editor 0x211D1D, // Black 0x325483 // Brown }; - + if (colorPick.ShowDialog() != DialogResult.OK) return; selectTilePictureBox.BlendColor = colorPick.Color; diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index b6e7942c..924e51bc 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -17,6 +17,8 @@ namespace PckStudio.Internal.Json public List Blocks { get; set; } [JsonProperty("items")] public List Items { get; set; } + [JsonProperty("moon_phases")] + public List MoonPhases { get; set; } } internal static class Tiles @@ -27,6 +29,7 @@ namespace PckStudio.Internal.Json internal static List ItemTileInfos => JsonTileData.Items; internal static List BlockTileInfos => JsonTileData.Blocks; + internal static List MoonPhasesTileInfos => JsonTileData.MoonPhases; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_sheet.SplitHorizontal(16).ToArray(); @@ -34,6 +37,9 @@ namespace PckStudio.Internal.Json private static Image[] _blockImages; public static Image[] BlockImages => _blockImages ??= Resources.terrain_sheet.SplitHorizontal(16).ToArray(); + private static Image[] _moonPhasesImages; + public static Image[] MoonPhasesImages => _moonPhasesImages ??= Resources.moon_phases_sheet.SplitHorizontal(8).ToArray(); + private static ImageList _itemImageList; public static ImageList ItemImageList { @@ -63,5 +69,20 @@ namespace PckStudio.Internal.Json return _blockImageList; } } + + private static ImageList _moonPhasesImageList; + public static ImageList MoonPhasesImageList + { + get + { + if (_moonPhasesImageList is null) + { + _moonPhasesImageList = new ImageList(); + _moonPhasesImageList.ColorDepth = ColorDepth.Depth32Bit; + _moonPhasesImageList.Images.AddRange(MoonPhasesImages); + } + return _moonPhasesImageList; + } + } } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index d9c7cb3d..ce1f4237 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -375,11 +375,19 @@ namespace PckStudio return; } - if (file.Filename == "res/terrain.png" || file.Filename == "res/items.png") + bool isTerrainOrItems = file.Filename == "res/terrain.png" || file.Filename == "res/items.png"; + bool isMoon = file.Filename == "res/terrain/moon_phases.png"; + + if (isTerrainOrItems || isMoon) { var img = file.GetTexture(); - var res = img.Width / 16; // texture count on X axes - var size = new Size(res, res); + + var columnCount = 0; + if (isTerrainOrItems) columnCount = 16; + else if (isMoon) columnCount = 4; + + var resolution = img.Width / columnCount; + var size = new Size(resolution, resolution); var viewer = new TextureAtlasEditor(currentPCK, file.Filename, img, size); if (viewer.ShowDialog() == DialogResult.OK) { diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 3013435f..5dfbced4 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -689,6 +689,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 88909123..aedf0101 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -414,6 +414,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap moon_phases_sheet { + get { + object obj = ResourceManager.GetObject("moon_phases_sheet", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// @@ -617,30 +627,28 @@ namespace PckStudio.Properties { /// /// Looks up a localized string similar to { /// "COMMENT_1": "Tile data research by MattNL", - /// "COMMENT_2": "JSON conversion by PhoenixARC", + /// "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", /// "blocks": [ /// { /// "internalName": "grass_top", - /// "displayName": "Grass Block (Top)" + /// "displayName": "Grass Block (Top)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "Grass_Common", + /// "variants": [ + /// "Grass_Common", + /// "Grass_Mesa", + /// "Grass_Swamp1", + /// "Grass_Swamp2" + /// ] + /// } /// }, /// { /// "internalName": "stone", /// "displayName": "Stone" /// }, /// { - /// "internalName": "dirt", - /// "displayName": "Dirt" - /// }, - /// { - /// "internalName": "grass_side", - /// "displayName": "Grass Block (Side)" - /// }, - /// { - /// "internalName": "planks_oak", - /// "displayName": "Oak Planks" - /// }, - /// { - /// "internalName": [rest of string was truncated]";. + /// "internalName": [rest of string was truncated]";. /// public static string tileData { get { diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 58f5451c..e4d8ab0b 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -328,4 +328,7 @@ ..\..\ProjectLogo.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\moon_phases.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PCK-Studio/Resources/moon_phases.png b/PCK-Studio/Resources/moon_phases.png new file mode 100644 index 0000000000000000000000000000000000000000..ce239ea7b40a685b1d74de6d8feca11ad580cd68 GIT binary patch literal 1569 zcmV++2HyFJP)N2bPDNB8 zb~7$DE-^4L^m3s900o^%L_t(|UhP~2Nz&P z6?dSD1t(z5mP2p>_S^&BbZbUqjU z=0}G=(T7;>A+&Akd&7A@Iah6Tp&D)DOC^bsp)=sF01!vyQ~<#*;YTMQWOD?vW`7KR znfk$aF&Hn0lS|X^5nmb^I=!*#3MwN(1B}>41I|KeaufU#euy9rPb3qHeZ_u1IYYcN z^~vmdG`~q^s?o+ZzQiu-5N9};HJ~BE?gW_tf?v*0qe-(#L~f7r{>Wl~HJn_5^zqrF z@%iJ)#S=7a;3K}ouEBU^X)wZ{QzD{HpfX!3fZ$V%7W1PLG!c}BKhnC&JSz5A$@IZ! z{t%2$7q`>J-E{d>HEb+y@g;WQ0MJE7iiePN65e$P(N7WPg0R-Bv>1YDZdGR2|wuwndTo3e+;mc_irfn?|%RJ zYucA@-?9DX?fZ8hKCuRri!dH6SY(rhvbm6&{(IpA^X048D#cL?ix2Rc@EJJ=?tT51 z07xJv{4vZT(IeF$*ugk>|MByek%7-g{ot0ygKMi3Bs>hb0{GzD|3+ARm!nYlKt@E` zp~C^>hpz>oJFip#L^P&4tRWJPEda~#@$**_;9e&p)d@HY0fgp4c>z4}xo`156BfTn zfH2qZ#=aK72j3N7biw%t6CMn?NcvzLyrY?Z0GiOS3kTpZ&O#W9y#%Plw*?4`@5X5; z{KD{u27dS+0&w0p{QydEH2Ix?@4|44r+b(qfQ`@6at{cLU!MSFJ;3k!{ZbJ30B&`p zAOl`g3Nk@sXX;QXE=&r-$XPZ>BI7eJ+{{P6K_=}1{`iKYI`G#82s4QYGYIo-aN#u6 zP;bi+a2jgk*D(z}7=CUdY%&v=wMQan0PLf&6*cVjgAfKcW^zA#4|8t0 z06zYA#~q!V=jsn~0vHWKnP+VQ*xSk+1;ppr=duZQl6&KO*wf1d@UvfUwx<^g5U~Eh z6##~Kw1C%dGAFyox4}PF0Rq+^8tK6jb5g zKl~ufvmn1gY;*mAn}T>84vTLz;Gx+2`j2uN%Aw>pjoV_HYscx);O}@Nb~^t3bRmr` z3(fuck@|qhOD#x!K(^pZoQHAgdOot8OuXfGU0}2drl`CLd#Vn=kn-|#2_cTlIjd)mpeck^3eewSR{HIP) Tt|iYb00000NkvXXu0mjfYU}K5 literal 0 HcmV?d00001 diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/tileData.json index 39076f79..456dfe04 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/tileData.json @@ -4134,5 +4134,39 @@ "internalName": "", "displayName": "" } + ], + "moon_phases": [ + { + "internalName": "moon_phase_0", + "displayName": "Full Moon" + }, + { + "internalName": "moon_phase_1", + "displayName": "Waning Gibbous" + }, + { + "internalName": "moon_phase_2", + "displayName": "Last Quarter" + }, + { + "internalName": "moon_phase_3", + "displayName": "Waning Crescent" + }, + { + "internalName": "moon_phase_4", + "displayName": "New Moon" + }, + { + "internalName": "moon_phase_5", + "displayName": "Waxing Crescent" + }, + { + "internalName": "moon_phase_6", + "displayName": "First Quarter" + }, + { + "internalName": "moon_phase_7", + "displayName": "Waxing Gibbous" + }, ] } From 3bf0075206f18e997ea704e7ed4cdf9b10509d83 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 07:29:59 -0400 Subject: [PATCH 15/52] Improved keyboard navigation --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 45 ++++++++----------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 12ed5b6e..b2ebaca2 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -76,7 +76,17 @@ namespace PckStudio.Forms.Editor private int SelectedIndex { - set => SetImageDisplayed(value); + set { + if (value < 0) + { + value = _tiles.Count + value; + } + else if (value >= _tiles.Count) + { + value = value - _tiles.Count; + } + SetImageDisplayed(value); + } } private const ImageLayoutDirection _imageLayout = ImageLayoutDirection.Horizontal; @@ -348,34 +358,17 @@ namespace PckStudio.Forms.Editor switch (keyData) { case Keys.Left: - if (_tiles.IndexInRange(_selectedTile.Index - 1)) - { - SelectedIndex = _selectedTile.Index - 1; - return true; - } - break; + SelectedIndex = _selectedTile.Index - 1; + return true; case Keys.Right: - if (_tiles.IndexInRange(_selectedTile.Index + 1)) - { - SelectedIndex = _selectedTile.Index + 1; - return true; - } - break; + SelectedIndex = _selectedTile.Index + 1; + return true; case Keys.Up: - if (_tiles.IndexInRange(_selectedTile.Index - _rowCount)) - { - SelectedIndex = _selectedTile.Index - _rowCount; - return true; - } - break; - + SelectedIndex = _selectedTile.Index - _rowCount; + return true; case Keys.Down: - if (_tiles.IndexInRange(_selectedTile.Index + _rowCount)) - { - SelectedIndex = _selectedTile.Index + _rowCount; - return true; - } - break; + SelectedIndex = _selectedTile.Index + _rowCount; + return true; } return false; From 2ec739d4c0eef807327873a40a78ee350851144d Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Wed, 13 Mar 2024 18:04:48 +0100 Subject: [PATCH 16/52] MainForm - Fix unable to create skin when no loc file is found --- .../Forms/Skins-And-Textures/AddNewSkin.cs | 18 +++++++++++++----- PCK-Studio/MainForm.cs | 9 +++------ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs b/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs index 3f34cb3d..7c80ab59 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs @@ -242,15 +242,23 @@ namespace PckStudio.Popups } string skinId = _skinId.ToString("d08"); skin.Filename = $"dlcskin{skinId}.png"; - string skinDisplayNameLocKey = $"IDS_dlcskin{skinId}_DISPLAYNAME"; - currentLoc.AddLocKey(skinDisplayNameLocKey, textSkinName.Text); skin.Properties.Add("DISPLAYNAME", textSkinName.Text); - skin.Properties.Add("DISPLAYNAMEID", skinDisplayNameLocKey); + + if (currentLoc is not null) + { + string skinDisplayNameLocKey = $"IDS_dlcskin{skinId}_DISPLAYNAME"; + skin.Properties.Add("DISPLAYNAMEID", skinDisplayNameLocKey); + currentLoc.AddLocKey(skinDisplayNameLocKey, textSkinName.Text); + } + if (!string.IsNullOrEmpty(textThemeName.Text)) { skin.Properties.Add("THEMENAME", textThemeName.Text); - skin.Properties.Add("THEMENAMEID", $"IDS_dlcskin{skinId}_THEMENAME"); - currentLoc.AddLocKey($"IDS_dlcskin{skinId}_THEMENAME", textThemeName.Text); + if (currentLoc is not null) + { + skin.Properties.Add("THEMENAMEID", $"IDS_dlcskin{skinId}_THEMENAME"); + currentLoc.AddLocKey($"IDS_dlcskin{skinId}_THEMENAME", textThemeName.Text); + } } skin.Properties.Add("ANIM", anim); skin.Properties.Add("GAME_FLAGS", "0x18"); diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index d9c7cb3d..dd4f1c8b 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -801,12 +801,9 @@ namespace PckStudio private void createSkinToolStripMenuItem_Click(object sender, EventArgs e) { - if (!TryGetLocFile(out LOCFile locFile)) - { - MessageBox.Show("No .loc file found", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - using (AddNewSkin add = new AddNewSkin(locFile)) + LOCFile locFile = null; + TryGetLocFile(out locFile); + using AddNewSkin add = new AddNewSkin(locFile); if (add.ShowDialog() == DialogResult.OK) { From 3f4b7b705e5dc5056c0a9a868da5c1b5bf6aac5d Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Wed, 13 Mar 2024 18:13:19 +0100 Subject: [PATCH 17/52] MainForm - Remove 'Add Custom Icon' feature --- PCK-Studio/MainForm.Designer.cs | 2041 +++++++++++++++---------------- PCK-Studio/MainForm.cs | 149 +-- PCK-Studio/MainForm.resx | 42 +- 3 files changed, 1062 insertions(+), 1170 deletions(-) diff --git a/PCK-Studio/MainForm.Designer.cs b/PCK-Studio/MainForm.Designer.cs index e91b4aba..d6ea4aa7 100644 --- a/PCK-Studio/MainForm.Designer.cs +++ b/PCK-Studio/MainForm.Designer.cs @@ -28,159 +28,158 @@ /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); - System.Windows.Forms.PictureBox logoPictureBox; - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); - System.Windows.Forms.ToolStripSeparator toolStripSeparator1; - this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); - this.contextMenuPCKEntries = new System.Windows.Forms.ContextMenuStrip(this.components); - this.createToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.folderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.skinToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.createAnimatedTextureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.audiopckToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.colourscolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.CreateSkinsPCKToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.behavioursbinToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.entityMaterialsbinToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.importSkinsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.importSkinToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.importExtractedSkinsFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.addTextureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.addFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.as3DSTextureFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.setFileTypeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.skinToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.capeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.textureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.languagesFileLOCToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.gameRulesFileGRFToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.audioPCKFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.coloursCOLFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.gameRulesHeaderGRHToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.skinsPCKToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.modelsFileBINToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.behavioursFileBINToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.entityMaterialsFileBINToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.miscFunctionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.generateMipMapTextureToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.viewFileInfoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.correctSkinDecimalsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.moveUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.moveDownToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.extractToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.cloneFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.renameFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.replaceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.deleteFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.menuStrip = new System.Windows.Forms.MenuStrip(); - this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.skinPackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.texturePackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.mashUpPackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.extractToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.packSettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.fullBoxSupportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.quickChangeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.convertToBedrockToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.miscToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.addCustomPackImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openPckManagerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.convertMusicFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.wavBinkaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.binkaWavToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.storeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.openPckCenterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.joinDevelopmentDiscordToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.trelloBoardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.checkForUpdatesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.videosToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.howToMakeABasicSkinPackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.howToMakeACustomSkinModelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.howToMakeCustomSkinModelsbedrockToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.howToMakeCustomMusicToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.howToInstallPcksDirectlyToWiiUToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.pckCenterReleaseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.howPCKsWorkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.donateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toNobledezJackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toPhoenixARCDeveloperToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.forMattNLContributorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.contextMenuMetaTree = new System.Windows.Forms.ContextMenuStrip(this.components); - this.addEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.addEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.addBOXEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.addANIMEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.addMultipleEntriesToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.deleteEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.editAllEntriesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.tabControl = new MetroFramework.Controls.MetroTabControl(); - this.openTab = new MetroFramework.Controls.MetroTabPage(); - this.pckOpen = new System.Windows.Forms.PictureBox(); - this.label5 = new MetroFramework.Controls.MetroLabel(); - this.labelVersion = new MetroFramework.Controls.MetroLabel(); - this.ChangelogRichTextBox = new System.Windows.Forms.RichTextBox(); - this.editorTab = new MetroFramework.Controls.MetroTabPage(); - this.pckFileLabel = new MetroFramework.Controls.MetroLabel(); - this.labelImageSize = new MetroFramework.Controls.MetroLabel(); - this.fileEntryCountLabel = new MetroFramework.Controls.MetroLabel(); - this.PropertiesTabControl = new MetroFramework.Controls.MetroTabControl(); - this.MetaTab = new MetroFramework.Controls.MetroTabPage(); - this.metroLabel2 = new MetroFramework.Controls.MetroLabel(); - this.treeMeta = new System.Windows.Forms.TreeView(); - this.entryTypeTextBox = new MetroFramework.Controls.MetroTextBox(); - this.entryDataTextBox = new MetroFramework.Controls.MetroTextBox(); - this.buttonEdit = new MetroFramework.Controls.MetroButton(); - this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); - this.label11 = new MetroFramework.Controls.MetroLabel(); - this.treeViewMain = new System.Windows.Forms.TreeView(); - this.imageList = new System.Windows.Forms.ImageList(this.components); - this.previewPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); - this.LittleEndianCheckBox = new MetroFramework.Controls.MetroCheckBox(); - logoPictureBox = new System.Windows.Forms.PictureBox(); - toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); - ((System.ComponentModel.ISupportInitialize)(logoPictureBox)).BeginInit(); - this.contextMenuPCKEntries.SuspendLayout(); - this.menuStrip.SuspendLayout(); - this.contextMenuMetaTree.SuspendLayout(); - this.tabControl.SuspendLayout(); - this.openTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pckOpen)).BeginInit(); - this.editorTab.SuspendLayout(); - this.PropertiesTabControl.SuspendLayout(); - this.MetaTab.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.previewPictureBox)).BeginInit(); - this.SuspendLayout(); - // - // logoPictureBox - // - resources.ApplyResources(logoPictureBox, "logoPictureBox"); - logoPictureBox.Name = "logoPictureBox"; - logoPictureBox.TabStop = false; - // - // toolStripSeparator1 - // - toolStripSeparator1.Name = "toolStripSeparator1"; - resources.ApplyResources(toolStripSeparator1, "toolStripSeparator1"); - // - // toolStripSeparator3 - // - this.toolStripSeparator3.Name = "toolStripSeparator3"; - resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); - // - // contextMenuPCKEntries - // - this.contextMenuPCKEntries.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.components = new System.ComponentModel.Container(); + System.Windows.Forms.PictureBox logoPictureBox; + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.contextMenuPCKEntries = new System.Windows.Forms.ContextMenuStrip(this.components); + this.createToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.folderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.skinToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.createAnimatedTextureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.audiopckToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.colourscolToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.CreateSkinsPCKToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.behavioursbinToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.entityMaterialsbinToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.importSkinsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.importSkinToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.importExtractedSkinsFolderToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.addTextureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.addFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.as3DSTextureFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.setFileTypeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.skinToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.capeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.textureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.languagesFileLOCToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.gameRulesFileGRFToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.audioPCKFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.coloursCOLFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.gameRulesHeaderGRHToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.skinsPCKToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.modelsFileBINToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.behavioursFileBINToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.entityMaterialsFileBINToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.miscFunctionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.generateMipMapTextureToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.viewFileInfoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.correctSkinDecimalsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.moveUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.moveDownToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.extractToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.cloneFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.renameFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.replaceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStrip = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.skinPackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.texturePackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.mashUpPackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.extractToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.packSettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.fullBoxSupportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.quickChangeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.convertToBedrockToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.miscToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openPckManagerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.convertMusicFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.wavBinkaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.binkaWavToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.storeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openPckCenterToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.joinDevelopmentDiscordToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.trelloBoardToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.checkForUpdatesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.videosToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.howToMakeABasicSkinPackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.howToMakeACustomSkinModelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.howToMakeCustomSkinModelsbedrockToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.howToMakeCustomMusicToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.howToInstallPcksDirectlyToWiiUToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.pckCenterReleaseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.howPCKsWorkToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.donateToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toNobledezJackToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toPhoenixARCDeveloperToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.forMattNLContributorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.contextMenuMetaTree = new System.Windows.Forms.ContextMenuStrip(this.components); + this.addEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.addEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.addBOXEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.addANIMEntryToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.addMultipleEntriesToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteEntryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editAllEntriesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tabControl = new MetroFramework.Controls.MetroTabControl(); + this.openTab = new MetroFramework.Controls.MetroTabPage(); + this.pckOpen = new System.Windows.Forms.PictureBox(); + this.label5 = new MetroFramework.Controls.MetroLabel(); + this.labelVersion = new MetroFramework.Controls.MetroLabel(); + this.ChangelogRichTextBox = new System.Windows.Forms.RichTextBox(); + this.editorTab = new MetroFramework.Controls.MetroTabPage(); + this.pckFileLabel = new MetroFramework.Controls.MetroLabel(); + this.labelImageSize = new MetroFramework.Controls.MetroLabel(); + this.fileEntryCountLabel = new MetroFramework.Controls.MetroLabel(); + this.PropertiesTabControl = new MetroFramework.Controls.MetroTabControl(); + this.MetaTab = new MetroFramework.Controls.MetroTabPage(); + this.metroLabel2 = new MetroFramework.Controls.MetroLabel(); + this.treeMeta = new System.Windows.Forms.TreeView(); + this.entryTypeTextBox = new MetroFramework.Controls.MetroTextBox(); + this.entryDataTextBox = new MetroFramework.Controls.MetroTextBox(); + this.buttonEdit = new MetroFramework.Controls.MetroButton(); + this.metroLabel1 = new MetroFramework.Controls.MetroLabel(); + this.label11 = new MetroFramework.Controls.MetroLabel(); + this.treeViewMain = new System.Windows.Forms.TreeView(); + this.imageList = new System.Windows.Forms.ImageList(this.components); + this.previewPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); + this.LittleEndianCheckBox = new MetroFramework.Controls.MetroCheckBox(); + logoPictureBox = new System.Windows.Forms.PictureBox(); + toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + ((System.ComponentModel.ISupportInitialize)(logoPictureBox)).BeginInit(); + this.contextMenuPCKEntries.SuspendLayout(); + this.menuStrip.SuspendLayout(); + this.contextMenuMetaTree.SuspendLayout(); + this.tabControl.SuspendLayout(); + this.openTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pckOpen)).BeginInit(); + this.editorTab.SuspendLayout(); + this.PropertiesTabControl.SuspendLayout(); + this.MetaTab.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.previewPictureBox)).BeginInit(); + this.SuspendLayout(); + // + // logoPictureBox + // + resources.ApplyResources(logoPictureBox, "logoPictureBox"); + logoPictureBox.Name = "logoPictureBox"; + logoPictureBox.TabStop = false; + // + // toolStripSeparator1 + // + toolStripSeparator1.Name = "toolStripSeparator1"; + resources.ApplyResources(toolStripSeparator1, "toolStripSeparator1"); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); + // + // contextMenuPCKEntries + // + this.contextMenuPCKEntries.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.createToolStripMenuItem, this.importSkinsToolStripMenuItem, this.exportToolStripMenuItem, @@ -193,12 +192,12 @@ this.renameFileToolStripMenuItem, this.replaceToolStripMenuItem, this.deleteFileToolStripMenuItem}); - this.contextMenuPCKEntries.Name = "contextMenuStrip1"; - resources.ApplyResources(this.contextMenuPCKEntries, "contextMenuPCKEntries"); - // - // createToolStripMenuItem - // - this.createToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.contextMenuPCKEntries.Name = "contextMenuStrip1"; + resources.ApplyResources(this.contextMenuPCKEntries, "contextMenuPCKEntries"); + // + // createToolStripMenuItem + // + this.createToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.folderToolStripMenuItem, this.skinToolStripMenuItem, this.createAnimatedTextureToolStripMenuItem, @@ -207,114 +206,114 @@ this.CreateSkinsPCKToolStripMenuItem1, this.behavioursbinToolStripMenuItem, this.entityMaterialsbinToolStripMenuItem}); - resources.ApplyResources(this.createToolStripMenuItem, "createToolStripMenuItem"); - this.createToolStripMenuItem.Name = "createToolStripMenuItem"; - // - // folderToolStripMenuItem - // - resources.ApplyResources(this.folderToolStripMenuItem, "folderToolStripMenuItem"); - this.folderToolStripMenuItem.Name = "folderToolStripMenuItem"; - this.folderToolStripMenuItem.Click += new System.EventHandler(this.folderToolStripMenuItem_Click); - // - // skinToolStripMenuItem - // - resources.ApplyResources(this.skinToolStripMenuItem, "skinToolStripMenuItem"); - this.skinToolStripMenuItem.Name = "skinToolStripMenuItem"; - this.skinToolStripMenuItem.Click += new System.EventHandler(this.createSkinToolStripMenuItem_Click); - // - // createAnimatedTextureToolStripMenuItem - // - resources.ApplyResources(this.createAnimatedTextureToolStripMenuItem, "createAnimatedTextureToolStripMenuItem"); - this.createAnimatedTextureToolStripMenuItem.Name = "createAnimatedTextureToolStripMenuItem"; - this.createAnimatedTextureToolStripMenuItem.Click += new System.EventHandler(this.createAnimatedTextureToolStripMenuItem_Click); - // - // audiopckToolStripMenuItem - // - this.audiopckToolStripMenuItem.Image = global::PckStudio.Properties.Resources.BINKA_ICON; - this.audiopckToolStripMenuItem.Name = "audiopckToolStripMenuItem"; - resources.ApplyResources(this.audiopckToolStripMenuItem, "audiopckToolStripMenuItem"); - this.audiopckToolStripMenuItem.Click += new System.EventHandler(this.audiopckToolStripMenuItem_Click); - // - // colourscolToolStripMenuItem - // - this.colourscolToolStripMenuItem.Image = global::PckStudio.Properties.Resources.COL_ICON; - this.colourscolToolStripMenuItem.Name = "colourscolToolStripMenuItem"; - resources.ApplyResources(this.colourscolToolStripMenuItem, "colourscolToolStripMenuItem"); - this.colourscolToolStripMenuItem.Click += new System.EventHandler(this.colourscolToolStripMenuItem_Click); - // - // CreateSkinsPCKToolStripMenuItem1 - // - this.CreateSkinsPCKToolStripMenuItem1.Image = global::PckStudio.Properties.Resources.SKINS_ICON; - this.CreateSkinsPCKToolStripMenuItem1.Name = "CreateSkinsPCKToolStripMenuItem1"; - resources.ApplyResources(this.CreateSkinsPCKToolStripMenuItem1, "CreateSkinsPCKToolStripMenuItem1"); - this.CreateSkinsPCKToolStripMenuItem1.Click += new System.EventHandler(this.CreateSkinsPCKToolStripMenuItem1_Click); - // - // behavioursbinToolStripMenuItem - // - this.behavioursbinToolStripMenuItem.Image = global::PckStudio.Properties.Resources.BEHAVIOURS_ICON; - this.behavioursbinToolStripMenuItem.Name = "behavioursbinToolStripMenuItem"; - resources.ApplyResources(this.behavioursbinToolStripMenuItem, "behavioursbinToolStripMenuItem"); - this.behavioursbinToolStripMenuItem.Click += new System.EventHandler(this.behavioursbinToolStripMenuItem_Click); - // - // entityMaterialsbinToolStripMenuItem - // - this.entityMaterialsbinToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ENTITY_MATERIALS_ICON; - this.entityMaterialsbinToolStripMenuItem.Name = "entityMaterialsbinToolStripMenuItem"; - resources.ApplyResources(this.entityMaterialsbinToolStripMenuItem, "entityMaterialsbinToolStripMenuItem"); - this.entityMaterialsbinToolStripMenuItem.Click += new System.EventHandler(this.entityMaterialsbinToolStripMenuItem_Click); - // - // importSkinsToolStripMenuItem - // - this.importSkinsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + resources.ApplyResources(this.createToolStripMenuItem, "createToolStripMenuItem"); + this.createToolStripMenuItem.Name = "createToolStripMenuItem"; + // + // folderToolStripMenuItem + // + resources.ApplyResources(this.folderToolStripMenuItem, "folderToolStripMenuItem"); + this.folderToolStripMenuItem.Name = "folderToolStripMenuItem"; + this.folderToolStripMenuItem.Click += new System.EventHandler(this.folderToolStripMenuItem_Click); + // + // skinToolStripMenuItem + // + resources.ApplyResources(this.skinToolStripMenuItem, "skinToolStripMenuItem"); + this.skinToolStripMenuItem.Name = "skinToolStripMenuItem"; + this.skinToolStripMenuItem.Click += new System.EventHandler(this.createSkinToolStripMenuItem_Click); + // + // createAnimatedTextureToolStripMenuItem + // + resources.ApplyResources(this.createAnimatedTextureToolStripMenuItem, "createAnimatedTextureToolStripMenuItem"); + this.createAnimatedTextureToolStripMenuItem.Name = "createAnimatedTextureToolStripMenuItem"; + this.createAnimatedTextureToolStripMenuItem.Click += new System.EventHandler(this.createAnimatedTextureToolStripMenuItem_Click); + // + // audiopckToolStripMenuItem + // + this.audiopckToolStripMenuItem.Image = global::PckStudio.Properties.Resources.BINKA_ICON; + this.audiopckToolStripMenuItem.Name = "audiopckToolStripMenuItem"; + resources.ApplyResources(this.audiopckToolStripMenuItem, "audiopckToolStripMenuItem"); + this.audiopckToolStripMenuItem.Click += new System.EventHandler(this.audiopckToolStripMenuItem_Click); + // + // colourscolToolStripMenuItem + // + this.colourscolToolStripMenuItem.Image = global::PckStudio.Properties.Resources.COL_ICON; + this.colourscolToolStripMenuItem.Name = "colourscolToolStripMenuItem"; + resources.ApplyResources(this.colourscolToolStripMenuItem, "colourscolToolStripMenuItem"); + this.colourscolToolStripMenuItem.Click += new System.EventHandler(this.colourscolToolStripMenuItem_Click); + // + // CreateSkinsPCKToolStripMenuItem1 + // + this.CreateSkinsPCKToolStripMenuItem1.Image = global::PckStudio.Properties.Resources.SKINS_ICON; + this.CreateSkinsPCKToolStripMenuItem1.Name = "CreateSkinsPCKToolStripMenuItem1"; + resources.ApplyResources(this.CreateSkinsPCKToolStripMenuItem1, "CreateSkinsPCKToolStripMenuItem1"); + this.CreateSkinsPCKToolStripMenuItem1.Click += new System.EventHandler(this.CreateSkinsPCKToolStripMenuItem1_Click); + // + // behavioursbinToolStripMenuItem + // + this.behavioursbinToolStripMenuItem.Image = global::PckStudio.Properties.Resources.BEHAVIOURS_ICON; + this.behavioursbinToolStripMenuItem.Name = "behavioursbinToolStripMenuItem"; + resources.ApplyResources(this.behavioursbinToolStripMenuItem, "behavioursbinToolStripMenuItem"); + this.behavioursbinToolStripMenuItem.Click += new System.EventHandler(this.behavioursbinToolStripMenuItem_Click); + // + // entityMaterialsbinToolStripMenuItem + // + this.entityMaterialsbinToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ENTITY_MATERIALS_ICON; + this.entityMaterialsbinToolStripMenuItem.Name = "entityMaterialsbinToolStripMenuItem"; + resources.ApplyResources(this.entityMaterialsbinToolStripMenuItem, "entityMaterialsbinToolStripMenuItem"); + this.entityMaterialsbinToolStripMenuItem.Click += new System.EventHandler(this.entityMaterialsbinToolStripMenuItem_Click); + // + // importSkinsToolStripMenuItem + // + this.importSkinsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.importSkinToolStripMenuItem, this.importExtractedSkinsFolderToolStripMenuItem, this.addTextureToolStripMenuItem, this.addFileToolStripMenuItem}); - resources.ApplyResources(this.importSkinsToolStripMenuItem, "importSkinsToolStripMenuItem"); - this.importSkinsToolStripMenuItem.Name = "importSkinsToolStripMenuItem"; - // - // importSkinToolStripMenuItem - // - resources.ApplyResources(this.importSkinToolStripMenuItem, "importSkinToolStripMenuItem"); - this.importSkinToolStripMenuItem.Name = "importSkinToolStripMenuItem"; - this.importSkinToolStripMenuItem.Click += new System.EventHandler(this.importSkinToolStripMenuItem_Click); - // - // importExtractedSkinsFolderToolStripMenuItem - // - resources.ApplyResources(this.importExtractedSkinsFolderToolStripMenuItem, "importExtractedSkinsFolderToolStripMenuItem"); - this.importExtractedSkinsFolderToolStripMenuItem.Name = "importExtractedSkinsFolderToolStripMenuItem"; - this.importExtractedSkinsFolderToolStripMenuItem.Click += new System.EventHandler(this.importExtractedSkinsFolder); - // - // addTextureToolStripMenuItem - // - this.addTextureToolStripMenuItem.Image = global::PckStudio.Properties.Resources.AddTexture; - this.addTextureToolStripMenuItem.Name = "addTextureToolStripMenuItem"; - resources.ApplyResources(this.addTextureToolStripMenuItem, "addTextureToolStripMenuItem"); - this.addTextureToolStripMenuItem.Click += new System.EventHandler(this.addTextureToolStripMenuItem_Click); - // - // addFileToolStripMenuItem - // - this.addFileToolStripMenuItem.Image = global::PckStudio.Properties.Resources.blank; - this.addFileToolStripMenuItem.Name = "addFileToolStripMenuItem"; - resources.ApplyResources(this.addFileToolStripMenuItem, "addFileToolStripMenuItem"); - this.addFileToolStripMenuItem.Click += new System.EventHandler(this.addFileToolStripMenuItem_Click); - // - // exportToolStripMenuItem - // - this.exportToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + resources.ApplyResources(this.importSkinsToolStripMenuItem, "importSkinsToolStripMenuItem"); + this.importSkinsToolStripMenuItem.Name = "importSkinsToolStripMenuItem"; + // + // importSkinToolStripMenuItem + // + resources.ApplyResources(this.importSkinToolStripMenuItem, "importSkinToolStripMenuItem"); + this.importSkinToolStripMenuItem.Name = "importSkinToolStripMenuItem"; + this.importSkinToolStripMenuItem.Click += new System.EventHandler(this.importSkinToolStripMenuItem_Click); + // + // importExtractedSkinsFolderToolStripMenuItem + // + resources.ApplyResources(this.importExtractedSkinsFolderToolStripMenuItem, "importExtractedSkinsFolderToolStripMenuItem"); + this.importExtractedSkinsFolderToolStripMenuItem.Name = "importExtractedSkinsFolderToolStripMenuItem"; + this.importExtractedSkinsFolderToolStripMenuItem.Click += new System.EventHandler(this.importExtractedSkinsFolder); + // + // addTextureToolStripMenuItem + // + this.addTextureToolStripMenuItem.Image = global::PckStudio.Properties.Resources.AddTexture; + this.addTextureToolStripMenuItem.Name = "addTextureToolStripMenuItem"; + resources.ApplyResources(this.addTextureToolStripMenuItem, "addTextureToolStripMenuItem"); + this.addTextureToolStripMenuItem.Click += new System.EventHandler(this.addTextureToolStripMenuItem_Click); + // + // addFileToolStripMenuItem + // + this.addFileToolStripMenuItem.Image = global::PckStudio.Properties.Resources.blank; + this.addFileToolStripMenuItem.Name = "addFileToolStripMenuItem"; + resources.ApplyResources(this.addFileToolStripMenuItem, "addFileToolStripMenuItem"); + this.addFileToolStripMenuItem.Click += new System.EventHandler(this.addFileToolStripMenuItem_Click); + // + // exportToolStripMenuItem + // + this.exportToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.as3DSTextureFileToolStripMenuItem}); - this.exportToolStripMenuItem.Name = "exportToolStripMenuItem"; - resources.ApplyResources(this.exportToolStripMenuItem, "exportToolStripMenuItem"); - // - // as3DSTextureFileToolStripMenuItem - // - this.as3DSTextureFileToolStripMenuItem.Name = "as3DSTextureFileToolStripMenuItem"; - resources.ApplyResources(this.as3DSTextureFileToolStripMenuItem, "as3DSTextureFileToolStripMenuItem"); - this.as3DSTextureFileToolStripMenuItem.Click += new System.EventHandler(this.as3DSTextureFileToolStripMenuItem_Click); - // - // setFileTypeToolStripMenuItem - // - this.setFileTypeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.exportToolStripMenuItem.Name = "exportToolStripMenuItem"; + resources.ApplyResources(this.exportToolStripMenuItem, "exportToolStripMenuItem"); + // + // as3DSTextureFileToolStripMenuItem + // + this.as3DSTextureFileToolStripMenuItem.Name = "as3DSTextureFileToolStripMenuItem"; + resources.ApplyResources(this.as3DSTextureFileToolStripMenuItem, "as3DSTextureFileToolStripMenuItem"); + this.as3DSTextureFileToolStripMenuItem.Click += new System.EventHandler(this.as3DSTextureFileToolStripMenuItem_Click); + // + // setFileTypeToolStripMenuItem + // + this.setFileTypeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.skinToolStripMenuItem1, this.capeToolStripMenuItem, this.textureToolStripMenuItem, @@ -327,154 +326,154 @@ this.modelsFileBINToolStripMenuItem, this.behavioursFileBINToolStripMenuItem, this.entityMaterialsFileBINToolStripMenuItem}); - this.setFileTypeToolStripMenuItem.Name = "setFileTypeToolStripMenuItem"; - resources.ApplyResources(this.setFileTypeToolStripMenuItem, "setFileTypeToolStripMenuItem"); - // - // skinToolStripMenuItem1 - // - this.skinToolStripMenuItem1.Name = "skinToolStripMenuItem1"; - resources.ApplyResources(this.skinToolStripMenuItem1, "skinToolStripMenuItem1"); - // - // capeToolStripMenuItem - // - this.capeToolStripMenuItem.Name = "capeToolStripMenuItem"; - resources.ApplyResources(this.capeToolStripMenuItem, "capeToolStripMenuItem"); - // - // textureToolStripMenuItem - // - this.textureToolStripMenuItem.Name = "textureToolStripMenuItem"; - resources.ApplyResources(this.textureToolStripMenuItem, "textureToolStripMenuItem"); - // - // languagesFileLOCToolStripMenuItem - // - this.languagesFileLOCToolStripMenuItem.Name = "languagesFileLOCToolStripMenuItem"; - resources.ApplyResources(this.languagesFileLOCToolStripMenuItem, "languagesFileLOCToolStripMenuItem"); - // - // gameRulesFileGRFToolStripMenuItem - // - this.gameRulesFileGRFToolStripMenuItem.Name = "gameRulesFileGRFToolStripMenuItem"; - resources.ApplyResources(this.gameRulesFileGRFToolStripMenuItem, "gameRulesFileGRFToolStripMenuItem"); - // - // audioPCKFileToolStripMenuItem - // - this.audioPCKFileToolStripMenuItem.Name = "audioPCKFileToolStripMenuItem"; - resources.ApplyResources(this.audioPCKFileToolStripMenuItem, "audioPCKFileToolStripMenuItem"); - // - // coloursCOLFileToolStripMenuItem - // - this.coloursCOLFileToolStripMenuItem.Name = "coloursCOLFileToolStripMenuItem"; - resources.ApplyResources(this.coloursCOLFileToolStripMenuItem, "coloursCOLFileToolStripMenuItem"); - // - // gameRulesHeaderGRHToolStripMenuItem - // - this.gameRulesHeaderGRHToolStripMenuItem.Name = "gameRulesHeaderGRHToolStripMenuItem"; - resources.ApplyResources(this.gameRulesHeaderGRHToolStripMenuItem, "gameRulesHeaderGRHToolStripMenuItem"); - // - // skinsPCKToolStripMenuItem - // - this.skinsPCKToolStripMenuItem.Name = "skinsPCKToolStripMenuItem"; - resources.ApplyResources(this.skinsPCKToolStripMenuItem, "skinsPCKToolStripMenuItem"); - // - // modelsFileBINToolStripMenuItem - // - this.modelsFileBINToolStripMenuItem.Name = "modelsFileBINToolStripMenuItem"; - resources.ApplyResources(this.modelsFileBINToolStripMenuItem, "modelsFileBINToolStripMenuItem"); - // - // behavioursFileBINToolStripMenuItem - // - this.behavioursFileBINToolStripMenuItem.Name = "behavioursFileBINToolStripMenuItem"; - resources.ApplyResources(this.behavioursFileBINToolStripMenuItem, "behavioursFileBINToolStripMenuItem"); - // - // entityMaterialsFileBINToolStripMenuItem - // - this.entityMaterialsFileBINToolStripMenuItem.Name = "entityMaterialsFileBINToolStripMenuItem"; - resources.ApplyResources(this.entityMaterialsFileBINToolStripMenuItem, "entityMaterialsFileBINToolStripMenuItem"); - // - // miscFunctionsToolStripMenuItem - // - this.miscFunctionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.setFileTypeToolStripMenuItem.Name = "setFileTypeToolStripMenuItem"; + resources.ApplyResources(this.setFileTypeToolStripMenuItem, "setFileTypeToolStripMenuItem"); + // + // skinToolStripMenuItem1 + // + this.skinToolStripMenuItem1.Name = "skinToolStripMenuItem1"; + resources.ApplyResources(this.skinToolStripMenuItem1, "skinToolStripMenuItem1"); + // + // capeToolStripMenuItem + // + this.capeToolStripMenuItem.Name = "capeToolStripMenuItem"; + resources.ApplyResources(this.capeToolStripMenuItem, "capeToolStripMenuItem"); + // + // textureToolStripMenuItem + // + this.textureToolStripMenuItem.Name = "textureToolStripMenuItem"; + resources.ApplyResources(this.textureToolStripMenuItem, "textureToolStripMenuItem"); + // + // languagesFileLOCToolStripMenuItem + // + this.languagesFileLOCToolStripMenuItem.Name = "languagesFileLOCToolStripMenuItem"; + resources.ApplyResources(this.languagesFileLOCToolStripMenuItem, "languagesFileLOCToolStripMenuItem"); + // + // gameRulesFileGRFToolStripMenuItem + // + this.gameRulesFileGRFToolStripMenuItem.Name = "gameRulesFileGRFToolStripMenuItem"; + resources.ApplyResources(this.gameRulesFileGRFToolStripMenuItem, "gameRulesFileGRFToolStripMenuItem"); + // + // audioPCKFileToolStripMenuItem + // + this.audioPCKFileToolStripMenuItem.Name = "audioPCKFileToolStripMenuItem"; + resources.ApplyResources(this.audioPCKFileToolStripMenuItem, "audioPCKFileToolStripMenuItem"); + // + // coloursCOLFileToolStripMenuItem + // + this.coloursCOLFileToolStripMenuItem.Name = "coloursCOLFileToolStripMenuItem"; + resources.ApplyResources(this.coloursCOLFileToolStripMenuItem, "coloursCOLFileToolStripMenuItem"); + // + // gameRulesHeaderGRHToolStripMenuItem + // + this.gameRulesHeaderGRHToolStripMenuItem.Name = "gameRulesHeaderGRHToolStripMenuItem"; + resources.ApplyResources(this.gameRulesHeaderGRHToolStripMenuItem, "gameRulesHeaderGRHToolStripMenuItem"); + // + // skinsPCKToolStripMenuItem + // + this.skinsPCKToolStripMenuItem.Name = "skinsPCKToolStripMenuItem"; + resources.ApplyResources(this.skinsPCKToolStripMenuItem, "skinsPCKToolStripMenuItem"); + // + // modelsFileBINToolStripMenuItem + // + this.modelsFileBINToolStripMenuItem.Name = "modelsFileBINToolStripMenuItem"; + resources.ApplyResources(this.modelsFileBINToolStripMenuItem, "modelsFileBINToolStripMenuItem"); + // + // behavioursFileBINToolStripMenuItem + // + this.behavioursFileBINToolStripMenuItem.Name = "behavioursFileBINToolStripMenuItem"; + resources.ApplyResources(this.behavioursFileBINToolStripMenuItem, "behavioursFileBINToolStripMenuItem"); + // + // entityMaterialsFileBINToolStripMenuItem + // + this.entityMaterialsFileBINToolStripMenuItem.Name = "entityMaterialsFileBINToolStripMenuItem"; + resources.ApplyResources(this.entityMaterialsFileBINToolStripMenuItem, "entityMaterialsFileBINToolStripMenuItem"); + // + // miscFunctionsToolStripMenuItem + // + this.miscFunctionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.generateMipMapTextureToolStripMenuItem1, this.viewFileInfoToolStripMenuItem, this.correctSkinDecimalsToolStripMenuItem}); - this.miscFunctionsToolStripMenuItem.Name = "miscFunctionsToolStripMenuItem"; - resources.ApplyResources(this.miscFunctionsToolStripMenuItem, "miscFunctionsToolStripMenuItem"); - // - // generateMipMapTextureToolStripMenuItem1 - // - this.generateMipMapTextureToolStripMenuItem1.Name = "generateMipMapTextureToolStripMenuItem1"; - resources.ApplyResources(this.generateMipMapTextureToolStripMenuItem1, "generateMipMapTextureToolStripMenuItem1"); - this.generateMipMapTextureToolStripMenuItem1.Click += new System.EventHandler(this.generateMipMapTextureToolStripMenuItem_Click); - // - // viewFileInfoToolStripMenuItem - // - this.viewFileInfoToolStripMenuItem.Name = "viewFileInfoToolStripMenuItem"; - resources.ApplyResources(this.viewFileInfoToolStripMenuItem, "viewFileInfoToolStripMenuItem"); - this.viewFileInfoToolStripMenuItem.Click += new System.EventHandler(this.viewFileInfoToolStripMenuItem_Click); - // - // correctSkinDecimalsToolStripMenuItem - // - this.correctSkinDecimalsToolStripMenuItem.Name = "correctSkinDecimalsToolStripMenuItem"; - resources.ApplyResources(this.correctSkinDecimalsToolStripMenuItem, "correctSkinDecimalsToolStripMenuItem"); - this.correctSkinDecimalsToolStripMenuItem.Click += new System.EventHandler(this.correctSkinDecimalsToolStripMenuItem_Click); - // - // moveUpToolStripMenuItem - // - this.moveUpToolStripMenuItem.Name = "moveUpToolStripMenuItem"; - resources.ApplyResources(this.moveUpToolStripMenuItem, "moveUpToolStripMenuItem"); - this.moveUpToolStripMenuItem.Click += new System.EventHandler(this.moveUpToolStripMenuItem_Click); - // - // moveDownToolStripMenuItem - // - this.moveDownToolStripMenuItem.Name = "moveDownToolStripMenuItem"; - resources.ApplyResources(this.moveDownToolStripMenuItem, "moveDownToolStripMenuItem"); - this.moveDownToolStripMenuItem.Click += new System.EventHandler(this.moveDownToolStripMenuItem_Click); - // - // extractToolStripMenuItem - // - resources.ApplyResources(this.extractToolStripMenuItem, "extractToolStripMenuItem"); - this.extractToolStripMenuItem.Name = "extractToolStripMenuItem"; - this.extractToolStripMenuItem.Click += new System.EventHandler(this.extractToolStripMenuItem_Click); - // - // cloneFileToolStripMenuItem - // - this.cloneFileToolStripMenuItem.Name = "cloneFileToolStripMenuItem"; - resources.ApplyResources(this.cloneFileToolStripMenuItem, "cloneFileToolStripMenuItem"); - this.cloneFileToolStripMenuItem.Click += new System.EventHandler(this.cloneFileToolStripMenuItem_Click); - // - // renameFileToolStripMenuItem - // - resources.ApplyResources(this.renameFileToolStripMenuItem, "renameFileToolStripMenuItem"); - this.renameFileToolStripMenuItem.Name = "renameFileToolStripMenuItem"; - this.renameFileToolStripMenuItem.Click += new System.EventHandler(this.renameFileToolStripMenuItem_Click); - // - // replaceToolStripMenuItem - // - resources.ApplyResources(this.replaceToolStripMenuItem, "replaceToolStripMenuItem"); - this.replaceToolStripMenuItem.Name = "replaceToolStripMenuItem"; - this.replaceToolStripMenuItem.Click += new System.EventHandler(this.replaceToolStripMenuItem_Click); - // - // deleteFileToolStripMenuItem - // - resources.ApplyResources(this.deleteFileToolStripMenuItem, "deleteFileToolStripMenuItem"); - this.deleteFileToolStripMenuItem.Name = "deleteFileToolStripMenuItem"; - this.deleteFileToolStripMenuItem.Click += new System.EventHandler(this.deleteFileToolStripMenuItem_Click); - // - // menuStrip - // - resources.ApplyResources(this.menuStrip, "menuStrip"); - this.menuStrip.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(13)))), ((int)(((byte)(13)))), ((int)(((byte)(13))))); - this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.miscFunctionsToolStripMenuItem.Name = "miscFunctionsToolStripMenuItem"; + resources.ApplyResources(this.miscFunctionsToolStripMenuItem, "miscFunctionsToolStripMenuItem"); + // + // generateMipMapTextureToolStripMenuItem1 + // + this.generateMipMapTextureToolStripMenuItem1.Name = "generateMipMapTextureToolStripMenuItem1"; + resources.ApplyResources(this.generateMipMapTextureToolStripMenuItem1, "generateMipMapTextureToolStripMenuItem1"); + this.generateMipMapTextureToolStripMenuItem1.Click += new System.EventHandler(this.generateMipMapTextureToolStripMenuItem_Click); + // + // viewFileInfoToolStripMenuItem + // + this.viewFileInfoToolStripMenuItem.Name = "viewFileInfoToolStripMenuItem"; + resources.ApplyResources(this.viewFileInfoToolStripMenuItem, "viewFileInfoToolStripMenuItem"); + this.viewFileInfoToolStripMenuItem.Click += new System.EventHandler(this.viewFileInfoToolStripMenuItem_Click); + // + // correctSkinDecimalsToolStripMenuItem + // + this.correctSkinDecimalsToolStripMenuItem.Name = "correctSkinDecimalsToolStripMenuItem"; + resources.ApplyResources(this.correctSkinDecimalsToolStripMenuItem, "correctSkinDecimalsToolStripMenuItem"); + this.correctSkinDecimalsToolStripMenuItem.Click += new System.EventHandler(this.correctSkinDecimalsToolStripMenuItem_Click); + // + // moveUpToolStripMenuItem + // + this.moveUpToolStripMenuItem.Name = "moveUpToolStripMenuItem"; + resources.ApplyResources(this.moveUpToolStripMenuItem, "moveUpToolStripMenuItem"); + this.moveUpToolStripMenuItem.Click += new System.EventHandler(this.moveUpToolStripMenuItem_Click); + // + // moveDownToolStripMenuItem + // + this.moveDownToolStripMenuItem.Name = "moveDownToolStripMenuItem"; + resources.ApplyResources(this.moveDownToolStripMenuItem, "moveDownToolStripMenuItem"); + this.moveDownToolStripMenuItem.Click += new System.EventHandler(this.moveDownToolStripMenuItem_Click); + // + // extractToolStripMenuItem + // + resources.ApplyResources(this.extractToolStripMenuItem, "extractToolStripMenuItem"); + this.extractToolStripMenuItem.Name = "extractToolStripMenuItem"; + this.extractToolStripMenuItem.Click += new System.EventHandler(this.extractToolStripMenuItem_Click); + // + // cloneFileToolStripMenuItem + // + this.cloneFileToolStripMenuItem.Name = "cloneFileToolStripMenuItem"; + resources.ApplyResources(this.cloneFileToolStripMenuItem, "cloneFileToolStripMenuItem"); + this.cloneFileToolStripMenuItem.Click += new System.EventHandler(this.cloneFileToolStripMenuItem_Click); + // + // renameFileToolStripMenuItem + // + resources.ApplyResources(this.renameFileToolStripMenuItem, "renameFileToolStripMenuItem"); + this.renameFileToolStripMenuItem.Name = "renameFileToolStripMenuItem"; + this.renameFileToolStripMenuItem.Click += new System.EventHandler(this.renameFileToolStripMenuItem_Click); + // + // replaceToolStripMenuItem + // + resources.ApplyResources(this.replaceToolStripMenuItem, "replaceToolStripMenuItem"); + this.replaceToolStripMenuItem.Name = "replaceToolStripMenuItem"; + this.replaceToolStripMenuItem.Click += new System.EventHandler(this.replaceToolStripMenuItem_Click); + // + // deleteFileToolStripMenuItem + // + resources.ApplyResources(this.deleteFileToolStripMenuItem, "deleteFileToolStripMenuItem"); + this.deleteFileToolStripMenuItem.Name = "deleteFileToolStripMenuItem"; + this.deleteFileToolStripMenuItem.Click += new System.EventHandler(this.deleteFileToolStripMenuItem_Click); + // + // menuStrip + // + resources.ApplyResources(this.menuStrip, "menuStrip"); + this.menuStrip.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(13)))), ((int)(((byte)(13)))), ((int)(((byte)(13))))); + this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.fileToolStripMenuItem, this.editToolStripMenuItem, this.miscToolStripMenuItem, this.storeToolStripMenuItem, this.helpToolStripMenuItem}); - this.menuStrip.Name = "menuStrip"; - // - // fileToolStripMenuItem - // - this.fileToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(13)))), ((int)(((byte)(13)))), ((int)(((byte)(13))))); - this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.menuStrip.Name = "menuStrip"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(13)))), ((int)(((byte)(13)))), ((int)(((byte)(13))))); + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.newToolStripMenuItem, this.openToolStripMenuItem, this.extractToolStripMenuItem1, @@ -482,178 +481,171 @@ this.saveToolStripMenuItem1, this.saveToolStripMenuItem, this.closeToolStripMenuItem}); - this.fileToolStripMenuItem.ForeColor = System.Drawing.Color.Silver; - this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; - resources.ApplyResources(this.fileToolStripMenuItem, "fileToolStripMenuItem"); - // - // newToolStripMenuItem - // - this.newToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem.ForeColor = System.Drawing.Color.Silver; + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + resources.ApplyResources(this.fileToolStripMenuItem, "fileToolStripMenuItem"); + // + // newToolStripMenuItem + // + this.newToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.skinPackToolStripMenuItem, this.texturePackToolStripMenuItem, this.mashUpPackToolStripMenuItem}); - resources.ApplyResources(this.newToolStripMenuItem, "newToolStripMenuItem"); - this.newToolStripMenuItem.Name = "newToolStripMenuItem"; - // - // skinPackToolStripMenuItem - // - this.skinPackToolStripMenuItem.Name = "skinPackToolStripMenuItem"; - resources.ApplyResources(this.skinPackToolStripMenuItem, "skinPackToolStripMenuItem"); - this.skinPackToolStripMenuItem.Click += new System.EventHandler(this.skinPackToolStripMenuItem_Click); - // - // texturePackToolStripMenuItem - // - this.texturePackToolStripMenuItem.Name = "texturePackToolStripMenuItem"; - resources.ApplyResources(this.texturePackToolStripMenuItem, "texturePackToolStripMenuItem"); - this.texturePackToolStripMenuItem.Click += new System.EventHandler(this.texturePackToolStripMenuItem_Click); - // - // mashUpPackToolStripMenuItem - // - this.mashUpPackToolStripMenuItem.Name = "mashUpPackToolStripMenuItem"; - resources.ApplyResources(this.mashUpPackToolStripMenuItem, "mashUpPackToolStripMenuItem"); - this.mashUpPackToolStripMenuItem.Click += new System.EventHandler(this.mashUpPackToolStripMenuItem_Click); - // - // openToolStripMenuItem - // - resources.ApplyResources(this.openToolStripMenuItem, "openToolStripMenuItem"); - this.openToolStripMenuItem.Name = "openToolStripMenuItem"; - this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click); - // - // extractToolStripMenuItem1 - // - resources.ApplyResources(this.extractToolStripMenuItem1, "extractToolStripMenuItem1"); - this.extractToolStripMenuItem1.Name = "extractToolStripMenuItem1"; - this.extractToolStripMenuItem1.Click += new System.EventHandler(this.extractToolStripMenuItem1_Click); - // - // packSettingsToolStripMenuItem - // - this.packSettingsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + resources.ApplyResources(this.newToolStripMenuItem, "newToolStripMenuItem"); + this.newToolStripMenuItem.Name = "newToolStripMenuItem"; + // + // skinPackToolStripMenuItem + // + this.skinPackToolStripMenuItem.Name = "skinPackToolStripMenuItem"; + resources.ApplyResources(this.skinPackToolStripMenuItem, "skinPackToolStripMenuItem"); + this.skinPackToolStripMenuItem.Click += new System.EventHandler(this.skinPackToolStripMenuItem_Click); + // + // texturePackToolStripMenuItem + // + this.texturePackToolStripMenuItem.Name = "texturePackToolStripMenuItem"; + resources.ApplyResources(this.texturePackToolStripMenuItem, "texturePackToolStripMenuItem"); + this.texturePackToolStripMenuItem.Click += new System.EventHandler(this.texturePackToolStripMenuItem_Click); + // + // mashUpPackToolStripMenuItem + // + this.mashUpPackToolStripMenuItem.Name = "mashUpPackToolStripMenuItem"; + resources.ApplyResources(this.mashUpPackToolStripMenuItem, "mashUpPackToolStripMenuItem"); + this.mashUpPackToolStripMenuItem.Click += new System.EventHandler(this.mashUpPackToolStripMenuItem_Click); + // + // openToolStripMenuItem + // + resources.ApplyResources(this.openToolStripMenuItem, "openToolStripMenuItem"); + this.openToolStripMenuItem.Name = "openToolStripMenuItem"; + this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click); + // + // extractToolStripMenuItem1 + // + resources.ApplyResources(this.extractToolStripMenuItem1, "extractToolStripMenuItem1"); + this.extractToolStripMenuItem1.Name = "extractToolStripMenuItem1"; + this.extractToolStripMenuItem1.Click += new System.EventHandler(this.extractToolStripMenuItem1_Click); + // + // packSettingsToolStripMenuItem + // + this.packSettingsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.fullBoxSupportToolStripMenuItem}); - this.packSettingsToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ranch; - this.packSettingsToolStripMenuItem.Name = "packSettingsToolStripMenuItem"; - resources.ApplyResources(this.packSettingsToolStripMenuItem, "packSettingsToolStripMenuItem"); - // - // fullBoxSupportToolStripMenuItem - // - this.fullBoxSupportToolStripMenuItem.CheckOnClick = true; - this.fullBoxSupportToolStripMenuItem.Name = "fullBoxSupportToolStripMenuItem"; - resources.ApplyResources(this.fullBoxSupportToolStripMenuItem, "fullBoxSupportToolStripMenuItem"); - this.fullBoxSupportToolStripMenuItem.CheckedChanged += new System.EventHandler(this.fullBoxSupportToolStripMenuItem_CheckedChanged); - // - // saveToolStripMenuItem1 - // - resources.ApplyResources(this.saveToolStripMenuItem1, "saveToolStripMenuItem1"); - this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1"; - this.saveToolStripMenuItem1.Click += new System.EventHandler(this.savePCK); - // - // saveToolStripMenuItem - // - resources.ApplyResources(this.saveToolStripMenuItem, "saveToolStripMenuItem"); - this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveAsPCK); - // - // closeToolStripMenuItem - // - this.closeToolStripMenuItem.Name = "closeToolStripMenuItem"; - resources.ApplyResources(this.closeToolStripMenuItem, "closeToolStripMenuItem"); - this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click); - // - // editToolStripMenuItem - // - this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.packSettingsToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ranch; + this.packSettingsToolStripMenuItem.Name = "packSettingsToolStripMenuItem"; + resources.ApplyResources(this.packSettingsToolStripMenuItem, "packSettingsToolStripMenuItem"); + // + // fullBoxSupportToolStripMenuItem + // + this.fullBoxSupportToolStripMenuItem.CheckOnClick = true; + this.fullBoxSupportToolStripMenuItem.Name = "fullBoxSupportToolStripMenuItem"; + resources.ApplyResources(this.fullBoxSupportToolStripMenuItem, "fullBoxSupportToolStripMenuItem"); + this.fullBoxSupportToolStripMenuItem.CheckedChanged += new System.EventHandler(this.fullBoxSupportToolStripMenuItem_CheckedChanged); + // + // saveToolStripMenuItem1 + // + resources.ApplyResources(this.saveToolStripMenuItem1, "saveToolStripMenuItem1"); + this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1"; + this.saveToolStripMenuItem1.Click += new System.EventHandler(this.savePCK); + // + // saveToolStripMenuItem + // + resources.ApplyResources(this.saveToolStripMenuItem, "saveToolStripMenuItem"); + this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; + this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveAsPCK); + // + // closeToolStripMenuItem + // + this.closeToolStripMenuItem.Name = "closeToolStripMenuItem"; + resources.ApplyResources(this.closeToolStripMenuItem, "closeToolStripMenuItem"); + this.closeToolStripMenuItem.Click += new System.EventHandler(this.closeToolStripMenuItem_Click); + // + // editToolStripMenuItem + // + this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.quickChangeToolStripMenuItem, this.convertToBedrockToolStripMenuItem}); - this.editToolStripMenuItem.ForeColor = System.Drawing.Color.Silver; - this.editToolStripMenuItem.Name = "editToolStripMenuItem"; - resources.ApplyResources(this.editToolStripMenuItem, "editToolStripMenuItem"); - // - // quickChangeToolStripMenuItem - // - resources.ApplyResources(this.quickChangeToolStripMenuItem, "quickChangeToolStripMenuItem"); - this.quickChangeToolStripMenuItem.Name = "quickChangeToolStripMenuItem"; - this.quickChangeToolStripMenuItem.Click += new System.EventHandler(this.quickChangeToolStripMenuItem_Click); - // - // convertToBedrockToolStripMenuItem - // - resources.ApplyResources(this.convertToBedrockToolStripMenuItem, "convertToBedrockToolStripMenuItem"); - this.convertToBedrockToolStripMenuItem.Name = "convertToBedrockToolStripMenuItem"; - this.convertToBedrockToolStripMenuItem.Click += new System.EventHandler(this.convertToBedrockToolStripMenuItem_Click); - // - // miscToolStripMenuItem - // - this.miscToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.addCustomPackImageToolStripMenuItem, + this.editToolStripMenuItem.ForeColor = System.Drawing.Color.Silver; + this.editToolStripMenuItem.Name = "editToolStripMenuItem"; + resources.ApplyResources(this.editToolStripMenuItem, "editToolStripMenuItem"); + // + // quickChangeToolStripMenuItem + // + resources.ApplyResources(this.quickChangeToolStripMenuItem, "quickChangeToolStripMenuItem"); + this.quickChangeToolStripMenuItem.Name = "quickChangeToolStripMenuItem"; + this.quickChangeToolStripMenuItem.Click += new System.EventHandler(this.quickChangeToolStripMenuItem_Click); + // + // convertToBedrockToolStripMenuItem + // + resources.ApplyResources(this.convertToBedrockToolStripMenuItem, "convertToBedrockToolStripMenuItem"); + this.convertToBedrockToolStripMenuItem.Name = "convertToBedrockToolStripMenuItem"; + this.convertToBedrockToolStripMenuItem.Click += new System.EventHandler(this.convertToBedrockToolStripMenuItem_Click); + // + // miscToolStripMenuItem + // + this.miscToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.openPckManagerToolStripMenuItem, this.convertMusicFilesToolStripMenuItem}); - this.miscToolStripMenuItem.ForeColor = System.Drawing.Color.Silver; - this.miscToolStripMenuItem.Name = "miscToolStripMenuItem"; - resources.ApplyResources(this.miscToolStripMenuItem, "miscToolStripMenuItem"); - // - // addCustomPackImageToolStripMenuItem - // - this.addCustomPackImageToolStripMenuItem.Name = "addCustomPackImageToolStripMenuItem"; - resources.ApplyResources(this.addCustomPackImageToolStripMenuItem, "addCustomPackImageToolStripMenuItem"); - this.addCustomPackImageToolStripMenuItem.Click += new System.EventHandler(this.addCustomPackIconToolStripMenuItem_Click); - // - // openPckManagerToolStripMenuItem - // - this.openPckManagerToolStripMenuItem.Name = "openPckManagerToolStripMenuItem"; - resources.ApplyResources(this.openPckManagerToolStripMenuItem, "openPckManagerToolStripMenuItem"); - this.openPckManagerToolStripMenuItem.Click += new System.EventHandler(this.openPckManagerToolStripMenuItem_Click); - // - // convertMusicFilesToolStripMenuItem - // - this.convertMusicFilesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.miscToolStripMenuItem.ForeColor = System.Drawing.Color.Silver; + this.miscToolStripMenuItem.Name = "miscToolStripMenuItem"; + resources.ApplyResources(this.miscToolStripMenuItem, "miscToolStripMenuItem"); + // + // openPckManagerToolStripMenuItem + // + this.openPckManagerToolStripMenuItem.Name = "openPckManagerToolStripMenuItem"; + resources.ApplyResources(this.openPckManagerToolStripMenuItem, "openPckManagerToolStripMenuItem"); + this.openPckManagerToolStripMenuItem.Click += new System.EventHandler(this.openPckManagerToolStripMenuItem_Click); + // + // convertMusicFilesToolStripMenuItem + // + this.convertMusicFilesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.wavBinkaToolStripMenuItem, this.binkaWavToolStripMenuItem}); - this.convertMusicFilesToolStripMenuItem.Name = "convertMusicFilesToolStripMenuItem"; - resources.ApplyResources(this.convertMusicFilesToolStripMenuItem, "convertMusicFilesToolStripMenuItem"); - // - // wavBinkaToolStripMenuItem - // - this.wavBinkaToolStripMenuItem.Name = "wavBinkaToolStripMenuItem"; - resources.ApplyResources(this.wavBinkaToolStripMenuItem, "wavBinkaToolStripMenuItem"); - this.wavBinkaToolStripMenuItem.Click += new System.EventHandler(this.wavBinkaToolStripMenuItem_Click); - // - // binkaWavToolStripMenuItem - // - this.binkaWavToolStripMenuItem.Name = "binkaWavToolStripMenuItem"; - resources.ApplyResources(this.binkaWavToolStripMenuItem, "binkaWavToolStripMenuItem"); - this.binkaWavToolStripMenuItem.Click += new System.EventHandler(this.binkaWavToolStripMenuItem_Click); - // - // storeToolStripMenuItem - // - this.storeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.convertMusicFilesToolStripMenuItem.Name = "convertMusicFilesToolStripMenuItem"; + resources.ApplyResources(this.convertMusicFilesToolStripMenuItem, "convertMusicFilesToolStripMenuItem"); + // + // wavBinkaToolStripMenuItem + // + this.wavBinkaToolStripMenuItem.Name = "wavBinkaToolStripMenuItem"; + resources.ApplyResources(this.wavBinkaToolStripMenuItem, "wavBinkaToolStripMenuItem"); + this.wavBinkaToolStripMenuItem.Click += new System.EventHandler(this.wavBinkaToolStripMenuItem_Click); + // + // binkaWavToolStripMenuItem + // + this.binkaWavToolStripMenuItem.Name = "binkaWavToolStripMenuItem"; + resources.ApplyResources(this.binkaWavToolStripMenuItem, "binkaWavToolStripMenuItem"); + this.binkaWavToolStripMenuItem.Click += new System.EventHandler(this.binkaWavToolStripMenuItem_Click); + // + // storeToolStripMenuItem + // + this.storeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.openPckCenterToolStripMenuItem, this.joinDevelopmentDiscordToolStripMenuItem, this.trelloBoardToolStripMenuItem}); - this.storeToolStripMenuItem.ForeColor = System.Drawing.Color.Silver; - this.storeToolStripMenuItem.Image = global::PckStudio.Properties.Resources.HamburgerMenuIcon; - this.storeToolStripMenuItem.Name = "storeToolStripMenuItem"; - resources.ApplyResources(this.storeToolStripMenuItem, "storeToolStripMenuItem"); - // - // openPckCenterToolStripMenuItem - // - this.openPckCenterToolStripMenuItem.Image = global::PckStudio.Properties.Resources.pckCenterHeader; - this.openPckCenterToolStripMenuItem.Name = "openPckCenterToolStripMenuItem"; - resources.ApplyResources(this.openPckCenterToolStripMenuItem, "openPckCenterToolStripMenuItem"); - this.openPckCenterToolStripMenuItem.Click += new System.EventHandler(this.openPckCenterToolStripMenuItem_Click); - // - // joinDevelopmentDiscordToolStripMenuItem - // - resources.ApplyResources(this.joinDevelopmentDiscordToolStripMenuItem, "joinDevelopmentDiscordToolStripMenuItem"); - this.joinDevelopmentDiscordToolStripMenuItem.Name = "joinDevelopmentDiscordToolStripMenuItem"; - this.joinDevelopmentDiscordToolStripMenuItem.Click += new System.EventHandler(this.joinDevelopmentDiscordToolStripMenuItem_Click); - // - // trelloBoardToolStripMenuItem - // - this.trelloBoardToolStripMenuItem.Name = "trelloBoardToolStripMenuItem"; - resources.ApplyResources(this.trelloBoardToolStripMenuItem, "trelloBoardToolStripMenuItem"); - this.trelloBoardToolStripMenuItem.Click += new System.EventHandler(this.trelloBoardToolStripMenuItem_Click); - // - // helpToolStripMenuItem - // - this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.storeToolStripMenuItem.ForeColor = System.Drawing.Color.Silver; + this.storeToolStripMenuItem.Image = global::PckStudio.Properties.Resources.HamburgerMenuIcon; + this.storeToolStripMenuItem.Name = "storeToolStripMenuItem"; + resources.ApplyResources(this.storeToolStripMenuItem, "storeToolStripMenuItem"); + // + // openPckCenterToolStripMenuItem + // + this.openPckCenterToolStripMenuItem.Image = global::PckStudio.Properties.Resources.pckCenterHeader; + this.openPckCenterToolStripMenuItem.Name = "openPckCenterToolStripMenuItem"; + resources.ApplyResources(this.openPckCenterToolStripMenuItem, "openPckCenterToolStripMenuItem"); + this.openPckCenterToolStripMenuItem.Click += new System.EventHandler(this.openPckCenterToolStripMenuItem_Click); + // + // joinDevelopmentDiscordToolStripMenuItem + // + resources.ApplyResources(this.joinDevelopmentDiscordToolStripMenuItem, "joinDevelopmentDiscordToolStripMenuItem"); + this.joinDevelopmentDiscordToolStripMenuItem.Name = "joinDevelopmentDiscordToolStripMenuItem"; + this.joinDevelopmentDiscordToolStripMenuItem.Click += new System.EventHandler(this.joinDevelopmentDiscordToolStripMenuItem_Click); + // + // trelloBoardToolStripMenuItem + // + this.trelloBoardToolStripMenuItem.Name = "trelloBoardToolStripMenuItem"; + resources.ApplyResources(this.trelloBoardToolStripMenuItem, "trelloBoardToolStripMenuItem"); + this.trelloBoardToolStripMenuItem.Click += new System.EventHandler(this.trelloBoardToolStripMenuItem_Click); + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.checkForUpdatesToolStripMenuItem, this.aboutToolStripMenuItem, toolStripSeparator1, @@ -661,25 +653,25 @@ this.donateToolStripMenuItem, this.toolStripSeparator3, this.settingsToolStripMenuItem}); - this.helpToolStripMenuItem.ForeColor = System.Drawing.Color.Silver; - this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; - resources.ApplyResources(this.helpToolStripMenuItem, "helpToolStripMenuItem"); - // - // checkForUpdatesToolStripMenuItem - // - this.checkForUpdatesToolStripMenuItem.Name = "checkForUpdatesToolStripMenuItem"; - resources.ApplyResources(this.checkForUpdatesToolStripMenuItem, "checkForUpdatesToolStripMenuItem"); - this.checkForUpdatesToolStripMenuItem.Click += new System.EventHandler(this.checkForUpdatesToolStripMenuItem_Click); - // - // aboutToolStripMenuItem - // - resources.ApplyResources(this.aboutToolStripMenuItem, "aboutToolStripMenuItem"); - this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; - this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); - // - // videosToolStripMenuItem - // - this.videosToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.helpToolStripMenuItem.ForeColor = System.Drawing.Color.Silver; + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + resources.ApplyResources(this.helpToolStripMenuItem, "helpToolStripMenuItem"); + // + // checkForUpdatesToolStripMenuItem + // + this.checkForUpdatesToolStripMenuItem.Name = "checkForUpdatesToolStripMenuItem"; + resources.ApplyResources(this.checkForUpdatesToolStripMenuItem, "checkForUpdatesToolStripMenuItem"); + this.checkForUpdatesToolStripMenuItem.Click += new System.EventHandler(this.checkForUpdatesToolStripMenuItem_Click); + // + // aboutToolStripMenuItem + // + resources.ApplyResources(this.aboutToolStripMenuItem, "aboutToolStripMenuItem"); + this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); + // + // videosToolStripMenuItem + // + this.videosToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.howToMakeABasicSkinPackToolStripMenuItem, this.howToMakeACustomSkinModelToolStripMenuItem, this.howToMakeCustomSkinModelsbedrockToolStripMenuItem, @@ -687,460 +679,460 @@ this.howToInstallPcksDirectlyToWiiUToolStripMenuItem, this.pckCenterReleaseToolStripMenuItem, this.howPCKsWorkToolStripMenuItem}); - this.videosToolStripMenuItem.ForeColor = System.Drawing.Color.Black; - resources.ApplyResources(this.videosToolStripMenuItem, "videosToolStripMenuItem"); - this.videosToolStripMenuItem.Name = "videosToolStripMenuItem"; - // - // howToMakeABasicSkinPackToolStripMenuItem - // - this.howToMakeABasicSkinPackToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; - this.howToMakeABasicSkinPackToolStripMenuItem.Name = "howToMakeABasicSkinPackToolStripMenuItem"; - resources.ApplyResources(this.howToMakeABasicSkinPackToolStripMenuItem, "howToMakeABasicSkinPackToolStripMenuItem"); - this.howToMakeABasicSkinPackToolStripMenuItem.Click += new System.EventHandler(this.howToMakeABasicSkinPackToolStripMenuItem_Click); - // - // howToMakeACustomSkinModelToolStripMenuItem - // - this.howToMakeACustomSkinModelToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; - this.howToMakeACustomSkinModelToolStripMenuItem.Name = "howToMakeACustomSkinModelToolStripMenuItem"; - resources.ApplyResources(this.howToMakeACustomSkinModelToolStripMenuItem, "howToMakeACustomSkinModelToolStripMenuItem"); - this.howToMakeACustomSkinModelToolStripMenuItem.Click += new System.EventHandler(this.howToMakeACustomSkinModelToolStripMenuItem_Click); - // - // howToMakeCustomSkinModelsbedrockToolStripMenuItem - // - this.howToMakeCustomSkinModelsbedrockToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; - this.howToMakeCustomSkinModelsbedrockToolStripMenuItem.Name = "howToMakeCustomSkinModelsbedrockToolStripMenuItem"; - resources.ApplyResources(this.howToMakeCustomSkinModelsbedrockToolStripMenuItem, "howToMakeCustomSkinModelsbedrockToolStripMenuItem"); - this.howToMakeCustomSkinModelsbedrockToolStripMenuItem.Click += new System.EventHandler(this.howToMakeCustomSkinModelsbedrockToolStripMenuItem_Click); - // - // howToMakeCustomMusicToolStripMenuItem - // - this.howToMakeCustomMusicToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; - this.howToMakeCustomMusicToolStripMenuItem.Name = "howToMakeCustomMusicToolStripMenuItem"; - resources.ApplyResources(this.howToMakeCustomMusicToolStripMenuItem, "howToMakeCustomMusicToolStripMenuItem"); - this.howToMakeCustomMusicToolStripMenuItem.Click += new System.EventHandler(this.howToMakeCustomMusicToolStripMenuItem_Click); - // - // howToInstallPcksDirectlyToWiiUToolStripMenuItem - // - this.howToInstallPcksDirectlyToWiiUToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; - this.howToInstallPcksDirectlyToWiiUToolStripMenuItem.Name = "howToInstallPcksDirectlyToWiiUToolStripMenuItem"; - resources.ApplyResources(this.howToInstallPcksDirectlyToWiiUToolStripMenuItem, "howToInstallPcksDirectlyToWiiUToolStripMenuItem"); - this.howToInstallPcksDirectlyToWiiUToolStripMenuItem.Click += new System.EventHandler(this.howToInstallPcksDirectlyToWiiUToolStripMenuItem_Click); - // - // pckCenterReleaseToolStripMenuItem - // - this.pckCenterReleaseToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; - this.pckCenterReleaseToolStripMenuItem.Name = "pckCenterReleaseToolStripMenuItem"; - resources.ApplyResources(this.pckCenterReleaseToolStripMenuItem, "pckCenterReleaseToolStripMenuItem"); - this.pckCenterReleaseToolStripMenuItem.Click += new System.EventHandler(this.pckCenterReleaseToolStripMenuItem_Click); - // - // howPCKsWorkToolStripMenuItem - // - this.howPCKsWorkToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; - this.howPCKsWorkToolStripMenuItem.Name = "howPCKsWorkToolStripMenuItem"; - resources.ApplyResources(this.howPCKsWorkToolStripMenuItem, "howPCKsWorkToolStripMenuItem"); - this.howPCKsWorkToolStripMenuItem.Click += new System.EventHandler(this.howPCKsWorkToolStripMenuItem_Click); - // - // donateToolStripMenuItem - // - this.donateToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.videosToolStripMenuItem.ForeColor = System.Drawing.Color.Black; + resources.ApplyResources(this.videosToolStripMenuItem, "videosToolStripMenuItem"); + this.videosToolStripMenuItem.Name = "videosToolStripMenuItem"; + // + // howToMakeABasicSkinPackToolStripMenuItem + // + this.howToMakeABasicSkinPackToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; + this.howToMakeABasicSkinPackToolStripMenuItem.Name = "howToMakeABasicSkinPackToolStripMenuItem"; + resources.ApplyResources(this.howToMakeABasicSkinPackToolStripMenuItem, "howToMakeABasicSkinPackToolStripMenuItem"); + this.howToMakeABasicSkinPackToolStripMenuItem.Click += new System.EventHandler(this.howToMakeABasicSkinPackToolStripMenuItem_Click); + // + // howToMakeACustomSkinModelToolStripMenuItem + // + this.howToMakeACustomSkinModelToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; + this.howToMakeACustomSkinModelToolStripMenuItem.Name = "howToMakeACustomSkinModelToolStripMenuItem"; + resources.ApplyResources(this.howToMakeACustomSkinModelToolStripMenuItem, "howToMakeACustomSkinModelToolStripMenuItem"); + this.howToMakeACustomSkinModelToolStripMenuItem.Click += new System.EventHandler(this.howToMakeACustomSkinModelToolStripMenuItem_Click); + // + // howToMakeCustomSkinModelsbedrockToolStripMenuItem + // + this.howToMakeCustomSkinModelsbedrockToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; + this.howToMakeCustomSkinModelsbedrockToolStripMenuItem.Name = "howToMakeCustomSkinModelsbedrockToolStripMenuItem"; + resources.ApplyResources(this.howToMakeCustomSkinModelsbedrockToolStripMenuItem, "howToMakeCustomSkinModelsbedrockToolStripMenuItem"); + this.howToMakeCustomSkinModelsbedrockToolStripMenuItem.Click += new System.EventHandler(this.howToMakeCustomSkinModelsbedrockToolStripMenuItem_Click); + // + // howToMakeCustomMusicToolStripMenuItem + // + this.howToMakeCustomMusicToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; + this.howToMakeCustomMusicToolStripMenuItem.Name = "howToMakeCustomMusicToolStripMenuItem"; + resources.ApplyResources(this.howToMakeCustomMusicToolStripMenuItem, "howToMakeCustomMusicToolStripMenuItem"); + this.howToMakeCustomMusicToolStripMenuItem.Click += new System.EventHandler(this.howToMakeCustomMusicToolStripMenuItem_Click); + // + // howToInstallPcksDirectlyToWiiUToolStripMenuItem + // + this.howToInstallPcksDirectlyToWiiUToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; + this.howToInstallPcksDirectlyToWiiUToolStripMenuItem.Name = "howToInstallPcksDirectlyToWiiUToolStripMenuItem"; + resources.ApplyResources(this.howToInstallPcksDirectlyToWiiUToolStripMenuItem, "howToInstallPcksDirectlyToWiiUToolStripMenuItem"); + this.howToInstallPcksDirectlyToWiiUToolStripMenuItem.Click += new System.EventHandler(this.howToInstallPcksDirectlyToWiiUToolStripMenuItem_Click); + // + // pckCenterReleaseToolStripMenuItem + // + this.pckCenterReleaseToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; + this.pckCenterReleaseToolStripMenuItem.Name = "pckCenterReleaseToolStripMenuItem"; + resources.ApplyResources(this.pckCenterReleaseToolStripMenuItem, "pckCenterReleaseToolStripMenuItem"); + this.pckCenterReleaseToolStripMenuItem.Click += new System.EventHandler(this.pckCenterReleaseToolStripMenuItem_Click); + // + // howPCKsWorkToolStripMenuItem + // + this.howPCKsWorkToolStripMenuItem.Image = global::PckStudio.Properties.Resources.Youtube; + this.howPCKsWorkToolStripMenuItem.Name = "howPCKsWorkToolStripMenuItem"; + resources.ApplyResources(this.howPCKsWorkToolStripMenuItem, "howPCKsWorkToolStripMenuItem"); + this.howPCKsWorkToolStripMenuItem.Click += new System.EventHandler(this.howPCKsWorkToolStripMenuItem_Click); + // + // donateToolStripMenuItem + // + this.donateToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toNobledezJackToolStripMenuItem, this.toPhoenixARCDeveloperToolStripMenuItem, this.forMattNLContributorToolStripMenuItem}); - this.donateToolStripMenuItem.Name = "donateToolStripMenuItem"; - resources.ApplyResources(this.donateToolStripMenuItem, "donateToolStripMenuItem"); - // - // toNobledezJackToolStripMenuItem - // - this.toNobledezJackToolStripMenuItem.Name = "toNobledezJackToolStripMenuItem"; - resources.ApplyResources(this.toNobledezJackToolStripMenuItem, "toNobledezJackToolStripMenuItem"); - this.toNobledezJackToolStripMenuItem.Click += new System.EventHandler(this.toNobledezJackToolStripMenuItem_Click); - // - // toPhoenixARCDeveloperToolStripMenuItem - // - this.toPhoenixARCDeveloperToolStripMenuItem.Name = "toPhoenixARCDeveloperToolStripMenuItem"; - resources.ApplyResources(this.toPhoenixARCDeveloperToolStripMenuItem, "toPhoenixARCDeveloperToolStripMenuItem"); - this.toPhoenixARCDeveloperToolStripMenuItem.Click += new System.EventHandler(this.toPhoenixARCDeveloperToolStripMenuItem_Click); - // - // forMattNLContributorToolStripMenuItem - // - this.forMattNLContributorToolStripMenuItem.Name = "forMattNLContributorToolStripMenuItem"; - resources.ApplyResources(this.forMattNLContributorToolStripMenuItem, "forMattNLContributorToolStripMenuItem"); - this.forMattNLContributorToolStripMenuItem.Click += new System.EventHandler(this.forMattNLContributorToolStripMenuItem_Click); - // - // settingsToolStripMenuItem - // - this.settingsToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ranch; - this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; - resources.ApplyResources(this.settingsToolStripMenuItem, "settingsToolStripMenuItem"); - this.settingsToolStripMenuItem.Click += new System.EventHandler(this.settingsToolStripMenuItem_Click); - // - // contextMenuMetaTree - // - this.contextMenuMetaTree.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.donateToolStripMenuItem.Name = "donateToolStripMenuItem"; + resources.ApplyResources(this.donateToolStripMenuItem, "donateToolStripMenuItem"); + // + // toNobledezJackToolStripMenuItem + // + this.toNobledezJackToolStripMenuItem.Name = "toNobledezJackToolStripMenuItem"; + resources.ApplyResources(this.toNobledezJackToolStripMenuItem, "toNobledezJackToolStripMenuItem"); + this.toNobledezJackToolStripMenuItem.Click += new System.EventHandler(this.toNobledezJackToolStripMenuItem_Click); + // + // toPhoenixARCDeveloperToolStripMenuItem + // + this.toPhoenixARCDeveloperToolStripMenuItem.Name = "toPhoenixARCDeveloperToolStripMenuItem"; + resources.ApplyResources(this.toPhoenixARCDeveloperToolStripMenuItem, "toPhoenixARCDeveloperToolStripMenuItem"); + this.toPhoenixARCDeveloperToolStripMenuItem.Click += new System.EventHandler(this.toPhoenixARCDeveloperToolStripMenuItem_Click); + // + // forMattNLContributorToolStripMenuItem + // + this.forMattNLContributorToolStripMenuItem.Name = "forMattNLContributorToolStripMenuItem"; + resources.ApplyResources(this.forMattNLContributorToolStripMenuItem, "forMattNLContributorToolStripMenuItem"); + this.forMattNLContributorToolStripMenuItem.Click += new System.EventHandler(this.forMattNLContributorToolStripMenuItem_Click); + // + // settingsToolStripMenuItem + // + this.settingsToolStripMenuItem.Image = global::PckStudio.Properties.Resources.ranch; + this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem"; + resources.ApplyResources(this.settingsToolStripMenuItem, "settingsToolStripMenuItem"); + this.settingsToolStripMenuItem.Click += new System.EventHandler(this.settingsToolStripMenuItem_Click); + // + // contextMenuMetaTree + // + this.contextMenuMetaTree.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.addEntryToolStripMenuItem, this.addMultipleEntriesToolStripMenuItem1, this.deleteEntryToolStripMenuItem, this.editAllEntriesToolStripMenuItem}); - this.contextMenuMetaTree.Name = "contextMenuStrip1"; - resources.ApplyResources(this.contextMenuMetaTree, "contextMenuMetaTree"); - // - // addEntryToolStripMenuItem - // - this.addEntryToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.contextMenuMetaTree.Name = "contextMenuStrip1"; + resources.ApplyResources(this.contextMenuMetaTree, "contextMenuMetaTree"); + // + // addEntryToolStripMenuItem + // + this.addEntryToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.addEntryToolStripMenuItem1, this.addBOXEntryToolStripMenuItem1, this.addANIMEntryToolStripMenuItem1}); - resources.ApplyResources(this.addEntryToolStripMenuItem, "addEntryToolStripMenuItem"); - this.addEntryToolStripMenuItem.Name = "addEntryToolStripMenuItem"; - // - // addEntryToolStripMenuItem1 - // - this.addEntryToolStripMenuItem1.Name = "addEntryToolStripMenuItem1"; - resources.ApplyResources(this.addEntryToolStripMenuItem1, "addEntryToolStripMenuItem1"); - this.addEntryToolStripMenuItem1.Click += new System.EventHandler(this.addEntryToolStripMenuItem_Click_1); - // - // addBOXEntryToolStripMenuItem1 - // - this.addBOXEntryToolStripMenuItem1.Name = "addBOXEntryToolStripMenuItem1"; - resources.ApplyResources(this.addBOXEntryToolStripMenuItem1, "addBOXEntryToolStripMenuItem1"); - this.addBOXEntryToolStripMenuItem1.Click += new System.EventHandler(this.addBOXEntryToolStripMenuItem1_Click); - // - // addANIMEntryToolStripMenuItem1 - // - this.addANIMEntryToolStripMenuItem1.Name = "addANIMEntryToolStripMenuItem1"; - resources.ApplyResources(this.addANIMEntryToolStripMenuItem1, "addANIMEntryToolStripMenuItem1"); - this.addANIMEntryToolStripMenuItem1.Click += new System.EventHandler(this.addANIMEntryToolStripMenuItem1_Click); - // - // addMultipleEntriesToolStripMenuItem1 - // - resources.ApplyResources(this.addMultipleEntriesToolStripMenuItem1, "addMultipleEntriesToolStripMenuItem1"); - this.addMultipleEntriesToolStripMenuItem1.Name = "addMultipleEntriesToolStripMenuItem1"; - this.addMultipleEntriesToolStripMenuItem1.Click += new System.EventHandler(this.addMultipleEntriesToolStripMenuItem1_Click); - // - // deleteEntryToolStripMenuItem - // - resources.ApplyResources(this.deleteEntryToolStripMenuItem, "deleteEntryToolStripMenuItem"); - this.deleteEntryToolStripMenuItem.Name = "deleteEntryToolStripMenuItem"; - this.deleteEntryToolStripMenuItem.Click += new System.EventHandler(this.deleteEntryToolStripMenuItem_Click); - // - // editAllEntriesToolStripMenuItem - // - this.editAllEntriesToolStripMenuItem.Name = "editAllEntriesToolStripMenuItem"; - resources.ApplyResources(this.editAllEntriesToolStripMenuItem, "editAllEntriesToolStripMenuItem"); - this.editAllEntriesToolStripMenuItem.Click += new System.EventHandler(this.editAllEntriesToolStripMenuItem_Click); - // - // tabControl - // - this.tabControl.Controls.Add(this.openTab); - this.tabControl.Controls.Add(this.editorTab); - resources.ApplyResources(this.tabControl, "tabControl"); - this.tabControl.Name = "tabControl"; - this.tabControl.SelectedIndex = 0; - this.tabControl.Style = MetroFramework.MetroColorStyle.Silver; - this.tabControl.TabStop = false; - this.tabControl.Theme = MetroFramework.MetroThemeStyle.Dark; - this.tabControl.UseSelectable = true; - this.tabControl.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.tabControl_Selecting); - // - // openTab - // - this.openTab.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18))))); - this.openTab.Controls.Add(this.pckOpen); - this.openTab.Controls.Add(this.label5); - this.openTab.Controls.Add(this.labelVersion); - this.openTab.Controls.Add(this.ChangelogRichTextBox); - this.openTab.ForeColor = System.Drawing.Color.Transparent; - this.openTab.HorizontalScrollbarBarColor = true; - this.openTab.HorizontalScrollbarHighlightOnWheel = false; - this.openTab.HorizontalScrollbarSize = 10; - resources.ApplyResources(this.openTab, "openTab"); - this.openTab.Name = "openTab"; - this.openTab.Style = MetroFramework.MetroColorStyle.Black; - this.openTab.Theme = MetroFramework.MetroThemeStyle.Dark; - this.openTab.UseStyleColors = true; - this.openTab.VerticalScrollbarBarColor = false; - this.openTab.VerticalScrollbarHighlightOnWheel = false; - this.openTab.VerticalScrollbarSize = 10; - // - // pckOpen - // - this.pckOpen.BackColor = System.Drawing.Color.Transparent; - resources.ApplyResources(this.pckOpen, "pckOpen"); - this.pckOpen.Name = "pckOpen"; - this.pckOpen.TabStop = false; - this.pckOpen.Click += new System.EventHandler(this.OpenPck_Click); - this.pckOpen.DragDrop += new System.Windows.Forms.DragEventHandler(this.OpenPck_DragDrop); - this.pckOpen.DragEnter += new System.Windows.Forms.DragEventHandler(this.OpenPck_DragEnter); - this.pckOpen.DragLeave += new System.EventHandler(this.OpenPck_DragLeave); - this.pckOpen.MouseEnter += new System.EventHandler(this.OpenPck_MouseEnter); - this.pckOpen.MouseLeave += new System.EventHandler(this.OpenPck_MouseLeave); - // - // label5 - // - resources.ApplyResources(this.label5, "label5"); - this.label5.BackColor = System.Drawing.Color.Transparent; - this.label5.ForeColor = System.Drawing.Color.White; - this.label5.Name = "label5"; - this.label5.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // labelVersion - // - resources.ApplyResources(this.labelVersion, "labelVersion"); - this.labelVersion.ForeColor = System.Drawing.Color.White; - this.labelVersion.Name = "labelVersion"; - this.labelVersion.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // ChangelogRichTextBox - // - this.ChangelogRichTextBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(13)))), ((int)(((byte)(13)))), ((int)(((byte)(13))))); - this.ChangelogRichTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; - resources.ApplyResources(this.ChangelogRichTextBox, "ChangelogRichTextBox"); - this.ChangelogRichTextBox.ForeColor = System.Drawing.Color.White; - this.ChangelogRichTextBox.Name = "ChangelogRichTextBox"; - this.ChangelogRichTextBox.ReadOnly = true; - // - // editorTab - // - this.editorTab.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18))))); - resources.ApplyResources(this.editorTab, "editorTab"); - this.editorTab.Controls.Add(this.pckFileLabel); - this.editorTab.Controls.Add(this.labelImageSize); - this.editorTab.Controls.Add(this.fileEntryCountLabel); - this.editorTab.Controls.Add(this.PropertiesTabControl); - this.editorTab.Controls.Add(this.label11); - this.editorTab.Controls.Add(this.treeViewMain); - this.editorTab.Controls.Add(logoPictureBox); - this.editorTab.Controls.Add(this.previewPictureBox); - this.editorTab.ForeColor = System.Drawing.Color.Transparent; - this.editorTab.HorizontalScrollbarBarColor = true; - this.editorTab.HorizontalScrollbarHighlightOnWheel = false; - this.editorTab.HorizontalScrollbarSize = 0; - this.editorTab.Name = "editorTab"; - this.editorTab.Style = MetroFramework.MetroColorStyle.White; - this.editorTab.Theme = MetroFramework.MetroThemeStyle.Dark; - this.editorTab.VerticalScrollbarBarColor = true; - this.editorTab.VerticalScrollbarHighlightOnWheel = false; - this.editorTab.VerticalScrollbarSize = 0; - // - // pckFileLabel - // - resources.ApplyResources(this.pckFileLabel, "pckFileLabel"); - this.pckFileLabel.Name = "pckFileLabel"; - this.pckFileLabel.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // labelImageSize - // - resources.ApplyResources(this.labelImageSize, "labelImageSize"); - this.labelImageSize.Name = "labelImageSize"; - this.labelImageSize.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // fileEntryCountLabel - // - resources.ApplyResources(this.fileEntryCountLabel, "fileEntryCountLabel"); - this.fileEntryCountLabel.Name = "fileEntryCountLabel"; - this.fileEntryCountLabel.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // PropertiesTabControl - // - resources.ApplyResources(this.PropertiesTabControl, "PropertiesTabControl"); - this.PropertiesTabControl.Controls.Add(this.MetaTab); - this.PropertiesTabControl.Name = "PropertiesTabControl"; - this.PropertiesTabControl.SelectedIndex = 0; - this.PropertiesTabControl.Style = MetroFramework.MetroColorStyle.Silver; - this.PropertiesTabControl.Theme = MetroFramework.MetroThemeStyle.Dark; - this.PropertiesTabControl.UseSelectable = true; - // - // MetaTab - // - this.MetaTab.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.MetaTab.Controls.Add(this.metroLabel2); - this.MetaTab.Controls.Add(this.treeMeta); - this.MetaTab.Controls.Add(this.entryTypeTextBox); - this.MetaTab.Controls.Add(this.entryDataTextBox); - this.MetaTab.Controls.Add(this.buttonEdit); - this.MetaTab.Controls.Add(this.metroLabel1); - this.MetaTab.HorizontalScrollbarBarColor = true; - this.MetaTab.HorizontalScrollbarHighlightOnWheel = false; - this.MetaTab.HorizontalScrollbarSize = 10; - resources.ApplyResources(this.MetaTab, "MetaTab"); - this.MetaTab.Name = "MetaTab"; - this.MetaTab.Theme = MetroFramework.MetroThemeStyle.Dark; - this.MetaTab.VerticalScrollbarBarColor = true; - this.MetaTab.VerticalScrollbarHighlightOnWheel = false; - this.MetaTab.VerticalScrollbarSize = 10; - // - // metroLabel2 - // - resources.ApplyResources(this.metroLabel2, "metroLabel2"); - this.metroLabel2.Name = "metroLabel2"; - this.metroLabel2.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // treeMeta - // - this.treeMeta.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(13)))), ((int)(((byte)(13)))), ((int)(((byte)(13))))); - this.treeMeta.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.treeMeta.ContextMenuStrip = this.contextMenuMetaTree; - resources.ApplyResources(this.treeMeta, "treeMeta"); - this.treeMeta.ForeColor = System.Drawing.SystemColors.Window; - this.treeMeta.Name = "treeMeta"; - this.treeMeta.PathSeparator = "/"; - this.treeMeta.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeMeta_AfterSelect); - this.treeMeta.DoubleClick += new System.EventHandler(this.treeMeta_DoubleClick); - this.treeMeta.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeMeta_KeyDown); - // - // entryTypeTextBox - // - resources.ApplyResources(this.entryTypeTextBox, "entryTypeTextBox"); - // - // - // - this.entryTypeTextBox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); - this.entryTypeTextBox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode"))); - this.entryTypeTextBox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); - this.entryTypeTextBox.CustomButton.Name = ""; - this.entryTypeTextBox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); - this.entryTypeTextBox.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; - this.entryTypeTextBox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); - this.entryTypeTextBox.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; - this.entryTypeTextBox.CustomButton.UseSelectable = true; - this.entryTypeTextBox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); - this.entryTypeTextBox.Lines = new string[0]; - this.entryTypeTextBox.MaxLength = 32767; - this.entryTypeTextBox.Name = "entryTypeTextBox"; - this.entryTypeTextBox.PasswordChar = '\0'; - this.entryTypeTextBox.ScrollBars = System.Windows.Forms.ScrollBars.None; - this.entryTypeTextBox.SelectedText = ""; - this.entryTypeTextBox.SelectionLength = 0; - this.entryTypeTextBox.SelectionStart = 0; - this.entryTypeTextBox.ShortcutsEnabled = true; - this.entryTypeTextBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.entryTypeTextBox.UseSelectable = true; - this.entryTypeTextBox.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109))))); - this.entryTypeTextBox.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel); - // - // entryDataTextBox - // - resources.ApplyResources(this.entryDataTextBox, "entryDataTextBox"); - // - // - // - this.entryDataTextBox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image1"))); - this.entryDataTextBox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode1"))); - this.entryDataTextBox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location1"))); - this.entryDataTextBox.CustomButton.Name = ""; - this.entryDataTextBox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size1"))); - this.entryDataTextBox.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; - this.entryDataTextBox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex1"))); - this.entryDataTextBox.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; - this.entryDataTextBox.CustomButton.UseSelectable = true; - this.entryDataTextBox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible1"))); - this.entryDataTextBox.Lines = new string[0]; - this.entryDataTextBox.MaxLength = 32767; - this.entryDataTextBox.Name = "entryDataTextBox"; - this.entryDataTextBox.PasswordChar = '\0'; - this.entryDataTextBox.ScrollBars = System.Windows.Forms.ScrollBars.None; - this.entryDataTextBox.SelectedText = ""; - this.entryDataTextBox.SelectionLength = 0; - this.entryDataTextBox.SelectionStart = 0; - this.entryDataTextBox.ShortcutsEnabled = true; - this.entryDataTextBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.entryDataTextBox.UseSelectable = true; - this.entryDataTextBox.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109))))); - this.entryDataTextBox.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel); - // - // buttonEdit - // - resources.ApplyResources(this.buttonEdit, "buttonEdit"); - this.buttonEdit.Name = "buttonEdit"; - this.buttonEdit.Theme = MetroFramework.MetroThemeStyle.Dark; - this.buttonEdit.UseSelectable = true; - this.buttonEdit.Click += new System.EventHandler(this.treeViewMain_DoubleClick); - // - // metroLabel1 - // - resources.ApplyResources(this.metroLabel1, "metroLabel1"); - this.metroLabel1.Name = "metroLabel1"; - this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; - // - // label11 - // - resources.ApplyResources(this.label11, "label11"); - this.label11.Name = "label11"; - // - // treeViewMain - // - this.treeViewMain.AllowDrop = true; - resources.ApplyResources(this.treeViewMain, "treeViewMain"); - this.treeViewMain.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(12)))), ((int)(((byte)(12)))), ((int)(((byte)(12))))); - this.treeViewMain.BorderStyle = System.Windows.Forms.BorderStyle.None; - this.treeViewMain.ContextMenuStrip = this.contextMenuPCKEntries; - this.treeViewMain.ForeColor = System.Drawing.Color.White; - this.treeViewMain.ImageList = this.imageList; - this.treeViewMain.LabelEdit = true; - this.treeViewMain.Name = "treeViewMain"; - this.treeViewMain.PathSeparator = "/"; - this.treeViewMain.BeforeLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.treeViewMain_BeforeLabelEdit); - this.treeViewMain.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.selectNode); - this.treeViewMain.DoubleClick += new System.EventHandler(this.treeViewMain_DoubleClick); - this.treeViewMain.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeViewMain_KeyDown); - // - // imageList - // - this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; - resources.ApplyResources(this.imageList, "imageList"); - this.imageList.TransparentColor = System.Drawing.Color.Transparent; - // - // previewPictureBox - // - resources.ApplyResources(this.previewPictureBox, "previewPictureBox"); - this.previewPictureBox.BackColor = System.Drawing.Color.Transparent; - this.previewPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; - this.previewPictureBox.Name = "previewPictureBox"; - this.previewPictureBox.TabStop = false; - // - // LittleEndianCheckBox - // - resources.ApplyResources(this.LittleEndianCheckBox, "LittleEndianCheckBox"); - this.LittleEndianCheckBox.BackColor = System.Drawing.Color.Transparent; - this.LittleEndianCheckBox.Name = "LittleEndianCheckBox"; - this.LittleEndianCheckBox.Style = MetroFramework.MetroColorStyle.White; - this.LittleEndianCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.LittleEndianCheckBox.UseSelectable = true; - // - // MainForm - // - this.ApplyImageInvert = true; - resources.ApplyResources(this, "$this"); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.LittleEndianCheckBox); - this.Controls.Add(this.menuStrip); - this.Controls.Add(this.tabControl); - this.DisplayHeader = false; - this.ForeColor = System.Drawing.Color.Silver; - this.MainMenuStrip = this.menuStrip; - this.Name = "MainForm"; - this.ShadowType = MetroFramework.Forms.MetroFormShadowType.DropShadow; - this.Style = MetroFramework.MetroColorStyle.Black; - this.Theme = MetroFramework.MetroThemeStyle.Dark; - this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); - this.Load += new System.EventHandler(this.MainForm_Load); - ((System.ComponentModel.ISupportInitialize)(logoPictureBox)).EndInit(); - this.contextMenuPCKEntries.ResumeLayout(false); - this.menuStrip.ResumeLayout(false); - this.menuStrip.PerformLayout(); - this.contextMenuMetaTree.ResumeLayout(false); - this.tabControl.ResumeLayout(false); - this.openTab.ResumeLayout(false); - this.openTab.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pckOpen)).EndInit(); - this.editorTab.ResumeLayout(false); - this.editorTab.PerformLayout(); - this.PropertiesTabControl.ResumeLayout(false); - this.MetaTab.ResumeLayout(false); - this.MetaTab.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.previewPictureBox)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); + resources.ApplyResources(this.addEntryToolStripMenuItem, "addEntryToolStripMenuItem"); + this.addEntryToolStripMenuItem.Name = "addEntryToolStripMenuItem"; + // + // addEntryToolStripMenuItem1 + // + this.addEntryToolStripMenuItem1.Name = "addEntryToolStripMenuItem1"; + resources.ApplyResources(this.addEntryToolStripMenuItem1, "addEntryToolStripMenuItem1"); + this.addEntryToolStripMenuItem1.Click += new System.EventHandler(this.addEntryToolStripMenuItem_Click_1); + // + // addBOXEntryToolStripMenuItem1 + // + this.addBOXEntryToolStripMenuItem1.Name = "addBOXEntryToolStripMenuItem1"; + resources.ApplyResources(this.addBOXEntryToolStripMenuItem1, "addBOXEntryToolStripMenuItem1"); + this.addBOXEntryToolStripMenuItem1.Click += new System.EventHandler(this.addBOXEntryToolStripMenuItem1_Click); + // + // addANIMEntryToolStripMenuItem1 + // + this.addANIMEntryToolStripMenuItem1.Name = "addANIMEntryToolStripMenuItem1"; + resources.ApplyResources(this.addANIMEntryToolStripMenuItem1, "addANIMEntryToolStripMenuItem1"); + this.addANIMEntryToolStripMenuItem1.Click += new System.EventHandler(this.addANIMEntryToolStripMenuItem1_Click); + // + // addMultipleEntriesToolStripMenuItem1 + // + resources.ApplyResources(this.addMultipleEntriesToolStripMenuItem1, "addMultipleEntriesToolStripMenuItem1"); + this.addMultipleEntriesToolStripMenuItem1.Name = "addMultipleEntriesToolStripMenuItem1"; + this.addMultipleEntriesToolStripMenuItem1.Click += new System.EventHandler(this.addMultipleEntriesToolStripMenuItem1_Click); + // + // deleteEntryToolStripMenuItem + // + resources.ApplyResources(this.deleteEntryToolStripMenuItem, "deleteEntryToolStripMenuItem"); + this.deleteEntryToolStripMenuItem.Name = "deleteEntryToolStripMenuItem"; + this.deleteEntryToolStripMenuItem.Click += new System.EventHandler(this.deleteEntryToolStripMenuItem_Click); + // + // editAllEntriesToolStripMenuItem + // + this.editAllEntriesToolStripMenuItem.Name = "editAllEntriesToolStripMenuItem"; + resources.ApplyResources(this.editAllEntriesToolStripMenuItem, "editAllEntriesToolStripMenuItem"); + this.editAllEntriesToolStripMenuItem.Click += new System.EventHandler(this.editAllEntriesToolStripMenuItem_Click); + // + // tabControl + // + this.tabControl.Controls.Add(this.openTab); + this.tabControl.Controls.Add(this.editorTab); + resources.ApplyResources(this.tabControl, "tabControl"); + this.tabControl.Name = "tabControl"; + this.tabControl.SelectedIndex = 0; + this.tabControl.Style = MetroFramework.MetroColorStyle.Silver; + this.tabControl.TabStop = false; + this.tabControl.Theme = MetroFramework.MetroThemeStyle.Dark; + this.tabControl.UseSelectable = true; + this.tabControl.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.tabControl_Selecting); + // + // openTab + // + this.openTab.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18))))); + this.openTab.Controls.Add(this.pckOpen); + this.openTab.Controls.Add(this.label5); + this.openTab.Controls.Add(this.labelVersion); + this.openTab.Controls.Add(this.ChangelogRichTextBox); + this.openTab.ForeColor = System.Drawing.Color.Transparent; + this.openTab.HorizontalScrollbarBarColor = true; + this.openTab.HorizontalScrollbarHighlightOnWheel = false; + this.openTab.HorizontalScrollbarSize = 10; + resources.ApplyResources(this.openTab, "openTab"); + this.openTab.Name = "openTab"; + this.openTab.Style = MetroFramework.MetroColorStyle.Black; + this.openTab.Theme = MetroFramework.MetroThemeStyle.Dark; + this.openTab.UseStyleColors = true; + this.openTab.VerticalScrollbarBarColor = false; + this.openTab.VerticalScrollbarHighlightOnWheel = false; + this.openTab.VerticalScrollbarSize = 10; + // + // pckOpen + // + this.pckOpen.BackColor = System.Drawing.Color.Transparent; + resources.ApplyResources(this.pckOpen, "pckOpen"); + this.pckOpen.Name = "pckOpen"; + this.pckOpen.TabStop = false; + this.pckOpen.Click += new System.EventHandler(this.OpenPck_Click); + this.pckOpen.DragDrop += new System.Windows.Forms.DragEventHandler(this.OpenPck_DragDrop); + this.pckOpen.DragEnter += new System.Windows.Forms.DragEventHandler(this.OpenPck_DragEnter); + this.pckOpen.DragLeave += new System.EventHandler(this.OpenPck_DragLeave); + this.pckOpen.MouseEnter += new System.EventHandler(this.OpenPck_MouseEnter); + this.pckOpen.MouseLeave += new System.EventHandler(this.OpenPck_MouseLeave); + // + // label5 + // + resources.ApplyResources(this.label5, "label5"); + this.label5.BackColor = System.Drawing.Color.Transparent; + this.label5.ForeColor = System.Drawing.Color.White; + this.label5.Name = "label5"; + this.label5.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // labelVersion + // + resources.ApplyResources(this.labelVersion, "labelVersion"); + this.labelVersion.ForeColor = System.Drawing.Color.White; + this.labelVersion.Name = "labelVersion"; + this.labelVersion.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // ChangelogRichTextBox + // + this.ChangelogRichTextBox.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(13)))), ((int)(((byte)(13)))), ((int)(((byte)(13))))); + this.ChangelogRichTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None; + resources.ApplyResources(this.ChangelogRichTextBox, "ChangelogRichTextBox"); + this.ChangelogRichTextBox.ForeColor = System.Drawing.Color.White; + this.ChangelogRichTextBox.Name = "ChangelogRichTextBox"; + this.ChangelogRichTextBox.ReadOnly = true; + // + // editorTab + // + this.editorTab.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18))))); + resources.ApplyResources(this.editorTab, "editorTab"); + this.editorTab.Controls.Add(this.pckFileLabel); + this.editorTab.Controls.Add(this.labelImageSize); + this.editorTab.Controls.Add(this.fileEntryCountLabel); + this.editorTab.Controls.Add(this.PropertiesTabControl); + this.editorTab.Controls.Add(this.label11); + this.editorTab.Controls.Add(this.treeViewMain); + this.editorTab.Controls.Add(logoPictureBox); + this.editorTab.Controls.Add(this.previewPictureBox); + this.editorTab.ForeColor = System.Drawing.Color.Transparent; + this.editorTab.HorizontalScrollbarBarColor = true; + this.editorTab.HorizontalScrollbarHighlightOnWheel = false; + this.editorTab.HorizontalScrollbarSize = 0; + this.editorTab.Name = "editorTab"; + this.editorTab.Style = MetroFramework.MetroColorStyle.White; + this.editorTab.Theme = MetroFramework.MetroThemeStyle.Dark; + this.editorTab.VerticalScrollbarBarColor = true; + this.editorTab.VerticalScrollbarHighlightOnWheel = false; + this.editorTab.VerticalScrollbarSize = 0; + // + // pckFileLabel + // + resources.ApplyResources(this.pckFileLabel, "pckFileLabel"); + this.pckFileLabel.Name = "pckFileLabel"; + this.pckFileLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // labelImageSize + // + resources.ApplyResources(this.labelImageSize, "labelImageSize"); + this.labelImageSize.Name = "labelImageSize"; + this.labelImageSize.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // fileEntryCountLabel + // + resources.ApplyResources(this.fileEntryCountLabel, "fileEntryCountLabel"); + this.fileEntryCountLabel.Name = "fileEntryCountLabel"; + this.fileEntryCountLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // PropertiesTabControl + // + resources.ApplyResources(this.PropertiesTabControl, "PropertiesTabControl"); + this.PropertiesTabControl.Controls.Add(this.MetaTab); + this.PropertiesTabControl.Name = "PropertiesTabControl"; + this.PropertiesTabControl.SelectedIndex = 0; + this.PropertiesTabControl.Style = MetroFramework.MetroColorStyle.Silver; + this.PropertiesTabControl.Theme = MetroFramework.MetroThemeStyle.Dark; + this.PropertiesTabControl.UseSelectable = true; + // + // MetaTab + // + this.MetaTab.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.MetaTab.Controls.Add(this.metroLabel2); + this.MetaTab.Controls.Add(this.treeMeta); + this.MetaTab.Controls.Add(this.entryTypeTextBox); + this.MetaTab.Controls.Add(this.entryDataTextBox); + this.MetaTab.Controls.Add(this.buttonEdit); + this.MetaTab.Controls.Add(this.metroLabel1); + this.MetaTab.HorizontalScrollbarBarColor = true; + this.MetaTab.HorizontalScrollbarHighlightOnWheel = false; + this.MetaTab.HorizontalScrollbarSize = 10; + resources.ApplyResources(this.MetaTab, "MetaTab"); + this.MetaTab.Name = "MetaTab"; + this.MetaTab.Theme = MetroFramework.MetroThemeStyle.Dark; + this.MetaTab.VerticalScrollbarBarColor = true; + this.MetaTab.VerticalScrollbarHighlightOnWheel = false; + this.MetaTab.VerticalScrollbarSize = 10; + // + // metroLabel2 + // + resources.ApplyResources(this.metroLabel2, "metroLabel2"); + this.metroLabel2.Name = "metroLabel2"; + this.metroLabel2.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // treeMeta + // + this.treeMeta.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(13)))), ((int)(((byte)(13)))), ((int)(((byte)(13))))); + this.treeMeta.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.treeMeta.ContextMenuStrip = this.contextMenuMetaTree; + resources.ApplyResources(this.treeMeta, "treeMeta"); + this.treeMeta.ForeColor = System.Drawing.SystemColors.Window; + this.treeMeta.Name = "treeMeta"; + this.treeMeta.PathSeparator = "/"; + this.treeMeta.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeMeta_AfterSelect); + this.treeMeta.DoubleClick += new System.EventHandler(this.treeMeta_DoubleClick); + this.treeMeta.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeMeta_KeyDown); + // + // entryTypeTextBox + // + resources.ApplyResources(this.entryTypeTextBox, "entryTypeTextBox"); + // + // + // + this.entryTypeTextBox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image"))); + this.entryTypeTextBox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode"))); + this.entryTypeTextBox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location"))); + this.entryTypeTextBox.CustomButton.Name = ""; + this.entryTypeTextBox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size"))); + this.entryTypeTextBox.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; + this.entryTypeTextBox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex"))); + this.entryTypeTextBox.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; + this.entryTypeTextBox.CustomButton.UseSelectable = true; + this.entryTypeTextBox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible"))); + this.entryTypeTextBox.Lines = new string[0]; + this.entryTypeTextBox.MaxLength = 32767; + this.entryTypeTextBox.Name = "entryTypeTextBox"; + this.entryTypeTextBox.PasswordChar = '\0'; + this.entryTypeTextBox.ScrollBars = System.Windows.Forms.ScrollBars.None; + this.entryTypeTextBox.SelectedText = ""; + this.entryTypeTextBox.SelectionLength = 0; + this.entryTypeTextBox.SelectionStart = 0; + this.entryTypeTextBox.ShortcutsEnabled = true; + this.entryTypeTextBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.entryTypeTextBox.UseSelectable = true; + this.entryTypeTextBox.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109))))); + this.entryTypeTextBox.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel); + // + // entryDataTextBox + // + resources.ApplyResources(this.entryDataTextBox, "entryDataTextBox"); + // + // + // + this.entryDataTextBox.CustomButton.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image1"))); + this.entryDataTextBox.CustomButton.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("resource.ImeMode1"))); + this.entryDataTextBox.CustomButton.Location = ((System.Drawing.Point)(resources.GetObject("resource.Location1"))); + this.entryDataTextBox.CustomButton.Name = ""; + this.entryDataTextBox.CustomButton.Size = ((System.Drawing.Size)(resources.GetObject("resource.Size1"))); + this.entryDataTextBox.CustomButton.Style = MetroFramework.MetroColorStyle.Blue; + this.entryDataTextBox.CustomButton.TabIndex = ((int)(resources.GetObject("resource.TabIndex1"))); + this.entryDataTextBox.CustomButton.Theme = MetroFramework.MetroThemeStyle.Light; + this.entryDataTextBox.CustomButton.UseSelectable = true; + this.entryDataTextBox.CustomButton.Visible = ((bool)(resources.GetObject("resource.Visible1"))); + this.entryDataTextBox.Lines = new string[0]; + this.entryDataTextBox.MaxLength = 32767; + this.entryDataTextBox.Name = "entryDataTextBox"; + this.entryDataTextBox.PasswordChar = '\0'; + this.entryDataTextBox.ScrollBars = System.Windows.Forms.ScrollBars.None; + this.entryDataTextBox.SelectedText = ""; + this.entryDataTextBox.SelectionLength = 0; + this.entryDataTextBox.SelectionStart = 0; + this.entryDataTextBox.ShortcutsEnabled = true; + this.entryDataTextBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.entryDataTextBox.UseSelectable = true; + this.entryDataTextBox.WaterMarkColor = System.Drawing.Color.FromArgb(((int)(((byte)(109)))), ((int)(((byte)(109)))), ((int)(((byte)(109))))); + this.entryDataTextBox.WaterMarkFont = new System.Drawing.Font("Segoe UI", 12F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Pixel); + // + // buttonEdit + // + resources.ApplyResources(this.buttonEdit, "buttonEdit"); + this.buttonEdit.Name = "buttonEdit"; + this.buttonEdit.Theme = MetroFramework.MetroThemeStyle.Dark; + this.buttonEdit.UseSelectable = true; + this.buttonEdit.Click += new System.EventHandler(this.treeViewMain_DoubleClick); + // + // metroLabel1 + // + resources.ApplyResources(this.metroLabel1, "metroLabel1"); + this.metroLabel1.Name = "metroLabel1"; + this.metroLabel1.Theme = MetroFramework.MetroThemeStyle.Dark; + // + // label11 + // + resources.ApplyResources(this.label11, "label11"); + this.label11.Name = "label11"; + // + // treeViewMain + // + this.treeViewMain.AllowDrop = true; + resources.ApplyResources(this.treeViewMain, "treeViewMain"); + this.treeViewMain.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(12)))), ((int)(((byte)(12)))), ((int)(((byte)(12))))); + this.treeViewMain.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.treeViewMain.ContextMenuStrip = this.contextMenuPCKEntries; + this.treeViewMain.ForeColor = System.Drawing.Color.White; + this.treeViewMain.ImageList = this.imageList; + this.treeViewMain.LabelEdit = true; + this.treeViewMain.Name = "treeViewMain"; + this.treeViewMain.PathSeparator = "/"; + this.treeViewMain.BeforeLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.treeViewMain_BeforeLabelEdit); + this.treeViewMain.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.selectNode); + this.treeViewMain.DoubleClick += new System.EventHandler(this.treeViewMain_DoubleClick); + this.treeViewMain.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeViewMain_KeyDown); + // + // imageList + // + this.imageList.ColorDepth = System.Windows.Forms.ColorDepth.Depth32Bit; + resources.ApplyResources(this.imageList, "imageList"); + this.imageList.TransparentColor = System.Drawing.Color.Transparent; + // + // previewPictureBox + // + resources.ApplyResources(this.previewPictureBox, "previewPictureBox"); + this.previewPictureBox.BackColor = System.Drawing.Color.Transparent; + this.previewPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; + this.previewPictureBox.Name = "previewPictureBox"; + this.previewPictureBox.TabStop = false; + // + // LittleEndianCheckBox + // + resources.ApplyResources(this.LittleEndianCheckBox, "LittleEndianCheckBox"); + this.LittleEndianCheckBox.BackColor = System.Drawing.Color.Transparent; + this.LittleEndianCheckBox.Name = "LittleEndianCheckBox"; + this.LittleEndianCheckBox.Style = MetroFramework.MetroColorStyle.White; + this.LittleEndianCheckBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.LittleEndianCheckBox.UseSelectable = true; + // + // MainForm + // + this.ApplyImageInvert = true; + resources.ApplyResources(this, "$this"); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.LittleEndianCheckBox); + this.Controls.Add(this.menuStrip); + this.Controls.Add(this.tabControl); + this.DisplayHeader = false; + this.ForeColor = System.Drawing.Color.Silver; + this.MainMenuStrip = this.menuStrip; + this.Name = "MainForm"; + this.ShadowType = MetroFramework.Forms.MetroFormShadowType.DropShadow; + this.Style = MetroFramework.MetroColorStyle.Black; + this.Theme = MetroFramework.MetroThemeStyle.Dark; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing); + this.Load += new System.EventHandler(this.MainForm_Load); + ((System.ComponentModel.ISupportInitialize)(logoPictureBox)).EndInit(); + this.contextMenuPCKEntries.ResumeLayout(false); + this.menuStrip.ResumeLayout(false); + this.menuStrip.PerformLayout(); + this.contextMenuMetaTree.ResumeLayout(false); + this.tabControl.ResumeLayout(false); + this.openTab.ResumeLayout(false); + this.openTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pckOpen)).EndInit(); + this.editorTab.ResumeLayout(false); + this.editorTab.PerformLayout(); + this.PropertiesTabControl.ResumeLayout(false); + this.MetaTab.ResumeLayout(false); + this.MetaTab.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.previewPictureBox)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); } @@ -1224,7 +1216,6 @@ private System.Windows.Forms.ToolStripMenuItem viewFileInfoToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem correctSkinDecimalsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem miscToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem addCustomPackImageToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem CreateSkinsPCKToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem editAllEntriesToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem addFileToolStripMenuItem; diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index dd4f1c8b..500ecfa6 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -223,7 +223,6 @@ namespace PckStudio saveToolStripMenuItem1.Enabled = true; quickChangeToolStripMenuItem.Enabled = true; convertToBedrockToolStripMenuItem.Enabled = true; - addCustomPackImageToolStripMenuItem.Enabled = true; BuildMainTreeView(); isSelectingTab = true; tabControl.SelectTab(1); @@ -251,7 +250,6 @@ namespace PckStudio closeToolStripMenuItem.Visible = false; packSettingsToolStripMenuItem.Visible = false; convertToBedrockToolStripMenuItem.Enabled = false; - addCustomPackImageToolStripMenuItem.Enabled = false; fileEntryCountLabel.Text = string.Empty; pckFileLabel.Text = string.Empty; UpdateRichPresence(); @@ -804,49 +802,49 @@ namespace PckStudio LOCFile locFile = null; TryGetLocFile(out locFile); using AddNewSkin add = new AddNewSkin(locFile); - if (add.ShowDialog() == DialogResult.OK) - { + if (add.ShowDialog() == DialogResult.OK) + { + if (currentPCK.HasFile("Skins.pck", PckFileType.SkinDataFile)) // Prioritize Skins.pck + { + TreeNode subPCK = treeViewMain.Nodes.Find("Skins.pck", false).FirstOrDefault(); + if (subPCK.Nodes.ContainsKey("Skins")) add.SkinFile.Filename = add.SkinFile.Filename.Insert(0, "Skins/"); + add.SkinFile.Filename = add.SkinFile.Filename.Insert(0, "Skins.pck/"); + TreeNode newNode = new TreeNode(Path.GetFileName(add.SkinFile.Filename)); + newNode.Tag = add.SkinFile; + SetNodeIcon(newNode, PckFileType.SkinFile); + subPCK.Nodes.Add(newNode); + RebuildSubPCK(newNode.FullPath); + } + else + { + if (treeViewMain.Nodes.ContainsKey("Skins")) add.SkinFile.Filename = add.SkinFile.Filename.Insert(0, "Skins/"); // Then Skins folder + currentPCK.AddFile(add.SkinFile); + } + if (add.HasCape) + { if (currentPCK.HasFile("Skins.pck", PckFileType.SkinDataFile)) // Prioritize Skins.pck { TreeNode subPCK = treeViewMain.Nodes.Find("Skins.pck", false).FirstOrDefault(); - if (subPCK.Nodes.ContainsKey("Skins")) add.SkinFile.Filename = add.SkinFile.Filename.Insert(0, "Skins/"); - add.SkinFile.Filename = add.SkinFile.Filename.Insert(0, "Skins.pck/"); - TreeNode newNode = new TreeNode(Path.GetFileName(add.SkinFile.Filename)); - newNode.Tag = add.SkinFile; + if (subPCK.Nodes.ContainsKey("Skins")) add.CapeFile.Filename = add.CapeFile.Filename.Insert(0, "Skins/"); + add.CapeFile.Filename = add.CapeFile.Filename.Insert(0, "Skins.pck/"); + TreeNode newNode = new TreeNode(Path.GetFileName(add.CapeFile.Filename)); + newNode.Tag = add.CapeFile; SetNodeIcon(newNode, PckFileType.SkinFile); subPCK.Nodes.Add(newNode); RebuildSubPCK(newNode.FullPath); } else { - if (treeViewMain.Nodes.ContainsKey("Skins")) add.SkinFile.Filename = add.SkinFile.Filename.Insert(0, "Skins/"); // Then Skins folder - currentPCK.AddFile(add.SkinFile); + if (treeViewMain.Nodes.ContainsKey("Skins")) add.CapeFile.Filename = add.CapeFile.Filename.Insert(0, "Skins/"); // Then Skins folder + currentPCK.AddFile(add.CapeFile); } - if (add.HasCape) - { - if (currentPCK.HasFile("Skins.pck", PckFileType.SkinDataFile)) // Prioritize Skins.pck - { - TreeNode subPCK = treeViewMain.Nodes.Find("Skins.pck", false).FirstOrDefault(); - if (subPCK.Nodes.ContainsKey("Skins")) add.CapeFile.Filename = add.CapeFile.Filename.Insert(0, "Skins/"); - add.CapeFile.Filename = add.CapeFile.Filename.Insert(0, "Skins.pck/"); - TreeNode newNode = new TreeNode(Path.GetFileName(add.CapeFile.Filename)); - newNode.Tag = add.CapeFile; - SetNodeIcon(newNode, PckFileType.SkinFile); - subPCK.Nodes.Add(newNode); - RebuildSubPCK(newNode.FullPath); - } - else - { - if (treeViewMain.Nodes.ContainsKey("Skins")) add.CapeFile.Filename = add.CapeFile.Filename.Insert(0, "Skins/"); // Then Skins folder - currentPCK.AddFile(add.CapeFile); - } - } - - TrySetLocFile(locFile); - wasModified = true; - BuildMainTreeView(); } + + TrySetLocFile(locFile); + wasModified = true; + BuildMainTreeView(); + } } private static PckFileData CreateNewAudioFile(bool isLittle) @@ -2027,91 +2025,6 @@ namespace PckStudio } } - private void addCustomPackIconToolStripMenuItem_Click(object sender, EventArgs e) - { - string packID = "0"; - - using NumericPrompt numericPrompt = new NumericPrompt(0); - numericPrompt.Minimum = 0; // TODO: put min pack ID value (keeping this 0 just to be safe) - numericPrompt.Maximum = int.MinValue; // TODO: put max pack ID value - numericPrompt.ContextLabel.Text = "Please insert the desired Pack ID"; - numericPrompt.TextLabel.Text = "Pack ID"; - - if (currentPCK is not null) - { - DialogResult prompt = MessageBox.Show(this, - "Would you like to use the current PackID? You can enter any PackID if not.", - "", - MessageBoxButtons.YesNoCancel); - - switch (prompt) - { - case DialogResult.Yes: - if (!currentPCK.TryGetFile("0", PckFileType.InfoFile, out PckFileData file) || - string.IsNullOrEmpty(file.Properties.GetPropertyValue("PACKID"))) - { - MessageBox.Show(this, - "No PackID is present in this PCK. " + - "To avoid this error, ensure that the PCK has a proper PackID property on the \"0\" Info file before trying again.", - "Operation Aborted", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - packID = file.Properties.GetPropertyValue("PACKID"); - break; - case DialogResult.No: - break; - case DialogResult.Cancel: - default: - MessageBox.Show(this, "Operation cancelled"); - return; - } - } - else if (numericPrompt.ShowDialog(this) == DialogResult.OK) packID = numericPrompt.SelectedValue.ToString(); - else - { - MessageBox.Show(this, "Operation cancelled"); - return; - } - - OpenFileDialog fileDialog = new OpenFileDialog(); - fileDialog.Filter = "Minecraft Archive|*.arc"; - if (fileDialog.ShowDialog(this) == DialogResult.OK) - { - var reader = new ARCFileReader(); - ConsoleArchive archive = reader.FromFile(fileDialog.FileName); - - fileDialog.Filter = "Pack Icon|*.png"; - if (fileDialog.ShowDialog(this) == DialogResult.OK) - { - string key = string.Format("Graphics\\PackGraphics\\{0}.png", packID); - - if (archive.Keys.Contains(key)) - { - DialogResult prompt = MessageBox.Show(this, - "This pack already has a pack icon present in the chosen file. Would you like to replace the pack icon?", - "Icon already exists", - MessageBoxButtons.YesNoCancel); - switch (prompt) - { - case DialogResult.Yes: - archive.Remove(key); // remove file so it can be injected - break; - case DialogResult.No: - case DialogResult.Cancel: - default: - Trace.WriteLine("Operation cancelled", category: nameof(addCustomPackIconToolStripMenuItem_Click)); - return; - } - } - archive.Add(key, File.ReadAllBytes(fileDialog.FileName)); - var writer = new ARCFileWriter(archive); - writer.WriteToFile(fileDialog.FileName); - MessageBox.Show($"Successfully added {key} to Archive!", "Successfully Added", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - } - } - private void CreateSkinsPCKToolStripMenuItem1_Click(object sender, EventArgs e) { if (currentPCK.TryGetFile("Skins.pck", PckFileType.SkinDataFile, out _)) diff --git a/PCK-Studio/MainForm.resx b/PCK-Studio/MainForm.resx index d50aa59a..4d0b8bf9 100644 --- a/PCK-Studio/MainForm.resx +++ b/PCK-Studio/MainForm.resx @@ -918,7 +918,7 @@ - 180, 22 + 157, 22 Create @@ -985,7 +985,7 @@ - 180, 22 + 157, 22 Import @@ -997,7 +997,7 @@ Export as 3DS Texture - 180, 22 + 157, 22 Export @@ -1075,7 +1075,7 @@ Entity Materials File (.BIN) - 180, 22 + 157, 22 Set File Type @@ -1099,19 +1099,19 @@ Correct Skin Decimals - 180, 22 + 157, 22 Misc. Functions - 180, 22 + 157, 22 Move Up - 180, 22 + 157, 22 Move Down @@ -1126,13 +1126,13 @@ - 180, 22 + 157, 22 Extract - 180, 22 + 157, 22 Clone @@ -1145,7 +1145,7 @@ - 180, 22 + 157, 22 Rename @@ -1161,7 +1161,7 @@ - 180, 22 + 157, 22 Replace @@ -1176,13 +1176,13 @@ - 180, 22 + 157, 22 Delete - 181, 290 + 158, 268 contextMenuPCKEntries @@ -1395,14 +1395,8 @@ Edit - - 195, 22 - - - Add Custom Pack Icon - - 195, 22 + 180, 22 Pck Manager @@ -1420,7 +1414,7 @@ Binka -> Wav - 195, 22 + 180, 22 Audio Converter @@ -6771,12 +6765,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - addCustomPackImageToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - openPckManagerToolStripMenuItem From 60958860ce521ed5e35fbc2a26595935b85b592e Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Wed, 13 Mar 2024 18:14:51 +0100 Subject: [PATCH 18/52] MainForm - Remove 'Convert to Bedrock' feature --- PCK-Studio/MainForm.Designer.cs | 11 +---------- PCK-Studio/MainForm.cs | 7 ------- PCK-Studio/MainForm.resx | 32 -------------------------------- 3 files changed, 1 insertion(+), 49 deletions(-) diff --git a/PCK-Studio/MainForm.Designer.cs b/PCK-Studio/MainForm.Designer.cs index d6ea4aa7..b6c7712c 100644 --- a/PCK-Studio/MainForm.Designer.cs +++ b/PCK-Studio/MainForm.Designer.cs @@ -89,7 +89,6 @@ this.closeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.quickChangeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.convertToBedrockToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.miscToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.openPckManagerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.convertMusicFilesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -560,8 +559,7 @@ // editToolStripMenuItem // this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.quickChangeToolStripMenuItem, - this.convertToBedrockToolStripMenuItem}); + this.quickChangeToolStripMenuItem}); this.editToolStripMenuItem.ForeColor = System.Drawing.Color.Silver; this.editToolStripMenuItem.Name = "editToolStripMenuItem"; resources.ApplyResources(this.editToolStripMenuItem, "editToolStripMenuItem"); @@ -572,12 +570,6 @@ this.quickChangeToolStripMenuItem.Name = "quickChangeToolStripMenuItem"; this.quickChangeToolStripMenuItem.Click += new System.EventHandler(this.quickChangeToolStripMenuItem_Click); // - // convertToBedrockToolStripMenuItem - // - resources.ApplyResources(this.convertToBedrockToolStripMenuItem, "convertToBedrockToolStripMenuItem"); - this.convertToBedrockToolStripMenuItem.Name = "convertToBedrockToolStripMenuItem"; - this.convertToBedrockToolStripMenuItem.Click += new System.EventHandler(this.convertToBedrockToolStripMenuItem_Click); - // // miscToolStripMenuItem // this.miscToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -1163,7 +1155,6 @@ private System.Windows.Forms.ToolStripMenuItem folderToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem skinToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem createAnimatedTextureToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem convertToBedrockToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem storeToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem openPckCenterToolStripMenuItem; private MetroFramework.Controls.MetroTabControl tabControl; diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 500ecfa6..48d3f2a6 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -222,7 +222,6 @@ namespace PckStudio saveToolStripMenuItem.Enabled = true; saveToolStripMenuItem1.Enabled = true; quickChangeToolStripMenuItem.Enabled = true; - convertToBedrockToolStripMenuItem.Enabled = true; BuildMainTreeView(); isSelectingTab = true; tabControl.SelectTab(1); @@ -249,7 +248,6 @@ namespace PckStudio quickChangeToolStripMenuItem.Enabled = false; closeToolStripMenuItem.Visible = false; packSettingsToolStripMenuItem.Visible = false; - convertToBedrockToolStripMenuItem.Enabled = false; fileEntryCountLabel.Text = string.Empty; pckFileLabel.Text = string.Empty; UpdateRichPresence(); @@ -1644,11 +1642,6 @@ namespace PckStudio } } - private void convertToBedrockToolStripMenuItem_Click(object sender, EventArgs e) - { - MessageBox.Show("This feature is currently being reworked.", "Currently unavailable", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - private void openPckCenterToolStripMenuItem_Click(object sender, EventArgs e) { MessageBox.Show("This feature is currently being reworked.", "Currently unavailable", MessageBoxButtons.OK, MessageBoxIcon.Information); diff --git a/PCK-Studio/MainForm.resx b/PCK-Studio/MainForm.resx index 4d0b8bf9..919787d8 100644 --- a/PCK-Studio/MainForm.resx +++ b/PCK-Studio/MainForm.resx @@ -1363,32 +1363,6 @@ Quick Change - - False - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - vAAADrwBlbxySQAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xMkMEa+wAAAJeSURBVDhPhVFp - TxNRFH1/RbGdlsQElaWzdaQgbadFtnkznWlLCm2Q2UCxTqdFFAzTRONSYheIoCjRpmoErBiKW/hi4q+q - bxpoSPzgyfnw7r3nvHvveyD92W/UQ5l9Vt6h5B1S2/Wntnr1977lHxDltVr/7FtaqTLJbc/YU+f8x0GQ - rgfmPgw9aoj390dX6uMSgWlVMvkGT7zqLR5PF34lzL3w9HZXunZNfuedr/nAw+9RnnZt/dHl1+SN2lWO - cS3sDsVxbOEgsPwTFo9Tz38nRdIRK15MvvRIlBtIFKboSoTGRMp5e4+VaEeEdoi0Y2r7kkBjyqcBjsEW - x3s4xomUWUiAkhoweLqiBRurEFLujVl/lvfkICESFyK0M0qc1xU5KxAlOSzQbtuQm+iWiHMVjd2Q++9A - b0X3C2SHSHYIpNPgGZMnRbIzLeBZrs8QmH1rEuw+iEVo1xLfl+O6nqzcvQd7MpDay6cQm2fwTBnO8sQL - xQcaFq+GLm/eGtm8OfY4N2NN+VBhbWawmhmzhQDYbDatSSafGECDgC/WFFLUrdTBanRNGUbLoDADiTVt - 5KwBJQvaaFG9Dspq0Ji4YghEWQtlJvCCHLJ1bZwa2rANJZ2VvO5FAUdEh1a6pfuXJ4a5EdTxWz6GaPL4 - fw0hkydysK+khdFUh5ZkG9o41bUBDA6HjGsd7Qo9ZR0tzR5ZcdRwietu1U8M6NKv+XjDioIM5ylqYfRB - izwRoZwmpCoqW9KDJjwzW7N5aMXLGoveEBRV1uQ9EarzKB/LQlyiXOj/JS+GmtiGU6BwXQ2sa8G/5oRp - fQPDL0EAAAAASUVORK5CYII= - - - - 192, 22 - - - Convert to Bedrock - 39, 20 @@ -6753,12 +6727,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - convertToBedrockToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - miscToolStripMenuItem From 16183baf7f93ff3d22e3f09ad29b112a47eda21e Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 15:31:03 -0400 Subject: [PATCH 19/52] Moved atlas resources --- PCK-Studio/Properties/Resources.resx | 12 +- .../Resources/atlases/additional_mapicons.png | Bin 0 -> 4599 bytes .../Resources/{ => atlases}/entities.png | Bin .../Resources/{ => atlases}/entityData.json | 0 PCK-Studio/Resources/{ => atlases}/items.png | Bin PCK-Studio/Resources/atlases/map_icons.png | Bin 0 -> 6329 bytes .../Resources/{ => atlases}/moon_phases.png | Bin .../Resources/{ => atlases}/terrain.png | Bin .../Resources/{ => atlases}/tileData.json | 156 +++++++++++++++++- 9 files changed, 161 insertions(+), 7 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/additional_mapicons.png rename PCK-Studio/Resources/{ => atlases}/entities.png (100%) rename PCK-Studio/Resources/{ => atlases}/entityData.json (100%) rename PCK-Studio/Resources/{ => atlases}/items.png (100%) create mode 100644 PCK-Studio/Resources/atlases/map_icons.png rename PCK-Studio/Resources/{ => atlases}/moon_phases.png (100%) rename PCK-Studio/Resources/{ => atlases}/terrain.png (100%) rename PCK-Studio/Resources/{ => atlases}/tileData.json (96%) diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index e4d8ab0b..ecd55109 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -173,7 +173,7 @@ ..\Resources\iconImageList\GRH ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\tileData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + ..\Resources\atlases\tileData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 ..\Resources\pckClosed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -227,7 +227,7 @@ ..\Resources\iconImageList\INFO ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\terrain.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\atlases\terrain.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\fileTemplates\tu53colours.col;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -236,7 +236,7 @@ ..\Resources\icons\clock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\items.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\atlases\items.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\..\CHANGELOG.md;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 @@ -281,10 +281,10 @@ ..\Resources\iconImageList\blank.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\entities.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\atlases\entities.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\entityData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + ..\Resources\atlases\entityData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 ..\Resources\icons\file_delete.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -329,6 +329,6 @@ ..\..\ProjectLogo.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\moon_phases.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\atlases\moon_phases.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/additional_mapicons.png b/PCK-Studio/Resources/atlases/additional_mapicons.png new file mode 100644 index 0000000000000000000000000000000000000000..11b7256ad3a96ddec53dd26fc17e0421d18e28a6 GIT binary patch literal 4599 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 literal 0 HcmV?d00001 diff --git a/PCK-Studio/Resources/moon_phases.png b/PCK-Studio/Resources/atlases/moon_phases.png similarity index 100% rename from PCK-Studio/Resources/moon_phases.png rename to PCK-Studio/Resources/atlases/moon_phases.png diff --git a/PCK-Studio/Resources/terrain.png b/PCK-Studio/Resources/atlases/terrain.png similarity index 100% rename from PCK-Studio/Resources/terrain.png rename to PCK-Studio/Resources/atlases/terrain.png diff --git a/PCK-Studio/Resources/tileData.json b/PCK-Studio/Resources/atlases/tileData.json similarity index 96% rename from PCK-Studio/Resources/tileData.json rename to PCK-Studio/Resources/atlases/tileData.json index 456dfe04..fd5a2204 100644 --- a/PCK-Studio/Resources/tileData.json +++ b/PCK-Studio/Resources/atlases/tileData.json @@ -2282,7 +2282,29 @@ }, { "internalName": "shulker_top", - "displayName": "Shulker Box (Break Particles)" + "displayName": "Shulker Box (Break Particles)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Shulker_Box_Purple", + "variants": [ + "Shulker_Box_Black", + "Shulker_Box_Blue", + "Shulker_Box_Brown", + "Shulker_Box_Cyan", + "Shulker_Box_Grey", + "Shulker_Box_Green", + "Shulker_Box_Light_Blue", + "Shulker_Box_Light_Green", + "Shulker_Box_Magenta", + "Shulker_Box_Orange", + "Shulker_Box_Pink", + "Shulker_Box_Purple", + "Shulker_Box_Red", + "Shulker_Box_Silver", + "Shulker_Box_White", + "Shulker_Box_Yellow" + ] + } }, { "internalName": "", @@ -4167,6 +4189,138 @@ { "internalName": "moon_phase_7", "displayName": "Waxing Gibbous" + } + ], + "map_icons": [ + { + "internalName": "player_1", + "displayName": "Player 1" }, + { + "internalName": "player_2", + "displayName": "Player 2" + }, + { + "internalName": "player_3", + "displayName": "Player 3" + }, + { + "internalName": "player_4", + "displayName": "Player 4" + }, + { + "internalName": "target_x", + "displayName": "Unused" + }, + { + "internalName": "target_point", + "displayName": "Unused" + }, + { + "internalName": "player_off_map", + "displayName": "Unused" + }, + { + "internalName": "frame", + "displayName": "Item Frame" + }, + { + "internalName": "player_5", + "displayName": "Player 5" + }, + { + "internalName": "player_6", + "displayName": "Player 6" + }, + { + "internalName": "player_7", + "displayName": "Player 7" + }, + { + "internalName": "player_8", + "displayName": "Player 8" + }, + { + "internalName": "structure", + "displayName": "Structure (Explorer Map)" + }, + { + "internalName": "player_off_limits", + "displayName": "Unused" + }, + { + "internalName": "mansion", + "displayName": "Woodland Mansion (Explorer Map)" + }, + { + "internalName": "monument", + "displayName": "Ocean Monument (Explorer Map)" + } + ], + "additional_map_icons": [ + { + "internalName": "player_1_off_map", + "displayName": "Player 1 (Off Map)" + }, + { + "internalName": "player_2_off_map", + "displayName": "Player 2 (Off Map)" + }, + { + "internalName": "player_3_off_map", + "displayName": "Player 3 (Off Map)" + }, + { + "internalName": "player_4_off_map", + "displayName": "Player 4 (Off Map)" + }, + { + "internalName": "treasure", + "displayName": "Buried Treasure" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "player_5_off_map", + "displayName": "Player 5 (Off Map)" + }, + { + "internalName": "player_6_off_map", + "displayName": "Player 6 (Off Map)" + }, + { + "internalName": "player_7_off_map", + "displayName": "Player 7 (Off Map)" + }, + { + "internalName": "player_8_off_map", + "displayName": "Player 8 (Off Map)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + } ] } From ceceebfe4cbba55b91e01d6355596f9662bc4764 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 16:35:49 -0400 Subject: [PATCH 20/52] Added MapIcon support to Atlas Editor --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 11 ++++- PCK-Studio/Internal/Json/Tiles.cs | 47 +++++++++++++++---- PCK-Studio/MainForm.cs | 8 ++-- PCK-Studio/PckStudio.csproj | 24 +++++----- PCK-Studio/Properties/Resources.Designer.cs | 20 ++++++++ PCK-Studio/Properties/Resources.resx | 6 +++ 6 files changed, 91 insertions(+), 25 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index b2ebaca2..2b1aedf6 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -104,7 +104,9 @@ namespace PckStudio.Forms.Editor { "terrain" => (Tiles.BlockTileInfos, "blocks"), "items" => (Tiles.ItemTileInfos, "items"), - "moon_phases" => (Tiles.MoonPhasesTileInfos, "moon_phases"), + "mapicons" => (Tiles.MapIconTileInfos, "map_icons"), + "additionalmapicons" => (Tiles.AdditionalMapIconTileInfos, "additional_map_icons"), + "moon_phases" => (Tiles.MoonPhaseTileInfos, "moon_phases"), _ => (null, null), }; originalPictureBox.Image = atlas; @@ -152,6 +154,13 @@ namespace PckStudio.Forms.Editor dataTile = _selectedTile; + if (string.IsNullOrEmpty(dataTile.Tile.InternalName)) + { + selectTilePictureBox.Image = dataTile.Texture; + tileNameLabel.Text = "Unused"; + return; + } + if (string.IsNullOrEmpty(dataTile.Tile.DisplayName)) { dataTile = _tiles.Find(t => t.Tile.InternalName == _selectedTile.Tile.InternalName); diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index 924e51bc..a7e95c9a 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -19,6 +19,10 @@ namespace PckStudio.Internal.Json public List Items { get; set; } [JsonProperty("moon_phases")] public List MoonPhases { get; set; } + [JsonProperty("map_icons")] + public List MapIcons { get; set; } + [JsonProperty("additional_map_icons")] + public List AdditionalMapIcons { get; set; } } internal static class Tiles @@ -29,7 +33,9 @@ namespace PckStudio.Internal.Json internal static List ItemTileInfos => JsonTileData.Items; internal static List BlockTileInfos => JsonTileData.Blocks; - internal static List MoonPhasesTileInfos => JsonTileData.MoonPhases; + internal static List MoonPhaseTileInfos => JsonTileData.MoonPhases; + internal static List MapIconTileInfos => JsonTileData.MapIcons; + internal static List AdditionalMapIconTileInfos => JsonTileData.AdditionalMapIcons; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_sheet.SplitHorizontal(16).ToArray(); @@ -37,8 +43,14 @@ namespace PckStudio.Internal.Json private static Image[] _blockImages; public static Image[] BlockImages => _blockImages ??= Resources.terrain_sheet.SplitHorizontal(16).ToArray(); - private static Image[] _moonPhasesImages; - public static Image[] MoonPhasesImages => _moonPhasesImages ??= Resources.moon_phases_sheet.SplitHorizontal(8).ToArray(); + private static Image[] _moonPhaseImages; + public static Image[] MoonPhaseImages => _moonPhaseImages ??= Resources.moon_phases_sheet.SplitHorizontal(4).ToArray(); + + private static Image[] _mapIconImages; + public static Image[] MapIconImages => _mapIconImages ??= Resources.map_icons_sheet.SplitHorizontal(4).ToArray(); + + private static Image[] _additionalMapIconImages; + public static Image[] AdditionalMapIconImages => _mapIconImages ??= Resources.additional_map_icons_sheet.SplitHorizontal(4).ToArray(); private static ImageList _itemImageList; public static ImageList ItemImageList @@ -70,18 +82,33 @@ namespace PckStudio.Internal.Json } } - private static ImageList _moonPhasesImageList; - public static ImageList MoonPhasesImageList + private static ImageList _moonPhaseImageList; + public static ImageList MoonPhaseImageList { get { - if (_moonPhasesImageList is null) + if (_moonPhaseImageList is null) { - _moonPhasesImageList = new ImageList(); - _moonPhasesImageList.ColorDepth = ColorDepth.Depth32Bit; - _moonPhasesImageList.Images.AddRange(MoonPhasesImages); + _moonPhaseImageList = new ImageList(); + _moonPhaseImageList.ColorDepth = ColorDepth.Depth32Bit; + _moonPhaseImageList.Images.AddRange(MoonPhaseImages); } - return _moonPhasesImageList; + return _moonPhaseImageList; + } + } + + private static ImageList _mapIconImageList; + public static ImageList MapIconImageList + { + get + { + if (_mapIconImageList is null) + { + _mapIconImageList = new ImageList(); + _mapIconImageList.ColorDepth = ColorDepth.Depth32Bit; + _mapIconImageList.Images.AddRange(MapIconImages); + } + return _mapIconImageList; } } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index ce1f4237..fc50240c 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -376,15 +376,17 @@ namespace PckStudio } bool isTerrainOrItems = file.Filename == "res/terrain.png" || file.Filename == "res/items.png"; - bool isMoon = file.Filename == "res/terrain/moon_phases.png"; + bool isMoonPhases = file.Filename == "res/terrain/moon_phases.png"; + bool isMapIcons = file.Filename == "res/misc/mapicons.png"; + bool isAdditionalMapIcons = file.Filename == "res/misc/additionalmapicons.png"; - if (isTerrainOrItems || isMoon) + if (isTerrainOrItems || isMoonPhases || isMapIcons || isAdditionalMapIcons) { var img = file.GetTexture(); var columnCount = 0; if (isTerrainOrItems) columnCount = 16; - else if (isMoon) columnCount = 4; + else if (isMoonPhases || isMapIcons || isAdditionalMapIcons) columnCount = 4; var resolution = img.Width / columnCount; var size = new Size(resolution, resolution); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 5dfbced4..3d6c6f18 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -139,6 +139,11 @@ + + True + True + Resources.resx + Component @@ -613,11 +618,6 @@ SettingsSingleFileGenerator Settings.Designer.cs - - True - True - Resources.resx - True Settings.settings @@ -628,7 +628,8 @@ - + + @@ -644,16 +645,13 @@ - - - @@ -679,7 +677,12 @@ - + + + + + + @@ -689,7 +692,6 @@ - diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index aedf0101..a3b953f4 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -70,6 +70,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap additional_map_icons_sheet { + get { + object obj = ResourceManager.GetObject("additional_map_icons_sheet", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -404,6 +414,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap map_icons_sheet { + get { + object obj = ResourceManager.GetObject("map_icons_sheet", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index ecd55109..5cfa8456 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -331,4 +331,10 @@ ..\Resources\atlases\moon_phases.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\additional_mapicons.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\atlases\map_icons.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file From 42d6d44e2ce79c97b8f73eab3d0853e08babbf16 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 18:48:06 -0400 Subject: [PATCH 21/52] Added highlight for selected tiles in Atlas Editor --- .../Editor/TextureAtlasEditor.Designer.cs | 19 +++-------- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 33 ++++++++++++++++--- 2 files changed, 34 insertions(+), 18 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index ca8a591d..0fdbfdd5 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -37,7 +37,6 @@ this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.applyColorMaskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.playAnimationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.sToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); @@ -72,8 +71,7 @@ this.menuStrip1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20))))); this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.fileToolStripMenuItem, - this.viewToolStripMenuItem, - this.sToolStripMenuItem}); + this.viewToolStripMenuItem}); this.menuStrip1.Location = new System.Drawing.Point(20, 60); this.menuStrip1.Name = "menuStrip1"; this.menuStrip1.Size = new System.Drawing.Size(590, 24); @@ -94,14 +92,14 @@ // saveToolStripMenuItem // this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); // // extractTileToolStripMenuItem // this.extractTileToolStripMenuItem.Name = "extractTileToolStripMenuItem"; - this.extractTileToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.extractTileToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.extractTileToolStripMenuItem.Text = "Extract Tile"; this.extractTileToolStripMenuItem.Click += new System.EventHandler(this.extractTileToolStripMenuItem_Click); // @@ -121,7 +119,7 @@ this.applyColorMaskToolStripMenuItem.CheckOnClick = true; this.applyColorMaskToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.applyColorMaskToolStripMenuItem.Name = "applyColorMaskToolStripMenuItem"; - this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.applyColorMaskToolStripMenuItem.Text = "Apply Color Mask"; this.applyColorMaskToolStripMenuItem.CheckedChanged += new System.EventHandler(this.applyColorMaskToolStripMenuItem_CheckedChanged); // @@ -131,16 +129,10 @@ this.playAnimationsToolStripMenuItem.CheckOnClick = true; this.playAnimationsToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.playAnimationsToolStripMenuItem.Name = "playAnimationsToolStripMenuItem"; - this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(168, 22); + this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); this.playAnimationsToolStripMenuItem.Text = "Play Animations"; this.playAnimationsToolStripMenuItem.CheckedChanged += new System.EventHandler(this.playAnimationsToolStripMenuItem_CheckedChanged); // - // sToolStripMenuItem - // - this.sToolStripMenuItem.Name = "sToolStripMenuItem"; - this.sToolStripMenuItem.Size = new System.Drawing.Size(24, 20); - this.sToolStripMenuItem.Text = "s"; - // // tableLayoutPanel1 // this.tableLayoutPanel1.AutoSize = true; @@ -340,6 +332,5 @@ private MetroFramework.Controls.MetroLabel variantLabel; private MetroFramework.Controls.MetroButton clearColorButton; private MetroFramework.Controls.MetroButton setColorButton; - private System.Windows.Forms.ToolStripMenuItem sToolStripMenuItem; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 2b1aedf6..da035dfb 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -37,13 +37,14 @@ namespace PckStudio.Forms.Editor { internal partial class TextureAtlasEditor : MetroForm { + private Image _workingTexture; public Image FinalTexture { get { if (DialogResult != DialogResult.OK) return null; - return (Image)originalPictureBox.Image.Clone(); + return _workingTexture; } } @@ -96,6 +97,9 @@ namespace PckStudio.Forms.Editor InitializeComponent(); AcquireColorTable(pckFile); + + _workingTexture = atlas; + _areaSize = areaSize; _pckFile = pckFile; _rowCount = atlas.Width / areaSize.Width; @@ -109,7 +113,9 @@ namespace PckStudio.Forms.Editor "moon_phases" => (Tiles.MoonPhaseTileInfos, "moon_phases"), _ => (null, null), }; - originalPictureBox.Image = atlas; + + originalPictureBox.Image = (Image)((Bitmap)atlas).Clone(new Rectangle(new Point(0, 0), new Size(atlas.Width - 1, atlas.Height - 1)), PixelFormat.Format32bppArgb); + var images = atlas.Split(_areaSize, _imageLayout); var tiles = images.enumerate().Select( @@ -154,6 +160,25 @@ namespace PckStudio.Forms.Editor dataTile = _selectedTile; + var graphicsConfig = new GraphicsConfig() + { + InterpolationMode = selectTilePictureBox.InterpolationMode, + PixelOffsetMode = PixelOffsetMode.HighQuality + }; + using (var g = Graphics.FromImage(originalPictureBox.Image)) + { + g.ApplyConfig(graphicsConfig); + g.Clear(Color.Transparent); + g.DrawImage(_workingTexture, new Point(0, 0)); + g.DrawRectangle( + Pens.White, + new Rectangle(_selectedTile.Area.X, _selectedTile.Area.Y, + _selectedTile.Area.Width, + _selectedTile.Area.Height)); + } + + originalPictureBox.Invalidate(); + if (string.IsNullOrEmpty(dataTile.Tile.InternalName)) { selectTilePictureBox.Image = dataTile.Texture; @@ -318,7 +343,7 @@ namespace PckStudio.Forms.Editor }; if (texture.Size != _areaSize) texture = texture.Resize(_areaSize, graphicsConfig); - using (var g = Graphics.FromImage(originalPictureBox.Image)) + using (var g = Graphics.FromImage(_workingTexture)) { g.ApplyConfig(graphicsConfig); g.Fill(_selectedTile.Area, Color.Transparent); @@ -390,7 +415,7 @@ namespace PckStudio.Forms.Editor int index = GetSelectedImageIndex( originalPictureBox.Size, - originalPictureBox.Image.Size, + _workingTexture.Size, _areaSize, e.Location, originalPictureBox.SizeMode, From 86cdc74a9d47cf0593598850e16dc4a72b2ada85 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Wed, 13 Mar 2024 18:56:50 -0400 Subject: [PATCH 22/52] Fix for SetTile not updating the texture properly --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index da035dfb..20f9029a 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -140,6 +140,28 @@ namespace PckStudio.Forms.Editor return false; } + private void updatePictureBoxDisplay() + { + var graphicsConfig = new GraphicsConfig() + { + InterpolationMode = selectTilePictureBox.InterpolationMode, + PixelOffsetMode = PixelOffsetMode.HighQuality + }; + using (var g = Graphics.FromImage(originalPictureBox.Image)) + { + g.ApplyConfig(graphicsConfig); + g.Clear(Color.Transparent); + g.DrawImage(_workingTexture, new Point(0, 0)); + g.DrawRectangle( + Pens.White, + new Rectangle(_selectedTile.Area.X, _selectedTile.Area.Y, + _selectedTile.Area.Width, + _selectedTile.Area.Height)); + } + + originalPictureBox.Invalidate(); + } + private void SetImageDisplayed(int index) { tileNameLabel.Text = string.Empty; @@ -160,24 +182,7 @@ namespace PckStudio.Forms.Editor dataTile = _selectedTile; - var graphicsConfig = new GraphicsConfig() - { - InterpolationMode = selectTilePictureBox.InterpolationMode, - PixelOffsetMode = PixelOffsetMode.HighQuality - }; - using (var g = Graphics.FromImage(originalPictureBox.Image)) - { - g.ApplyConfig(graphicsConfig); - g.Clear(Color.Transparent); - g.DrawImage(_workingTexture, new Point(0, 0)); - g.DrawRectangle( - Pens.White, - new Rectangle(_selectedTile.Area.X, _selectedTile.Area.Y, - _selectedTile.Area.Width, - _selectedTile.Area.Height)); - } - - originalPictureBox.Invalidate(); + updatePictureBoxDisplay(); if (string.IsNullOrEmpty(dataTile.Tile.InternalName)) { @@ -352,7 +357,8 @@ namespace PckStudio.Forms.Editor _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, texture); selectTilePictureBox.Image = texture; - originalPictureBox.Invalidate(); + + updatePictureBoxDisplay(); } private Color GetBlendColor() From ab8a42c1320d7d6d5ab97f441b50f040d01b09a2 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Thu, 14 Mar 2024 18:00:21 +0100 Subject: [PATCH 23/52] MainForm - Fix trying to delete non existing loc key --- PCK-Studio/MainForm.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 48d3f2a6..e3398be6 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -723,7 +723,9 @@ namespace PckStudio { if (TryGetLocFile(out LOCFile locFile)) { + if (file.Properties.HasProperty("THEMENAMEID")) locFile.RemoveLocKey(file.Properties.GetPropertyValue("THEMENAMEID")); + if (file.Properties.HasProperty("DISPLAYNAMEID")) locFile.RemoveLocKey(file.Properties.GetPropertyValue("DISPLAYNAMEID")); TrySetLocFile(locFile); } From 7b5ef21ab84eeabf2aa2506511e12b41cb44abbb Mon Sep 17 00:00:00 2001 From: MattN-L Date: Thu, 14 Mar 2024 15:20:38 -0400 Subject: [PATCH 24/52] Updated Minecraft dye colors for custom color form --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 20f9029a..ae0609e2 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -524,22 +524,22 @@ namespace PckStudio.Forms.Editor // values below are the default Minecraft dyed leather armor values for convenience colorPick.CustomColors = new int[] { - 0x262EB0, // Red - 0x1D80F9, // Orange - 0x3DD8FE, // Yellow - 0x1FC780, // Lime - 0x167C5E, // Green - 0xDAB33A, // Light Blue - 0x9C9C16, // Cyan - 0xAA443C, // Blue - 0xB83289, // Purple - 0xBD4EC7, // Magenta - 0xAA8BF3, // Pink - 0xFEFFF9, // White - 0x979D9D, // Light Gray - 0x524F47, // Gray - 0x211D1D, // Black - 0x325483 // Brown + 0xfefff9, // White + 0x1d80f9, // Orange + 0xbd4ec7, // Magenta + 0xdab33a, // Light Blue + 0x3dd8fe, // Yellow + 0x1fc780, // Lime + 0xaa8bf3, // Pink + 0x524f47, // Gray + 0x979d9d, // Light Gray + 0x9c9c16, // Cyan + 0xb83289, // Purple + 0xaa443c, // Blue + 0x325483, // Brown + 0x167c5e, // Green + 0x262eb0, // Red + 0x211d1d // Black }; if (colorPick.ShowDialog() != DialogResult.OK) return; From 627cb01bf63dc2181a17f91712f89ef2d4cf8d45 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Thu, 14 Mar 2024 16:52:07 -0400 Subject: [PATCH 25/52] Added Atlas Editor support for Experience Orbs --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 23 +++- PCK-Studio/Internal/Json/Tiles.cs | 43 ++++++- PCK-Studio/MainForm.cs | 8 +- PCK-Studio/PckStudio.csproj | 1 + PCK-Studio/Properties/Resources.Designer.cs | 10 ++ PCK-Studio/Properties/Resources.resx | 3 + .../Resources/atlases/experience_orbs.png | Bin 0 -> 583 bytes PCK-Studio/Resources/atlases/tileData.json | 121 ++++++++++++++++++ 8 files changed, 204 insertions(+), 5 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/experience_orbs.png diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index ae0609e2..21b9eb4e 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -1,4 +1,4 @@ -/* Copyright (c) 2023-present miku-666 +/* Copyright (c) 2023-present miku-666, MattNL * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. @@ -111,9 +111,11 @@ namespace PckStudio.Forms.Editor "mapicons" => (Tiles.MapIconTileInfos, "map_icons"), "additionalmapicons" => (Tiles.AdditionalMapIconTileInfos, "additional_map_icons"), "moon_phases" => (Tiles.MoonPhaseTileInfos, "moon_phases"), + "xporb" => (Tiles.ExperienceOrbTileInfos, "experience_orbs"), _ => (null, null), }; + // there's got to be a better way to get around this clone exception originalPictureBox.Image = (Image)((Bitmap)atlas).Clone(new Rectangle(new Point(0, 0), new Size(atlas.Width - 1, atlas.Height - 1)), PixelFormat.Format32bppArgb); var images = atlas.Split(_areaSize, _imageLayout); @@ -368,9 +370,12 @@ namespace PckStudio.Forms.Editor var col = FindBlendColorByKey(dataTile.Tile.ColourEntry.DefaultName); return col; } + return Color.White; } + int xp_orb_red = 0x0; + bool xp_orb_reverse = false; private Color FindBlendColorByKey(string colorKey) { if (_colourTable is not null && @@ -390,6 +395,18 @@ namespace PckStudio.Forms.Editor return waterColor.SurfaceColor; } } + + // Experience Orbs are hardcoded within a range and do not have color table entries + if (colorKey == "experience_orb") + { + if (xp_orb_red == 0) xp_orb_reverse = false; + if (xp_orb_red == 0xFF) xp_orb_reverse = true; + + xp_orb_red += xp_orb_reverse ? -0x05 : 0x05; + + return Color.FromArgb(xp_orb_red, 255, 0); + } + return Color.White; } @@ -397,6 +414,10 @@ namespace PckStudio.Forms.Editor { switch (keyData) { + case Keys.R: + // Reselects the specific tile. Can be held to for cycling through colors for XP orbs + SelectedIndex = _selectedTile.Index; + return true; case Keys.Left: SelectedIndex = _selectedTile.Index - 1; return true; diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index a7e95c9a..68691564 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -15,14 +15,21 @@ namespace PckStudio.Internal.Json { [JsonProperty("blocks")] public List Blocks { get; set; } + [JsonProperty("items")] public List Items { get; set; } + [JsonProperty("moon_phases")] public List MoonPhases { get; set; } + [JsonProperty("map_icons")] public List MapIcons { get; set; } + [JsonProperty("additional_map_icons")] public List AdditionalMapIcons { get; set; } + + [JsonProperty("experience_orbs")] + public List ExperienceOrbs { get; set; } } internal static class Tiles @@ -36,6 +43,7 @@ namespace PckStudio.Internal.Json internal static List MoonPhaseTileInfos => JsonTileData.MoonPhases; internal static List MapIconTileInfos => JsonTileData.MapIcons; internal static List AdditionalMapIconTileInfos => JsonTileData.AdditionalMapIcons; + internal static List ExperienceOrbTileInfos => JsonTileData.ExperienceOrbs; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_sheet.SplitHorizontal(16).ToArray(); @@ -50,7 +58,10 @@ namespace PckStudio.Internal.Json public static Image[] MapIconImages => _mapIconImages ??= Resources.map_icons_sheet.SplitHorizontal(4).ToArray(); private static Image[] _additionalMapIconImages; - public static Image[] AdditionalMapIconImages => _mapIconImages ??= Resources.additional_map_icons_sheet.SplitHorizontal(4).ToArray(); + public static Image[] AdditionalMapIconImages => _additionalMapIconImages ??= Resources.additional_map_icons_sheet.SplitHorizontal(4).ToArray(); + + private static Image[] _experienceOrbIconImages; + public static Image[] ExperienceOrbIconImages => _experienceOrbIconImages ??= Resources.experience_orbs_sheet.SplitHorizontal(4).ToArray(); private static ImageList _itemImageList; public static ImageList ItemImageList @@ -111,5 +122,35 @@ namespace PckStudio.Internal.Json return _mapIconImageList; } } + + private static ImageList _additionalMapIconImageList; + public static ImageList AdditionalMapIconImageList + { + get + { + if (_additionalMapIconImageList is null) + { + _additionalMapIconImageList = new ImageList(); + _additionalMapIconImageList.ColorDepth = ColorDepth.Depth32Bit; + _additionalMapIconImageList.Images.AddRange(AdditionalMapIconImages); + } + return _additionalMapIconImageList; + } + } + + private static ImageList _experienceOrbsImageList; + public static ImageList ExperienceOrbsImageList + { + get + { + if (_experienceOrbsImageList is null) + { + _experienceOrbsImageList = new ImageList(); + _experienceOrbsImageList.ColorDepth = ColorDepth.Depth32Bit; + _experienceOrbsImageList.Images.AddRange(ExperienceOrbIconImages); + } + return _experienceOrbsImageList; + } + } } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index fc50240c..9439a115 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -379,14 +379,16 @@ namespace PckStudio bool isMoonPhases = file.Filename == "res/terrain/moon_phases.png"; bool isMapIcons = file.Filename == "res/misc/mapicons.png"; bool isAdditionalMapIcons = file.Filename == "res/misc/additionalmapicons.png"; + bool isXPOrbs = file.Filename == "res/item/xporb.png"; - if (isTerrainOrItems || isMoonPhases || isMapIcons || isAdditionalMapIcons) + if (isTerrainOrItems || isMoonPhases || isMapIcons || isAdditionalMapIcons || isXPOrbs) { var img = file.GetTexture(); - var columnCount = 0; + // all of the other atlases so far use 4 + var columnCount = 4; + if (isTerrainOrItems) columnCount = 16; - else if (isMoonPhases || isMapIcons || isAdditionalMapIcons) columnCount = 4; var resolution = img.Width / columnCount; var size = new Size(resolution, resolution); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 3d6c6f18..35eeeb95 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -680,6 +680,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index a3b953f4..9a8e5b0d 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -294,6 +294,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap experience_orbs_sheet { + get { + object obj = ResourceManager.GetObject("experience_orbs_sheet", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 5cfa8456..9c8afa9a 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -337,4 +337,7 @@ ..\Resources\atlases\map_icons.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\experience_orbs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/experience_orbs.png b/PCK-Studio/Resources/atlases/experience_orbs.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2d58a36c8a49b5c5c86ae387325467fb74e82a GIT binary patch literal 583 zcmV-N0=WH&P)Px#1ZP1_K>z@;j|==^1poj57*I@9MR0I%prD|^!NLFk|Np?i|B#UXY-|7k0D?BJ z)c^nh2y{|TQ~&?}|NsC00N#VWSpWb432;bRa{vGi!vFvd!vV){sAK>D0i;PpK~z{r z-Ia@O!ypVrNhs|9|9J8f0}hP2lcri~rQ_H)30#Nt6^t|{PUB|+3BzSyU}#7eh9)et z%(5X}H-;oSCKc>Zg>+$sC`i310Oy=DF{iFpFBN*nz5y99XDa{=RzR;m3A|o!7Kpw= zbP>bbIK^7fG14vu!M&9a;=c+k-g#vH?+ct&w?^ZAG`lc4u``nAgJyO7jougboTuf@ z%6&rnMM3)2yLcIf2^%mY2^PR%YvYDoiZb>i=bHptK@+eIch05O0*|2OwQ|E-1j4Tn zUBvJ*F2Dtv{z@SD3c*E;Ze!R;o^?lFTiG9;kr%_Hg6;B-ZMeykc$2{R zga=G(V7BFy;jc5sDNois Date: Thu, 14 Mar 2024 18:54:57 -0400 Subject: [PATCH 26/52] Added Slider for XP Orb colors --- .../Editor/TextureAtlasEditor.Designer.cs | 132 ++++++++++++------ PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 27 ++-- 2 files changed, 100 insertions(+), 59 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index 0fdbfdd5..3833e018 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -33,11 +33,11 @@ this.menuStrip1 = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.extractTileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.applyColorMaskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.playAnimationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.colorSliderLabel = new MetroFramework.Controls.MetroLabel(); this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); this.replaceButton = new MetroFramework.Controls.MetroButton(); @@ -46,6 +46,8 @@ this.setColorButton = new MetroFramework.Controls.MetroButton(); this.animationButton = new MetroFramework.Controls.MetroButton(); this.clearColorButton = new MetroFramework.Controls.MetroButton(); + this.colorSlider = new MetroFramework.Controls.MetroTrackBar(); + this.metroButton1 = new MetroFramework.Controls.MetroButton(); this.menuStrip1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.originalPictureBox)).BeginInit(); @@ -58,12 +60,12 @@ | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.variantLabel.AutoSize = true; - this.variantLabel.Location = new System.Drawing.Point(3, 232); + this.variantLabel.Location = new System.Drawing.Point(3, 254); this.variantLabel.Name = "variantLabel"; - this.variantLabel.Size = new System.Drawing.Size(55, 25); + this.variantLabel.Size = new System.Drawing.Size(208, 24); this.variantLabel.TabIndex = 18; this.variantLabel.Text = "Variant:"; - this.variantLabel.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + this.variantLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.variantLabel.Theme = MetroFramework.MetroThemeStyle.Dark; // // menuStrip1 @@ -82,8 +84,7 @@ // this.fileToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20))))); this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.saveToolStripMenuItem, - this.extractTileToolStripMenuItem}); + this.saveToolStripMenuItem}); this.fileToolStripMenuItem.ForeColor = System.Drawing.SystemColors.Menu; this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); @@ -96,13 +97,6 @@ this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); // - // extractTileToolStripMenuItem - // - this.extractTileToolStripMenuItem.Name = "extractTileToolStripMenuItem"; - this.extractTileToolStripMenuItem.Size = new System.Drawing.Size(180, 22); - this.extractTileToolStripMenuItem.Text = "Extract Tile"; - this.extractTileToolStripMenuItem.Click += new System.EventHandler(this.extractTileToolStripMenuItem_Click); - // // viewToolStripMenuItem // this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -141,34 +135,52 @@ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10.43842F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 26.09603F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.46555F)); + this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.variantLabel, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.colorSliderLabel, 0, 3); this.tableLayoutPanel1.Controls.Add(this.originalPictureBox, 2, 0); this.tableLayoutPanel1.Controls.Add(this.selectTilePictureBox, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 6); + this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 7); this.tableLayoutPanel1.Controls.Add(this.tileNameLabel, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 1, 2); - this.tableLayoutPanel1.Controls.Add(this.variantLabel, 0, 2); this.tableLayoutPanel1.Controls.Add(this.setColorButton, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.animationButton, 1, 6); + this.tableLayoutPanel1.Controls.Add(this.animationButton, 1, 7); this.tableLayoutPanel1.Controls.Add(this.clearColorButton, 1, 4); + this.tableLayoutPanel1.Controls.Add(this.colorSlider, 1, 3); + this.tableLayoutPanel1.Controls.Add(this.metroButton1, 0, 6); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(20, 84); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 7; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.09524F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.09524F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.761905F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowCount = 8; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 36.3643F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 36.3643F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.543719F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.Size = new System.Drawing.Size(590, 565); this.tableLayoutPanel1.TabIndex = 17; // + // colorSliderLabel + // + this.colorSliderLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.colorSliderLabel.AutoSize = true; + this.colorSliderLabel.BackColor = System.Drawing.Color.Transparent; + this.colorSliderLabel.Location = new System.Drawing.Point(3, 246); + this.colorSliderLabel.Name = "colorSliderLabel"; + this.colorSliderLabel.Size = new System.Drawing.Size(55, 198); + this.colorSliderLabel.TabIndex = 19; + this.colorSliderLabel.Text = "Color Range:"; + this.colorSliderLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.colorSliderLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.colorSliderLabel.Visible = false; + this.colorSliderLabel.WrapToLine = true; + // // originalPictureBox // this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; @@ -176,8 +188,8 @@ this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.originalPictureBox.Location = new System.Drawing.Point(217, 3); this.originalPictureBox.Name = "originalPictureBox"; - this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 7); - this.originalPictureBox.Size = new System.Drawing.Size(370, 533); + this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 8); + this.originalPictureBox.Size = new System.Drawing.Size(370, 534); this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.originalPictureBox.TabIndex = 4; this.originalPictureBox.TabStop = false; @@ -196,7 +208,7 @@ this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); this.selectTilePictureBox.Name = "selectTilePictureBox"; - this.selectTilePictureBox.Size = new System.Drawing.Size(208, 201); + this.selectTilePictureBox.Size = new System.Drawing.Size(208, 192); this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.selectTilePictureBox.TabIndex = 0; this.selectTilePictureBox.TabStop = false; @@ -208,11 +220,11 @@ | System.Windows.Forms.AnchorStyles.Right))); this.replaceButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.replaceButton, 2); - this.replaceButton.Location = new System.Drawing.Point(3, 517); + this.replaceButton.Location = new System.Drawing.Point(3, 519); this.replaceButton.Name = "replaceButton"; - this.replaceButton.Size = new System.Drawing.Size(208, 19); + this.replaceButton.Size = new System.Drawing.Size(208, 18); this.replaceButton.TabIndex = 14; - this.replaceButton.Text = "Replace"; + this.replaceButton.Text = "Replace Tile on Atlas"; this.replaceButton.Theme = MetroFramework.MetroThemeStyle.Dark; this.replaceButton.UseSelectable = true; this.replaceButton.Click += new System.EventHandler(this.replaceButton_Click); @@ -223,23 +235,25 @@ | System.Windows.Forms.AnchorStyles.Right))); this.tileNameLabel.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); - this.tileNameLabel.Location = new System.Drawing.Point(3, 213); + this.tileNameLabel.Location = new System.Drawing.Point(3, 203); this.tileNameLabel.Name = "tileNameLabel"; - this.tileNameLabel.Size = new System.Drawing.Size(208, 19); + this.tileNameLabel.Size = new System.Drawing.Size(208, 43); this.tileNameLabel.TabIndex = 19; this.tileNameLabel.Text = "TileName"; this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.tileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.tileNameLabel.WrapToLine = true; // // variantComboBox // this.variantComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.variantComboBox, 2); this.variantComboBox.Enabled = false; this.variantComboBox.FormattingEnabled = true; this.variantComboBox.ItemHeight = 23; - this.variantComboBox.Location = new System.Drawing.Point(64, 235); + this.variantComboBox.Location = new System.Drawing.Point(3, 287); this.variantComboBox.Name = "variantComboBox"; - this.variantComboBox.Size = new System.Drawing.Size(147, 29); + this.variantComboBox.Size = new System.Drawing.Size(208, 29); this.variantComboBox.TabIndex = 17; this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; this.variantComboBox.UseSelectable = true; @@ -249,9 +263,9 @@ // this.setColorButton.Anchor = System.Windows.Forms.AnchorStyles.Left; this.tableLayoutPanel1.SetColumnSpan(this.setColorButton, 2); - this.setColorButton.Location = new System.Drawing.Point(3, 467); + this.setColorButton.Location = new System.Drawing.Point(3, 447); this.setColorButton.Name = "setColorButton"; - this.setColorButton.Size = new System.Drawing.Size(208, 19); + this.setColorButton.Size = new System.Drawing.Size(208, 18); this.setColorButton.TabIndex = 25; this.setColorButton.Text = "Set Custom Colour"; this.setColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -264,9 +278,9 @@ | System.Windows.Forms.AnchorStyles.Right))); this.animationButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); - this.animationButton.Location = new System.Drawing.Point(3, 542); + this.animationButton.Location = new System.Drawing.Point(3, 543); this.animationButton.Name = "animationButton"; - this.animationButton.Size = new System.Drawing.Size(208, 20); + this.animationButton.Size = new System.Drawing.Size(208, 19); this.animationButton.TabIndex = 16; this.animationButton.Text = "Animation"; this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -277,15 +291,41 @@ // this.clearColorButton.Anchor = System.Windows.Forms.AnchorStyles.Left; this.tableLayoutPanel1.SetColumnSpan(this.clearColorButton, 2); - this.clearColorButton.Location = new System.Drawing.Point(3, 492); + this.clearColorButton.Location = new System.Drawing.Point(3, 471); this.clearColorButton.Name = "clearColorButton"; - this.clearColorButton.Size = new System.Drawing.Size(208, 19); + this.clearColorButton.Size = new System.Drawing.Size(208, 18); this.clearColorButton.TabIndex = 24; this.clearColorButton.Text = "Clear Custom Colour"; this.clearColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; this.clearColorButton.UseSelectable = true; this.clearColorButton.Click += new System.EventHandler(this.clearColorButton_Click); // + // colorSlider + // + this.colorSlider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.colorSlider.BackColor = System.Drawing.Color.Transparent; + this.colorSlider.Location = new System.Drawing.Point(64, 249); + this.colorSlider.Maximum = 255; + this.colorSlider.Name = "colorSlider"; + this.colorSlider.Size = new System.Drawing.Size(147, 192); + this.colorSlider.TabIndex = 26; + this.colorSlider.Text = "metroTrackBar1"; + this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; + this.colorSlider.Value = 0; + this.colorSlider.Visible = false; + this.colorSlider.ValueChanged += new System.EventHandler(this.colorSlider_ValueChanged); + // + // metroButton1 + // + this.tableLayoutPanel1.SetColumnSpan(this.metroButton1, 2); + this.metroButton1.Location = new System.Drawing.Point(3, 495); + this.metroButton1.Name = "metroButton1"; + this.metroButton1.Size = new System.Drawing.Size(208, 18); + this.metroButton1.TabIndex = 27; + this.metroButton1.Text = "Extract Tile from Atlas"; + this.metroButton1.Theme = MetroFramework.MetroThemeStyle.Dark; + this.metroButton1.UseSelectable = true; + // // TextureAtlasEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -323,7 +363,6 @@ private PckStudio.ToolboxItems.InterpolationPictureBox originalPictureBox; private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem; private MetroFramework.Controls.MetroButton animationButton; - private System.Windows.Forms.ToolStripMenuItem extractTileToolStripMenuItem; private MetroFramework.Controls.MetroComboBox variantComboBox; private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem applyColorMaskToolStripMenuItem; @@ -332,5 +371,8 @@ private MetroFramework.Controls.MetroLabel variantLabel; private MetroFramework.Controls.MetroButton clearColorButton; private MetroFramework.Controls.MetroButton setColorButton; + private MetroFramework.Controls.MetroTrackBar colorSlider; + private MetroFramework.Controls.MetroLabel colorSliderLabel; + private MetroFramework.Controls.MetroButton metroButton1; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 21b9eb4e..81334a5a 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -374,10 +374,14 @@ namespace PckStudio.Forms.Editor return Color.White; } - int xp_orb_red = 0x0; - bool xp_orb_reverse = false; private Color FindBlendColorByKey(string colorKey) { + // Experience Orbs are hardcoded within a range and do not have color table entries + if (colorSliderLabel.Visible = colorSlider.Visible = colorKey == "experience_orb") + { + return Color.FromArgb(colorSlider.Value, 255, 0); + } + if (_colourTable is not null && dataTile.Tile.HasColourEntry && dataTile.Tile.ColourEntry is not null) @@ -396,17 +400,6 @@ namespace PckStudio.Forms.Editor } } - // Experience Orbs are hardcoded within a range and do not have color table entries - if (colorKey == "experience_orb") - { - if (xp_orb_red == 0) xp_orb_reverse = false; - if (xp_orb_red == 0xFF) xp_orb_reverse = true; - - xp_orb_red += xp_orb_reverse ? -0x05 : 0x05; - - return Color.FromArgb(xp_orb_red, 255, 0); - } - return Color.White; } @@ -415,7 +408,7 @@ namespace PckStudio.Forms.Editor switch (keyData) { case Keys.R: - // Reselects the specific tile. Can be held to for cycling through colors for XP orbs + // Refreshes the specific tile SelectedIndex = _selectedTile.Index; return true; case Keys.Left: @@ -579,5 +572,11 @@ namespace PckStudio.Forms.Editor clearColorButton.Enabled = false; } + + private void colorSlider_ValueChanged(object sender, EventArgs e) + { + selectTilePictureBox.BlendColor = GetBlendColor(); + selectTilePictureBox.Image = dataTile.Texture; + } } } \ No newline at end of file From ede22c5b72f89937815159409fdb60602b85d13d Mon Sep 17 00:00:00 2001 From: MattN-L Date: Thu, 14 Mar 2024 20:04:38 -0400 Subject: [PATCH 27/52] Adjusted interface design --- .../Editor/TextureAtlasEditor.Designer.cs | 300 +++++++++--------- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 3 +- 2 files changed, 154 insertions(+), 149 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index 3833e018..4476b332 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -37,17 +37,17 @@ this.applyColorMaskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.playAnimationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.variantComboBox = new MetroFramework.Controls.MetroComboBox(); this.colorSliderLabel = new MetroFramework.Controls.MetroLabel(); - this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); - this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); this.replaceButton = new MetroFramework.Controls.MetroButton(); this.tileNameLabel = new MetroFramework.Controls.MetroLabel(); - this.variantComboBox = new MetroFramework.Controls.MetroComboBox(); this.setColorButton = new MetroFramework.Controls.MetroButton(); this.animationButton = new MetroFramework.Controls.MetroButton(); this.clearColorButton = new MetroFramework.Controls.MetroButton(); this.colorSlider = new MetroFramework.Controls.MetroTrackBar(); - this.metroButton1 = new MetroFramework.Controls.MetroButton(); + this.extractButton = new MetroFramework.Controls.MetroButton(); + this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); + this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); this.menuStrip1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.originalPictureBox)).BeginInit(); @@ -56,13 +56,12 @@ // // variantLabel // - this.variantLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); + this.variantLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this.variantLabel.AutoSize = true; - this.variantLabel.Location = new System.Drawing.Point(3, 254); + this.tableLayoutPanel1.SetColumnSpan(this.variantLabel, 2); + this.variantLabel.Location = new System.Drawing.Point(3, 239); this.variantLabel.Name = "variantLabel"; - this.variantLabel.Size = new System.Drawing.Size(208, 24); + this.variantLabel.Size = new System.Drawing.Size(208, 19); this.variantLabel.TabIndex = 18; this.variantLabel.Text = "Variant:"; this.variantLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -135,45 +134,58 @@ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 10.43842F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 26.09603F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 63.46555F)); - this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.variantLabel, 0, 2); - this.tableLayoutPanel1.Controls.Add(this.colorSliderLabel, 0, 3); this.tableLayoutPanel1.Controls.Add(this.originalPictureBox, 2, 0); this.tableLayoutPanel1.Controls.Add(this.selectTilePictureBox, 0, 0); - this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 7); + this.tableLayoutPanel1.Controls.Add(this.replaceButton, 0, 8); this.tableLayoutPanel1.Controls.Add(this.tileNameLabel, 0, 1); - this.tableLayoutPanel1.Controls.Add(this.setColorButton, 0, 4); - this.tableLayoutPanel1.Controls.Add(this.animationButton, 1, 7); - this.tableLayoutPanel1.Controls.Add(this.clearColorButton, 1, 4); - this.tableLayoutPanel1.Controls.Add(this.colorSlider, 1, 3); - this.tableLayoutPanel1.Controls.Add(this.metroButton1, 0, 6); + this.tableLayoutPanel1.Controls.Add(this.setColorButton, 0, 5); + this.tableLayoutPanel1.Controls.Add(this.animationButton, 1, 8); + this.tableLayoutPanel1.Controls.Add(this.clearColorButton, 1, 5); + this.tableLayoutPanel1.Controls.Add(this.extractButton, 0, 7); + this.tableLayoutPanel1.Controls.Add(this.colorSlider, 1, 4); + this.tableLayoutPanel1.Controls.Add(this.colorSliderLabel, 0, 4); + this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 0, 3); + this.tableLayoutPanel1.Controls.Add(this.variantLabel, 0, 2); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(20, 84); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; - this.tableLayoutPanel1.RowCount = 8; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 36.3643F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 36.3643F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.543719F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.545537F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel1.RowCount = 6; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.68709F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.14977F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.14977F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.833951F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); this.tableLayoutPanel1.Size = new System.Drawing.Size(590, 565); this.tableLayoutPanel1.TabIndex = 17; // + // variantComboBox + // + this.variantComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.variantComboBox, 2); + this.variantComboBox.Enabled = false; + this.variantComboBox.FormattingEnabled = true; + this.variantComboBox.ItemHeight = 23; + this.variantComboBox.Location = new System.Drawing.Point(3, 291); + this.variantComboBox.Name = "variantComboBox"; + this.variantComboBox.Size = new System.Drawing.Size(208, 29); + this.variantComboBox.TabIndex = 17; + this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.variantComboBox.UseSelectable = true; + this.variantComboBox.SelectedIndexChanged += new System.EventHandler(this.variantComboBox_SelectedIndexChanged); + // // colorSliderLabel // this.colorSliderLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.colorSliderLabel.AutoSize = true; this.colorSliderLabel.BackColor = System.Drawing.Color.Transparent; - this.colorSliderLabel.Location = new System.Drawing.Point(3, 246); + this.colorSliderLabel.Location = new System.Drawing.Point(3, 350); this.colorSliderLabel.Name = "colorSliderLabel"; - this.colorSliderLabel.Size = new System.Drawing.Size(55, 198); + this.colorSliderLabel.Size = new System.Drawing.Size(55, 88); this.colorSliderLabel.TabIndex = 19; this.colorSliderLabel.Text = "Color Range:"; this.colorSliderLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -181,6 +193,110 @@ this.colorSliderLabel.Visible = false; this.colorSliderLabel.WrapToLine = true; // + // replaceButton + // + this.replaceButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.replaceButton.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.replaceButton, 2); + this.replaceButton.Location = new System.Drawing.Point(3, 519); + this.replaceButton.Name = "replaceButton"; + this.replaceButton.Size = new System.Drawing.Size(208, 20); + this.replaceButton.TabIndex = 14; + this.replaceButton.Text = "Replace Tile on Atlas"; + this.replaceButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.replaceButton.UseSelectable = true; + this.replaceButton.Click += new System.EventHandler(this.replaceButton_Click); + // + // tileNameLabel + // + this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tileNameLabel.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); + this.tileNameLabel.Location = new System.Drawing.Point(3, 217); + this.tileNameLabel.Name = "tileNameLabel"; + this.tileNameLabel.Size = new System.Drawing.Size(208, 19); + this.tileNameLabel.TabIndex = 19; + this.tileNameLabel.Text = "TileName"; + this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.tileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.tileNameLabel.WrapToLine = true; + // + // setColorButton + // + this.setColorButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.setColorButton, 2); + this.setColorButton.Location = new System.Drawing.Point(3, 444); + this.setColorButton.Name = "setColorButton"; + this.setColorButton.Size = new System.Drawing.Size(208, 17); + this.setColorButton.TabIndex = 25; + this.setColorButton.Text = "Set Custom Colour"; + this.setColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.setColorButton.UseSelectable = true; + this.setColorButton.Click += new System.EventHandler(this.setColorButton_Click); + // + // animationButton + // + this.animationButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.animationButton.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); + this.animationButton.Location = new System.Drawing.Point(3, 545); + this.animationButton.Name = "animationButton"; + this.animationButton.Size = new System.Drawing.Size(208, 17); + this.animationButton.TabIndex = 16; + this.animationButton.Text = "Animation"; + this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.animationButton.UseSelectable = true; + this.animationButton.Click += new System.EventHandler(this.animationButton_Click); + // + // clearColorButton + // + this.clearColorButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.clearColorButton.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.clearColorButton, 2); + this.clearColorButton.Location = new System.Drawing.Point(3, 467); + this.clearColorButton.Name = "clearColorButton"; + this.clearColorButton.Size = new System.Drawing.Size(208, 20); + this.clearColorButton.TabIndex = 24; + this.clearColorButton.Text = "Clear Custom Colour"; + this.clearColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.clearColorButton.UseSelectable = true; + this.clearColorButton.Click += new System.EventHandler(this.clearColorButton_Click); + // + // colorSlider + // + this.colorSlider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.colorSlider.BackColor = System.Drawing.Color.Transparent; + this.colorSlider.Location = new System.Drawing.Point(64, 353); + this.colorSlider.Maximum = 255; + this.colorSlider.Name = "colorSlider"; + this.colorSlider.Size = new System.Drawing.Size(147, 82); + this.colorSlider.TabIndex = 26; + this.colorSlider.Text = "metroTrackBar1"; + this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; + this.colorSlider.Value = 0; + this.colorSlider.Visible = false; + this.colorSlider.ValueChanged += new System.EventHandler(this.colorSlider_ValueChanged); + // + // extractButton + // + this.extractButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.extractButton.AutoSize = true; + this.tableLayoutPanel1.SetColumnSpan(this.extractButton, 2); + this.extractButton.Location = new System.Drawing.Point(3, 493); + this.extractButton.Name = "extractButton"; + this.extractButton.Size = new System.Drawing.Size(208, 20); + this.extractButton.TabIndex = 27; + this.extractButton.Text = "Extract Tile from Atlas"; + this.extractButton.Theme = MetroFramework.MetroThemeStyle.Dark; + this.extractButton.UseSelectable = true; + this.extractButton.Click += new System.EventHandler(this.extractTileToolStripMenuItem_Click); + // // originalPictureBox // this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; @@ -188,8 +304,8 @@ this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.originalPictureBox.Location = new System.Drawing.Point(217, 3); this.originalPictureBox.Name = "originalPictureBox"; - this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 8); - this.originalPictureBox.Size = new System.Drawing.Size(370, 534); + this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 9); + this.originalPictureBox.Size = new System.Drawing.Size(370, 536); this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.originalPictureBox.TabIndex = 4; this.originalPictureBox.TabStop = false; @@ -208,124 +324,12 @@ this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); this.selectTilePictureBox.Name = "selectTilePictureBox"; - this.selectTilePictureBox.Size = new System.Drawing.Size(208, 192); + this.selectTilePictureBox.Size = new System.Drawing.Size(208, 204); this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.selectTilePictureBox.TabIndex = 0; this.selectTilePictureBox.TabStop = false; this.selectTilePictureBox.UseBlendColor = true; // - // replaceButton - // - this.replaceButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.replaceButton.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.replaceButton, 2); - this.replaceButton.Location = new System.Drawing.Point(3, 519); - this.replaceButton.Name = "replaceButton"; - this.replaceButton.Size = new System.Drawing.Size(208, 18); - this.replaceButton.TabIndex = 14; - this.replaceButton.Text = "Replace Tile on Atlas"; - this.replaceButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.replaceButton.UseSelectable = true; - this.replaceButton.Click += new System.EventHandler(this.replaceButton_Click); - // - // tileNameLabel - // - this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tileNameLabel.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); - this.tileNameLabel.Location = new System.Drawing.Point(3, 203); - this.tileNameLabel.Name = "tileNameLabel"; - this.tileNameLabel.Size = new System.Drawing.Size(208, 43); - this.tileNameLabel.TabIndex = 19; - this.tileNameLabel.Text = "TileName"; - this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.tileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark; - this.tileNameLabel.WrapToLine = true; - // - // variantComboBox - // - this.variantComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.variantComboBox, 2); - this.variantComboBox.Enabled = false; - this.variantComboBox.FormattingEnabled = true; - this.variantComboBox.ItemHeight = 23; - this.variantComboBox.Location = new System.Drawing.Point(3, 287); - this.variantComboBox.Name = "variantComboBox"; - this.variantComboBox.Size = new System.Drawing.Size(208, 29); - this.variantComboBox.TabIndex = 17; - this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.variantComboBox.UseSelectable = true; - this.variantComboBox.SelectedIndexChanged += new System.EventHandler(this.variantComboBox_SelectedIndexChanged); - // - // setColorButton - // - this.setColorButton.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.tableLayoutPanel1.SetColumnSpan(this.setColorButton, 2); - this.setColorButton.Location = new System.Drawing.Point(3, 447); - this.setColorButton.Name = "setColorButton"; - this.setColorButton.Size = new System.Drawing.Size(208, 18); - this.setColorButton.TabIndex = 25; - this.setColorButton.Text = "Set Custom Colour"; - this.setColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.setColorButton.UseSelectable = true; - this.setColorButton.Click += new System.EventHandler(this.setColorButton_Click); - // - // animationButton - // - this.animationButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.animationButton.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); - this.animationButton.Location = new System.Drawing.Point(3, 543); - this.animationButton.Name = "animationButton"; - this.animationButton.Size = new System.Drawing.Size(208, 19); - this.animationButton.TabIndex = 16; - this.animationButton.Text = "Animation"; - this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.animationButton.UseSelectable = true; - this.animationButton.Click += new System.EventHandler(this.animationButton_Click); - // - // clearColorButton - // - this.clearColorButton.Anchor = System.Windows.Forms.AnchorStyles.Left; - this.tableLayoutPanel1.SetColumnSpan(this.clearColorButton, 2); - this.clearColorButton.Location = new System.Drawing.Point(3, 471); - this.clearColorButton.Name = "clearColorButton"; - this.clearColorButton.Size = new System.Drawing.Size(208, 18); - this.clearColorButton.TabIndex = 24; - this.clearColorButton.Text = "Clear Custom Colour"; - this.clearColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; - this.clearColorButton.UseSelectable = true; - this.clearColorButton.Click += new System.EventHandler(this.clearColorButton_Click); - // - // colorSlider - // - this.colorSlider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); - this.colorSlider.BackColor = System.Drawing.Color.Transparent; - this.colorSlider.Location = new System.Drawing.Point(64, 249); - this.colorSlider.Maximum = 255; - this.colorSlider.Name = "colorSlider"; - this.colorSlider.Size = new System.Drawing.Size(147, 192); - this.colorSlider.TabIndex = 26; - this.colorSlider.Text = "metroTrackBar1"; - this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; - this.colorSlider.Value = 0; - this.colorSlider.Visible = false; - this.colorSlider.ValueChanged += new System.EventHandler(this.colorSlider_ValueChanged); - // - // metroButton1 - // - this.tableLayoutPanel1.SetColumnSpan(this.metroButton1, 2); - this.metroButton1.Location = new System.Drawing.Point(3, 495); - this.metroButton1.Name = "metroButton1"; - this.metroButton1.Size = new System.Drawing.Size(208, 18); - this.metroButton1.TabIndex = 27; - this.metroButton1.Text = "Extract Tile from Atlas"; - this.metroButton1.Theme = MetroFramework.MetroThemeStyle.Dark; - this.metroButton1.UseSelectable = true; - // // TextureAtlasEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -373,6 +377,6 @@ private MetroFramework.Controls.MetroButton setColorButton; private MetroFramework.Controls.MetroTrackBar colorSlider; private MetroFramework.Controls.MetroLabel colorSliderLabel; - private MetroFramework.Controls.MetroButton metroButton1; + private MetroFramework.Controls.MetroButton extractButton; } } \ No newline at end of file diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 81334a5a..6d64dd4b 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -208,7 +208,6 @@ namespace PckStudio.Forms.Editor bool hasAnimation = _pckFile.TryGetValue($"res/textures/{_atlasType}/{dataTile.Tile.InternalName}.png", PckFileType.TextureFile, out var animationFile); animationButton.Text = hasAnimation ? "Edit Animation" : "Create Animation"; - replaceButton.Enabled = !hasAnimation; if (playAnimationsToolStripMenuItem.Checked && hasAnimation && @@ -433,6 +432,8 @@ namespace PckStudio.Forms.Editor if (e.Button != MouseButtons.Left) return; + ActiveControl = null; + int index = GetSelectedImageIndex( originalPictureBox.Size, _workingTexture.Size, From 7e88a06ddc83133ca93d17b6a095512e0cd13fa7 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Thu, 14 Mar 2024 23:56:20 -0400 Subject: [PATCH 28/52] Updated TextureAtlasEditor -Added support for Explosion atlas -Added variants for spawn eggs --- .../Editor/TextureAtlasEditor.Designer.cs | 153 ++++---- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 3 +- PCK-Studio/Internal/Json/Tiles.cs | 113 ++---- PCK-Studio/MainForm.cs | 3 +- PCK-Studio/PckStudio.csproj | 1 + PCK-Studio/Properties/Resources.Designer.cs | 10 + PCK-Studio/Properties/Resources.resx | 3 + PCK-Studio/Resources/atlases/explosion.png | Bin 0 -> 1614 bytes PCK-Studio/Resources/atlases/tileData.json | 326 +++++++++++++++++- 9 files changed, 444 insertions(+), 168 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/explosion.png diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index 4476b332..d26bce6c 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -37,17 +37,17 @@ this.applyColorMaskToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.playAnimationsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); - this.variantComboBox = new MetroFramework.Controls.MetroComboBox(); - this.colorSliderLabel = new MetroFramework.Controls.MetroLabel(); + this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); + this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); this.replaceButton = new MetroFramework.Controls.MetroButton(); this.tileNameLabel = new MetroFramework.Controls.MetroLabel(); this.setColorButton = new MetroFramework.Controls.MetroButton(); this.animationButton = new MetroFramework.Controls.MetroButton(); this.clearColorButton = new MetroFramework.Controls.MetroButton(); - this.colorSlider = new MetroFramework.Controls.MetroTrackBar(); this.extractButton = new MetroFramework.Controls.MetroButton(); - this.originalPictureBox = new PckStudio.ToolboxItems.InterpolationPictureBox(); - this.selectTilePictureBox = new PckStudio.ToolboxItems.AnimationPictureBox(); + this.colorSlider = new MetroFramework.Controls.MetroTrackBar(); + this.colorSliderLabel = new MetroFramework.Controls.MetroLabel(); + this.variantComboBox = new MetroFramework.Controls.MetroComboBox(); this.menuStrip1.SuspendLayout(); this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.originalPictureBox)).BeginInit(); @@ -92,7 +92,7 @@ // saveToolStripMenuItem // this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; - this.saveToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(98, 22); this.saveToolStripMenuItem.Text = "Save"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); // @@ -112,7 +112,7 @@ this.applyColorMaskToolStripMenuItem.CheckOnClick = true; this.applyColorMaskToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.applyColorMaskToolStripMenuItem.Name = "applyColorMaskToolStripMenuItem"; - this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.applyColorMaskToolStripMenuItem.Size = new System.Drawing.Size(168, 22); this.applyColorMaskToolStripMenuItem.Text = "Apply Color Mask"; this.applyColorMaskToolStripMenuItem.CheckedChanged += new System.EventHandler(this.applyColorMaskToolStripMenuItem_CheckedChanged); // @@ -122,7 +122,7 @@ this.playAnimationsToolStripMenuItem.CheckOnClick = true; this.playAnimationsToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; this.playAnimationsToolStripMenuItem.Name = "playAnimationsToolStripMenuItem"; - this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(180, 22); + this.playAnimationsToolStripMenuItem.Size = new System.Drawing.Size(168, 22); this.playAnimationsToolStripMenuItem.Text = "Play Animations"; this.playAnimationsToolStripMenuItem.CheckedChanged += new System.EventHandler(this.playAnimationsToolStripMenuItem_CheckedChanged); // @@ -159,39 +159,42 @@ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.833951F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.Size = new System.Drawing.Size(590, 565); this.tableLayoutPanel1.TabIndex = 17; // - // variantComboBox + // originalPictureBox // - this.variantComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.tableLayoutPanel1.SetColumnSpan(this.variantComboBox, 2); - this.variantComboBox.Enabled = false; - this.variantComboBox.FormattingEnabled = true; - this.variantComboBox.ItemHeight = 23; - this.variantComboBox.Location = new System.Drawing.Point(3, 291); - this.variantComboBox.Name = "variantComboBox"; - this.variantComboBox.Size = new System.Drawing.Size(208, 29); - this.variantComboBox.TabIndex = 17; - this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; - this.variantComboBox.UseSelectable = true; - this.variantComboBox.SelectedIndexChanged += new System.EventHandler(this.variantComboBox_SelectedIndexChanged); + this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; + this.originalPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; + this.originalPictureBox.Location = new System.Drawing.Point(217, 3); + this.originalPictureBox.Name = "originalPictureBox"; + this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 9); + this.originalPictureBox.Size = new System.Drawing.Size(370, 536); + this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.originalPictureBox.TabIndex = 4; + this.originalPictureBox.TabStop = false; + this.originalPictureBox.MouseClick += new System.Windows.Forms.MouseEventHandler(this.originalPictureBox_MouseClick); // - // colorSliderLabel + // selectTilePictureBox // - this.colorSliderLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.selectTilePictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.colorSliderLabel.BackColor = System.Drawing.Color.Transparent; - this.colorSliderLabel.Location = new System.Drawing.Point(3, 350); - this.colorSliderLabel.Name = "colorSliderLabel"; - this.colorSliderLabel.Size = new System.Drawing.Size(55, 88); - this.colorSliderLabel.TabIndex = 19; - this.colorSliderLabel.Text = "Color Range:"; - this.colorSliderLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.colorSliderLabel.Theme = MetroFramework.MetroThemeStyle.Dark; - this.colorSliderLabel.Visible = false; - this.colorSliderLabel.WrapToLine = true; + this.selectTilePictureBox.BackColor = System.Drawing.Color.Transparent; + this.selectTilePictureBox.BlendColor = System.Drawing.Color.White; + this.selectTilePictureBox.BlendMode = PckStudio.Extensions.BlendMode.Multiply; + this.tableLayoutPanel1.SetColumnSpan(this.selectTilePictureBox, 2); + this.selectTilePictureBox.Image = null; + this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; + this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); + this.selectTilePictureBox.Name = "selectTilePictureBox"; + this.selectTilePictureBox.Size = new System.Drawing.Size(208, 204); + this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.selectTilePictureBox.TabIndex = 0; + this.selectTilePictureBox.TabStop = false; + this.selectTilePictureBox.UseBlendColor = true; // // replaceButton // @@ -212,7 +215,6 @@ // this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.tileNameLabel.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); this.tileNameLabel.Location = new System.Drawing.Point(3, 217); this.tileNameLabel.Name = "tileNameLabel"; @@ -221,7 +223,6 @@ this.tileNameLabel.Text = "TileName"; this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.tileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark; - this.tileNameLabel.WrapToLine = true; // // setColorButton // @@ -267,21 +268,6 @@ this.clearColorButton.UseSelectable = true; this.clearColorButton.Click += new System.EventHandler(this.clearColorButton_Click); // - // colorSlider - // - this.colorSlider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); - this.colorSlider.BackColor = System.Drawing.Color.Transparent; - this.colorSlider.Location = new System.Drawing.Point(64, 353); - this.colorSlider.Maximum = 255; - this.colorSlider.Name = "colorSlider"; - this.colorSlider.Size = new System.Drawing.Size(147, 82); - this.colorSlider.TabIndex = 26; - this.colorSlider.Text = "metroTrackBar1"; - this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; - this.colorSlider.Value = 0; - this.colorSlider.Visible = false; - this.colorSlider.ValueChanged += new System.EventHandler(this.colorSlider_ValueChanged); - // // extractButton // this.extractButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) @@ -297,38 +283,51 @@ this.extractButton.UseSelectable = true; this.extractButton.Click += new System.EventHandler(this.extractTileToolStripMenuItem_Click); // - // originalPictureBox + // colorSlider // - this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; - this.originalPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; - this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; - this.originalPictureBox.Location = new System.Drawing.Point(217, 3); - this.originalPictureBox.Name = "originalPictureBox"; - this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 9); - this.originalPictureBox.Size = new System.Drawing.Size(370, 536); - this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.originalPictureBox.TabIndex = 4; - this.originalPictureBox.TabStop = false; - this.originalPictureBox.MouseClick += new System.Windows.Forms.MouseEventHandler(this.originalPictureBox_MouseClick); + this.colorSlider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); + this.colorSlider.BackColor = System.Drawing.Color.Transparent; + this.colorSlider.Location = new System.Drawing.Point(64, 353); + this.colorSlider.Maximum = 255; + this.colorSlider.Name = "colorSlider"; + this.colorSlider.Size = new System.Drawing.Size(147, 82); + this.colorSlider.TabIndex = 26; + this.colorSlider.Text = "metroTrackBar1"; + this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; + this.colorSlider.Value = 0; + this.colorSlider.Visible = false; + this.colorSlider.ValueChanged += new System.EventHandler(this.colorSlider_ValueChanged); // - // selectTilePictureBox + // colorSliderLabel // - this.selectTilePictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.colorSliderLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.selectTilePictureBox.BackColor = System.Drawing.Color.Transparent; - this.selectTilePictureBox.BlendColor = System.Drawing.Color.White; - this.selectTilePictureBox.BlendMode = PckStudio.Extensions.BlendMode.Multiply; - this.tableLayoutPanel1.SetColumnSpan(this.selectTilePictureBox, 2); - this.selectTilePictureBox.Image = null; - this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; - this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); - this.selectTilePictureBox.Name = "selectTilePictureBox"; - this.selectTilePictureBox.Size = new System.Drawing.Size(208, 204); - this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.selectTilePictureBox.TabIndex = 0; - this.selectTilePictureBox.TabStop = false; - this.selectTilePictureBox.UseBlendColor = true; + this.colorSliderLabel.BackColor = System.Drawing.Color.Transparent; + this.colorSliderLabel.Location = new System.Drawing.Point(3, 350); + this.colorSliderLabel.Name = "colorSliderLabel"; + this.colorSliderLabel.Size = new System.Drawing.Size(55, 88); + this.colorSliderLabel.TabIndex = 19; + this.colorSliderLabel.Text = "Color Range:"; + this.colorSliderLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.colorSliderLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.colorSliderLabel.Visible = false; + this.colorSliderLabel.WrapToLine = true; + // + // variantComboBox + // + this.variantComboBox.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.variantComboBox, 2); + this.variantComboBox.Enabled = false; + this.variantComboBox.FormattingEnabled = true; + this.variantComboBox.ItemHeight = 23; + this.variantComboBox.Location = new System.Drawing.Point(3, 291); + this.variantComboBox.Name = "variantComboBox"; + this.variantComboBox.Size = new System.Drawing.Size(208, 29); + this.variantComboBox.TabIndex = 17; + this.variantComboBox.Theme = MetroFramework.MetroThemeStyle.Dark; + this.variantComboBox.UseSelectable = true; + this.variantComboBox.SelectedIndexChanged += new System.EventHandler(this.variantComboBox_SelectedIndexChanged); // // TextureAtlasEditor // diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 6d64dd4b..d42d8e05 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -86,7 +86,7 @@ namespace PckStudio.Forms.Editor { value = value - _tiles.Count; } - SetImageDisplayed(value); + SetImageDisplayed(value); } } @@ -112,6 +112,7 @@ namespace PckStudio.Forms.Editor "additionalmapicons" => (Tiles.AdditionalMapIconTileInfos, "additional_map_icons"), "moon_phases" => (Tiles.MoonPhaseTileInfos, "moon_phases"), "xporb" => (Tiles.ExperienceOrbTileInfos, "experience_orbs"), + "explosion" => (Tiles.ExplosionTileInfos, "explosion"), _ => (null, null), }; diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index 68691564..9e5fe004 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -30,6 +30,9 @@ namespace PckStudio.Internal.Json [JsonProperty("experience_orbs")] public List ExperienceOrbs { get; set; } + + [JsonProperty("explosion")] + public List Explosion { get; set; } } internal static class Tiles @@ -44,6 +47,7 @@ namespace PckStudio.Internal.Json internal static List MapIconTileInfos => JsonTileData.MapIcons; internal static List AdditionalMapIconTileInfos => JsonTileData.AdditionalMapIcons; internal static List ExperienceOrbTileInfos => JsonTileData.ExperienceOrbs; + internal static List ExplosionTileInfos => JsonTileData.Explosion; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_sheet.SplitHorizontal(16).ToArray(); @@ -61,96 +65,39 @@ namespace PckStudio.Internal.Json public static Image[] AdditionalMapIconImages => _additionalMapIconImages ??= Resources.additional_map_icons_sheet.SplitHorizontal(4).ToArray(); private static Image[] _experienceOrbIconImages; - public static Image[] ExperienceOrbIconImages => _experienceOrbIconImages ??= Resources.experience_orbs_sheet.SplitHorizontal(4).ToArray(); + public static Image[] ExperienceOrbImages => _experienceOrbIconImages ??= Resources.experience_orbs_sheet.SplitHorizontal(4).ToArray(); - private static ImageList _itemImageList; - public static ImageList ItemImageList + private static Image[] _explosionImages; + public static Image[] ExplosionImages => _explosionImages ??= Resources.explosion_sheet.SplitHorizontal(4).ToArray(); + + private static ImageList GetImageList(Image[] images) { - get - { - if (_itemImageList is null) - { - _itemImageList = new ImageList(); - _itemImageList.ColorDepth = ColorDepth.Depth32Bit; - _itemImageList.Images.AddRange(ItemImages); - } - return _itemImageList; - } + ImageList _imageList = new ImageList(); + _imageList.ColorDepth = ColorDepth.Depth32Bit; + _imageList.Images.AddRange(images); + + return _imageList; } - private static ImageList _blockImageList; - public static ImageList BlockImageList - { - get - { - if (_blockImageList is null) - { - _blockImageList = new ImageList(); - _blockImageList.ColorDepth = ColorDepth.Depth32Bit; - _blockImageList.Images.AddRange(BlockImages); - } - return _blockImageList; - } - } + private static ImageList _itemImageList = GetImageList(ItemImages); + public static ImageList ItemImageList { get { return _itemImageList; } } - private static ImageList _moonPhaseImageList; - public static ImageList MoonPhaseImageList - { - get - { - if (_moonPhaseImageList is null) - { - _moonPhaseImageList = new ImageList(); - _moonPhaseImageList.ColorDepth = ColorDepth.Depth32Bit; - _moonPhaseImageList.Images.AddRange(MoonPhaseImages); - } - return _moonPhaseImageList; - } - } + private static ImageList _blockImageList = GetImageList(BlockImages); + public static ImageList BlockImageList { get { return _blockImageList; } } - private static ImageList _mapIconImageList; - public static ImageList MapIconImageList - { - get - { - if (_mapIconImageList is null) - { - _mapIconImageList = new ImageList(); - _mapIconImageList.ColorDepth = ColorDepth.Depth32Bit; - _mapIconImageList.Images.AddRange(MapIconImages); - } - return _mapIconImageList; - } - } + private static ImageList _moonPhaseImageList = GetImageList(MoonPhaseImages); + public static ImageList MoonPhaseImageList { get { return _moonPhaseImageList; } } - private static ImageList _additionalMapIconImageList; - public static ImageList AdditionalMapIconImageList - { - get - { - if (_additionalMapIconImageList is null) - { - _additionalMapIconImageList = new ImageList(); - _additionalMapIconImageList.ColorDepth = ColorDepth.Depth32Bit; - _additionalMapIconImageList.Images.AddRange(AdditionalMapIconImages); - } - return _additionalMapIconImageList; - } - } + private static ImageList _mapIconImageList = GetImageList(MapIconImages); + public static ImageList MapIconImageList { get { return _mapIconImageList; } } - private static ImageList _experienceOrbsImageList; - public static ImageList ExperienceOrbsImageList - { - get - { - if (_experienceOrbsImageList is null) - { - _experienceOrbsImageList = new ImageList(); - _experienceOrbsImageList.ColorDepth = ColorDepth.Depth32Bit; - _experienceOrbsImageList.Images.AddRange(ExperienceOrbIconImages); - } - return _experienceOrbsImageList; - } - } + private static ImageList _additionalMapIconImageList = GetImageList(AdditionalMapIconImages); + public static ImageList AdditionalMapIconImageList { get { return _additionalMapIconImageList; } } + + private static ImageList _experienceOrbsImageList = GetImageList(ExperienceOrbImages); + public static ImageList ExperienceOrbsImageList { get { return _experienceOrbsImageList; } } + + private static ImageList _explosionImageList = GetImageList(ExplosionImages); + public static ImageList ExplosionImageList { get { return _explosionImageList; } } } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 9439a115..a3673ffc 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -380,8 +380,9 @@ namespace PckStudio bool isMapIcons = file.Filename == "res/misc/mapicons.png"; bool isAdditionalMapIcons = file.Filename == "res/misc/additionalmapicons.png"; bool isXPOrbs = file.Filename == "res/item/xporb.png"; + bool isExplosion = file.Filename == "res/misc/explosion.png"; - if (isTerrainOrItems || isMoonPhases || isMapIcons || isAdditionalMapIcons || isXPOrbs) + if (isTerrainOrItems || isMoonPhases || isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosion) { var img = file.GetTexture(); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 35eeeb95..0e36110f 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -681,6 +681,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 9a8e5b0d..86389b38 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -304,6 +304,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap explosion_sheet { + get { + object obj = ResourceManager.GetObject("explosion_sheet", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 9c8afa9a..3d40571f 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -340,4 +340,7 @@ ..\Resources\atlases\experience_orbs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\explosion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/explosion.png b/PCK-Studio/Resources/atlases/explosion.png new file mode 100644 index 0000000000000000000000000000000000000000..242d91154e21c2cf20caffd72a90b103627e0427 GIT binary patch literal 1614 zcmb7^e>l?#9LK+#h56N_`LSxuk2__YgcRB)zm=9B3oBZF9*MH8h4`A29W&${I!WE7 zT}({Q`E|y6*cl;O`B5yYm9Z6%bdl5jea}75Jf4(RBdueN+Gynk5 z_VIQP*mUrV)Kxd9@DN43X|PzrQ33!o7HY0hwruY3Wbe=v0MP0AA_&sb7u*a{RF4p9 zU{VbABIQCfK%{(oj%wrY5oAK&XX9YA*VcCV!c73!((mI=2x5dUR7#nXCR*8w^@vn* zOG23+#IN^(|H!&^_luHb?}>$Zzf4mT=zrh=Upu&tEdAKZ=W97V8GKZ{cvjN0PrD%= zhwFM!iB&=8&u9I9M*1V%$|0or8%`4VOF3dZhS<_chNo*$%CD$Wx4P<9d+@~Zhun_m-n;?tRnHTeb zk#J7~^xE3=JX{cS5ZwQr2H3aI>!1sXs}PBn;)sA@Pj(}Em2f*^lwofP5NsGTYNaH= zMd_;6SxiA|--aqf04q_GY&@Hzb2G85rvrZ&K~kof-mix?I04>YvmB=I z7kSHgtwb}D44>fDk?Hg{cD`Q5v|{)VwvvHPOgXbI{}YU^SgJt$VV(8nTMor5Y@OOK63^RiOgt5 zq#rR5ZJs1Or@C`+>J;E$3>iZ8b8t4D{g-A|PT?WSsoy_G1RelhsV=$rhQ0=xWYU>j zPGV@(8^iH~fgfBHJm+GlZObQe(wxhY*TGI3e(fo#))+~B&45 z+Ev4L9SCh)FT+4Qb&>b!#bZ>=eB&wDfew$ow^Rhbh<^&dZ=K3MZ_Sw1v7gI9&E%j< z-?J9?>8-H}K)z>RPO9DLiw?Kp9M6i4u|FjRwz#`=d(C?nrB8N)46IO^;P%=8TQZX@ z-YBTV-VxVsYhV(CTd3dvQ>t`F$gV?&CLOV0>~Ke?(jQtbM5acf`j2N22khH5|OK=)G5i4!em<3jj`XHe;~mH@9^b`ZuHAT zo>gr%zUtH+<@}M%Mrieh#?=e9zIN=hNhD3roOgY-`diU(u}rLX~DJ zK29sCuFpOh1*)dgK-k-0DDmCStEc;F=b{y++rbZB0*z_nAJ7Inxa-mh$=QXwdoWXr ziBU*p{6=p+7wH_(zR_tAjZ?)T9o9Ko1mx0?_5M-t{V|i{Y9+-Vi!q1&hl7&{td-!% zE9e0^LcDrhitOe-%DG#K<2-BFVMFgTsrmWl#BCMc#JHrxHbN3a?XXB*(S?s>#j#K+ zwbwJl?V%+`LVWaAKdz3aQ2vzsQ|3t*jj~Q!2pBuh$MBb{Z+NBP=T~~W6Q}n)K%E)P zO@An1Un%TqqM9ZYptGymWo<_J&GDW)jA_olNL5cZ46Fi)n7|N<`fj^&^Y#qC3HF;V Z$m;k?%+b7l&&}Tt_;~oc*Sno&{tX%$*XaNN literal 0 HcmV?d00001 diff --git a/PCK-Studio/Resources/atlases/tileData.json b/PCK-Studio/Resources/atlases/tileData.json index 3c4137b4..682363a3 100644 --- a/PCK-Studio/Resources/atlases/tileData.json +++ b/PCK-Studio/Resources/atlases/tileData.json @@ -3590,7 +3590,64 @@ }, { "internalName": "monsterPlacer", - "displayName": "Spawn Egg" + "displayName": "Spawn Egg", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Mob_Creeper_Colour1", + "variants": [ + "Mob_Creeper_Colour1", + "Mob_Skeleton_Colour1", + "Mob_Spider_Colour1", + "Mob_Zombie_Colour1", + "Mob_Slime_Colour1", + "Mob_Ghast_Colour1", + "Mob_PigZombie_Colour1", + "Mob_Enderman_Colour1", + "Mob_CaveSpider_Colour1", + "Mob_Silverfish_Colour1", + "Mob_Blaze_Colour1", + "Mob_LavaSlime_Colour1", + "Mob_Pig_Colour1", + "Mob_Sheep_Colour1", + "Mob_Cow_Colour1", + "Mob_Chicken_Colour1", + "Mob_Squid_Colour1", + "Mob_Wolf_Colour1", + "Mob_MushroomCow_Colour1", + "Mob_Ocelot_Colour1", + "Mob_Villager_Colour1", + "Mob_Bat_Colour1", + "Mob_Witch_Colour1", + "Mob_Horse_Colour1", + "Mob_Endermite_Color1", + "Mob_Guardian_Color1", + "Mob_Rabbit_Colour1", + "Mob_PolarBear_Colour1", + "Mob_Shulker_Colour1", + "Mob_Elder_Guardian_Colour1", + "Mob_Evocation_Illager_Colour1", + "Mob_Llama_Colour1", + "Mob_Donkey_Colour1", + "Mob_Skeleton_Horse_Colour1", + "Mob_Zombie_Horse_Colour1", + "Mob_Mule_Colour1", + "Mob_Stray_Colour1", + "Mob_Husk_Colour1", + "Mob_Vex_Colour1", + "Mob_Vindication_Illager_Colour1", + "Mob_Zombie_Villager_Colour1", + "Mob_Parrot_Colour1", + "Mob_Wither_Skeleton_Colour1", + "Mob_Turtle_Colour1", + "Mob_Tropical_Colour1", + "Mob_Cod_Colour1", + "Mob_Pufferfish_Colour1", + "Mob_Salmon_Colour1", + "Mob_Drowned_Colour1", + "Mob_Dolphin_Colour1", + "Mob_Phantom_Colour1" + ] + } }, { "internalName": "potion_splash", @@ -3654,7 +3711,64 @@ }, { "internalName": "monsterPlacer_overlay", - "displayName": "Spawn Egg (Overlay)" + "displayName": "Spawn Egg (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Mob_Creeper_Colour2", + "variants": [ + "Mob_Creeper_Colour2", + "Mob_Skeleton_Colour2", + "Mob_Spider_Colour2", + "Mob_Zombie_Colour2", + "Mob_Slime_Colour2", + "Mob_Ghast_Colour2", + "Mob_PigZombie_Colour2", + "Mob_Enderman_Colour2", + "Mob_CaveSpider_Colour2", + "Mob_Silverfish_Colour2", + "Mob_Blaze_Colour2", + "Mob_LavaSlime_Colour2", + "Mob_Pig_Colour2", + "Mob_Sheep_Colour2", + "Mob_Cow_Colour2", + "Mob_Chicken_Colour2", + "Mob_Squid_Colour2", + "Mob_Wolf_Colour2", + "Mob_MushroomCow_Colour2", + "Mob_Ocelot_Colour2", + "Mob_Villager_Colour2", + "Mob_Bat_Colour2", + "Mob_Witch_Colour2", + "Mob_Horse_Colour2", + "Mob_Endermite_Color2", + "Mob_Guardian_Color2", + "Mob_Rabbit_Colour2", + "Mob_PolarBear_Colour2", + "Mob_Shulker_Colour2", + "Mob_Elder_Guardian_Colour2", + "Mob_Evocation_Illager_Colour2", + "Mob_Llama_Colour2", + "Mob_Donkey_Colour2", + "Mob_Skeleton_Horse_Colour2", + "Mob_Zombie_Horse_Colour2", + "Mob_Mule_Colour2", + "Mob_Stray_Colour2", + "Mob_Husk_Colour2", + "Mob_Vex_Colour2", + "Mob_Vindication_Illager_Colour2", + "Mob_Zombie_Villager_Colour2", + "Mob_Parrot_Colour2", + "Mob_Wither_Skeleton_Colour2", + "Mob_Turtle_Colour2", + "Mob_Tropical_Colour2", + "Mob_Cod_Colour2", + "Mob_Pufferfish_Colour2", + "Mob_Salmon_Colour2", + "Mob_Drowned_Colour2", + "Mob_Dolphin_Colour2", + "Mob_Phantom_Colour2" + ] + } }, { "internalName": "bed_overlay", @@ -3812,7 +3926,13 @@ }, { "internalName": "fireworks_charge_overlay", - "displayName": "Firework Star (Overlay)" + "displayName": "Firework Star (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "", + "variants": [""] + } }, { "internalName": "netherquartz", @@ -4214,11 +4334,11 @@ }, { "internalName": "target_point", - "displayName": "Unused" + "displayName": "Target Point (Unused)" }, { "internalName": "player_off_map", - "displayName": "Unused" + "displayName": "Player (Off Map) (Unused)" }, { "internalName": "frame", @@ -4246,7 +4366,7 @@ }, { "internalName": "player_off_limits", - "displayName": "Unused" + "displayName": "Player (Off Limits) (Unused)" }, { "internalName": "mansion", @@ -4443,5 +4563,199 @@ "internalName": "", "displayName": "" } + ], + "explosion": [ + { + "internalName": "explosion_0", + "displayName": "Explosion (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_1", + "displayName": "Explosion (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_2", + "displayName": "Explosion (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_3", + "displayName": "Explosion (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_4", + "displayName": "Explosion (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_5", + "displayName": "Explosion (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_6", + "displayName": "Explosion (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_7", + "displayName": "Explosion (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_8", + "displayName": "Explosion (Stage 9)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_9", + "displayName": "Explosion (Stage 10)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_10", + "displayName": "Explosion (Stage 11)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_11", + "displayName": "Explosion (Stage 12)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_12", + "displayName": "Explosion (Stage 13)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_13", + "displayName": "Explosion (Stage 14)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_14", + "displayName": "Explosion (Stage 15)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_15", + "displayName": "Explosion (Stage 16)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + } ] } From e51bedba4f1d6d1e78d1122bfdb64f2d4336b5ee Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 02:00:56 -0400 Subject: [PATCH 29/52] Added width and height properties for tiles --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 44 ++++++++++++------- PCK-Studio/Internal/Json/TileInfo.cs | 6 +++ PCK-Studio/Resources/atlases/tileData.json | 6 ++- 3 files changed, 39 insertions(+), 17 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index d42d8e05..f0b738ca 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -117,12 +117,31 @@ namespace PckStudio.Forms.Editor }; // there's got to be a better way to get around this clone exception - originalPictureBox.Image = (Image)((Bitmap)atlas).Clone(new Rectangle(new Point(0, 0), new Size(atlas.Width - 1, atlas.Height - 1)), PixelFormat.Format32bppArgb); + originalPictureBox.Image = atlas.GetArea(new Rectangle(0, 0, atlas.Width, atlas.Height)); var images = atlas.Split(_areaSize, _imageLayout); var tiles = images.enumerate().Select( - p => new AtlasTile(p.index, GetAtlasArea(p.index, _rowCount, _columnCount, _areaSize, _imageLayout), tileInfos.IndexInRange(p.index) ? tileInfos[p.index] : null, p.value) + p => new AtlasTile( + p.index, + + GetAtlasArea(p.index, + tileInfos.IndexInRange(p.index) + ? tileInfos[p.index].Width : 1, + tileInfos.IndexInRange(p.index) + ? tileInfos[p.index].Height : 1, _rowCount, _columnCount, _areaSize, _imageLayout), + + tileInfos.IndexInRange(p.index) + ? tileInfos[p.index] : null, + + // get full area for tiles that are not 1x1 tiles + tileInfos.IndexInRange(p.index) + ? atlas.GetArea( + new Rectangle( + GetSelectedPoint(p.index, _rowCount, _columnCount, _imageLayout).X * _areaSize.Width, + GetSelectedPoint(p.index, _rowCount, _columnCount, _imageLayout).Y * _areaSize.Height, + tileInfos[p.index].Width * _areaSize.Width, tileInfos[p.index].Height * _areaSize.Height)) + : p.value) ); _tiles = new List(tiles); @@ -158,8 +177,8 @@ namespace PckStudio.Forms.Editor g.DrawRectangle( Pens.White, new Rectangle(_selectedTile.Area.X, _selectedTile.Area.Y, - _selectedTile.Area.Width, - _selectedTile.Area.Height)); + _selectedTile.Area.Width / _selectedTile.Tile.Width, + _selectedTile.Area.Height / _selectedTile.Tile.Height)); } originalPictureBox.Invalidate(); @@ -187,13 +206,6 @@ namespace PckStudio.Forms.Editor updatePictureBoxDisplay(); - if (string.IsNullOrEmpty(dataTile.Tile.InternalName)) - { - selectTilePictureBox.Image = dataTile.Texture; - tileNameLabel.Text = "Unused"; - return; - } - if (string.IsNullOrEmpty(dataTile.Tile.DisplayName)) { dataTile = _tiles.Find(t => t.Tile.InternalName == _selectedTile.Tile.InternalName); @@ -326,11 +338,11 @@ namespace PckStudio.Forms.Editor }; } - private static Rectangle GetAtlasArea(int index, int rowCount, int columnCount, Size size, ImageLayoutDirection imageLayout) + private static Rectangle GetAtlasArea(int index, int width, int height, int rowCount, int columnCount, Size size, ImageLayoutDirection imageLayout) { var p = GetSelectedPoint(index, rowCount, columnCount, imageLayout); var ap = new Point(p.X * size.Width, p.Y * size.Height); - return new Rectangle(ap, size); + return new Rectangle(ap, new Size(size.Width * width, size.Height * height)); } private static Point GetSelectedPoint(int index, int rowCount, int columnCount, ImageLayoutDirection imageLayout) @@ -353,8 +365,8 @@ namespace PckStudio.Forms.Editor using (var g = Graphics.FromImage(_workingTexture)) { g.ApplyConfig(graphicsConfig); - g.Fill(_selectedTile.Area, Color.Transparent); - g.DrawImage(texture, _selectedTile.Area); + g.Fill(dataTile.Area, Color.Transparent); + g.DrawImage(texture, dataTile.Area); } _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, texture); @@ -498,7 +510,7 @@ namespace PckStudio.Forms.Editor }; if (saveFileDialog.ShowDialog() == DialogResult.OK) { - selectTilePictureBox.Image.Save(saveFileDialog.FileName, ImageFormat.Png); + dataTile.Texture.Save(saveFileDialog.FileName, ImageFormat.Png); } } diff --git a/PCK-Studio/Internal/Json/TileInfo.cs b/PCK-Studio/Internal/Json/TileInfo.cs index 1ff8b0f0..54e27d2f 100644 --- a/PCK-Studio/Internal/Json/TileInfo.cs +++ b/PCK-Studio/Internal/Json/TileInfo.cs @@ -15,6 +15,12 @@ namespace PckStudio.Internal.Json [JsonProperty("internalName")] public string InternalName { get; set; } + [JsonProperty("width")] + public int Width { get; set; } = 1; + + [JsonProperty("height")] + public int Height { get; set; } = 1; + [JsonProperty("hasColourEntry", DefaultValueHandling = DefaultValueHandling.Populate)] public bool HasColourEntry { get; set; } diff --git a/PCK-Studio/Resources/atlases/tileData.json b/PCK-Studio/Resources/atlases/tileData.json index 682363a3..d4a11b76 100644 --- a/PCK-Studio/Resources/atlases/tileData.json +++ b/PCK-Studio/Resources/atlases/tileData.json @@ -1035,6 +1035,8 @@ "internalName": "water_flow", "displayName": "Flowing Water", "hasColourEntry": true, + "width": 2, + "height": 2, "colourEntry": { "isWaterColour": true, "defaultName": "Water_Plains", @@ -1208,7 +1210,9 @@ }, { "internalName": "lava_flow", - "displayName": "Flowing Lava" + "displayName": "Flowing Lava", + "width": 2, + "height": 2 }, { "internalName": "lava_flow", From 3bbfa7a9b40261bfac88653ccb97a70f3d84bb6d Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 14:03:03 -0400 Subject: [PATCH 30/52] Non 1x1 tiles now extract and replace correctly --- .../Editor/TextureAtlasEditor.Designer.cs | 4 +- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 37 +++++++++++-------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index d26bce6c..a76914f5 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -165,8 +165,10 @@ // // originalPictureBox // + this.originalPictureBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.originalPictureBox.BackColor = System.Drawing.Color.Transparent; - this.originalPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; this.originalPictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.originalPictureBox.Location = new System.Drawing.Point(217, 3); this.originalPictureBox.Name = "originalPictureBox"; diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index f0b738ca..d8aa8c5c 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -116,7 +116,6 @@ namespace PckStudio.Forms.Editor _ => (null, null), }; - // there's got to be a better way to get around this clone exception originalPictureBox.Image = atlas.GetArea(new Rectangle(0, 0, atlas.Width, atlas.Height)); var images = atlas.Split(_areaSize, _imageLayout); @@ -125,22 +124,28 @@ namespace PckStudio.Forms.Editor p => new AtlasTile( p.index, - GetAtlasArea(p.index, + GetAtlasArea( + p.index, tileInfos.IndexInRange(p.index) ? tileInfos[p.index].Width : 1, tileInfos.IndexInRange(p.index) - ? tileInfos[p.index].Height : 1, _rowCount, _columnCount, _areaSize, _imageLayout), + ? tileInfos[p.index].Height : 1, + _rowCount, + _columnCount, + _areaSize, + _imageLayout), - tileInfos.IndexInRange(p.index) + tileInfos.IndexInRange(p.index) ? tileInfos[p.index] : null, - // get full area for tiles that are not 1x1 tiles + // get texture for tiles that are not 1x1 tiles tileInfos.IndexInRange(p.index) ? atlas.GetArea( new Rectangle( GetSelectedPoint(p.index, _rowCount, _columnCount, _imageLayout).X * _areaSize.Width, GetSelectedPoint(p.index, _rowCount, _columnCount, _imageLayout).Y * _areaSize.Height, - tileInfos[p.index].Width * _areaSize.Width, tileInfos[p.index].Height * _areaSize.Height)) + tileInfos[p.index].Width * _areaSize.Width, + tileInfos[p.index].Height * _areaSize.Height)) : p.value) ); _tiles = new List(tiles); @@ -162,7 +167,7 @@ namespace PckStudio.Forms.Editor return false; } - private void updatePictureBoxDisplay() + private void UpdateAtlasDisplay() { var graphicsConfig = new GraphicsConfig() { @@ -174,11 +179,13 @@ namespace PckStudio.Forms.Editor g.ApplyConfig(graphicsConfig); g.Clear(Color.Transparent); g.DrawImage(_workingTexture, new Point(0, 0)); - g.DrawRectangle( - Pens.White, - new Rectangle(_selectedTile.Area.X, _selectedTile.Area.Y, - _selectedTile.Area.Width / _selectedTile.Tile.Width, - _selectedTile.Area.Height / _selectedTile.Tile.Height)); + + SolidBrush brush = new SolidBrush(Color.FromArgb(127, 255, 255, 255)); + + var rect = new Rectangle(_selectedTile.Area.X, _selectedTile.Area.Y, + _areaSize.Width, _areaSize.Height); + + g.FillRectangle(brush, rect); } originalPictureBox.Invalidate(); @@ -204,9 +211,9 @@ namespace PckStudio.Forms.Editor dataTile = _selectedTile; - updatePictureBoxDisplay(); + UpdateAtlasDisplay(); - if (string.IsNullOrEmpty(dataTile.Tile.DisplayName)) + if (string.IsNullOrEmpty(dataTile.Tile.DisplayName) && !string.IsNullOrEmpty(dataTile.Tile.InternalName)) { dataTile = _tiles.Find(t => t.Tile.InternalName == _selectedTile.Tile.InternalName); } @@ -372,7 +379,7 @@ namespace PckStudio.Forms.Editor _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, texture); selectTilePictureBox.Image = texture; - updatePictureBoxDisplay(); + UpdateAtlasDisplay(); } private Color GetBlendColor() From 557882f487e96e0b7240aaff6007251719afec1b Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 15:44:27 -0400 Subject: [PATCH 31/52] Added Particle support for Atlas Editor --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 1 + PCK-Studio/Internal/Json/Tiles.cs | 16 +- PCK-Studio/MainForm.cs | 11 +- PCK-Studio/PckStudio.csproj | 1 + PCK-Studio/Properties/Resources.Designer.cs | 10 + PCK-Studio/Properties/Resources.resx | 3 + PCK-Studio/Resources/atlases/particles.png | Bin 0 -> 21971 bytes PCK-Studio/Resources/atlases/tileData.json | 1085 +++++++++++++++++ 8 files changed, 1121 insertions(+), 6 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/particles.png diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index d8aa8c5c..874fd5e6 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -108,6 +108,7 @@ namespace PckStudio.Forms.Editor { "terrain" => (Tiles.BlockTileInfos, "blocks"), "items" => (Tiles.ItemTileInfos, "items"), + "particles" => (Tiles.ParticleTileInfos, "particles"), "mapicons" => (Tiles.MapIconTileInfos, "map_icons"), "additionalmapicons" => (Tiles.AdditionalMapIconTileInfos, "additional_map_icons"), "moon_phases" => (Tiles.MoonPhaseTileInfos, "moon_phases"), diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index 9e5fe004..f2b6303c 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -18,7 +18,10 @@ namespace PckStudio.Internal.Json [JsonProperty("items")] public List Items { get; set; } - + + [JsonProperty("particles")] + public List Particles { get; set; } + [JsonProperty("moon_phases")] public List MoonPhases { get; set; } @@ -43,6 +46,7 @@ namespace PckStudio.Internal.Json internal static List ItemTileInfos => JsonTileData.Items; internal static List BlockTileInfos => JsonTileData.Blocks; + internal static List ParticleTileInfos => JsonTileData.Particles; internal static List MoonPhaseTileInfos => JsonTileData.MoonPhases; internal static List MapIconTileInfos => JsonTileData.MapIcons; internal static List AdditionalMapIconTileInfos => JsonTileData.AdditionalMapIcons; @@ -55,6 +59,9 @@ namespace PckStudio.Internal.Json private static Image[] _blockImages; public static Image[] BlockImages => _blockImages ??= Resources.terrain_sheet.SplitHorizontal(16).ToArray(); + private static Image[] _particleImages; + public static Image[] ParticleImages => _particleImages ??= Resources.particles_sheet.SplitHorizontal(16).ToArray(); + private static Image[] _moonPhaseImages; public static Image[] MoonPhaseImages => _moonPhaseImages ??= Resources.moon_phases_sheet.SplitHorizontal(4).ToArray(); @@ -79,11 +86,14 @@ namespace PckStudio.Internal.Json return _imageList; } + private static ImageList _blockImageList = GetImageList(BlockImages); + public static ImageList BlockImageList { get { return _blockImageList; } } + private static ImageList _itemImageList = GetImageList(ItemImages); public static ImageList ItemImageList { get { return _itemImageList; } } - private static ImageList _blockImageList = GetImageList(BlockImages); - public static ImageList BlockImageList { get { return _blockImageList; } } + private static ImageList _particleImageList = GetImageList(ParticleImages); + public static ImageList ParticleImageList { get { return _particleImageList; } } private static ImageList _moonPhaseImageList = GetImageList(MoonPhaseImages); public static ImageList MoonPhaseImageList { get { return _moonPhaseImageList; } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index a3673ffc..2ed0a7f6 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -375,21 +375,26 @@ namespace PckStudio return; } - bool isTerrainOrItems = file.Filename == "res/terrain.png" || file.Filename == "res/items.png"; + bool isTerrain = file.Filename == "res/terrain.png"; + bool isItems = file.Filename == "res/items.png"; + bool isParticles = file.Filename == "res/particles.png"; bool isMoonPhases = file.Filename == "res/terrain/moon_phases.png"; bool isMapIcons = file.Filename == "res/misc/mapicons.png"; bool isAdditionalMapIcons = file.Filename == "res/misc/additionalmapicons.png"; bool isXPOrbs = file.Filename == "res/item/xporb.png"; bool isExplosion = file.Filename == "res/misc/explosion.png"; - if (isTerrainOrItems || isMoonPhases || isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosion) + if ( + isTerrain || isItems || isParticles || isMoonPhases || + isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosion + ) { var img = file.GetTexture(); // all of the other atlases so far use 4 var columnCount = 4; - if (isTerrainOrItems) columnCount = 16; + if (isTerrain || isItems || isParticles) columnCount = 16; var resolution = img.Width / columnCount; var size = new Size(resolution, resolution); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 0e36110f..18d29ec5 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -684,6 +684,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 86389b38..459ea406 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -504,6 +504,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap particles_sheet { + get { + object obj = ResourceManager.GetObject("particles_sheet", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 3d40571f..a1ba9819 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -343,4 +343,7 @@ ..\Resources\atlases\explosion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\particles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/particles.png b/PCK-Studio/Resources/atlases/particles.png new file mode 100644 index 0000000000000000000000000000000000000000..63041dcbf8da33dcea86f40ab8d9f74ca1b97387 GIT binary patch literal 21971 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 literal 0 HcmV?d00001 diff --git a/PCK-Studio/Resources/atlases/tileData.json b/PCK-Studio/Resources/atlases/tileData.json index d4a11b76..138f4be8 100644 --- a/PCK-Studio/Resources/atlases/tileData.json +++ b/PCK-Studio/Resources/atlases/tileData.json @@ -4761,5 +4761,1090 @@ ] } } + ], + "particles": [ + { + "internalName": "generic_0", + "displayName": "Generic (Stage 1)" + }, + { + "internalName": "generic_1", + "displayName": "Generic (Stage 2)" + }, + { + "internalName": "generic_2", + "displayName": "Generic (Stage 3)" + }, + { + "internalName": "generic_3", + "displayName": "Generic (Stage 4)" + }, + { + "internalName": "generic_4", + "displayName": "Generic (Stage 5)" + }, + { + "internalName": "generic_5", + "displayName": "Generic (Stage 6)" + }, + { + "internalName": "generic_6", + "displayName": "Generic (Stage 7)" + }, + { + "internalName": "generic_7", + "displayName": "Generic (Stage 8)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "unused_splash_0", + "displayName": "Splash (Stage 1) (Unused)" + }, + { + "internalName": "unused_splash_1", + "displayName": "Splash (Stage 2) (Unused)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "splash_0", + "displayName": "Splash (Stage 1)" + }, + { + "internalName": "splash_1", + "displayName": "Splash (Stage 2)" + }, + { + "internalName": "splash_2", + "displayName": "Splash (Stage 3)" + }, + { + "internalName": "splash_3", + "displayName": "Splash (Stage 4)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "classic_bubble", + "displayName": "Bubble (Unused)" + }, + { + "internalName": "bobber", + "displayName": "Fishing Bobber" + }, + { + "internalName": "bubble", + "displayName": "Bubble", + "hasColourEntry": true, + "colourEntry": { + "isWaterColour": true, + "defaultName": "Water_Plains", + "variants": [ + "Water_Ocean", + "Water_Plains", + "Water_Desert", + "Water_ExtremeHills", + "Water_Forest", + "Water_Taiga", + "Water_Swampland", + "Water_River", + "Water_Hell", + "Water_Sky", + "Water_FrozenOcean", + "Water_FrozenRiver", + "Water_IcePlains", + "Water_IceMountains", + "Water_MushroomIsland", + "Water_MushroomIslandShore", + "Water_Beach", + "Water_DesertHills", + "Water_ForestHills", + "Water_TaigaHills", + "Water_ExtremeHillsEdge", + "Water_Jungle", + "Water_JungleHills", + "Water_JungleEdge", + "Water_DeepOcean", + "Water_StoneBeach", + "Water_ColdBeach", + "Water_BirchForest", + "Water_BirchForestHills", + "Water_RoofedForest", + "Water_ColdTaiga", + "Water_ColdTaigaHills", + "Water_MegaTaiga", + "Water_MegaTaigaHills", + "Water_ExtremeHillsPlus", + "Water_Savanna", + "Water_SavannaPlateau", + "Water_Mesa", + "Water_MesaPlateauF", + "Water_MesaPlateau" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "Firework Flash", + "width": 4, + "height": 4 + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "flame", + "displayName": "Flame" + }, + { + "internalName": "lava", + "displayName": "Lava" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "note", + "displayName": "Noteblock Note" + }, + { + "internalName": "critical_hit", + "displayName": "Critical Hit" + }, + { + "internalName": "enchanted_hit", + "displayName": "Enchanted Hit" + }, + { + "internalName": "damage", + "displayName": "Damage" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "heart", + "displayName": "Heart" + }, + { + "internalName": "angry", + "displayName": "Angry" + }, + { + "internalName": "glint", + "displayName": "Glint" + }, + { + "internalName": "angry_villager", + "displayName": "Angry Villager (Unused)" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "water_0", + "displayName": "Water (Stage 1) (Unused)" + }, + { + "internalName": "water_1", + "displayName": "Water (Stage 2) (Unused)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "bubble_pop_0", + "displayName": "Bubble Pop (Stage 1) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_0", + "displayName": "" + }, + { + "internalName": "bubble_pop_1", + "displayName": "Bubble Pop (Stage 2) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_1", + "displayName": "" + }, + { + "internalName": "bubble_pop_2", + "displayName": "Bubble Pop (Stage 3) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_2", + "displayName": "" + }, + { + "internalName": "bubble_pop_3", + "displayName": "Bubble Pop (Stage 4) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_3", + "displayName": "" + }, + { + "internalName": "bubble_pop_4", + "displayName": "Bubble Pop (Stage 5) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_4", + "displayName": "" + }, + { + "internalName": "drip_hang", + "displayName": "Drip (Hang)" + }, + { + "internalName": "drip_fall", + "displayName": "Drip (Fall)" + }, + { + "internalName": "drip_land", + "displayName": "Drip (Land)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "bubble_pop_0", + "displayName": "" + }, + { + "internalName": "bubble_pop_0", + "displayName": "" + }, + { + "internalName": "bubble_pop_1", + "displayName": "" + }, + { + "internalName": "bubble_pop_1", + "displayName": "" + }, + { + "internalName": "bubble_pop_2", + "displayName": "" + }, + { + "internalName": "bubble_pop_2", + "displayName": "" + }, + { + "internalName": "bubble_pop_3", + "displayName": "" + }, + { + "internalName": "bubble_pop_3", + "displayName": "" + }, + { + "internalName": "bubble_pop_4", + "displayName": "" + }, + { + "internalName": "bubble_pop_4", + "displayName": "" + }, + { + "internalName": "effect_0", + "displayName": "Effect (Stage 1)" + }, + { + "internalName": "effect_1", + "displayName": "Effect (Stage 2)" + }, + { + "internalName": "effect_2", + "displayName": "Effect (Stage 3)" + }, + { + "internalName": "effect_3", + "displayName": "Effect (Stage 4)" + }, + { + "internalName": "effect_4", + "displayName": "Effect (Stage 5)" + }, + { + "internalName": "effect_5", + "displayName": "Effect (Stage 6)" + }, + { + "internalName": "effect_6", + "displayName": "Effect (Stage 7)" + }, + { + "internalName": "effect_7", + "displayName": "Effect (Stage 8)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "spell_0", + "displayName": "Splash Effect (Stage 1)" + }, + { + "internalName": "spell_1", + "displayName": "Splash Effect (Stage 2)" + }, + { + "internalName": "spell_2", + "displayName": "Splash Effect (Stage 3)" + }, + { + "internalName": "spell_3", + "displayName": "Splash Effect (Stage 4)" + }, + { + "internalName": "spell_4", + "displayName": "Splash Effect (Stage 5)" + }, + { + "internalName": "spell_5", + "displayName": "Splash Effect (Stage 6)" + }, + { + "internalName": "spell_6", + "displayName": "Splash Effect (Stage 7)" + }, + { + "internalName": "spell_7", + "displayName": "Splash Effect (Stage 8)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "spark_0", + "displayName": "Firework Spark (Stage 1)" + }, + { + "internalName": "spark_1", + "displayName": "Firework Spark (Stage 2)" + }, + { + "internalName": "spark_2", + "displayName": "Firework Spark (Stage 3)" + }, + { + "internalName": "spark_3", + "displayName": "Firework Spark (Stage 4)" + }, + { + "internalName": "spark_4", + "displayName": "Firework Spark (Stage 5)" + }, + { + "internalName": "spark_5", + "displayName": "Firework Spark (Stage 6)" + }, + { + "internalName": "spark_6", + "displayName": "Firework Spark (Stage 7)" + }, + { + "internalName": "spark_7", + "displayName": "Firework Spark (Stage 8)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "glitter_0", + "displayName": "Shulker/End Rod Glitter (Stage 1)" + }, + { + "internalName": "glitter_1", + "displayName": "Shulker/End Rod Glitter (Stage 2)" + }, + { + "internalName": "glitter_2", + "displayName": "Shulker/End Rod Glitter (Stage 3)" + }, + { + "internalName": "glitter_3", + "displayName": "Shulker/End Rod Glitter (Stage 4)" + }, + { + "internalName": "glitter_4", + "displayName": "Shulker/End Rod Glitter (Stage 5)" + }, + { + "internalName": "glitter_5", + "displayName": "Shulker/End Rod Glitter (Stage 6)" + }, + { + "internalName": "glitter_6", + "displayName": "Shulker/End Rod Glitter (Stage 7)" + }, + { + "internalName": "glitter_7", + "displayName": "Shulker/End Rod Glitter (Stage 8)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "camera_shoot_explosion_0", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 1)" + }, + { + "internalName": "camera_shoot_explosion_1", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 2)" + }, + { + "internalName": "camera_shoot_explosion_2", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 3)" + }, + { + "internalName": "camera_shoot_explosion_3", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 4)" + }, + { + "internalName": "camera_shoot_explosion_4", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 5)" + }, + { + "internalName": "camera_shoot_explosion_5", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 6)" + }, + { + "internalName": "camera_shoot_explosion_6", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 7)" + }, + { + "internalName": "camera_shoot_explosion_7", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 8)" + }, + { + "internalName": "camera_shoot_explosion_8", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 9)" + }, + { + "internalName": "camera_shoot_explosion_9", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 10)" + }, + { + "internalName": "camera_shoot_explosion_10", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 11)" + }, + { + "internalName": "camera_shoot_explosion_11", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 12)" + }, + { + "internalName": "camera_shoot_explosion_12", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 13)" + }, + { + "internalName": "camera_shoot_explosion_13", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 14)" + }, + { + "internalName": "camera_shoot_explosion_14", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 15)" + }, + { + "internalName": "camera_shoot_explosion_15", + "displayName": "Camera Shoot (Unused) (Unused) (Stage 16)" + }, + { + "internalName": "conduit_0", + "displayName": "Conduit (Unused) (Stage 1)" + }, + { + "internalName": "conduit_1", + "displayName": "Conduit (Unused) (Stage 2)" + }, + { + "internalName": "conduit_2", + "displayName": "Conduit (Unused) (Stage 3)" + }, + { + "internalName": "conduit_3", + "displayName": "Conduit (Unused) (Stage 4)" + }, + { + "internalName": "conduit_4", + "displayName": "Conduit (Unused) (Stage 5)" + }, + { + "internalName": "conduit_5", + "displayName": "Conduit (Unused) (Stage 6)" + }, + { + "internalName": "conduit_6", + "displayName": "Conduit (Unused) (Stage 7)" + }, + { + "internalName": "conduit_7", + "displayName": "Conduit (Unused) (Stage 8)" + }, + { + "internalName": "conduit_8", + "displayName": "Conduit (Unused) (Stage 9)" + }, + { + "internalName": "conduit_9", + "displayName": "Conduit (Unused) (Stage 10)" + }, + { + "internalName": "conduit_10", + "displayName": "Conduit (Unused) (Stage 11)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "sga_a", + "displayName": "Standard Galactic Language (A)" + }, + { + "internalName": "sga_b", + "displayName": "Standard Galactic Language (B)" + }, + { + "internalName": "sga_c", + "displayName": "Standard Galactic Language (C)" + }, + { + "internalName": "sga_d", + "displayName": "Standard Galactic Language (D)" + }, + { + "internalName": "sga_e", + "displayName": "Standard Galactic Language (E)" + }, + { + "internalName": "sga_f", + "displayName": "Standard Galactic Language (F)" + }, + { + "internalName": "sga_g", + "displayName": "Standard Galactic Language (G)" + }, + { + "internalName": "sga_h", + "displayName": "Standard Galactic Language (H)" + }, + { + "internalName": "sga_i", + "displayName": "Standard Galactic Language (I)" + }, + { + "internalName": "sga_j", + "displayName": "Standard Galactic Language (J)" + }, + { + "internalName": "sga_k", + "displayName": "Standard Galactic Language (K)" + }, + { + "internalName": "sga_l", + "displayName": "Standard Galactic Language (L)" + }, + { + "internalName": "sga_m", + "displayName": "Standard Galactic Language (M)" + }, + { + "internalName": "sga_n", + "displayName": "Standard Galactic Language (N)" + }, + { + "internalName": "sga_o", + "displayName": "Standard Galactic Language (O)" + }, + { + "internalName": "sga_p", + "displayName": "Standard Galactic Language (P)" + }, + { + "internalName": "sga_q", + "displayName": "Standard Galactic Language (Q)" + }, + { + "internalName": "sga_r", + "displayName": "Standard Galactic Language (R)" + }, + { + "internalName": "sga_s", + "displayName": "Standard Galactic Language (S)" + }, + { + "internalName": "sga_t", + "displayName": "Standard Galactic Language (T)" + }, + { + "internalName": "sga_u", + "displayName": "Standard Galactic Language (U)" + }, + { + "internalName": "sga_v", + "displayName": "Standard Galactic Language (V)" + }, + { + "internalName": "sga_w", + "displayName": "Standard Galactic Language (W)" + }, + { + "internalName": "sga_x", + "displayName": "Standard Galactic Language (X)" + }, + { + "internalName": "sga_y", + "displayName": "Standard Galactic Language (Y)" + }, + { + "internalName": "sga_z", + "displayName": "Standard Galactic Language (Z)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, ] } From 1122fefaf0bac7d0b83f92c4bcbd2943c92aebe7 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 17:22:44 -0400 Subject: [PATCH 32/52] Added Shulker Box Overlay to tile data Not used, but it appears that this is what 4J was trying to do --- .../Editor/TextureAtlasEditor.Designer.cs | 91 ++++++++++--------- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 17 +++- PCK-Studio/Resources/atlases/tileData.json | 4 +- 3 files changed, 63 insertions(+), 49 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index a76914f5..56d2003c 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -29,7 +29,7 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TextureAtlasEditor)); - this.variantLabel = new MetroFramework.Controls.MetroLabel(); + this.internalTileNameLabel = new MetroFramework.Controls.MetroLabel(); this.menuStrip1 = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -54,18 +54,20 @@ ((System.ComponentModel.ISupportInitialize)(this.selectTilePictureBox)).BeginInit(); this.SuspendLayout(); // - // variantLabel + // internalTileNameLabel // - this.variantLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); - this.variantLabel.AutoSize = true; - this.tableLayoutPanel1.SetColumnSpan(this.variantLabel, 2); - this.variantLabel.Location = new System.Drawing.Point(3, 239); - this.variantLabel.Name = "variantLabel"; - this.variantLabel.Size = new System.Drawing.Size(208, 19); - this.variantLabel.TabIndex = 18; - this.variantLabel.Text = "Variant:"; - this.variantLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; - this.variantLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.internalTileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.SetColumnSpan(this.internalTileNameLabel, 2); + this.internalTileNameLabel.FontSize = MetroFramework.MetroLabelSize.Small; + this.internalTileNameLabel.Location = new System.Drawing.Point(3, 281); + this.internalTileNameLabel.Name = "internalTileNameLabel"; + this.internalTileNameLabel.Size = new System.Drawing.Size(208, 15); + this.internalTileNameLabel.TabIndex = 18; + this.internalTileNameLabel.Text = "InternalTileName"; + this.internalTileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + this.internalTileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.internalTileNameLabel.WrapToLine = true; // // menuStrip1 // @@ -145,20 +147,20 @@ this.tableLayoutPanel1.Controls.Add(this.colorSlider, 1, 4); this.tableLayoutPanel1.Controls.Add(this.colorSliderLabel, 0, 4); this.tableLayoutPanel1.Controls.Add(this.variantComboBox, 0, 3); - this.tableLayoutPanel1.Controls.Add(this.variantLabel, 0, 2); + this.tableLayoutPanel1.Controls.Add(this.internalTileNameLabel, 0, 2); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(20, 84); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 6; - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 38.68709F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.14977F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 16.14977F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.833951F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); - this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 4.835886F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 42.82212F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 8.938088F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 8.943623F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 8.943623F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 8.943623F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5.352765F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5.350623F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5.352765F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 5.352765F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.Size = new System.Drawing.Size(590, 565); this.tableLayoutPanel1.TabIndex = 17; @@ -173,7 +175,7 @@ this.originalPictureBox.Location = new System.Drawing.Point(217, 3); this.originalPictureBox.Name = "originalPictureBox"; this.tableLayoutPanel1.SetRowSpan(this.originalPictureBox, 9); - this.originalPictureBox.Size = new System.Drawing.Size(370, 536); + this.originalPictureBox.Size = new System.Drawing.Size(370, 535); this.originalPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.originalPictureBox.TabIndex = 4; this.originalPictureBox.TabStop = false; @@ -192,7 +194,7 @@ this.selectTilePictureBox.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; this.selectTilePictureBox.Location = new System.Drawing.Point(3, 3); this.selectTilePictureBox.Name = "selectTilePictureBox"; - this.selectTilePictureBox.Size = new System.Drawing.Size(208, 204); + this.selectTilePictureBox.Size = new System.Drawing.Size(208, 227); this.selectTilePictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; this.selectTilePictureBox.TabIndex = 0; this.selectTilePictureBox.TabStop = false; @@ -204,9 +206,9 @@ | System.Windows.Forms.AnchorStyles.Right))); this.replaceButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.replaceButton, 2); - this.replaceButton.Location = new System.Drawing.Point(3, 519); + this.replaceButton.Location = new System.Drawing.Point(3, 515); this.replaceButton.Name = "replaceButton"; - this.replaceButton.Size = new System.Drawing.Size(208, 20); + this.replaceButton.Size = new System.Drawing.Size(208, 23); this.replaceButton.TabIndex = 14; this.replaceButton.Text = "Replace Tile on Atlas"; this.replaceButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -215,23 +217,25 @@ // // tileNameLabel // - this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + this.tileNameLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.tableLayoutPanel1.SetColumnSpan(this.tileNameLabel, 2); - this.tileNameLabel.Location = new System.Drawing.Point(3, 217); + this.tileNameLabel.Location = new System.Drawing.Point(3, 233); this.tileNameLabel.Name = "tileNameLabel"; - this.tileNameLabel.Size = new System.Drawing.Size(208, 19); + this.tileNameLabel.Size = new System.Drawing.Size(208, 48); this.tileNameLabel.TabIndex = 19; this.tileNameLabel.Text = "TileName"; this.tileNameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.tileNameLabel.Theme = MetroFramework.MetroThemeStyle.Dark; + this.tileNameLabel.WrapToLine = true; // // setColorButton // this.setColorButton.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.tableLayoutPanel1.SetColumnSpan(this.setColorButton, 2); - this.setColorButton.Location = new System.Drawing.Point(3, 444); + this.setColorButton.Location = new System.Drawing.Point(3, 434); this.setColorButton.Name = "setColorButton"; this.setColorButton.Size = new System.Drawing.Size(208, 17); this.setColorButton.TabIndex = 25; @@ -246,9 +250,9 @@ | System.Windows.Forms.AnchorStyles.Right))); this.animationButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.animationButton, 2); - this.animationButton.Location = new System.Drawing.Point(3, 545); + this.animationButton.Location = new System.Drawing.Point(3, 544); this.animationButton.Name = "animationButton"; - this.animationButton.Size = new System.Drawing.Size(208, 17); + this.animationButton.Size = new System.Drawing.Size(208, 18); this.animationButton.TabIndex = 16; this.animationButton.Text = "Animation"; this.animationButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -261,9 +265,9 @@ | System.Windows.Forms.AnchorStyles.Right))); this.clearColorButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.clearColorButton, 2); - this.clearColorButton.Location = new System.Drawing.Point(3, 467); + this.clearColorButton.Location = new System.Drawing.Point(3, 457); this.clearColorButton.Name = "clearColorButton"; - this.clearColorButton.Size = new System.Drawing.Size(208, 20); + this.clearColorButton.Size = new System.Drawing.Size(208, 23); this.clearColorButton.TabIndex = 24; this.clearColorButton.Text = "Clear Custom Colour"; this.clearColorButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -276,9 +280,9 @@ | System.Windows.Forms.AnchorStyles.Right))); this.extractButton.AutoSize = true; this.tableLayoutPanel1.SetColumnSpan(this.extractButton, 2); - this.extractButton.Location = new System.Drawing.Point(3, 493); + this.extractButton.Location = new System.Drawing.Point(3, 486); this.extractButton.Name = "extractButton"; - this.extractButton.Size = new System.Drawing.Size(208, 20); + this.extractButton.Size = new System.Drawing.Size(208, 23); this.extractButton.TabIndex = 27; this.extractButton.Text = "Extract Tile from Atlas"; this.extractButton.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -289,10 +293,10 @@ // this.colorSlider.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom))); this.colorSlider.BackColor = System.Drawing.Color.Transparent; - this.colorSlider.Location = new System.Drawing.Point(64, 353); + this.colorSlider.Location = new System.Drawing.Point(64, 380); this.colorSlider.Maximum = 255; this.colorSlider.Name = "colorSlider"; - this.colorSlider.Size = new System.Drawing.Size(147, 82); + this.colorSlider.Size = new System.Drawing.Size(147, 42); this.colorSlider.TabIndex = 26; this.colorSlider.Text = "metroTrackBar1"; this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; @@ -306,11 +310,12 @@ | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.colorSliderLabel.BackColor = System.Drawing.Color.Transparent; - this.colorSliderLabel.Location = new System.Drawing.Point(3, 350); + this.colorSliderLabel.FontSize = MetroFramework.MetroLabelSize.Small; + this.colorSliderLabel.Location = new System.Drawing.Point(3, 377); this.colorSliderLabel.Name = "colorSliderLabel"; - this.colorSliderLabel.Size = new System.Drawing.Size(55, 88); + this.colorSliderLabel.Size = new System.Drawing.Size(55, 48); this.colorSliderLabel.TabIndex = 19; - this.colorSliderLabel.Text = "Color Range:"; + this.colorSliderLabel.Text = "Color Value:"; this.colorSliderLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; this.colorSliderLabel.Theme = MetroFramework.MetroThemeStyle.Dark; this.colorSliderLabel.Visible = false; @@ -323,7 +328,7 @@ this.variantComboBox.Enabled = false; this.variantComboBox.FormattingEnabled = true; this.variantComboBox.ItemHeight = 23; - this.variantComboBox.Location = new System.Drawing.Point(3, 291); + this.variantComboBox.Location = new System.Drawing.Point(3, 338); this.variantComboBox.Name = "variantComboBox"; this.variantComboBox.Size = new System.Drawing.Size(208, 29); this.variantComboBox.TabIndex = 17; @@ -373,7 +378,7 @@ private System.Windows.Forms.ToolStripMenuItem applyColorMaskToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem playAnimationsToolStripMenuItem; private MetroFramework.Controls.MetroLabel tileNameLabel; - private MetroFramework.Controls.MetroLabel variantLabel; + private MetroFramework.Controls.MetroLabel internalTileNameLabel; private MetroFramework.Controls.MetroButton clearColorButton; private MetroFramework.Controls.MetroButton setColorButton; private MetroFramework.Controls.MetroTrackBar colorSlider; diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 874fd5e6..4db6e920 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -195,8 +195,8 @@ namespace PckStudio.Forms.Editor private void SetImageDisplayed(int index) { tileNameLabel.Text = string.Empty; - - variantLabel.Visible = false; + internalTileNameLabel.Text = string.Empty; + variantComboBox.Visible = false; variantComboBox.Items.Clear(); variantComboBox.SelectedItem = null; @@ -221,6 +221,7 @@ namespace PckStudio.Forms.Editor selectTilePictureBox.Image = dataTile.Texture; tileNameLabel.Text = $"{dataTile.Tile.DisplayName}"; + internalTileNameLabel.Text = $"{dataTile.Tile.InternalName}"; selectTilePictureBox.BlendColor = GetBlendColor(); selectTilePictureBox.UseBlendColor = applyColorMaskToolStripMenuItem.Checked; @@ -244,7 +245,7 @@ namespace PckStudio.Forms.Editor setColorButton.Enabled = clearColorButton.Enabled = dataTile.Tile.ColourEntry.HasCustomColour; clearColorButton.Enabled = false; - variantComboBox.Enabled = variantLabel.Visible = variantComboBox.Visible = dataTile.Tile.ColourEntry.Variants.Length > 1; + variantComboBox.Enabled = variantComboBox.Visible = dataTile.Tile.ColourEntry.Variants.Length > 1; if (dataTile.Tile.ColourEntry.IsWaterColour && _colourTable.WaterColors.Count > 0) { @@ -411,7 +412,15 @@ namespace PckStudio.Forms.Editor { if (_colourTable.Colors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.Color color) { - return color.ColorPallette; + var final_color = color.ColorPallette; + + // Enchanted hits are hardcoded and do not have color table entries + if (dataTile.Tile.InternalName == "enchanted_hit") + // this is directly based on Java's source code for handling enchanted hits + // it just multiplies the red by 0.3 and green by .8 of the color assigned to the critical hit particle + final_color = Color.FromArgb((int)(final_color.R * 0.3f), (int)(final_color.R * 0.8f), final_color.B); + + return final_color; } } else if (_colourTable.WaterColors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.WaterColor waterColor) diff --git a/PCK-Studio/Resources/atlases/tileData.json b/PCK-Studio/Resources/atlases/tileData.json index 138f4be8..6303343e 100644 --- a/PCK-Studio/Resources/atlases/tileData.json +++ b/PCK-Studio/Resources/atlases/tileData.json @@ -2311,8 +2311,8 @@ } }, { - "internalName": "", - "displayName": "" + "internalName": "shulker_top_overlay", + "displayName": "Shulker Box (Break Particles) (Overlay) (Unused)" }, { "internalName": "cauldron_water", From b07462b439be1c0e3c4bd55814ee93e65deb2d05 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Fri, 15 Mar 2024 23:08:26 +0100 Subject: [PATCH 33/52] Update OMI submodule - Changed pck file property api - Move LocFile InitializeDefault to extension class --- PCK-Studio/Extensions/LocFileExtensions.cs | 22 +++++ PCK-Studio/Features/WiiUPanel.cs | 2 +- .../Forms/Skins-And-Textures/AddNewSkin.cs | 16 ++-- .../Skins-And-Textures/AdvancedOptions.cs | 2 +- .../Forms/Skins-And-Textures/generateModel.cs | 12 +-- PCK-Studio/Forms/Utilities/pckCenterOpen.cs | 4 +- PCK-Studio/Helper/AnimationHelper.cs | 4 +- PCK-Studio/MainForm.cs | 83 ++++++++++--------- PCK-Studio/PckStudio.csproj | 1 + Vendor/OMI-Lib | 2 +- 10 files changed, 89 insertions(+), 59 deletions(-) create mode 100644 PCK-Studio/Extensions/LocFileExtensions.cs diff --git a/PCK-Studio/Extensions/LocFileExtensions.cs b/PCK-Studio/Extensions/LocFileExtensions.cs new file mode 100644 index 00000000..787ac540 --- /dev/null +++ b/PCK-Studio/Extensions/LocFileExtensions.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using OMI.Formats.Languages; + +namespace PckStudio.Extensions +{ + internal static class LocFileExtensions + { + + public static void InitializeDefault(this LOCFile locFile, string packName) => locFile.Initialize("en-EN", ("IDS_DISPLAY_NAME", packName)); + + public static void Initialize(this LOCFile locFile, string language, params (string, string)[] locKeyValuePairs) + { + locFile.AddLanguage(language); + foreach (var locKeyValue in locKeyValuePairs) + locFile.AddLocKey(locKeyValue.Item1, locKeyValue.Item2); + } + } +} diff --git a/PCK-Studio/Features/WiiUPanel.cs b/PCK-Studio/Features/WiiUPanel.cs index ab6aa5f4..adc3baac 100644 --- a/PCK-Studio/Features/WiiUPanel.cs +++ b/PCK-Studio/Features/WiiUPanel.cs @@ -237,7 +237,7 @@ namespace PckStudio.Features currentPCK = reader.FromFile(filepath); if (currentPCK is null) return string.Empty; return currentPCK.TryGetFile("0", PckFileType.InfoFile, out var file) - ? file.Properties.GetPropertyValue("PACKID") + ? file.GetProperty("PACKID") : string.Empty; } diff --git a/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs b/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs index 7c80ab59..bae14ad6 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/AddNewSkin.cs @@ -242,32 +242,32 @@ namespace PckStudio.Popups } string skinId = _skinId.ToString("d08"); skin.Filename = $"dlcskin{skinId}.png"; - skin.Properties.Add("DISPLAYNAME", textSkinName.Text); + skin.AddProperty("DISPLAYNAME", textSkinName.Text); if (currentLoc is not null) { string skinDisplayNameLocKey = $"IDS_dlcskin{skinId}_DISPLAYNAME"; - skin.Properties.Add("DISPLAYNAMEID", skinDisplayNameLocKey); + skin.AddProperty("DISPLAYNAMEID", skinDisplayNameLocKey); currentLoc.AddLocKey(skinDisplayNameLocKey, textSkinName.Text); } if (!string.IsNullOrEmpty(textThemeName.Text)) { - skin.Properties.Add("THEMENAME", textThemeName.Text); + skin.AddProperty("THEMENAME", textThemeName.Text); if (currentLoc is not null) { - skin.Properties.Add("THEMENAMEID", $"IDS_dlcskin{skinId}_THEMENAME"); + skin.AddProperty("THEMENAMEID", $"IDS_dlcskin{skinId}_THEMENAME"); currentLoc.AddLocKey($"IDS_dlcskin{skinId}_THEMENAME", textThemeName.Text); } } - skin.Properties.Add("ANIM", anim); - skin.Properties.Add("GAME_FLAGS", "0x18"); - skin.Properties.Add("FREE", "1"); + skin.AddProperty("ANIM", anim); + skin.AddProperty("GAME_FLAGS", "0x18"); + skin.AddProperty("FREE", "1"); if (HasCape) { cape.Filename = $"dlccape{skinId}.png"; - skin.Properties.Add("CAPEPATH", cape.Filename); + skin.AddProperty("CAPEPATH", cape.Filename); } skin.SetData(skinPictureBox.Image, ImageFormat.Png); DialogResult = DialogResult.OK; diff --git a/PCK-Studio/Forms/Skins-And-Textures/AdvancedOptions.cs b/PCK-Studio/Forms/Skins-And-Textures/AdvancedOptions.cs index 65f15c65..e536a96f 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/AdvancedOptions.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/AdvancedOptions.cs @@ -67,7 +67,7 @@ namespace PckStudio.Popups if (index == -1 || (Enum.IsDefined(typeof(PckFileType), index) && (int)file.Filetype == index)) { - file.Properties.Add(propertyKeyTextBox.Text, propertyValueTextBox.Text); + file.AddProperty(propertyKeyTextBox.Text, propertyValueTextBox.Text); } } diff --git a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs index 64e7dadb..9171edf1 100644 --- a/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs +++ b/PCK-Studio/Forms/Skins-And-Textures/generateModel.cs @@ -141,7 +141,7 @@ namespace PckStudio.Forms } comboParent.Items.Clear(); comboParent.Items.AddRange(ValidModelBoxTypes); - LoadData(file.Properties); + LoadData(file); } private static readonly Regex sWhitespace = new Regex(@"\s+"); public static string ReplaceWhitespace(string input, string replacement) @@ -149,9 +149,9 @@ namespace PckStudio.Forms return sWhitespace.Replace(input, replacement); } - private void LoadData(PckFileProperties properties) + private void LoadData(PckFileData file) { - comboParent.Enabled = properties.GetProperties("BOX").All(kv => { + comboParent.Enabled = file.GetMultipleProperties("BOX").All(kv => { var box = SkinBOX.FromString(kv.Value); if (ValidModelBoxTypes.Contains(box.Type)) { @@ -160,7 +160,7 @@ namespace PckStudio.Forms } return false; }); - properties.GetProperties("OFFSET").All(kv => { + file.GetMultipleProperties("OFFSET").All(kv => { string[] offset = ReplaceWhitespace(kv.Value, ",").TrimEnd('\n', '\r', ' ').Split(','); if (offset.Length < 3) return false; @@ -176,7 +176,7 @@ namespace PckStudio.Forms return false; }); - _ANIM = properties.GetPropertyValue("ANIM", SkinANIM.FromString); + _ANIM = file.GetProperty("ANIM", SkinANIM.FromString); UpdateListView(); Rerender(); } @@ -1094,7 +1094,7 @@ namespace PckStudio.Forms { foreach (var part in modelBoxes) { - _file.Properties.Add("BOX", part); + _file.AddProperty("BOX", part); } //Bitmap bitmap2 = new Bitmap(64, 64); diff --git a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs b/PCK-Studio/Forms/Utilities/pckCenterOpen.cs index 3bdc4fd7..4676107e 100644 --- a/PCK-Studio/Forms/Utilities/pckCenterOpen.cs +++ b/PCK-Studio/Forms/Utilities/pckCenterOpen.cs @@ -182,7 +182,7 @@ namespace PckStudio.Forms string capePath = ""; bool hasCape = false; - foreach (var entry in newSkin.Properties) + foreach (var entry in newSkin.GetProperties()) { if (entry.Key == "DISPLAYNAME") { @@ -264,7 +264,7 @@ namespace PckStudio.Forms if (skinPicture.Height == skinPicture.Width) { //determines skin type based on image dimensions, existence of BOX tags, and the ANIM value - foreach (var entry in newSkin.Properties) + foreach (var entry in newSkin.GetProperties()) { if (entry.Key == "BOX") { diff --git a/PCK-Studio/Helper/AnimationHelper.cs b/PCK-Studio/Helper/AnimationHelper.cs index a9714d15..0312624a 100644 --- a/PCK-Studio/Helper/AnimationHelper.cs +++ b/PCK-Studio/Helper/AnimationHelper.cs @@ -18,7 +18,7 @@ namespace PckStudio.Helper internal static void SaveAnimationToFile(PckFileData file, Animation animation) { string anim = animation.BuildAnim(); - file.Properties.SetProperty("ANIM", anim); + file.SetProperty("ANIM", anim); var texture = animation.BuildTexture(); file.SetData(texture, ImageFormat.Png); } @@ -30,7 +30,7 @@ namespace PckStudio.Helper { var texture = file.GetTexture(); var frameTextures = texture.Split(ImageLayoutDirection.Vertical); - var _animation = new Animation(frameTextures, file.Properties.GetPropertyValue("ANIM")); + var _animation = new Animation(frameTextures, file.GetProperty("ANIM")); _animation.Category = file.Filename.Split('/').Contains("items") ? AnimationCategory.Items : AnimationCategory.Blocks; diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index e3398be6..0912e5d5 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -203,7 +203,7 @@ namespace PckStudio { if (currentPCK.TryGetFile("0", PckFileType.InfoFile, out PckFileData file)) { - file.Properties.RemoveAll(t => t.Key.Equals("LOCK")); + file.RemoveProperties("LOCK"); } } @@ -428,7 +428,7 @@ namespace PckStudio public void HandleSkinFile(PckFileData file) { - if (file.Properties.HasProperty("BOX")) + if (file.HasProperty("BOX")) { using generateModel generate = new generateModel(file); if (generate.ShowDialog() == DialogResult.OK) @@ -441,7 +441,7 @@ namespace PckStudio } var img = file.GetTexture(); - using var skinViewer = new SkinPreview(img, file.Properties.GetPropertyValue("ANIM", SkinANIM.FromString)); + using var skinViewer = new SkinPreview(img, file.GetProperty("ANIM", SkinANIM.FromString)); skinViewer.ShowDialog(this); } @@ -472,13 +472,13 @@ namespace PckStudio if (e.Node.TryGetTagData(out PckFileData file)) { viewFileInfoToolStripMenuItem.Visible = true; - if (file.Properties.HasProperty("BOX")) + if (file.HasProperty("BOX")) { buttonEdit.Text = "EDIT BOXES"; buttonEdit.Visible = true; } - else if (file.Properties.HasProperty("ANIM") && - file.Properties.GetPropertyValue("ANIM", s => SkinANIM.FromString(s) == (SkinAnimMask.RESOLUTION_64x64 | SkinAnimMask.SLIM_MODEL))) + else if (file.HasProperty("ANIM") && + file.GetProperty("ANIM", s => SkinANIM.FromString(s) == (SkinAnimMask.RESOLUTION_64x64 | SkinAnimMask.SLIM_MODEL))) { buttonEdit.Text = "View Skin"; buttonEdit.Visible = true; @@ -554,10 +554,13 @@ namespace PckStudio private void extractFile(string outFilePath, PckFileData file) { File.WriteAllBytes(outFilePath, file.Data); - if (file.Properties.Count > 0) + if (file.PropertyCount > 0) { using var fs = File.CreateText($"{outFilePath}.txt"); - file.Properties.ForEach(property => fs.WriteLine($"{property.Key}: {property.Value}")); + foreach (var property in file.GetProperties()) + { + fs.WriteLine($"{property.Key}: {property.Value}"); + } } } @@ -723,10 +726,10 @@ namespace PckStudio { if (TryGetLocFile(out LOCFile locFile)) { - if (file.Properties.HasProperty("THEMENAMEID")) - locFile.RemoveLocKey(file.Properties.GetPropertyValue("THEMENAMEID")); - if (file.Properties.HasProperty("DISPLAYNAMEID")) - locFile.RemoveLocKey(file.Properties.GetPropertyValue("DISPLAYNAMEID")); + if (file.TryGetProperty("THEMENAMEID", out string value)) + locFile.RemoveLocKey(value); + if (file.TryGetProperty("DISPLAYNAMEID", out value)) + locFile.RemoveLocKey(value); TrySetLocFile(locFile); } } @@ -978,7 +981,8 @@ namespace PckStudio if (node.Tag is PckFileData node_file) { PckFileData new_file = newPCKFile.CreateNewFile(node_file.Filename.Replace(parent_file.Filename + "/", String.Empty), node_file.Filetype); - foreach (var prop in node_file.Properties) new_file.Properties.Add(prop); + foreach (var prop in node_file.GetProperties()) + new_file.AddProperty(prop); new_file.SetData(node_file.Data); } } @@ -1017,8 +1021,7 @@ namespace PckStudio if (treeMeta.SelectedNode is TreeNode subnode && subnode.Tag is KeyValuePair property && treeViewMain.SelectedNode is TreeNode node && node.Tag is PckFileData file) { - int i = file.Properties.IndexOf(property); - if (i != -1) + if (file.HasProperty(property.Key)) { switch (property.Key) { @@ -1028,7 +1031,7 @@ namespace PckStudio using ANIMEditor diag = new ANIMEditor(property.Value); if (diag.ShowDialog(this) == DialogResult.OK) { - file.Properties[i] = new KeyValuePair("ANIM", diag.ResultAnim.ToString()); + file.SetProperty(file.GetPropertyIndex(property), new KeyValuePair("ANIM", diag.ResultAnim.ToString())); RebuildSubPCK(treeViewMain.SelectedNode.FullPath); ReloadMetaTreeView(); wasModified = true; @@ -1049,7 +1052,7 @@ namespace PckStudio using BoxEditor diag = new BoxEditor(property.Value, IsSubPCKNode(treeViewMain.SelectedNode.FullPath)); if (diag.ShowDialog(this) == DialogResult.OK) { - file.Properties[i] = new KeyValuePair("BOX", diag.Result.ToString()); + file.SetProperty(file.GetPropertyIndex(property), new KeyValuePair("BOX", diag.Result.ToString())); RebuildSubPCK(treeViewMain.SelectedNode.FullPath); ReloadMetaTreeView(); wasModified = true; @@ -1073,7 +1076,7 @@ namespace PckStudio { if (addProperty.ShowDialog() == DialogResult.OK) { - file.Properties[i] = addProperty.Property; + file.SetProperty(file.GetPropertyIndex(property), addProperty.Property); RebuildSubPCK(treeViewMain.SelectedNode.FullPath); ReloadMetaTreeView(); wasModified = true; @@ -1100,7 +1103,10 @@ namespace PckStudio TreeNode newNode = new TreeNode(); newNode.Text = Path.GetFileName(diag.NewText); var newFile = new PckFileData(diag.NewText, file.Filetype); - file.Properties.ForEach(newFile.Properties.Add); + foreach (var property in file.GetProperties()) + { + newFile.AddProperty(property); + } newFile.SetData(file.Data); newFile.Filename = diag.NewText; newNode.Tag = newFile; @@ -1132,7 +1138,7 @@ namespace PckStudio { if (treeMeta.SelectedNode is TreeNode t && t.Tag is KeyValuePair property && treeViewMain.SelectedNode is TreeNode main && main.Tag is PckFileData file && - file.Properties.Remove(property)) + file.RemoveProperty(property)) { treeMeta.SelectedNode.Remove(); RebuildSubPCK(treeViewMain.SelectedNode.FullPath); @@ -1146,7 +1152,7 @@ namespace PckStudio if (treeViewMain.SelectedNode is TreeNode node && node.Tag is PckFileData file) { - foreach (var property in file.Properties) + foreach (var property in file.GetProperties()) { treeMeta.Nodes.Add(CreateNode(property.Key, property)); } @@ -1161,7 +1167,7 @@ namespace PckStudio using AddPropertyPrompt addProperty = new AddPropertyPrompt(); if (addProperty.ShowDialog() == DialogResult.OK) { - file.Properties.Add(addProperty.Property); + file.AddProperty(addProperty.Property); RebuildSubPCK(treeViewMain.SelectedNode.FullPath); ReloadMetaTreeView(); wasModified = true; @@ -1205,8 +1211,8 @@ namespace PckStudio var pack = new PckFile(3); var zeroFile = pack.CreateNewFile("0", PckFileType.InfoFile); - zeroFile.Properties.Add("PACKID", packId.ToString()); - zeroFile.Properties.Add("PACKVERSION", packVersion.ToString()); + zeroFile.AddProperty("PACKID", packId); + zeroFile.AddProperty("PACKVERSION", packVersion); var locFile = new LOCFile(); locFile.InitializeDefault(packName); @@ -1234,8 +1240,8 @@ namespace PckStudio var texturepackInfo = pack.CreateNewFile($"{res}/{res}Info.pck", PckFileType.TexturePackInfoFile); - texturepackInfo.Properties.Add("PACKID", "0"); - texturepackInfo.Properties.Add("DATAPATH", $"{res}Data.pck"); + texturepackInfo.AddProperty("PACKID", "0"); + texturepackInfo.AddProperty("DATAPATH", $"{res}Data.pck"); texturepackInfo.SetData(new PckFileWriter(infoPCK, LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian)); @@ -1390,7 +1396,7 @@ namespace PckStudio //attempts to generate reimportable metadata file out of minefiles metadata string metaData = ""; - foreach (var entry in file.Properties) + foreach (var entry in file.GetProperties()) { metaData += $"{entry.Key}: {entry.Value}{Environment.NewLine}"; } @@ -1468,7 +1474,7 @@ namespace PckStudio { string[] param = property.Split(':'); if (param.Length < 2) continue; - newFile.Properties.Add((param[0], param[1])); + newFile.AddProperty(param[0], param[1]); //switch (param[0]) //{ // case "DISPLAYNAMEID": @@ -1602,7 +1608,7 @@ namespace PckStudio { } - mfNew.Properties.Add(new KeyValuePair(key, value)); + mfNew.AddProperty(key, value); } wasModified = true; } @@ -1884,7 +1890,7 @@ namespace PckStudio "File path: " + file.Filename + "\nAssigned File type: " + (int)file.Filetype + " (" + file.Filetype + ")" + "\nFile size: " + file.Size + - "\nProperties count: " + file.Properties.Count + "\nProperties count: " + file.PropertyCount , Path.GetFileName(file.Filename) + " file info"); } } @@ -1995,7 +2001,7 @@ namespace PckStudio int idx = line.IndexOf(' '); if (idx == -1 || line.Length - 1 == idx) continue; - file.Properties.Add((line.Substring(0, idx), line.Substring(idx + 1))); + file.AddProperty(line.Substring(0, idx), line.Substring(idx + 1)); } ReloadMetaTreeView(); RebuildSubPCK(treeViewMain.SelectedNode.FullPath); @@ -2010,9 +2016,10 @@ namespace PckStudio if (treeViewMain.SelectedNode.TryGetTagData(out PckFileData file) && file.Filetype == PckFileType.SkinFile) { - foreach (var p in file.Properties.FindAll(s => s.Key == "BOX" || s.Key == "OFFSET")) + foreach (var p in file.GetProperties()) { - file.Properties[file.Properties.IndexOf(p)] = new KeyValuePair(p.Key, p.Value.Replace(',', '.')); + if (p.Key == "BOX" || p.Key == "OFFSET") + file.SetProperty(file.GetPropertyIndex(p), new KeyValuePair(p.Key, p.Value.Replace(',', '.'))); } ReloadMetaTreeView(); RebuildSubPCK(treeViewMain.SelectedNode.FullPath); @@ -2044,18 +2051,18 @@ namespace PckStudio { if (treeViewMain.SelectedNode.TryGetTagData(out PckFileData file)) { - var props = file.Properties.Select(p => p.Key + " " + p.Value); + var props = file.GetProperties().Select(p => p.Key + " " + p.Value); using (var input = new MultiTextPrompt(props.ToArray())) { if (input.ShowDialog(this) == DialogResult.OK) { - file.Properties.Clear(); + file.ClearProperties(); foreach (var line in input.TextOutput) { int idx = line.IndexOf(' '); if (idx == -1 || line.Length - 1 == idx) continue; - file.Properties.Add((line.Substring(0, idx).Replace(":", string.Empty), line.Substring(idx + 1))); + file.AddProperty(line.Substring(0, idx).Replace(":", string.Empty), line.Substring(idx + 1)); } ReloadMetaTreeView(); RebuildSubPCK(treeViewMain.SelectedNode.FullPath); @@ -2183,7 +2190,7 @@ namespace PckStudio using BoxEditor diag = new BoxEditor(SkinBOX.Empty, IsSubPCKNode(treeViewMain.SelectedNode.FullPath)); if (diag.ShowDialog(this) == DialogResult.OK) { - file.Properties.Add("BOX", diag.Result); + file.AddProperty("BOX", diag.Result); RebuildSubPCK(treeViewMain.SelectedNode.FullPath); ReloadMetaTreeView(); wasModified = true; @@ -2199,7 +2206,7 @@ namespace PckStudio using ANIMEditor diag = new ANIMEditor(SkinANIM.Empty); if (diag.ShowDialog(this) == DialogResult.OK) { - file.Properties.Add("ANIM", diag.ResultAnim); + file.AddProperty("ANIM", diag.ResultAnim); RebuildSubPCK(treeViewMain.SelectedNode.FullPath); ReloadMetaTreeView(); wasModified = true; diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 3013435f..2d1966d1 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -133,6 +133,7 @@ + diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib index 036d680f..bf46386e 160000 --- a/Vendor/OMI-Lib +++ b/Vendor/OMI-Lib @@ -1 +1 @@ -Subproject commit 036d680f977f1db2e2ec7ab8fc5813b990278aed +Subproject commit bf46386e771fd573a625dfb124695ee4d8deeba5 From 18310537ae86e9c44fa638922bd29212f5dc00bc Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Fri, 15 Mar 2024 23:15:57 +0100 Subject: [PATCH 34/52] MainForm - Add simple indecator when file has unsaved changes --- PCK-Studio/MainForm.cs | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 0912e5d5..55addd69 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -39,7 +39,20 @@ namespace PckStudio private PckManager PckManager = null; string saveLocation = string.Empty; PckFile currentPCK = null; - bool wasModified = false; + + bool __modified = false; + bool wasModified + { + get => __modified; + set + { + if (__modified == value) + return; + __modified = value; + pckFileLabel.Text = !pckFileLabel.Text.StartsWith("*") && __modified ? "*" + pckFileLabel.Text : pckFileLabel.Text.Substring(1); + } + } + bool isTemplateFile = false; bool isSelectingTab = false; @@ -213,7 +226,7 @@ namespace PckStudio if (isTemplateFile) pckFileLabel.Text = "Unsaved File!"; else - pckFileLabel.Text = "Current PCK File: " + Path.GetFileName(saveLocation); + pckFileLabel.Text = Path.GetFileName(saveLocation); treeViewMain.Enabled = treeMeta.Enabled = true; closeToolStripMenuItem.Visible = true; fullBoxSupportToolStripMenuItem.Checked = currentPCK.HasVerionString; @@ -656,7 +669,7 @@ namespace PckStudio { Save(saveFileDialog.FileName); saveLocation = saveFileDialog.FileName; - pckFileLabel.Text = "Current PCK File: " + Path.GetFileName(saveLocation); + pckFileLabel.Text = Path.GetFileName(saveLocation); isTemplateFile = false; } } From 65ad649737cbb18f1c7d74981d71105617fe59a4 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Fri, 15 Mar 2024 23:17:27 +0100 Subject: [PATCH 35/52] MainForm - Move subpck reading to filetype click events --- PCK-Studio/MainForm.cs | 58 ++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 55addd69..290b5c01 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -92,19 +92,49 @@ namespace PckStudio [PckFileType.TextureFile] = HandleTextureFile, [PckFileType.UIDataFile] = _ => throw new NotSupportedException("unused in-game"), [PckFileType.InfoFile] = null, - [PckFileType.TexturePackInfoFile] = null, + [PckFileType.TexturePackInfoFile] = HandleInnerPckFile, [PckFileType.LocalisationFile] = HandleLocalisationFile, [PckFileType.GameRulesFile] = HandleGameRuleFile, [PckFileType.AudioFile] = HandleAudioFile, [PckFileType.ColourTableFile] = HandleColourFile, [PckFileType.GameRulesHeader] = HandleGameRuleFile, - [PckFileType.SkinDataFile] = null, + [PckFileType.SkinDataFile] = HandleInnerPckFile, [PckFileType.ModelsFile] = HandleModelsFile, [PckFileType.BehavioursFile] = HandleBehavioursFile, [PckFileType.MaterialFile] = HandleMaterialFile, }; } + private void HandleInnerPckFile(PckFileData file) + { + if (Settings.Default.LoadSubPcks && + (file.Filetype == PckFileType.SkinDataFile || file.Filetype == PckFileType.TexturePackInfoFile) && + file.Size > 0 && treeViewMain.SelectedNode.Nodes.Count == 0) + { + using (var stream = new MemoryStream(file.Data)) + { + try + { + var reader = new PckFileReader(LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); + PckFile subPCKfile = reader.FromStream(stream); + BuildPckTreeView(treeViewMain.SelectedNode.Nodes, subPCKfile); + treeViewMain.SelectedNode.ExpandAll(); + + } + catch (OverflowException ex) + { + MessageBox.Show("Failed to open pck\n" + + "Try checking the 'Open/Save as Switch/Vita/PS4 pck' checkbox in the upper right corner.", + "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + Debug.WriteLine(ex.Message); + } + } + return; + } + treeViewMain.SelectedNode.Nodes.Clear(); + treeViewMain.SelectedNode.Collapse(); + } + public void InitPckFromFile(string filepath) { saveLocation = filepath; @@ -311,7 +341,7 @@ namespace PckStudio return BuildNodeTreeBySeperator(subNode.Nodes, subPath, seperator); } - private void BuildPckTreeView(TreeNodeCollection root, PckFile pckFile, string parentPath = "") + private void BuildPckTreeView(TreeNodeCollection root, PckFile pckFile) { foreach (var file in pckFile.GetFiles()) { @@ -320,28 +350,6 @@ namespace PckStudio // file.Filename = file.Filename.Remove(0, parentPath.Length); TreeNode node = BuildNodeTreeBySeperator(root, file.Filename, '/'); node.Tag = file; - if (Settings.Default.LoadSubPcks && - (file.Filetype == PckFileType.SkinDataFile || file.Filetype == PckFileType.TexturePackInfoFile) && - file.Size > 0) - { - using (var stream = new MemoryStream(file.Data)) - { - try - { - var reader = new PckFileReader(LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian); - PckFile subPCKfile = reader.FromStream(stream); - // passes parent path to remove from sub pck filepaths - BuildPckTreeView(node.Nodes, subPCKfile, file.Filename + "/"); - } - catch (OverflowException ex) - { - MessageBox.Show("Failed to open pck\n" + - "Try checking the 'Open/Save as Switch/Vita/PS4 pck' checkbox in the upper right corner.", - "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); - Debug.WriteLine(ex.Message); - } - } - } SetNodeIcon(node, file.Filetype); }; } From bec3d5d6433e91c7bc33b96fe4d2202e8aa6b2bd Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 18:26:35 -0400 Subject: [PATCH 36/52] Added color data for particles in Atlas Editor --- .../Editor/TextureAtlasEditor.Designer.cs | 2 +- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 48 +- PCK-Studio/Resources/atlases/tileData.json | 1188 +++++++++++++++-- 3 files changed, 1141 insertions(+), 97 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs index 56d2003c..a9e55d22 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.Designer.cs @@ -300,7 +300,7 @@ this.colorSlider.TabIndex = 26; this.colorSlider.Text = "metroTrackBar1"; this.colorSlider.Theme = MetroFramework.MetroThemeStyle.Dark; - this.colorSlider.Value = 0; + this.colorSlider.Value = 255; this.colorSlider.Visible = false; this.colorSlider.ValueChanged += new System.EventHandler(this.colorSlider_ValueChanged); // diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 4db6e920..4f8c2e7b 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -152,6 +152,15 @@ namespace PckStudio.Forms.Editor _tiles = new List(tiles); SelectedIndex = 0; + + bool isParticles = _atlasType == "particles"; + + // this is directly based on Java's source code for handling enchanted hits + // the particle is assigned a random grayscale color between roughly 154 and 230 + // since critical hit is the only particle with this distinction, we just need to check the atlas type + colorSlider.Maximum = isParticles ? 230 : 255; + colorSlider.Minimum = isParticles ? 154 : 0; + colorSlider.Value = isParticles ? colorSlider.Maximum : colorSlider.Minimum; } private bool AcquireColorTable(PckFile pckFile) @@ -197,6 +206,8 @@ namespace PckStudio.Forms.Editor tileNameLabel.Text = string.Empty; internalTileNameLabel.Text = string.Empty; + colorSlider.Visible = false; + colorSliderLabel.Visible = false; variantComboBox.Visible = false; variantComboBox.Items.Clear(); variantComboBox.SelectedItem = null; @@ -395,13 +406,30 @@ namespace PckStudio.Forms.Editor return Color.White; } + private Color HandleSpecialTiles(string colorKey) + { + colorSlider.Visible = colorSliderLabel.Visible = true; + + // Simply, Experience orbs red value is just sliding between 255 and 0 + if (colorKey == "experience_orb") return Color.FromArgb(colorSlider.Value, 255, 0); + + //similar story for critical hits, but for all values + var final_color = Color.FromArgb(colorSlider.Value, colorSlider.Value, colorSlider.Value); + + // enchanted hits are modified critical hit particles + if (dataTile.Tile.InternalName == "enchanted_hit") + // this is directly based on Java's source code for handling enchanted hits + // it just multiplies the red by 0.3 and green by .8 of the color assigned to the critical hit particle + final_color = Color.FromArgb((int)(final_color.R * 0.3f), (int)(final_color.R * 0.8f), final_color.B); + + return final_color; + } + private Color FindBlendColorByKey(string colorKey) { - // Experience Orbs are hardcoded within a range and do not have color table entries - if (colorSliderLabel.Visible = colorSlider.Visible = colorKey == "experience_orb") - { - return Color.FromArgb(colorSlider.Value, 255, 0); - } + // The following tiles are hardcoded within a range and do not have color table entries + if (colorKey == "experience_orb" || colorKey == "critical_hit") + return HandleSpecialTiles(colorKey); if (_colourTable is not null && dataTile.Tile.HasColourEntry && @@ -412,15 +440,7 @@ namespace PckStudio.Forms.Editor { if (_colourTable.Colors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.Color color) { - var final_color = color.ColorPallette; - - // Enchanted hits are hardcoded and do not have color table entries - if (dataTile.Tile.InternalName == "enchanted_hit") - // this is directly based on Java's source code for handling enchanted hits - // it just multiplies the red by 0.3 and green by .8 of the color assigned to the critical hit particle - final_color = Color.FromArgb((int)(final_color.R * 0.3f), (int)(final_color.R * 0.8f), final_color.B); - - return final_color; + return color.ColorPallette; } } else if (_colourTable.WaterColors.FirstOrDefault(entry => entry.Name == colorKey) is ColorContainer.WaterColor waterColor) diff --git a/PCK-Studio/Resources/atlases/tileData.json b/PCK-Studio/Resources/atlases/tileData.json index 6303343e..d9d84b5d 100644 --- a/PCK-Studio/Resources/atlases/tileData.json +++ b/PCK-Studio/Resources/atlases/tileData.json @@ -4765,35 +4765,139 @@ "particles": [ { "internalName": "generic_0", - "displayName": "Generic (Stage 1)" + "displayName": "Generic (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_1", - "displayName": "Generic (Stage 2)" + "displayName": "Generic (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_2", - "displayName": "Generic (Stage 3)" + "displayName": "Generic (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_3", - "displayName": "Generic (Stage 4)" + "displayName": "Generic (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_4", - "displayName": "Generic (Stage 5)" + "displayName": "Generic (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_5", - "displayName": "Generic (Stage 6)" + "displayName": "Generic (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_6", - "displayName": "Generic (Stage 7)" + "displayName": "Generic (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "generic_7", - "displayName": "Generic (Stage 8)" + "displayName": "Generic (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } }, { "internalName": "", @@ -4958,7 +5062,13 @@ "internalName": "flash", "displayName": "Firework Flash", "width": 4, - "height": 4 + "height": 4, + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "", + "variants": [""] + } }, { "internalName": "flash", @@ -5070,19 +5180,60 @@ }, { "internalName": "note", - "displayName": "Noteblock Note" + "displayName": "Noteblock Note", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Note_00", + "variants": [ + "Particle_Note_00", + "Particle_Note_01", + "Particle_Note_02", + "Particle_Note_03", + "Particle_Note_04", + "Particle_Note_05", + "Particle_Note_06", + "Particle_Note_07", + "Particle_Note_08", + "Particle_Note_09", + "Particle_Note_10", + "Particle_Note_11", + "Particle_Note_12", + "Particle_Note_13", + "Particle_Note_14", + "Particle_Note_15", + "Particle_Note_16", + "Particle_Note_17", + "Particle_Note_18", + "Particle_Note_19", + "Particle_Note_20", + "Particle_Note_21", + "Particle_Note_22", + "Particle_Note_23", + "Particle_Note_24", + ] + } }, { "internalName": "critical_hit", - "displayName": "Critical Hit" + "displayName": "Critical Hit", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "critical_hit", + "variants": [ "critical_hit" ] + } }, { "internalName": "enchanted_hit", - "displayName": "Enchanted Hit" + "displayName": "Enchanted Hit", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "critical_hit", + "variants": [ "critical_hit" ] + } }, { "internalName": "damage", - "displayName": "Damage" + "displayName": "Damage Indicator" }, { "internalName": "flash", @@ -5272,15 +5423,42 @@ }, { "internalName": "drip_hang", - "displayName": "Drip (Hang)" + "displayName": "Drip (Hang)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_DripWater", + "variants": [ + "Particle_DripWater", + "Particle_DripLavaStart", + "Particle_DripLavaEnd" + ] + } }, { "internalName": "drip_fall", - "displayName": "Drip (Fall)" + "displayName": "Drip (Fall)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_DripWater", + "variants": [ + "Particle_DripWater", + "Particle_DripLavaStart", + "Particle_DripLavaEnd" + ] + } }, { "internalName": "drip_land", - "displayName": "Drip (Land)" + "displayName": "Drip (Land)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_DripWater", + "variants": [ + "Particle_DripWater", + "Particle_DripLavaStart", + "Particle_DripLavaEnd" + ] + } }, { "internalName": "", @@ -5336,35 +5514,323 @@ }, { "internalName": "effect_0", - "displayName": "Effect (Stage 1)" + "displayName": "Effect (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_1", - "displayName": "Effect (Stage 2)" + "displayName": "Effect (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_2", - "displayName": "Effect (Stage 3)" + "displayName": "Effect (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_3", - "displayName": "Effect (Stage 4)" + "displayName": "Effect (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_4", - "displayName": "Effect (Stage 5)" + "displayName": "Effect (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_5", - "displayName": "Effect (Stage 6)" + "displayName": "Effect (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_6", - "displayName": "Effect (Stage 7)" + "displayName": "Effect (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "effect_7", - "displayName": "Effect (Stage 8)" + "displayName": "Effect (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "", @@ -5400,35 +5866,323 @@ }, { "internalName": "spell_0", - "displayName": "Splash Effect (Stage 1)" + "displayName": "Splash Effect (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_1", - "displayName": "Splash Effect (Stage 2)" + "displayName": "Splash Effect (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_2", - "displayName": "Splash Effect (Stage 3)" + "displayName": "Splash Effect (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_3", - "displayName": "Splash Effect (Stage 4)" + "displayName": "Splash Effect (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_4", - "displayName": "Splash Effect (Stage 5)" + "displayName": "Splash Effect (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_5", - "displayName": "Splash Effect (Stage 6)" + "displayName": "Splash Effect (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_6", - "displayName": "Splash Effect (Stage 7)" + "displayName": "Splash Effect (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "spell_7", - "displayName": "Splash Effect (Stage 8)" + "displayName": "Splash Effect (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } }, { "internalName": "", @@ -5464,35 +6218,123 @@ }, { "internalName": "spark_0", - "displayName": "Firework Spark (Stage 1)" + "displayName": "Firework Spark (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_1", - "displayName": "Firework Spark (Stage 2)" + "displayName": "Firework Spark (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_2", - "displayName": "Firework Spark (Stage 3)" + "displayName": "Firework Spark (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_3", - "displayName": "Firework Spark (Stage 4)" + "displayName": "Firework Spark (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_4", - "displayName": "Firework Spark (Stage 5)" + "displayName": "Firework Spark (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_5", - "displayName": "Firework Spark (Stage 6)" + "displayName": "Firework Spark (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_6", - "displayName": "Firework Spark (Stage 7)" + "displayName": "Firework Spark (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "spark_7", - "displayName": "Firework Spark (Stage 8)" + "displayName": "Firework Spark (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } }, { "internalName": "", @@ -5592,67 +6434,67 @@ }, { "internalName": "camera_shoot_explosion_0", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 1)" + "displayName": "Camera Shoot (Unused) (Stage 1)" }, { "internalName": "camera_shoot_explosion_1", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 2)" + "displayName": "Camera Shoot (Unused) (Stage 2)" }, { "internalName": "camera_shoot_explosion_2", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 3)" + "displayName": "Camera Shoot (Unused) (Stage 3)" }, { "internalName": "camera_shoot_explosion_3", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 4)" + "displayName": "Camera Shoot (Unused) (Stage 4)" }, { "internalName": "camera_shoot_explosion_4", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 5)" + "displayName": "Camera Shoot (Unused) (Stage 5)" }, { "internalName": "camera_shoot_explosion_5", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 6)" + "displayName": "Camera Shoot (Unused) (Stage 6)" }, { "internalName": "camera_shoot_explosion_6", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 7)" + "displayName": "Camera Shoot (Unused) (Stage 7)" }, { "internalName": "camera_shoot_explosion_7", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 8)" + "displayName": "Camera Shoot (Unused) (Stage 8)" }, { "internalName": "camera_shoot_explosion_8", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 9)" + "displayName": "Camera Shoot (Unused) (Stage 9)" }, { "internalName": "camera_shoot_explosion_9", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 10)" + "displayName": "Camera Shoot (Unused) (Stage 10)" }, { "internalName": "camera_shoot_explosion_10", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 11)" + "displayName": "Camera Shoot (Unused) (Stage 11)" }, { "internalName": "camera_shoot_explosion_11", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 12)" + "displayName": "Camera Shoot (Unused) (Stage 12)" }, { "internalName": "camera_shoot_explosion_12", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 13)" + "displayName": "Camera Shoot (Unused) (Stage 13)" }, { "internalName": "camera_shoot_explosion_13", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 14)" + "displayName": "Camera Shoot (Unused) (Stage 14)" }, { "internalName": "camera_shoot_explosion_14", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 15)" + "displayName": "Camera Shoot (Unused) (Stage 15)" }, { "internalName": "camera_shoot_explosion_15", - "displayName": "Camera Shoot (Unused) (Unused) (Stage 16)" + "displayName": "Camera Shoot (Unused) (Stage 16)" }, { "internalName": "conduit_0", @@ -5724,107 +6566,289 @@ }, { "internalName": "sga_a", - "displayName": "Standard Galactic Language (A)" + "displayName": "Standard Galactic Language (A)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_b", - "displayName": "Standard Galactic Language (B)" + "displayName": "Standard Galactic Language (B)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_c", - "displayName": "Standard Galactic Language (C)" + "displayName": "Standard Galactic Language (C)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_d", - "displayName": "Standard Galactic Language (D)" + "displayName": "Standard Galactic Language (D)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_e", - "displayName": "Standard Galactic Language (E)" + "displayName": "Standard Galactic Language (E)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_f", - "displayName": "Standard Galactic Language (F)" + "displayName": "Standard Galactic Language (F)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_g", - "displayName": "Standard Galactic Language (G)" + "displayName": "Standard Galactic Language (G)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_h", - "displayName": "Standard Galactic Language (H)" + "displayName": "Standard Galactic Language (H)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_i", - "displayName": "Standard Galactic Language (I)" + "displayName": "Standard Galactic Language (I)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_j", - "displayName": "Standard Galactic Language (J)" + "displayName": "Standard Galactic Language (J)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_k", - "displayName": "Standard Galactic Language (K)" + "displayName": "Standard Galactic Language (K)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_l", - "displayName": "Standard Galactic Language (L)" + "displayName": "Standard Galactic Language (L)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_m", - "displayName": "Standard Galactic Language (M)" + "displayName": "Standard Galactic Language (M)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_n", - "displayName": "Standard Galactic Language (N)" + "displayName": "Standard Galactic Language (N)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_o", - "displayName": "Standard Galactic Language (O)" + "displayName": "Standard Galactic Language (O)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_p", - "displayName": "Standard Galactic Language (P)" + "displayName": "Standard Galactic Language (P)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_q", - "displayName": "Standard Galactic Language (Q)" + "displayName": "Standard Galactic Language (Q)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_r", - "displayName": "Standard Galactic Language (R)" + "displayName": "Standard Galactic Language (R)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_s", - "displayName": "Standard Galactic Language (S)" + "displayName": "Standard Galactic Language (S)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_t", - "displayName": "Standard Galactic Language (T)" + "displayName": "Standard Galactic Language (T)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_u", - "displayName": "Standard Galactic Language (U)" + "displayName": "Standard Galactic Language (U)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_v", - "displayName": "Standard Galactic Language (V)" + "displayName": "Standard Galactic Language (V)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_w", - "displayName": "Standard Galactic Language (W)" + "displayName": "Standard Galactic Language (W)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_x", - "displayName": "Standard Galactic Language (X)" + "displayName": "Standard Galactic Language (X)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_y", - "displayName": "Standard Galactic Language (Y)" + "displayName": "Standard Galactic Language (Y)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "sga_z", - "displayName": "Standard Galactic Language (Z)" + "displayName": "Standard Galactic Language (Z)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } }, { "internalName": "", From 5b240b670d13d0ad8a55618f19dc3efbca0f0de0 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 19:07:44 -0400 Subject: [PATCH 37/52] Split Tile Data --- PCK-Studio/Internal/ApplicationScope.cs | 8 +- PCK-Studio/Internal/Json/Tiles.cs | 31 +- PCK-Studio/PckStudio.csproj | 7 + PCK-Studio/Properties/Resources.Designer.cs | 255 +- PCK-Studio/Properties/Resources.resx | 24 +- PCK-Studio/Resources/atlases/blockData.json | 2922 +++++++ .../Resources/atlases/experienceOrbData.json | 124 + .../Resources/atlases/explosionData.json | 197 + PCK-Studio/Resources/atlases/itemData.json | 1366 ++++ PCK-Studio/Resources/atlases/mapIconData.json | 135 + .../Resources/atlases/moonPhaseData.json | 37 + .../Resources/atlases/particleData.json | 2112 +++++ PCK-Studio/Resources/atlases/tileData.json | 6874 ----------------- 13 files changed, 7171 insertions(+), 6921 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/blockData.json create mode 100644 PCK-Studio/Resources/atlases/experienceOrbData.json create mode 100644 PCK-Studio/Resources/atlases/explosionData.json create mode 100644 PCK-Studio/Resources/atlases/itemData.json create mode 100644 PCK-Studio/Resources/atlases/mapIconData.json create mode 100644 PCK-Studio/Resources/atlases/moonPhaseData.json create mode 100644 PCK-Studio/Resources/atlases/particleData.json delete mode 100644 PCK-Studio/Resources/atlases/tileData.json diff --git a/PCK-Studio/Internal/ApplicationScope.cs b/PCK-Studio/Internal/ApplicationScope.cs index 361ad2e4..61efd6d4 100644 --- a/PCK-Studio/Internal/ApplicationScope.cs +++ b/PCK-Studio/Internal/ApplicationScope.cs @@ -23,7 +23,13 @@ namespace PckStudio.Internal { _entityImages ??= Resources.entities_sheet.SplitHorizontal(32).ToArray(); DataCacher ??= new FileCacher(Program.AppDataCache); - _ = Tiles.JsonTileData; + _ = Tiles.JsonBlockData; + _ = Tiles.JsonItemData; + _ = Tiles.JsonParticleData; + _ = Tiles.JsonMoonPhaseData; + _ = Tiles.JsonExplosionData; + _ = Tiles.JsonMapIconData; + _ = Tiles.JsonExperienceOrbData; _ = Tiles.ItemImageList; _ = Tiles.BlockImageList; SettingsManager.Initialize(); diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index f2b6303c..a973638b 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -40,18 +40,27 @@ namespace PckStudio.Internal.Json internal static class Tiles { - private static JsonTiles _jsonData; - internal static JsonTiles JsonTileData => _jsonData ??= JsonConvert.DeserializeObject(Resources.tileData); + private static JsonTiles + _jsonBlockData, _jsonItemData, + _jsonParticleData, _jsonMoonPhaseData, + _jsonMapIconData, _jsonExplosionData, + _jsonExperienceOrbData; + internal static JsonTiles JsonBlockData => _jsonBlockData ??= JsonConvert.DeserializeObject(Resources.blockData); + internal static JsonTiles JsonItemData => _jsonItemData ??= JsonConvert.DeserializeObject(Resources.itemData); + internal static JsonTiles JsonParticleData => _jsonParticleData ??= JsonConvert.DeserializeObject(Resources.particleData); + internal static JsonTiles JsonMoonPhaseData => _jsonMoonPhaseData ??= JsonConvert.DeserializeObject(Resources.moonPhaseData); + internal static JsonTiles JsonMapIconData => _jsonMapIconData ??= JsonConvert.DeserializeObject(Resources.mapIconData); + internal static JsonTiles JsonExplosionData => _jsonExplosionData ??= JsonConvert.DeserializeObject(Resources.explosionData); + internal static JsonTiles JsonExperienceOrbData => _jsonExperienceOrbData ??= JsonConvert.DeserializeObject(Resources.experienceOrbData); - internal static List ItemTileInfos => JsonTileData.Items; - - internal static List BlockTileInfos => JsonTileData.Blocks; - internal static List ParticleTileInfos => JsonTileData.Particles; - internal static List MoonPhaseTileInfos => JsonTileData.MoonPhases; - internal static List MapIconTileInfos => JsonTileData.MapIcons; - internal static List AdditionalMapIconTileInfos => JsonTileData.AdditionalMapIcons; - internal static List ExperienceOrbTileInfos => JsonTileData.ExperienceOrbs; - internal static List ExplosionTileInfos => JsonTileData.Explosion; + internal static List ItemTileInfos => JsonItemData.Items; + internal static List BlockTileInfos => JsonBlockData.Blocks; + internal static List ParticleTileInfos => JsonParticleData.Particles; + internal static List MoonPhaseTileInfos => JsonMoonPhaseData.MoonPhases; + internal static List MapIconTileInfos => JsonMapIconData.MapIcons; + internal static List AdditionalMapIconTileInfos => JsonMapIconData.AdditionalMapIcons; + internal static List ExperienceOrbTileInfos => JsonExperienceOrbData.ExperienceOrbs; + internal static List ExplosionTileInfos => JsonExplosionData.Explosion; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_sheet.SplitHorizontal(16).ToArray(); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 18d29ec5..de86f119 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -628,7 +628,14 @@ + + + + + + + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 459ea406..97f21855 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -150,6 +150,38 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "Tile data research by MattNL", + /// "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", + /// "blocks": [ + /// { + /// "internalName": "grass_top", + /// "displayName": "Grass Block (Top)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "Grass_Common", + /// "variants": [ + /// "Grass_Common", + /// "Grass_Mesa", + /// "Grass_Swamp1", + /// "Grass_Swamp2" + /// ] + /// } + /// }, + /// { + /// "internalName": "stone", + /// "displayName": "Stone" + /// }, + /// { + /// "internalName": [rest of string was truncated]";. + /// + public static string blockData { + get { + return ResourceManager.GetString("blockData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -304,6 +336,36 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "experience_orbs": [ + /// { + /// "internalName": "experience_orb_0", + /// "displayName": "Experience Orb (Size 1)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "experience_orb", + /// "variants": ["experience_orb"] + /// } + /// }, + /// { + /// "internalName": "experience_orb_1", + /// "displayName": "Experience Orb (Size 2)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "experience_orb", + /// "variants": ["experience_orb"] + /// } + /// }, + /// [rest of string was truncated]";. + /// + public static string experienceOrbData { + get { + return ResourceManager.GetString("experienceOrbData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -314,6 +376,37 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "explosion": [ + /// { + /// "internalName": "explosion_0", + /// "displayName": "Explosion (Stage 1)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "Particle_Explode", + /// "variants": [ + /// "Particle_Explode", + /// "Particle_HugeExplosion" + /// ] + /// } + /// }, + /// { + /// "internalName": "explosion_1", + /// "displayName": "Explosion (Stage 2)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "Particle_Explode", + /// "variants": [ + /// [rest of string was truncated]";. + /// + public static string explosionData { + get { + return ResourceManager.GetString("explosionData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -414,6 +507,34 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "Tile data research by MattNL", + /// "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", + /// "items": [ + /// { + /// "internalName": "helmetCloth", + /// "displayName": "Leather Cap", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "hasCustomColour": true, + /// "defaultName": "Armour_Default_Leather_Colour", + /// "variants": [ "Armour_Default_Leather_Colour" ] + /// } + /// }, + /// { + /// "internalName": "helmetChain", + /// "displayName": "Chain Helmet" + /// }, + /// { + /// "internalName": "he [rest of string was truncated]";. + /// + public static string itemData { + get { + return ResourceManager.GetString("itemData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -444,6 +565,43 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "map_icons": [ + /// { + /// "internalName": "player_1", + /// "displayName": "Player 1" + /// }, + /// { + /// "internalName": "player_2", + /// "displayName": "Player 2" + /// }, + /// { + /// "internalName": "player_3", + /// "displayName": "Player 3" + /// }, + /// { + /// "internalName": "player_4", + /// "displayName": "Player 4" + /// }, + /// { + /// "internalName": "target_x", + /// "displayName": "Unused" + /// }, + /// { + /// "internalName": "target_point", + /// "displayName": "Target Point (Unused)" + /// }, + /// { + /// [rest of string was truncated]";. + /// + public static string mapIconData { + get { + return ResourceManager.GetString("mapIconData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -464,6 +622,40 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "moon_phases": [ + /// { + /// "internalName": "moon_phase_0", + /// "displayName": "Full Moon" + /// }, + /// { + /// "internalName": "moon_phase_1", + /// "displayName": "Waning Gibbous" + /// }, + /// { + /// "internalName": "moon_phase_2", + /// "displayName": "Last Quarter" + /// }, + /// { + /// "internalName": "moon_phase_3", + /// "displayName": "Waning Crescent" + /// }, + /// { + /// "internalName": "moon_phase_4", + /// "displayName": "New Moon" + /// }, + /// { + /// "internalName": "moon_phase_5", + /// "displayNa [rest of string was truncated]";. + /// + public static string moonPhaseData { + get { + return ResourceManager.GetString("moonPhaseData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// @@ -504,6 +696,37 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "particles": [ + /// { + /// "internalName": "generic_0", + /// "displayName": "Generic (Stage 1)", + /// "hasColourEntry": true, + /// "colourEntry": { + /// "defaultName": "None", + /// "variants": [ + /// "None", + /// "Particle_Smoke", + /// "Particle_NetherPortal", + /// "Particle_EnderPortal", + /// "Particle_Ender", + /// "Particle_DragonBreathMin", + /// "Particle_DragonBreathMax" + /// ] + /// } + /// }, + /// { + /// "internalName": "generic_1", + /// "displayName": "Generic (Stage 2)", [rest of string was truncated]";. + /// + public static string particleData { + get { + return ResourceManager.GetString("particleData", resourceCulture); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -674,38 +897,6 @@ namespace PckStudio.Properties { } } - /// - /// Looks up a localized string similar to { - /// "COMMENT_1": "Tile data research by MattNL", - /// "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", - /// "blocks": [ - /// { - /// "internalName": "grass_top", - /// "displayName": "Grass Block (Top)", - /// "hasColourEntry": true, - /// "colourEntry": { - /// "defaultName": "Grass_Common", - /// "variants": [ - /// "Grass_Common", - /// "Grass_Mesa", - /// "Grass_Swamp1", - /// "Grass_Swamp2" - /// ] - /// } - /// }, - /// { - /// "internalName": "stone", - /// "displayName": "Stone" - /// }, - /// { - /// "internalName": [rest of string was truncated]";. - /// - public static string tileData { - get { - return ResourceManager.GetString("tileData", resourceCulture); - } - } - /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index a1ba9819..cda749a2 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -172,9 +172,6 @@ ..\Resources\iconImageList\GRH ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\atlases\tileData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - ..\Resources\pckClosed.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -340,9 +337,30 @@ ..\Resources\atlases\experience_orbs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\blockData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\atlases\experienceOrbData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\atlases\explosionData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + ..\Resources\atlases\explosion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\itemData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\atlases\mapIconData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\atlases\moonPhaseData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\atlases\particleData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + ..\Resources\atlases\particles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a diff --git a/PCK-Studio/Resources/atlases/blockData.json b/PCK-Studio/Resources/atlases/blockData.json new file mode 100644 index 00000000..33bc0f3a --- /dev/null +++ b/PCK-Studio/Resources/atlases/blockData.json @@ -0,0 +1,2922 @@ +{ + "COMMENT_1": "Tile data research by MattNL", + "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", + "blocks": [ + { + "internalName": "grass_top", + "displayName": "Grass Block (Top)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "stone", + "displayName": "Stone" + }, + { + "internalName": "dirt", + "displayName": "Dirt" + }, + { + "internalName": "grass_side", + "displayName": "Grass Block (Side)" + }, + { + "internalName": "planks_oak", + "displayName": "Oak Planks" + }, + { + "internalName": "stoneslab_side", + "displayName": "Stone Slab (Side)" + }, + { + "internalName": "stoneslab_top", + "displayName": "Stone Slab (Top)" + }, + { + "internalName": "brick", + "displayName": "Bricks" + }, + { + "internalName": "tnt_side", + "displayName": "TNT (Side)" + }, + { + "internalName": "tnt_top", + "displayName": "TNT (Top)" + }, + { + "internalName": "tnt_bottom", + "displayName": "TNT (Bottom)" + }, + { + "internalName": "web", + "displayName": "Cobweb" + }, + { + "internalName": "flower_rose", + "displayName": "Poppy" + }, + { + "internalName": "flower_dandelion", + "displayName": "Dandelion" + }, + { + "internalName": "portal", + "displayName": "Nether Portal" + }, + { + "internalName": "sapling", + "displayName": "Oak Sapling" + }, + { + "internalName": "cobblestone", + "displayName": "Cobblestone" + }, + { + "internalName": "bedrock", + "displayName": "Bedrock" + }, + { + "internalName": "sand", + "displayName": "Sand" + }, + { + "internalName": "gravel", + "displayName": "Gravel" + }, + { + "internalName": "log_oak", + "displayName": "Oak Wood (Side)" + }, + { + "internalName": "log_oak_top", + "displayName": "Oak Wood (Top)" + }, + { + "internalName": "iron_block", + "displayName": "Block of Iron" + }, + { + "internalName": "gold_block", + "displayName": "Block of Gold" + }, + { + "internalName": "diamond_block", + "displayName": "Block of Diamond" + }, + { + "internalName": "emerald_block", + "displayName": "Block of Emerald" + }, + { + "internalName": "redstone_block", + "displayName": "Block of Redstone" + }, + { + "internalName": "dropper_front_horizontal", + "displayName": "Dropper (Front)" + }, + { + "internalName": "mushroom_red", + "displayName": "Mushroom (Red)" + }, + { + "internalName": "mushroom_brown", + "displayName": "Mushroom (Brown)" + }, + { + "internalName": "sapling_jungle", + "displayName": "Jungle Tree Sapling" + }, + { + "internalName": "fire_0", + "displayName": "Fire (Layer 1)" + }, + { + "internalName": "gold_ore", + "displayName": "Gold Ore" + }, + { + "internalName": "iron_ore", + "displayName": "Iron Ore" + }, + { + "internalName": "coal_ore", + "displayName": "Coal Ore" + }, + { + "internalName": "bookshelf", + "displayName": "Bookshelf" + }, + { + "internalName": "cobblestone_mossy", + "displayName": "Moss Stone" + }, + { + "internalName": "obsidian", + "displayName": "Obsidian" + }, + { + "internalName": "grass_side_overlay", + "displayName": "Grass Side (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "tallgrass", + "displayName": "Tall Grass", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "dispenser_front_vertical", + "displayName": "Dispenser (Vertical) (Front)" + }, + { + "internalName": "beacon", + "displayName": "Beacon" + }, + { + "internalName": "dropper_front_vertical", + "displayName": "Dropper (Vertical) (Front)" + }, + { + "internalName": "workbench_top", + "displayName": "Crafting Table (Top)" + }, + { + "internalName": "furnace_front", + "displayName": "Furnace (Front)" + }, + { + "internalName": "furnace_side", + "displayName": "Furnace/Dispenser/Dropper (Side)" + }, + { + "internalName": "dispenser_front", + "displayName": "Dispenser (Front)" + }, + { + "internalName": "fire_1", + "displayName": "Fire (Layer 2)" + }, + { + "internalName": "sponge", + "displayName": "Sponge" + }, + { + "internalName": "glass", + "displayName": "Glass" + }, + { + "internalName": "diamond_ore", + "displayName": "Diamond Ore" + }, + { + "internalName": "redstone_ore", + "displayName": "Redstone Ore" + }, + { + "internalName": "leaves", + "displayName": "Oak Leaves", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "leaves_opaque", + "displayName": "Oak Leaves (Opaque)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "stonebrick", + "displayName": "Stone Bricks" + }, + { + "internalName": "deadbush", + "displayName": "Dead Bush/Shrub" + }, + { + "internalName": "fern", + "displayName": "Fern", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "daylight_detector_top", + "displayName": "Daylight Sensor (Top)" + }, + { + "internalName": "daylight_detector_side", + "displayName": "Daylight Sensor (Side)" + }, + { + "internalName": "workbench_side", + "displayName": "Crafting Table (Side)" + }, + { + "internalName": "workbench_front", + "displayName": "Crafting Table (Front)" + }, + { + "internalName": "furnace_front_lit", + "displayName": "Furnace (Lit) (Front)" + }, + { + "internalName": "furnace_top", + "displayName": "Furnace/Dispenser/Dropper (Top)" + }, + { + "internalName": "sapling_spruce", + "displayName": "Spruce Sapling" + }, + { + "internalName": "wool_colored_white", + "displayName": "White Wool" + }, + { + "internalName": "mob_spawner", + "displayName": "Monster Spawner" + }, + { + "internalName": "snow", + "displayName": "Snow" + }, + { + "internalName": "ice", + "displayName": "Ice" + }, + { + "internalName": "snow_side", + "displayName": "Grass Block (Snowy) (Side)" + }, + { + "internalName": "cactus_top", + "displayName": "Cactus (Top)" + }, + { + "internalName": "cactus_side", + "displayName": "Cactus (Side)" + }, + { + "internalName": "cactus_bottom", + "displayName": "Cactus (Bottom)" + }, + { + "internalName": "clay", + "displayName": "Clay" + }, + { + "internalName": "reeds", + "displayName": "Sugar Canes" + }, + { + "internalName": "jukebox_side", + "displayName": "Jukebox (Side)" + }, + { + "internalName": "jukebox_top", + "displayName": "Jukebox (Top)" + }, + { + "internalName": "waterlily", + "displayName": "Lily Pad", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Tile_WaterLily", + "variants": [ "Tile_WaterLily" ] + } + }, + { + "internalName": "mycel_side", + "displayName": "Mycelium (Side)" + }, + { + "internalName": "mycel_top", + "displayName": "Mycelium (Top)" + }, + { + "internalName": "sapling_birch", + "displayName": "Birch Sapling" + }, + { + "internalName": "torch_on", + "displayName": "Torch" + }, + { + "internalName": "door_wood_upper", + "displayName": "Oak Door (Top)" + }, + { + "internalName": "door_iron_upper", + "displayName": "Iron Door (Top)" + }, + { + "internalName": "ladder", + "displayName": "Ladder" + }, + { + "internalName": "trapdoor", + "displayName": "Oak Trapdoor" + }, + { + "internalName": "iron_bars", + "displayName": "Iron Bars" + }, + { + "internalName": "farmland_wet", + "displayName": "Farmland (Wet)" + }, + { + "internalName": "farmland_dry", + "displayName": "Farmland" + }, + { + "internalName": "crops_0", + "displayName": "Wheat (Stage 1)" + }, + { + "internalName": "crops_1", + "displayName": "Wheat (Stage 2)" + }, + { + "internalName": "crops_2", + "displayName": "Wheat (Stage 3)" + }, + { + "internalName": "crops_3", + "displayName": "Wheat (Stage 4)" + }, + { + "internalName": "crops_4", + "displayName": "Wheat (Stage 5)" + }, + { + "internalName": "crops_5", + "displayName": "Wheat (Stage 6)" + }, + { + "internalName": "crops_6", + "displayName": "Wheat (Stage 7)" + }, + { + "internalName": "crops_7", + "displayName": "Wheat (Stage 8)" + }, + { + "internalName": "lever", + "displayName": "Lever" + }, + { + "internalName": "door_wood_lower", + "displayName": "Oak Door (Bottom)" + }, + { + "internalName": "door_iron_lower", + "displayName": "Iron Door (Bottom)" + }, + { + "internalName": "redstone_torch_on", + "displayName": "Redstone Torch" + }, + { + "internalName": "stonebrick_mossy", + "displayName": "Mossy Stone Bricks" + }, + { + "internalName": "stonebrick_cracked", + "displayName": "Cracked Stone Bricks" + }, + { + "internalName": "pumpkin_top", + "displayName": "Pumpkin (Top)" + }, + { + "internalName": "netherrack", + "displayName": "Netherrack" + }, + { + "internalName": "soul_sand", + "displayName": "Soul Sand" + }, + { + "internalName": "glowstone", + "displayName": "Glowstone" + }, + { + "internalName": "piston_top_sticky", + "displayName": "Sticky Piston (Top)" + }, + { + "internalName": "piston_top", + "displayName": "Piston (Top)" + }, + { + "internalName": "piston_side", + "displayName": "Piston (Side)" + }, + { + "internalName": "piston_bottom", + "displayName": "Piston (Bottom)" + }, + { + "internalName": "piston_inner_top", + "displayName": "Piston (Inside)" + }, + { + "internalName": "stem_straight", + "displayName": "Stem", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Tile_StemMin", + "variants": [ + "Tile_StemMin", + "Tile_StemMax" + ] + } + }, + { + "internalName": "rail_normal_turned", + "displayName": "Rail (Turned)" + }, + { + "internalName": "wool_colored_black", + "displayName": "Black Wool" + }, + { + "internalName": "wool_colored_gray", + "displayName": "Gray Wool" + }, + { + "internalName": "redstone_torch_off", + "displayName": "Redstone Torch (Off)" + }, + { + "internalName": "log_spruce", + "displayName": "Spruce Wood (Side)" + }, + { + "internalName": "log_birch", + "displayName": "Birch Wood (Side)" + }, + { + "internalName": "pumpkin_side", + "displayName": "Pumpkin (Side)" + }, + { + "internalName": "pumpkin_face_off", + "displayName": "Carved Pumpkin" + }, + { + "internalName": "pumpkin_face_on", + "displayName": "Jack-O-Lantern" + }, + { + "internalName": "cake_top", + "displayName": "Cake (Top)" + }, + { + "internalName": "cake_side", + "displayName": "Cake (Side)" + }, + { + "internalName": "cake_inner", + "displayName": "Cake (Inside)" + }, + { + "internalName": "cake_bottom", + "displayName": "Cake (Bottom)" + }, + { + "internalName": "mushroom_block_skin_red", + "displayName": "Mushroom (Red Block)" + }, + { + "internalName": "mushroom_block_skin_brown", + "displayName": "Mushroom (Brown Block)" + }, + { + "internalName": "stem_bent", + "displayName": "Stem (Attached)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Tile_StemMin", + "variants": [ + "Tile_StemMin", + "Tile_StemMax" + ] + } + }, + { + "internalName": "rail_normal", + "displayName": "Rail" + }, + { + "internalName": "wool_colored_red", + "displayName": "Red Wool" + }, + { + "internalName": "wool_colored_pink", + "displayName": "Pink Wool" + }, + { + "internalName": "repeater_off", + "displayName": "Repeater" + }, + { + "internalName": "leaves_spruce", + "displayName": "Spruce Leaves", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Evergreen", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "leaves_spruce_opaque", + "displayName": "Spruce Leaves (Opaque)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Evergreen", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "conduit_top", + "displayName": "Conduit (Break Particles)" + }, + { + "internalName": "turtle_egg_hatch_0", + "displayName": "Sea Turtle Egg (Stage 1)" + }, + { + "internalName": "melon_side", + "displayName": "Melon (Side)" + }, + { + "internalName": "melon_top", + "displayName": "Melon (Top)" + }, + { + "internalName": "cauldron_top", + "displayName": "Cauldron (Top)" + }, + { + "internalName": "cauldron_inner", + "displayName": "Cauldron (Inside)" + }, + { + "internalName": "sponge_wet", + "displayName": "Wet Sponge" + }, + { + "internalName": "mushroom_block_skin_stem", + "displayName": "Mushroom (Stem Block)" + }, + { + "internalName": "mushroom_block_inside", + "displayName": "Mushroom (Inside Block)" + }, + { + "internalName": "vine", + "displayName": "Vines", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "lapis_block", + "displayName": "Lapis Lazuli Block" + }, + { + "internalName": "wool_colored_green", + "displayName": "Green Wool" + }, + { + "internalName": "wool_colored_lime", + "displayName": "Lime Wool" + }, + { + "internalName": "repeater_on", + "displayName": "Redstone Repeater (On)" + }, + { + "internalName": "glass_pane_top", + "displayName": "Glass Pane (Top)" + }, + { + "internalName": "chest_top", + "displayName": "Chest (Break Particles)" + }, + { + "internalName": "ender_chest_top", + "displayName": "Ender Chest (Break Particles)" + }, + { + "internalName": "turtle_egg_hatch_1", + "displayName": "Sea Turtle Egg (Stage 2)" + }, + { + "internalName": "turtle_egg_hatch_2", + "displayName": "Sea Turtle Egg (Stage 3)" + }, + { + "internalName": "log_jungle", + "displayName": "Jungle Wood (Side)" + }, + { + "internalName": "cauldron_side", + "displayName": "Cauldron (Side)" + }, + { + "internalName": "cauldron_bottom", + "displayName": "Cauldron (Bottom)" + }, + { + "internalName": "brewing_stand_base", + "displayName": "Brewing Stand (Base)" + }, + { + "internalName": "brewing_stand", + "displayName": "Brewing Stand" + }, + { + "internalName": "endframe_top", + "displayName": "End Portal Frame (Top)" + }, + { + "internalName": "endframe_side", + "displayName": "End Portal Frame (Side)" + }, + { + "internalName": "lapis_ore", + "displayName": "Lapis Lazuli Ore" + }, + { + "internalName": "wool_colored_brown", + "displayName": "Brown Wool" + }, + { + "internalName": "wool_colored_yellow", + "displayName": "Yellow Wool" + }, + { + "internalName": "rail_golden", + "displayName": "Powered Rail" + }, + { + "internalName": "redstone_dust_cross", + "displayName": "Redstone Dust (Cross)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Tile_RedstoneDust", + "variants": [ + "Tile_RedstoneDust", + "Tile_RedstoneDustUnlit", + "Tile_RedstoneDustLitMin", + "Tile_RedstoneDustLitMax" + ] + } + }, + { + "internalName": "redstone_dust_line", + "displayName": "Redstone Dust (Line)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Tile_RedstoneDust", + "variants": [ + "Tile_RedstoneDust", + "Tile_RedstoneDustUnlit", + "Tile_RedstoneDustLitMin", + "Tile_RedstoneDustLitMax" + ] + } + }, + { + "internalName": "enchantment_top", + "displayName": "Enchantment Table (Top)" + }, + { + "internalName": "dragon_egg", + "displayName": "Dragon Egg" + }, + { + "internalName": "cocoa_2", + "displayName": "Cocoa (Stage 3)" + }, + { + "internalName": "cocoa_1", + "displayName": "Cocoa (Stage 2)" + }, + { + "internalName": "cocoa_0", + "displayName": "Cocoa (Stage 1)" + }, + { + "internalName": "emerald_ore", + "displayName": "Emerald Ore" + }, + { + "internalName": "trip_wire_source", + "displayName": "Tripwire Hook" + }, + { + "internalName": "trip_wire", + "displayName": "Tripwire" + }, + { + "internalName": "endframe_eye", + "displayName": "End Portal Frame (Eye)" + }, + { + "internalName": "end_stone", + "displayName": "End Stone" + }, + { + "internalName": "sandstone_top", + "displayName": "Sandstone (Top)" + }, + { + "internalName": "wool_colored_blue", + "displayName": "Blue Wool" + }, + { + "internalName": "wool_colored_light_blue", + "displayName": "Light Blue Wool" + }, + { + "internalName": "rail_golden_powered", + "displayName": "Powered Rail (On)" + }, + { + "internalName": "redstone_dust_cross_overlay", + "displayName": "Redstone Dust (Cross) (Overlay)" + }, + { + "internalName": "redstone_dust_line_overlay", + "displayName": "Redstone Dust (Line) (Overlay)" + }, + { + "internalName": "enchantment_side", + "displayName": "Enchantment Table (Side)" + }, + { + "internalName": "enchantment_bottom", + "displayName": "Enchantment Table (Bottom)" + }, + { + "internalName": "diamondRing", + "displayName": "Diamond Score Ring" + }, + { + "internalName": "itemframe_back", + "displayName": "Item Frame" + }, + { + "internalName": "flower_pot", + "displayName": "Flower Pot" + }, + { + "internalName": "comparator_off", + "displayName": "Redstone Comparator" + }, + { + "internalName": "comparator_on", + "displayName": "Redstone Comparator (On)" + }, + { + "internalName": "rail_activator", + "displayName": "Activator Rail" + }, + { + "internalName": "rail_activator_powered", + "displayName": "Activator Rail (On)" + }, + { + "internalName": "quartz_ore", + "displayName": "Nether Quartz Ore" + }, + { + "internalName": "sandstone_side", + "displayName": "Sandstone (Side)" + }, + { + "internalName": "wool_colored_purple", + "displayName": "Purple Wool" + }, + { + "internalName": "wool_colored_magenta", + "displayName": "Magenta Wool" + }, + { + "internalName": "detectorRail", + "displayName": "Detector Rail" + }, + { + "internalName": "leaves_jungle", + "displayName": "Jungle Leaves", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "leaves_jungle_opaque", + "displayName": "Jungle Leaves (Opaque)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "planks_spruce", + "displayName": "Spruce Planks" + }, + { + "internalName": "planks_jungle", + "displayName": "Jungle Planks" + }, + { + "internalName": "carrots_stage_0", + "displayName": "Carrots (Stage 1)" + }, + { + "internalName": "carrots_stage_1", + "displayName": "Carrots (Stage 2)" + }, + { + "internalName": "carrots_stage_2", + "displayName": "Carrots (Stage 3)" + }, + { + "internalName": "carrots_stage_3", + "displayName": "Carrots (Stage 4)" + }, + { + "internalName": "slime", + "displayName": "Slime Block" + }, + { + "internalName": "water", + "displayName": "Water", + "hasColourEntry": true, + "colourEntry": { + "isWaterColour": true, + "defaultName": "Water_Plains", + "variants": [ + "Water_Ocean", + "Water_Plains", + "Water_Desert", + "Water_ExtremeHills", + "Water_Forest", + "Water_Taiga", + "Water_Swampland", + "Water_River", + "Water_Hell", + "Water_Sky", + "Water_FrozenOcean", + "Water_FrozenRiver", + "Water_IcePlains", + "Water_IceMountains", + "Water_MushroomIsland", + "Water_MushroomIslandShore", + "Water_Beach", + "Water_DesertHills", + "Water_ForestHills", + "Water_TaigaHills", + "Water_ExtremeHillsEdge", + "Water_Jungle", + "Water_JungleHills", + "Water_JungleEdge", + "Water_DeepOcean", + "Water_StoneBeach", + "Water_ColdBeach", + "Water_BirchForest", + "Water_BirchForestHills", + "Water_RoofedForest", + "Water_ColdTaiga", + "Water_ColdTaigaHills", + "Water_MegaTaiga", + "Water_MegaTaigaHills", + "Water_ExtremeHillsPlus", + "Water_Savanna", + "Water_SavannaPlateau", + "Water_Mesa", + "Water_MesaPlateauF", + "Water_MesaPlateau" + ] + } + }, + { + "internalName": "water_flow", + "displayName": "Flowing Water", + "hasColourEntry": true, + "width": 2, + "height": 2, + "colourEntry": { + "isWaterColour": true, + "defaultName": "Water_Plains", + "variants": [ + "Water_Ocean", + "Water_Plains", + "Water_Desert", + "Water_ExtremeHills", + "Water_Forest", + "Water_Taiga", + "Water_Swampland", + "Water_River", + "Water_Hell", + "Water_Sky", + "Water_FrozenOcean", + "Water_FrozenRiver", + "Water_IcePlains", + "Water_IceMountains", + "Water_MushroomIsland", + "Water_MushroomIslandShore", + "Water_Beach", + "Water_DesertHills", + "Water_ForestHills", + "Water_TaigaHills", + "Water_ExtremeHillsEdge", + "Water_Jungle", + "Water_JungleHills", + "Water_JungleEdge", + "Water_DeepOcean", + "Water_StoneBeach", + "Water_ColdBeach", + "Water_BirchForest", + "Water_BirchForestHills", + "Water_RoofedForest", + "Water_ColdTaiga", + "Water_ColdTaigaHills", + "Water_MegaTaiga", + "Water_MegaTaigaHills", + "Water_ExtremeHillsPlus", + "Water_Savanna", + "Water_SavannaPlateau", + "Water_Mesa", + "Water_MesaPlateauF", + "Water_MesaPlateau" + ] + } + }, + { + "internalName": "water_flow", + "displayName": "" + }, + { + "internalName": "sandstone_bottom", + "displayName": "Sandstone (Bottom)" + }, + { + "internalName": "wool_colored_cyan", + "displayName": "Cyan Wool" + }, + { + "internalName": "wool_colored_orange", + "displayName": "Orange Wool" + }, + { + "internalName": "redstoneLight", + "displayName": "Redstone Lamp" + }, + { + "internalName": "redstoneLight_lit", + "displayName": "Redstone Lamp (On)" + }, + { + "internalName": "stonebrick_carved", + "displayName": "Chiseled Stone Bricks" + }, + { + "internalName": "planks_birch", + "displayName": "Birch Planks" + }, + { + "internalName": "anvil_base", + "displayName": "Anvil (Base)" + }, + { + "internalName": "anvil_top_damaged_1", + "displayName": "Anvil (Slightly Damaged) (Top)" + }, + { + "internalName": "quartz_block_chiseled_top", + "displayName": "Chiseled Quartz Block (Top)" + }, + { + "internalName": "quartz_block_lines_top", + "displayName": "Pillar Quartz Block (Top)" + }, + { + "internalName": "quartz_block_top", + "displayName": "Block of Quartz (Top)" + }, + { + "internalName": "hopper_outside", + "displayName": "Hopper (Side)" + }, + { + "internalName": "detectorRail_on", + "displayName": "Detector Rail (On)" + }, + { + "internalName": "water_flow", + "displayName": "" + }, + { + "internalName": "water_flow", + "displayName": "" + }, + { + "internalName": "nether_brick", + "displayName": "Nether Brick" + }, + { + "internalName": "wool_colored_silver", + "displayName": "Light Gray Wool" + }, + { + "internalName": "nether_wart_stage_0", + "displayName": "Nether Wart (Stage 1)" + }, + { + "internalName": "nether_wart_stage_1", + "displayName": "Nether Wart (Stage 2)" + }, + { + "internalName": "nether_wart_stage_2", + "displayName": "Nether Wart (Stage 3)" + }, + { + "internalName": "sandstone_carved", + "displayName": "Chiseled Sandstone" + }, + { + "internalName": "sandstone_smooth", + "displayName": "Smooth Sandstone" + }, + { + "internalName": "anvil_top", + "displayName": "Anvil (Top)" + }, + { + "internalName": "anvil_top_damaged_2", + "displayName": "Anvil (Very Damaged) (Top)" + }, + { + "internalName": "quartz_block_chiseled", + "displayName": "Chiseled Quartz Block (Side)" + }, + { + "internalName": "quartz_block_lines", + "displayName": "Pillar Quartz Block (Side)" + }, + { + "internalName": "quartz_block_side", + "displayName": "Block of Quartz (Side)" + }, + { + "internalName": "hopper_inside", + "displayName": "Hopper (Inside)" + }, + { + "internalName": "lava", + "displayName": "Lava" + }, + { + "internalName": "lava_flow", + "displayName": "Flowing Lava", + "width": 2, + "height": 2 + }, + { + "internalName": "lava_flow", + "displayName": "", + }, + { + "internalName": "destroy_0", + "displayName": "Destroy (Stage 1)" + }, + { + "internalName": "destroy_1", + "displayName": "Destroy (Stage 2)" + }, + { + "internalName": "destroy_2", + "displayName": "Destroy (Stage 3)" + }, + { + "internalName": "destroy_3", + "displayName": "Destroy (Stage 4)" + }, + { + "internalName": "destroy_4", + "displayName": "Destroy (Stage 5)" + }, + { + "internalName": "destroy_5", + "displayName": "Destroy (Stage 6)" + }, + { + "internalName": "destroy_6", + "displayName": "Destroy (Stage 7)" + }, + { + "internalName": "destroy_7", + "displayName": "Destroy (Stage 8)" + }, + { + "internalName": "destroy_8", + "displayName": "Destroy (Stage 9)" + }, + { + "internalName": "destroy_9", + "displayName": "Destroy (Stage 10)" + }, + { + "internalName": "hay_block_side", + "displayName": "Hay Bale (Side)" + }, + { + "internalName": "quartz_block_bottom", + "displayName": "Quartz Block (Bottom)" + }, + { + "internalName": "hopper_top", + "displayName": "Hopper (Top)" + }, + { + "internalName": "hay_block_top", + "displayName": "Hay Bale (Top)" + }, + { + "internalName": "lava_flow", + "displayName": "", + }, + { + "internalName": "lava_flow", + "displayName": "", + }, + { + "internalName": "coal_block", + "displayName": "Block of Coal" + }, + { + "internalName": "hardened_clay", + "displayName": "Terracotta" + }, + { + "internalName": "noteblock", + "displayName": "Note Block" + }, + { + "internalName": "stone_andesite", + "displayName": "Andesite" + }, + { + "internalName": "stone_andesite_smooth", + "displayName": "Polished Andesite" + }, + { + "internalName": "stone_diorite", + "displayName": "Diorite" + }, + { + "internalName": "stone_diorite_smooth", + "displayName": "Polished Diorite" + }, + { + "internalName": "stone_granite", + "displayName": "Granite" + }, + { + "internalName": "stone_granite_smooth", + "displayName": "Polished Granite" + }, + { + "internalName": "potatoes_stage_0", + "displayName": "Potatoes (Stage 1)" + }, + { + "internalName": "potatoes_stage_1", + "displayName": "Potatoes (Stage 2)" + }, + { + "internalName": "potatoes_stage_2", + "displayName": "Potatoes (Stage 3)" + }, + { + "internalName": "potatoes_stage_3", + "displayName": "Potatoes (Stage 4)" + }, + { + "internalName": "log_spruce_top", + "displayName": "Spruce Wood (Top)" + }, + { + "internalName": "log_jungle_top", + "displayName": "Jungle Wood (Top)" + }, + { + "internalName": "log_birch_top", + "displayName": "Birch Wood (Top)" + }, + { + "internalName": "hardened_clay_stained_black", + "displayName": "Black Terracotta" + }, + { + "internalName": "hardened_clay_stained_blue", + "displayName": "Blue Terracotta" + }, + { + "internalName": "hardened_clay_stained_brown", + "displayName": "Brown Terracotta" + }, + { + "internalName": "hardened_clay_stained_cyan", + "displayName": "Cyan Terracotta" + }, + { + "internalName": "hardened_clay_stained_gray", + "displayName": "Gray Terracotta" + }, + { + "internalName": "hardened_clay_stained_green", + "displayName": "Green Terracotta" + }, + { + "internalName": "hardened_clay_stained_light_blue", + "displayName": "Light Blue Terracotta" + }, + { + "internalName": "hardened_clay_stained_lime", + "displayName": "Lime Terracotta" + }, + { + "internalName": "hardened_clay_stained_magenta", + "displayName": "Magenta Terracotta" + }, + { + "internalName": "hardened_clay_stained_orange", + "displayName": "Orange Terracotta" + }, + { + "internalName": "hardened_clay_stained_pink", + "displayName": "Pink Terracotta" + }, + { + "internalName": "hardened_clay_stained_purple", + "displayName": "Purple Terracotta" + }, + { + "internalName": "hardened_clay_stained_red", + "displayName": "Red Terracotta" + }, + { + "internalName": "hardened_clay_stained_silver", + "displayName": "Light Gray Terracotta" + }, + { + "internalName": "hardened_clay_stained_white", + "displayName": "White Terracotta" + }, + { + "internalName": "hardened_clay_stained_yellow", + "displayName": "Yellow Terracotta" + }, + { + "internalName": "glass_black", + "displayName": "Black Stained Glass" + }, + { + "internalName": "glass_blue", + "displayName": "Blue Stained Glass" + }, + { + "internalName": "glass_brown", + "displayName": "Brown Stained Glass" + }, + { + "internalName": "glass_cyan", + "displayName": "Cyan Stained Glass" + }, + { + "internalName": "glass_gray", + "displayName": "Gray Stained Glass" + }, + { + "internalName": "glass_green", + "displayName": "Green Stained Glass" + }, + { + "internalName": "glass_light_blue", + "displayName": "Light Blue Stained Glass" + }, + { + "internalName": "glass_lime", + "displayName": "Lime Stained Glass" + }, + { + "internalName": "glass_magenta", + "displayName": "Magenta Stained Glass" + }, + { + "internalName": "glass_orange", + "displayName": "Orange Stained Glass" + }, + { + "internalName": "glass_pink", + "displayName": "Pink Stained Glass" + }, + { + "internalName": "glass_purple", + "displayName": "Purple Stained Glass" + }, + { + "internalName": "glass_red", + "displayName": "Red Stained Glass" + }, + { + "internalName": "glass_silver", + "displayName": "Light Gray Stained Glass" + }, + { + "internalName": "glass_white", + "displayName": "White Stained Glass" + }, + { + "internalName": "glass_yellow", + "displayName": "Yellow Stained Glass" + }, + { + "internalName": "glass_pane_top_black", + "displayName": "Black Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_blue", + "displayName": "Blue Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_brown", + "displayName": "Brown Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_cyan", + "displayName": "Cyan Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_gray", + "displayName": "Gray Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_green", + "displayName": "Green Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_light_blue", + "displayName": "Light Blue Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_lime", + "displayName": "Lime Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_magenta", + "displayName": "Magenta Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_orange", + "displayName": "Orange Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_pink", + "displayName": "Pink Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_purple", + "displayName": "Purple Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_red", + "displayName": "Red Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_silver", + "displayName": "Light Gray Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_white", + "displayName": "White Stained Glass Pane (Top)" + }, + { + "internalName": "glass_pane_top_yellow", + "displayName": "Yellow Stained Glass Pane (Top)" + }, + { + "internalName": "double_plant_fern_top", + "displayName": "Large Fern (Top)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "double_plant_grass_top", + "displayName": "Double Tall Grass (Top)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "double_plant_paeonia_top", + "displayName": "Peony (Top)" + }, + { + "internalName": "double_plant_rose_top", + "displayName": "Rose Bush (Top)" + }, + { + "internalName": "double_plant_syringa_top", + "displayName": "Lilac (Top)" + }, + { + "internalName": "flower_tulip_orange", + "displayName": "Orange Tulip" + }, + { + "internalName": "double_plant_sunflower_top", + "displayName": "Sunflower (Top)" + }, + { + "internalName": "double_plant_sunflower_front", + "displayName": "Sunflower (Front)" + }, + { + "internalName": "log_acacia", + "displayName": "Acacia Wood (Side)" + }, + { + "internalName": "log_acacia_top", + "displayName": "Acacia Wood (Top)" + }, + { + "internalName": "planks_acacia", + "displayName": "Acacia Planks" + }, + { + "internalName": "leaves_acacia", + "displayName": "Acacia Leaves", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "leaves_acacia_fast", + "displayName": "Acacia Leaves (Opaque)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "prismarine_bricks", + "displayName": "Prismarine Bricks" + }, + { + "internalName": "red_sand", + "displayName": "Red Sand" + }, + { + "internalName": "red_sandstone_top", + "displayName": "Red Sandstone (Top)" + }, + { + "internalName": "double_plant_fern_bottom", + "displayName": "Large Fern (Bottom)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "double_plant_grass_bottom", + "displayName": "Double Tall Grass (Bottom)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Grass_Common", + "variants": [ + "Grass_Common", + "Grass_Mesa", + "Grass_Swamp1", + "Grass_Swamp2" + ] + } + }, + { + "internalName": "double_plant_paeonia_bottom", + "displayName": "Peony (Bottom)" + }, + { + "internalName": "double_plant_rose_bottom", + "displayName": "Rose Bush (Bottom)" + }, + { + "internalName": "double_plant_syringa_bottom", + "displayName": "Lilac (Bottom)" + }, + { + "internalName": "flower_tulip_pink", + "displayName": "Pink Tulip" + }, + { + "internalName": "double_plant_sunflower_bottom", + "displayName": "Sunflower (Bottom)" + }, + { + "internalName": "double_plant_sunflower_back", + "displayName": "Sunflower (Back)" + }, + { + "internalName": "log_big_oak", + "displayName": "Dark Oak Wood (Side)" + }, + { + "internalName": "log_big_oak_top", + "displayName": "Dark Oak Wood (Top)" + }, + { + "internalName": "planks_big_oak", + "displayName": "Dark Oak Planks" + }, + { + "internalName": "leaves_big_oak", + "displayName": "Dark Oak Leaves", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "leaves_big_oak_fast", + "displayName": "Dark Oak Leaves (Opaque)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Default", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "prismarine_dark", + "displayName": "Dark Prismarine" + }, + { + "internalName": "red_sandstone_bottom", + "displayName": "Red Sandstone (Bottom)" + }, + { + "internalName": "red_sandstone_normal", + "displayName": "Red Sandstone (Side)" + }, + { + "internalName": "flower_alium", + "displayName": "Allium" + }, + { + "internalName": "flower_blue_orchid", + "displayName": "Blue Orchid" + }, + { + "internalName": "flower_houstonia", + "displayName": "Azure Bluet" + }, + { + "internalName": "flower_oxeye_daisy", + "displayName": "Oxeye Daisy" + }, + { + "internalName": "flower_tulip_red", + "displayName": "Red Tulip" + }, + { + "internalName": "flower_tulip_white", + "displayName": "White Tulip" + }, + { + "internalName": "sapling_acacia", + "displayName": "Acacia Sapling" + }, + { + "internalName": "sapling_roofed_oak", + "displayName": "Dark Oak Sapling" + }, + { + "internalName": "coarse_dirt", + "displayName": "Coarse Dirt" + }, + { + "internalName": "dirt_podzol_side", + "displayName": "Podzol (Side)" + }, + { + "internalName": "dirt_podzol_top", + "displayName": "Podzol (Top)" + }, + { + "internalName": "leaves_birch", + "displayName": "Birch Leaves", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Birch", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "leaves_birch_fast", + "displayName": "Birch Leaves (Opaque)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Foliage_Birch", + "variants": [ + "Foliage_Default", + "Foliage_Evergreen", + "Foliage_Birch", + "Foliage_Mesa", + "Foliage_Swampland" + ] + } + }, + { + "internalName": "prismarine_rough", + "displayName": "Prismarine" + }, + { + "internalName": "red_sandstone_carved", + "displayName": "Chiseled Red Sandstone" + }, + { + "internalName": "red_sandstone_smooth", + "displayName": "Smooth Red Standstone" + }, + { + "internalName": "door_acacia_upper", + "displayName": "Acacia Door (Top)" + }, + { + "internalName": "door_birch_upper", + "displayName": "Birch Door (Top)" + }, + { + "internalName": "door_dark_oak_upper", + "displayName": "Dark Oak Door (Top)" + }, + { + "internalName": "door_jungle_upper", + "displayName": "Jungle Door (Top)" + }, + { + "internalName": "door_spruce_upper", + "displayName": "Spruce Door (Top)" + }, + { + "internalName": "chorus_flower", + "displayName": "Chorus Flower" + }, + { + "internalName": "chorus_flower_dead", + "displayName": "Chorus Flower (Dead)" + }, + { + "internalName": "chorus_flower_plant", + "displayName": "Chorus Plant" + }, + { + "internalName": "end_bricks", + "displayName": "End Stone Bricks" + }, + { + "internalName": "grass_path_side", + "displayName": "Grass Path (Side)" + }, + { + "internalName": "grass_path_top", + "displayName": "Grass Path (Top)" + }, + { + "internalName": "barrier", + "displayName": "Barrier" + }, + { + "internalName": "ice_packed", + "displayName": "Packed Ice" + }, + { + "internalName": "sea_lantern", + "displayName": "Sea Lantern" + }, + { + "internalName": "daylight_detector_inverted_top", + "displayName": "Daylight Sensor (Inverted) (Top)" + }, + { + "internalName": "iron_trapdoor", + "displayName": "Iron Trapdoor" + }, + { + "internalName": "door_acacia_lower", + "displayName": "Acacia Door (Bottom)" + }, + { + "internalName": "door_birch_lower", + "displayName": "Birch Door (Bottom)" + }, + { + "internalName": "door_dark_oak_lower", + "displayName": "Dark Oak Door (Bottom)" + }, + { + "internalName": "door_jungle_lower", + "displayName": "Jungle Door (Bottom)" + }, + { + "internalName": "door_spruce_lower", + "displayName": "Spruce Door (Bottom)" + }, + { + "internalName": "purpur_block", + "displayName": "Purpur Block" + }, + { + "internalName": "purpur_pillar", + "displayName": "Purpur Pillar (Side)" + }, + { + "internalName": "purpur_pillar_top", + "displayName": "Purpur Pillar (Top)" + }, + { + "internalName": "end_rod", + "displayName": "End Rod" + }, + { + "internalName": "magma", + "displayName": "Magma Block" + }, + { + "internalName": "nether_wart_block", + "displayName": "Nether Wart Block" + }, + { + "internalName": "red_nether_brick", + "displayName": "Red Nether Brick" + }, + { + "internalName": "frosted_ice_0", + "displayName": "Frosted Ice (Stage 1)" + }, + { + "internalName": "frosted_ice_1", + "displayName": "Frosted Ice (Stage 2)" + }, + { + "internalName": "frosted_ice_2", + "displayName": "Frosted Ice (Stage 3)" + }, + { + "internalName": "frosted_ice_3", + "displayName": "Frosted Ice (Stage 4)" + }, + { + "internalName": "beetroots_stage_0", + "displayName": "Beetroots (Stage 1)" + }, + { + "internalName": "beetroots_stage_1", + "displayName": "Beetroots (Stage 2)" + }, + { + "internalName": "beetroots_stage_2", + "displayName": "Beetroots (Stage 3)" + }, + { + "internalName": "beetroots_stage_3", + "displayName": "Beetroots (Stage 4)" + }, + { + "internalName": "chain_command_block_back", + "displayName": "Chain Command Block (Back)" + }, + { + "internalName": "chain_command_block_conditional", + "displayName": "Chain Command Block (Conditional) (Side)" + }, + { + "internalName": "chain_command_block_front", + "displayName": "Chain Command Block (Front)" + }, + { + "internalName": "chain_command_block_side", + "displayName": "Chain Command Block (Side)" + }, + { + "internalName": "command_block_back", + "displayName": "Command Block (Back)" + }, + { + "internalName": "command_block_conditional", + "displayName": "Command Block (Conditional) (Side)" + }, + { + "internalName": "command_block_front", + "displayName": "Command Block (Front)" + }, + { + "internalName": "command_block_side", + "displayName": "Command Block (Side)" + }, + { + "internalName": "repeating_command_block_back", + "displayName": "Repeating Command Block (Back)" + }, + { + "internalName": "repeating_command_block_conditional", + "displayName": "Repeating Command Block (Conditional) (Side)" + }, + { + "internalName": "repeating_command_block_front", + "displayName": "Repeating Command Block (Front)" + }, + { + "internalName": "repeating_command_block_side", + "displayName": "Repeating Command Block (Side)" + }, + { + "internalName": "bone_block_side", + "displayName": "Bone Block (Side)" + }, + { + "internalName": "bone_block_top", + "displayName": "Bone Block (Top)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "observer_front", + "displayName": "Observer (Front)" + }, + { + "internalName": "observer_side", + "displayName": "Observer (Side)" + }, + { + "internalName": "observer_back", + "displayName": "Observer (Back)" + }, + { + "internalName": "observer_back_lit", + "displayName": "Observer (On) (Back)" + }, + { + "internalName": "observer_top", + "displayName": "Observer (Top and Bottom)" + }, + { + "internalName": "goldRing", + "displayName": "Gold Score Ring" + }, + { + "internalName": "emeraldRing", + "displayName": "Emerald Score Ring" + }, + { + "internalName": "structure_block", + "displayName": "Structure Block" + }, + { + "internalName": "structure_block_corner", + "displayName": "Structure Block (Corner)" + }, + { + "internalName": "structure_block_data", + "displayName": "Structure Block (Data)" + }, + { + "internalName": "structure_block_load", + "displayName": "Structure Block (Load)" + }, + { + "internalName": "structure_block_save", + "displayName": "Structure Block (Save)" + }, + { + "internalName": "concrete_black", + "displayName": "Black Concrete" + }, + { + "internalName": "concrete_blue", + "displayName": "Blue Concrete" + }, + { + "internalName": "concrete_brown", + "displayName": "Brown Concrete" + }, + { + "internalName": "concrete_cyan", + "displayName": "Cyan Concrete" + }, + { + "internalName": "concrete_gray", + "displayName": "Gray Concrete" + }, + { + "internalName": "concrete_green", + "displayName": "Green Concrete" + }, + { + "internalName": "concrete_light_blue", + "displayName": "Light Blue Concrete" + }, + { + "internalName": "concrete_lime", + "displayName": "Lime Concrete" + }, + { + "internalName": "concrete_magenta", + "displayName": "Magenta Concrete" + }, + { + "internalName": "concrete_orange", + "displayName": "Orange Concrete" + }, + { + "internalName": "concrete_pink", + "displayName": "Pink Concrete" + }, + { + "internalName": "concrete_purple", + "displayName": "Purple Concrete" + }, + { + "internalName": "concrete_red", + "displayName": "Red Concrete" + }, + { + "internalName": "concrete_silver", + "displayName": "Light Gray Concrete" + }, + { + "internalName": "concrete_white", + "displayName": "White Concrete" + }, + { + "internalName": "concrete_yellow", + "displayName": "Yellow Concrete" + }, + { + "internalName": "concrete_powder_black", + "displayName": "Black Concrete Powder" + }, + { + "internalName": "concrete_powder_blue", + "displayName": "Blue Concrete Powder" + }, + { + "internalName": "concrete_powder_brown", + "displayName": "Brown Concrete Powder" + }, + { + "internalName": "concrete_powder_cyan", + "displayName": "Cyan Concrete Powder" + }, + { + "internalName": "concrete_powder_gray", + "displayName": "Gray Concrete Powder" + }, + { + "internalName": "concrete_powder_green", + "displayName": "Green Concrete Powder" + }, + { + "internalName": "concrete_powder_light_blue", + "displayName": "Light Blue Concrete Powder" + }, + { + "internalName": "concrete_powder_lime", + "displayName": "Lime Concrete Powder" + }, + { + "internalName": "concrete_powder_magenta", + "displayName": "Magenta Concrete Powder" + }, + { + "internalName": "concrete_powder_orange", + "displayName": "Orange Concrete Powder" + }, + { + "internalName": "concrete_powder_pink", + "displayName": "Pink Concrete Powder" + }, + { + "internalName": "concrete_powder_purple", + "displayName": "Purple Concrete Powder" + }, + { + "internalName": "concrete_powder_red", + "displayName": "Red Concrete Powder" + }, + { + "internalName": "concrete_powder_silver", + "displayName": "Light Gray Concrete Powder" + }, + { + "internalName": "concrete_powder_white", + "displayName": "White Concrete Powder" + }, + { + "internalName": "concrete_powder_yellow", + "displayName": "Yellow Concrete Powder" + }, + { + "internalName": "glazed_terracotta_black", + "displayName": "Black Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_blue", + "displayName": "Blue Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_brown", + "displayName": "Brown Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_cyan", + "displayName": "Cyan Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_gray", + "displayName": "Gray Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_green", + "displayName": "Green Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_light_blue", + "displayName": "Light Blue Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_lime", + "displayName": "Lime Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_magenta", + "displayName": "Magenta Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_orange", + "displayName": "Orange Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_pink", + "displayName": "Pink Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_purple", + "displayName": "Purple Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_red", + "displayName": "Red Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_silver", + "displayName": "Light Gray Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_white", + "displayName": "White Glazed Terracotta" + }, + { + "internalName": "glazed_terracotta_yellow", + "displayName": "Yellow Glazed Terracotta" + }, + { + "internalName": "shulker_top", + "displayName": "Shulker Box (Break Particles)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Shulker_Box_Purple", + "variants": [ + "Shulker_Box_Black", + "Shulker_Box_Blue", + "Shulker_Box_Brown", + "Shulker_Box_Cyan", + "Shulker_Box_Grey", + "Shulker_Box_Green", + "Shulker_Box_Light_Blue", + "Shulker_Box_Light_Green", + "Shulker_Box_Magenta", + "Shulker_Box_Orange", + "Shulker_Box_Pink", + "Shulker_Box_Purple", + "Shulker_Box_Red", + "Shulker_Box_Silver", + "Shulker_Box_White", + "Shulker_Box_Yellow" + ] + } + }, + { + "internalName": "shulker_top_overlay", + "displayName": "Shulker Box (Break Particles) (Overlay) (Unused)" + }, + { + "internalName": "cauldron_water", + "displayName": "Cauldron Water", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "Cauldron_Water", + "variants": [ + "Cauldron_Water", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "seagrass_doubletall_top", + "displayName": "Double Tall Seagrass (Top)" + }, + { + "internalName": "coral_blue", + "displayName": "Tube Coral Block" + }, + { + "internalName": "coral_purple", + "displayName": "Bubble Coral Block" + }, + { + "internalName": "coral_pink", + "displayName": "Brain Coral Block" + }, + { + "internalName": "coral_red", + "displayName": "Fire Coral Block" + }, + { + "internalName": "coral_yellow", + "displayName": "Horn Coral Block" + }, + { + "internalName": "coral_plant_blue", + "displayName": "Tube Coral" + }, + { + "internalName": "coral_plant_purple", + "displayName": "Bubble Coral" + }, + { + "internalName": "coral_plant_pink", + "displayName": "Brain Coral" + }, + { + "internalName": "coral_plant_red", + "displayName": "Fire Coral" + }, + { + "internalName": "coral_plant_yellow", + "displayName": "Horn Coral" + }, + { + "internalName": "sea_pickle", + "displayName": "Sea Pickle" + }, + { + "internalName": "blue_ice", + "displayName": "Blue Ice" + }, + { + "internalName": "dried_kelp_top", + "displayName": "Dried Kelp Block (Top)" + }, + { + "internalName": "dried_kelp_side", + "displayName": "Dried Kelp Block (Side)" + }, + { + "internalName": "seagrass_carried", + "displayName": "Seagrass (Item)" + }, + { + "internalName": "seagrass_doubletall_bottom", + "displayName": "Double Tall Seagrass (Bottom)" + }, + { + "internalName": "coral_blue_dead", + "displayName": "Dead Tube Coral Block" + }, + { + "internalName": "coral_purple_dead", + "displayName": "Dead Bubble Coral Block" + }, + { + "internalName": "coral_pink_dead", + "displayName": "Dead Brain Coral Block" + }, + { + "internalName": "coral_red_dead", + "displayName": "Dead Fire Coral Block" + }, + { + "internalName": "coral_yellow_dead", + "displayName": "Dead Horn Coral Block" + }, + { + "internalName": "coral_fan_blue", + "displayName": "Tube Coral Fan" + }, + { + "internalName": "coral_fan_purple", + "displayName": "Bubble Coral Fan" + }, + { + "internalName": "coral_fan_pink", + "displayName": "Brain Coral Fan" + }, + { + "internalName": "coral_fan_red", + "displayName": "Fire Coral Fan" + }, + { + "internalName": "coral_fan_yellow", + "displayName": "Horn Coral Fan" + }, + { + "internalName": "bamboo_stem", + "displayName": "Bamboo (Stem) [PS4 ONLY]" + }, + { + "internalName": "bamboo_leaf_small", + "displayName": "Bamboo (Small Leaves) [PS4 ONLY]" + }, + { + "internalName": "kelp_a", + "displayName": "Kelp (Bottom)" + }, + { + "internalName": "kelp_a", + "displayName": "" + }, + { + "internalName": "kelp_a", + "displayName": "" + }, + { + "internalName": "kelp_a", + "displayName": "" + }, + { + "internalName": "kelp_top_a", + "displayName": "Kelp (Top)" + }, + { + "internalName": "kelp_top_a", + "displayName": "" + }, + { + "internalName": "kelp_top_a", + "displayName": "" + }, + { + "internalName": "kelp_top_a", + "displayName": "" + }, + { + "internalName": "seagrass", + "displayName": "Seagrass" + }, + { + "internalName": "coral_fan_blue_dead", + "displayName": "Dead Tube Coral Fan" + }, + { + "internalName": "coral_fan_purple_dead", + "displayName": "Dead Bubble Coral Fan" + }, + { + "internalName": "coral_fan_pink_dead", + "displayName": "Dead Brain Coral Fan" + }, + { + "internalName": "coral_fan_red_dead", + "displayName": "Dead Fire Coral Fan" + }, + { + "internalName": "coral_fan_yellow_dead", + "displayName": "Dead Horn Coral Fan" + }, + { + "internalName": "bamboo_leaf", + "displayName": "Bamboo (Leaves) [PS4 ONLY]" + }, + { + "internalName": "spruce_trapdoor", + "displayName": "Spruce Trapdoor" + }, + { + "internalName": "stripped_log_oak", + "displayName": "Stripped Oak Log (Side)" + }, + { + "internalName": "stripped_log_oak_top", + "displayName": "Stripped Oak Log (Top)" + }, + { + "internalName": "stripped_log_acacia", + "displayName": "Stripped Acacia Log (Side)" + }, + { + "internalName": "stripped_log_acacia_top", + "displayName": "Stripped Acacia Log (Top)" + }, + { + "internalName": "stripped_log_birch", + "displayName": "Stripped Birch Log (Side)" + }, + { + "internalName": "stripped_log_birch_top", + "displayName": "Stripped Birch Log (Top)" + }, + { + "internalName": "stripped_log_dark_oak", + "displayName": "Stripped Dark Oak Log (Side)" + }, + { + "internalName": "stripped_log_dark_oak_top", + "displayName": "Stripped Dark Oak Log (Top)" + }, + { + "internalName": "stripped_log_jungle", + "displayName": "Stripped Jungle Log (Side)" + }, + { + "internalName": "stripped_log_jungle_top", + "displayName": "Stripped Birch Log (Top)" + }, + { + "internalName": "stripped_log_spruce", + "displayName": "Stripped Spruce Log (Side)" + }, + { + "internalName": "stripped_log_spruce_top", + "displayName": "Stripped Spruce Log (Top)" + }, + { + "internalName": "acacia_trapdoor", + "displayName": "Acacia Trapdoor" + }, + { + "internalName": "birch_trapdoor", + "displayName": "Birch Trapdoor" + }, + { + "internalName": "dark_oak_trapdoor", + "displayName": "Dark Oak Trapdoor" + }, + { + "internalName": "jungle_trapdoor", + "displayName": "Jungle Trapdoor" + }, + { + "internalName": "bamboo_sapling", + "displayName": "Bamboo Sapling [PS4 ONLY]" + }, + { + "internalName": "bamboo_singleleaf", + "displayName": "Bamboo (Single Leaf) [PS4 ONLY]" + }, + { + "internalName": "flower_lily_of_the_valley", + "displayName": "Lily of the Valley [PS4 ONLY]" + }, + { + "internalName": "flower_cornflower", + "displayName": "Cornflower [PS4 ONLY]" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "berry_bush_sapling", + "displayName": "Sweet Berry Bush (Stage 1) [PS4 ONLY]" + }, + { + "internalName": "berry_bush_no_berries", + "displayName": "Sweet Berry Bush (Stage 2) [PS4 ONLY]" + }, + { + "internalName": "berry_bush_some_berries", + "displayName": "Sweet Berry Bush (Stage 3) [PS4 ONLY]" + }, + { + "internalName": "berry_bush_full_berries", + "displayName": "Sweet Berry Bush (Stage 4) [PS4 ONLY]" + }, + { + "internalName": "campfire_log", + "displayName": "Campfire (Log) [PS4 ONLY]" + }, + { + "internalName": "campfire_log_lit", + "displayName": "Campfire (Log) (Lit) [PS4 ONLY]" + }, + { + "internalName": "campfire_smoke", + "displayName": "Campfire (Smoke) [PS4 ONLY]" + }, + { + "internalName": "campfire", + "displayName": "Campfire (Flame) [PS4 ONLY]" + }, + { + "internalName": "scaffolding_side", + "displayName": "Scaffolding (Side) [PS4 ONLY]" + }, + { + "internalName": "scaffolding_bottom", + "displayName": "Scaffolding (Bottom) [PS4 ONLY]" + }, + { + "internalName": "scaffolding_top", + "displayName": "Scaffolding (Top) [PS4 ONLY]" + }, + { + "internalName": "barrel_side", + "displayName": "Barrel (Side) [PS4 ONLY]" + }, + { + "internalName": "barrel_top", + "displayName": "Barrel (Top) [PS4 ONLY]" + }, + { + "internalName": "barrel_bottom", + "displayName": "Barrel (Bottom) [PS4 ONLY]" + }, + { + "internalName": "bell_side", + "displayName": "Bell (Side) [PS4 ONLY]" + }, + { + "internalName": "bell_top", + "displayName": "Bell (Top) [PS4 ONLY]" + }, + { + "internalName": "bell_bottom", + "displayName": "Bell (Bottom) [PS4 ONLY]" + }, + { + "internalName": "lantern", + "displayName": "Lantern [PS4 ONLY]" + }, + { + "internalName": "jigsaw_side", + "displayName": "Jigsaw (Side) [PS4 ONLY]" + }, + { + "internalName": "jigsaw_top", + "displayName": "Jigsaw (Top) [PS4 ONLY]" + }, + { + "internalName": "blast_furnace_front", + "displayName": "Blast Furnace (Front) [PS4 ONLY]" + }, + { + "internalName": "blast_furnace_front_on", + "displayName": "Blast Furnace (Front) (Lit) [PS4 ONLY]" + }, + { + "internalName": "blast_furnace_side", + "displayName": "Blast Furnace (Side) [PS4 ONLY]" + }, + { + "internalName": "blast_furnace_top", + "displayName": "Blast Furnace (Top) [PS4 ONLY]" + }, + { + "internalName": "grindstone_side", + "displayName": "Grindstone (Side) [PS4 ONLY]" + }, + { + "internalName": "grindstone_round", + "displayName": "Grindstone (Round) [PS4 ONLY]" + }, + { + "internalName": "grindstone_pivot", + "displayName": "Grindstone (Pivot) [PS4 ONLY]" + }, + { + "internalName": "cartography_table_side1", + "displayName": "Cartography Table (Back) [PS4 ONLY]" + }, + { + "internalName": "cartography_table_side2", + "displayName": "Cartography Table (Right Side) [PS4 ONLY]" + }, + { + "internalName": "cartography_table_side3", + "displayName": "Cartography Table (Front and Left Side) [PS4 ONLY]" + }, + { + "internalName": "cartography_table_top", + "displayName": "Cartography Table (Top) [PS4 ONLY]" + }, + { + "internalName": "lectern_sides", + "displayName": "Lectern (Side) [PS4 ONLY]" + }, + { + "internalName": "lectern_front", + "displayName": "Lectern (Front) [PS4 ONLY]" + }, + { + "internalName": "lectern_base", + "displayName": "Lectern (Base) [PS4 ONLY]" + }, + { + "internalName": "lectern_top", + "displayName": "Lectern (Top) [PS4 ONLY]" + }, + { + "internalName": "loom_side", + "displayName": "Loom (Side) [PS4 ONLY]" + }, + { + "internalName": "loom_front", + "displayName": "Loom (Front) [PS4 ONLY]" + }, + { + "internalName": "loom_top", + "displayName": "Loom (Top) [PS4 ONLY]" + }, + { + "internalName": "loom_bottom", + "displayName": "Loom (Bottom) [PS4 ONLY]" + }, + { + "internalName": "smithing_table_side", + "displayName": "Smithing Table (Side) [PS4 ONLY]" + }, + { + "internalName": "smithing_table_front", + "displayName": "Smithing Table (Front) [PS4 ONLY]" + }, + { + "internalName": "smithing_table_top", + "displayName": "Smithing Table (Top) [PS4 ONLY]" + }, + { + "internalName": "composter_top", + "displayName": "Composter (Top) [PS4 ONLY]" + }, + { + "internalName": "fletcher_table_side2", + "displayName": "Fletching Table (Front and Back) [PS4 ONLY]" + }, + { + "internalName": "fletcher_table_side1", + "displayName": "Fletching Table (Side) [PS4 ONLY]" + }, + { + "internalName": "fletcher_table_top", + "displayName": "Fletching Table (Top) [PS4 ONLY]" + }, + { + "internalName": "stonecutter2_saw", + "displayName": "Stonecutter (Saw) [PS4 ONLY]" + }, + { + "internalName": "stonecutter2_side", + "displayName": "Stonecutter (Side) [PS4 ONLY]" + }, + { + "internalName": "stonecutter2_top", + "displayName": "Stonecutter (Top) [PS4 ONLY]" + }, + { + "internalName": "stonecutter2_bottom", + "displayName": "Stonecutter (Bottom) [PS4 ONLY]" + }, + { + "internalName": "smoker_side", + "displayName": "Smoker (Side) [PS4 ONLY]" + }, + { + "internalName": "smoker_front", + "displayName": "Smoker (Front) [PS4 ONLY]" + }, + { + "internalName": "smoker_front_on", + "displayName": "Smoker (Front) (Lit) [PS4 ONLY]" + }, + { + "internalName": "smoker_top", + "displayName": "Smoker (Top) [PS4 ONLY]" + }, + { + "internalName": "smoker_bottom", + "displayName": "Smoker (Bottom) [PS4 ONLY]" + }, + { + "internalName": "compost", + "displayName": "Compost [PS4 ONLY]" + }, + { + "internalName": "compost_ready", + "displayName": "Compost (Ready) [PS4 ONLY]" + }, + { + "internalName": "composter_bottom", + "displayName": "Composter (Bottom) [PS4 ONLY]" + }, + { + "internalName": "composter_side", + "displayName": "Composter (Side) [PS4 ONLY]" + }, + { + "internalName": "barrel_top_open", + "displayName": "Barrel (Top) (Open) [PS4 ONLY]" + }, + { + "internalName": "smithing_table_bottom", + "displayName": "Smithing Table (Bottom) [PS4 ONLY]" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + } + ] +} diff --git a/PCK-Studio/Resources/atlases/experienceOrbData.json b/PCK-Studio/Resources/atlases/experienceOrbData.json new file mode 100644 index 00000000..90a6d2fe --- /dev/null +++ b/PCK-Studio/Resources/atlases/experienceOrbData.json @@ -0,0 +1,124 @@ +{ + "COMMENT_1": "JSON by MattNL", + "experience_orbs": [ + { + "internalName": "experience_orb_0", + "displayName": "Experience Orb (Size 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_1", + "displayName": "Experience Orb (Size 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_2", + "displayName": "Experience Orb (Size 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_3", + "displayName": "Experience Orb (Size 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_4", + "displayName": "Experience Orb (Size 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_5", + "displayName": "Experience Orb (Size 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_6", + "displayName": "Experience Orb (Size 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_7", + "displayName": "Experience Orb (Size 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_8", + "displayName": "Experience Orb (Size 9)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_9", + "displayName": "Experience Orb (Size 10)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "experience_orb_10", + "displayName": "Experience Orb (Size 11)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "experience_orb", + "variants": ["experience_orb"] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + } + ] +} \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/explosionData.json b/PCK-Studio/Resources/atlases/explosionData.json new file mode 100644 index 00000000..77ae7b56 --- /dev/null +++ b/PCK-Studio/Resources/atlases/explosionData.json @@ -0,0 +1,197 @@ +{ + "COMMENT_1": "JSON by MattNL", + "explosion": [ + { + "internalName": "explosion_0", + "displayName": "Explosion (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_1", + "displayName": "Explosion (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_2", + "displayName": "Explosion (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_3", + "displayName": "Explosion (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_4", + "displayName": "Explosion (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_5", + "displayName": "Explosion (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_6", + "displayName": "Explosion (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_7", + "displayName": "Explosion (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_8", + "displayName": "Explosion (Stage 9)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_9", + "displayName": "Explosion (Stage 10)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_10", + "displayName": "Explosion (Stage 11)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_11", + "displayName": "Explosion (Stage 12)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_12", + "displayName": "Explosion (Stage 13)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_13", + "displayName": "Explosion (Stage 14)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_14", + "displayName": "Explosion (Stage 15)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + }, + { + "internalName": "explosion_15", + "displayName": "Explosion (Stage 16)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Explode", + "variants": [ + "Particle_Explode", + "Particle_HugeExplosion" + ] + } + } + ] +} \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/itemData.json b/PCK-Studio/Resources/atlases/itemData.json new file mode 100644 index 00000000..e69e114d --- /dev/null +++ b/PCK-Studio/Resources/atlases/itemData.json @@ -0,0 +1,1366 @@ +{ + "COMMENT_1": "Tile data research by MattNL", + "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", + "items": [ + { + "internalName": "helmetCloth", + "displayName": "Leather Cap", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "Armour_Default_Leather_Colour", + "variants": [ "Armour_Default_Leather_Colour" ] + } + }, + { + "internalName": "helmetChain", + "displayName": "Chain Helmet" + }, + { + "internalName": "helmetIron", + "displayName": "Iron Helmet" + }, + { + "internalName": "helmetDiamond", + "displayName": "Diamond Helmet" + }, + { + "internalName": "helmetGold", + "displayName": "Golden Helmet" + }, + { + "internalName": "flintAndSteel", + "displayName": "Flint and Steel" + }, + { + "internalName": "flint", + "displayName": "Flint" + }, + { + "internalName": "coal", + "displayName": "Coal" + }, + { + "internalName": "string", + "displayName": "String" + }, + { + "internalName": "seeds", + "displayName": "Seeds" + }, + { + "internalName": "apple", + "displayName": "Apple" + }, + { + "internalName": "appleGold", + "displayName": "Golden Apple" + }, + { + "internalName": "egg", + "displayName": "Egg" + }, + { + "internalName": "sugar", + "displayName": "Sugar" + }, + { + "internalName": "snowball", + "displayName": "Snowball" + }, + { + "internalName": "elytra", + "displayName": "Elytra" + }, + { + "internalName": "chestplateCloth", + "displayName": "Leather Tunic", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "Armour_Default_Leather_Colour", + "variants": [ "Armour_Default_Leather_Colour" ] + } + }, + { + "internalName": "chestplateChain", + "displayName": "Chain Chestplate" + }, + { + "internalName": "chestplateIron", + "displayName": "Iron Chestplate" + }, + { + "internalName": "chestplateDiamond", + "displayName": "Diamond Chestplate" + }, + { + "internalName": "chestplateGold", + "displayName": "Golden Chestplate" + }, + { + "internalName": "bow", + "displayName": "Bow" + }, + { + "internalName": "brick", + "displayName": "Brick" + }, + { + "internalName": "ingotIron", + "displayName": "Iron Ingot" + }, + { + "internalName": "feather", + "displayName": "Feather" + }, + { + "internalName": "wheat", + "displayName": "Wheat" + }, + { + "internalName": "painting", + "displayName": "Painting" + }, + { + "internalName": "reeds", + "displayName": "Sugar Canes" + }, + { + "internalName": "bone", + "displayName": "Bone" + }, + { + "internalName": "cake", + "displayName": "Cake" + }, + { + "internalName": "slimeball", + "displayName": "Slimeball" + }, + { + "internalName": "broken_elytra", + "displayName": "Elytra (Broken)" + }, + { + "internalName": "leggingsCloth", + "displayName": "Leather Pants", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "Armour_Default_Leather_Colour", + "variants": [ "Armour_Default_Leather_Colour" ] + } + }, + { + "internalName": "leggingsChain", + "displayName": "Chain Leggings" + }, + { + "internalName": "leggingsIron", + "displayName": "Iron Leggings" + }, + { + "internalName": "leggingsDiamond", + "displayName": "Diamond Leggings" + }, + { + "internalName": "leggingsGold", + "displayName": "Golden Leggings" + }, + { + "internalName": "arrow", + "displayName": "Arrow" + }, + { + "internalName": "end_crystal", + "displayName": "End Crystal" + }, + { + "internalName": "ingotGold", + "displayName": "Gold Ingot" + }, + { + "internalName": "sulphur", + "displayName": "Gunpowder" + }, + { + "internalName": "bread", + "displayName": "Bread" + }, + { + "internalName": "sign", + "displayName": "Oak Sign" + }, + { + "internalName": "doorWood", + "displayName": "Oak Door" + }, + { + "internalName": "doorIron", + "displayName": "Iron Door" + }, + { + "internalName": "bed", + "displayName": "Bed" + }, + { + "internalName": "fireball", + "displayName": "Fire Charge" + }, + { + "internalName": "chorus_fruit", + "displayName": "Chorus Fruit" + }, + { + "internalName": "bootsCloth", + "displayName": "Leather Boots", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "Armour_Default_Leather_Colour", + "variants": [ "Armour_Default_Leather_Colour" ] + } + }, + { + "internalName": "bootsChain", + "displayName": "Chain Boots" + }, + { + "internalName": "bootsIron", + "displayName": "Iron Boots" + }, + { + "internalName": "bootsDiamond", + "displayName": "Diamond Boots" + }, + { + "internalName": "bootsGold", + "displayName": "Golden Boots" + }, + { + "internalName": "stick", + "displayName": "Stick" + }, + { + "internalName": "compass", + "displayName": "Compass" + }, + { + "internalName": "diamond", + "displayName": "Diamond" + }, + { + "internalName": "redstone", + "displayName": "Redstone" + }, + { + "internalName": "clay", + "displayName": "Clay" + }, + { + "internalName": "paper", + "displayName": "Paper" + }, + { + "internalName": "book", + "displayName": "Book" + }, + { + "internalName": "map", + "displayName": "Map" + }, + { + "internalName": "seeds_pumpkin", + "displayName": "Pumpkin Seeds" + }, + { + "internalName": "seeds_melon", + "displayName": "Melon Seeds" + }, + { + "internalName": "chorus_fruit_popped", + "displayName": "Popped Chorus Fruit" + }, + { + "internalName": "swordWood", + "displayName": "Wooden Sword" + }, + { + "internalName": "swordStone", + "displayName": "Stone Sword" + }, + { + "internalName": "swordIron", + "displayName": "Iron Sword" + }, + { + "internalName": "swordDiamond", + "displayName": "Diamond Sword" + }, + { + "internalName": "swordGold", + "displayName": "Golden Sword" + }, + { + "internalName": "fishingRod_uncast", + "displayName": "Fishing Rod" + }, + { + "internalName": "clock", + "displayName": "Clock" + }, + { + "internalName": "bowl", + "displayName": "Bowl" + }, + { + "internalName": "mushroomStew", + "displayName": "Mushroom Stew" + }, + { + "internalName": "yellowDust", + "displayName": "Glowstone Dust" + }, + { + "internalName": "bucket", + "displayName": "Bucket" + }, + { + "internalName": "bucketWater", + "displayName": "Water Bucket" + }, + { + "internalName": "bucketLava", + "displayName": "Lava Bucket" + }, + { + "internalName": "milk", + "displayName": "Milk Bucket" + }, + { + "internalName": "dyePowder_black", + "displayName": "Ink Sac" + }, + { + "internalName": "dyePowder_gray", + "displayName": "Gray Dye" + }, + { + "internalName": "shovelWood", + "displayName": "Wooden Shovel" + }, + { + "internalName": "shovelStone", + "displayName": "Stone Shovel" + }, + { + "internalName": "shovelIron", + "displayName": "Iron Shovel" + }, + { + "internalName": "shovelDiamond", + "displayName": "Diamond Shovel" + }, + { + "internalName": "shovelGold", + "displayName": "Golden Shovel" + }, + { + "internalName": "fishingRod_cast", + "displayName": "Fishing Rod (Cast)" + }, + { + "internalName": "diode", + "displayName": "Redstone Repeater" + }, + { + "internalName": "porkchopRaw", + "displayName": "Raw Porkchop" + }, + { + "internalName": "porkchopCooked", + "displayName": "Cooked Porkchop" + }, + { + "internalName": "fishRaw", + "displayName": "Raw Cod" + }, + { + "internalName": "fishCooked", + "displayName": "Cooked Cod" + }, + { + "internalName": "rottenFlesh", + "displayName": "Rotten Flesh" + }, + { + "internalName": "cookie", + "displayName": "Cookie" + }, + { + "internalName": "shears", + "displayName": "Shears" + }, + { + "internalName": "dyePowder_red", + "displayName": "Rose Red" + }, + { + "internalName": "dyePowder_pink", + "displayName": "Pink Dye" + }, + { + "internalName": "pickaxeWood", + "displayName": "Wooden Pickaxe" + }, + { + "internalName": "pickaxeStone", + "displayName": "Stone Pickaxe" + }, + { + "internalName": "pickaxeIron", + "displayName": "Iron Pickaxe" + }, + { + "internalName": "pickaxeDiamond", + "displayName": "Diamond Pickaxe" + }, + { + "internalName": "pickaxeGold", + "displayName": "Golden Pickaxe" + }, + { + "internalName": "bow_pull_0", + "displayName": "Bow (Pulling Stage 1)" + }, + { + "internalName": "carrotOnAStick", + "displayName": "Carrot on a Stick" + }, + { + "internalName": "leather", + "displayName": "Leather" + }, + { + "internalName": "saddle", + "displayName": "Saddle" + }, + { + "internalName": "beefRaw", + "displayName": "Raw Beef" + }, + { + "internalName": "beefCooked", + "displayName": "Steak" + }, + { + "internalName": "enderPearl", + "displayName": "Ender Pearl" + }, + { + "internalName": "blazeRod", + "displayName": "Blaze Rod" + }, + { + "internalName": "melon", + "displayName": "Melon Slice" + }, + { + "internalName": "dyePowder_green", + "displayName": "Cactus Green" + }, + { + "internalName": "dyePowder_lime", + "displayName": "Lime Dye" + }, + { + "internalName": "hatchetWood", + "displayName": "Wooden Axe" + }, + { + "internalName": "hatchetStone", + "displayName": "Stone Axe" + }, + { + "internalName": "hatchetIron", + "displayName": "Iron Axe" + }, + { + "internalName": "hatchetDiamond", + "displayName": "Diamond Axe" + }, + { + "internalName": "hatchetGold", + "displayName": "Golden Axe" + }, + { + "internalName": "bow_pull_1", + "displayName": "Bow (Pulling Stage 2)" + }, + { + "internalName": "potatoBaked", + "displayName": "Baked Potato" + }, + { + "internalName": "potato", + "displayName": "Potato" + }, + { + "internalName": "carrots", + "displayName": "Carrot" + }, + { + "internalName": "chickenRaw", + "displayName": "Raw Chicken" + }, + { + "internalName": "chickenCooked", + "displayName": "Cooked Chicken" + }, + { + "internalName": "ghastTear", + "displayName": "Ghast Tear" + }, + { + "internalName": "goldNugget", + "displayName": "Gold Nugget" + }, + { + "internalName": "netherStalkSeeds", + "displayName": "Nether Wart" + }, + { + "internalName": "dyePowder_brown", + "displayName": "Cocoa Beans" + }, + { + "internalName": "dyePowder_yellow", + "displayName": "Dandelion Yellow" + }, + { + "internalName": "hoeWood", + "displayName": "Wooden Hoe" + }, + { + "internalName": "hoeStone", + "displayName": "Stone Hoe" + }, + { + "internalName": "hoeIron", + "displayName": "Iron Hoe" + }, + { + "internalName": "hoeDiamond", + "displayName": "Diamond Hoe" + }, + { + "internalName": "hoeGold", + "displayName": "Golden Hoe" + }, + { + "internalName": "bow_pull_2", + "displayName": "Bow (Pulling Stage 3)" + }, + { + "internalName": "potatoPoisonous", + "displayName": "Poisonous Potato" + }, + { + "internalName": "minecart", + "displayName": "Minecart" + }, + { + "internalName": "boat", + "displayName": "Oak Boat" + }, + { + "internalName": "speckledMelon", + "displayName": "Glistering Melon" + }, + { + "internalName": "fermentedSpiderEye", + "displayName": "Fermented Spider Eye" + }, + { + "internalName": "spiderEye", + "displayName": "Spider Eye" + }, + { + "internalName": "glassBottle", + "displayName": "Glass Bottle" + }, + { + "internalName": "potion_contents", + "displayName": "Potion (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "dyePowder_blue", + "displayName": "Lapis Lazuli" + }, + { + "internalName": "dyePowder_light_blue", + "displayName": "Light Blue Dye" + }, + { + "internalName": "helmetCloth_overlay", + "displayName": "Leather Cap (Overlay)" + }, + { + "internalName": "spectral_arrow", + "displayName": "Spectral Arrow" + }, + { + "internalName": "iron_horse_armor", + "displayName": "Iron Horse Armor" + }, + { + "internalName": "diamond_horse_armor", + "displayName": "Diamond Horse Armor" + }, + { + "internalName": "gold_horse_armor", + "displayName": "Gold Horse Armor" + }, + { + "internalName": "comparator", + "displayName": "Redstone Comparator" + }, + { + "internalName": "carrotGolden", + "displayName": "Golden Carrot" + }, + { + "internalName": "minecart_chest", + "displayName": "Minecart with Chest" + }, + { + "internalName": "pumpkinPie", + "displayName": "Pumpkin Pie" + }, + { + "internalName": "monsterPlacer", + "displayName": "Spawn Egg", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Mob_Creeper_Colour1", + "variants": [ + "Mob_Creeper_Colour1", + "Mob_Skeleton_Colour1", + "Mob_Spider_Colour1", + "Mob_Zombie_Colour1", + "Mob_Slime_Colour1", + "Mob_Ghast_Colour1", + "Mob_PigZombie_Colour1", + "Mob_Enderman_Colour1", + "Mob_CaveSpider_Colour1", + "Mob_Silverfish_Colour1", + "Mob_Blaze_Colour1", + "Mob_LavaSlime_Colour1", + "Mob_Pig_Colour1", + "Mob_Sheep_Colour1", + "Mob_Cow_Colour1", + "Mob_Chicken_Colour1", + "Mob_Squid_Colour1", + "Mob_Wolf_Colour1", + "Mob_MushroomCow_Colour1", + "Mob_Ocelot_Colour1", + "Mob_Villager_Colour1", + "Mob_Bat_Colour1", + "Mob_Witch_Colour1", + "Mob_Horse_Colour1", + "Mob_Endermite_Color1", + "Mob_Guardian_Color1", + "Mob_Rabbit_Colour1", + "Mob_PolarBear_Colour1", + "Mob_Shulker_Colour1", + "Mob_Elder_Guardian_Colour1", + "Mob_Evocation_Illager_Colour1", + "Mob_Llama_Colour1", + "Mob_Donkey_Colour1", + "Mob_Skeleton_Horse_Colour1", + "Mob_Zombie_Horse_Colour1", + "Mob_Mule_Colour1", + "Mob_Stray_Colour1", + "Mob_Husk_Colour1", + "Mob_Vex_Colour1", + "Mob_Vindication_Illager_Colour1", + "Mob_Zombie_Villager_Colour1", + "Mob_Parrot_Colour1", + "Mob_Wither_Skeleton_Colour1", + "Mob_Turtle_Colour1", + "Mob_Tropical_Colour1", + "Mob_Cod_Colour1", + "Mob_Pufferfish_Colour1", + "Mob_Salmon_Colour1", + "Mob_Drowned_Colour1", + "Mob_Dolphin_Colour1", + "Mob_Phantom_Colour1" + ] + } + }, + { + "internalName": "potion_splash", + "displayName": "Splash Potion" + }, + { + "internalName": "eyeOfEnder", + "displayName": "Eye of Ender" + }, + { + "internalName": "cauldron", + "displayName": "Cauldron" + }, + { + "internalName": "blazePowder", + "displayName": "Blaze Powder" + }, + { + "internalName": "dyePowder_purple", + "displayName": "Purple Dye" + }, + { + "internalName": "dyePowder_magenta", + "displayName": "Magenta Dye" + }, + { + "internalName": "chestplateCloth_overlay", + "displayName": "Leather Tunic (Overlay)" + }, + { + "internalName": "tipped_arrow_base", + "displayName": "Tipped Arrow" + }, + { + "internalName": "dragon_breath", + "displayName": "Dragon's Breath" + }, + { + "internalName": "name_tag", + "displayName": "Name Tag" + }, + { + "internalName": "lead", + "displayName": "Lead" + }, + { + "internalName": "netherbrick", + "displayName": "Nether Brick" + }, + { + "internalName": "fish_clownfish_raw", + "displayName": "Tropical Fish" + }, + { + "internalName": "minecart_furnace", + "displayName": "Minecart with Furnace" + }, + { + "internalName": "charcoal", + "displayName": "Charcoal" + }, + { + "internalName": "monsterPlacer_overlay", + "displayName": "Spawn Egg (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Mob_Creeper_Colour2", + "variants": [ + "Mob_Creeper_Colour2", + "Mob_Skeleton_Colour2", + "Mob_Spider_Colour2", + "Mob_Zombie_Colour2", + "Mob_Slime_Colour2", + "Mob_Ghast_Colour2", + "Mob_PigZombie_Colour2", + "Mob_Enderman_Colour2", + "Mob_CaveSpider_Colour2", + "Mob_Silverfish_Colour2", + "Mob_Blaze_Colour2", + "Mob_LavaSlime_Colour2", + "Mob_Pig_Colour2", + "Mob_Sheep_Colour2", + "Mob_Cow_Colour2", + "Mob_Chicken_Colour2", + "Mob_Squid_Colour2", + "Mob_Wolf_Colour2", + "Mob_MushroomCow_Colour2", + "Mob_Ocelot_Colour2", + "Mob_Villager_Colour2", + "Mob_Bat_Colour2", + "Mob_Witch_Colour2", + "Mob_Horse_Colour2", + "Mob_Endermite_Color2", + "Mob_Guardian_Color2", + "Mob_Rabbit_Colour2", + "Mob_PolarBear_Colour2", + "Mob_Shulker_Colour2", + "Mob_Elder_Guardian_Colour2", + "Mob_Evocation_Illager_Colour2", + "Mob_Llama_Colour2", + "Mob_Donkey_Colour2", + "Mob_Skeleton_Horse_Colour2", + "Mob_Zombie_Horse_Colour2", + "Mob_Mule_Colour2", + "Mob_Stray_Colour2", + "Mob_Husk_Colour2", + "Mob_Vex_Colour2", + "Mob_Vindication_Illager_Colour2", + "Mob_Zombie_Villager_Colour2", + "Mob_Parrot_Colour2", + "Mob_Wither_Skeleton_Colour2", + "Mob_Turtle_Colour2", + "Mob_Tropical_Colour2", + "Mob_Cod_Colour2", + "Mob_Pufferfish_Colour2", + "Mob_Salmon_Colour2", + "Mob_Drowned_Colour2", + "Mob_Dolphin_Colour2", + "Mob_Phantom_Colour2" + ] + } + }, + { + "internalName": "bed_overlay", + "displayName": "Bed (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Bed_White", + "variants": [ + "Bed_Black", + "Bed_Blue", + "Bed_Brown", + "Bed_Cyan", + "Bed_Grey", + "Bed_Green", + "Bed_Light_Blue", + "Bed_Lime", + "Bed_Magenta", + "Bed_Orange", + "Bed_Pink", + "Bed_Purple", + "Bed_Red", + "Bed_Silver", + "Bed_White", + "Bed_Yellow" + ] + } + }, + { + "internalName": "expBottle", + "displayName": "Bottle o'Enchanting" + }, + { + "internalName": "brewingStand", + "displayName": "Brewing Stand" + }, + { + "internalName": "magmaCream", + "displayName": "Magma Cream" + }, + { + "internalName": "dyePowder_cyan", + "displayName": "Cyan Dye" + }, + { + "internalName": "dyePowder_orange", + "displayName": "Orange Dye" + }, + { + "internalName": "leggingsCloth_overlay", + "displayName": "Leather Pants (Overlay)" + }, + { + "internalName": "tipped_arrow_head", + "displayName": "Tipped Arrow (Overlay)" + }, + { + "internalName": "potion_bottle_lingering", + "displayName": "Lingering Potion" + }, + { + "internalName": "barrier", + "displayName": "debug_fourj_item" + }, + { + "internalName": "mutton_raw", + "displayName": "Raw Mutton" + }, + { + "internalName": "rabbit_raw", + "displayName": "Raw Rabbit" + }, + { + "internalName": "fish_pufferfish_raw", + "displayName": "Pufferfish" + }, + { + "internalName": "minecart_hopper", + "displayName": "Minecart with Hopper" + }, + { + "internalName": "hopper", + "displayName": "Hopper" + }, + { + "internalName": "nether_star", + "displayName": "Nether Star" + }, + { + "internalName": "emerald", + "displayName": "Emerald" + }, + { + "internalName": "writingBook", + "displayName": "Book and Quill" + }, + { + "internalName": "writtenBook", + "displayName": "Written Book" + }, + { + "internalName": "flowerPot", + "displayName": "Flower Pot" + }, + { + "internalName": "dyePowder_silver", + "displayName": "Light Gray Dye" + }, + { + "internalName": "dyePowder_white", + "displayName": "Bone Meal" + }, + { + "internalName": "bootsCloth_overlay", + "displayName": "Leather Boots (Overlay)" + }, + { + "internalName": "beetroot", + "displayName": "Beetroot" + }, + { + "internalName": "beetroot_seeds", + "displayName": "Beetroot Seeds" + }, + { + "internalName": "beetroot_soup", + "displayName": "Beetroot Soup" + }, + { + "internalName": "mutton_cooked", + "displayName": "Cooked Mutton" + }, + { + "internalName": "rabbit_cooked", + "displayName": "Cooked Rabbit" + }, + { + "internalName": "fish_salmon_raw", + "displayName": "Raw Salmon" + }, + { + "internalName": "minecart_tnt", + "displayName": "Minecart with TNT" + }, + { + "internalName": "wooden_armorstand", + "displayName": "Armor Stand" + }, + { + "internalName": "fireworks", + "displayName": "Firework Rocket" + }, + { + "internalName": "fireworks_charge", + "displayName": "Firework Star" + }, + { + "internalName": "fireworks_charge_overlay", + "displayName": "Firework Star (Overlay)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "", + "variants": [""] + } + }, + { + "internalName": "netherquartz", + "displayName": "Nether Quartz" + }, + { + "internalName": "map_empty", + "displayName": "Empty Map" + }, + { + "internalName": "frame", + "displayName": "Item Frame" + }, + { + "internalName": "enchantedBook", + "displayName": "Enchanted Book" + }, + { + "internalName": "door_acacia", + "displayName": "Acacia Door" + }, + { + "internalName": "door_birch", + "displayName": "Birch Door" + }, + { + "internalName": "door_dark_oak", + "displayName": "Dark Oak Door" + }, + { + "internalName": "door_jungle", + "displayName": "Jungle Door" + }, + { + "internalName": "door_spruce", + "displayName": "Spruce Door" + }, + { + "internalName": "rabbit_stew", + "displayName": "Rabbit Stew" + }, + { + "internalName": "fish_salmon_cooked", + "displayName": "Cooked Salmon" + }, + { + "internalName": "minecart_command_block", + "displayName": "Minecart with Command Block" + }, + { + "internalName": "acacia_boat", + "displayName": "Acacia Boat" + }, + { + "internalName": "birch_boat", + "displayName": "Birch Boat" + }, + { + "internalName": "dark_oak_boat", + "displayName": "Dark Oak Boat" + }, + { + "internalName": "jungle_boat", + "displayName": "Jungle Boat" + }, + { + "internalName": "spruce_boat", + "displayName": "Spruce Boat" + }, + { + "internalName": "prismarine_shard", + "displayName": "Prismarine Shard" + }, + { + "internalName": "prismarine_crystals", + "displayName": "Prismarine Crystals" + }, + { + "internalName": "leather_horse_armor_base", + "displayName": "Leather Horse Armor", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "Armour_Default_Leather_Colour", + "variants": [ "Armour_Default_Leather_Colour" ] + } + }, + { + "internalName": "structure_void", + "displayName": "Structure Void" + }, + { + "internalName": "map_filled_markings", + "displayName": "Filled Map (Overlay)" + }, + { + "internalName": "totem", + "displayName": "Totem of Undying" + }, + { + "internalName": "shulker_shell", + "displayName": "Shulker Shell" + }, + { + "internalName": "iron_nugget", + "displayName": "Iron Nugget" + }, + { + "internalName": "rabbit_foot", + "displayName": "Rabbit's Foot" + }, + { + "internalName": "rabbit_hide", + "displayName": "Rabbit Hide" + }, + { + "internalName": "compass", + "displayName": "" + }, + { + "internalName": "compass", + "displayName": "" + }, + { + "internalName": "compass", + "displayName": "" + }, + { + "internalName": "compass", + "displayName": "" + }, + { + "internalName": "clock", + "displayName": "" + }, + { + "internalName": "clock", + "displayName": "" + }, + { + "internalName": "clock", + "displayName": "" + }, + { + "internalName": "clock", + "displayName": "" + }, + { + "internalName": "dragonFireball", + "displayName": "Dragon Fireball" + }, + { + "internalName": "record_13", + "displayName": "Music Disc (C418 - 13)" + }, + { + "internalName": "record_cat", + "displayName": "Music Disc (C418 - cat)" + }, + { + "internalName": "record_blocks", + "displayName": "Music Disc (C418 - blocks)" + }, + { + "internalName": "record_chirp", + "displayName": "Music Disc (C418 - chirp)" + }, + { + "internalName": "record_far", + "displayName": "Music Disc (C418 - far)" + }, + { + "internalName": "record_mall", + "displayName": "Music Disc (C418 - mall)" + }, + { + "internalName": "record_mellohi", + "displayName": "Music Disc (C418 - mellohi)" + }, + { + "internalName": "record_stal", + "displayName": "Music Disc (C418 - stal)" + }, + { + "internalName": "record_strad", + "displayName": "Music Disc (C418 - strad)" + }, + { + "internalName": "record_ward", + "displayName": "Music Disc (C418 - ward)" + }, + { + "internalName": "record_11", + "displayName": "Music Disc (C418 - 11)" + }, + { + "internalName": "record_where are we now", + "displayName": "Music Disc (C418 - wait)" + }, + { + "internalName": "bucketFish", + "displayName": "Bucket of Cod" + }, + { + "internalName": "bucketSalmon", + "displayName": "Bucket of Salmon" + }, + { + "internalName": "bucketPuffer", + "displayName": "Bucket of Pufferfish" + }, + { + "internalName": "bucketTropical", + "displayName": "Bucket of Tropical Fish" + }, + { + "internalName": "leather_horse_armor_detail", + "displayName": "Leather Horse Armor (Overlay)" + }, + { + "internalName": "dyePowder_black1", + "displayName": "Black Dye [PS4 ONLY]" + }, + { + "internalName": "dyePowder_blue1", + "displayName": "Blue Dye [PS4 ONLY]" + }, + { + "internalName": "dyePowder_brown1", + "displayName": "Brown Dye [PS4 ONLY]" + }, + { + "internalName": "dyePowder_white1", + "displayName": "White Dye [PS4 ONLY]" + }, + { + "internalName": "bamboo", + "displayName": "Bamboo [PS4 ONLY]" + }, + { + "internalName": "lantern_carried", + "displayName": "Lantern [PS4 ONLY]" + }, + { + "internalName": "kelp", + "displayName": "Kelp" + }, + { + "internalName": "dried_kelp", + "displayName": "Dried Kelp" + }, + { + "internalName": "sea_pickle", + "displayName": "Sea Pickle" + }, + { + "internalName": "nautilus", + "displayName": "Nautilus Shell" + }, + { + "internalName": "nautilus_core", + "displayName": "Heart of the Sea" + }, + { + "internalName": "turtle_helmet", + "displayName": "Turtle Shell" + }, + { + "internalName": "turtle_shell_piece", + "displayName": "Scute" + }, + { + "internalName": "trident", + "displayName": "Trident" + }, + { + "internalName": "phantom_membrane", + "displayName": "Phantom Membrane" + }, + { + "internalName": "acacia_sign", + "displayName": "Acacia Sign [PS4 ONLY]" + }, + { + "internalName": "birch_sign", + "displayName": "Birch Sign [PS4 ONLY]" + }, + { + "internalName": "dark_oak_sign", + "displayName": "Dark Oak Sign [PS4 ONLY]" + }, + { + "internalName": "jungle_sign", + "displayName": "Jungle Sign [PS4 ONLY]" + }, + { + "internalName": "spruce_sign", + "displayName": "Spruce Sign [PS4 ONLY]" + }, + { + "internalName": "crossbow", + "displayName": "Crossbow [PS4 ONLY]" + }, + { + "internalName": "crossbow_pull_0", + "displayName": "Crossbow (Pulling Stage 1) [PS4 ONLY]" + }, + { + "internalName": "crossbow_pull_1", + "displayName": "Crossbow (Pulling Stage 2) [PS4 ONLY]" + }, + { + "internalName": "crossbow_pull_2", + "displayName": "Crossbow (Pulling Stage 3) [PS4 ONLY]" + }, + { + "internalName": "crossbow_arrow", + "displayName": "Crossbow (Loaded) [PS4 ONLY]" + }, + { + "internalName": "crossbow_firework", + "displayName": "Crossbow (Loaded) (Firework) [PS4 ONLY]" + }, + { + "internalName": "sweet_berries", + "displayName": "Sweet Berries [PS4 ONLY]" + }, + { + "internalName": "banner_pattern", + "displayName": "Banner Pattern [PS4 ONLY]" + }, + { + "internalName": "bell", + "displayName": "Bell [PS4 ONLY]" + }, + { + "internalName": "campfire_carried", + "displayName": "Campfire [PS4 ONLY]" + }, + { + "internalName": "", + "displayName": "" + } + ] +} diff --git a/PCK-Studio/Resources/atlases/mapIconData.json b/PCK-Studio/Resources/atlases/mapIconData.json new file mode 100644 index 00000000..6e505fd8 --- /dev/null +++ b/PCK-Studio/Resources/atlases/mapIconData.json @@ -0,0 +1,135 @@ +{ + "COMMENT_1": "JSON by MattNL", + "map_icons": [ + { + "internalName": "player_1", + "displayName": "Player 1" + }, + { + "internalName": "player_2", + "displayName": "Player 2" + }, + { + "internalName": "player_3", + "displayName": "Player 3" + }, + { + "internalName": "player_4", + "displayName": "Player 4" + }, + { + "internalName": "target_x", + "displayName": "Unused" + }, + { + "internalName": "target_point", + "displayName": "Target Point (Unused)" + }, + { + "internalName": "player_off_map", + "displayName": "Player (Off Map) (Unused)" + }, + { + "internalName": "frame", + "displayName": "Item Frame" + }, + { + "internalName": "player_5", + "displayName": "Player 5" + }, + { + "internalName": "player_6", + "displayName": "Player 6" + }, + { + "internalName": "player_7", + "displayName": "Player 7" + }, + { + "internalName": "player_8", + "displayName": "Player 8" + }, + { + "internalName": "structure", + "displayName": "Structure (Explorer Map)" + }, + { + "internalName": "player_off_limits", + "displayName": "Player (Off Limits) (Unused)" + }, + { + "internalName": "mansion", + "displayName": "Woodland Mansion (Explorer Map)" + }, + { + "internalName": "monument", + "displayName": "Ocean Monument (Explorer Map)" + } + ], + "additional_map_icons": [ + { + "internalName": "player_1_off_map", + "displayName": "Player 1 (Off Map)" + }, + { + "internalName": "player_2_off_map", + "displayName": "Player 2 (Off Map)" + }, + { + "internalName": "player_3_off_map", + "displayName": "Player 3 (Off Map)" + }, + { + "internalName": "player_4_off_map", + "displayName": "Player 4 (Off Map)" + }, + { + "internalName": "treasure", + "displayName": "Buried Treasure" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "player_5_off_map", + "displayName": "Player 5 (Off Map)" + }, + { + "internalName": "player_6_off_map", + "displayName": "Player 6 (Off Map)" + }, + { + "internalName": "player_7_off_map", + "displayName": "Player 7 (Off Map)" + }, + { + "internalName": "player_8_off_map", + "displayName": "Player 8 (Off Map)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + } + ] +} diff --git a/PCK-Studio/Resources/atlases/moonPhaseData.json b/PCK-Studio/Resources/atlases/moonPhaseData.json new file mode 100644 index 00000000..a65a1b53 --- /dev/null +++ b/PCK-Studio/Resources/atlases/moonPhaseData.json @@ -0,0 +1,37 @@ +{ + "COMMENT_1": "JSON by MattNL", + "moon_phases": [ + { + "internalName": "moon_phase_0", + "displayName": "Full Moon" + }, + { + "internalName": "moon_phase_1", + "displayName": "Waning Gibbous" + }, + { + "internalName": "moon_phase_2", + "displayName": "Last Quarter" + }, + { + "internalName": "moon_phase_3", + "displayName": "Waning Crescent" + }, + { + "internalName": "moon_phase_4", + "displayName": "New Moon" + }, + { + "internalName": "moon_phase_5", + "displayName": "Waxing Crescent" + }, + { + "internalName": "moon_phase_6", + "displayName": "First Quarter" + }, + { + "internalName": "moon_phase_7", + "displayName": "Waxing Gibbous" + } + ] +} diff --git a/PCK-Studio/Resources/atlases/particleData.json b/PCK-Studio/Resources/atlases/particleData.json new file mode 100644 index 00000000..2c9015df --- /dev/null +++ b/PCK-Studio/Resources/atlases/particleData.json @@ -0,0 +1,2112 @@ +{ + "COMMENT_1": "JSON by MattNL", + "particles": [ + { + "internalName": "generic_0", + "displayName": "Generic (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_1", + "displayName": "Generic (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_2", + "displayName": "Generic (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_3", + "displayName": "Generic (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_4", + "displayName": "Generic (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_5", + "displayName": "Generic (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_6", + "displayName": "Generic (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "generic_7", + "displayName": "Generic (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "None", + "variants": [ + "None", + "Particle_Smoke", + "Particle_NetherPortal", + "Particle_EnderPortal", + "Particle_Ender", + "Particle_DragonBreathMin", + "Particle_DragonBreathMax" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "unused_splash_0", + "displayName": "Splash (Stage 1) (Unused)" + }, + { + "internalName": "unused_splash_1", + "displayName": "Splash (Stage 2) (Unused)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "splash_0", + "displayName": "Splash (Stage 1)" + }, + { + "internalName": "splash_1", + "displayName": "Splash (Stage 2)" + }, + { + "internalName": "splash_2", + "displayName": "Splash (Stage 3)" + }, + { + "internalName": "splash_3", + "displayName": "Splash (Stage 4)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "classic_bubble", + "displayName": "Bubble (Unused)" + }, + { + "internalName": "bobber", + "displayName": "Fishing Bobber" + }, + { + "internalName": "bubble", + "displayName": "Bubble", + "hasColourEntry": true, + "colourEntry": { + "isWaterColour": true, + "defaultName": "Water_Plains", + "variants": [ + "Water_Ocean", + "Water_Plains", + "Water_Desert", + "Water_ExtremeHills", + "Water_Forest", + "Water_Taiga", + "Water_Swampland", + "Water_River", + "Water_Hell", + "Water_Sky", + "Water_FrozenOcean", + "Water_FrozenRiver", + "Water_IcePlains", + "Water_IceMountains", + "Water_MushroomIsland", + "Water_MushroomIslandShore", + "Water_Beach", + "Water_DesertHills", + "Water_ForestHills", + "Water_TaigaHills", + "Water_ExtremeHillsEdge", + "Water_Jungle", + "Water_JungleHills", + "Water_JungleEdge", + "Water_DeepOcean", + "Water_StoneBeach", + "Water_ColdBeach", + "Water_BirchForest", + "Water_BirchForestHills", + "Water_RoofedForest", + "Water_ColdTaiga", + "Water_ColdTaigaHills", + "Water_MegaTaiga", + "Water_MegaTaigaHills", + "Water_ExtremeHillsPlus", + "Water_Savanna", + "Water_SavannaPlateau", + "Water_Mesa", + "Water_MesaPlateauF", + "Water_MesaPlateau" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "Firework Flash", + "width": 4, + "height": 4, + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "", + "variants": [""] + } + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "flame", + "displayName": "Flame" + }, + { + "internalName": "lava", + "displayName": "Lava" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "note", + "displayName": "Noteblock Note", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_Note_00", + "variants": [ + "Particle_Note_00", + "Particle_Note_01", + "Particle_Note_02", + "Particle_Note_03", + "Particle_Note_04", + "Particle_Note_05", + "Particle_Note_06", + "Particle_Note_07", + "Particle_Note_08", + "Particle_Note_09", + "Particle_Note_10", + "Particle_Note_11", + "Particle_Note_12", + "Particle_Note_13", + "Particle_Note_14", + "Particle_Note_15", + "Particle_Note_16", + "Particle_Note_17", + "Particle_Note_18", + "Particle_Note_19", + "Particle_Note_20", + "Particle_Note_21", + "Particle_Note_22", + "Particle_Note_23", + "Particle_Note_24", + ] + } + }, + { + "internalName": "critical_hit", + "displayName": "Critical Hit", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "critical_hit", + "variants": [ "critical_hit" ] + } + }, + { + "internalName": "enchanted_hit", + "displayName": "Enchanted Hit", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "critical_hit", + "variants": [ "critical_hit" ] + } + }, + { + "internalName": "damage", + "displayName": "Damage Indicator" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "heart", + "displayName": "Heart" + }, + { + "internalName": "angry", + "displayName": "Angry" + }, + { + "internalName": "glint", + "displayName": "Glint" + }, + { + "internalName": "angry_villager", + "displayName": "Angry Villager (Unused)" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "flash", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "water_0", + "displayName": "Water (Stage 1) (Unused)" + }, + { + "internalName": "water_1", + "displayName": "Water (Stage 2) (Unused)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "bubble_pop_0", + "displayName": "Bubble Pop (Stage 1) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_0", + "displayName": "" + }, + { + "internalName": "bubble_pop_1", + "displayName": "Bubble Pop (Stage 2) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_1", + "displayName": "" + }, + { + "internalName": "bubble_pop_2", + "displayName": "Bubble Pop (Stage 3) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_2", + "displayName": "" + }, + { + "internalName": "bubble_pop_3", + "displayName": "Bubble Pop (Stage 4) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_3", + "displayName": "" + }, + { + "internalName": "bubble_pop_4", + "displayName": "Bubble Pop (Stage 5) (Unused)", + "width": 2, + "height": 2 + }, + { + "internalName": "bubble_pop_4", + "displayName": "" + }, + { + "internalName": "drip_hang", + "displayName": "Drip (Hang)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_DripWater", + "variants": [ + "Particle_DripWater", + "Particle_DripLavaStart", + "Particle_DripLavaEnd" + ] + } + }, + { + "internalName": "drip_fall", + "displayName": "Drip (Fall)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_DripWater", + "variants": [ + "Particle_DripWater", + "Particle_DripLavaStart", + "Particle_DripLavaEnd" + ] + } + }, + { + "internalName": "drip_land", + "displayName": "Drip (Land)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_DripWater", + "variants": [ + "Particle_DripWater", + "Particle_DripLavaStart", + "Particle_DripLavaEnd" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "bubble_pop_0", + "displayName": "" + }, + { + "internalName": "bubble_pop_0", + "displayName": "" + }, + { + "internalName": "bubble_pop_1", + "displayName": "" + }, + { + "internalName": "bubble_pop_1", + "displayName": "" + }, + { + "internalName": "bubble_pop_2", + "displayName": "" + }, + { + "internalName": "bubble_pop_2", + "displayName": "" + }, + { + "internalName": "bubble_pop_3", + "displayName": "" + }, + { + "internalName": "bubble_pop_3", + "displayName": "" + }, + { + "internalName": "bubble_pop_4", + "displayName": "" + }, + { + "internalName": "bubble_pop_4", + "displayName": "" + }, + { + "internalName": "effect_0", + "displayName": "Effect (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_1", + "displayName": "Effect (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_2", + "displayName": "Effect (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_3", + "displayName": "Effect (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_4", + "displayName": "Effect (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_5", + "displayName": "Effect (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_6", + "displayName": "Effect (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "effect_7", + "displayName": "Effect (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "spell_0", + "displayName": "Splash Effect (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_1", + "displayName": "Splash Effect (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_2", + "displayName": "Splash Effect (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_3", + "displayName": "Splash Effect (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_4", + "displayName": "Splash Effect (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_5", + "displayName": "Splash Effect (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_6", + "displayName": "Splash Effect (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "spell_7", + "displayName": "Splash Effect (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Potion_BaseColour", + "hasCustomColour": true, + "variants": [ + "Potion_BaseColour", + "Effect_MovementSpeed", + "Effect_MovementSlowDown", + "Effect_DigSpeed", + "Effect_DigSlowdown", + "Effect_DamageBoost", + "Effect_Heal", + "Effect_Harm", + "Effect_Jump", + "Effect_Confusion", + "Effect_Regeneration", + "Effect_DamageResistance", + "Effect_FireResistance", + "Effect_WaterBreathing", + "Effect_Invisibility", + "Effect_Blindness", + "Effect_NightVision", + "Effect_Hunger", + "Effect_Weakness", + "Effect_Poison", + "Effect_Wither", + "Effect_HealthBoost", + "Effect_Absorption", + "Effect_Saturation", + "Effect_Levitation", + "Effect_Luck", + "Effect_BadLuck", + "Effect_TurtleMaster", + "Effect_SlowFall" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "spark_0", + "displayName": "Firework Spark (Stage 1)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_1", + "displayName": "Firework Spark (Stage 2)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_2", + "displayName": "Firework Spark (Stage 3)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_3", + "displayName": "Firework Spark (Stage 4)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_4", + "displayName": "Firework Spark (Stage 5)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_5", + "displayName": "Firework Spark (Stage 6)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_6", + "displayName": "Firework Spark (Stage 7)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "spark_7", + "displayName": "Firework Spark (Stage 8)", + "hasColourEntry": true, + "colourEntry": { + "hasCustomColour": true, + "defaultName": "None", + "variants": [ + "None", + "Particle_ScoreRing_Small", + "Particle_ScoreRing_Medium", + "Particle_ScoreRing_Large" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "glitter_0", + "displayName": "Shulker/End Rod Glitter (Stage 1)" + }, + { + "internalName": "glitter_1", + "displayName": "Shulker/End Rod Glitter (Stage 2)" + }, + { + "internalName": "glitter_2", + "displayName": "Shulker/End Rod Glitter (Stage 3)" + }, + { + "internalName": "glitter_3", + "displayName": "Shulker/End Rod Glitter (Stage 4)" + }, + { + "internalName": "glitter_4", + "displayName": "Shulker/End Rod Glitter (Stage 5)" + }, + { + "internalName": "glitter_5", + "displayName": "Shulker/End Rod Glitter (Stage 6)" + }, + { + "internalName": "glitter_6", + "displayName": "Shulker/End Rod Glitter (Stage 7)" + }, + { + "internalName": "glitter_7", + "displayName": "Shulker/End Rod Glitter (Stage 8)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "camera_shoot_explosion_0", + "displayName": "Camera Shoot (Unused) (Stage 1)" + }, + { + "internalName": "camera_shoot_explosion_1", + "displayName": "Camera Shoot (Unused) (Stage 2)" + }, + { + "internalName": "camera_shoot_explosion_2", + "displayName": "Camera Shoot (Unused) (Stage 3)" + }, + { + "internalName": "camera_shoot_explosion_3", + "displayName": "Camera Shoot (Unused) (Stage 4)" + }, + { + "internalName": "camera_shoot_explosion_4", + "displayName": "Camera Shoot (Unused) (Stage 5)" + }, + { + "internalName": "camera_shoot_explosion_5", + "displayName": "Camera Shoot (Unused) (Stage 6)" + }, + { + "internalName": "camera_shoot_explosion_6", + "displayName": "Camera Shoot (Unused) (Stage 7)" + }, + { + "internalName": "camera_shoot_explosion_7", + "displayName": "Camera Shoot (Unused) (Stage 8)" + }, + { + "internalName": "camera_shoot_explosion_8", + "displayName": "Camera Shoot (Unused) (Stage 9)" + }, + { + "internalName": "camera_shoot_explosion_9", + "displayName": "Camera Shoot (Unused) (Stage 10)" + }, + { + "internalName": "camera_shoot_explosion_10", + "displayName": "Camera Shoot (Unused) (Stage 11)" + }, + { + "internalName": "camera_shoot_explosion_11", + "displayName": "Camera Shoot (Unused) (Stage 12)" + }, + { + "internalName": "camera_shoot_explosion_12", + "displayName": "Camera Shoot (Unused) (Stage 13)" + }, + { + "internalName": "camera_shoot_explosion_13", + "displayName": "Camera Shoot (Unused) (Stage 14)" + }, + { + "internalName": "camera_shoot_explosion_14", + "displayName": "Camera Shoot (Unused) (Stage 15)" + }, + { + "internalName": "camera_shoot_explosion_15", + "displayName": "Camera Shoot (Unused) (Stage 16)" + }, + { + "internalName": "conduit_0", + "displayName": "Conduit (Unused) (Stage 1)" + }, + { + "internalName": "conduit_1", + "displayName": "Conduit (Unused) (Stage 2)" + }, + { + "internalName": "conduit_2", + "displayName": "Conduit (Unused) (Stage 3)" + }, + { + "internalName": "conduit_3", + "displayName": "Conduit (Unused) (Stage 4)" + }, + { + "internalName": "conduit_4", + "displayName": "Conduit (Unused) (Stage 5)" + }, + { + "internalName": "conduit_5", + "displayName": "Conduit (Unused) (Stage 6)" + }, + { + "internalName": "conduit_6", + "displayName": "Conduit (Unused) (Stage 7)" + }, + { + "internalName": "conduit_7", + "displayName": "Conduit (Unused) (Stage 8)" + }, + { + "internalName": "conduit_8", + "displayName": "Conduit (Unused) (Stage 9)" + }, + { + "internalName": "conduit_9", + "displayName": "Conduit (Unused) (Stage 10)" + }, + { + "internalName": "conduit_10", + "displayName": "Conduit (Unused) (Stage 11)" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "sga_a", + "displayName": "Standard Galactic Language (A)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_b", + "displayName": "Standard Galactic Language (B)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_c", + "displayName": "Standard Galactic Language (C)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_d", + "displayName": "Standard Galactic Language (D)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_e", + "displayName": "Standard Galactic Language (E)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_f", + "displayName": "Standard Galactic Language (F)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_g", + "displayName": "Standard Galactic Language (G)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_h", + "displayName": "Standard Galactic Language (H)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_i", + "displayName": "Standard Galactic Language (I)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_j", + "displayName": "Standard Galactic Language (J)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_k", + "displayName": "Standard Galactic Language (K)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_l", + "displayName": "Standard Galactic Language (L)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_m", + "displayName": "Standard Galactic Language (M)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_n", + "displayName": "Standard Galactic Language (N)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_o", + "displayName": "Standard Galactic Language (O)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_p", + "displayName": "Standard Galactic Language (P)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_q", + "displayName": "Standard Galactic Language (Q)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_r", + "displayName": "Standard Galactic Language (R)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_s", + "displayName": "Standard Galactic Language (S)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_t", + "displayName": "Standard Galactic Language (T)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_u", + "displayName": "Standard Galactic Language (U)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_v", + "displayName": "Standard Galactic Language (V)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_w", + "displayName": "Standard Galactic Language (W)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_x", + "displayName": "Standard Galactic Language (X)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_y", + "displayName": "Standard Galactic Language (Y)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "sga_z", + "displayName": "Standard Galactic Language (Z)", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Particle_EnchantmentTable", + "variants": [ + "Particle_EnchantmentTable" + ] + } + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + ] +} \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/tileData.json b/PCK-Studio/Resources/atlases/tileData.json deleted file mode 100644 index d9d84b5d..00000000 --- a/PCK-Studio/Resources/atlases/tileData.json +++ /dev/null @@ -1,6874 +0,0 @@ -{ - "COMMENT_1": "Tile data research by MattNL", - "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", - "blocks": [ - { - "internalName": "grass_top", - "displayName": "Grass Block (Top)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "stone", - "displayName": "Stone" - }, - { - "internalName": "dirt", - "displayName": "Dirt" - }, - { - "internalName": "grass_side", - "displayName": "Grass Block (Side)" - }, - { - "internalName": "planks_oak", - "displayName": "Oak Planks" - }, - { - "internalName": "stoneslab_side", - "displayName": "Stone Slab (Side)" - }, - { - "internalName": "stoneslab_top", - "displayName": "Stone Slab (Top)" - }, - { - "internalName": "brick", - "displayName": "Bricks" - }, - { - "internalName": "tnt_side", - "displayName": "TNT (Side)" - }, - { - "internalName": "tnt_top", - "displayName": "TNT (Top)" - }, - { - "internalName": "tnt_bottom", - "displayName": "TNT (Bottom)" - }, - { - "internalName": "web", - "displayName": "Cobweb" - }, - { - "internalName": "flower_rose", - "displayName": "Poppy" - }, - { - "internalName": "flower_dandelion", - "displayName": "Dandelion" - }, - { - "internalName": "portal", - "displayName": "Nether Portal" - }, - { - "internalName": "sapling", - "displayName": "Oak Sapling" - }, - { - "internalName": "cobblestone", - "displayName": "Cobblestone" - }, - { - "internalName": "bedrock", - "displayName": "Bedrock" - }, - { - "internalName": "sand", - "displayName": "Sand" - }, - { - "internalName": "gravel", - "displayName": "Gravel" - }, - { - "internalName": "log_oak", - "displayName": "Oak Wood (Side)" - }, - { - "internalName": "log_oak_top", - "displayName": "Oak Wood (Top)" - }, - { - "internalName": "iron_block", - "displayName": "Block of Iron" - }, - { - "internalName": "gold_block", - "displayName": "Block of Gold" - }, - { - "internalName": "diamond_block", - "displayName": "Block of Diamond" - }, - { - "internalName": "emerald_block", - "displayName": "Block of Emerald" - }, - { - "internalName": "redstone_block", - "displayName": "Block of Redstone" - }, - { - "internalName": "dropper_front_horizontal", - "displayName": "Dropper (Front)" - }, - { - "internalName": "mushroom_red", - "displayName": "Mushroom (Red)" - }, - { - "internalName": "mushroom_brown", - "displayName": "Mushroom (Brown)" - }, - { - "internalName": "sapling_jungle", - "displayName": "Jungle Tree Sapling" - }, - { - "internalName": "fire_0", - "displayName": "Fire (Layer 1)" - }, - { - "internalName": "gold_ore", - "displayName": "Gold Ore" - }, - { - "internalName": "iron_ore", - "displayName": "Iron Ore" - }, - { - "internalName": "coal_ore", - "displayName": "Coal Ore" - }, - { - "internalName": "bookshelf", - "displayName": "Bookshelf" - }, - { - "internalName": "cobblestone_mossy", - "displayName": "Moss Stone" - }, - { - "internalName": "obsidian", - "displayName": "Obsidian" - }, - { - "internalName": "grass_side_overlay", - "displayName": "Grass Side (Overlay)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "tallgrass", - "displayName": "Tall Grass", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "dispenser_front_vertical", - "displayName": "Dispenser (Vertical) (Front)" - }, - { - "internalName": "beacon", - "displayName": "Beacon" - }, - { - "internalName": "dropper_front_vertical", - "displayName": "Dropper (Vertical) (Front)" - }, - { - "internalName": "workbench_top", - "displayName": "Crafting Table (Top)" - }, - { - "internalName": "furnace_front", - "displayName": "Furnace (Front)" - }, - { - "internalName": "furnace_side", - "displayName": "Furnace/Dispenser/Dropper (Side)" - }, - { - "internalName": "dispenser_front", - "displayName": "Dispenser (Front)" - }, - { - "internalName": "fire_1", - "displayName": "Fire (Layer 2)" - }, - { - "internalName": "sponge", - "displayName": "Sponge" - }, - { - "internalName": "glass", - "displayName": "Glass" - }, - { - "internalName": "diamond_ore", - "displayName": "Diamond Ore" - }, - { - "internalName": "redstone_ore", - "displayName": "Redstone Ore" - }, - { - "internalName": "leaves", - "displayName": "Oak Leaves", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "leaves_opaque", - "displayName": "Oak Leaves (Opaque)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "stonebrick", - "displayName": "Stone Bricks" - }, - { - "internalName": "deadbush", - "displayName": "Dead Bush/Shrub" - }, - { - "internalName": "fern", - "displayName": "Fern", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "daylight_detector_top", - "displayName": "Daylight Sensor (Top)" - }, - { - "internalName": "daylight_detector_side", - "displayName": "Daylight Sensor (Side)" - }, - { - "internalName": "workbench_side", - "displayName": "Crafting Table (Side)" - }, - { - "internalName": "workbench_front", - "displayName": "Crafting Table (Front)" - }, - { - "internalName": "furnace_front_lit", - "displayName": "Furnace (Lit) (Front)" - }, - { - "internalName": "furnace_top", - "displayName": "Furnace/Dispenser/Dropper (Top)" - }, - { - "internalName": "sapling_spruce", - "displayName": "Spruce Sapling" - }, - { - "internalName": "wool_colored_white", - "displayName": "White Wool" - }, - { - "internalName": "mob_spawner", - "displayName": "Monster Spawner" - }, - { - "internalName": "snow", - "displayName": "Snow" - }, - { - "internalName": "ice", - "displayName": "Ice" - }, - { - "internalName": "snow_side", - "displayName": "Grass Block (Snowy) (Side)" - }, - { - "internalName": "cactus_top", - "displayName": "Cactus (Top)" - }, - { - "internalName": "cactus_side", - "displayName": "Cactus (Side)" - }, - { - "internalName": "cactus_bottom", - "displayName": "Cactus (Bottom)" - }, - { - "internalName": "clay", - "displayName": "Clay" - }, - { - "internalName": "reeds", - "displayName": "Sugar Canes" - }, - { - "internalName": "jukebox_side", - "displayName": "Jukebox (Side)" - }, - { - "internalName": "jukebox_top", - "displayName": "Jukebox (Top)" - }, - { - "internalName": "waterlily", - "displayName": "Lily Pad", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Tile_WaterLily", - "variants": [ "Tile_WaterLily" ] - } - }, - { - "internalName": "mycel_side", - "displayName": "Mycelium (Side)" - }, - { - "internalName": "mycel_top", - "displayName": "Mycelium (Top)" - }, - { - "internalName": "sapling_birch", - "displayName": "Birch Sapling" - }, - { - "internalName": "torch_on", - "displayName": "Torch" - }, - { - "internalName": "door_wood_upper", - "displayName": "Oak Door (Top)" - }, - { - "internalName": "door_iron_upper", - "displayName": "Iron Door (Top)" - }, - { - "internalName": "ladder", - "displayName": "Ladder" - }, - { - "internalName": "trapdoor", - "displayName": "Oak Trapdoor" - }, - { - "internalName": "iron_bars", - "displayName": "Iron Bars" - }, - { - "internalName": "farmland_wet", - "displayName": "Farmland (Wet)" - }, - { - "internalName": "farmland_dry", - "displayName": "Farmland" - }, - { - "internalName": "crops_0", - "displayName": "Wheat (Stage 1)" - }, - { - "internalName": "crops_1", - "displayName": "Wheat (Stage 2)" - }, - { - "internalName": "crops_2", - "displayName": "Wheat (Stage 3)" - }, - { - "internalName": "crops_3", - "displayName": "Wheat (Stage 4)" - }, - { - "internalName": "crops_4", - "displayName": "Wheat (Stage 5)" - }, - { - "internalName": "crops_5", - "displayName": "Wheat (Stage 6)" - }, - { - "internalName": "crops_6", - "displayName": "Wheat (Stage 7)" - }, - { - "internalName": "crops_7", - "displayName": "Wheat (Stage 8)" - }, - { - "internalName": "lever", - "displayName": "Lever" - }, - { - "internalName": "door_wood_lower", - "displayName": "Oak Door (Bottom)" - }, - { - "internalName": "door_iron_lower", - "displayName": "Iron Door (Bottom)" - }, - { - "internalName": "redstone_torch_on", - "displayName": "Redstone Torch" - }, - { - "internalName": "stonebrick_mossy", - "displayName": "Mossy Stone Bricks" - }, - { - "internalName": "stonebrick_cracked", - "displayName": "Cracked Stone Bricks" - }, - { - "internalName": "pumpkin_top", - "displayName": "Pumpkin (Top)" - }, - { - "internalName": "netherrack", - "displayName": "Netherrack" - }, - { - "internalName": "soul_sand", - "displayName": "Soul Sand" - }, - { - "internalName": "glowstone", - "displayName": "Glowstone" - }, - { - "internalName": "piston_top_sticky", - "displayName": "Sticky Piston (Top)" - }, - { - "internalName": "piston_top", - "displayName": "Piston (Top)" - }, - { - "internalName": "piston_side", - "displayName": "Piston (Side)" - }, - { - "internalName": "piston_bottom", - "displayName": "Piston (Bottom)" - }, - { - "internalName": "piston_inner_top", - "displayName": "Piston (Inside)" - }, - { - "internalName": "stem_straight", - "displayName": "Stem", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Tile_StemMin", - "variants": [ - "Tile_StemMin", - "Tile_StemMax" - ] - } - }, - { - "internalName": "rail_normal_turned", - "displayName": "Rail (Turned)" - }, - { - "internalName": "wool_colored_black", - "displayName": "Black Wool" - }, - { - "internalName": "wool_colored_gray", - "displayName": "Gray Wool" - }, - { - "internalName": "redstone_torch_off", - "displayName": "Redstone Torch (Off)" - }, - { - "internalName": "log_spruce", - "displayName": "Spruce Wood (Side)" - }, - { - "internalName": "log_birch", - "displayName": "Birch Wood (Side)" - }, - { - "internalName": "pumpkin_side", - "displayName": "Pumpkin (Side)" - }, - { - "internalName": "pumpkin_face_off", - "displayName": "Carved Pumpkin" - }, - { - "internalName": "pumpkin_face_on", - "displayName": "Jack-O-Lantern" - }, - { - "internalName": "cake_top", - "displayName": "Cake (Top)" - }, - { - "internalName": "cake_side", - "displayName": "Cake (Side)" - }, - { - "internalName": "cake_inner", - "displayName": "Cake (Inside)" - }, - { - "internalName": "cake_bottom", - "displayName": "Cake (Bottom)" - }, - { - "internalName": "mushroom_block_skin_red", - "displayName": "Mushroom (Red Block)" - }, - { - "internalName": "mushroom_block_skin_brown", - "displayName": "Mushroom (Brown Block)" - }, - { - "internalName": "stem_bent", - "displayName": "Stem (Attached)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Tile_StemMin", - "variants": [ - "Tile_StemMin", - "Tile_StemMax" - ] - } - }, - { - "internalName": "rail_normal", - "displayName": "Rail" - }, - { - "internalName": "wool_colored_red", - "displayName": "Red Wool" - }, - { - "internalName": "wool_colored_pink", - "displayName": "Pink Wool" - }, - { - "internalName": "repeater_off", - "displayName": "Repeater" - }, - { - "internalName": "leaves_spruce", - "displayName": "Spruce Leaves", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Evergreen", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "leaves_spruce_opaque", - "displayName": "Spruce Leaves (Opaque)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Evergreen", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "conduit_top", - "displayName": "Conduit (Break Particles)" - }, - { - "internalName": "turtle_egg_hatch_0", - "displayName": "Sea Turtle Egg (Stage 1)" - }, - { - "internalName": "melon_side", - "displayName": "Melon (Side)" - }, - { - "internalName": "melon_top", - "displayName": "Melon (Top)" - }, - { - "internalName": "cauldron_top", - "displayName": "Cauldron (Top)" - }, - { - "internalName": "cauldron_inner", - "displayName": "Cauldron (Inside)" - }, - { - "internalName": "sponge_wet", - "displayName": "Wet Sponge" - }, - { - "internalName": "mushroom_block_skin_stem", - "displayName": "Mushroom (Stem Block)" - }, - { - "internalName": "mushroom_block_inside", - "displayName": "Mushroom (Inside Block)" - }, - { - "internalName": "vine", - "displayName": "Vines", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "lapis_block", - "displayName": "Lapis Lazuli Block" - }, - { - "internalName": "wool_colored_green", - "displayName": "Green Wool" - }, - { - "internalName": "wool_colored_lime", - "displayName": "Lime Wool" - }, - { - "internalName": "repeater_on", - "displayName": "Redstone Repeater (On)" - }, - { - "internalName": "glass_pane_top", - "displayName": "Glass Pane (Top)" - }, - { - "internalName": "chest_top", - "displayName": "Chest (Break Particles)" - }, - { - "internalName": "ender_chest_top", - "displayName": "Ender Chest (Break Particles)" - }, - { - "internalName": "turtle_egg_hatch_1", - "displayName": "Sea Turtle Egg (Stage 2)" - }, - { - "internalName": "turtle_egg_hatch_2", - "displayName": "Sea Turtle Egg (Stage 3)" - }, - { - "internalName": "log_jungle", - "displayName": "Jungle Wood (Side)" - }, - { - "internalName": "cauldron_side", - "displayName": "Cauldron (Side)" - }, - { - "internalName": "cauldron_bottom", - "displayName": "Cauldron (Bottom)" - }, - { - "internalName": "brewing_stand_base", - "displayName": "Brewing Stand (Base)" - }, - { - "internalName": "brewing_stand", - "displayName": "Brewing Stand" - }, - { - "internalName": "endframe_top", - "displayName": "End Portal Frame (Top)" - }, - { - "internalName": "endframe_side", - "displayName": "End Portal Frame (Side)" - }, - { - "internalName": "lapis_ore", - "displayName": "Lapis Lazuli Ore" - }, - { - "internalName": "wool_colored_brown", - "displayName": "Brown Wool" - }, - { - "internalName": "wool_colored_yellow", - "displayName": "Yellow Wool" - }, - { - "internalName": "rail_golden", - "displayName": "Powered Rail" - }, - { - "internalName": "redstone_dust_cross", - "displayName": "Redstone Dust (Cross)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Tile_RedstoneDust", - "variants": [ - "Tile_RedstoneDust", - "Tile_RedstoneDustUnlit", - "Tile_RedstoneDustLitMin", - "Tile_RedstoneDustLitMax" - ] - } - }, - { - "internalName": "redstone_dust_line", - "displayName": "Redstone Dust (Line)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Tile_RedstoneDust", - "variants": [ - "Tile_RedstoneDust", - "Tile_RedstoneDustUnlit", - "Tile_RedstoneDustLitMin", - "Tile_RedstoneDustLitMax" - ] - } - }, - { - "internalName": "enchantment_top", - "displayName": "Enchantment Table (Top)" - }, - { - "internalName": "dragon_egg", - "displayName": "Dragon Egg" - }, - { - "internalName": "cocoa_2", - "displayName": "Cocoa (Stage 3)" - }, - { - "internalName": "cocoa_1", - "displayName": "Cocoa (Stage 2)" - }, - { - "internalName": "cocoa_0", - "displayName": "Cocoa (Stage 1)" - }, - { - "internalName": "emerald_ore", - "displayName": "Emerald Ore" - }, - { - "internalName": "trip_wire_source", - "displayName": "Tripwire Hook" - }, - { - "internalName": "trip_wire", - "displayName": "Tripwire" - }, - { - "internalName": "endframe_eye", - "displayName": "End Portal Frame (Eye)" - }, - { - "internalName": "end_stone", - "displayName": "End Stone" - }, - { - "internalName": "sandstone_top", - "displayName": "Sandstone (Top)" - }, - { - "internalName": "wool_colored_blue", - "displayName": "Blue Wool" - }, - { - "internalName": "wool_colored_light_blue", - "displayName": "Light Blue Wool" - }, - { - "internalName": "rail_golden_powered", - "displayName": "Powered Rail (On)" - }, - { - "internalName": "redstone_dust_cross_overlay", - "displayName": "Redstone Dust (Cross) (Overlay)" - }, - { - "internalName": "redstone_dust_line_overlay", - "displayName": "Redstone Dust (Line) (Overlay)" - }, - { - "internalName": "enchantment_side", - "displayName": "Enchantment Table (Side)" - }, - { - "internalName": "enchantment_bottom", - "displayName": "Enchantment Table (Bottom)" - }, - { - "internalName": "diamondRing", - "displayName": "Diamond Score Ring" - }, - { - "internalName": "itemframe_back", - "displayName": "Item Frame" - }, - { - "internalName": "flower_pot", - "displayName": "Flower Pot" - }, - { - "internalName": "comparator_off", - "displayName": "Redstone Comparator" - }, - { - "internalName": "comparator_on", - "displayName": "Redstone Comparator (On)" - }, - { - "internalName": "rail_activator", - "displayName": "Activator Rail" - }, - { - "internalName": "rail_activator_powered", - "displayName": "Activator Rail (On)" - }, - { - "internalName": "quartz_ore", - "displayName": "Nether Quartz Ore" - }, - { - "internalName": "sandstone_side", - "displayName": "Sandstone (Side)" - }, - { - "internalName": "wool_colored_purple", - "displayName": "Purple Wool" - }, - { - "internalName": "wool_colored_magenta", - "displayName": "Magenta Wool" - }, - { - "internalName": "detectorRail", - "displayName": "Detector Rail" - }, - { - "internalName": "leaves_jungle", - "displayName": "Jungle Leaves", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "leaves_jungle_opaque", - "displayName": "Jungle Leaves (Opaque)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "planks_spruce", - "displayName": "Spruce Planks" - }, - { - "internalName": "planks_jungle", - "displayName": "Jungle Planks" - }, - { - "internalName": "carrots_stage_0", - "displayName": "Carrots (Stage 1)" - }, - { - "internalName": "carrots_stage_1", - "displayName": "Carrots (Stage 2)" - }, - { - "internalName": "carrots_stage_2", - "displayName": "Carrots (Stage 3)" - }, - { - "internalName": "carrots_stage_3", - "displayName": "Carrots (Stage 4)" - }, - { - "internalName": "slime", - "displayName": "Slime Block" - }, - { - "internalName": "water", - "displayName": "Water", - "hasColourEntry": true, - "colourEntry": { - "isWaterColour": true, - "defaultName": "Water_Plains", - "variants": [ - "Water_Ocean", - "Water_Plains", - "Water_Desert", - "Water_ExtremeHills", - "Water_Forest", - "Water_Taiga", - "Water_Swampland", - "Water_River", - "Water_Hell", - "Water_Sky", - "Water_FrozenOcean", - "Water_FrozenRiver", - "Water_IcePlains", - "Water_IceMountains", - "Water_MushroomIsland", - "Water_MushroomIslandShore", - "Water_Beach", - "Water_DesertHills", - "Water_ForestHills", - "Water_TaigaHills", - "Water_ExtremeHillsEdge", - "Water_Jungle", - "Water_JungleHills", - "Water_JungleEdge", - "Water_DeepOcean", - "Water_StoneBeach", - "Water_ColdBeach", - "Water_BirchForest", - "Water_BirchForestHills", - "Water_RoofedForest", - "Water_ColdTaiga", - "Water_ColdTaigaHills", - "Water_MegaTaiga", - "Water_MegaTaigaHills", - "Water_ExtremeHillsPlus", - "Water_Savanna", - "Water_SavannaPlateau", - "Water_Mesa", - "Water_MesaPlateauF", - "Water_MesaPlateau" - ] - } - }, - { - "internalName": "water_flow", - "displayName": "Flowing Water", - "hasColourEntry": true, - "width": 2, - "height": 2, - "colourEntry": { - "isWaterColour": true, - "defaultName": "Water_Plains", - "variants": [ - "Water_Ocean", - "Water_Plains", - "Water_Desert", - "Water_ExtremeHills", - "Water_Forest", - "Water_Taiga", - "Water_Swampland", - "Water_River", - "Water_Hell", - "Water_Sky", - "Water_FrozenOcean", - "Water_FrozenRiver", - "Water_IcePlains", - "Water_IceMountains", - "Water_MushroomIsland", - "Water_MushroomIslandShore", - "Water_Beach", - "Water_DesertHills", - "Water_ForestHills", - "Water_TaigaHills", - "Water_ExtremeHillsEdge", - "Water_Jungle", - "Water_JungleHills", - "Water_JungleEdge", - "Water_DeepOcean", - "Water_StoneBeach", - "Water_ColdBeach", - "Water_BirchForest", - "Water_BirchForestHills", - "Water_RoofedForest", - "Water_ColdTaiga", - "Water_ColdTaigaHills", - "Water_MegaTaiga", - "Water_MegaTaigaHills", - "Water_ExtremeHillsPlus", - "Water_Savanna", - "Water_SavannaPlateau", - "Water_Mesa", - "Water_MesaPlateauF", - "Water_MesaPlateau" - ] - } - }, - { - "internalName": "water_flow", - "displayName": "" - }, - { - "internalName": "sandstone_bottom", - "displayName": "Sandstone (Bottom)" - }, - { - "internalName": "wool_colored_cyan", - "displayName": "Cyan Wool" - }, - { - "internalName": "wool_colored_orange", - "displayName": "Orange Wool" - }, - { - "internalName": "redstoneLight", - "displayName": "Redstone Lamp" - }, - { - "internalName": "redstoneLight_lit", - "displayName": "Redstone Lamp (On)" - }, - { - "internalName": "stonebrick_carved", - "displayName": "Chiseled Stone Bricks" - }, - { - "internalName": "planks_birch", - "displayName": "Birch Planks" - }, - { - "internalName": "anvil_base", - "displayName": "Anvil (Base)" - }, - { - "internalName": "anvil_top_damaged_1", - "displayName": "Anvil (Slightly Damaged) (Top)" - }, - { - "internalName": "quartz_block_chiseled_top", - "displayName": "Chiseled Quartz Block (Top)" - }, - { - "internalName": "quartz_block_lines_top", - "displayName": "Pillar Quartz Block (Top)" - }, - { - "internalName": "quartz_block_top", - "displayName": "Block of Quartz (Top)" - }, - { - "internalName": "hopper_outside", - "displayName": "Hopper (Side)" - }, - { - "internalName": "detectorRail_on", - "displayName": "Detector Rail (On)" - }, - { - "internalName": "water_flow", - "displayName": "" - }, - { - "internalName": "water_flow", - "displayName": "" - }, - { - "internalName": "nether_brick", - "displayName": "Nether Brick" - }, - { - "internalName": "wool_colored_silver", - "displayName": "Light Gray Wool" - }, - { - "internalName": "nether_wart_stage_0", - "displayName": "Nether Wart (Stage 1)" - }, - { - "internalName": "nether_wart_stage_1", - "displayName": "Nether Wart (Stage 2)" - }, - { - "internalName": "nether_wart_stage_2", - "displayName": "Nether Wart (Stage 3)" - }, - { - "internalName": "sandstone_carved", - "displayName": "Chiseled Sandstone" - }, - { - "internalName": "sandstone_smooth", - "displayName": "Smooth Sandstone" - }, - { - "internalName": "anvil_top", - "displayName": "Anvil (Top)" - }, - { - "internalName": "anvil_top_damaged_2", - "displayName": "Anvil (Very Damaged) (Top)" - }, - { - "internalName": "quartz_block_chiseled", - "displayName": "Chiseled Quartz Block (Side)" - }, - { - "internalName": "quartz_block_lines", - "displayName": "Pillar Quartz Block (Side)" - }, - { - "internalName": "quartz_block_side", - "displayName": "Block of Quartz (Side)" - }, - { - "internalName": "hopper_inside", - "displayName": "Hopper (Inside)" - }, - { - "internalName": "lava", - "displayName": "Lava" - }, - { - "internalName": "lava_flow", - "displayName": "Flowing Lava", - "width": 2, - "height": 2 - }, - { - "internalName": "lava_flow", - "displayName": "", - }, - { - "internalName": "destroy_0", - "displayName": "Destroy (Stage 1)" - }, - { - "internalName": "destroy_1", - "displayName": "Destroy (Stage 2)" - }, - { - "internalName": "destroy_2", - "displayName": "Destroy (Stage 3)" - }, - { - "internalName": "destroy_3", - "displayName": "Destroy (Stage 4)" - }, - { - "internalName": "destroy_4", - "displayName": "Destroy (Stage 5)" - }, - { - "internalName": "destroy_5", - "displayName": "Destroy (Stage 6)" - }, - { - "internalName": "destroy_6", - "displayName": "Destroy (Stage 7)" - }, - { - "internalName": "destroy_7", - "displayName": "Destroy (Stage 8)" - }, - { - "internalName": "destroy_8", - "displayName": "Destroy (Stage 9)" - }, - { - "internalName": "destroy_9", - "displayName": "Destroy (Stage 10)" - }, - { - "internalName": "hay_block_side", - "displayName": "Hay Bale (Side)" - }, - { - "internalName": "quartz_block_bottom", - "displayName": "Quartz Block (Bottom)" - }, - { - "internalName": "hopper_top", - "displayName": "Hopper (Top)" - }, - { - "internalName": "hay_block_top", - "displayName": "Hay Bale (Top)" - }, - { - "internalName": "lava_flow", - "displayName": "", - }, - { - "internalName": "lava_flow", - "displayName": "", - }, - { - "internalName": "coal_block", - "displayName": "Block of Coal" - }, - { - "internalName": "hardened_clay", - "displayName": "Terracotta" - }, - { - "internalName": "noteblock", - "displayName": "Note Block" - }, - { - "internalName": "stone_andesite", - "displayName": "Andesite" - }, - { - "internalName": "stone_andesite_smooth", - "displayName": "Polished Andesite" - }, - { - "internalName": "stone_diorite", - "displayName": "Diorite" - }, - { - "internalName": "stone_diorite_smooth", - "displayName": "Polished Diorite" - }, - { - "internalName": "stone_granite", - "displayName": "Granite" - }, - { - "internalName": "stone_granite_smooth", - "displayName": "Polished Granite" - }, - { - "internalName": "potatoes_stage_0", - "displayName": "Potatoes (Stage 1)" - }, - { - "internalName": "potatoes_stage_1", - "displayName": "Potatoes (Stage 2)" - }, - { - "internalName": "potatoes_stage_2", - "displayName": "Potatoes (Stage 3)" - }, - { - "internalName": "potatoes_stage_3", - "displayName": "Potatoes (Stage 4)" - }, - { - "internalName": "log_spruce_top", - "displayName": "Spruce Wood (Top)" - }, - { - "internalName": "log_jungle_top", - "displayName": "Jungle Wood (Top)" - }, - { - "internalName": "log_birch_top", - "displayName": "Birch Wood (Top)" - }, - { - "internalName": "hardened_clay_stained_black", - "displayName": "Black Terracotta" - }, - { - "internalName": "hardened_clay_stained_blue", - "displayName": "Blue Terracotta" - }, - { - "internalName": "hardened_clay_stained_brown", - "displayName": "Brown Terracotta" - }, - { - "internalName": "hardened_clay_stained_cyan", - "displayName": "Cyan Terracotta" - }, - { - "internalName": "hardened_clay_stained_gray", - "displayName": "Gray Terracotta" - }, - { - "internalName": "hardened_clay_stained_green", - "displayName": "Green Terracotta" - }, - { - "internalName": "hardened_clay_stained_light_blue", - "displayName": "Light Blue Terracotta" - }, - { - "internalName": "hardened_clay_stained_lime", - "displayName": "Lime Terracotta" - }, - { - "internalName": "hardened_clay_stained_magenta", - "displayName": "Magenta Terracotta" - }, - { - "internalName": "hardened_clay_stained_orange", - "displayName": "Orange Terracotta" - }, - { - "internalName": "hardened_clay_stained_pink", - "displayName": "Pink Terracotta" - }, - { - "internalName": "hardened_clay_stained_purple", - "displayName": "Purple Terracotta" - }, - { - "internalName": "hardened_clay_stained_red", - "displayName": "Red Terracotta" - }, - { - "internalName": "hardened_clay_stained_silver", - "displayName": "Light Gray Terracotta" - }, - { - "internalName": "hardened_clay_stained_white", - "displayName": "White Terracotta" - }, - { - "internalName": "hardened_clay_stained_yellow", - "displayName": "Yellow Terracotta" - }, - { - "internalName": "glass_black", - "displayName": "Black Stained Glass" - }, - { - "internalName": "glass_blue", - "displayName": "Blue Stained Glass" - }, - { - "internalName": "glass_brown", - "displayName": "Brown Stained Glass" - }, - { - "internalName": "glass_cyan", - "displayName": "Cyan Stained Glass" - }, - { - "internalName": "glass_gray", - "displayName": "Gray Stained Glass" - }, - { - "internalName": "glass_green", - "displayName": "Green Stained Glass" - }, - { - "internalName": "glass_light_blue", - "displayName": "Light Blue Stained Glass" - }, - { - "internalName": "glass_lime", - "displayName": "Lime Stained Glass" - }, - { - "internalName": "glass_magenta", - "displayName": "Magenta Stained Glass" - }, - { - "internalName": "glass_orange", - "displayName": "Orange Stained Glass" - }, - { - "internalName": "glass_pink", - "displayName": "Pink Stained Glass" - }, - { - "internalName": "glass_purple", - "displayName": "Purple Stained Glass" - }, - { - "internalName": "glass_red", - "displayName": "Red Stained Glass" - }, - { - "internalName": "glass_silver", - "displayName": "Light Gray Stained Glass" - }, - { - "internalName": "glass_white", - "displayName": "White Stained Glass" - }, - { - "internalName": "glass_yellow", - "displayName": "Yellow Stained Glass" - }, - { - "internalName": "glass_pane_top_black", - "displayName": "Black Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_blue", - "displayName": "Blue Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_brown", - "displayName": "Brown Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_cyan", - "displayName": "Cyan Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_gray", - "displayName": "Gray Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_green", - "displayName": "Green Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_light_blue", - "displayName": "Light Blue Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_lime", - "displayName": "Lime Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_magenta", - "displayName": "Magenta Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_orange", - "displayName": "Orange Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_pink", - "displayName": "Pink Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_purple", - "displayName": "Purple Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_red", - "displayName": "Red Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_silver", - "displayName": "Light Gray Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_white", - "displayName": "White Stained Glass Pane (Top)" - }, - { - "internalName": "glass_pane_top_yellow", - "displayName": "Yellow Stained Glass Pane (Top)" - }, - { - "internalName": "double_plant_fern_top", - "displayName": "Large Fern (Top)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "double_plant_grass_top", - "displayName": "Double Tall Grass (Top)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "double_plant_paeonia_top", - "displayName": "Peony (Top)" - }, - { - "internalName": "double_plant_rose_top", - "displayName": "Rose Bush (Top)" - }, - { - "internalName": "double_plant_syringa_top", - "displayName": "Lilac (Top)" - }, - { - "internalName": "flower_tulip_orange", - "displayName": "Orange Tulip" - }, - { - "internalName": "double_plant_sunflower_top", - "displayName": "Sunflower (Top)" - }, - { - "internalName": "double_plant_sunflower_front", - "displayName": "Sunflower (Front)" - }, - { - "internalName": "log_acacia", - "displayName": "Acacia Wood (Side)" - }, - { - "internalName": "log_acacia_top", - "displayName": "Acacia Wood (Top)" - }, - { - "internalName": "planks_acacia", - "displayName": "Acacia Planks" - }, - { - "internalName": "leaves_acacia", - "displayName": "Acacia Leaves", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "leaves_acacia_fast", - "displayName": "Acacia Leaves (Opaque)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "prismarine_bricks", - "displayName": "Prismarine Bricks" - }, - { - "internalName": "red_sand", - "displayName": "Red Sand" - }, - { - "internalName": "red_sandstone_top", - "displayName": "Red Sandstone (Top)" - }, - { - "internalName": "double_plant_fern_bottom", - "displayName": "Large Fern (Bottom)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "double_plant_grass_bottom", - "displayName": "Double Tall Grass (Bottom)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Grass_Common", - "variants": [ - "Grass_Common", - "Grass_Mesa", - "Grass_Swamp1", - "Grass_Swamp2" - ] - } - }, - { - "internalName": "double_plant_paeonia_bottom", - "displayName": "Peony (Bottom)" - }, - { - "internalName": "double_plant_rose_bottom", - "displayName": "Rose Bush (Bottom)" - }, - { - "internalName": "double_plant_syringa_bottom", - "displayName": "Lilac (Bottom)" - }, - { - "internalName": "flower_tulip_pink", - "displayName": "Pink Tulip" - }, - { - "internalName": "double_plant_sunflower_bottom", - "displayName": "Sunflower (Bottom)" - }, - { - "internalName": "double_plant_sunflower_back", - "displayName": "Sunflower (Back)" - }, - { - "internalName": "log_big_oak", - "displayName": "Dark Oak Wood (Side)" - }, - { - "internalName": "log_big_oak_top", - "displayName": "Dark Oak Wood (Top)" - }, - { - "internalName": "planks_big_oak", - "displayName": "Dark Oak Planks" - }, - { - "internalName": "leaves_big_oak", - "displayName": "Dark Oak Leaves", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "leaves_big_oak_fast", - "displayName": "Dark Oak Leaves (Opaque)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Default", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "prismarine_dark", - "displayName": "Dark Prismarine" - }, - { - "internalName": "red_sandstone_bottom", - "displayName": "Red Sandstone (Bottom)" - }, - { - "internalName": "red_sandstone_normal", - "displayName": "Red Sandstone (Side)" - }, - { - "internalName": "flower_alium", - "displayName": "Allium" - }, - { - "internalName": "flower_blue_orchid", - "displayName": "Blue Orchid" - }, - { - "internalName": "flower_houstonia", - "displayName": "Azure Bluet" - }, - { - "internalName": "flower_oxeye_daisy", - "displayName": "Oxeye Daisy" - }, - { - "internalName": "flower_tulip_red", - "displayName": "Red Tulip" - }, - { - "internalName": "flower_tulip_white", - "displayName": "White Tulip" - }, - { - "internalName": "sapling_acacia", - "displayName": "Acacia Sapling" - }, - { - "internalName": "sapling_roofed_oak", - "displayName": "Dark Oak Sapling" - }, - { - "internalName": "coarse_dirt", - "displayName": "Coarse Dirt" - }, - { - "internalName": "dirt_podzol_side", - "displayName": "Podzol (Side)" - }, - { - "internalName": "dirt_podzol_top", - "displayName": "Podzol (Top)" - }, - { - "internalName": "leaves_birch", - "displayName": "Birch Leaves", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Birch", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "leaves_birch_fast", - "displayName": "Birch Leaves (Opaque)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Foliage_Birch", - "variants": [ - "Foliage_Default", - "Foliage_Evergreen", - "Foliage_Birch", - "Foliage_Mesa", - "Foliage_Swampland" - ] - } - }, - { - "internalName": "prismarine_rough", - "displayName": "Prismarine" - }, - { - "internalName": "red_sandstone_carved", - "displayName": "Chiseled Red Sandstone" - }, - { - "internalName": "red_sandstone_smooth", - "displayName": "Smooth Red Standstone" - }, - { - "internalName": "door_acacia_upper", - "displayName": "Acacia Door (Top)" - }, - { - "internalName": "door_birch_upper", - "displayName": "Birch Door (Top)" - }, - { - "internalName": "door_dark_oak_upper", - "displayName": "Dark Oak Door (Top)" - }, - { - "internalName": "door_jungle_upper", - "displayName": "Jungle Door (Top)" - }, - { - "internalName": "door_spruce_upper", - "displayName": "Spruce Door (Top)" - }, - { - "internalName": "chorus_flower", - "displayName": "Chorus Flower" - }, - { - "internalName": "chorus_flower_dead", - "displayName": "Chorus Flower (Dead)" - }, - { - "internalName": "chorus_flower_plant", - "displayName": "Chorus Plant" - }, - { - "internalName": "end_bricks", - "displayName": "End Stone Bricks" - }, - { - "internalName": "grass_path_side", - "displayName": "Grass Path (Side)" - }, - { - "internalName": "grass_path_top", - "displayName": "Grass Path (Top)" - }, - { - "internalName": "barrier", - "displayName": "Barrier" - }, - { - "internalName": "ice_packed", - "displayName": "Packed Ice" - }, - { - "internalName": "sea_lantern", - "displayName": "Sea Lantern" - }, - { - "internalName": "daylight_detector_inverted_top", - "displayName": "Daylight Sensor (Inverted) (Top)" - }, - { - "internalName": "iron_trapdoor", - "displayName": "Iron Trapdoor" - }, - { - "internalName": "door_acacia_lower", - "displayName": "Acacia Door (Bottom)" - }, - { - "internalName": "door_birch_lower", - "displayName": "Birch Door (Bottom)" - }, - { - "internalName": "door_dark_oak_lower", - "displayName": "Dark Oak Door (Bottom)" - }, - { - "internalName": "door_jungle_lower", - "displayName": "Jungle Door (Bottom)" - }, - { - "internalName": "door_spruce_lower", - "displayName": "Spruce Door (Bottom)" - }, - { - "internalName": "purpur_block", - "displayName": "Purpur Block" - }, - { - "internalName": "purpur_pillar", - "displayName": "Purpur Pillar (Side)" - }, - { - "internalName": "purpur_pillar_top", - "displayName": "Purpur Pillar (Top)" - }, - { - "internalName": "end_rod", - "displayName": "End Rod" - }, - { - "internalName": "magma", - "displayName": "Magma Block" - }, - { - "internalName": "nether_wart_block", - "displayName": "Nether Wart Block" - }, - { - "internalName": "red_nether_brick", - "displayName": "Red Nether Brick" - }, - { - "internalName": "frosted_ice_0", - "displayName": "Frosted Ice (Stage 1)" - }, - { - "internalName": "frosted_ice_1", - "displayName": "Frosted Ice (Stage 2)" - }, - { - "internalName": "frosted_ice_2", - "displayName": "Frosted Ice (Stage 3)" - }, - { - "internalName": "frosted_ice_3", - "displayName": "Frosted Ice (Stage 4)" - }, - { - "internalName": "beetroots_stage_0", - "displayName": "Beetroots (Stage 1)" - }, - { - "internalName": "beetroots_stage_1", - "displayName": "Beetroots (Stage 2)" - }, - { - "internalName": "beetroots_stage_2", - "displayName": "Beetroots (Stage 3)" - }, - { - "internalName": "beetroots_stage_3", - "displayName": "Beetroots (Stage 4)" - }, - { - "internalName": "chain_command_block_back", - "displayName": "Chain Command Block (Back)" - }, - { - "internalName": "chain_command_block_conditional", - "displayName": "Chain Command Block (Conditional) (Side)" - }, - { - "internalName": "chain_command_block_front", - "displayName": "Chain Command Block (Front)" - }, - { - "internalName": "chain_command_block_side", - "displayName": "Chain Command Block (Side)" - }, - { - "internalName": "command_block_back", - "displayName": "Command Block (Back)" - }, - { - "internalName": "command_block_conditional", - "displayName": "Command Block (Conditional) (Side)" - }, - { - "internalName": "command_block_front", - "displayName": "Command Block (Front)" - }, - { - "internalName": "command_block_side", - "displayName": "Command Block (Side)" - }, - { - "internalName": "repeating_command_block_back", - "displayName": "Repeating Command Block (Back)" - }, - { - "internalName": "repeating_command_block_conditional", - "displayName": "Repeating Command Block (Conditional) (Side)" - }, - { - "internalName": "repeating_command_block_front", - "displayName": "Repeating Command Block (Front)" - }, - { - "internalName": "repeating_command_block_side", - "displayName": "Repeating Command Block (Side)" - }, - { - "internalName": "bone_block_side", - "displayName": "Bone Block (Side)" - }, - { - "internalName": "bone_block_top", - "displayName": "Bone Block (Top)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "observer_front", - "displayName": "Observer (Front)" - }, - { - "internalName": "observer_side", - "displayName": "Observer (Side)" - }, - { - "internalName": "observer_back", - "displayName": "Observer (Back)" - }, - { - "internalName": "observer_back_lit", - "displayName": "Observer (On) (Back)" - }, - { - "internalName": "observer_top", - "displayName": "Observer (Top and Bottom)" - }, - { - "internalName": "goldRing", - "displayName": "Gold Score Ring" - }, - { - "internalName": "emeraldRing", - "displayName": "Emerald Score Ring" - }, - { - "internalName": "structure_block", - "displayName": "Structure Block" - }, - { - "internalName": "structure_block_corner", - "displayName": "Structure Block (Corner)" - }, - { - "internalName": "structure_block_data", - "displayName": "Structure Block (Data)" - }, - { - "internalName": "structure_block_load", - "displayName": "Structure Block (Load)" - }, - { - "internalName": "structure_block_save", - "displayName": "Structure Block (Save)" - }, - { - "internalName": "concrete_black", - "displayName": "Black Concrete" - }, - { - "internalName": "concrete_blue", - "displayName": "Blue Concrete" - }, - { - "internalName": "concrete_brown", - "displayName": "Brown Concrete" - }, - { - "internalName": "concrete_cyan", - "displayName": "Cyan Concrete" - }, - { - "internalName": "concrete_gray", - "displayName": "Gray Concrete" - }, - { - "internalName": "concrete_green", - "displayName": "Green Concrete" - }, - { - "internalName": "concrete_light_blue", - "displayName": "Light Blue Concrete" - }, - { - "internalName": "concrete_lime", - "displayName": "Lime Concrete" - }, - { - "internalName": "concrete_magenta", - "displayName": "Magenta Concrete" - }, - { - "internalName": "concrete_orange", - "displayName": "Orange Concrete" - }, - { - "internalName": "concrete_pink", - "displayName": "Pink Concrete" - }, - { - "internalName": "concrete_purple", - "displayName": "Purple Concrete" - }, - { - "internalName": "concrete_red", - "displayName": "Red Concrete" - }, - { - "internalName": "concrete_silver", - "displayName": "Light Gray Concrete" - }, - { - "internalName": "concrete_white", - "displayName": "White Concrete" - }, - { - "internalName": "concrete_yellow", - "displayName": "Yellow Concrete" - }, - { - "internalName": "concrete_powder_black", - "displayName": "Black Concrete Powder" - }, - { - "internalName": "concrete_powder_blue", - "displayName": "Blue Concrete Powder" - }, - { - "internalName": "concrete_powder_brown", - "displayName": "Brown Concrete Powder" - }, - { - "internalName": "concrete_powder_cyan", - "displayName": "Cyan Concrete Powder" - }, - { - "internalName": "concrete_powder_gray", - "displayName": "Gray Concrete Powder" - }, - { - "internalName": "concrete_powder_green", - "displayName": "Green Concrete Powder" - }, - { - "internalName": "concrete_powder_light_blue", - "displayName": "Light Blue Concrete Powder" - }, - { - "internalName": "concrete_powder_lime", - "displayName": "Lime Concrete Powder" - }, - { - "internalName": "concrete_powder_magenta", - "displayName": "Magenta Concrete Powder" - }, - { - "internalName": "concrete_powder_orange", - "displayName": "Orange Concrete Powder" - }, - { - "internalName": "concrete_powder_pink", - "displayName": "Pink Concrete Powder" - }, - { - "internalName": "concrete_powder_purple", - "displayName": "Purple Concrete Powder" - }, - { - "internalName": "concrete_powder_red", - "displayName": "Red Concrete Powder" - }, - { - "internalName": "concrete_powder_silver", - "displayName": "Light Gray Concrete Powder" - }, - { - "internalName": "concrete_powder_white", - "displayName": "White Concrete Powder" - }, - { - "internalName": "concrete_powder_yellow", - "displayName": "Yellow Concrete Powder" - }, - { - "internalName": "glazed_terracotta_black", - "displayName": "Black Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_blue", - "displayName": "Blue Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_brown", - "displayName": "Brown Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_cyan", - "displayName": "Cyan Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_gray", - "displayName": "Gray Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_green", - "displayName": "Green Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_light_blue", - "displayName": "Light Blue Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_lime", - "displayName": "Lime Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_magenta", - "displayName": "Magenta Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_orange", - "displayName": "Orange Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_pink", - "displayName": "Pink Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_purple", - "displayName": "Purple Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_red", - "displayName": "Red Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_silver", - "displayName": "Light Gray Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_white", - "displayName": "White Glazed Terracotta" - }, - { - "internalName": "glazed_terracotta_yellow", - "displayName": "Yellow Glazed Terracotta" - }, - { - "internalName": "shulker_top", - "displayName": "Shulker Box (Break Particles)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Shulker_Box_Purple", - "variants": [ - "Shulker_Box_Black", - "Shulker_Box_Blue", - "Shulker_Box_Brown", - "Shulker_Box_Cyan", - "Shulker_Box_Grey", - "Shulker_Box_Green", - "Shulker_Box_Light_Blue", - "Shulker_Box_Light_Green", - "Shulker_Box_Magenta", - "Shulker_Box_Orange", - "Shulker_Box_Pink", - "Shulker_Box_Purple", - "Shulker_Box_Red", - "Shulker_Box_Silver", - "Shulker_Box_White", - "Shulker_Box_Yellow" - ] - } - }, - { - "internalName": "shulker_top_overlay", - "displayName": "Shulker Box (Break Particles) (Overlay) (Unused)" - }, - { - "internalName": "cauldron_water", - "displayName": "Cauldron Water", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "Cauldron_Water", - "variants": [ - "Cauldron_Water", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "seagrass_doubletall_top", - "displayName": "Double Tall Seagrass (Top)" - }, - { - "internalName": "coral_blue", - "displayName": "Tube Coral Block" - }, - { - "internalName": "coral_purple", - "displayName": "Bubble Coral Block" - }, - { - "internalName": "coral_pink", - "displayName": "Brain Coral Block" - }, - { - "internalName": "coral_red", - "displayName": "Fire Coral Block" - }, - { - "internalName": "coral_yellow", - "displayName": "Horn Coral Block" - }, - { - "internalName": "coral_plant_blue", - "displayName": "Tube Coral" - }, - { - "internalName": "coral_plant_purple", - "displayName": "Bubble Coral" - }, - { - "internalName": "coral_plant_pink", - "displayName": "Brain Coral" - }, - { - "internalName": "coral_plant_red", - "displayName": "Fire Coral" - }, - { - "internalName": "coral_plant_yellow", - "displayName": "Horn Coral" - }, - { - "internalName": "sea_pickle", - "displayName": "Sea Pickle" - }, - { - "internalName": "blue_ice", - "displayName": "Blue Ice" - }, - { - "internalName": "dried_kelp_top", - "displayName": "Dried Kelp Block (Top)" - }, - { - "internalName": "dried_kelp_side", - "displayName": "Dried Kelp Block (Side)" - }, - { - "internalName": "seagrass_carried", - "displayName": "Seagrass (Item)" - }, - { - "internalName": "seagrass_doubletall_bottom", - "displayName": "Double Tall Seagrass (Bottom)" - }, - { - "internalName": "coral_blue_dead", - "displayName": "Dead Tube Coral Block" - }, - { - "internalName": "coral_purple_dead", - "displayName": "Dead Bubble Coral Block" - }, - { - "internalName": "coral_pink_dead", - "displayName": "Dead Brain Coral Block" - }, - { - "internalName": "coral_red_dead", - "displayName": "Dead Fire Coral Block" - }, - { - "internalName": "coral_yellow_dead", - "displayName": "Dead Horn Coral Block" - }, - { - "internalName": "coral_fan_blue", - "displayName": "Tube Coral Fan" - }, - { - "internalName": "coral_fan_purple", - "displayName": "Bubble Coral Fan" - }, - { - "internalName": "coral_fan_pink", - "displayName": "Brain Coral Fan" - }, - { - "internalName": "coral_fan_red", - "displayName": "Fire Coral Fan" - }, - { - "internalName": "coral_fan_yellow", - "displayName": "Horn Coral Fan" - }, - { - "internalName": "bamboo_stem", - "displayName": "Bamboo (Stem) [PS4 ONLY]" - }, - { - "internalName": "bamboo_leaf_small", - "displayName": "Bamboo (Small Leaves) [PS4 ONLY]" - }, - { - "internalName": "kelp_a", - "displayName": "Kelp (Bottom)" - }, - { - "internalName": "kelp_a", - "displayName": "" - }, - { - "internalName": "kelp_a", - "displayName": "" - }, - { - "internalName": "kelp_a", - "displayName": "" - }, - { - "internalName": "kelp_top_a", - "displayName": "Kelp (Top)" - }, - { - "internalName": "kelp_top_a", - "displayName": "" - }, - { - "internalName": "kelp_top_a", - "displayName": "" - }, - { - "internalName": "kelp_top_a", - "displayName": "" - }, - { - "internalName": "seagrass", - "displayName": "Seagrass" - }, - { - "internalName": "coral_fan_blue_dead", - "displayName": "Dead Tube Coral Fan" - }, - { - "internalName": "coral_fan_purple_dead", - "displayName": "Dead Bubble Coral Fan" - }, - { - "internalName": "coral_fan_pink_dead", - "displayName": "Dead Brain Coral Fan" - }, - { - "internalName": "coral_fan_red_dead", - "displayName": "Dead Fire Coral Fan" - }, - { - "internalName": "coral_fan_yellow_dead", - "displayName": "Dead Horn Coral Fan" - }, - { - "internalName": "bamboo_leaf", - "displayName": "Bamboo (Leaves) [PS4 ONLY]" - }, - { - "internalName": "spruce_trapdoor", - "displayName": "Spruce Trapdoor" - }, - { - "internalName": "stripped_log_oak", - "displayName": "Stripped Oak Log (Side)" - }, - { - "internalName": "stripped_log_oak_top", - "displayName": "Stripped Oak Log (Top)" - }, - { - "internalName": "stripped_log_acacia", - "displayName": "Stripped Acacia Log (Side)" - }, - { - "internalName": "stripped_log_acacia_top", - "displayName": "Stripped Acacia Log (Top)" - }, - { - "internalName": "stripped_log_birch", - "displayName": "Stripped Birch Log (Side)" - }, - { - "internalName": "stripped_log_birch_top", - "displayName": "Stripped Birch Log (Top)" - }, - { - "internalName": "stripped_log_dark_oak", - "displayName": "Stripped Dark Oak Log (Side)" - }, - { - "internalName": "stripped_log_dark_oak_top", - "displayName": "Stripped Dark Oak Log (Top)" - }, - { - "internalName": "stripped_log_jungle", - "displayName": "Stripped Jungle Log (Side)" - }, - { - "internalName": "stripped_log_jungle_top", - "displayName": "Stripped Birch Log (Top)" - }, - { - "internalName": "stripped_log_spruce", - "displayName": "Stripped Spruce Log (Side)" - }, - { - "internalName": "stripped_log_spruce_top", - "displayName": "Stripped Spruce Log (Top)" - }, - { - "internalName": "acacia_trapdoor", - "displayName": "Acacia Trapdoor" - }, - { - "internalName": "birch_trapdoor", - "displayName": "Birch Trapdoor" - }, - { - "internalName": "dark_oak_trapdoor", - "displayName": "Dark Oak Trapdoor" - }, - { - "internalName": "jungle_trapdoor", - "displayName": "Jungle Trapdoor" - }, - { - "internalName": "bamboo_sapling", - "displayName": "Bamboo Sapling [PS4 ONLY]" - }, - { - "internalName": "bamboo_singleleaf", - "displayName": "Bamboo (Single Leaf) [PS4 ONLY]" - }, - { - "internalName": "flower_lily_of_the_valley", - "displayName": "Lily of the Valley [PS4 ONLY]" - }, - { - "internalName": "flower_cornflower", - "displayName": "Cornflower [PS4 ONLY]" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "berry_bush_sapling", - "displayName": "Sweet Berry Bush (Stage 1) [PS4 ONLY]" - }, - { - "internalName": "berry_bush_no_berries", - "displayName": "Sweet Berry Bush (Stage 2) [PS4 ONLY]" - }, - { - "internalName": "berry_bush_some_berries", - "displayName": "Sweet Berry Bush (Stage 3) [PS4 ONLY]" - }, - { - "internalName": "berry_bush_full_berries", - "displayName": "Sweet Berry Bush (Stage 4) [PS4 ONLY]" - }, - { - "internalName": "campfire_log", - "displayName": "Campfire (Log) [PS4 ONLY]" - }, - { - "internalName": "campfire_log_lit", - "displayName": "Campfire (Log) (Lit) [PS4 ONLY]" - }, - { - "internalName": "campfire_smoke", - "displayName": "Campfire (Smoke) [PS4 ONLY]" - }, - { - "internalName": "campfire", - "displayName": "Campfire (Flame) [PS4 ONLY]" - }, - { - "internalName": "scaffolding_side", - "displayName": "Scaffolding (Side) [PS4 ONLY]" - }, - { - "internalName": "scaffolding_bottom", - "displayName": "Scaffolding (Bottom) [PS4 ONLY]" - }, - { - "internalName": "scaffolding_top", - "displayName": "Scaffolding (Top) [PS4 ONLY]" - }, - { - "internalName": "barrel_side", - "displayName": "Barrel (Side) [PS4 ONLY]" - }, - { - "internalName": "barrel_top", - "displayName": "Barrel (Top) [PS4 ONLY]" - }, - { - "internalName": "barrel_bottom", - "displayName": "Barrel (Bottom) [PS4 ONLY]" - }, - { - "internalName": "bell_side", - "displayName": "Bell (Side) [PS4 ONLY]" - }, - { - "internalName": "bell_top", - "displayName": "Bell (Top) [PS4 ONLY]" - }, - { - "internalName": "bell_bottom", - "displayName": "Bell (Bottom) [PS4 ONLY]" - }, - { - "internalName": "lantern", - "displayName": "Lantern [PS4 ONLY]" - }, - { - "internalName": "jigsaw_side", - "displayName": "Jigsaw (Side) [PS4 ONLY]" - }, - { - "internalName": "jigsaw_top", - "displayName": "Jigsaw (Top) [PS4 ONLY]" - }, - { - "internalName": "blast_furnace_front", - "displayName": "Blast Furnace (Front) [PS4 ONLY]" - }, - { - "internalName": "blast_furnace_front_on", - "displayName": "Blast Furnace (Front) (Lit) [PS4 ONLY]" - }, - { - "internalName": "blast_furnace_side", - "displayName": "Blast Furnace (Side) [PS4 ONLY]" - }, - { - "internalName": "blast_furnace_top", - "displayName": "Blast Furnace (Top) [PS4 ONLY]" - }, - { - "internalName": "grindstone_side", - "displayName": "Grindstone (Side) [PS4 ONLY]" - }, - { - "internalName": "grindstone_round", - "displayName": "Grindstone (Round) [PS4 ONLY]" - }, - { - "internalName": "grindstone_pivot", - "displayName": "Grindstone (Pivot) [PS4 ONLY]" - }, - { - "internalName": "cartography_table_side1", - "displayName": "Cartography Table (Back) [PS4 ONLY]" - }, - { - "internalName": "cartography_table_side2", - "displayName": "Cartography Table (Right Side) [PS4 ONLY]" - }, - { - "internalName": "cartography_table_side3", - "displayName": "Cartography Table (Front and Left Side) [PS4 ONLY]" - }, - { - "internalName": "cartography_table_top", - "displayName": "Cartography Table (Top) [PS4 ONLY]" - }, - { - "internalName": "lectern_sides", - "displayName": "Lectern (Side) [PS4 ONLY]" - }, - { - "internalName": "lectern_front", - "displayName": "Lectern (Front) [PS4 ONLY]" - }, - { - "internalName": "lectern_base", - "displayName": "Lectern (Base) [PS4 ONLY]" - }, - { - "internalName": "lectern_top", - "displayName": "Lectern (Top) [PS4 ONLY]" - }, - { - "internalName": "loom_side", - "displayName": "Loom (Side) [PS4 ONLY]" - }, - { - "internalName": "loom_front", - "displayName": "Loom (Front) [PS4 ONLY]" - }, - { - "internalName": "loom_top", - "displayName": "Loom (Top) [PS4 ONLY]" - }, - { - "internalName": "loom_bottom", - "displayName": "Loom (Bottom) [PS4 ONLY]" - }, - { - "internalName": "smithing_table_side", - "displayName": "Smithing Table (Side) [PS4 ONLY]" - }, - { - "internalName": "smithing_table_front", - "displayName": "Smithing Table (Front) [PS4 ONLY]" - }, - { - "internalName": "smithing_table_top", - "displayName": "Smithing Table (Top) [PS4 ONLY]" - }, - { - "internalName": "composter_top", - "displayName": "Composter (Top) [PS4 ONLY]" - }, - { - "internalName": "fletcher_table_side2", - "displayName": "Fletching Table (Front and Back) [PS4 ONLY]" - }, - { - "internalName": "fletcher_table_side1", - "displayName": "Fletching Table (Side) [PS4 ONLY]" - }, - { - "internalName": "fletcher_table_top", - "displayName": "Fletching Table (Top) [PS4 ONLY]" - }, - { - "internalName": "stonecutter2_saw", - "displayName": "Stonecutter (Saw) [PS4 ONLY]" - }, - { - "internalName": "stonecutter2_side", - "displayName": "Stonecutter (Side) [PS4 ONLY]" - }, - { - "internalName": "stonecutter2_top", - "displayName": "Stonecutter (Top) [PS4 ONLY]" - }, - { - "internalName": "stonecutter2_bottom", - "displayName": "Stonecutter (Bottom) [PS4 ONLY]" - }, - { - "internalName": "smoker_side", - "displayName": "Smoker (Side) [PS4 ONLY]" - }, - { - "internalName": "smoker_front", - "displayName": "Smoker (Front) [PS4 ONLY]" - }, - { - "internalName": "smoker_front_on", - "displayName": "Smoker (Front) (Lit) [PS4 ONLY]" - }, - { - "internalName": "smoker_top", - "displayName": "Smoker (Top) [PS4 ONLY]" - }, - { - "internalName": "smoker_bottom", - "displayName": "Smoker (Bottom) [PS4 ONLY]" - }, - { - "internalName": "compost", - "displayName": "Compost [PS4 ONLY]" - }, - { - "internalName": "compost_ready", - "displayName": "Compost (Ready) [PS4 ONLY]" - }, - { - "internalName": "composter_bottom", - "displayName": "Composter (Bottom) [PS4 ONLY]" - }, - { - "internalName": "composter_side", - "displayName": "Composter (Side) [PS4 ONLY]" - }, - { - "internalName": "barrel_top_open", - "displayName": "Barrel (Top) (Open) [PS4 ONLY]" - }, - { - "internalName": "smithing_table_bottom", - "displayName": "Smithing Table (Bottom) [PS4 ONLY]" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - } - ], - "items": [ - { - "internalName": "helmetCloth", - "displayName": "Leather Cap", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "Armour_Default_Leather_Colour", - "variants": [ "Armour_Default_Leather_Colour" ] - } - }, - { - "internalName": "helmetChain", - "displayName": "Chain Helmet" - }, - { - "internalName": "helmetIron", - "displayName": "Iron Helmet" - }, - { - "internalName": "helmetDiamond", - "displayName": "Diamond Helmet" - }, - { - "internalName": "helmetGold", - "displayName": "Golden Helmet" - }, - { - "internalName": "flintAndSteel", - "displayName": "Flint and Steel" - }, - { - "internalName": "flint", - "displayName": "Flint" - }, - { - "internalName": "coal", - "displayName": "Coal" - }, - { - "internalName": "string", - "displayName": "String" - }, - { - "internalName": "seeds", - "displayName": "Seeds" - }, - { - "internalName": "apple", - "displayName": "Apple" - }, - { - "internalName": "appleGold", - "displayName": "Golden Apple" - }, - { - "internalName": "egg", - "displayName": "Egg" - }, - { - "internalName": "sugar", - "displayName": "Sugar" - }, - { - "internalName": "snowball", - "displayName": "Snowball" - }, - { - "internalName": "elytra", - "displayName": "Elytra" - }, - { - "internalName": "chestplateCloth", - "displayName": "Leather Tunic", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "Armour_Default_Leather_Colour", - "variants": [ "Armour_Default_Leather_Colour" ] - } - }, - { - "internalName": "chestplateChain", - "displayName": "Chain Chestplate" - }, - { - "internalName": "chestplateIron", - "displayName": "Iron Chestplate" - }, - { - "internalName": "chestplateDiamond", - "displayName": "Diamond Chestplate" - }, - { - "internalName": "chestplateGold", - "displayName": "Golden Chestplate" - }, - { - "internalName": "bow", - "displayName": "Bow" - }, - { - "internalName": "brick", - "displayName": "Brick" - }, - { - "internalName": "ingotIron", - "displayName": "Iron Ingot" - }, - { - "internalName": "feather", - "displayName": "Feather" - }, - { - "internalName": "wheat", - "displayName": "Wheat" - }, - { - "internalName": "painting", - "displayName": "Painting" - }, - { - "internalName": "reeds", - "displayName": "Sugar Canes" - }, - { - "internalName": "bone", - "displayName": "Bone" - }, - { - "internalName": "cake", - "displayName": "Cake" - }, - { - "internalName": "slimeball", - "displayName": "Slimeball" - }, - { - "internalName": "broken_elytra", - "displayName": "Elytra (Broken)" - }, - { - "internalName": "leggingsCloth", - "displayName": "Leather Pants", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "Armour_Default_Leather_Colour", - "variants": [ "Armour_Default_Leather_Colour" ] - } - }, - { - "internalName": "leggingsChain", - "displayName": "Chain Leggings" - }, - { - "internalName": "leggingsIron", - "displayName": "Iron Leggings" - }, - { - "internalName": "leggingsDiamond", - "displayName": "Diamond Leggings" - }, - { - "internalName": "leggingsGold", - "displayName": "Golden Leggings" - }, - { - "internalName": "arrow", - "displayName": "Arrow" - }, - { - "internalName": "end_crystal", - "displayName": "End Crystal" - }, - { - "internalName": "ingotGold", - "displayName": "Gold Ingot" - }, - { - "internalName": "sulphur", - "displayName": "Gunpowder" - }, - { - "internalName": "bread", - "displayName": "Bread" - }, - { - "internalName": "sign", - "displayName": "Oak Sign" - }, - { - "internalName": "doorWood", - "displayName": "Oak Door" - }, - { - "internalName": "doorIron", - "displayName": "Iron Door" - }, - { - "internalName": "bed", - "displayName": "Bed" - }, - { - "internalName": "fireball", - "displayName": "Fire Charge" - }, - { - "internalName": "chorus_fruit", - "displayName": "Chorus Fruit" - }, - { - "internalName": "bootsCloth", - "displayName": "Leather Boots", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "Armour_Default_Leather_Colour", - "variants": [ "Armour_Default_Leather_Colour" ] - } - }, - { - "internalName": "bootsChain", - "displayName": "Chain Boots" - }, - { - "internalName": "bootsIron", - "displayName": "Iron Boots" - }, - { - "internalName": "bootsDiamond", - "displayName": "Diamond Boots" - }, - { - "internalName": "bootsGold", - "displayName": "Golden Boots" - }, - { - "internalName": "stick", - "displayName": "Stick" - }, - { - "internalName": "compass", - "displayName": "Compass" - }, - { - "internalName": "diamond", - "displayName": "Diamond" - }, - { - "internalName": "redstone", - "displayName": "Redstone" - }, - { - "internalName": "clay", - "displayName": "Clay" - }, - { - "internalName": "paper", - "displayName": "Paper" - }, - { - "internalName": "book", - "displayName": "Book" - }, - { - "internalName": "map", - "displayName": "Map" - }, - { - "internalName": "seeds_pumpkin", - "displayName": "Pumpkin Seeds" - }, - { - "internalName": "seeds_melon", - "displayName": "Melon Seeds" - }, - { - "internalName": "chorus_fruit_popped", - "displayName": "Popped Chorus Fruit" - }, - { - "internalName": "swordWood", - "displayName": "Wooden Sword" - }, - { - "internalName": "swordStone", - "displayName": "Stone Sword" - }, - { - "internalName": "swordIron", - "displayName": "Iron Sword" - }, - { - "internalName": "swordDiamond", - "displayName": "Diamond Sword" - }, - { - "internalName": "swordGold", - "displayName": "Golden Sword" - }, - { - "internalName": "fishingRod_uncast", - "displayName": "Fishing Rod" - }, - { - "internalName": "clock", - "displayName": "Clock" - }, - { - "internalName": "bowl", - "displayName": "Bowl" - }, - { - "internalName": "mushroomStew", - "displayName": "Mushroom Stew" - }, - { - "internalName": "yellowDust", - "displayName": "Glowstone Dust" - }, - { - "internalName": "bucket", - "displayName": "Bucket" - }, - { - "internalName": "bucketWater", - "displayName": "Water Bucket" - }, - { - "internalName": "bucketLava", - "displayName": "Lava Bucket" - }, - { - "internalName": "milk", - "displayName": "Milk Bucket" - }, - { - "internalName": "dyePowder_black", - "displayName": "Ink Sac" - }, - { - "internalName": "dyePowder_gray", - "displayName": "Gray Dye" - }, - { - "internalName": "shovelWood", - "displayName": "Wooden Shovel" - }, - { - "internalName": "shovelStone", - "displayName": "Stone Shovel" - }, - { - "internalName": "shovelIron", - "displayName": "Iron Shovel" - }, - { - "internalName": "shovelDiamond", - "displayName": "Diamond Shovel" - }, - { - "internalName": "shovelGold", - "displayName": "Golden Shovel" - }, - { - "internalName": "fishingRod_cast", - "displayName": "Fishing Rod (Cast)" - }, - { - "internalName": "diode", - "displayName": "Redstone Repeater" - }, - { - "internalName": "porkchopRaw", - "displayName": "Raw Porkchop" - }, - { - "internalName": "porkchopCooked", - "displayName": "Cooked Porkchop" - }, - { - "internalName": "fishRaw", - "displayName": "Raw Cod" - }, - { - "internalName": "fishCooked", - "displayName": "Cooked Cod" - }, - { - "internalName": "rottenFlesh", - "displayName": "Rotten Flesh" - }, - { - "internalName": "cookie", - "displayName": "Cookie" - }, - { - "internalName": "shears", - "displayName": "Shears" - }, - { - "internalName": "dyePowder_red", - "displayName": "Rose Red" - }, - { - "internalName": "dyePowder_pink", - "displayName": "Pink Dye" - }, - { - "internalName": "pickaxeWood", - "displayName": "Wooden Pickaxe" - }, - { - "internalName": "pickaxeStone", - "displayName": "Stone Pickaxe" - }, - { - "internalName": "pickaxeIron", - "displayName": "Iron Pickaxe" - }, - { - "internalName": "pickaxeDiamond", - "displayName": "Diamond Pickaxe" - }, - { - "internalName": "pickaxeGold", - "displayName": "Golden Pickaxe" - }, - { - "internalName": "bow_pull_0", - "displayName": "Bow (Pulling Stage 1)" - }, - { - "internalName": "carrotOnAStick", - "displayName": "Carrot on a Stick" - }, - { - "internalName": "leather", - "displayName": "Leather" - }, - { - "internalName": "saddle", - "displayName": "Saddle" - }, - { - "internalName": "beefRaw", - "displayName": "Raw Beef" - }, - { - "internalName": "beefCooked", - "displayName": "Steak" - }, - { - "internalName": "enderPearl", - "displayName": "Ender Pearl" - }, - { - "internalName": "blazeRod", - "displayName": "Blaze Rod" - }, - { - "internalName": "melon", - "displayName": "Melon Slice" - }, - { - "internalName": "dyePowder_green", - "displayName": "Cactus Green" - }, - { - "internalName": "dyePowder_lime", - "displayName": "Lime Dye" - }, - { - "internalName": "hatchetWood", - "displayName": "Wooden Axe" - }, - { - "internalName": "hatchetStone", - "displayName": "Stone Axe" - }, - { - "internalName": "hatchetIron", - "displayName": "Iron Axe" - }, - { - "internalName": "hatchetDiamond", - "displayName": "Diamond Axe" - }, - { - "internalName": "hatchetGold", - "displayName": "Golden Axe" - }, - { - "internalName": "bow_pull_1", - "displayName": "Bow (Pulling Stage 2)" - }, - { - "internalName": "potatoBaked", - "displayName": "Baked Potato" - }, - { - "internalName": "potato", - "displayName": "Potato" - }, - { - "internalName": "carrots", - "displayName": "Carrot" - }, - { - "internalName": "chickenRaw", - "displayName": "Raw Chicken" - }, - { - "internalName": "chickenCooked", - "displayName": "Cooked Chicken" - }, - { - "internalName": "ghastTear", - "displayName": "Ghast Tear" - }, - { - "internalName": "goldNugget", - "displayName": "Gold Nugget" - }, - { - "internalName": "netherStalkSeeds", - "displayName": "Nether Wart" - }, - { - "internalName": "dyePowder_brown", - "displayName": "Cocoa Beans" - }, - { - "internalName": "dyePowder_yellow", - "displayName": "Dandelion Yellow" - }, - { - "internalName": "hoeWood", - "displayName": "Wooden Hoe" - }, - { - "internalName": "hoeStone", - "displayName": "Stone Hoe" - }, - { - "internalName": "hoeIron", - "displayName": "Iron Hoe" - }, - { - "internalName": "hoeDiamond", - "displayName": "Diamond Hoe" - }, - { - "internalName": "hoeGold", - "displayName": "Golden Hoe" - }, - { - "internalName": "bow_pull_2", - "displayName": "Bow (Pulling Stage 3)" - }, - { - "internalName": "potatoPoisonous", - "displayName": "Poisonous Potato" - }, - { - "internalName": "minecart", - "displayName": "Minecart" - }, - { - "internalName": "boat", - "displayName": "Oak Boat" - }, - { - "internalName": "speckledMelon", - "displayName": "Glistering Melon" - }, - { - "internalName": "fermentedSpiderEye", - "displayName": "Fermented Spider Eye" - }, - { - "internalName": "spiderEye", - "displayName": "Spider Eye" - }, - { - "internalName": "glassBottle", - "displayName": "Glass Bottle" - }, - { - "internalName": "potion_contents", - "displayName": "Potion (Overlay)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "dyePowder_blue", - "displayName": "Lapis Lazuli" - }, - { - "internalName": "dyePowder_light_blue", - "displayName": "Light Blue Dye" - }, - { - "internalName": "helmetCloth_overlay", - "displayName": "Leather Cap (Overlay)" - }, - { - "internalName": "spectral_arrow", - "displayName": "Spectral Arrow" - }, - { - "internalName": "iron_horse_armor", - "displayName": "Iron Horse Armor" - }, - { - "internalName": "diamond_horse_armor", - "displayName": "Diamond Horse Armor" - }, - { - "internalName": "gold_horse_armor", - "displayName": "Gold Horse Armor" - }, - { - "internalName": "comparator", - "displayName": "Redstone Comparator" - }, - { - "internalName": "carrotGolden", - "displayName": "Golden Carrot" - }, - { - "internalName": "minecart_chest", - "displayName": "Minecart with Chest" - }, - { - "internalName": "pumpkinPie", - "displayName": "Pumpkin Pie" - }, - { - "internalName": "monsterPlacer", - "displayName": "Spawn Egg", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Mob_Creeper_Colour1", - "variants": [ - "Mob_Creeper_Colour1", - "Mob_Skeleton_Colour1", - "Mob_Spider_Colour1", - "Mob_Zombie_Colour1", - "Mob_Slime_Colour1", - "Mob_Ghast_Colour1", - "Mob_PigZombie_Colour1", - "Mob_Enderman_Colour1", - "Mob_CaveSpider_Colour1", - "Mob_Silverfish_Colour1", - "Mob_Blaze_Colour1", - "Mob_LavaSlime_Colour1", - "Mob_Pig_Colour1", - "Mob_Sheep_Colour1", - "Mob_Cow_Colour1", - "Mob_Chicken_Colour1", - "Mob_Squid_Colour1", - "Mob_Wolf_Colour1", - "Mob_MushroomCow_Colour1", - "Mob_Ocelot_Colour1", - "Mob_Villager_Colour1", - "Mob_Bat_Colour1", - "Mob_Witch_Colour1", - "Mob_Horse_Colour1", - "Mob_Endermite_Color1", - "Mob_Guardian_Color1", - "Mob_Rabbit_Colour1", - "Mob_PolarBear_Colour1", - "Mob_Shulker_Colour1", - "Mob_Elder_Guardian_Colour1", - "Mob_Evocation_Illager_Colour1", - "Mob_Llama_Colour1", - "Mob_Donkey_Colour1", - "Mob_Skeleton_Horse_Colour1", - "Mob_Zombie_Horse_Colour1", - "Mob_Mule_Colour1", - "Mob_Stray_Colour1", - "Mob_Husk_Colour1", - "Mob_Vex_Colour1", - "Mob_Vindication_Illager_Colour1", - "Mob_Zombie_Villager_Colour1", - "Mob_Parrot_Colour1", - "Mob_Wither_Skeleton_Colour1", - "Mob_Turtle_Colour1", - "Mob_Tropical_Colour1", - "Mob_Cod_Colour1", - "Mob_Pufferfish_Colour1", - "Mob_Salmon_Colour1", - "Mob_Drowned_Colour1", - "Mob_Dolphin_Colour1", - "Mob_Phantom_Colour1" - ] - } - }, - { - "internalName": "potion_splash", - "displayName": "Splash Potion" - }, - { - "internalName": "eyeOfEnder", - "displayName": "Eye of Ender" - }, - { - "internalName": "cauldron", - "displayName": "Cauldron" - }, - { - "internalName": "blazePowder", - "displayName": "Blaze Powder" - }, - { - "internalName": "dyePowder_purple", - "displayName": "Purple Dye" - }, - { - "internalName": "dyePowder_magenta", - "displayName": "Magenta Dye" - }, - { - "internalName": "chestplateCloth_overlay", - "displayName": "Leather Tunic (Overlay)" - }, - { - "internalName": "tipped_arrow_base", - "displayName": "Tipped Arrow" - }, - { - "internalName": "dragon_breath", - "displayName": "Dragon's Breath" - }, - { - "internalName": "name_tag", - "displayName": "Name Tag" - }, - { - "internalName": "lead", - "displayName": "Lead" - }, - { - "internalName": "netherbrick", - "displayName": "Nether Brick" - }, - { - "internalName": "fish_clownfish_raw", - "displayName": "Tropical Fish" - }, - { - "internalName": "minecart_furnace", - "displayName": "Minecart with Furnace" - }, - { - "internalName": "charcoal", - "displayName": "Charcoal" - }, - { - "internalName": "monsterPlacer_overlay", - "displayName": "Spawn Egg (Overlay)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Mob_Creeper_Colour2", - "variants": [ - "Mob_Creeper_Colour2", - "Mob_Skeleton_Colour2", - "Mob_Spider_Colour2", - "Mob_Zombie_Colour2", - "Mob_Slime_Colour2", - "Mob_Ghast_Colour2", - "Mob_PigZombie_Colour2", - "Mob_Enderman_Colour2", - "Mob_CaveSpider_Colour2", - "Mob_Silverfish_Colour2", - "Mob_Blaze_Colour2", - "Mob_LavaSlime_Colour2", - "Mob_Pig_Colour2", - "Mob_Sheep_Colour2", - "Mob_Cow_Colour2", - "Mob_Chicken_Colour2", - "Mob_Squid_Colour2", - "Mob_Wolf_Colour2", - "Mob_MushroomCow_Colour2", - "Mob_Ocelot_Colour2", - "Mob_Villager_Colour2", - "Mob_Bat_Colour2", - "Mob_Witch_Colour2", - "Mob_Horse_Colour2", - "Mob_Endermite_Color2", - "Mob_Guardian_Color2", - "Mob_Rabbit_Colour2", - "Mob_PolarBear_Colour2", - "Mob_Shulker_Colour2", - "Mob_Elder_Guardian_Colour2", - "Mob_Evocation_Illager_Colour2", - "Mob_Llama_Colour2", - "Mob_Donkey_Colour2", - "Mob_Skeleton_Horse_Colour2", - "Mob_Zombie_Horse_Colour2", - "Mob_Mule_Colour2", - "Mob_Stray_Colour2", - "Mob_Husk_Colour2", - "Mob_Vex_Colour2", - "Mob_Vindication_Illager_Colour2", - "Mob_Zombie_Villager_Colour2", - "Mob_Parrot_Colour2", - "Mob_Wither_Skeleton_Colour2", - "Mob_Turtle_Colour2", - "Mob_Tropical_Colour2", - "Mob_Cod_Colour2", - "Mob_Pufferfish_Colour2", - "Mob_Salmon_Colour2", - "Mob_Drowned_Colour2", - "Mob_Dolphin_Colour2", - "Mob_Phantom_Colour2" - ] - } - }, - { - "internalName": "bed_overlay", - "displayName": "Bed (Overlay)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Bed_White", - "variants": [ - "Bed_Black", - "Bed_Blue", - "Bed_Brown", - "Bed_Cyan", - "Bed_Grey", - "Bed_Green", - "Bed_Light_Blue", - "Bed_Lime", - "Bed_Magenta", - "Bed_Orange", - "Bed_Pink", - "Bed_Purple", - "Bed_Red", - "Bed_Silver", - "Bed_White", - "Bed_Yellow" - ] - } - }, - { - "internalName": "expBottle", - "displayName": "Bottle o'Enchanting" - }, - { - "internalName": "brewingStand", - "displayName": "Brewing Stand" - }, - { - "internalName": "magmaCream", - "displayName": "Magma Cream" - }, - { - "internalName": "dyePowder_cyan", - "displayName": "Cyan Dye" - }, - { - "internalName": "dyePowder_orange", - "displayName": "Orange Dye" - }, - { - "internalName": "leggingsCloth_overlay", - "displayName": "Leather Pants (Overlay)" - }, - { - "internalName": "tipped_arrow_head", - "displayName": "Tipped Arrow (Overlay)" - }, - { - "internalName": "potion_bottle_lingering", - "displayName": "Lingering Potion" - }, - { - "internalName": "barrier", - "displayName": "debug_fourj_item" - }, - { - "internalName": "mutton_raw", - "displayName": "Raw Mutton" - }, - { - "internalName": "rabbit_raw", - "displayName": "Raw Rabbit" - }, - { - "internalName": "fish_pufferfish_raw", - "displayName": "Pufferfish" - }, - { - "internalName": "minecart_hopper", - "displayName": "Minecart with Hopper" - }, - { - "internalName": "hopper", - "displayName": "Hopper" - }, - { - "internalName": "nether_star", - "displayName": "Nether Star" - }, - { - "internalName": "emerald", - "displayName": "Emerald" - }, - { - "internalName": "writingBook", - "displayName": "Book and Quill" - }, - { - "internalName": "writtenBook", - "displayName": "Written Book" - }, - { - "internalName": "flowerPot", - "displayName": "Flower Pot" - }, - { - "internalName": "dyePowder_silver", - "displayName": "Light Gray Dye" - }, - { - "internalName": "dyePowder_white", - "displayName": "Bone Meal" - }, - { - "internalName": "bootsCloth_overlay", - "displayName": "Leather Boots (Overlay)" - }, - { - "internalName": "beetroot", - "displayName": "Beetroot" - }, - { - "internalName": "beetroot_seeds", - "displayName": "Beetroot Seeds" - }, - { - "internalName": "beetroot_soup", - "displayName": "Beetroot Soup" - }, - { - "internalName": "mutton_cooked", - "displayName": "Cooked Mutton" - }, - { - "internalName": "rabbit_cooked", - "displayName": "Cooked Rabbit" - }, - { - "internalName": "fish_salmon_raw", - "displayName": "Raw Salmon" - }, - { - "internalName": "minecart_tnt", - "displayName": "Minecart with TNT" - }, - { - "internalName": "wooden_armorstand", - "displayName": "Armor Stand" - }, - { - "internalName": "fireworks", - "displayName": "Firework Rocket" - }, - { - "internalName": "fireworks_charge", - "displayName": "Firework Star" - }, - { - "internalName": "fireworks_charge_overlay", - "displayName": "Firework Star (Overlay)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "", - "variants": [""] - } - }, - { - "internalName": "netherquartz", - "displayName": "Nether Quartz" - }, - { - "internalName": "map_empty", - "displayName": "Empty Map" - }, - { - "internalName": "frame", - "displayName": "Item Frame" - }, - { - "internalName": "enchantedBook", - "displayName": "Enchanted Book" - }, - { - "internalName": "door_acacia", - "displayName": "Acacia Door" - }, - { - "internalName": "door_birch", - "displayName": "Birch Door" - }, - { - "internalName": "door_dark_oak", - "displayName": "Dark Oak Door" - }, - { - "internalName": "door_jungle", - "displayName": "Jungle Door" - }, - { - "internalName": "door_spruce", - "displayName": "Spruce Door" - }, - { - "internalName": "rabbit_stew", - "displayName": "Rabbit Stew" - }, - { - "internalName": "fish_salmon_cooked", - "displayName": "Cooked Salmon" - }, - { - "internalName": "minecart_command_block", - "displayName": "Minecart with Command Block" - }, - { - "internalName": "acacia_boat", - "displayName": "Acacia Boat" - }, - { - "internalName": "birch_boat", - "displayName": "Birch Boat" - }, - { - "internalName": "dark_oak_boat", - "displayName": "Dark Oak Boat" - }, - { - "internalName": "jungle_boat", - "displayName": "Jungle Boat" - }, - { - "internalName": "spruce_boat", - "displayName": "Spruce Boat" - }, - { - "internalName": "prismarine_shard", - "displayName": "Prismarine Shard" - }, - { - "internalName": "prismarine_crystals", - "displayName": "Prismarine Crystals" - }, - { - "internalName": "leather_horse_armor_base", - "displayName": "Leather Horse Armor", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "Armour_Default_Leather_Colour", - "variants": [ "Armour_Default_Leather_Colour" ] - } - }, - { - "internalName": "structure_void", - "displayName": "Structure Void" - }, - { - "internalName": "map_filled_markings", - "displayName": "Filled Map (Overlay)" - }, - { - "internalName": "totem", - "displayName": "Totem of Undying" - }, - { - "internalName": "shulker_shell", - "displayName": "Shulker Shell" - }, - { - "internalName": "iron_nugget", - "displayName": "Iron Nugget" - }, - { - "internalName": "rabbit_foot", - "displayName": "Rabbit's Foot" - }, - { - "internalName": "rabbit_hide", - "displayName": "Rabbit Hide" - }, - { - "internalName": "compass", - "displayName": "" - }, - { - "internalName": "compass", - "displayName": "" - }, - { - "internalName": "compass", - "displayName": "" - }, - { - "internalName": "compass", - "displayName": "" - }, - { - "internalName": "clock", - "displayName": "" - }, - { - "internalName": "clock", - "displayName": "" - }, - { - "internalName": "clock", - "displayName": "" - }, - { - "internalName": "clock", - "displayName": "" - }, - { - "internalName": "dragonFireball", - "displayName": "Dragon Fireball" - }, - { - "internalName": "record_13", - "displayName": "Music Disc (C418 - 13)" - }, - { - "internalName": "record_cat", - "displayName": "Music Disc (C418 - cat)" - }, - { - "internalName": "record_blocks", - "displayName": "Music Disc (C418 - blocks)" - }, - { - "internalName": "record_chirp", - "displayName": "Music Disc (C418 - chirp)" - }, - { - "internalName": "record_far", - "displayName": "Music Disc (C418 - far)" - }, - { - "internalName": "record_mall", - "displayName": "Music Disc (C418 - mall)" - }, - { - "internalName": "record_mellohi", - "displayName": "Music Disc (C418 - mellohi)" - }, - { - "internalName": "record_stal", - "displayName": "Music Disc (C418 - stal)" - }, - { - "internalName": "record_strad", - "displayName": "Music Disc (C418 - strad)" - }, - { - "internalName": "record_ward", - "displayName": "Music Disc (C418 - ward)" - }, - { - "internalName": "record_11", - "displayName": "Music Disc (C418 - 11)" - }, - { - "internalName": "record_where are we now", - "displayName": "Music Disc (C418 - wait)" - }, - { - "internalName": "bucketFish", - "displayName": "Bucket of Cod" - }, - { - "internalName": "bucketSalmon", - "displayName": "Bucket of Salmon" - }, - { - "internalName": "bucketPuffer", - "displayName": "Bucket of Pufferfish" - }, - { - "internalName": "bucketTropical", - "displayName": "Bucket of Tropical Fish" - }, - { - "internalName": "leather_horse_armor_detail", - "displayName": "Leather Horse Armor (Overlay)" - }, - { - "internalName": "dyePowder_black1", - "displayName": "Black Dye [PS4 ONLY]" - }, - { - "internalName": "dyePowder_blue1", - "displayName": "Blue Dye [PS4 ONLY]" - }, - { - "internalName": "dyePowder_brown1", - "displayName": "Brown Dye [PS4 ONLY]" - }, - { - "internalName": "dyePowder_white1", - "displayName": "White Dye [PS4 ONLY]" - }, - { - "internalName": "bamboo", - "displayName": "Bamboo [PS4 ONLY]" - }, - { - "internalName": "lantern_carried", - "displayName": "Lantern [PS4 ONLY]" - }, - { - "internalName": "kelp", - "displayName": "Kelp" - }, - { - "internalName": "dried_kelp", - "displayName": "Dried Kelp" - }, - { - "internalName": "sea_pickle", - "displayName": "Sea Pickle" - }, - { - "internalName": "nautilus", - "displayName": "Nautilus Shell" - }, - { - "internalName": "nautilus_core", - "displayName": "Heart of the Sea" - }, - { - "internalName": "turtle_helmet", - "displayName": "Turtle Shell" - }, - { - "internalName": "turtle_shell_piece", - "displayName": "Scute" - }, - { - "internalName": "trident", - "displayName": "Trident" - }, - { - "internalName": "phantom_membrane", - "displayName": "Phantom Membrane" - }, - { - "internalName": "acacia_sign", - "displayName": "Acacia Sign [PS4 ONLY]" - }, - { - "internalName": "birch_sign", - "displayName": "Birch Sign [PS4 ONLY]" - }, - { - "internalName": "dark_oak_sign", - "displayName": "Dark Oak Sign [PS4 ONLY]" - }, - { - "internalName": "jungle_sign", - "displayName": "Jungle Sign [PS4 ONLY]" - }, - { - "internalName": "spruce_sign", - "displayName": "Spruce Sign [PS4 ONLY]" - }, - { - "internalName": "crossbow", - "displayName": "Crossbow [PS4 ONLY]" - }, - { - "internalName": "crossbow_pull_0", - "displayName": "Crossbow (Pulling Stage 1) [PS4 ONLY]" - }, - { - "internalName": "crossbow_pull_1", - "displayName": "Crossbow (Pulling Stage 2) [PS4 ONLY]" - }, - { - "internalName": "crossbow_pull_2", - "displayName": "Crossbow (Pulling Stage 3) [PS4 ONLY]" - }, - { - "internalName": "crossbow_arrow", - "displayName": "Crossbow (Loaded) [PS4 ONLY]" - }, - { - "internalName": "crossbow_firework", - "displayName": "Crossbow (Loaded) (Firework) [PS4 ONLY]" - }, - { - "internalName": "sweet_berries", - "displayName": "Sweet Berries [PS4 ONLY]" - }, - { - "internalName": "banner_pattern", - "displayName": "Banner Pattern [PS4 ONLY]" - }, - { - "internalName": "bell", - "displayName": "Bell [PS4 ONLY]" - }, - { - "internalName": "campfire_carried", - "displayName": "Campfire [PS4 ONLY]" - }, - { - "internalName": "", - "displayName": "" - } - ], - "moon_phases": [ - { - "internalName": "moon_phase_0", - "displayName": "Full Moon" - }, - { - "internalName": "moon_phase_1", - "displayName": "Waning Gibbous" - }, - { - "internalName": "moon_phase_2", - "displayName": "Last Quarter" - }, - { - "internalName": "moon_phase_3", - "displayName": "Waning Crescent" - }, - { - "internalName": "moon_phase_4", - "displayName": "New Moon" - }, - { - "internalName": "moon_phase_5", - "displayName": "Waxing Crescent" - }, - { - "internalName": "moon_phase_6", - "displayName": "First Quarter" - }, - { - "internalName": "moon_phase_7", - "displayName": "Waxing Gibbous" - } - ], - "map_icons": [ - { - "internalName": "player_1", - "displayName": "Player 1" - }, - { - "internalName": "player_2", - "displayName": "Player 2" - }, - { - "internalName": "player_3", - "displayName": "Player 3" - }, - { - "internalName": "player_4", - "displayName": "Player 4" - }, - { - "internalName": "target_x", - "displayName": "Unused" - }, - { - "internalName": "target_point", - "displayName": "Target Point (Unused)" - }, - { - "internalName": "player_off_map", - "displayName": "Player (Off Map) (Unused)" - }, - { - "internalName": "frame", - "displayName": "Item Frame" - }, - { - "internalName": "player_5", - "displayName": "Player 5" - }, - { - "internalName": "player_6", - "displayName": "Player 6" - }, - { - "internalName": "player_7", - "displayName": "Player 7" - }, - { - "internalName": "player_8", - "displayName": "Player 8" - }, - { - "internalName": "structure", - "displayName": "Structure (Explorer Map)" - }, - { - "internalName": "player_off_limits", - "displayName": "Player (Off Limits) (Unused)" - }, - { - "internalName": "mansion", - "displayName": "Woodland Mansion (Explorer Map)" - }, - { - "internalName": "monument", - "displayName": "Ocean Monument (Explorer Map)" - } - ], - "additional_map_icons": [ - { - "internalName": "player_1_off_map", - "displayName": "Player 1 (Off Map)" - }, - { - "internalName": "player_2_off_map", - "displayName": "Player 2 (Off Map)" - }, - { - "internalName": "player_3_off_map", - "displayName": "Player 3 (Off Map)" - }, - { - "internalName": "player_4_off_map", - "displayName": "Player 4 (Off Map)" - }, - { - "internalName": "treasure", - "displayName": "Buried Treasure" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "player_5_off_map", - "displayName": "Player 5 (Off Map)" - }, - { - "internalName": "player_6_off_map", - "displayName": "Player 6 (Off Map)" - }, - { - "internalName": "player_7_off_map", - "displayName": "Player 7 (Off Map)" - }, - { - "internalName": "player_8_off_map", - "displayName": "Player 8 (Off Map)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - } - ], - "experience_orbs": [ - { - "internalName": "experience_orb_0", - "displayName": "Experience Orb (Size 1)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_1", - "displayName": "Experience Orb (Size 2)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_2", - "displayName": "Experience Orb (Size 3)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_3", - "displayName": "Experience Orb (Size 4)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_4", - "displayName": "Experience Orb (Size 5)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_5", - "displayName": "Experience Orb (Size 6)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_6", - "displayName": "Experience Orb (Size 7)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_7", - "displayName": "Experience Orb (Size 8)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_8", - "displayName": "Experience Orb (Size 9)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_9", - "displayName": "Experience Orb (Size 10)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "experience_orb_10", - "displayName": "Experience Orb (Size 11)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "experience_orb", - "variants": ["experience_orb"] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - } - ], - "explosion": [ - { - "internalName": "explosion_0", - "displayName": "Explosion (Stage 1)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_1", - "displayName": "Explosion (Stage 2)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_2", - "displayName": "Explosion (Stage 3)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_3", - "displayName": "Explosion (Stage 4)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_4", - "displayName": "Explosion (Stage 5)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_5", - "displayName": "Explosion (Stage 6)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_6", - "displayName": "Explosion (Stage 7)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_7", - "displayName": "Explosion (Stage 8)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_8", - "displayName": "Explosion (Stage 9)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_9", - "displayName": "Explosion (Stage 10)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_10", - "displayName": "Explosion (Stage 11)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_11", - "displayName": "Explosion (Stage 12)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_12", - "displayName": "Explosion (Stage 13)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_13", - "displayName": "Explosion (Stage 14)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_14", - "displayName": "Explosion (Stage 15)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - }, - { - "internalName": "explosion_15", - "displayName": "Explosion (Stage 16)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Explode", - "variants": [ - "Particle_Explode", - "Particle_HugeExplosion" - ] - } - } - ], - "particles": [ - { - "internalName": "generic_0", - "displayName": "Generic (Stage 1)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_1", - "displayName": "Generic (Stage 2)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_2", - "displayName": "Generic (Stage 3)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_3", - "displayName": "Generic (Stage 4)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_4", - "displayName": "Generic (Stage 5)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_5", - "displayName": "Generic (Stage 6)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_6", - "displayName": "Generic (Stage 7)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "generic_7", - "displayName": "Generic (Stage 8)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "None", - "variants": [ - "None", - "Particle_Smoke", - "Particle_NetherPortal", - "Particle_EnderPortal", - "Particle_Ender", - "Particle_DragonBreathMin", - "Particle_DragonBreathMax" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "unused_splash_0", - "displayName": "Splash (Stage 1) (Unused)" - }, - { - "internalName": "unused_splash_1", - "displayName": "Splash (Stage 2) (Unused)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "splash_0", - "displayName": "Splash (Stage 1)" - }, - { - "internalName": "splash_1", - "displayName": "Splash (Stage 2)" - }, - { - "internalName": "splash_2", - "displayName": "Splash (Stage 3)" - }, - { - "internalName": "splash_3", - "displayName": "Splash (Stage 4)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "classic_bubble", - "displayName": "Bubble (Unused)" - }, - { - "internalName": "bobber", - "displayName": "Fishing Bobber" - }, - { - "internalName": "bubble", - "displayName": "Bubble", - "hasColourEntry": true, - "colourEntry": { - "isWaterColour": true, - "defaultName": "Water_Plains", - "variants": [ - "Water_Ocean", - "Water_Plains", - "Water_Desert", - "Water_ExtremeHills", - "Water_Forest", - "Water_Taiga", - "Water_Swampland", - "Water_River", - "Water_Hell", - "Water_Sky", - "Water_FrozenOcean", - "Water_FrozenRiver", - "Water_IcePlains", - "Water_IceMountains", - "Water_MushroomIsland", - "Water_MushroomIslandShore", - "Water_Beach", - "Water_DesertHills", - "Water_ForestHills", - "Water_TaigaHills", - "Water_ExtremeHillsEdge", - "Water_Jungle", - "Water_JungleHills", - "Water_JungleEdge", - "Water_DeepOcean", - "Water_StoneBeach", - "Water_ColdBeach", - "Water_BirchForest", - "Water_BirchForestHills", - "Water_RoofedForest", - "Water_ColdTaiga", - "Water_ColdTaigaHills", - "Water_MegaTaiga", - "Water_MegaTaigaHills", - "Water_ExtremeHillsPlus", - "Water_Savanna", - "Water_SavannaPlateau", - "Water_Mesa", - "Water_MesaPlateauF", - "Water_MesaPlateau" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "Firework Flash", - "width": 4, - "height": 4, - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "", - "variants": [""] - } - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "flame", - "displayName": "Flame" - }, - { - "internalName": "lava", - "displayName": "Lava" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "note", - "displayName": "Noteblock Note", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_Note_00", - "variants": [ - "Particle_Note_00", - "Particle_Note_01", - "Particle_Note_02", - "Particle_Note_03", - "Particle_Note_04", - "Particle_Note_05", - "Particle_Note_06", - "Particle_Note_07", - "Particle_Note_08", - "Particle_Note_09", - "Particle_Note_10", - "Particle_Note_11", - "Particle_Note_12", - "Particle_Note_13", - "Particle_Note_14", - "Particle_Note_15", - "Particle_Note_16", - "Particle_Note_17", - "Particle_Note_18", - "Particle_Note_19", - "Particle_Note_20", - "Particle_Note_21", - "Particle_Note_22", - "Particle_Note_23", - "Particle_Note_24", - ] - } - }, - { - "internalName": "critical_hit", - "displayName": "Critical Hit", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "critical_hit", - "variants": [ "critical_hit" ] - } - }, - { - "internalName": "enchanted_hit", - "displayName": "Enchanted Hit", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "critical_hit", - "variants": [ "critical_hit" ] - } - }, - { - "internalName": "damage", - "displayName": "Damage Indicator" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "heart", - "displayName": "Heart" - }, - { - "internalName": "angry", - "displayName": "Angry" - }, - { - "internalName": "glint", - "displayName": "Glint" - }, - { - "internalName": "angry_villager", - "displayName": "Angry Villager (Unused)" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "flash", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "water_0", - "displayName": "Water (Stage 1) (Unused)" - }, - { - "internalName": "water_1", - "displayName": "Water (Stage 2) (Unused)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "bubble_pop_0", - "displayName": "Bubble Pop (Stage 1) (Unused)", - "width": 2, - "height": 2 - }, - { - "internalName": "bubble_pop_0", - "displayName": "" - }, - { - "internalName": "bubble_pop_1", - "displayName": "Bubble Pop (Stage 2) (Unused)", - "width": 2, - "height": 2 - }, - { - "internalName": "bubble_pop_1", - "displayName": "" - }, - { - "internalName": "bubble_pop_2", - "displayName": "Bubble Pop (Stage 3) (Unused)", - "width": 2, - "height": 2 - }, - { - "internalName": "bubble_pop_2", - "displayName": "" - }, - { - "internalName": "bubble_pop_3", - "displayName": "Bubble Pop (Stage 4) (Unused)", - "width": 2, - "height": 2 - }, - { - "internalName": "bubble_pop_3", - "displayName": "" - }, - { - "internalName": "bubble_pop_4", - "displayName": "Bubble Pop (Stage 5) (Unused)", - "width": 2, - "height": 2 - }, - { - "internalName": "bubble_pop_4", - "displayName": "" - }, - { - "internalName": "drip_hang", - "displayName": "Drip (Hang)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_DripWater", - "variants": [ - "Particle_DripWater", - "Particle_DripLavaStart", - "Particle_DripLavaEnd" - ] - } - }, - { - "internalName": "drip_fall", - "displayName": "Drip (Fall)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_DripWater", - "variants": [ - "Particle_DripWater", - "Particle_DripLavaStart", - "Particle_DripLavaEnd" - ] - } - }, - { - "internalName": "drip_land", - "displayName": "Drip (Land)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_DripWater", - "variants": [ - "Particle_DripWater", - "Particle_DripLavaStart", - "Particle_DripLavaEnd" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "bubble_pop_0", - "displayName": "" - }, - { - "internalName": "bubble_pop_0", - "displayName": "" - }, - { - "internalName": "bubble_pop_1", - "displayName": "" - }, - { - "internalName": "bubble_pop_1", - "displayName": "" - }, - { - "internalName": "bubble_pop_2", - "displayName": "" - }, - { - "internalName": "bubble_pop_2", - "displayName": "" - }, - { - "internalName": "bubble_pop_3", - "displayName": "" - }, - { - "internalName": "bubble_pop_3", - "displayName": "" - }, - { - "internalName": "bubble_pop_4", - "displayName": "" - }, - { - "internalName": "bubble_pop_4", - "displayName": "" - }, - { - "internalName": "effect_0", - "displayName": "Effect (Stage 1)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_1", - "displayName": "Effect (Stage 2)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_2", - "displayName": "Effect (Stage 3)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_3", - "displayName": "Effect (Stage 4)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_4", - "displayName": "Effect (Stage 5)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_5", - "displayName": "Effect (Stage 6)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_6", - "displayName": "Effect (Stage 7)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "effect_7", - "displayName": "Effect (Stage 8)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "spell_0", - "displayName": "Splash Effect (Stage 1)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_1", - "displayName": "Splash Effect (Stage 2)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_2", - "displayName": "Splash Effect (Stage 3)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_3", - "displayName": "Splash Effect (Stage 4)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_4", - "displayName": "Splash Effect (Stage 5)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_5", - "displayName": "Splash Effect (Stage 6)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_6", - "displayName": "Splash Effect (Stage 7)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "spell_7", - "displayName": "Splash Effect (Stage 8)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Potion_BaseColour", - "hasCustomColour": true, - "variants": [ - "Potion_BaseColour", - "Effect_MovementSpeed", - "Effect_MovementSlowDown", - "Effect_DigSpeed", - "Effect_DigSlowdown", - "Effect_DamageBoost", - "Effect_Heal", - "Effect_Harm", - "Effect_Jump", - "Effect_Confusion", - "Effect_Regeneration", - "Effect_DamageResistance", - "Effect_FireResistance", - "Effect_WaterBreathing", - "Effect_Invisibility", - "Effect_Blindness", - "Effect_NightVision", - "Effect_Hunger", - "Effect_Weakness", - "Effect_Poison", - "Effect_Wither", - "Effect_HealthBoost", - "Effect_Absorption", - "Effect_Saturation", - "Effect_Levitation", - "Effect_Luck", - "Effect_BadLuck", - "Effect_TurtleMaster", - "Effect_SlowFall" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "spark_0", - "displayName": "Firework Spark (Stage 1)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_1", - "displayName": "Firework Spark (Stage 2)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_2", - "displayName": "Firework Spark (Stage 3)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_3", - "displayName": "Firework Spark (Stage 4)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_4", - "displayName": "Firework Spark (Stage 5)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_5", - "displayName": "Firework Spark (Stage 6)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_6", - "displayName": "Firework Spark (Stage 7)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "spark_7", - "displayName": "Firework Spark (Stage 8)", - "hasColourEntry": true, - "colourEntry": { - "hasCustomColour": true, - "defaultName": "None", - "variants": [ - "None", - "Particle_ScoreRing_Small", - "Particle_ScoreRing_Medium", - "Particle_ScoreRing_Large" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "glitter_0", - "displayName": "Shulker/End Rod Glitter (Stage 1)" - }, - { - "internalName": "glitter_1", - "displayName": "Shulker/End Rod Glitter (Stage 2)" - }, - { - "internalName": "glitter_2", - "displayName": "Shulker/End Rod Glitter (Stage 3)" - }, - { - "internalName": "glitter_3", - "displayName": "Shulker/End Rod Glitter (Stage 4)" - }, - { - "internalName": "glitter_4", - "displayName": "Shulker/End Rod Glitter (Stage 5)" - }, - { - "internalName": "glitter_5", - "displayName": "Shulker/End Rod Glitter (Stage 6)" - }, - { - "internalName": "glitter_6", - "displayName": "Shulker/End Rod Glitter (Stage 7)" - }, - { - "internalName": "glitter_7", - "displayName": "Shulker/End Rod Glitter (Stage 8)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "camera_shoot_explosion_0", - "displayName": "Camera Shoot (Unused) (Stage 1)" - }, - { - "internalName": "camera_shoot_explosion_1", - "displayName": "Camera Shoot (Unused) (Stage 2)" - }, - { - "internalName": "camera_shoot_explosion_2", - "displayName": "Camera Shoot (Unused) (Stage 3)" - }, - { - "internalName": "camera_shoot_explosion_3", - "displayName": "Camera Shoot (Unused) (Stage 4)" - }, - { - "internalName": "camera_shoot_explosion_4", - "displayName": "Camera Shoot (Unused) (Stage 5)" - }, - { - "internalName": "camera_shoot_explosion_5", - "displayName": "Camera Shoot (Unused) (Stage 6)" - }, - { - "internalName": "camera_shoot_explosion_6", - "displayName": "Camera Shoot (Unused) (Stage 7)" - }, - { - "internalName": "camera_shoot_explosion_7", - "displayName": "Camera Shoot (Unused) (Stage 8)" - }, - { - "internalName": "camera_shoot_explosion_8", - "displayName": "Camera Shoot (Unused) (Stage 9)" - }, - { - "internalName": "camera_shoot_explosion_9", - "displayName": "Camera Shoot (Unused) (Stage 10)" - }, - { - "internalName": "camera_shoot_explosion_10", - "displayName": "Camera Shoot (Unused) (Stage 11)" - }, - { - "internalName": "camera_shoot_explosion_11", - "displayName": "Camera Shoot (Unused) (Stage 12)" - }, - { - "internalName": "camera_shoot_explosion_12", - "displayName": "Camera Shoot (Unused) (Stage 13)" - }, - { - "internalName": "camera_shoot_explosion_13", - "displayName": "Camera Shoot (Unused) (Stage 14)" - }, - { - "internalName": "camera_shoot_explosion_14", - "displayName": "Camera Shoot (Unused) (Stage 15)" - }, - { - "internalName": "camera_shoot_explosion_15", - "displayName": "Camera Shoot (Unused) (Stage 16)" - }, - { - "internalName": "conduit_0", - "displayName": "Conduit (Unused) (Stage 1)" - }, - { - "internalName": "conduit_1", - "displayName": "Conduit (Unused) (Stage 2)" - }, - { - "internalName": "conduit_2", - "displayName": "Conduit (Unused) (Stage 3)" - }, - { - "internalName": "conduit_3", - "displayName": "Conduit (Unused) (Stage 4)" - }, - { - "internalName": "conduit_4", - "displayName": "Conduit (Unused) (Stage 5)" - }, - { - "internalName": "conduit_5", - "displayName": "Conduit (Unused) (Stage 6)" - }, - { - "internalName": "conduit_6", - "displayName": "Conduit (Unused) (Stage 7)" - }, - { - "internalName": "conduit_7", - "displayName": "Conduit (Unused) (Stage 8)" - }, - { - "internalName": "conduit_8", - "displayName": "Conduit (Unused) (Stage 9)" - }, - { - "internalName": "conduit_9", - "displayName": "Conduit (Unused) (Stage 10)" - }, - { - "internalName": "conduit_10", - "displayName": "Conduit (Unused) (Stage 11)" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "sga_a", - "displayName": "Standard Galactic Language (A)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_b", - "displayName": "Standard Galactic Language (B)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_c", - "displayName": "Standard Galactic Language (C)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_d", - "displayName": "Standard Galactic Language (D)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_e", - "displayName": "Standard Galactic Language (E)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_f", - "displayName": "Standard Galactic Language (F)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_g", - "displayName": "Standard Galactic Language (G)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_h", - "displayName": "Standard Galactic Language (H)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_i", - "displayName": "Standard Galactic Language (I)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_j", - "displayName": "Standard Galactic Language (J)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_k", - "displayName": "Standard Galactic Language (K)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_l", - "displayName": "Standard Galactic Language (L)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_m", - "displayName": "Standard Galactic Language (M)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_n", - "displayName": "Standard Galactic Language (N)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_o", - "displayName": "Standard Galactic Language (O)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_p", - "displayName": "Standard Galactic Language (P)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_q", - "displayName": "Standard Galactic Language (Q)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_r", - "displayName": "Standard Galactic Language (R)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_s", - "displayName": "Standard Galactic Language (S)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_t", - "displayName": "Standard Galactic Language (T)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_u", - "displayName": "Standard Galactic Language (U)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_v", - "displayName": "Standard Galactic Language (V)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_w", - "displayName": "Standard Galactic Language (W)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_x", - "displayName": "Standard Galactic Language (X)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_y", - "displayName": "Standard Galactic Language (Y)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "sga_z", - "displayName": "Standard Galactic Language (Z)", - "hasColourEntry": true, - "colourEntry": { - "defaultName": "Particle_EnchantmentTable", - "variants": [ - "Particle_EnchantmentTable" - ] - } - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - { - "internalName": "", - "displayName": "" - }, - ] -} From b942cb9f5b2d21e12003398d7cc4db00970a6e77 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 19:19:17 -0400 Subject: [PATCH 38/52] Fixed bizarre drawing issue with MapIcons atlas --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 4f8c2e7b..d92e21cd 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -188,7 +188,7 @@ namespace PckStudio.Forms.Editor { g.ApplyConfig(graphicsConfig); g.Clear(Color.Transparent); - g.DrawImage(_workingTexture, new Point(0, 0)); + g.DrawImage(_workingTexture, 0, 0, _workingTexture.Width, _workingTexture.Height); SolidBrush brush = new SolidBrush(Color.FromArgb(127, 255, 255, 255)); From 81322a0ca38dbb142393dbe9e4d7eb1a6e4fd69a Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 19:25:55 -0400 Subject: [PATCH 39/52] Renamed atlas resources --- PCK-Studio/Internal/ApplicationScope.cs | 2 +- PCK-Studio/Internal/Json/Tiles.cs | 16 ++++----- PCK-Studio/PckStudio.csproj | 1 - PCK-Studio/Properties/Resources.Designer.cs | 36 ++++++++++----------- PCK-Studio/Properties/Resources.resx | 18 +++++------ 5 files changed, 36 insertions(+), 37 deletions(-) diff --git a/PCK-Studio/Internal/ApplicationScope.cs b/PCK-Studio/Internal/ApplicationScope.cs index 61efd6d4..998178df 100644 --- a/PCK-Studio/Internal/ApplicationScope.cs +++ b/PCK-Studio/Internal/ApplicationScope.cs @@ -21,7 +21,7 @@ namespace PckStudio.Internal { Profiler.Start(); { - _entityImages ??= Resources.entities_sheet.SplitHorizontal(32).ToArray(); + _entityImages ??= Resources.entities_atlas.SplitHorizontal(32).ToArray(); DataCacher ??= new FileCacher(Program.AppDataCache); _ = Tiles.JsonBlockData; _ = Tiles.JsonItemData; diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index a973638b..2c026335 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -63,28 +63,28 @@ namespace PckStudio.Internal.Json internal static List ExplosionTileInfos => JsonExplosionData.Explosion; private static Image[] _itemImages; - public static Image[] ItemImages => _itemImages ??= Resources.items_sheet.SplitHorizontal(16).ToArray(); + public static Image[] ItemImages => _itemImages ??= Resources.items_atlas.SplitHorizontal(16).ToArray(); private static Image[] _blockImages; - public static Image[] BlockImages => _blockImages ??= Resources.terrain_sheet.SplitHorizontal(16).ToArray(); + public static Image[] BlockImages => _blockImages ??= Resources.terrain_atlas.SplitHorizontal(16).ToArray(); private static Image[] _particleImages; - public static Image[] ParticleImages => _particleImages ??= Resources.particles_sheet.SplitHorizontal(16).ToArray(); + public static Image[] ParticleImages => _particleImages ??= Resources.particles_atlas.SplitHorizontal(16).ToArray(); private static Image[] _moonPhaseImages; - public static Image[] MoonPhaseImages => _moonPhaseImages ??= Resources.moon_phases_sheet.SplitHorizontal(4).ToArray(); + public static Image[] MoonPhaseImages => _moonPhaseImages ??= Resources.moon_phases_atlas.SplitHorizontal(4).ToArray(); private static Image[] _mapIconImages; - public static Image[] MapIconImages => _mapIconImages ??= Resources.map_icons_sheet.SplitHorizontal(4).ToArray(); + public static Image[] MapIconImages => _mapIconImages ??= Resources.map_icons_atlas.SplitHorizontal(4).ToArray(); private static Image[] _additionalMapIconImages; - public static Image[] AdditionalMapIconImages => _additionalMapIconImages ??= Resources.additional_map_icons_sheet.SplitHorizontal(4).ToArray(); + public static Image[] AdditionalMapIconImages => _additionalMapIconImages ??= Resources.additional_map_icons_atlas.SplitHorizontal(4).ToArray(); private static Image[] _experienceOrbIconImages; - public static Image[] ExperienceOrbImages => _experienceOrbIconImages ??= Resources.experience_orbs_sheet.SplitHorizontal(4).ToArray(); + public static Image[] ExperienceOrbImages => _experienceOrbIconImages ??= Resources.experience_orbs_atlas.SplitHorizontal(4).ToArray(); private static Image[] _explosionImages; - public static Image[] ExplosionImages => _explosionImages ??= Resources.explosion_sheet.SplitHorizontal(4).ToArray(); + public static Image[] ExplosionImages => _explosionImages ??= Resources.explosion_atlas.SplitHorizontal(4).ToArray(); private static ImageList GetImageList(Image[] images) { diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index de86f119..ce2935ae 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -636,7 +636,6 @@ - diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 97f21855..abd4c5f3 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -73,9 +73,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap additional_map_icons_sheet { + public static System.Drawing.Bitmap additional_map_icons_atlas { get { - object obj = ResourceManager.GetObject("additional_map_icons_sheet", resourceCulture); + object obj = ResourceManager.GetObject("additional_map_icons_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -277,9 +277,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap entities_sheet { + public static System.Drawing.Bitmap entities_atlas { get { - object obj = ResourceManager.GetObject("entities_sheet", resourceCulture); + object obj = ResourceManager.GetObject("entities_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -329,9 +329,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap experience_orbs_sheet { + public static System.Drawing.Bitmap experience_orbs_atlas { get { - object obj = ResourceManager.GetObject("experience_orbs_sheet", resourceCulture); + object obj = ResourceManager.GetObject("experience_orbs_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -369,9 +369,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap explosion_sheet { + public static System.Drawing.Bitmap explosion_atlas { get { - object obj = ResourceManager.GetObject("explosion_sheet", resourceCulture); + object obj = ResourceManager.GetObject("explosion_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -538,9 +538,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap items_sheet { + public static System.Drawing.Bitmap items_atlas { get { - object obj = ResourceManager.GetObject("items_sheet", resourceCulture); + object obj = ResourceManager.GetObject("items_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -558,9 +558,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap map_icons_sheet { + public static System.Drawing.Bitmap map_icons_atlas { get { - object obj = ResourceManager.GetObject("map_icons_sheet", resourceCulture); + object obj = ResourceManager.GetObject("map_icons_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -615,9 +615,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap moon_phases_sheet { + public static System.Drawing.Bitmap moon_phases_atlas { get { - object obj = ResourceManager.GetObject("moon_phases_sheet", resourceCulture); + object obj = ResourceManager.GetObject("moon_phases_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -730,9 +730,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap particles_sheet { + public static System.Drawing.Bitmap particles_atlas { get { - object obj = ResourceManager.GetObject("particles_sheet", resourceCulture); + object obj = ResourceManager.GetObject("particles_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } @@ -870,9 +870,9 @@ namespace PckStudio.Properties { /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// - public static System.Drawing.Bitmap terrain_sheet { + public static System.Drawing.Bitmap terrain_atlas { get { - object obj = ResourceManager.GetObject("terrain_sheet", resourceCulture); + object obj = ResourceManager.GetObject("terrain_atlas", resourceCulture); return ((System.Drawing.Bitmap)(obj)); } } diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index cda749a2..2fcf9388 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -223,7 +223,7 @@ ..\Resources\iconImageList\INFO ICON.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\terrain.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -232,7 +232,7 @@ ..\Resources\icons\clock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\items.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -277,7 +277,7 @@ ..\Resources\iconImageList\blank.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\entities.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -325,16 +325,16 @@ ..\..\ProjectLogo.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\moon_phases.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\additional_mapicons.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\map_icons.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - + ..\Resources\atlases\experience_orbs.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -346,7 +346,7 @@ ..\Resources\atlases\explosionData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - + ..\Resources\atlases\explosion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -361,7 +361,7 @@ ..\Resources\atlases\particleData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - + ..\Resources\atlases\particles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file From a26f2824768b833c8708d4f5ae5861e9cd1e45ee Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 20:34:35 -0400 Subject: [PATCH 40/52] Added Painting support to Atlas Editor --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 3 +- PCK-Studio/Internal/ApplicationScope.cs | 9 +- PCK-Studio/Internal/Json/Tiles.cs | 23 +- PCK-Studio/MainForm.cs | 9 +- PCK-Studio/PckStudio.csproj | 2 + PCK-Studio/Properties/Resources.Designer.cs | 64 +- PCK-Studio/Properties/Resources.resx | 8 +- .../Resources/atlases/explosionData.json | 2 +- .../Resources/atlases/paintingData.json | 1062 +++++++++++++++++ PCK-Studio/Resources/atlases/paintings.png | Bin 0 -> 92439 bytes 10 files changed, 1156 insertions(+), 26 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/paintingData.json create mode 100644 PCK-Studio/Resources/atlases/paintings.png diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index d92e21cd..1f5caaea 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -113,7 +113,8 @@ namespace PckStudio.Forms.Editor "additionalmapicons" => (Tiles.AdditionalMapIconTileInfos, "additional_map_icons"), "moon_phases" => (Tiles.MoonPhaseTileInfos, "moon_phases"), "xporb" => (Tiles.ExperienceOrbTileInfos, "experience_orbs"), - "explosion" => (Tiles.ExplosionTileInfos, "explosion"), + "explosion" => (Tiles.ExplosionTileInfos, "explosions"), + "kz" => (Tiles.PaintingTileInfos, "paintings"), _ => (null, null), }; diff --git a/PCK-Studio/Internal/ApplicationScope.cs b/PCK-Studio/Internal/ApplicationScope.cs index 998178df..e3812620 100644 --- a/PCK-Studio/Internal/ApplicationScope.cs +++ b/PCK-Studio/Internal/ApplicationScope.cs @@ -30,8 +30,15 @@ namespace PckStudio.Internal _ = Tiles.JsonExplosionData; _ = Tiles.JsonMapIconData; _ = Tiles.JsonExperienceOrbData; - _ = Tiles.ItemImageList; + _ = Tiles.JsonPaintingData; _ = Tiles.BlockImageList; + _ = Tiles.ItemImageList; + _ = Tiles.ParticleImageList; + _ = Tiles.ExplosionImageList; + _ = Tiles.MapIconImageList; + _ = Tiles.ExperienceOrbImageList; + _ = Tiles.MoonPhaseImageList; + _ = Tiles.PaintingImageList; SettingsManager.Initialize(); CultureInfo.CurrentCulture = CultureInfo.InvariantCulture; } diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index 2c026335..377ae159 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -34,8 +34,11 @@ namespace PckStudio.Internal.Json [JsonProperty("experience_orbs")] public List ExperienceOrbs { get; set; } - [JsonProperty("explosion")] - public List Explosion { get; set; } + [JsonProperty("explosions")] + public List Explosions { get; set; } + + [JsonProperty("paintings")] + public List Paintings { get; set; } } internal static class Tiles @@ -44,7 +47,7 @@ namespace PckStudio.Internal.Json _jsonBlockData, _jsonItemData, _jsonParticleData, _jsonMoonPhaseData, _jsonMapIconData, _jsonExplosionData, - _jsonExperienceOrbData; + _jsonExperienceOrbData, _jsonPaintingData; internal static JsonTiles JsonBlockData => _jsonBlockData ??= JsonConvert.DeserializeObject(Resources.blockData); internal static JsonTiles JsonItemData => _jsonItemData ??= JsonConvert.DeserializeObject(Resources.itemData); internal static JsonTiles JsonParticleData => _jsonParticleData ??= JsonConvert.DeserializeObject(Resources.particleData); @@ -52,6 +55,7 @@ namespace PckStudio.Internal.Json internal static JsonTiles JsonMapIconData => _jsonMapIconData ??= JsonConvert.DeserializeObject(Resources.mapIconData); internal static JsonTiles JsonExplosionData => _jsonExplosionData ??= JsonConvert.DeserializeObject(Resources.explosionData); internal static JsonTiles JsonExperienceOrbData => _jsonExperienceOrbData ??= JsonConvert.DeserializeObject(Resources.experienceOrbData); + internal static JsonTiles JsonPaintingData => _jsonPaintingData ??= JsonConvert.DeserializeObject(Resources.paintingData); internal static List ItemTileInfos => JsonItemData.Items; internal static List BlockTileInfos => JsonBlockData.Blocks; @@ -60,7 +64,8 @@ namespace PckStudio.Internal.Json internal static List MapIconTileInfos => JsonMapIconData.MapIcons; internal static List AdditionalMapIconTileInfos => JsonMapIconData.AdditionalMapIcons; internal static List ExperienceOrbTileInfos => JsonExperienceOrbData.ExperienceOrbs; - internal static List ExplosionTileInfos => JsonExplosionData.Explosion; + internal static List ExplosionTileInfos => JsonExplosionData.Explosions; + internal static List PaintingTileInfos => JsonPaintingData.Paintings; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_atlas.SplitHorizontal(16).ToArray(); @@ -84,7 +89,10 @@ namespace PckStudio.Internal.Json public static Image[] ExperienceOrbImages => _experienceOrbIconImages ??= Resources.experience_orbs_atlas.SplitHorizontal(4).ToArray(); private static Image[] _explosionImages; - public static Image[] ExplosionImages => _explosionImages ??= Resources.explosion_atlas.SplitHorizontal(4).ToArray(); + public static Image[] ExplosionImages => _explosionImages ??= Resources.explosions_atlas.SplitHorizontal(4).ToArray(); + + private static Image[] _paintingImages; + public static Image[] PaintingImages => _paintingImages ??= Resources.paintings_atlas.SplitHorizontal(16).ToArray(); private static ImageList GetImageList(Image[] images) { @@ -114,9 +122,12 @@ namespace PckStudio.Internal.Json public static ImageList AdditionalMapIconImageList { get { return _additionalMapIconImageList; } } private static ImageList _experienceOrbsImageList = GetImageList(ExperienceOrbImages); - public static ImageList ExperienceOrbsImageList { get { return _experienceOrbsImageList; } } + public static ImageList ExperienceOrbImageList { get { return _experienceOrbsImageList; } } private static ImageList _explosionImageList = GetImageList(ExplosionImages); public static ImageList ExplosionImageList { get { return _explosionImageList; } } + + private static ImageList _paintingImageList = GetImageList(PaintingImages); + public static ImageList PaintingImageList { get { return _paintingImageList; } } } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 2ed0a7f6..6253a6b1 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -382,11 +382,12 @@ namespace PckStudio bool isMapIcons = file.Filename == "res/misc/mapicons.png"; bool isAdditionalMapIcons = file.Filename == "res/misc/additionalmapicons.png"; bool isXPOrbs = file.Filename == "res/item/xporb.png"; - bool isExplosion = file.Filename == "res/misc/explosion.png"; + bool isExplosions = file.Filename == "res/misc/explosion.png"; + bool isPaintings = file.Filename == "res/art/kz.png"; if ( - isTerrain || isItems || isParticles || isMoonPhases || - isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosion + isTerrain || isItems || isParticles || isMoonPhases || isPaintings || + isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosions ) { var img = file.GetTexture(); @@ -394,7 +395,7 @@ namespace PckStudio // all of the other atlases so far use 4 var columnCount = 4; - if (isTerrain || isItems || isParticles) columnCount = 16; + if (isTerrain || isItems || isParticles || isPaintings) columnCount = 16; var resolution = img.Width / columnCount; var size = new Size(resolution, resolution); diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index ce2935ae..9c952d7e 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -635,6 +635,7 @@ + @@ -691,6 +692,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index abd4c5f3..30cb940d 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -366,20 +366,10 @@ namespace PckStudio.Properties { } } - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - public static System.Drawing.Bitmap explosion_atlas { - get { - object obj = ResourceManager.GetObject("explosion_atlas", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - /// /// Looks up a localized string similar to { /// "COMMENT_1": "JSON by MattNL", - /// "explosion": [ + /// "explosions": [ /// { /// "internalName": "explosion_0", /// "displayName": "Explosion (Stage 1)", @@ -399,7 +389,7 @@ namespace PckStudio.Properties { /// "colourEntry": { /// "defaultName": "Particle_Explode", /// "variants": [ - /// [rest of string was truncated]";. + /// [rest of string was truncated]";. /// public static string explosionData { get { @@ -407,6 +397,16 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap explosions_atlas { + get { + object obj = ResourceManager.GetObject("explosions_atlas", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -696,6 +696,46 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "paintings": [ + /// { + /// "internalName": "Kebab", + /// "displayName": "\"Kebab med tre pepperoni\" by Kristoffer Zetterstrand" + /// }, + /// { + /// "internalName": "Aztec", + /// "displayName": "\"de_aztec\" by Kristoffer Zetterstrand" + /// }, + /// { + /// "internalName": "Alban", + /// "displayName": "\"Albanian\" by Kristoffer Zetterstrand" + /// }, + /// { + /// "internalName": "Aztec2", + /// "displayName": "\"de_aztec\" by Kristoffer Zetterstrand" + /// }, + /// { + /// "internalName": "Bomb", + /// "di [rest of string was truncated]";. + /// + public static string paintingData { + get { + return ResourceManager.GetString("paintingData", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap paintings_atlas { + get { + object obj = ResourceManager.GetObject("paintings_atlas", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized string similar to { /// "COMMENT_1": "JSON by MattNL", diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 2fcf9388..19110ffd 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -346,7 +346,7 @@ ..\Resources\atlases\explosionData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 - + ..\Resources\atlases\explosion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -364,4 +364,10 @@ ..\Resources\atlases\particles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\paintingData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 + + + ..\Resources\atlases\paintings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/PCK-Studio/Resources/atlases/explosionData.json b/PCK-Studio/Resources/atlases/explosionData.json index 77ae7b56..a48a1930 100644 --- a/PCK-Studio/Resources/atlases/explosionData.json +++ b/PCK-Studio/Resources/atlases/explosionData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "explosion": [ + "explosions": [ { "internalName": "explosion_0", "displayName": "Explosion (Stage 1)", diff --git a/PCK-Studio/Resources/atlases/paintingData.json b/PCK-Studio/Resources/atlases/paintingData.json new file mode 100644 index 00000000..276a3dde --- /dev/null +++ b/PCK-Studio/Resources/atlases/paintingData.json @@ -0,0 +1,1062 @@ +{ + "COMMENT_1": "JSON by MattNL", + "paintings": [ + { + "internalName": "Kebab", + "displayName": "\"Kebab med tre pepperoni\" by Kristoffer Zetterstrand" + }, + { + "internalName": "Aztec", + "displayName": "\"de_aztec\" by Kristoffer Zetterstrand" + }, + { + "internalName": "Alban", + "displayName": "\"Albanian\" by Kristoffer Zetterstrand" + }, + { + "internalName": "Aztec2", + "displayName": "\"de_aztec\" by Kristoffer Zetterstrand" + }, + { + "internalName": "Bomb", + "displayName": "\"Target Successfully Bombed\" by Kristoffer Zetterstrand" + }, + { + "internalName": "Plant", + "displayName": "\"Paradisträd\" by Kristoffer Zetterstrand" + }, + { + "internalName": "Wasteland", + "displayName": "\"Wasteland\" by Kristoffer Zetterstrand" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "Back Texture", + "width": 4, + "height": 4 + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "1x1E1", + "displayName": "Extra Painting 1" + }, + { + "internalName": "1x1E2", + "displayName": "Extra Painting 2" + }, + { + "internalName": "1x1E3", + "displayName": "Extra Painting 3" + }, + { + "internalName": "1x1E4", + "displayName": "Extra Painting 4" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Pool", + "displayName": "\"The Pool\" by Kristoffer Zetterstrand", + "width": 2 + }, + { + "internalName": "Pool", + "displayName": "" + }, + { + "internalName": "Courbet", + "displayName": "\"Bonjour Monsieur Courbet\" by Kristoffer Zetterstrand", + "width": 2 + }, + { + "internalName": "Courbet", + "displayName": "" + }, + { + "internalName": "Sea", + "displayName": "\"Seaside\" by Kristoffer Zetterstrand", + "width": 2 + }, + { + "internalName": "Sea", + "displayName": "" + }, + { + "internalName": "Sunset", + "displayName": "\"sunset_dense\" by Kristoffer Zetterstrand", + "width": 2 + }, + { + "internalName": "Sunset", + "displayName": "" + }, + { + "internalName": "Creebet", + "displayName": "\"Creebet\" by Kristoffer Zetterstrand", + "width": 2 + }, + { + "internalName": "Creebet", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "" + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Back", + "displayName": "", + }, + { + "internalName": "Wanderer", + "displayName": "\"Wanderer\" by Kristoffer Zetterstrand", + "height": 2 + }, + { + "internalName": "Graham", + "displayName": "\"Graham\" by Kristoffer Zetterstrand", + "height": 2 + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Skeleton", + "displayName": "\"Mortal Coil\" by Kristoffer Zetterstrand", + "width": 4, + "height": 3 + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Wanderer", + "displayName": "" + }, + { + "internalName": "Graham", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Skeleton", + "displayName": "", + }, + { + "internalName": "Fighters", + "displayName": "\"Fighters\" by Kristoffer Zetterstrand", + "width": 4, + "height": 2 + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Skeleton", + "displayName": "" + }, + { + "internalName": "Skeleton", + "displayName": "" + }, + { + "internalName": "Skeleton", + "displayName": "" + }, + { + "internalName": "Skeleton", + "displayName": "" + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "Fighters", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "\"Kong\" by Kristoffer Zetterstrand", + "width": 4, + "height": 3 + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "Match", + "displayName": "\"Match\" by Kristoffer Zetterstrand", + "width": 2, + "height": 2 + }, + { + "internalName": "Match", + "displayName": "" + }, + { + "internalName": "Bust", + "displayName": "\"Bust\" by Kristoffer Zetterstrand", + "width": 2, + "height": 2 + }, + { + "internalName": "Bust", + "displayName": "" + }, + { + "internalName": "Stage", + "displayName": "\"The stage is set\" by Kristoffer Zetterstrand", + "width": 2, + "height": 2 + }, + { + "internalName": "Stage", + "displayName": "" + }, + { + "internalName": "Void", + "displayName": "\"The Void\" by Kristoffer Zetterstrand", + "width": 2, + "height": 2 + }, + { + "internalName": "Void", + "displayName": "" + }, + { + "internalName": "SkullAndRoses", + "displayName": "\"Skull and Roses\" by Kristoffer Zetterstrand", + "width": 2, + "height": 2 + }, + { + "internalName": "SkullAndRoses", + "displayName": "" + }, + { + "internalName": "Wither", + "displayName": "\"Wither\" by Jens Bergensten", + "width": 2, + "height": 2 + }, + { + "internalName": "Wither", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "" + }, + { + "internalName": "Match", + "displayName": "" + }, + { + "internalName": "Match", + "displayName": "" + }, + { + "internalName": "Bust", + "displayName": "" + }, + { + "internalName": "Bust", + "displayName": "" + }, + { + "internalName": "Stage", + "displayName": "" + }, + { + "internalName": "Stage", + "displayName": "" + }, + { + "internalName": "Void", + "displayName": "" + }, + { + "internalName": "Void", + "displayName": "" + }, + { + "internalName": "SkullAndRoses", + "displayName": "" + }, + { + "internalName": "SkullAndRoses", + "displayName": "" + }, + { + "internalName": "Wither", + "displayName": "" + }, + { + "internalName": "Wither", + "displayName": "" + }, + { + "internalName": "DonkeyKong", + "displayName": "", + }, + { + "internalName": "DonkeyKong", + "displayName": "", + }, + { + "internalName": "DonkeyKong", + "displayName": "", + }, + { + "internalName": "DonkeyKong", + "displayName": "", + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "\"Pointer\" by Kristoffer Zetterstrand", + "width": 4, + "height": 4 + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "\"Pigscene\" by Kristoffer Zetterstrand", + "width": 4, + "height": 4 + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "\"Skull On Fire\" by Kristoffer Zetterstrand", + "width": 4, + "height": 4 + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "Pointer", + "displayName": "", + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "", + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "", + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "Pointer", + "displayName": "", + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pointer", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "", + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "Pigscene", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "", + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "BurningSkull", + "displayName": "" + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + }, + { + "internalName": "", + "displayName": "", + } + ] +} diff --git a/PCK-Studio/Resources/atlases/paintings.png b/PCK-Studio/Resources/atlases/paintings.png new file mode 100644 index 0000000000000000000000000000000000000000..b8bc84fec490e432028cf67dfefb271bd22c980b GIT binary patch literal 92439 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 z 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 Date: Fri, 15 Mar 2024 20:43:16 -0400 Subject: [PATCH 41/52] Fixed SetTile bug with "child" tiles --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 1f5caaea..68f24c98 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -390,7 +390,10 @@ namespace PckStudio.Forms.Editor g.DrawImage(texture, dataTile.Area); } - _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, texture); + if(_selectedTile != dataTile) + _tiles[dataTile.Index] = new AtlasTile(dataTile.Index, dataTile.Area, dataTile.Tile, texture); + else + _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, texture); selectTilePictureBox.Image = texture; UpdateAtlasDisplay(); From ae74ed7d1497201ae60c0c93ec3eaf991a08cf6f Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 22:16:02 -0400 Subject: [PATCH 42/52] Made all atlas types uniform --- PCK-Studio/Internal/Json/Tiles.cs | 48 ++++++------------- PCK-Studio/Resources/atlases/blockData.json | 2 +- .../Resources/atlases/experienceOrbData.json | 2 +- .../Resources/atlases/explosionData.json | 2 +- PCK-Studio/Resources/atlases/itemData.json | 2 +- PCK-Studio/Resources/atlases/mapIconData.json | 4 +- .../Resources/atlases/moonPhaseData.json | 2 +- .../Resources/atlases/paintingData.json | 2 +- .../Resources/atlases/particleData.json | 2 +- 9 files changed, 23 insertions(+), 43 deletions(-) diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index 377ae159..e49815b4 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -13,32 +13,11 @@ namespace PckStudio.Internal.Json { internal class JsonTiles { - [JsonProperty("blocks")] - public List Blocks { get; set; } - - [JsonProperty("items")] - public List Items { get; set; } + [JsonProperty("entries")] + public List Entries { get; set; } - [JsonProperty("particles")] - public List Particles { get; set; } - - [JsonProperty("moon_phases")] - public List MoonPhases { get; set; } - - [JsonProperty("map_icons")] - public List MapIcons { get; set; } - - [JsonProperty("additional_map_icons")] - public List AdditionalMapIcons { get; set; } - - [JsonProperty("experience_orbs")] - public List ExperienceOrbs { get; set; } - - [JsonProperty("explosions")] - public List Explosions { get; set; } - - [JsonProperty("paintings")] - public List Paintings { get; set; } + [JsonProperty("additional_entries")] + public List AdditionalEntries { get; set; } } internal static class Tiles @@ -57,15 +36,16 @@ namespace PckStudio.Internal.Json internal static JsonTiles JsonExperienceOrbData => _jsonExperienceOrbData ??= JsonConvert.DeserializeObject(Resources.experienceOrbData); internal static JsonTiles JsonPaintingData => _jsonPaintingData ??= JsonConvert.DeserializeObject(Resources.paintingData); - internal static List ItemTileInfos => JsonItemData.Items; - internal static List BlockTileInfos => JsonBlockData.Blocks; - internal static List ParticleTileInfos => JsonParticleData.Particles; - internal static List MoonPhaseTileInfos => JsonMoonPhaseData.MoonPhases; - internal static List MapIconTileInfos => JsonMapIconData.MapIcons; - internal static List AdditionalMapIconTileInfos => JsonMapIconData.AdditionalMapIcons; - internal static List ExperienceOrbTileInfos => JsonExperienceOrbData.ExperienceOrbs; - internal static List ExplosionTileInfos => JsonExplosionData.Explosions; - internal static List PaintingTileInfos => JsonPaintingData.Paintings; + internal static List ItemTileInfos => JsonItemData.Entries; + internal static List BlockTileInfos => JsonBlockData.Entries; + internal static List ParticleTileInfos => JsonParticleData.Entries; + internal static List MoonPhaseTileInfos => JsonMoonPhaseData.Entries; + internal static List MapIconTileInfos => JsonMapIconData.Entries; + internal static List AdditionalMapIconTileInfos => JsonMapIconData.AdditionalEntries; + internal static List ExperienceOrbTileInfos => JsonExperienceOrbData.Entries; + internal static List ExplosionTileInfos => JsonExplosionData.Entries; + internal static List PaintingTileInfos => JsonPaintingData.Entries; + internal static List BannerTileInfos => JsonPaintingData.Entries; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_atlas.SplitHorizontal(16).ToArray(); diff --git a/PCK-Studio/Resources/atlases/blockData.json b/PCK-Studio/Resources/atlases/blockData.json index 33bc0f3a..c2cb1b8f 100644 --- a/PCK-Studio/Resources/atlases/blockData.json +++ b/PCK-Studio/Resources/atlases/blockData.json @@ -1,7 +1,7 @@ { "COMMENT_1": "Tile data research by MattNL", "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", - "blocks": [ + "entries": [ { "internalName": "grass_top", "displayName": "Grass Block (Top)", diff --git a/PCK-Studio/Resources/atlases/experienceOrbData.json b/PCK-Studio/Resources/atlases/experienceOrbData.json index 90a6d2fe..f83a7ab3 100644 --- a/PCK-Studio/Resources/atlases/experienceOrbData.json +++ b/PCK-Studio/Resources/atlases/experienceOrbData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "experience_orbs": [ + "entries": [ { "internalName": "experience_orb_0", "displayName": "Experience Orb (Size 1)", diff --git a/PCK-Studio/Resources/atlases/explosionData.json b/PCK-Studio/Resources/atlases/explosionData.json index a48a1930..f9845f7e 100644 --- a/PCK-Studio/Resources/atlases/explosionData.json +++ b/PCK-Studio/Resources/atlases/explosionData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "explosions": [ + "entries": [ { "internalName": "explosion_0", "displayName": "Explosion (Stage 1)", diff --git a/PCK-Studio/Resources/atlases/itemData.json b/PCK-Studio/Resources/atlases/itemData.json index e69e114d..0c49ee02 100644 --- a/PCK-Studio/Resources/atlases/itemData.json +++ b/PCK-Studio/Resources/atlases/itemData.json @@ -1,7 +1,7 @@ { "COMMENT_1": "Tile data research by MattNL", "COMMENT_2": "JSON by PhoenixARC, MattNL, and NessieHax (Miku-666)", - "items": [ + "entries": [ { "internalName": "helmetCloth", "displayName": "Leather Cap", diff --git a/PCK-Studio/Resources/atlases/mapIconData.json b/PCK-Studio/Resources/atlases/mapIconData.json index 6e505fd8..8e1273f2 100644 --- a/PCK-Studio/Resources/atlases/mapIconData.json +++ b/PCK-Studio/Resources/atlases/mapIconData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "map_icons": [ + "entries": [ { "internalName": "player_1", "displayName": "Player 1" @@ -66,7 +66,7 @@ "displayName": "Ocean Monument (Explorer Map)" } ], - "additional_map_icons": [ + "additional_entries": [ { "internalName": "player_1_off_map", "displayName": "Player 1 (Off Map)" diff --git a/PCK-Studio/Resources/atlases/moonPhaseData.json b/PCK-Studio/Resources/atlases/moonPhaseData.json index a65a1b53..506e7f6f 100644 --- a/PCK-Studio/Resources/atlases/moonPhaseData.json +++ b/PCK-Studio/Resources/atlases/moonPhaseData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "moon_phases": [ + "entries": [ { "internalName": "moon_phase_0", "displayName": "Full Moon" diff --git a/PCK-Studio/Resources/atlases/paintingData.json b/PCK-Studio/Resources/atlases/paintingData.json index 276a3dde..5b5b0ef9 100644 --- a/PCK-Studio/Resources/atlases/paintingData.json +++ b/PCK-Studio/Resources/atlases/paintingData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "paintings": [ + "entries": [ { "internalName": "Kebab", "displayName": "\"Kebab med tre pepperoni\" by Kristoffer Zetterstrand" diff --git a/PCK-Studio/Resources/atlases/particleData.json b/PCK-Studio/Resources/atlases/particleData.json index 2c9015df..9e6fa646 100644 --- a/PCK-Studio/Resources/atlases/particleData.json +++ b/PCK-Studio/Resources/atlases/particleData.json @@ -1,6 +1,6 @@ { "COMMENT_1": "JSON by MattNL", - "particles": [ + "entries": [ { "internalName": "generic_0", "displayName": "Generic (Stage 1)", From 07b962e0073cd823f94afe451deecaf782b34ace Mon Sep 17 00:00:00 2001 From: MattN-L Date: Fri, 15 Mar 2024 23:42:18 -0400 Subject: [PATCH 43/52] Corrected particle data --- .../Resources/atlases/particleData.json | 54 +++++++++--------- PCK-Studio/Resources/atlases/particles.png | Bin 21971 -> 23424 bytes 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/PCK-Studio/Resources/atlases/particleData.json b/PCK-Studio/Resources/atlases/particleData.json index 9e6fa646..e89bcf85 100644 --- a/PCK-Studio/Resources/atlases/particleData.json +++ b/PCK-Studio/Resources/atlases/particleData.json @@ -1672,111 +1672,111 @@ }, { "internalName": "camera_shoot_explosion_0", - "displayName": "Camera Shoot (Unused) (Stage 1)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 1)" }, { "internalName": "camera_shoot_explosion_1", - "displayName": "Camera Shoot (Unused) (Stage 2)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 2)" }, { "internalName": "camera_shoot_explosion_2", - "displayName": "Camera Shoot (Unused) (Stage 3)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 3)" }, { "internalName": "camera_shoot_explosion_3", - "displayName": "Camera Shoot (Unused) (Stage 4)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 4)" }, { "internalName": "camera_shoot_explosion_4", - "displayName": "Camera Shoot (Unused) (Stage 5)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 5)" }, { "internalName": "camera_shoot_explosion_5", - "displayName": "Camera Shoot (Unused) (Stage 6)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 6)" }, { "internalName": "camera_shoot_explosion_6", - "displayName": "Camera Shoot (Unused) (Stage 7)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 7)" }, { "internalName": "camera_shoot_explosion_7", - "displayName": "Camera Shoot (Unused) (Stage 8)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 8)" }, { "internalName": "camera_shoot_explosion_8", - "displayName": "Camera Shoot (Unused) (Stage 9)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 9)" }, { "internalName": "camera_shoot_explosion_9", - "displayName": "Camera Shoot (Unused) (Stage 10)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 10)" }, { "internalName": "camera_shoot_explosion_10", - "displayName": "Camera Shoot (Unused) (Stage 11)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 11)" }, { "internalName": "camera_shoot_explosion_11", - "displayName": "Camera Shoot (Unused) (Stage 12)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 12)" }, { "internalName": "camera_shoot_explosion_12", - "displayName": "Camera Shoot (Unused) (Stage 13)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 13)" }, { "internalName": "camera_shoot_explosion_13", - "displayName": "Camera Shoot (Unused) (Stage 14)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 14)" }, { "internalName": "camera_shoot_explosion_14", - "displayName": "Camera Shoot (Unused) (Stage 15)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 15)" }, { "internalName": "camera_shoot_explosion_15", - "displayName": "Camera Shoot (Unused) (Stage 16)" + "displayName": "Bedrock Edition Explosion (Unused) (Stage 16)" }, { "internalName": "conduit_0", - "displayName": "Conduit (Unused) (Stage 1)" + "displayName": "Conduit (Stage 1)" }, { "internalName": "conduit_1", - "displayName": "Conduit (Unused) (Stage 2)" + "displayName": "Conduit (Stage 2)" }, { "internalName": "conduit_2", - "displayName": "Conduit (Unused) (Stage 3)" + "displayName": "Conduit (Stage 3)" }, { "internalName": "conduit_3", - "displayName": "Conduit (Unused) (Stage 4)" + "displayName": "Conduit (Stage 4)" }, { "internalName": "conduit_4", - "displayName": "Conduit (Unused) (Stage 5)" + "displayName": "Conduit (Stage 5)" }, { "internalName": "conduit_5", - "displayName": "Conduit (Unused) (Stage 6)" + "displayName": "Conduit (Stage 6)" }, { "internalName": "conduit_6", - "displayName": "Conduit (Unused) (Stage 7)" + "displayName": "Conduit (Stage 7)" }, { "internalName": "conduit_7", - "displayName": "Conduit (Unused) (Stage 8)" + "displayName": "Conduit (Stage 8)" }, { "internalName": "conduit_8", - "displayName": "Conduit (Unused) (Stage 9)" + "displayName": "Conduit (Stage 9)" }, { "internalName": "conduit_9", - "displayName": "Conduit (Unused) (Stage 10)" + "displayName": "Conduit (Stage 10)" }, { "internalName": "conduit_10", - "displayName": "Conduit (Unused) (Stage 11)" + "displayName": "Conduit (Stage 11)" }, { "internalName": "", diff --git a/PCK-Studio/Resources/atlases/particles.png b/PCK-Studio/Resources/atlases/particles.png index 63041dcbf8da33dcea86f40ab8d9f74ca1b97387..b4f1e1f6b30a4630bec6d59789e671c3aae03604 100644 GIT binary patch literal 23424 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 From 95a70cf8cd57663abcfda5d08f956eb6f4e150f3 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Sat, 16 Mar 2024 00:03:26 -0400 Subject: [PATCH 44/52] Fix for nonuniform tile images being incorrectly set --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index 68f24c98..ef19a899 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -390,11 +390,13 @@ namespace PckStudio.Forms.Editor g.DrawImage(texture, dataTile.Area); } + var _finalTexture = _workingTexture.GetArea(new Rectangle(dataTile.Area.X, dataTile.Area.Y, dataTile.Area.Width, dataTile.Area.Height)); + if(_selectedTile != dataTile) - _tiles[dataTile.Index] = new AtlasTile(dataTile.Index, dataTile.Area, dataTile.Tile, texture); + _tiles[dataTile.Index] = new AtlasTile(dataTile.Index, dataTile.Area, dataTile.Tile, _finalTexture); else - _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, texture); - selectTilePictureBox.Image = texture; + _tiles[_selectedTile.Index] = new AtlasTile(_selectedTile.Index, _selectedTile.Area, _selectedTile.Tile, _finalTexture); + selectTilePictureBox.Image = _finalTexture; UpdateAtlasDisplay(); } From c34868abee4594b65088b4bcc3a949473a3487bc Mon Sep 17 00:00:00 2001 From: MattN-L Date: Sat, 16 Mar 2024 00:05:20 -0400 Subject: [PATCH 45/52] Added Banner support for Atlas Editor --- PCK-Studio/Forms/Editor/TextureAtlasEditor.cs | 1 + PCK-Studio/Internal/Json/Tiles.cs | 11 +- PCK-Studio/MainForm.cs | 54 +- PCK-Studio/PckStudio.csproj | 2 + PCK-Studio/Properties/Resources.Designer.cs | 47 + PCK-Studio/Properties/Resources.resx | 6 + PCK-Studio/Resources/atlases/bannerData.json | 1031 +++++++++++++++++ PCK-Studio/Resources/atlases/banners.png | Bin 0 -> 12404 bytes 8 files changed, 1142 insertions(+), 10 deletions(-) create mode 100644 PCK-Studio/Resources/atlases/bannerData.json create mode 100644 PCK-Studio/Resources/atlases/banners.png diff --git a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs index ef19a899..2f93d182 100644 --- a/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs +++ b/PCK-Studio/Forms/Editor/TextureAtlasEditor.cs @@ -115,6 +115,7 @@ namespace PckStudio.Forms.Editor "xporb" => (Tiles.ExperienceOrbTileInfos, "experience_orbs"), "explosion" => (Tiles.ExplosionTileInfos, "explosions"), "kz" => (Tiles.PaintingTileInfos, "paintings"), + "Banner_Atlas" => (Tiles.BannerTileInfos, "banners"), _ => (null, null), }; diff --git a/PCK-Studio/Internal/Json/Tiles.cs b/PCK-Studio/Internal/Json/Tiles.cs index e49815b4..921407a2 100644 --- a/PCK-Studio/Internal/Json/Tiles.cs +++ b/PCK-Studio/Internal/Json/Tiles.cs @@ -26,7 +26,7 @@ namespace PckStudio.Internal.Json _jsonBlockData, _jsonItemData, _jsonParticleData, _jsonMoonPhaseData, _jsonMapIconData, _jsonExplosionData, - _jsonExperienceOrbData, _jsonPaintingData; + _jsonExperienceOrbData, _jsonPaintingData, _jsonBannerData; internal static JsonTiles JsonBlockData => _jsonBlockData ??= JsonConvert.DeserializeObject(Resources.blockData); internal static JsonTiles JsonItemData => _jsonItemData ??= JsonConvert.DeserializeObject(Resources.itemData); internal static JsonTiles JsonParticleData => _jsonParticleData ??= JsonConvert.DeserializeObject(Resources.particleData); @@ -35,6 +35,7 @@ namespace PckStudio.Internal.Json internal static JsonTiles JsonExplosionData => _jsonExplosionData ??= JsonConvert.DeserializeObject(Resources.explosionData); internal static JsonTiles JsonExperienceOrbData => _jsonExperienceOrbData ??= JsonConvert.DeserializeObject(Resources.experienceOrbData); internal static JsonTiles JsonPaintingData => _jsonPaintingData ??= JsonConvert.DeserializeObject(Resources.paintingData); + internal static JsonTiles JsonBannerData => _jsonBannerData ??= JsonConvert.DeserializeObject(Resources.bannerData); internal static List ItemTileInfos => JsonItemData.Entries; internal static List BlockTileInfos => JsonBlockData.Entries; @@ -45,7 +46,7 @@ namespace PckStudio.Internal.Json internal static List ExperienceOrbTileInfos => JsonExperienceOrbData.Entries; internal static List ExplosionTileInfos => JsonExplosionData.Entries; internal static List PaintingTileInfos => JsonPaintingData.Entries; - internal static List BannerTileInfos => JsonPaintingData.Entries; + internal static List BannerTileInfos => JsonBannerData.Entries; private static Image[] _itemImages; public static Image[] ItemImages => _itemImages ??= Resources.items_atlas.SplitHorizontal(16).ToArray(); @@ -74,6 +75,9 @@ namespace PckStudio.Internal.Json private static Image[] _paintingImages; public static Image[] PaintingImages => _paintingImages ??= Resources.paintings_atlas.SplitHorizontal(16).ToArray(); + private static Image[] _bannerImages; + public static Image[] BannerImages => _bannerImages ??= Resources.banners_atlas.SplitHorizontal(6).ToArray(); + private static ImageList GetImageList(Image[] images) { ImageList _imageList = new ImageList(); @@ -109,5 +113,8 @@ namespace PckStudio.Internal.Json private static ImageList _paintingImageList = GetImageList(PaintingImages); public static ImageList PaintingImageList { get { return _paintingImageList; } } + + private static ImageList _bannerImageList = GetImageList(BannerImages); + public static ImageList BannerImageList { get { return _bannerImageList; } } } } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index 6253a6b1..4652f6f7 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -384,25 +384,63 @@ namespace PckStudio bool isXPOrbs = file.Filename == "res/item/xporb.png"; bool isExplosions = file.Filename == "res/misc/explosion.png"; bool isPaintings = file.Filename == "res/art/kz.png"; + bool isBanners = file.Filename == "res/item/banner/Banner_Atlas.png"; if ( isTerrain || isItems || isParticles || isMoonPhases || isPaintings || - isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosions + isMapIcons || isAdditionalMapIcons || isXPOrbs || isExplosions || isBanners ) { var img = file.GetTexture(); + var tile_size = new Size(); + + var banner_scale = img.Width / Resources.banners_atlas.Width; + + if (isBanners) + { + // The banner atlas has extra space on it that has to be truncated for the editor + img = img.GetArea(new Rectangle(0, 0, img.Width - (4 * banner_scale), img.Height - (1 * banner_scale))); + + // banners are 42x41 because of course they are + tile_size = new Size(42 * banner_scale, 41 * banner_scale); + } + + // most atlases have 4 columns + var columnCount = isBanners ? 6 : 4; - // all of the other atlases so far use 4 - var columnCount = 4; - if (isTerrain || isItems || isParticles || isPaintings) columnCount = 16; - var resolution = img.Width / columnCount; - var size = new Size(resolution, resolution); - var viewer = new TextureAtlasEditor(currentPCK, file.Filename, img, size); + if (!isBanners) + { + var resolution = img.Width / columnCount; + tile_size = new Size(resolution, resolution); + } + + var viewer = new TextureAtlasEditor(currentPCK, file.Filename, img, tile_size); if (viewer.ShowDialog() == DialogResult.OK) { - file.SetData(viewer.FinalTexture, ImageFormat.Png); + var texture = viewer.FinalTexture; + if(isBanners) + { + var graphicsConfig = new GraphicsConfig() + { + InterpolationMode = InterpolationMode.NearestNeighbor, + PixelOffsetMode = PixelOffsetMode.HighQuality + }; + + var _img = new Bitmap((Resources.banners_atlas.Width + 4) * banner_scale, + (Resources.banners_atlas.Height + 1) * banner_scale); + + using (var g = Graphics.FromImage(_img)) + { + g.ApplyConfig(graphicsConfig); + g.DrawImage(texture, 0, 0, texture.Width, texture.Height); + } + + texture = _img; + } + + file.SetData(texture, ImageFormat.Png); wasModified = true; BuildMainTreeView(); } diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 9c952d7e..249ed5f4 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -628,6 +628,7 @@ + @@ -686,6 +687,7 @@ + diff --git a/PCK-Studio/Properties/Resources.Designer.cs b/PCK-Studio/Properties/Resources.Designer.cs index 30cb940d..f5d3c9f8 100644 --- a/PCK-Studio/Properties/Resources.Designer.cs +++ b/PCK-Studio/Properties/Resources.Designer.cs @@ -100,6 +100,53 @@ namespace PckStudio.Properties { } } + /// + /// Looks up a localized string similar to { + /// "COMMENT_1": "JSON by MattNL", + /// "banners": [ + /// { + /// "internalName": "base", + /// "displayName": "Base" + /// }, + /// { + /// "internalName": "border", + /// "displayName": "Bordure" + /// }, + /// { + /// "internalName": "bricks", + /// "displayName": "Field Masoned" + /// }, + /// { + /// "internalName": "circle", + /// "displayName": "Roundel" + /// }, + /// { + /// "internalName": "creeper", + /// "displayName": "Creeper Charge" + /// }, + /// { + /// "internalName": "cross", + /// "displayName": "Saltire" + /// }, + /// { + /// "internalName": "curly_bo [rest of string was truncated]";. + /// + public static string bannerData { + get { + return ResourceManager.GetString("bannerData", resourceCulture); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap banners_atlas { + get { + object obj = ResourceManager.GetObject("banners_atlas", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/PCK-Studio/Properties/Resources.resx b/PCK-Studio/Properties/Resources.resx index 19110ffd..52fb4d8c 100644 --- a/PCK-Studio/Properties/Resources.resx +++ b/PCK-Studio/Properties/Resources.resx @@ -364,6 +364,12 @@ ..\Resources\atlases\particles.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\atlases\bannerData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\atlases\banners.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\atlases\paintingData.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 diff --git a/PCK-Studio/Resources/atlases/bannerData.json b/PCK-Studio/Resources/atlases/bannerData.json new file mode 100644 index 00000000..f5f347a8 --- /dev/null +++ b/PCK-Studio/Resources/atlases/bannerData.json @@ -0,0 +1,1031 @@ +{ + "COMMENT_1": "JSON by MattNL", + "entries": [ + { + "internalName": "base", + "displayName": "Base", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "border", + "displayName": "Bordure", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "bricks", + "displayName": "Field Masoned", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "circle", + "displayName": "Roundel", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "creeper", + "displayName": "Creeper Charge", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "cross", + "displayName": "Saltire", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "curly_border", + "displayName": "Bordure Indented", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "diagonal_left", + "displayName": "Per Bend Sinister", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "diagonal_right", + "displayName": "Per Bend", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "diagonal_up_left", + "displayName": "Per Bend Inverted", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "diagonal_up_right", + "displayName": "Per Bend Sinister Inverted", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "flower", + "displayName": "Flower Charge", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "gradient", + "displayName": "Gradient", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "gradient_up", + "displayName": "Base Gradient", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "half_horizontal", + "displayName": "Per Fess", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "half_horizontal_bottom", + "displayName": "Per Fess Inverted", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "half_vertical", + "displayName": "Per Pale", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "half_vertical_right", + "displayName": "Per Pale Inverted", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "mojang", + "displayName": "Thing", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "rhombus", + "displayName": "Lozenge", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "skull", + "displayName": "Skull Charge", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "small_stripes", + "displayName": "Paly", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "square_bottom_left", + "displayName": "Base Dexter Canton", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "square_bottom_right", + "displayName": "Base Sinister Canton", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "square_top_left", + "displayName": "Chief Dexter Canton", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "square_top_right", + "displayName": "Chief Sinister Canton", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "straight_cross", + "displayName": "Cross", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_bottom", + "displayName": "Base Fess", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_center", + "displayName": "Pale", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "strip_downleft", + "displayName": "Bend Sinister", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_downright", + "displayName": "Bend", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_left", + "displayName": "Pale Dexter", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_middle", + "displayName": "Fess", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_right", + "displayName": "Pale Sinister", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "stripe_top", + "displayName": "Chief Fess", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "triangle_bottom", + "displayName": "Chevron", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "triangle_top", + "displayName": "Inverted Chevron", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "triangles_bottom", + "displayName": "Base Indented", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "triangles_top", + "displayName": "Chief Indented", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } + }, + { + "internalName": "mask", + "displayName": "Mask" + }, + { + "internalName": "", + "displayName": "" + }, + { + "internalName": "", + "displayName": "" + } + ] +} diff --git a/PCK-Studio/Resources/atlases/banners.png b/PCK-Studio/Resources/atlases/banners.png new file mode 100644 index 0000000000000000000000000000000000000000..38c8d9aa569e65ec6bcd1241916d28429e732c0c GIT binary patch literal 12404 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Ý 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

_ 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 F{{iV>8C3uP literal 0 HcmV?d00001 From 444a366aca2de9a1290cf35f489a586d8618410e Mon Sep 17 00:00:00 2001 From: MattN-L Date: Sat, 16 Mar 2024 00:46:30 -0400 Subject: [PATCH 46/52] Added PS4 Banners to banner data --- PCK-Studio/Resources/atlases/bannerData.json | 30 ++++++++++++++++--- PCK-Studio/Resources/atlases/banners.png | Bin 12404 -> 12880 bytes 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/PCK-Studio/Resources/atlases/bannerData.json b/PCK-Studio/Resources/atlases/bannerData.json index f5f347a8..88c3685f 100644 --- a/PCK-Studio/Resources/atlases/bannerData.json +++ b/PCK-Studio/Resources/atlases/bannerData.json @@ -1020,12 +1020,34 @@ "displayName": "Mask" }, { - "internalName": "", - "displayName": "" + "internalName": "illager", + "displayName": "Ominous Banner [PS4 ONLY]" }, { - "internalName": "", - "displayName": "" + "internalName": "globe", + "displayName": "Globe [PS4 ONLY]", + "hasColourEntry": true, + "colourEntry": { + "defaultName": "Banner_White", + "variants": [ + "Banner_Black", + "Banner_Blue", + "Banner_Brown", + "Banner_Cyan", + "Banner_Gray", + "Banner_Green", + "Banner_Light_Blue", + "Banner_Lime", + "Banner_Magenta", + "Banner_Orange", + "Banner_Pink", + "Banner_Purple", + "Banner_Red", + "Banner_Silver", + "Banner_White", + "Banner_Yellow" + ] + } } ] } diff --git a/PCK-Studio/Resources/atlases/banners.png b/PCK-Studio/Resources/atlases/banners.png index 38c8d9aa569e65ec6bcd1241916d28429e732c0c..952a0effeedf113a2b97a304353e08c8cb14fbb5 100644 GIT binary patch delta 12521 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 TXTScQ0HY|YCQ~J47WDrBWs_c> delta 12041 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%0D$geAK_mGMwl>@M2>5D8NHpp~K${ccDt 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 Date: Sat, 16 Mar 2024 02:06:43 -0400 Subject: [PATCH 47/52] Fix for ChangeTile filter exception --- .../Additional-Popups/Animation/ChangeTile.cs | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs b/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs index 0bef8b08..2fe99dca 100644 --- a/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs +++ b/PCK-Studio/Forms/Additional-Popups/Animation/ChangeTile.cs @@ -12,10 +12,10 @@ namespace PckStudio.Forms.Additional_Popups.Animation internal partial class ChangeTile : MetroForm { string selectedTile = ""; - Internal.AnimationCategory category = Internal.AnimationCategory.Blocks; + AnimationCategory category = AnimationCategory.Blocks; public string SelectedTile => selectedTile; - public Internal.AnimationCategory Category => category; + public AnimationCategory Category => category; List treeViewBlockCache = new List(); List treeViewItemCache = new List(); @@ -31,8 +31,8 @@ namespace PckStudio.Forms.Additional_Popups.Animation private void InitializeTreeviews() { Profiler.Start(); - GetTileDataToView(Internal.AnimationCategory.Blocks, treeViewBlocks.Nodes, treeViewBlockCache.Add); - GetTileDataToView(Internal.AnimationCategory.Items, treeViewItems.Nodes, treeViewItemCache.Add); + GetTileDataToView(AnimationCategory.Blocks, treeViewBlocks.Nodes, treeViewBlockCache.Add); + GetTileDataToView(AnimationCategory.Items, treeViewItems.Nodes, treeViewItemCache.Add); Profiler.Stop(); } @@ -41,35 +41,34 @@ namespace PckStudio.Forms.Additional_Popups.Animation if (e.Node.Tag is JsonTileInfo tileData) { selectedTile = tileData.InternalName; - Debug.WriteLine(selectedTile); category = e.Node.TreeView == treeViewItems - ? Internal.AnimationCategory.Items - : Internal.AnimationCategory.Blocks; + ? AnimationCategory.Items + : AnimationCategory.Blocks; } } - private void GetTileDataToView(Internal.AnimationCategory key, TreeNodeCollection collection, Action additinalAction) + private void GetTileDataToView(AnimationCategory key, TreeNodeCollection collection, Action additionalAction) { List textureInfos = key switch { - Internal.AnimationCategory.Blocks => Tiles.BlockTileInfos, - Internal.AnimationCategory.Items => Tiles.ItemTileInfos, + AnimationCategory.Blocks => Tiles.BlockTileInfos, + AnimationCategory.Items => Tiles.ItemTileInfos, _ => throw new InvalidOperationException(nameof(key)) }; Profiler.Start(); if (textureInfos is not null) { - foreach ((int i, var content) in textureInfos.enumerate()) + foreach ((int i, var tileData) in textureInfos.enumerate()) { - if (string.IsNullOrEmpty(content.InternalName) || collection.ContainsKey(content.InternalName)) + if (string.IsNullOrEmpty(tileData.InternalName) || collection.ContainsKey(tileData.InternalName)) continue; - TreeNode tileNode = new TreeNode(content.DisplayName, i, i) + TreeNode tileNode = new TreeNode(tileData.DisplayName, i, i) { - Name = content.InternalName, - Tag = content + Name = tileData.InternalName, + Tag = tileData }; collection.Add(tileNode); - additinalAction(tileNode); + additionalAction(tileNode); } } Profiler.Stop(); @@ -90,7 +89,7 @@ namespace PckStudio.Forms.Additional_Popups.Animation foreach (TreeNode _node in treeViewBlockCache) { if (_node.Text.ToLower().Contains(metroTextBox1.Text.ToLower()) || - (_node.Tag as string).ToLower().Contains(metroTextBox1.Text.ToLower())) + (_node.Tag as JsonTileInfo).InternalName.ToLower().Contains(metroTextBox1.Text.ToLower())) { treeViewBlocks.Nodes.Add((TreeNode)_node.Clone()); } @@ -98,7 +97,7 @@ namespace PckStudio.Forms.Additional_Popups.Animation foreach (TreeNode _node in treeViewItemCache) { if (_node.Text.ToLower().Contains(metroTextBox1.Text.ToLower()) || - (_node.Tag as string).ToLower().Contains(metroTextBox1.Text.ToLower())) + (_node.Tag as JsonTileInfo).InternalName.ToLower().Contains(metroTextBox1.Text.ToLower())) { treeViewItems.Nodes.Add((TreeNode)_node.Clone()); } From 954b062d365442beb6b144e18f43e5e78aba5f4f Mon Sep 17 00:00:00 2001 From: MattN-L Date: Sat, 16 Mar 2024 10:58:59 -0400 Subject: [PATCH 48/52] Fix for ChangeTile not working in Animation Editor --- PCK-Studio/Forms/Editor/AnimationEditor.cs | 6 +++++- PCK-Studio/MainForm.cs | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index aae1adf3..a39c0ec5 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -44,6 +44,8 @@ namespace PckStudio.Forms.Editor private string _tileName = string.Empty; + public string FinalTileName => $"res/textures/{_animation.CategoryString}/{_tileName}.png"; + private static readonly string[] specialTileNames = { "clock", "compass" }; private static bool IsSpecialTile(string name) @@ -77,6 +79,7 @@ namespace PckStudio.Forms.Editor bulkAnimationSpeedToolStripMenuItem.Enabled = importToolStripMenuItem.Enabled = exportAsToolStripMenuItem.Enabled = + changeTileToolStripMenuItem.Enabled = InterpolationCheckbox.Visible = !IsSpecialTile(_tileName); SetTileLabel(); @@ -157,6 +160,7 @@ namespace PckStudio.Forms.Editor private void saveToolStripMenuItem1_Click(object sender, EventArgs e) { + if (!IsSpecialTile(_tileName) && _animation is not null) { DialogResult = DialogResult.OK; @@ -342,7 +346,7 @@ namespace PckStudio.Forms.Editor if (diag.ShowDialog(this) != DialogResult.OK) return; - Debug.WriteLine(diag.SelectedTile); + Debug.WriteLine($"{diag.SelectedTile}"); _animation.Category = diag.Category; _tileName = diag.SelectedTile; diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index ebf74bfc..e6b1cda1 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -472,6 +472,7 @@ namespace PckStudio if (animationEditor.ShowDialog(this) == DialogResult.OK) { wasModified = true; + file.Filename = animationEditor.FinalTileName; AnimationHelper.SaveAnimationToFile(file, animation); BuildMainTreeView(); } From d8cf0107f3c2708e65af8e5ba7e0b4df87bdf9e6 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Sat, 16 Mar 2024 13:48:32 -0400 Subject: [PATCH 49/52] Fix for .gif import not setting correct category --- PCK-Studio/Forms/Editor/AnimationEditor.cs | 36 ++++++++++++++-------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index a39c0ec5..708b492c 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -74,15 +74,20 @@ namespace PckStudio.Forms.Editor animationPictureBox.BlendColor = blendColor; } + private void ValidateToolStrip() + { + bulkAnimationSpeedToolStripMenuItem.Enabled = + importToolStripMenuItem.Enabled = + exportAsToolStripMenuItem.Enabled = + changeTileToolStripMenuItem.Enabled = + InterpolationCheckbox.Visible = !IsSpecialTile(_tileName); + } + private void AnimationEditor_Load(object sender, EventArgs e) { - bulkAnimationSpeedToolStripMenuItem.Enabled = - importToolStripMenuItem.Enabled = - exportAsToolStripMenuItem.Enabled = - changeTileToolStripMenuItem.Enabled = - InterpolationCheckbox.Visible = !IsSpecialTile(_tileName); + ValidateToolStrip(); - SetTileLabel(); + SetTileLabel(); LoadAnimationTreeView(); } @@ -127,12 +132,17 @@ namespace PckStudio.Forms.Editor animationPictureBox.SelectFrame(_animation, frameTreeView.SelectedNode.Index); } + private void StopAnimation() + { + animationPictureBox.Stop(); + AnimationStartStopBtn.Text = "Play Animation"; + } + private void AnimationStartStopBtn_Click(object sender, EventArgs e) { if (animationPictureBox.IsPlaying) { - animationPictureBox.Stop(); - AnimationStartStopBtn.Text = "Play Animation"; + StopAnimation(); return; } if (_animation.FrameCount > 1) @@ -341,6 +351,7 @@ namespace PckStudio.Forms.Editor private void changeTileToolStripMenuItem_Click(object sender, EventArgs e) { + StopAnimation(); using (ChangeTile diag = new ChangeTile()) { if (diag.ShowDialog(this) != DialogResult.OK) @@ -350,10 +361,7 @@ namespace PckStudio.Forms.Editor _animation.Category = diag.Category; _tileName = diag.SelectedTile; - bulkAnimationSpeedToolStripMenuItem.Enabled = - importToolStripMenuItem.Enabled = - exportAsToolStripMenuItem.Enabled = - InterpolationCheckbox.Visible = !IsSpecialTile(_tileName); + ValidateToolStrip(); SetTileLabel(); } @@ -468,7 +476,11 @@ namespace PckStudio.Forms.Editor gif.SelectActiveFrame(dimension, i); textures.Add(new Bitmap(gif)); } + + var animCat = _animation.Category; + _animation = new Animation(textures, string.Empty); + _animation.Category = animCat; LoadAnimationTreeView(); } From 68188e84e72148a3699be1ef14506745c58b6ef1 Mon Sep 17 00:00:00 2001 From: MattN-L Date: Sat, 16 Mar 2024 16:05:47 -0400 Subject: [PATCH 50/52] Import .Gif in AnimationEditor now scales frames --- PCK-Studio/Forms/Editor/AnimationEditor.cs | 24 +++++++--------------- PCK-Studio/MainForm.cs | 2 +- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/PCK-Studio/Forms/Editor/AnimationEditor.cs b/PCK-Studio/Forms/Editor/AnimationEditor.cs index 708b492c..456c5b32 100644 --- a/PCK-Studio/Forms/Editor/AnimationEditor.cs +++ b/PCK-Studio/Forms/Editor/AnimationEditor.cs @@ -44,7 +44,7 @@ namespace PckStudio.Forms.Editor private string _tileName = string.Empty; - public string FinalTileName => $"res/textures/{_animation.CategoryString}/{_tileName}.png"; + public string FinalPath => $"res/textures/{_animation.CategoryString}/{_tileName}.png"; private static readonly string[] specialTileNames = { "clock", "compass" }; @@ -170,8 +170,7 @@ namespace PckStudio.Forms.Editor private void saveToolStripMenuItem1_Click(object sender, EventArgs e) { - - if (!IsSpecialTile(_tileName) && _animation is not null) + if (!IsSpecialTile(_tileName) && _animation is not null && _animation.FrameCount > 0) { DialogResult = DialogResult.OK; return; @@ -376,19 +375,6 @@ namespace PckStudio.Forms.Editor _ => throw new ArgumentOutOfRangeException(_animation.Category.ToString()) }; tileLabel.Text = textureInfos.FirstOrDefault(p => p.InternalName == _tileName)?.DisplayName ?? _tileName; - - //switch (MessageBox.Show(this, - // $"{TileName} is not a valid tile for animation, and will not play in game. Would you like to choose a new tile?", - // "Not a valid tile", - // MessageBoxButtons.YesNo)) - //{ - // case DialogResult.Yes: - // changeTileToolStripMenuItem_Click(null, EventArgs.Empty); - // break; - // default: - // DialogResult = DialogResult.Abort; - // break; - //} } private void exportJavaAnimationToolStripMenuItem_Click(object sender, EventArgs e) @@ -466,6 +452,8 @@ namespace PckStudio.Forms.Editor return; } + var oldResolution = _animation.BuildTexture().Width; + FrameDimension dimension = new FrameDimension(gif.FrameDimensionsList[0]); int frameCount = gif.GetFrameCount(dimension); @@ -474,12 +462,14 @@ namespace PckStudio.Forms.Editor for (int i = 0; i < frameCount; i++) { gif.SelectActiveFrame(dimension, i); - textures.Add(new Bitmap(gif)); + + textures.Add(new Bitmap(gif, oldResolution, oldResolution)); } var animCat = _animation.Category; _animation = new Animation(textures, string.Empty); + _animation.Interpolate = InterpolationCheckbox.Checked; _animation.Category = animCat; LoadAnimationTreeView(); } diff --git a/PCK-Studio/MainForm.cs b/PCK-Studio/MainForm.cs index e6b1cda1..58a0f287 100644 --- a/PCK-Studio/MainForm.cs +++ b/PCK-Studio/MainForm.cs @@ -472,7 +472,7 @@ namespace PckStudio if (animationEditor.ShowDialog(this) == DialogResult.OK) { wasModified = true; - file.Filename = animationEditor.FinalTileName; + file.Filename = animationEditor.FinalPath; AnimationHelper.SaveAnimationToFile(file, animation); BuildMainTreeView(); } From ea4328389c36d2d7c2b3d7309ccb87ba9192d2a0 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Mon, 18 Mar 2024 17:39:43 +0100 Subject: [PATCH 51/52] Update OMI for GRF Editor --- PCK-Studio/Forms/Editor/GameRuleFileEditor.cs | 3 +-- Vendor/OMI-Lib | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs b/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs index d4daade9..1a820646 100644 --- a/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs +++ b/PCK-Studio/Forms/Editor/GameRuleFileEditor.cs @@ -17,7 +17,6 @@ **/ using System; using System.Collections.Generic; -using System.Drawing; using System.IO; using System.Linq; using System.Windows.Forms; @@ -272,7 +271,7 @@ namespace PckStudio.Forms.Editor { try { - _pckfile?.SetData(new GameRuleFileWriter(_file, compressionLevel, compressionType)); + _pckfile?.SetData(new GameRuleFileWriter(_file)); DialogResult = DialogResult.OK; MessageBox.Show("Saved!"); } diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib index bf46386e..211d31a0 160000 --- a/Vendor/OMI-Lib +++ b/Vendor/OMI-Lib @@ -1 +1 @@ -Subproject commit bf46386e771fd573a625dfb124695ee4d8deeba5 +Subproject commit 211d31a060e19410c40418081db2b31ec79784c5 From efee37b7d446938180b755e9e668bfd0614d5659 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Sat, 23 Mar 2024 09:35:01 +0100 Subject: [PATCH 52/52] Update OMI to fix loc file issue --- Vendor/OMI-Lib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Vendor/OMI-Lib b/Vendor/OMI-Lib index 211d31a0..40795ea8 160000 --- a/Vendor/OMI-Lib +++ b/Vendor/OMI-Lib @@ -1 +1 @@ -Subproject commit 211d31a060e19410c40418081db2b31ec79784c5 +Subproject commit 40795ea8a58eb1bd4933f1cf50315d5aea4909ef