fogón

← Gear3D assetfogon/pocion-verde

Poción verde

by fogonCC017483 blocks
Poción verdeDrag to turn it
// «Poción verde» · gpt-6-sol (medium)
// A heart-shaped glass potion bottle standing on the floor with a short neck and a cork tied with string, filled with bubbling bright green liquid.

const glass = ["#65a6ac", "#83c3c3", "#a9dddd"];
const gold = "#d4a84d";

function heart(x, z) {
  const X = (x - 24) / 16.5;
  const Z = (z - 19) / 16.5;
  const a = X * X + Z * Z - 1;
  return a * a * a - X * X * Z * Z * Z <= 0;
}

function insetHeart(x, z, n) {
  return heart(x - n, z) && heart(x + n, z) &&
         heart(x, z - n) && heart(x, z + n);
}

// A broad, solid glass vessel with a pale back visible above the potion.
for (let z = 2; z <= 39; z++) {
  for (let x = 4; x <= 44; x++) {
    if (!heart(x, z)) continue;
    for (let y = 17; y <= 31; y++) {
      const c = y >= 29 ? "#57949c" :
                z >= 27 ? "#83bfc0" : "#69a9ac";
      set(x, y, z, rand() < 0.055 ? glass[1] : c);
    }
    if (z >= 26 && insetHeart(x, z, 2)) {
      set(x, 16, z, rand() < 0.14 ? "#9bd2c9" : "#6bacaa");
    }
  }
}

// The potion is a separate, softly pulsing mass.
part("liquid", [24, 24, 17]);
for (let x = 5; x <= 43; x++) {
  const surface = 25 + Math.round(Math.sin(x * 0.43) * 1.2);
  for (let z = 5; z <= surface; z++) {
    if (!insetHeart(x, z, 2)) continue;
    for (let y = 16; y <= 28; y++) {
      set(x, y, z, rand() < 0.12 ? "#9af13c" :
          z >= surface - 1 ? "#a4ef43" : "#43c838");
    }
  }
}
animate("liquid", {
  type: "colors",
  palette: ["#36bd35", "#54d83a", "#85ea3e", "#a7f45a"],
  pattern: "pulse",
  glow: 0.6
});

part("body", [24, 24, 20]);

// Thick, bright glass edge remains visible around the green center.
for (let z = 2; z <= 39; z++) {
  for (let x = 4; x <= 44; x++) {
    if (!heart(x, z) || insetHeart(x, z, 2)) continue;
    for (let y = 15; y <= 18; y++) {
      set(x, y, z, z > 25 || x < 24 ? "#a8ded9" : "#75b9bb");
    }
    if (!insetHeart(x, z, 1) && (z > 21 || x < 12)) {
      set(x, 15, z, "#cef1e5");
    }
  }
}

// Bold reflections on the curved front of the bottle.
line(11, 14, 19, 15, 14, 29, 1, "#d4f3dc");
line(15, 14, 29, 19, 14, 32, 1, "#d4f3dc");
line(36, 14, 11, 38, 14, 16, 1, "#c3eadd");
box(13, 14, 16, 14, 14, 20, "#edfae6");
box(32, 14, 28, 33, 14, 30, "#e3f7e5");

// Bright bubbles, large enough to read through the glass.
for (const [x, z, r] of [
  [16, 22, 2], [21, 17, 1], [29, 21, 2],
  [34, 14, 1], [25, 11, 2], [19, 9, 1],
  [31, 8, 1], [25, 27, 1], [32, 28, 1]
]) {
  sphere(x, 14, z, r, "#d3ff88");
  set(x - 1, 13, z + 1, "#f0ffc1");
}

// A chunky brass foot keeps the pointed heart standing upright.
box(19, 19, 0, 29, 29, 1, "#90672d");
box(18, 18, 1, 30, 30, 2, gold);
box(20, 20, 2, 28, 28, 3, "#f3cf75");
box(21, 18, 1, 27, 18, 1, "#ffe494");

// Short glass neck and its brass collar.
box(20, 20, 32, 28, 28, 38, "#77b6b6");
box(21, 19, 33, 27, 19, 38, "#a9ded3");
box(22, 18, 34, 23, 18, 37, "#e4f5df");
box(19, 19, 32, 29, 29, 33, "#a97636");
box(19, 18, 33, 29, 19, 34, "#e8bd64");
box(20, 19, 38, 28, 29, 39, "#d3a348");
box(21, 18, 38, 27, 18, 39, "#f5d47b");

// A broad cork, with warm flecks and a darker top.
box(21, 21, 39, 27, 27, 43, "#aa7140");
box(20, 20, 41, 28, 28, 43, "#bd8750");
box(21, 21, 44, 27, 27, 44, "#87552f");
box(22, 19, 40, 26, 19, 43, "#d9a168");
for (let i = 0; i < 22; i++) {
  set(21 + Math.floor(rand() * 6), 19,
      40 + Math.floor(rand() * 4), "#916036");
}

// String wraps the cork, crosses at the front, and ends in a little knot.
box(20, 19, 41, 28, 20, 41, "#ead5a0");
box(20, 27, 41, 28, 28, 41, "#c4a975");
box(20, 20, 41, 20, 27, 41, "#dec38c");
box(28, 20, 41, 28, 27, 41, "#dec38c");
line(21, 18, 42, 27, 18, 40, 0, "#f2dea7");
line(21, 18, 40, 27, 18, 42, 0, "#f2dea7");
sphere(24, 17, 41, 1, "#ffe5aa");
line(24, 17, 40, 21, 16, 37, 0, "#e5c992");
line(25, 17, 40, 28, 16, 37, 0, "#e5c992");