← Piratas y marObjeto 3Dfogon/cartel-x-marca-el-lugar
Cartel de X marca el lugar
Arrastrá para girarlo// «Cartel de X marca el lugar» · gpt-6-sol (medium)
// A crooked wooden sign stuck in a small sand mound, painted with a big red X and a skull, with a small shovel leaning on it.
// Low, sunlit sand mound.
ellipsoid(24, 24, 0, 17, 14, 5, "#d8ac68");
ellipsoid(18, 23, 0, 9, 10, 3, "#e5bc78");
ellipsoid(32, 26, 0, 8, 8, 3, "#e2b773");
forEach((x, y, z, color) => {
if (color === "#d8ac68" || color === "#e5bc78" || color === "#e2b773") {
if (!get(x, y, z + 1)) {
set(x, y, z, rand() < 0.22 ? "#f5d596" : "#ecc682");
} else if (rand() < 0.045) {
set(x, y, z, "#c99b59");
}
}
});
// Crooked post, sunk into the mound.
line(23, 23, 3, 27, 23, 39, 2, "#704027");
line(22, 21, 6, 26, 21, 38, 1, "#a96b3d");
line(24, 20, 8, 27, 20, 36, 0, "#d19355");
for (let z = 9; z < 37; z += 7) {
set(23 + Math.floor((z - 4) / 9), 20, z, "#704027");
}
// Three thick, slightly tilted wooden planks.
// Every row shifts right a little toward the top.
const tilt = z => Math.floor((z - 22) / 5);
for (let z = 22; z <= 36; z++) {
const shift = tilt(z);
const seam = z === 26 || z === 31;
const wood = seam ? "#754126" :
z >= 32 ? "#ad7042" : z >= 27 ? "#b77b48" : "#a8693e";
for (let x = 10 + shift; x <= 40 + shift; x++) {
box(x, 17, z, x, 21, z, wood);
if (!seam) {
set(x, 17, z, rand() < 0.13 ? "#ce9256" : wood);
if (rand() < 0.055) set(x, 16, z, "#d69b5c");
}
}
set(10 + shift, 16, z, "#704027");
set(40 + shift, 16, z, "#704027");
}
// Chunky sunlit top edge and worn lower edge.
for (let x = 12; x <= 42; x++) set(x, 16, 36, "#dc9d5b");
for (let x = 10; x <= 40; x++) set(x, 16, 22, "#804929");
function paint(x, z, color, y = 16) {
set(x + tilt(z), y, z, color);
}
// A large, hand-painted red X.
for (let z = 25; z <= 34; z++) {
const t = (z - 25) / 9;
const left = Math.round(15 + 11 * t);
const right = Math.round(26 - 11 * t);
for (let dx = -1; dx <= 1; dx++) {
paint(left + dx, z, "#c6322c");
paint(right + dx, z, "#c6322c");
}
paint(left, z, "#ed5140", 15);
paint(right, z, "#ed5140", 15);
}
paint(15, 24, "#c6322c");
paint(26, 24, "#c6322c");
// Cheerful white skull painted beside the X.
for (let z = 29; z <= 33; z++) {
const lo = z === 33 ? 33 : 31;
const hi = z === 33 ? 37 : 39;
for (let x = lo; x <= hi; x++) paint(x, z, "#fff1d1");
}
for (let z = 26; z <= 28; z++) {
for (let x = 33; x <= 37; x++) paint(x, z, "#fff1d1");
}
paint(33, 30, "#332d2a", 15);
paint(34, 30, "#332d2a", 15);
paint(37, 30, "#332d2a", 15);
paint(38, 30, "#332d2a", 15);
paint(35, 28, "#332d2a", 15);
paint(36, 28, "#332d2a", 15);
for (let x = 34; x <= 36; x++) paint(x, 26, "#8b7561", 15);
// Big brass nail heads at the plank corners.
for (const z of [24, 29, 34]) {
for (const x of [13, 39]) {
paint(x, z, "#8c5b29", 15);
paint(x, z + 1, "#f4ce70", 15);
}
}
// A few pebbles and a glint of pirate gold in the sand.
box(14, 13, 2, 16, 14, 3, "#b88e62");
set(15, 12, 3, "#e4c39a");
box(31, 12, 2, 34, 13, 2, "#bd925f");
box(19, 12, 2, 21, 12, 3, "#c48a31");
box(20, 11, 3, 21, 11, 3, "#ffe078");
set(22, 13, 2, "#f5cf67");
// Small shovel leaning against the sign, in front of its right edge.
// Broad pointed steel blade.
for (let z = 4; z <= 11; z++) {
const cx = z < 7 ? 40 : z < 10 ? 41 : 42;
const half = z === 4 ? 0 : z <= 8 ? 2 : 1;
box(cx - half, 13, z, cx + half, 15, z, "#64727a");
box(cx - half, 12, z, cx + half, 12, z,
z < 6 ? "#a5bac0" : "#899da4");
if (half > 0) set(cx - half, 11, z, "#cfdbd2");
}
line(41, 14, 11, 43, 14, 26, 1, "#75492e");
line(41, 12, 12, 43, 12, 25, 0, "#c18a52");
// Open D-shaped grip, with a bright upper rim.
box(41, 13, 26, 42, 14, 29, "#70462f");
box(46, 13, 26, 46, 14, 29, "#70462f");
box(42, 13, 30, 45, 14, 31, "#70462f");
box(43, 12, 30, 45, 12, 30, "#d79b59");
box(42, 13, 25, 45, 14, 26, "#98613a");import { draw } from "./assets/voxel";
import { cartelXMarcaElLugar } from "./assets/cartel-x-marca-el-lugar";
// En cada cuadro: parado sobre (x, y), el centro de su base.
draw(ctx, cartelXMarcaElLugar, x, y, { size: 64, angle: 0, t: performance.now() / 1000 });
// size: lo que mide en px su lado más largo
// angle: giro sobre el piso, en radianes
// t: segundos; si se mueve, se anima solo con eso# En una terminal, en la carpeta del juego
fogon assets add cartel-x-marca-el-lugar
# Con las herramientas de Fogón (conector)
add_assets({ slug: "<tu-juego>", ids: ["cartel-x-marca-el-lugar"] })
# Queda en client/assets/cartel-x-marca-el-lugar.ts
# https://fogon.page/object/cartel-x-marca-el-lugar