Honey Village: six model builds + hub frontend, Dockerized for Dokploy

This commit is contained in:
2026-07-15 10:50:12 -04:00
commit 67253bded5
523 changed files with 58879 additions and 0 deletions
+124
View File
@@ -0,0 +1,124 @@
-- gen_player.lua: generate player sprite sheet (16x24 frames).
-- Layout: 4 cols x 4 rows. Row order: walk-down, walk-up, walk-left, walk-right.
-- Each row 4 frames: frame 0 = idle, 1-3 = walk frames.
-- Produces assets/sprites/player.png
local FW = 16
local FH = 24
local COLS = 4
local ROWS = 4
local W = COLS*FW
local H = ROWS*FH
app.command.NewFile{ width=W, height=H, colorMode=ColorMode.RGB }
local spr = app.activeSprite
local img = app.activeImage
for y=0,H-1 do for x=0,W-1 do img:drawPixel(x,y, app.pixelColor.rgba(0,0,0,0)) end end
local function px(x,y,c) img:drawPixel(x,y,c) end
local function rect(ox,oy,w,h,c) for y=oy,oy+h-1 do for x=ox,ox+w-1 do px(x,y,c) end end end
-- gender-neutral candy palette
local skin = app.pixelColor.rgba(255,214,176,255)
local skinS = app.pixelColor.rgba(224,176,140,255)
local hair = app.pixelColor.rgba(150,110,80,255) -- chestnut
local hairD = app.pixelColor.rgba(110,80,56,255)
local shirt = app.pixelColor.rgba(120,200,230,255) -- sky blue
local shirtD = app.pixelColor.rgba(86,160,200,255)
local pants = app.pixelColor.rgba(110,90,150,255) -- muted purple
local pantsD = app.pixelColor.rgba(80,64,116,255)
local shoe = app.pixelColor.rgba(90,70,60,255)
local eye = app.pixelColor.rgba(60,40,40,255)
local cheek = app.pixelColor.rgba(255,170,170,255)
local mouth = app.pixelColor.rgba(200,110,110,255)
-- draw a character frame at ox,oy facing dir, walk phase p (0=idle, 1-3)
local function frame(ox, oy, dir, p)
-- common body
-- head (cols 4..11, rows 1..9)
rect(ox+5, oy+1, 6, 7, skin)
-- hair cap depending on direction
if dir == "up" then
-- back of head: hair covers
rect(ox+5, oy+1, 6, 6, hair)
rect(ox+5, oy+1, 6, 2, hairD)
else
rect(ox+4, oy+1, 8, 3, hair)
rect(ox+5, oy+0, 6, 2, hair)
rect(ox+4, oy+1, 8, 1, hairD)
end
-- face details for down
if dir == "down" then
px(ox+6, oy+5, eye); px(ox+9, oy+5, eye)
px(ox+7, oy+7, mouth); px(ox+8, oy+7, mouth)
px(ox+6, oy+6, cheek); px(ox+9, oy+6, cheek)
elseif dir == "side" then
-- left or right handled by caller mirroring via draw order
px(ox+7, oy+5, eye)
px(ox+8, oy+7, mouth)
px(ox+6, oy+6, cheek)
end
-- torso (rows 8..15)
rect(ox+5, oy+9, 6, 6, shirt)
rect(ox+5, oy+9, 6, 1, shirtD)
rect(ox+5, oy+14, 6, 1, shirtD)
-- arms
rect(ox+4, oy+10, 1, 4, shirt)
rect(ox+10, oy+10, 1, 4, shirt)
px(ox+4, oy+14, skin); px(ox+10, oy+14, skin)
-- legs / walk animation
local L, R = oy+15, oy+15
if p == 0 then
-- idle: legs together
rect(ox+5, oy+15, 2, 6, pants)
rect(ox+9, oy+15, 2, 6, pants)
px(ox+5, oy+21, shoe); px(ox+6, oy+21, shoe)
px(ox+9, oy+21, shoe); px(ox+10, oy+21, shoe)
elseif p == 1 then
-- step: left leg forward (down/up), or side-step
rect(ox+5, oy+15, 2, 5, pants)
rect(ox+9, oy+15, 2, 5, pants)
px(ox+5, oy+20, shoe); px(ox+6, oy+20, shoe)
px(ox+9, oy+21, shoe); px(ox+10, oy+21, shoe)
elseif p == 2 then
-- mid
rect(ox+5, oy+15, 2, 6, pants)
rect(ox+9, oy+15, 2, 6, pants)
px(ox+5, oy+21, shoe); px(ox+6, oy+21, shoe)
px(ox+9, oy+21, shoe); px(ox+10, oy+21, shoe)
elseif p == 3 then
-- step: right leg forward
rect(ox+5, oy+15, 2, 5, pants)
rect(ox+9, oy+15, 2, 5, pants)
px(ox+5, oy+21, shoe); px(ox+6, oy+21, shoe)
px(ox+9, oy+20, shoe); px(ox+10, oy+20, shoe)
end
end
-- mirror helper for left/right by copying pixels
local function mirrorRow(srcRow, dstRow)
for f=0,3 do
local sx = f*FW
local dx = f*FW
local sy = srcRow*FH
local dy = dstRow*FH
for y=0,FH-1 do
for x=0,FW-1 do
local c = img:getPixel(sx + (FW-1-x), sy + y)
img:drawPixel(dx + x, dy + y, c)
end
end
end
end
-- Row 0: walk-down
for f=0,3 do frame(f*FW, 0*FH, "down", f) end
-- Row 1: walk-up
for f=0,3 do frame(f*FW, 1*FH, "up", f) end
-- Row 2: walk-right (side)
for f=0,3 do frame(f*FW, 2*FH, "side", f) end
-- Row 3: walk-left = mirror of right
mirrorRow(2, 3)
local out = "assets/sprites/player.png"
spr:saveCopyAs(out)
print("Saved " .. out)
app.exit()