From 644ab0911dc8e0f859e37d64c261248b19fe3276 Mon Sep 17 00:00:00 2001 From: Axel Meyer Date: Sun, 31 May 2026 14:08:27 +0200 Subject: [PATCH] Commit baked atlases for all 8 blob-styles; remove atlases/ from .gitignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Aligns with the other lib-asset prototype packages (fa-starter, subterrain) where baked atlases ship with the lib instead of being regenerated per-consumer. Removes a runtime atlas-baker dependency for downstream consumers (vagrant-skeleton, map-editor) — they can load the JSON+PNG pair directly after a plain install-reference stage without invoking Python+Node toolchains. Variants committed: blob_concave, blob_diagonal_cut, blob_organic, blob_rectilinear, blob_rect_grass, blob_rect_stone, blob_rect_wood, blob_testbench. Re-bake via scripts/bake.sh when sources change. --- .gitignore | 1 - assets/atlases/blob_concave/tiles.atlas.json | 152 ++++++ .../blob_concave/tiles.atlas.lock.json | 21 + .../atlases/blob_concave/tiles.collision.json | 270 +++++++++++ .../blob_concave/tiles.diffuse.atlas.png | Bin 0 -> 1125 bytes .../blob_concave/tiles.height.atlas.png | Bin 0 -> 802 bytes .../blob_diagonal_cut/tiles.atlas.json | 152 ++++++ .../blob_diagonal_cut/tiles.atlas.lock.json | 21 + .../blob_diagonal_cut/tiles.collision.json | 270 +++++++++++ .../blob_diagonal_cut/tiles.diffuse.atlas.png | Bin 0 -> 1129 bytes .../blob_diagonal_cut/tiles.height.atlas.png | Bin 0 -> 802 bytes assets/atlases/blob_organic/tiles.atlas.json | 152 ++++++ .../blob_organic/tiles.atlas.lock.json | 21 + .../atlases/blob_organic/tiles.collision.json | 270 +++++++++++ .../blob_organic/tiles.diffuse.atlas.png | Bin 0 -> 1122 bytes .../blob_organic/tiles.height.atlas.png | Bin 0 -> 802 bytes .../atlases/blob_rect_grass/tiles.atlas.json | 152 ++++++ .../blob_rect_grass/tiles.atlas.lock.json | 21 + .../blob_rect_grass/tiles.collision.json | 270 +++++++++++ .../blob_rect_grass/tiles.diffuse.atlas.png | Bin 0 -> 952 bytes .../blob_rect_grass/tiles.height.atlas.png | Bin 0 -> 802 bytes .../atlases/blob_rect_stone/tiles.atlas.json | 152 ++++++ .../blob_rect_stone/tiles.atlas.lock.json | 21 + .../blob_rect_stone/tiles.collision.json | 270 +++++++++++ .../blob_rect_stone/tiles.diffuse.atlas.png | Bin 0 -> 951 bytes .../blob_rect_stone/tiles.height.atlas.png | Bin 0 -> 802 bytes .../atlases/blob_rect_wood/tiles.atlas.json | 152 ++++++ .../blob_rect_wood/tiles.atlas.lock.json | 21 + .../blob_rect_wood/tiles.collision.json | 270 +++++++++++ .../blob_rect_wood/tiles.diffuse.atlas.png | Bin 0 -> 951 bytes .../blob_rect_wood/tiles.height.atlas.png | Bin 0 -> 802 bytes .../atlases/blob_rectilinear/tiles.atlas.json | 152 ++++++ .../blob_rectilinear/tiles.atlas.lock.json | 21 + .../blob_rectilinear/tiles.collision.json | 270 +++++++++++ .../blob_rectilinear/tiles.diffuse.atlas.png | Bin 0 -> 951 bytes .../blob_rectilinear/tiles.height.atlas.png | Bin 0 -> 802 bytes .../atlases/blob_testbench/tiles.atlas.json | 434 ++++++++++++++++++ .../blob_testbench/tiles.atlas.lock.json | 49 ++ .../blob_testbench/tiles.diffuse.atlas.png | Bin 0 -> 2974 bytes .../blob_testbench/tiles.height.atlas.png | Bin 0 -> 2322 bytes 40 files changed, 3584 insertions(+), 1 deletion(-) create mode 100644 assets/atlases/blob_concave/tiles.atlas.json create mode 100644 assets/atlases/blob_concave/tiles.atlas.lock.json create mode 100644 assets/atlases/blob_concave/tiles.collision.json create mode 100644 assets/atlases/blob_concave/tiles.diffuse.atlas.png create mode 100644 assets/atlases/blob_concave/tiles.height.atlas.png create mode 100644 assets/atlases/blob_diagonal_cut/tiles.atlas.json create mode 100644 assets/atlases/blob_diagonal_cut/tiles.atlas.lock.json create mode 100644 assets/atlases/blob_diagonal_cut/tiles.collision.json create mode 100644 assets/atlases/blob_diagonal_cut/tiles.diffuse.atlas.png create mode 100644 assets/atlases/blob_diagonal_cut/tiles.height.atlas.png create mode 100644 assets/atlases/blob_organic/tiles.atlas.json create mode 100644 assets/atlases/blob_organic/tiles.atlas.lock.json create mode 100644 assets/atlases/blob_organic/tiles.collision.json create mode 100644 assets/atlases/blob_organic/tiles.diffuse.atlas.png create mode 100644 assets/atlases/blob_organic/tiles.height.atlas.png create mode 100644 assets/atlases/blob_rect_grass/tiles.atlas.json create mode 100644 assets/atlases/blob_rect_grass/tiles.atlas.lock.json create mode 100644 assets/atlases/blob_rect_grass/tiles.collision.json create mode 100644 assets/atlases/blob_rect_grass/tiles.diffuse.atlas.png create mode 100644 assets/atlases/blob_rect_grass/tiles.height.atlas.png create mode 100644 assets/atlases/blob_rect_stone/tiles.atlas.json create mode 100644 assets/atlases/blob_rect_stone/tiles.atlas.lock.json create mode 100644 assets/atlases/blob_rect_stone/tiles.collision.json create mode 100644 assets/atlases/blob_rect_stone/tiles.diffuse.atlas.png create mode 100644 assets/atlases/blob_rect_stone/tiles.height.atlas.png create mode 100644 assets/atlases/blob_rect_wood/tiles.atlas.json create mode 100644 assets/atlases/blob_rect_wood/tiles.atlas.lock.json create mode 100644 assets/atlases/blob_rect_wood/tiles.collision.json create mode 100644 assets/atlases/blob_rect_wood/tiles.diffuse.atlas.png create mode 100644 assets/atlases/blob_rect_wood/tiles.height.atlas.png create mode 100644 assets/atlases/blob_rectilinear/tiles.atlas.json create mode 100644 assets/atlases/blob_rectilinear/tiles.atlas.lock.json create mode 100644 assets/atlases/blob_rectilinear/tiles.collision.json create mode 100644 assets/atlases/blob_rectilinear/tiles.diffuse.atlas.png create mode 100644 assets/atlases/blob_rectilinear/tiles.height.atlas.png create mode 100644 assets/atlases/blob_testbench/tiles.atlas.json create mode 100644 assets/atlases/blob_testbench/tiles.atlas.lock.json create mode 100644 assets/atlases/blob_testbench/tiles.diffuse.atlas.png create mode 100644 assets/atlases/blob_testbench/tiles.height.atlas.png diff --git a/.gitignore b/.gitignore index 62612a3..7a60b85 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ __pycache__/ *.pyc -assets/atlases/ diff --git a/assets/atlases/blob_concave/tiles.atlas.json b/assets/atlases/blob_concave/tiles.atlas.json new file mode 100644 index 0000000..45262b2 --- /dev/null +++ b/assets/atlases/blob_concave/tiles.atlas.json @@ -0,0 +1,152 @@ +{ + "atlas_id": "blob_concave", + "atlas_version": 2, + "atlas_size_px": [ + 1024, + 128 + ], + "tile_size_px": 64, + "tiles": [ + { + "id": 1, + "name": "slot_00_isolated", + "uv": [ + 2, + 2, + 64, + 64 + ] + }, + { + "id": 2, + "name": "slot_01_end", + "uv": [ + 70, + 2, + 64, + 64 + ] + }, + { + "id": 3, + "name": "slot_02_corner_open", + "uv": [ + 138, + 2, + 64, + 64 + ] + }, + { + "id": 4, + "name": "slot_03_corner_full", + "uv": [ + 206, + 2, + 64, + 64 + ] + }, + { + "id": 5, + "name": "slot_04_straight", + "uv": [ + 274, + 2, + 64, + 64 + ] + }, + { + "id": 6, + "name": "slot_05_tee_open", + "uv": [ + 342, + 2, + 64, + 64 + ] + }, + { + "id": 7, + "name": "slot_06_tee_half", + "uv": [ + 410, + 2, + 64, + 64 + ] + }, + { + "id": 8, + "name": "slot_07_tee_full", + "uv": [ + 478, + 2, + 64, + 64 + ] + }, + { + "id": 9, + "name": "slot_08_cross_open", + "uv": [ + 546, + 2, + 64, + 64 + ] + }, + { + "id": 10, + "name": "slot_09_cross_q1", + "uv": [ + 614, + 2, + 64, + 64 + ] + }, + { + "id": 11, + "name": "slot_10_cross_q2adj", + "uv": [ + 682, + 2, + 64, + 64 + ] + }, + { + "id": 12, + "name": "slot_11_cross_q2opp", + "uv": [ + 750, + 2, + 64, + 64 + ] + }, + { + "id": 13, + "name": "slot_12_cross_q3", + "uv": [ + 818, + 2, + 64, + 64 + ] + }, + { + "id": 14, + "name": "slot_13_solid", + "uv": [ + 886, + 2, + 64, + 64 + ], + "opaque": true + } + ] +} diff --git a/assets/atlases/blob_concave/tiles.atlas.lock.json b/assets/atlases/blob_concave/tiles.atlas.lock.json new file mode 100644 index 0000000..2d73cdb --- /dev/null +++ b/assets/atlases/blob_concave/tiles.atlas.lock.json @@ -0,0 +1,21 @@ +{ + "atlas_id": "blob_concave", + "bindings": { + "slot_00_isolated": 1, + "slot_01_end": 2, + "slot_02_corner_open": 3, + "slot_03_corner_full": 4, + "slot_04_straight": 5, + "slot_05_tee_open": 6, + "slot_06_tee_half": 7, + "slot_07_tee_full": 8, + "slot_08_cross_open": 9, + "slot_09_cross_q1": 10, + "slot_10_cross_q2adj": 11, + "slot_11_cross_q2opp": 12, + "slot_12_cross_q3": 13, + "slot_13_solid": 14 + }, + "deleted": [], + "next_id": 15 +} diff --git a/assets/atlases/blob_concave/tiles.collision.json b/assets/atlases/blob_concave/tiles.collision.json new file mode 100644 index 0000000..f9ea97a --- /dev/null +++ b/assets/atlases/blob_concave/tiles.collision.json @@ -0,0 +1,270 @@ +{ + "schema": "blob-14", + "tile_size_px": 64, + "sub_cell_px": 16, + "shape_kind": "rect_list", + "_note": "Collision matches the rectilinear visual exactly. For diagonal_cut/organic/concave styles, the visible boundary deviates by up to 5 px at convex external corners — acceptable for typical gameplay collision. Modders needing pixel-perfect physics ship per-style polygon overrides.", + "slots": [ + { + "slot": 0, + "name": "isolated", + "bitmask": "0b00000000", + "rects": [ + [ + 16, + 16, + 32, + 32 + ] + ] + }, + { + "slot": 1, + "name": "end", + "bitmask": "0b00000001", + "rects": [ + [ + 16, + 0, + 32, + 48 + ] + ] + }, + { + "slot": 2, + "name": "corner_open", + "bitmask": "0b00000101", + "rects": [ + [ + 16, + 0, + 32, + 16 + ], + [ + 16, + 16, + 48, + 32 + ] + ] + }, + { + "slot": 3, + "name": "corner_full", + "bitmask": "0b00000111", + "rects": [ + [ + 16, + 0, + 48, + 48 + ] + ] + }, + { + "slot": 4, + "name": "straight", + "bitmask": "0b00010001", + "rects": [ + [ + 16, + 0, + 32, + 64 + ] + ] + }, + { + "slot": 5, + "name": "tee_open", + "bitmask": "0b00010101", + "rects": [ + [ + 16, + 0, + 32, + 16 + ], + [ + 16, + 16, + 48, + 32 + ], + [ + 16, + 48, + 32, + 16 + ] + ] + }, + { + "slot": 6, + "name": "tee_half", + "bitmask": "0b00010111", + "rects": [ + [ + 16, + 0, + 48, + 48 + ], + [ + 16, + 48, + 32, + 16 + ] + ] + }, + { + "slot": 7, + "name": "tee_full", + "bitmask": "0b00011111", + "rects": [ + [ + 16, + 0, + 48, + 64 + ] + ] + }, + { + "slot": 8, + "name": "cross_open", + "bitmask": "0b01010101", + "rects": [ + [ + 16, + 0, + 32, + 16 + ], + [ + 0, + 16, + 64, + 32 + ], + [ + 16, + 48, + 32, + 16 + ] + ] + }, + { + "slot": 9, + "name": "cross_q1", + "bitmask": "0b01010111", + "rects": [ + [ + 16, + 0, + 48, + 16 + ], + [ + 0, + 16, + 64, + 32 + ], + [ + 16, + 48, + 32, + 16 + ] + ] + }, + { + "slot": 10, + "name": "cross_q2adj", + "bitmask": "0b01011111", + "rects": [ + [ + 16, + 0, + 48, + 16 + ], + [ + 0, + 16, + 64, + 32 + ], + [ + 16, + 48, + 48, + 16 + ] + ] + }, + { + "slot": 11, + "name": "cross_q2opp", + "bitmask": "0b01110111", + "rects": [ + [ + 16, + 0, + 48, + 16 + ], + [ + 0, + 16, + 64, + 32 + ], + [ + 0, + 48, + 48, + 16 + ] + ] + }, + { + "slot": 12, + "name": "cross_q3", + "bitmask": "0b01111111", + "rects": [ + [ + 16, + 0, + 48, + 16 + ], + [ + 0, + 16, + 64, + 48 + ] + ] + }, + { + "slot": 13, + "name": "solid", + "bitmask": "0b11111111", + "rects": [ + [ + 0, + 0, + 64, + 64 + ] + ] + } + ], + "style": "concave" +} diff --git a/assets/atlases/blob_concave/tiles.diffuse.atlas.png b/assets/atlases/blob_concave/tiles.diffuse.atlas.png new file mode 100644 index 0000000000000000000000000000000000000000..d38dd294c2bb5c03d3792cafa43c72f6eb4d47ac GIT binary patch literal 1125 zcmeAS@N?(olHy`uVBq!ia0y~yU;#228aUX1r59WG(ryGP#UUU|PN&3JQ*`xZODdl~B^KRHIptLJaIuJco2ZU1EM zH>Tck3%(Y9a;rW&iT~0si^|1&(@wHy*3OAZ0IFrerex=VxXn*kfu@Mx$ey;x;q~Ju zOhC=z8MSi?=I%}7tPf!ZIxuEE$eBChc!6ZWUMV2?pvn|T9{8FCBpY5|1(FQcS2F_1 zb>ZY`cpolz4d~#FKs*1)1D&J4;kr)a>8*BtaX_at)nE8!u@mUHmg(8Gb3QEnT6k#s zwd0&0`mZ2c{CUB(<0qMcdVzum?uUJz0OU5qxIv#AfLwE+zd&04UtYh*1L#*?pmhDs z>}g=JP#SuVKmh(d)eVfhI-uujCWE5vR`#?%z~K0)28u{f^sWWQs{VEegNcFR!-iSx zKn?p20wa$d7;!btKwbR6AbWT^ZZj}tJxDa=2YSl}lth|=3gtj%IDVU@S_AQ{&5CD^ zK%+rs)GYvNWd=&wUx?e>qF;Sh2pFU7kbwO?wf(KB_m52wbHS1on}IPD4^+PA4m9Dw zlb<=z)iuCC=af%|q&DFP@+&Dx69fVcDb<1EZ{&aJO5 literal 0 HcmV?d00001 diff --git a/assets/atlases/blob_concave/tiles.height.atlas.png b/assets/atlases/blob_concave/tiles.height.atlas.png new file mode 100644 index 0000000000000000000000000000000000000000..eabcdc04c51b23c5d9aea6aa21d538ae164828eb GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yU;#228aUX1r5ny_29e;!%8E=$SSyQ2Hr@ssRtO}+Pdyng(o`P(ej_$6NpiyHT) zon(%ZSC`*%UFWCL+WyJ>x3Z_zOa!WB1uEgssGSp&us-rr1F~kO>a&yBx7hjVZMd#e z=>RkhCa~jN+~yYhRg6H_tqW%ck}>N+F5MBw3nUBnN&(3SRi;4lz}GAw+3@-*kYu>N znmi5P!|$#6TKH+h-ZaiX+(4JJzcKZGPy}P}13e`UbpD4O*N$`Quk9C(0}33d5Blr| zRACO309pM%;_PgoNA9ioTF3JsoHVeKM7BvF( zFau442^=c@HcPc;CCGU@;&_2%!ComK`Jl=aNFMl_1tc3@Uj>p3*H<$F$#vn(Kr&`M zc^dAmuW7z^{3QR)>}dz;GivA9B&?5Qnw|}1!~;cQfQ~%$80f&7tlBvrR(>sH`ZIA> z`&K)@x`5Y@L1FnL+>{?EwFl@;FgNI|GbnJb{IUQ!uWmK6!)AE{g9<3xaDNr$ZYMW% zW_bf6;s?Zi4g4s*$7gQK9B2O9ig2Q*E6)%KDgICl?H0scM<3aeV}W9 zx&fWN|3uv87XRwALck!-52GYu5EHn-h#W!SNB19Qz4~oje_wXo1bN%j)z4*}Q$iB} DMomu! literal 0 HcmV?d00001 diff --git a/assets/atlases/blob_organic/tiles.height.atlas.png b/assets/atlases/blob_organic/tiles.height.atlas.png new file mode 100644 index 0000000000000000000000000000000000000000..eabcdc04c51b23c5d9aea6aa21d538ae164828eb GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yU;#228aUX1y1CTuB*1o zOaL;PkVSqj*n94T_|A7fmox$y+*sAXbxGZL-LvNb&}6o6R?7N2-u-MT12X=sVgkBw zOE@EtytNugFuV-~5)I$9fTTmUD3DyR7v!xAajZZxV?8;_zpLv59r>ggXy1o!pa{M;{!{|_-V_=yEI+iV m6YTh$35?4T1RDNN{Lk>DA!%~-r=*i0e|x(6xvXc2 literal 0 HcmV?d00001 diff --git a/assets/atlases/blob_rect_grass/tiles.height.atlas.png b/assets/atlases/blob_rect_grass/tiles.height.atlas.png new file mode 100644 index 0000000000000000000000000000000000000000..eabcdc04c51b23c5d9aea6aa21d538ae164828eb GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0y~yU;#228aUX1 zMRo6<1Y{Ar7jH~Ixjrkk&wK!6G+|W(*Tn`jP#-K1Aa}kE z1v&Pc7LatP76p~&kP6X@Kyf^Sld@n>GwT{^Jmo%)`X=$q8T z<2SQgWdH#fWY?neCaKvVO$(uPtRj#-CM8KnHFK zX9SYBRs#u!x1m6y;hPqabf^{uk_+~Ne03p?6-Z{RCr9~rb$y^CpELvQ`_K*aK%BvM z$;M|u=T;uPlg?7N@!e}r=GXh?eb@z*`vK%}+5_bn|9O#bBW?YI-*o%RlXucv zMRo6<1Y{Ar7jH~Ixjrkk&wK!6G+|W(*Tn`jP#-K1Aa}kE z1v&Pc7LatP76p~&kP6X@Kyf^Sld@n>GwT{^Jmo%)`X=$q8T z<2SQgQ2KeqGtKKp~~`-!Bv~0@cerKsExQ{$bIxOx=eC+kaoUbaCHWRrR9XK%H-I19bw0 ziWq-y1L`c3kFvV89q69C??Cs|Mg!dg6w*t$4|LC+cRba+H&d=s-|Gh^}SGM>5(kCu<>)pNGAD3%dPCWnmVi6;Vb>R6|plN^f zRMkIK+D2JP?e{*}SrgYkjavf9Vgzb9&DsOh$}s=>;-!l}?w&H|1W?1y1|Uo3!RM+i zF$aFcdhvY#YSl{s8p8eqXjjZRpcpuU{(JI*Xe4kUc2oor99Tl*Zhg@NVCs6AG4Gnt zkHf&ECj(54LOXT<#VilltX2Kc4o-VO;$ZwI8JYOH?)jK&g^y6HgcfKh7+iqHp- zKoQS)?0pbZJt#)SK@n_m2PpmUIZ*Y7&pDe5c8QHnn1$4Q6;0{0!L>oH{f|EYR@7swV*S3j3^P6