fogón

← Fantasy3D assetfogon/altar-magico

Altar mágico

by fogonCC019298 blocks
Altar mágicoDrag to turn it
// «Altar mágico» · gpt-6-sol (medium)
// A stone magic altar: a wide rectangular block of carved grey stone with glowing teal runes on its front (-y), two lit candles on top, an open old book in the center and a small glowing gem floating above it.

// Stone plinth and the altar's broad, overhanging top.
box(5, 12, 0, 42, 37, 2, "#555e59");
box(6, 12, 2, 41, 37, 3, "#87918a");
box(7, 13, 4, 40, 36, 15, "#69736d");
box(8, 14, 5, 39, 35, 14, "#77817a");

box(5, 11, 16, 42, 38, 17, "#525e59");
box(5, 11, 18, 42, 38, 18, "#9ca69c");
box(7, 13, 19, 40, 36, 19, "#7e8980");

// Chunky carved corners and a recessed front panel.
for (const x of [8, 37]) {
  box(x, 12, 4, x + 3, 15, 15, "#505b56");
  box(x, 11, 5, x + 3, 12, 6, "#919a90");
  box(x, 11, 13, x + 3, 12, 14, "#89948a");
  box(x + 1, 11, 7, x + 2, 11, 12, "#77847a");
}
box(13, 13, 5, 35, 13, 14, "#46514e");
box(14, 12, 6, 34, 12, 13, "#344b4c");
box(13, 11, 5, 35, 11, 5, "#a3a99a");
box(13, 11, 14, 35, 11, 14, "#a3a99a");
for (const x of [13, 35]) box(x, 11, 6, x, 11, 13, "#919d91");
box(14, 10, 16, 34, 10, 16, "#7a8680");

// Broad, angular runes, bright against the dark stone.
const rune = "#37e9df";
const light = "#a4fff0";
for (const cx of [18, 24, 30]) {
  line(cx, 11, 12, cx - 2, 11, 10, 0, rune);
  line(cx - 2, 11, 10, cx, 11, 7, 0, rune);
  line(cx, 11, 7, cx + 2, 11, 10, 0, rune);
  line(cx + 2, 11, 10, cx, 11, 12, 0, rune);
  set(cx, 10, 10, light);
}
line(20, 11, 10, 22, 11, 10, 0, "#279f9e");
line(26, 11, 10, 28, 11, 10, 0, "#279f9e");
for (const x of [15, 33]) {
  set(x, 10, 10, "#91fff0");
  set(x, 10, 9, "#218d89");
}

// Weathering, chips, and moss on the top and front corners.
for (let i = 0; i < 115; i++) {
  const x = 6 + Math.floor(rand() * 36);
  const y = 12 + Math.floor(rand() * 26);
  if (get(x, y, 18) && (x < 11 || x > 37 || y < 15 || y > 34))
    set(x, y, 19, rand() < 0.45 ? "#627e62" : "#82966e");
}
for (let i = 0; i < 32; i++) {
  const x = 6 + Math.floor(rand() * 36);
  const z = 2 + Math.floor(rand() * 13);
  if (x < 12 || x > 36)
    set(x, 11, z, rand() < 0.65 ? "#60795f" : "#8b9875");
}
line(7, 11, 17, 10, 11, 17, 0, "#466a55");
line(38, 11, 17, 41, 11, 17, 0, "#466a55");

// A couple of tiny storybook mushrooms in the moss.
for (const x of [7, 40]) {
  box(x, 16, 19, x, 16, 21, "#eee0b7");
  box(x - 1, 15, 22, x + 1, 17, 22, "#ad6a83");
  set(x, 15, 23, "#d99aae");
}

// Brass holders, wax candles, and warm flames.
for (const x of [11, 37]) {
  cylinder(x, 25, 20, 3, 1, "#735b38");
  cylinder(x, 25, 21, 2, 1, "#d4ad62");
  cylinder(x, 25, 22, 2, 4, "#e9d9ad");
  box(x - 1, 23, 25, x + 1, 25, 25, "#fff0c9");
  set(x - 2, 25, 24, "#fff0c9");
  set(x, 25, 26, "#473b34");
  ellipsoid(x, 25, 28, 1, 1, 2, "#ffad42");
  set(x, 24, 28, "#fff0a0");
  set(x, 25, 29, "#fff5ae");
  set(x, 25, 30, "#ffe7a0");
}

// Open old book: dark covers, stacked page edges, and a low spine.
box(15, 18, 20, 23, 30, 21, "#503b36");
box(25, 18, 20, 33, 30, 21, "#503b36");
box(23, 18, 20, 25, 30, 20, "#9d754d");
box(16, 18, 21, 22, 29, 22, "#c7ae82");
box(26, 18, 21, 32, 29, 22, "#c7ae82");
box(16, 19, 23, 19, 28, 23, "#f2dfae");
box(20, 19, 22, 23, 28, 22, "#eed7a2");
box(25, 19, 22, 29, 28, 22, "#eed7a2");
box(30, 19, 23, 32, 28, 23, "#f2dfae");
box(23, 19, 21, 25, 29, 21, "#72513c");

// Page borders, little lines of writing, and illuminated initials.
for (const y of [20, 22, 24, 26]) {
  line(17, y, 24, 19, y, 24, 0, "#ad8b64");
  line(30, y, 24, 32, y, 24, 0, "#ad8b64");
}
for (const y of [21, 23, 25, 27]) {
  line(20, y, 23, 22, y, 23, 0, "#987b65");
  line(26, y, 23, 29, y, 23, 0, "#987b65");
}
set(18, 20, 24, "#9b5799");
set(31, 20, 24, "#399e9b");
line(16, 18, 21, 22, 18, 21, 0, "#ad8553");
line(26, 18, 21, 32, 18, 21, 0, "#ad8553");

// The gem is the only moving piece, hovering above the open book.
part("gem", [24, 24, 32]);
box(23, 23, 29, 25, 25, 29, "#29bcb8");
box(22, 22, 30, 26, 26, 32, "#38dcd8");
box(23, 23, 33, 25, 25, 33, "#8ffff0");
set(24, 24, 34, "#e4fffa");
set(23, 22, 31, "#e4fffa");
set(24, 22, 32, "#aafff3");
animate("gem", { type: "bob", axis: "z", speed: 2, amplitude: 1 });
animate("gem", {
  type: "colors",
  palette: ["#20c9c4", "#70fff0", "#f0ffff"],
  pattern: "pulse",
  glow: 0.9
});