From c744e3b4a82f7af7b315787bfc00a333b9c0b248 Mon Sep 17 00:00:00 2001 From: Bryan Bishop Date: Sat, 14 Jan 2012 17:45:55 -0600 Subject: [PATCH] extract and include blockset data extract_tileblocks also has the ability to output asm, but the output seems like it would be too much for rgbasm to handle. Instead of cluttering up common.asm, I am opting to place the data in binary data files under gfx/blocksets/ in .bst files. Every 16 bytes is a separate block in the blockset. Each byte is referencing a tile id from the tileset graphics in gfx/tilesets/. hg-commit-id: 0540eff0f081 --- common.asm | 38 +++++++------- extras/extract_tileblocks.py | 95 +++++++++++++++++++++++++++++++++++ gfx/blocksets/00.bst | Bin 0 -> 2048 bytes gfx/blocksets/01.bst | Bin 0 -> 304 bytes gfx/blocksets/02.bst | Bin 0 -> 592 bytes gfx/blocksets/03.bst | Bin 0 -> 2048 bytes gfx/blocksets/05.bst | Bin 0 -> 1856 bytes gfx/blocksets/08.bst | Bin 0 -> 560 bytes gfx/blocksets/09.bst | Bin 0 -> 2048 bytes gfx/blocksets/0b.bst | Bin 0 -> 272 bytes gfx/blocksets/0d.bst | Bin 0 -> 992 bytes gfx/blocksets/0e.bst | Bin 0 -> 368 bytes gfx/blocksets/0f.bst | Bin 0 -> 1760 bytes gfx/blocksets/10.bst | Bin 0 -> 928 bytes gfx/blocksets/11.bst | Bin 0 -> 2048 bytes gfx/blocksets/12.bst | Bin 0 -> 1264 bytes gfx/blocksets/13.bst | Bin 0 -> 1152 bytes gfx/blocksets/14.bst | Bin 0 -> 928 bytes gfx/blocksets/15.bst | Bin 0 -> 576 bytes gfx/blocksets/16.bst | Bin 0 -> 2049 bytes gfx/blocksets/17.bst | Bin 0 -> 1200 bytes 21 files changed, 114 insertions(+), 19 deletions(-) create mode 100644 extras/extract_tileblocks.py create mode 100644 gfx/blocksets/00.bst create mode 100644 gfx/blocksets/01.bst create mode 100644 gfx/blocksets/02.bst create mode 100644 gfx/blocksets/03.bst create mode 100644 gfx/blocksets/05.bst create mode 100644 gfx/blocksets/08.bst create mode 100644 gfx/blocksets/09.bst create mode 100644 gfx/blocksets/0b.bst create mode 100644 gfx/blocksets/0d.bst create mode 100644 gfx/blocksets/0e.bst create mode 100644 gfx/blocksets/0f.bst create mode 100644 gfx/blocksets/10.bst create mode 100644 gfx/blocksets/11.bst create mode 100644 gfx/blocksets/12.bst create mode 100644 gfx/blocksets/13.bst create mode 100644 gfx/blocksets/14.bst create mode 100644 gfx/blocksets/15.bst create mode 100644 gfx/blocksets/16.bst create mode 100644 gfx/blocksets/17.bst diff --git a/common.asm b/common.asm index 4b8f9010d..29f47d3fd 100644 --- a/common.asm +++ b/common.asm @@ -34920,31 +34920,31 @@ SECTION "bank19",DATA,BANK[$19] Tset00_GFX: INCBIN "gfx/tilesets/00.2bpp" Tset00_Block: - INCBIN "baserom.gbc",$645E0,$64DE0-$645E0 + INCBIN "gfx/blocksets/00.bst" Tset01_GFX: INCBIN "gfx/tilesets/01.2bpp" Tset01_Block: - INCBIN "baserom.gbc",$65270,$653A0-$65270 + INCBIN "gfx/blocksets/01.bst" Tset08_GFX: INCBIN "gfx/tilesets/08.2bpp" Tset08_Block: - INCBIN "baserom.gbc",$65980,$65BB0-$65980 + INCBIN "gfx/blocksets/08.bst" Tset13_GFX: INCBIN "gfx/tilesets/13.2bpp" Tset13_Block: - INCBIN "baserom.gbc",$66190,$66610-$66190 + INCBIN "gfx/blocksets/13.bst" Tset0E_GFX: INCBIN "gfx/tilesets/0e.2bpp" Tset0E_Block: - INCBIN "baserom.gbc",$66BF0,$66D60-$66BF0 + INCBIN "gfx/blocksets/0e.bst" Tset10_GFX: INCBIN "gfx/tilesets/10.2bpp" Tset10_Block: - INCBIN "baserom.gbc",$67350,$676F0-$67350 + INCBIN "gfx/blocksets/10.bst" Tset17_GFX: INCBIN "gfx/tilesets/17.2bpp" Tset17_Block: - INCBIN "baserom.gbc",$67B50,$68000-$67B50 + INCBIN "gfx/blocksets/17.bst" SECTION "bank1A",DATA,BANK[$1A] @@ -34988,54 +34988,54 @@ ENDC Tset05_GFX: INCBIN "gfx/tilesets/05.2bpp" Tset05_Block: - INCBIN "baserom.gbc",$6867F,$68DBF-$6867F + INCBIN "gfx/blocksets/05.bst" Tset02_GFX: INCBIN "gfx/tilesets/02.2bpp" Tset02_Block: - INCBIN "baserom.gbc",$693BF,$6960F-$693BF + INCBIN "gfx/blocksets/02.bst" Tset09_GFX: INCBIN "gfx/tilesets/09.2bpp" Tset09_Block: - INCBIN "baserom.gbc",$69BFF,$6A3FF-$69BFF + INCBIN "gfx/blocksets/09.bst" Tset03_GFX: INCBIN "gfx/tilesets/03.2bpp" Tset03_Block: - INCBIN "baserom.gbc",$6A9FF,$6B1FF-$6A9FF + INCBIN "gfx/blocksets/03.bst" Tset16_GFX: INCBIN "gfx/tilesets/16.2bpp" Tset16_Block: - INCBIN "baserom.gbc",$6B7FF,$6C000-$6B7FF + INCBIN "gfx/blocksets/16.bst" SECTION "bank1B",DATA,BANK[$1B] Tset0F_GFX: INCBIN "gfx/tilesets/0f.2bpp" Tset0F_Block: - INCBIN "baserom.gbc",$6C5C0,$6CCA0-$6C5C0 + INCBIN "gfx/blocksets/0f.bst" Tset11_GFX: INCBIN "gfx/tilesets/11.2bpp" Tset11_Block: - INCBIN "baserom.gbc",$6D0C0,$6D8C0-$6D0C0 + INCBIN "gfx/blocksets/11.bst" Tset12_GFX: INCBIN "gfx/tilesets/12.2bpp" Tset12_Block: - INCBIN "baserom.gbc",$6DEA0,$6E390-$6DEA0 + INCBIN "gfx/blocksets/12.bst" Tset0D_GFX: INCBIN "gfx/tilesets/0d.2bpp" Tset0D_Block: - INCBIN "baserom.gbc",$6E930,$6ED10-$6E930 + INCBIN "gfx/blocksets/0d.bst" Tset14_GFX: INCBIN "gfx/tilesets/14.2bpp" Tset14_Block: - INCBIN "baserom.gbc",$6F2D0,$6F670-$6F2D0 + INCBIN "gfx/blocksets/14.bst" Tset15_GFX: INCBIN "gfx/tilesets/15.2bpp" Tset15_Block: - INCBIN "baserom.gbc",$6FB20,$6FD60-$6FB20 + INCBIN "gfx/blocksets/15.bst" Tset0B_GFX: INCBIN "gfx/tilesets/0b.2bpp" Tset0B_Block: - INCBIN "baserom.gbc",$6FEF0,$70000-$6FEF0 + INCBIN "gfx/blocksets/0b.bst" SECTION "bank1C",DATA,BANK[$1C] diff --git a/extras/extract_tileblocks.py b/extras/extract_tileblocks.py new file mode 100644 index 000000000..425134119 --- /dev/null +++ b/extras/extract_tileblocks.py @@ -0,0 +1,95 @@ +#!/usr/bin/python +#author: Bryan Bishop +#date: 2012-01-14 +#split out blocksets into binary data files +# There's also code here to spit out asm for each blockset, +# but it's too many lines and will probably crash rgbasm. + +import sys +import extract_maps +extract_maps.load_rom() +spacing = " " + +tileblocks = { +"Tset00_Block": [0x645E0, 0x64DE0, ""], +"Tset01_Block": [0x65270, 0x653A0, ""], +"Tset02_Block": [0x693BF, 0x6960F, ""], +"Tset03_Block": [0x6A9FF, 0x6B1FF, ""], +"Tset05_Block": [0x6867F, 0x68DBF, ""], +"Tset08_Block": [0x65980, 0x65BB0, ""], +"Tset09_Block": [0x69BFF, 0x6A3FF, ""], +"Tset0B_Block": [0x6FEF0, 0x70000, ""], +"Tset0D_Block": [0x6E930, 0x6ED10, ""], +"Tset0E_Block": [0x66BF0, 0x66D60, ""], +"Tset0F_Block": [0x6C5C0, 0x6CCA0, ""], +"Tset10_Block": [0x67350, 0x676F0, ""], +"Tset13_Block": [0x66190, 0x66610, ""], +"Tset11_Block": [0x6D0C0, 0x6D8C0, ""], +"Tset12_Block": [0x6DEA0, 0x6E390, ""], +"Tset14_Block": [0x6F2D0, 0x6F670, ""], +"Tset15_Block": [0x6FB20, 0x6FD60, ""], +"Tset16_Block": [0x6B7FF, 0x6C000, ""], +"Tset17_Block": [0x67B50, 0x68000, ""], +} + +#10:02 <+sawakita> each block is composed by 4x4 tiles +#10:03 <+sawakita> so you can see a blockset as a list of 16-bytes long arrays +#10:07 <+sawakita> 4 bytes for each row of the block, left-to-right, top-to-down +#10:08 <+sawakita> so first byte is top-left tile +#10:08 <+kanzure> top-left tile byte is a tile id? +#10:08 <+sawakita> exactly +#10:09 <+kanzure> what does a tile id reference +#10:10 <+sawakita> tile ID $00 is the first tile of the tileset's graphics (first 16-bytes, since gfx are 2bpp) + +output = "" +for tileblock_id in tileblocks.keys(): + tileblock = tileblocks[tileblock_id] + start_address = tileblock[0] + end_address = tileblock[1] + block_count = (end_address - start_address) / 16 + main_data = extract_maps.rom[start_address:end_address] + + blockset_id = int(tileblock_id[4:6], 16) + + output = "; " + output += tileblock_id + " - " + str(block_count) + " blocks (" + hex(start_address) + " to " + hex(end_address) + ")\n" + #print tileblock_id + " has " + str(block_count) + " block tiles." + for block_id in range(0, block_count): + start_address2 = start_address + (16 * block_id) + end_address2 = start_address + (16 * block_id) + 16 + data = extract_maps.rom[start_address2:end_address2] + + output += spacing + "; block " + str(block_id + 1) + " on " + tileblock_id + "\n" + + #output += spacing + spacing + "db $%.2x" % (ord(data[0])) + #for data_bit in range(1,15): + # output += ", $%.2x" % (ord(data[data_bit])) + #output += ", $%.2x" % (ord(data[15])) + #output += "\n" + + for row_id in range(0,4): + subdata = data[row_id * 4:row_id * 4 + 4] + subdata2 = [ord(subdata[0]), ord(subdata[1]), ord(subdata[2]), ord(subdata[3])] + + output += spacing + spacing + " ; row " + str(row_id + 1) + "\n" + output += spacing + spacing + spacing + "db $%.2x, $%.2x, $%.2x, $%.2x\n" % (subdata2[0], subdata2[1], subdata2[2], subdata2[3]) + + fh = open("../gfx/blocksets/%.2x.bst" % (blockset_id), "w") + fh.write(main_data) + fh.close() + + print output + +""" +Tset00_Block: + ; block 1 + ; row 1 + db 0, 0, 0, 0 + ; row 2 + db 0, 0, 0, 0 + ; row 3 + db 0, 0, 0, 0 + ; row 4 + db 0, 0, 0, 0 +""" + diff --git a/gfx/blocksets/00.bst b/gfx/blocksets/00.bst new file mode 100644 index 0000000000000000000000000000000000000000..18ceef979e6e410f849a4880a453dccb792182a0 GIT binary patch literal 2048 zcmZ`)4O`kU5Pr}p8XZ`~F{_i&q9{byjcP4a2mA1=o5B#?-1h(f#@PnuWGgJou%b#cVn|yTv)8tUat$Rqxn^X zcBfkH^%LL)eheqW#bp%z{1rvgLIlJHXXkNzcV7f*fG>oP{atIi5`R3w-27y+c3i0_ zf}Infl7aS_OcoX^mE(0HvU@Nb3`gV9nECdO5M|Hv$_T(UzURIB2+i}L3i>|z3AMho zEb1GZ?oGSX?)3V-e$L73YL#`8XoU5g|8E|TYtHMLoA5w5LcB^P-=9u>pE(^9ofrGl z1wPW#!_;erQAP|^5j(iKOcWSUyo3pl~Hg+^gW6rogdr5 zx~a1?6_}bL{{-^SEfi*A_&vk%LH>GlZe>r`C*>=hn-HF^=dD6vi_ZwW0N62Wcckp~ z?WkxuAJ09B!qM0SHWTdgZ6F`)d?B@k7}^xaFPk>$C3$|)9(KOiYmcHNvDYHsLbjZ( zl#(si{IN!}d7SH5`=8gT9_M|T^Lt*;Oob$Ya zx(B$9E-u3+?xzsFPXRSl%kBYX&!^96{p!lSVf(&()w=!?Oo8_R`$Rl2I6Du5yL%bP0FPuI#6gTFU~b}v4ng-b>{I=MdWOEgbUZ1R(8+%F Gp7}o{ol2Sj literal 0 HcmV?d00001 diff --git a/gfx/blocksets/01.bst b/gfx/blocksets/01.bst new file mode 100644 index 0000000000000000000000000000000000000000..6c9f4749ff35108e2df6e6c22094fa71cb8f168b GIT binary patch literal 304 zcmZXP3r~YU5QKN`jIC8$b7!pYwxHlqtUOvDfPL7i{}uiL{JBElLZV-?nM@|Ln@zJc z%Zt278)e+Gg?xQu+;xOZq9?`p`-hOul<_DQk{ZxpDNA|2=NqPB24N5qJvz=;LI3T2M{nzz| iXgsm(udV9@VG>pE*^0=S0#OX?zJcx$@be2?UIBZPogWJT literal 0 HcmV?d00001 diff --git a/gfx/blocksets/02.bst b/gfx/blocksets/02.bst new file mode 100644 index 0000000000000000000000000000000000000000..a82460f5b8dc0b749045a9d0e9150eb6a227cc8e GIT binary patch literal 592 zcmZ8fiBiHa5TyzjP1RNlq)kx{k5swQPCW)hMGLebDju!J|Nn&vx>IRpc6Q$G=4Ib* z5{bpL%oJ;zn}iihrHaMQFBlt+nCtliH=P|wSi&k*DR_j?8qtX!;be;FS_ZJg3l{T> zcyIp5|(9^nkHabmau86^LlXy;vb)keSJr` zP%IQ1%|^3SE|pvDRvYTTb9GB2#|9|AmueAA2C5^X=@*yg8Cg zlC7y;pUVsA* zkthg=h5{O}#6v=R#GFyA->&}T6nQ|tH-hiYO7*#Y2{k%H`pRRiL>CtZ{`tGS>+v@hZz5bv- z0Dk*U^yBCH>cQXoO!Vvbx*xn45hZkzw28*6v(Y{7_JrsU#0q(@Mz9_rc-tLVjB7-) zVh|*4^cHo|Hz4=N;oc~yQx-ybkqS|Ags3Sfhx1!h{1&YuPosH1v0T5U*B#{wajf6h cDp$WJbapzM&gP5x0tlXHIwP7dfJuw!FY|6eumAu6 literal 0 HcmV?d00001 diff --git a/gfx/blocksets/05.bst b/gfx/blocksets/05.bst new file mode 100644 index 0000000000000000000000000000000000000000..48889bfaf319d141c9559de84f280c43f2f4a4e6 GIT binary patch literal 1856 zcmah~iE`RN3{9N4Ku!dnLQWttcz}eXjaxH7oVyn^SDTie|Nj@2B3^b)J5zZ!+V`HM z-PIarZZ2sqTb7Nc=FQmpj3MqB+jBPHS?@%tbS_^gf={KLs8G!1Q|VN?P%IQvX(Ca9 zWhRWl$W#yhe|bjN`lt)Pw@>uqrCs}PMpV=>k;?~o*<|m~6&W3S!g+v^ zhjY*J2|u%FRxtpfz9B0!Nj?TcBN<{WZqEZR_K>vx7%tBLafgkk;hX;qP zcB>8lNb{eA!)CM97G!3EzD_3J^gYr0MjoPok!P@EgB7pqo}4zDH@Aj2v!sG}ts+q; zr>*wQt?5%76WIgGU_dk)5y2}z80y3K6WIN?=V#gMF{((MjpKMQlrhWuf$LVoY_=K_ z$#7jiFsK^(f%4Fal8n}aDqhX-Gx1ivv&Y@q`q}XlT2JmD>&goM%EP+wvOb^dcsL{) zk2(9PAAXH1WaD_q{SZa(06IMQ8t>P1m2YMo$1<=Ee!u3v?0VJE=*o}AelQxNUwRU$ zrK<6$PxN$xY3EeIzEJ=BkDtF@z5e_gxZdwKKK6RoN9RZ9clUSqs8?^)8>?&j?ChHF z1IPC{zK6JegQ#~+B)=bU;_>~&{~y*Tww{a@MQ_xvt%veHzJ2Eh??2%D*84I&ofDNS SxqPRK??JiZM4hhrLjM78bj;pznPflg*pQjlSzXFI$hx7Q_gkofv;~s_{0Yxd2=f~j7X!ARb#RrDN@~joqu~L zP5zcmIYFib!|vQoOv1K%w~X W*lIsLi*CMtlE?nR;qLsx$>|S4iZO!# literal 0 HcmV?d00001 diff --git a/gfx/blocksets/09.bst b/gfx/blocksets/09.bst new file mode 100644 index 0000000000000000000000000000000000000000..e4c820a45b66c3e461398bd6c97ab12c261e64a6 GIT binary patch literal 2048 zcmb7F2X|CO6n>ZN?%M^Dc*8acWjBo!$ierL>}C@}QAtjYqK1yJhu%?Cuz=D*5$p;U zz)tT?6s0RglwMW*E6zCkoq79!<8k)w-gocZ`R<+X&fH~U5)X?fBV%!5%VttC7H6_- zVn`!1;Gak)6V7k@4osa3HJ;aJ7@@FXl$J5o))5M4uyg5^_hWC*s>8n;8*)$@_2}YL8&`4P;kwx>(%wTXs=#EM8PBrRm3;lHfHKkHsz9$-B~JCX#>Pt8Aqo@Ri^F zaPIa)9Ms#De;^Q0d8m2!emdsH;$6C0w$Ate;UG^iTvbt3(NNh?i8G}0HUG^6eprWd zsjDXA=jAhX>#oi%Q(iuCx9*BJbzJql)bsKU1M?bR@e&aAaqeH#FN=>7ho+ zU%42~sno#1eH$C4AL2nOJlqD!9`*qor2_~2Lc$*ihzmR7Lf3Vcx74ynJ$HfJyj7=C)!;$;RXgIjyu&VJ*zo1(u)qM>jk zT3Tk=vVVJh#G$b1FD;8iYwIG>?EafhGbNM6$s|)cEqRx}Qj^wn8tq;86IJJALU<&E zXGZFNn-J>~Nq1gM$_`xgEge_&IoNd`%8oqUeF*%(-qKQ4(c0Qj2|MN*XU?Ac_2#YHe{A2ebJveQ9XWdbx8E=P`PZGl{{bNJAaDQx literal 0 HcmV?d00001 diff --git a/gfx/blocksets/0b.bst b/gfx/blocksets/0b.bst new file mode 100644 index 0000000000000000000000000000000000000000..c0b64c3ed5df396a523ca58fe15ca22e2525876d GIT binary patch literal 272 zcmZ9H+YW#r3`5DlYxkf6%Kv|^I(DX>LsLT>8DAf8K_q4T}H( literal 0 HcmV?d00001 diff --git a/gfx/blocksets/0d.bst b/gfx/blocksets/0d.bst new file mode 100644 index 0000000000000000000000000000000000000000..e64b113ded3133f77f79b787b5b518cdeffcc0a1 GIT binary patch literal 992 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 literal 0 HcmV?d00001 diff --git a/gfx/blocksets/13.bst b/gfx/blocksets/13.bst new file mode 100644 index 0000000000000000000000000000000000000000..141be9d8347b337d605583e9b2c2de8d70bb8b34 GIT binary patch literal 1152 zcmZ`&i&mRJ5OuV)kjF{K);3Slf)c5H*hIm^K71sgyIAq9N&Wxd=9vmJWFR$F(uD(Lme^=a#^2$GZ^VWXEKI*(&fYT;k zH+%Yn{(yNrVKy!1C}yrV#uFh;OUNh|vfh}^z(=V})NB!@sgT+#RUz9Q{hk4QB3>#B z*=*(UQn^xXw%VQie5u^-G+Um3a_YGE4~{Eje;{O%eEegpWC^lBL636W_LMKO`q%Xng1rWM6eTyNAH zxJ~O!e^2qQ;=AV)^#@u{U|4UUZ|F_Po|;#v<^`Kq0D60-@LIw1)3nHE zn(9tA*Bp26F4KF~ABm3CFZq literal 0 HcmV?d00001 diff --git a/gfx/blocksets/14.bst b/gfx/blocksets/14.bst new file mode 100644 index 0000000000000000000000000000000000000000..9b78ed3f6386f083f809699970498e8b8435a816 GIT binary patch literal 928 zcmZuw2V25G3^i^+!7ZbJMu<#hIGEBh#MzHSQPltcKg>~M8NO@2^xfrM?~-(3VH)@g zARvCgY?&>O*BPO3D2%whgLr%*>k^+YfL^r9vS7V>J3Sdc8IGt=EL&*WU97w+UQjb%oK!TGcJ8vk(T z`#Qh8oSCivxISDP>4*6fOwS;Gj1Ud3o56K3)QI6`L(TI~L>18nq#^{4E^Y(GZGtpv zt^Er=-vkc?$DDO`g1}AyVMgnn|3vPiV>EnzplHlp=X+V4-@m#t9p}gGJExEIK753M HHr+=*0fmwe literal 0 HcmV?d00001 diff --git a/gfx/blocksets/15.bst b/gfx/blocksets/15.bst new file mode 100644 index 0000000000000000000000000000000000000000..692beb3892292e90d149e5589a7bdeb786173a6d GIT binary patch literal 576 zcmZ8dhf>2Z3@!9f!YHrM>tGahCUzSVM#EmEW&ZyMA;)$hypyey?mewar3^4w3|oRj zL6wLa6olX)WCWpv1w4<|)~mF)-`L*S<)h~eIGy$Fj@Mn)>l^Kk#4Dcd z+pU3{Ee5z-V>DZyzw(~%e6J543>l*_IEsy~*Jlid;L(^7#Rvc3>-e<9T1-1b;sAq} zIh0gXO6t0g&d!N0F3HzP)5$bVqgYuY?jIhXu5WJd3cY-jX_iHCmccb3n$64u=efDF zt=;#p2!TOZ!=p?El+e U%RcJQJ~F?O`L&;4PEnfY2cdmBi~s-t literal 0 HcmV?d00001 diff --git a/gfx/blocksets/16.bst b/gfx/blocksets/16.bst new file mode 100644 index 0000000000000000000000000000000000000000..1ed2d4361fdf32c9ec519f05fca7fb142605d488 GIT binary patch literal 2049 zcma)7>vj@B3~p#CLJJ(JfY1x2Dk?LqpcZvOMQpu5TkE!`+x3F){}v{Mud{6ZVa^HJ znaOREFT={pGTluO(SBFB*&`Ar>hW*4tG}{7I3NlF49I%h(gk*AXycVm-idq=kw1iYk)1Ztz>n|9cM?Z; znC>&ZNRYFW4EDRv6C{Ww>bD?Q*NC>xh#+tBTHpr$@~Ko|_waBJ=a90Oybu|&clQ^W-SVc7B9sj)YP3r8Kkhq1m7d)Ei` zz-!N)8vEoa(d#$Lf@0V~s@3CXM6ccxy?vL|K%Jx}QU};c9s{03***HuM5bQp)C>qvKiGweHmjM6!7 zZ|{iiKkmzQ_J@cAE7n{@)}4C^GWO!q*nSIgc_lXJ#bio!a!T~@QJl5^`GT>+yL(bc znaRm?GF{B2=T4UgF&mKi`D7M>m{UiZ66TrsKgU zqAy<&TQG)y3dI}Z;hm4qkIc~3RTy4hyLtcdGYmhzbZbS8_)4XWEtTYb$QPmr@AJxE DW)0sA literal 0 HcmV?d00001 diff --git a/gfx/blocksets/17.bst b/gfx/blocksets/17.bst new file mode 100644 index 0000000000000000000000000000000000000000..26435dc8bfaf7239f18b4e02fc81b63d543b9490 GIT binary patch literal 1200 zcmZ`(i*nj95RBt#?K~t$2{z{KcohPYLO3!y{@Wcp3Rv@eK7LC zcn`Rl%^bI|SjMr&x9@R0nHocsq@KDx^2|idd?N_iVTCc1XE literal 0 HcmV?d00001