82 lines
2.1 KiB
Python
82 lines
2.1 KiB
Python
from PIL import Image
|
|
import numpy as np
|
|
|
|
# 0: Floor (Lightest)
|
|
# 1: Light Green
|
|
# 2: Dark Green
|
|
# 3: Black
|
|
colors = {
|
|
0: (224, 248, 208), # GB Lightest
|
|
1: (136, 192, 112), # GB Light
|
|
2: (52, 104, 86), # GB Dark
|
|
3: (8, 24, 32) # GB Darkest
|
|
}
|
|
|
|
floor_tile = [
|
|
"00000000",
|
|
"00010000",
|
|
"00100000",
|
|
"00000000",
|
|
"00000000",
|
|
"00000010",
|
|
"00001000",
|
|
"00000000",
|
|
]
|
|
|
|
def make_autotile(n, e, s, w):
|
|
t = [list("00000000") for _ in range(8)]
|
|
top = 0 if n else 2
|
|
bottom = 8 if s else 6
|
|
left = 0 if w else 2
|
|
right = 8 if e else 6
|
|
for r in range(top, bottom):
|
|
for c in range(left, right):
|
|
t[r][c] = "2"
|
|
if not n:
|
|
for c in range(left, right):
|
|
t[1][c] = "1"
|
|
t[2][c] = "1"
|
|
if not s:
|
|
for c in range(left, right):
|
|
t[6][c] = "3"
|
|
t[7][c] = "3"
|
|
if not n and not w:
|
|
t[1][2] = "0"; t[1][3] = "1"; t[2][2] = "1"
|
|
if not n and not e:
|
|
t[1][7] = "0"; t[1][6] = "1"; t[1][5] = "1"; t[2][7] = "0"; t[2][6] = "1"
|
|
if not s and not w:
|
|
t[7][2] = "0"; t[7][3] = "3"; t[6][2] = "3"
|
|
if not s and not e:
|
|
t[7][7] = "0"; t[7][6] = "3"; t[6][7] = "0"; t[6][6] = "3"
|
|
if n and s and e and w:
|
|
t[3][3] = "1"; t[4][5] = "3"
|
|
return ["".join(row) for row in t]
|
|
|
|
tiles = [floor_tile]
|
|
for mask in range(16):
|
|
n = (mask & 8) != 0
|
|
e = (mask & 4) != 0
|
|
s = (mask & 2) != 0
|
|
w = (mask & 1) != 0
|
|
tiles.append(make_autotile(n, e, s, w))
|
|
|
|
# Render to a 17x1 grid (or 4x5)
|
|
cols = 4
|
|
rows = 5
|
|
img = Image.new('RGB', (cols * 10, rows * 10), (255, 255, 255))
|
|
|
|
for idx, t in enumerate(tiles):
|
|
c = idx % cols
|
|
r = idx // cols
|
|
x_offset = c * 10 + 1
|
|
y_offset = r * 10 + 1
|
|
for ty in range(8):
|
|
for tx in range(8):
|
|
color = colors[int(t[ty][tx])]
|
|
img.putpixel((x_offset + tx, y_offset + ty), color)
|
|
|
|
# Scale up by 4x for visibility
|
|
img = img.resize((cols * 10 * 4, rows * 10 * 4), Image.Resampling.NEAREST)
|
|
img.save('/home/enne2/.gemini/antigravity/brain/69a2b2a9-088f-47ee-9f3c-9ba7ac332992/tileset_preview.png')
|
|
print("Generated tileset_preview.png")
|