Files

308 lines
8.6 KiB
Lua

-- Aseprite Lua: generate 16x16 tileset (≥64 tiles) candy palette village + white layer
-- Run: aseprite -b -script scripts/generate_tileset.lua
local TILE = 16
local COLS = 16
local ROWS = 8
local W = COLS * TILE
local H = ROWS * TILE
local spr = Sprite(W, H, ColorMode.RGB)
app.activeSprite = spr
local img = spr.cels[1].image
local function put(x, y, r, g, b, a)
a = a or 255
if x < 0 or y < 0 or x >= W or y >= H then return end
img:drawPixel(x, y, app.pixelColor.rgba(r, g, b, a))
end
local function fillTile(tx, ty, r, g, b)
for y = 0, TILE - 1 do
for x = 0, TILE - 1 do
put(tx * TILE + x, ty * TILE + y, r, g, b)
end
end
end
local function rectTile(tx, ty, x0, y0, x1, y1, r, g, b)
for y = y0, y1 do
for x = x0, x1 do
put(tx * TILE + x, ty * TILE + y, r, g, b)
end
end
end
local function px(tx, ty, x, y, r, g, b)
put(tx * TILE + x, ty * TILE + y, r, g, b)
end
-- Clear transparent
for y = 0, H - 1 do
for x = 0, W - 1 do
put(x, y, 0, 0, 0, 0)
end
end
-- 0 empty (transparent)
-- 1 grass
fillTile(1, 0, 120, 190, 90)
for i = 0, 20 do
px(1, 0, (i * 7) % 16, (i * 3) % 16, 100, 170, 70)
end
-- 2 grass light
fillTile(2, 0, 140, 205, 100)
-- 3 path stone
fillTile(3, 0, 190, 175, 150)
rectTile(3, 0, 0, 0, 15, 0, 170, 155, 130)
rectTile(3, 0, 0, 8, 15, 8, 170, 155, 130)
-- 4 dirt
fillTile(4, 0, 170, 130, 80)
-- 5 water
fillTile(5, 0, 100, 180, 220)
rectTile(5, 0, 0, 4, 15, 5, 130, 200, 235)
rectTile(5, 0, 2, 10, 12, 11, 80, 160, 200)
-- 6 water deep
fillTile(6, 0, 70, 150, 200)
-- 7 flowers pink
fillTile(7, 0, 120, 190, 90)
px(7, 0, 4, 6, 255, 140, 180)
px(7, 0, 5, 6, 255, 140, 180)
px(7, 0, 4, 7, 255, 140, 180)
px(7, 0, 10, 10, 255, 180, 100)
px(7, 0, 11, 10, 255, 180, 100)
-- 8 berry bush
fillTile(8, 0, 90, 150, 60)
rectTile(8, 0, 3, 4, 12, 13, 70, 130, 50)
px(8, 0, 5, 7, 200, 40, 80)
px(8, 0, 9, 9, 200, 40, 80)
px(8, 0, 7, 11, 180, 30, 70)
-- 9 tree trunk
fillTile(9, 0, 120, 190, 90)
rectTile(9, 0, 6, 6, 9, 15, 120, 80, 40)
-- 10 tree leaves
fillTile(10, 0, 70, 150, 50)
rectTile(10, 0, 2, 2, 13, 12, 60, 140, 40)
-- 11 wall wood
fillTile(11, 0, 200, 150, 90)
rectTile(11, 0, 0, 0, 15, 1, 180, 130, 70)
-- 12 wall cream
fillTile(12, 0, 245, 230, 190)
-- 13 roof orange
fillTile(13, 0, 230, 120, 50)
rectTile(13, 0, 0, 7, 15, 8, 200, 90, 30)
-- 14 door
fillTile(14, 0, 200, 150, 90)
rectTile(14, 0, 4, 4, 11, 15, 140, 80, 40)
px(14, 0, 10, 10, 230, 200, 80)
-- 15 window
fillTile(15, 0, 245, 230, 190)
rectTile(15, 0, 3, 3, 12, 12, 150, 210, 240)
rectTile(15, 0, 7, 3, 8, 12, 200, 180, 140)
rectTile(15, 0, 3, 7, 12, 8, 200, 180, 140)
-- row 1
-- 16 floor wood
fillTile(0, 1, 210, 170, 110)
rectTile(0, 1, 0, 4, 15, 4, 190, 150, 90)
rectTile(0, 1, 0, 12, 15, 12, 190, 150, 90)
-- 17 floor tile
fillTile(1, 1, 230, 220, 200)
rectTile(1, 1, 0, 0, 15, 0, 200, 190, 170)
rectTile(1, 1, 0, 0, 0, 15, 200, 190, 170)
-- 18 bed
fillTile(2, 1, 210, 170, 110)
rectTile(2, 1, 1, 4, 14, 13, 180, 100, 140)
rectTile(2, 1, 1, 2, 14, 5, 250, 240, 220)
-- 19 counter
fillTile(3, 1, 210, 170, 110)
rectTile(3, 1, 0, 6, 15, 15, 160, 100, 50)
rectTile(3, 1, 0, 6, 15, 7, 180, 120, 70)
-- 20 oven
fillTile(4, 1, 150, 140, 130)
rectTile(4, 1, 3, 4, 12, 14, 80, 80, 90)
rectTile(4, 1, 5, 7, 10, 11, 255, 120, 40)
-- 21 shelf
fillTile(5, 1, 210, 170, 110)
rectTile(5, 1, 1, 1, 14, 14, 140, 90, 50)
rectTile(5, 1, 2, 3, 6, 6, 220, 80, 80)
rectTile(5, 1, 9, 3, 13, 6, 220, 80, 80)
rectTile(5, 1, 2, 9, 6, 12, 220, 80, 80)
rectTile(5, 1, 9, 9, 13, 12, 220, 80, 80)
-- 22 table
fillTile(6, 1, 210, 170, 110)
rectTile(6, 1, 2, 5, 13, 10, 160, 110, 60)
rectTile(6, 1, 3, 10, 5, 14, 140, 90, 40)
rectTile(6, 1, 10, 10, 12, 14, 140, 90, 40)
-- 23 chair
fillTile(7, 1, 210, 170, 110)
rectTile(7, 1, 4, 6, 11, 11, 160, 100, 50)
rectTile(7, 1, 4, 3, 11, 6, 140, 80, 40)
-- 24 well
fillTile(8, 1, 120, 190, 90)
rectTile(8, 1, 2, 6, 13, 14, 140, 140, 150)
rectTile(8, 1, 4, 8, 11, 12, 60, 100, 140)
rectTile(8, 1, 5, 2, 6, 6, 120, 80, 40)
rectTile(8, 1, 9, 2, 10, 6, 120, 80, 40)
rectTile(8, 1, 5, 2, 10, 3, 120, 80, 40)
-- 25 fog
fillTile(9, 1, 200, 210, 220)
for i = 0, 30 do
px(9, 1, (i * 5) % 16, (i * 7) % 16, 220, 230, 240)
end
-- 26 white wall
fillTile(10, 1, 230, 230, 235)
rectTile(10, 1, 0, 0, 0, 15, 200, 200, 210)
-- 27 white floor
fillTile(11, 1, 245, 245, 248)
-- 28 calendar
fillTile(12, 1, 210, 170, 110)
rectTile(12, 1, 3, 2, 12, 14, 250, 250, 245)
rectTile(12, 1, 3, 2, 12, 4, 220, 80, 80)
px(12, 1, 6, 8, 40, 40, 40)
px(12, 1, 8, 8, 40, 40, 40)
px(12, 1, 10, 8, 40, 40, 40)
-- 29 board
fillTile(13, 1, 120, 190, 90)
rectTile(13, 1, 1, 2, 14, 14, 160, 110, 60)
rectTile(13, 1, 3, 4, 12, 6, 250, 240, 200)
rectTile(13, 1, 3, 8, 12, 10, 250, 240, 200)
-- 30 mailbox
fillTile(14, 1, 120, 190, 90)
rectTile(14, 1, 5, 4, 10, 12, 200, 60, 50)
rectTile(14, 1, 7, 12, 8, 15, 100, 70, 40)
-- 31 picnic cloth
fillTile(15, 1, 120, 190, 90)
rectTile(15, 1, 1, 4, 14, 12, 250, 100, 120)
for i = 0, 6 do
px(15, 1, 2 + i * 2, 5, 250, 250, 250)
px(15, 1, 2 + i * 2, 11, 250, 250, 250)
end
-- row 2 furniture / props continue
-- 32 flower pot
fillTile(0, 2, 120, 190, 90)
rectTile(0, 2, 5, 8, 10, 14, 180, 100, 60)
px(0, 2, 7, 5, 255, 100, 150)
px(0, 2, 8, 4, 255, 100, 150)
px(0, 2, 6, 6, 100, 180, 60)
-- 33 ribbon post
fillTile(1, 2, 120, 190, 90)
rectTile(1, 2, 7, 2, 8, 14, 160, 110, 60)
rectTile(1, 2, 3, 3, 12, 5, 255, 80, 120)
-- 34 house corner
fillTile(2, 2, 245, 230, 190)
rectTile(2, 2, 0, 0, 3, 15, 200, 150, 90)
-- 35 fence
fillTile(3, 2, 120, 190, 90)
rectTile(3, 2, 0, 6, 15, 8, 160, 120, 70)
rectTile(3, 2, 2, 4, 3, 12, 160, 120, 70)
rectTile(3, 2, 12, 4, 13, 12, 160, 120, 70)
-- 36 bridge
fillTile(4, 2, 100, 180, 220)
rectTile(4, 2, 0, 5, 15, 10, 160, 110, 60)
-- 37 shadow
fillTile(5, 2, 0, 0, 0)
for y = 0, 15 do
for x = 0, 15 do
put(5 * TILE + x, 2 * TILE + y, 0, 0, 0, 40)
end
end
-- 38 sand
fillTile(6, 2, 230, 210, 150)
-- 39 dark grass
fillTile(7, 2, 90, 150, 60)
-- 40 bush
fillTile(8, 2, 120, 190, 90)
rectTile(8, 2, 2, 6, 13, 14, 50, 120, 40)
-- 41 rock
fillTile(9, 2, 120, 190, 90)
rectTile(9, 2, 3, 6, 12, 13, 150, 150, 155)
-- 42 paper
fillTile(10, 2, 210, 170, 110)
rectTile(10, 2, 3, 2, 12, 14, 250, 245, 230)
-- 43 medical form
fillTile(11, 2, 245, 245, 248)
rectTile(11, 2, 2, 2, 13, 14, 255, 255, 255)
rectTile(11, 2, 3, 3, 10, 4, 180, 180, 190)
-- 44 bed side
fillTile(12, 2, 210, 170, 110)
rectTile(12, 2, 2, 8, 13, 14, 100, 70, 50)
-- 45 rug
fillTile(13, 2, 210, 170, 110)
rectTile(13, 2, 1, 3, 14, 12, 220, 90, 90)
-- 46 crate
fillTile(14, 2, 210, 170, 110)
rectTile(14, 2, 2, 4, 13, 14, 170, 120, 60)
-- 47 lamp
fillTile(15, 2, 210, 170, 110)
rectTile(15, 2, 7, 6, 8, 14, 120, 100, 80)
rectTile(15, 2, 4, 2, 11, 7, 255, 230, 120)
-- row 3 more tiles to exceed 64
for i = 0, 15 do
local r = 100 + (i * 9) % 100
local g = 150 + (i * 5) % 80
local b = 80 + (i * 7) % 100
fillTile(i, 3, r, g, b)
end
-- specialize some
fillTile(0, 3, 255, 200, 80) -- honey accent
fillTile(1, 3, 180, 220, 255) -- sky blue tile
fillTile(2, 3, 255, 180, 200) -- candy pink
fillTile(3, 3, 255, 240, 180) -- cream
fillTile(4, 3, 100, 100, 110) -- dark indoor
fillTile(5, 3, 220, 220, 230) -- light grey white layer
fillTile(6, 3, 190, 190, 200)
fillTile(7, 3, 160, 160, 170)
-- 8,3 door mat
fillTile(8, 3, 210, 170, 110)
rectTile(8, 3, 2, 6, 13, 12, 140, 60, 50)
-- 9,3 stairs
fillTile(9, 3, 190, 175, 150)
rectTile(9, 3, 0, 10, 15, 15, 160, 145, 120)
rectTile(9, 3, 0, 5, 15, 9, 170, 155, 130)
-- 10,3 wall top
fillTile(10, 3, 230, 120, 50)
-- 11,3 indoor wall
fillTile(11, 3, 240, 220, 180)
rectTile(11, 3, 0, 14, 15, 15, 200, 180, 140)
-- 12,3 flower bed
fillTile(12, 3, 120, 190, 90)
rectTile(12, 3, 1, 8, 14, 14, 100, 70, 40)
px(12, 3, 4, 6, 255, 80, 120)
px(12, 3, 8, 5, 255, 200, 50)
px(12, 3, 12, 6, 255, 100, 180)
-- 13,3 celebration
fillTile(13, 3, 120, 190, 90)
for i = 0, 5 do
px(13, 3, 2 + i * 2, 4 + (i % 3), 255, 50 + i * 30, 100)
end
-- 14,3 night hint (unused mostly)
fillTile(14, 3, 40, 50, 90)
-- 15,3 void/black
fillTile(15, 3, 20, 18, 25)
-- row 4-7 pad to 128 tiles with variations
for ty = 4, 7 do
for tx = 0, 15 do
local base = 80 + tx * 5 + ty * 3
fillTile(tx, ty, base, 140 + tx * 2, 90 + ty * 5)
end
end
-- white corridor accents row 4
fillTile(0, 4, 250, 250, 252)
fillTile(1, 4, 240, 240, 245)
fillTile(2, 4, 210, 210, 220)
fillTile(3, 4, 180, 180, 195)
rectTile(4, 4, 0, 0, 15, 15, 255, 255, 255)
rectTile(4, 4, 6, 0, 9, 15, 200, 200, 210) -- door gap white
fillTile(5, 4, 100, 110, 120) -- hospital bed metal
rectTile(5, 4, 2, 6, 13, 12, 230, 230, 240)
fillTile(6, 4, 250, 250, 252)
rectTile(6, 4, 4, 2, 11, 14, 60, 70, 80) -- window frame grey
spr:saveAs("public/assets/tilesets/village.aseprite")
spr:saveCopyAs("public/assets/tilesets/village.png")
print("tileset written: 128 tiles (16x8)")