-- gen_player.lua — public/assets/sprites/player.png -- 64x96; frame 16x24; cols 0-3 = walk frames (col 0 also idle); rows 0=down 1=up 2=left 3=right -- Gender-neutral chibi, cream / honey-orange palette, gentle "healing" look. local ROOT = "/Users/leidianyayi/Documents/GitHub/ModelTest20260714/Kimi-K3/" local H = dofile(ROOT .. "tools/aseprite/helpers.lua") local spr, img = H.new(64, 96) -- step: -1 left step, 0 stand, +1 right step local function stepOf(f) if f == 1 then return -1 elseif f == 3 then return 1 else return 0 end end -- legs shared by down/up (front/back view alternates a lifted foot) local function legsFB(t, step) if step == 0 then t.rectn(5, 17, 2, 5, "cream_d"); t.rectn(9, 17, 2, 5, "cream_d") t.rectn(4, 22, 3, 2, "brown"); t.rectn(9, 22, 3, 2, "brown") elseif step == -1 then t.rectn(5, 17, 2, 5, "cream_d"); t.rectn(4, 22, 3, 2, "brown") -- left planted t.rectn(9, 17, 2, 4, "cream_d"); t.rectn(9, 21, 3, 2, "brown") -- right lifted else t.rectn(5, 17, 2, 4, "cream_d"); t.rectn(4, 21, 3, 2, "brown") -- left lifted t.rectn(9, 17, 2, 5, "cream_d"); t.rectn(9, 22, 3, 2, "brown") -- right planted end end local function drawDown(t, f) local s = stepOf(f) t.rectn(4, 2, 8, 3, "hair") t.rectn(3, 3, 2, 6, "hair"); t.rectn(11, 3, 2, 6, "hair") t.rectn(4, 4, 8, 6, "skin") t.rectn(4, 2, 8, 1, "hair_l") t.pn(5, 7, "ink"); t.pn(10, 7, "ink") t.pn(6, 9, "skin_d"); t.pn(9, 9, "skin_d") t.rectn(4, 11, 8, 6, "honey"); t.rectn(4, 11, 8, 1, "honey_l") -- arms swing opposite to step if s == 1 then t.rectn(3, 11, 2, 5, "honey"); t.rectn(3, 16, 2, 2, "skin") else t.rectn(2, 11, 2, 5, "honey"); t.rectn(2, 16, 2, 2, "skin") end if s == -1 then t.rectn(11, 11, 2, 5, "honey"); t.rectn(11, 16, 2, 2, "skin") else t.rectn(12, 11, 2, 5, "honey"); t.rectn(12, 16, 2, 2, "skin") end legsFB(t, s) end local function drawUp(t, f) local s = stepOf(f) t.rectn(3, 2, 10, 7, "hair") t.rectn(4, 2, 8, 2, "hair_l") t.rectn(3, 8, 10, 1, "hair_d") t.rectn(6, 9, 4, 2, "skin_d") t.rectn(4, 11, 8, 6, "honey"); t.rectn(4, 16, 8, 1, "honey_d") t.rectn(2, 11, 2, 5, "honey"); t.rectn(12, 11, 2, 5, "honey") t.rectn(2, 16, 2, 2, "skin"); t.rectn(12, 16, 2, 2, "skin") legsFB(t, s) end local function drawLeft(t, f) local s = stepOf(f) -- hair (back of head toward the right / behind) t.rectn(5, 2, 7, 3, "hair"); t.rectn(5, 2, 7, 1, "hair_l") t.rectn(9, 3, 3, 6, "hair") -- face (pointing left) t.rectn(4, 4, 7, 6, "skin") t.pn(5, 7, "ink") t.pn(4, 8, "skin_d") -- torso t.rectn(4, 11, 8, 6, "honey"); t.rectn(4, 11, 8, 1, "honey_l") -- front arm swings with step if s == -1 then t.rectn(2, 11, 2, 5, "honey"); t.rectn(2, 16, 2, 2, "skin") elseif s == 1 then t.rectn(5, 11, 2, 5, "honey"); t.rectn(5, 16, 2, 2, "skin") else t.rectn(3, 11, 2, 5, "honey"); t.rectn(3, 16, 2, 2, "skin") end -- profile legs scissor horizontally if s == 0 then t.rectn(5, 17, 2, 5, "cream_d"); t.rectn(8, 17, 2, 5, "cream_d") t.rectn(4, 22, 3, 2, "brown"); t.rectn(7, 22, 3, 2, "brown") elseif s == -1 then t.rectn(4, 17, 2, 5, "cream_d"); t.rectn(3, 22, 3, 2, "brown") -- front leg forward t.rectn(9, 17, 2, 4, "cream_d"); t.rectn(8, 21, 3, 2, "brown") -- back leg lifted else t.rectn(6, 17, 2, 4, "cream_d"); t.rectn(5, 21, 3, 2, "brown") -- back leg lifted t.rectn(9, 17, 2, 5, "cream_d"); t.rectn(8, 22, 3, 2, "brown") -- front leg forward end end for row = 0, 3 do for col = 0, 3 do local t = H.at(img, col * 16, row * 24) if row == 0 then drawDown(t, col) elseif row == 1 then drawUp(t, col) elseif row == 2 then drawLeft(t, col) else drawLeft(H.mirrorX(t, 16), col) end end end spr:saveAs(ROOT .. "public/assets/sprites/player.png") print("player.png done")