← Monsters and enemies3D assetfogon/minotauro
Minotauro
Drag to turn it// «Minotauro» · gpt-6-sol (medium)
// A muscular cartoon minotaur on two legs facing -y: a bull head with big curved cream horns, a gold nose ring and glowing red eyes, dark brown fur, a broad bare chest, a leather kilt with metal plates, hooved feet, holding a big double-bladed axe.
const fur = "#493024", furLight = "#65402b", furDark = "#30221d";
const skin = "#a76843", skinLight = "#c48658", skinDark = "#78472f";
const leather = "#633b29", leatherLight = "#885337";
const iron = "#788693", ironLight = "#c4d2d5", ironDark = "#46525d";
const gold = "#edb941", goldLight = "#ffe180";
// Body and broad, bare chest.
ellipsoid(24, 25, 25, 12, 8, 10, furDark);
ellipsoid(24, 23, 26, 11, 8, 9, fur);
ellipsoid(19, 17, 29, 6, 3, 5, skin);
ellipsoid(29, 17, 29, 6, 3, 5, skin);
ellipsoid(19, 15, 30, 5, 2, 3, skinLight);
ellipsoid(29, 15, 30, 5, 2, 3, skinLight);
ellipsoid(24, 18, 22, 6, 3, 5, skinDark);
box(21, 14, 20, 27, 16, 25, skin);
line(24, 14, 32, 24, 15, 27, 0, skinDark);
line(20, 14, 25, 28, 14, 25, 0, skinDark);
line(21, 15, 22, 27, 15, 22, 0, skinLight);
// Waist belt and heavy leather kilt.
box(14, 19, 17, 34, 31, 19, leather);
box(14, 17, 18, 34, 19, 19, leatherLight);
box(16, 16, 17, 32, 17, 17, gold);
box(22, 15, 16, 26, 17, 20, gold);
box(23, 14, 17, 25, 14, 19, goldLight);
box(14, 18, 11, 34, 30, 17, leather);
box(16, 16, 11, 21, 18, 17, leatherLight);
box(22, 15, 10, 27, 18, 17, leather);
box(28, 16, 11, 33, 18, 17, leatherLight);
for (const x of [16, 22, 28, 33]) {
box(x, 15, 11, x, 16, 16, furDark);
}
for (const x of [19, 25, 31]) {
box(x - 2, 14, 13, x + 2, 15, 17, ironDark);
box(x - 1, 13, 14, x + 1, 14, 17, iron);
box(x, 12, 16, x, 12, 16, ironLight);
set(x, 12, 14, gold);
}
box(17, 17, 10, 32, 27, 11, furDark);
// Legs move from their hips in opposite phases.
function leg(name, x, speed) {
part(name, [x, 24, 14]);
ellipsoid(x, 24, 11, 5, 5, 6, fur);
ellipsoid(x, 24, 6, 4, 4, 5, furDark);
box(x - 4, 17, 1, x + 4, 27, 4, fur);
box(x - 4, 14, 0, x + 4, 25, 3, "#36332e");
box(x - 3, 13, 1, x + 3, 16, 3, "#625b4c");
// A split at the front makes each chunky foot read as a hoof.
box(x, 13, 0, x, 15, 2, "#211f1d");
animate(name, { type: "swing", axis: "x", speed, amplitude: 0.3 });
}
leg("leftLeg", 18, 4);
leg("rightLeg", 30, -4);
part("body");
// Static arm, clenched fist, and small shoulder fur tufts.
ellipsoid(12, 24, 29, 5, 6, 6, furDark);
ellipsoid(11, 22, 28, 5, 5, 6, fur);
line(11, 21, 27, 10, 18, 20, 3, fur);
ellipsoid(10, 17, 19, 4, 4, 4, furLight);
box(7, 15, 18, 12, 17, 20, furDark);
for (const x of [9, 12, 15]) {
line(x, 17, 32, x - 1, 16, 29, 1, furLight);
}
// Bull head: broad forehead, pronounced muzzle, and pointed ears.
ellipsoid(24, 21, 36, 10, 8, 7, furDark);
ellipsoid(24, 19, 37, 9, 8, 6, fur);
ellipsoid(24, 14, 35, 7, 4, 5, furLight);
ellipsoid(12, 22, 38, 5, 3, 3, fur);
ellipsoid(36, 22, 38, 5, 3, 3, fur);
box(9, 19, 38, 13, 19, 39, skinDark);
box(35, 19, 38, 39, 19, 39, skinDark);
// Thick cream horns sweep outward, curl upward, then turn inward.
for (const side of [-1, 1]) {
const X = d => 24 + side * d;
line(X(8), 21, 40, X(12), 21, 41, 3, "#96764d");
line(X(11), 21, 41, X(17), 21, 40, 3, "#d4b981");
line(X(16), 21, 40, X(20), 21, 42, 2, "#eed8a4");
line(X(20), 21, 42, X(20), 21, 45, 2, "#f4e5bc");
line(X(20), 21, 45, X(18), 21, 46, 1, "#fff0cd");
}
// Brows frame bright, unmistakable eyes.
for (const x of [19, 29]) {
box(x - 2, 10, 38, x + 2, 12, 39, furDark);
box(x - 1, 9, 36, x + 1, 10, 38, "#721d23");
box(x, 8, 37, x + 1, 9, 38, "#ff3c35");
set(x, 8, 38, "#ffb26a");
}
ellipsoid(24, 10, 31, 7, 5, 4, skinDark);
ellipsoid(24, 8, 32, 6, 3, 3, skin);
box(18, 7, 31, 30, 7, 32, skinLight);
box(20, 5, 32, 21, 6, 33, furDark);
box(27, 5, 32, 28, 6, 33, furDark);
box(21, 6, 29, 27, 6, 29, skinDark);
// Gold nose ring, hanging visibly below the muzzle.
for (let a = 0; a <= 32; a++) {
const t = a * Math.PI * 2 / 32;
const x = Math.round(24 + 3 * Math.cos(t));
const z = Math.round(28 + 3 * Math.sin(t));
set(x, 4, z, z >= 28 ? goldLight : gold);
set(x, 5, z, gold);
}
box(23, 4, 31, 25, 5, 31, goldLight);
// Axe arm and its weapon share the shoulder pivot.
part("axeArm", [36, 24, 29]);
ellipsoid(36, 23, 29, 5, 6, 6, furDark);
ellipsoid(37, 20, 27, 4, 5, 5, fur);
line(37, 20, 27, 39, 13, 23, 3, fur);
ellipsoid(39, 13, 23, 4, 4, 4, furLight);
box(37, 10, 21, 41, 12, 24, furDark);
for (const z of [21, 23]) box(38, 9, z, 40, 9, z, furLight);
// Long haft with leather grip and gold fittings.
box(38, 11, 13, 40, 13, 39, "#604333");
box(39, 10, 15, 39, 10, 39, "#a47849");
for (const z of [15, 17, 19, 21, 23, 25]) {
box(38, 10, z, 40, 10, z, leather);
}
box(37, 10, 29, 41, 14, 30, gold);
box(37, 10, 39, 41, 14, 40, gold);
box(38, 11, 12, 40, 13, 13, ironDark);
// Two broad crescent-like blades, one on each side of the haft.
for (let z = 28; z <= 42; z++) {
const distance = Math.abs(z - 35);
if (distance > 7) continue;
const inner = distance >= 5 ? 4 : 2;
const outer = distance >= 5 ? 7 : distance >= 3 ? 6 : 5;
for (const side of [-1, 1]) {
for (let d = inner; d <= outer; d++) {
const x = 39 + side * d;
box(x, 10, z, x, 13, z, d === outer ? ironLight : ironDark);
set(x, 9, z, d === outer ? "#e0eeeb" : iron);
if (d === inner) set(x, 9, z, ironLight);
}
}
}
box(38, 9, 33, 40, 10, 37, ironDark);
box(39, 8, 34, 39, 8, 36, goldLight);
animate("axeArm", { type: "swing", axis: "x", speed: 3, amplitude: 0.5 });
part("body");
// Sparse surface flecks give the large fur shapes a little texture.
forEach((x, y, z, color) => {
if ((color === fur || color === furDark) &&
get(x, y - 1, z) === undefined && rand() < 0.065) {
set(x, y, z, rand() < 0.65 ? furLight : furDark);
}
});import { draw } from "./assets/voxel";
import { minotauro } from "./assets/minotauro";
// Every frame: standing on (x, y), the centre of its base.
draw(ctx, minotauro, 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 minotauro
# With Fogón's tools (connector)
add_assets({ slug: "<your-game>", ids: ["minotauro"] })
# It lands in client/assets/minotauro.ts
# https://fogon.page/object/minotauro