← Monsters and enemies3D assetfogon/momia
Momia
Drag to turn it// «Momia» · gpt-6-sol (medium)
// A chunky cartoon mummy facing -y, wrapped head to toe in off-white and cream bandage strips running horizontally with darker beige seams, a few loose strip ends hanging. Two glowing green eyes peek through a gap in the head wrappings. Arms raised forward.
const cream = "#e9dfb5";
const light = "#fff2cc";
const shadow = "#b4a77e";
const seam = "#9b8d68";
const dark = "#383b2e";
const green = "#77ff49";
// Recolor a solid shape as overlapping horizontal bandage strips.
function wrap(x0, y0, z0, x1, y1, z1, spacing) {
forEach((x, y, z, color) => {
if (x < x0 || x > x1 || y < y0 || y > y1 || z < z0 || z > z1) return;
const wave = Math.round(Math.sin(x * 0.48 + y * 0.21) * 0.7);
const band = ((z + wave) % spacing + spacing) % spacing;
let shade;
if (band === 0) shade = seam;
else if (band === 1) shade = shadow;
else if (z < 5 || y > 29) shade = "#d1c49d";
else shade = rand() < 0.23 ? light : cream;
set(x, y, z, shade);
});
}
// Thick torso and oversized, softly squared head.
ellipsoid(24, 25, 21, 8, 7, 11, cream);
box(18, 20, 18, 30, 29, 28, cream);
ellipsoid(24, 24, 35, 10, 9, 9, cream);
box(19, 19, 30, 29, 29, 39, cream);
wrap(15, 17, 10, 33, 33, 32, 5);
wrap(14, 14, 27, 34, 34, 44, 4);
// The dark gap sits between two heavy rows of head wrappings.
box(18, 14, 35, 30, 17, 37, dark);
box(17, 14, 38, 31, 17, 39, light);
box(18, 14, 33, 30, 16, 34, "#d5c8a1");
box(23, 13, 35, 25, 15, 37, cream);
for (const x of [20, 28]) {
box(x - 1, 13, 35, x + 1, 14, 37, "#388c38");
box(x - 1, 12, 36, x + 1, 13, 37, green);
set(x, 11, 37, "#e0ff8a");
set(x - 1, 12, 35, "#43c83c");
}
// Uneven loose ends, hanging clear of the eye gap.
box(14, 18, 30, 16, 19, 35, light);
box(14, 17, 27, 15, 19, 30, "#d4c7a0");
box(32, 18, 29, 34, 19, 33, cream);
box(33, 17, 27, 34, 19, 29, shadow);
box(19, 17, 20, 21, 18, 25, light);
box(20, 16, 16, 21, 18, 20, "#d8cca5");
box(21, 16, 15, 23, 17, 17, cream);
// Both forward-reaching arms share one shoulder pivot.
part("arms", [24, 24, 28]);
for (const side of [-1, 1]) {
const shoulderX = 24 + side * 10;
const armX = 24 + side * 12;
ellipsoid(shoulderX, 23, 27, 4, 4, 4, cream);
line(shoulderX, 22, 27, armX, 13, 27, 3, cream);
ellipsoid(armX, 12, 27, 4, 4, 3, cream);
const lo = Math.min(shoulderX, armX) - 4;
const hi = Math.max(shoulderX, armX) + 4;
wrap(lo, 8, 22, hi, 27, 32, 4);
// Short, mitten-like bandaged fingers.
for (let i = -2; i <= 2; i += 2) {
box(armX + i, 8, 25, armX + i + 1, 10, 27, i === 0 ? light : cream);
}
box(armX + side * 2, 14, 21, armX + side * 2 + 1, 15, 25, light);
}
animate("arms", { type: "swing", axis: "x", speed: 2, amplitude: 0.2 });
part("body");
// Separate legs, with big flat feet that reach toward the viewer.
for (const [name, x, speed] of [
["leftLeg", 20, 4],
["rightLeg", 28, -4]
]) {
part(name, [x, 24, 14]);
box(x - 3, 21, 3, x + 3, 27, 14, cream);
ellipsoid(x, 24, 8, 4, 4, 7, cream);
box(x - 4, 16, 0, x + 3, 27, 4, cream);
ellipsoid(x, 21, 3, 4, 6, 3, cream);
wrap(x - 5, 14, 0, x + 4, 29, 15, 4);
box(x - 4, 15, 0, x + 3, 16, 1, shadow);
animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}
part("body");import { draw } from "./assets/voxel";
import { momia } from "./assets/momia";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, momia, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: its longest side, in px
// angle: turn on the floor, in radians
// t: seconds; if it moves, that animates it# In a terminal, in the game's folder
fogon assets add momia
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["momia"] })
# It lands in client/assets/momia.ts
# https://fogon.page/object/momia