← Back to Gallery

Loading 3D viewer…

Antarctic icebreaker in pack ice (guided)

by Jorge Barbero

Dimensions
112×56×96
Blocks
219,854
Compute Time
4.3s
Generation Time
4m 44s
Model
claude-opus-5
Created
August 23, 2026
icebreakershipvehicleantarcticautoevalguided
Prompt

User Prompt

an Antarctic icebreaker research vessel wedged in pack ice: high orange-red steel hull with a reinforced raked bow riding up onto the floe, white multi-deck superstructure with bridge wings, a red-and-white funnel, an aft helideck with a parked helicopter, deck cranes and cargo containers, and a channel of broken ice behind the stern

Enhanced Prompt

guided condition — prepare_build + docs: build-rules Essential Build Rules + 24 Vehicle Hull Symmetry, vehicles-machines Ship Types, shape-techniques Circle Charts, biome-builds Snow & Ice. Hull built from parametric cross-sections symmetric by construction; meander() for the broken channel.

Photos

Beset in the ice
Beset in the iceexterior
Bow on the floe
Bow on the floeexterior
Ice field
Ice fieldexterior
Bridge
Bridgeinterior
Crew mess
Crew messinterior
CraftScript Source
// === BUILD PLAN ===
// Style: modern polar research icebreaker (Aurora Australis / Polarstern family)
// Orientation: keel along X, BOW at +X (rule 15 — the iso/front cameras see +X/+Z, so the
//   whole profile faces the camera). Centreline Z=43. Length 75, beam 15 -> ~5:1.
//
// TOP VIEW (waterline, bow to the right):
//   stern                                                        bow
//   ..####################################################.....
//   .######################################################...
//   ..####################################################.....
//
// SIDE PROFILE (Y):
//   48                    |mast
//   37            _______|BRIDGE|_______        <- bridge + wings (Z35..51)
//   32          _|      L2       |_
//   27   _____ |         L1        |_____
//   26  |HELIDECK|   ==FUNNEL==      cargo deck        ____/    <- raked stem rides ONTO ice
//   22  =============== MAIN DECK ==============____/
//   18  ~~~~ waterline (ice sheet top = 18) ~~~~
//   08   \____________ hull bottom ___________/
//
// Hull cross-section (midship, half-beam 7): bottom flat 9 wide, bilge rises 1 per column
//   ....DDDDDDDDDDDDDDD....   D = deck plate Y22
//   ...O###############O...   O = orange topside Y18..21
//   ....B#############B....   B = black boot-top Y17
//   .....R###########R.....   R = red antifouling
//   .......RRRRRRR.........   flat-ish bottom
//
// MATERIALS PLAN (part -> palette -> WHY):
//   below WL : red_concrete/red_terracotta      — WHY: antifouling red, the real 3-band livery
//   boot top : black_concrete                   — WHY: a hard dark line MAKES the waterline read
//   topsides : orange_concrete/orange_terracotta— WHY: polar orange = instant "icebreaker"
//   house    : white_concrete/smooth_quartz     — WHY: max value contrast against the orange
//   funnel   : red + white band + black cap     — WHY: the one saturated accent up high
//   decks    : gray/light_gray/andesite noise   — WHY: steel plate, keeps the deck from reading flat
//   ice      : patches packed_ice/snow/ice/blue_ice — WHY: BIG floe blotches, not per-block confetti
// Rooms: BRIDGE (helm, console bank, chart table, chairs) + CREW MESS on L1 (tables, galley)
// STAIR PLAN: exterior accommodation ladders on the starboard side deck (z=36):
//   staircase(45,36,23,28,'east') then staircase(52,36,28,33,'east') -> flush onto each deck.
// === END PLAN ===

var CK = [];
function ck(m) { CK.push(m); }
ck('PLAN');

var seaTop = 17, iceY = 18;
var CZ = 43;
var deckY = 22;

// ---------- palettes ----------
var hullLow = noisePalette([
  { block: 'red_concrete', weight: 58 },
  { block: 'red_terracotta', weight: 26 },
  { block: 'brown_terracotta', weight: 16 }
], { seed: 4, freq: 0.12 });
var hullTop = noisePalette([
  { block: 'orange_concrete', weight: 60 },
  { block: 'orange_terracotta', weight: 24 },
  { block: 'red_concrete', weight: 16 }
], { seed: 9, freq: 0.11 });
var whitePal = noisePalette([
  { block: 'white_concrete', weight: 62 },
  { block: 'smooth_quartz', weight: 22 },
  { block: 'light_gray_concrete', weight: 16 }
], { seed: 14, freq: 0.13 });
var deckPal = noisePalette([
  { block: 'gray_concrete', weight: 44 },
  { block: 'light_gray_concrete', weight: 30 },
  { block: 'andesite', weight: 16 },
  { block: 'polished_andesite', weight: 10 }
], { seed: 19, freq: 0.14 });
var iceMat = patches([
  { block: 'packed_ice', w: 40 },
  { block: 'snow_block', w: 30 },
  { block: 'ice', w: 18 },
  { block: 'blue_ice', w: 12 }
], 0.045, 3);

// ---------- SEA + PACK ICE ----------
fill(0, 1, 0, 111, 3, 95, 'gravel');
fill(0, 4, 0, 111, seaTop, 95, 'water');
var ridge = hills({ base: iceY, amp: 2.2, scale: 0.085, seed: 5 });
var iceH = function (x, z) {
  var v = Math.round(ridge(x, z));
  if (v < iceY) { v = iceY; }
  return v;
};
var iceMask = function (x, z) { return true; };
surface(iceMask, iceH, iceMat, { sub: 'packed_ice', deep: 'water', depth: 2, bounds: { x0: 0, z0: 0, x1: 111, z1: 95 } });
ck('ICE');

// ---------- BROKEN CHANNEL behind the stern (meander = irregular, never a straight cut) ----------
var lead = meander(0, 44, 30, 42, { amplitude: 7, bends: 2, seed: 3 });
var cx3, cz3, dRaw, halfW3;
for (cx3 = 0; cx3 <= 34; cx3++) {
  for (cz3 = 26; cz3 <= 62; cz3++) {
    dRaw = lead(cx3, cz3);
    halfW3 = 9 - (cx3 * 0.10);
    if (dRaw < halfW3) {
      fill(cx3, iceY, cz3, cx3, iceY + 3, cz3, 'air');
      pb(cx3, seaTop, cz3, 'water');
    }
  }
}
// broken floes drifting in the lead
var fi3, fx, fz;
for (fi3 = 0; fi3 < 46; fi3++) {
  fx = 1 + (fi3 * 13) % 30;
  fz = 30 + (fi3 * 7) % 28;
  if (lead(fx, fz) < 8 - fx * 0.08) {
    ps(fx, iceY, fz, (fi3 % 3 === 0) ? 'ice' : 'packed_ice');
    if (fi3 % 4 === 0) { ps(fx + 1, iceY, fz, 'packed_ice'); ps(fx, iceY, fz + 1, 'ice'); }
    if (fi3 % 5 === 0) { ps(fx, iceY + 1, fz, 'packed_ice_slab'); }
  }
}
ck('CHANNEL');

// ---------- HULL (parametric cross-sections -> symmetric BY CONSTRUCTION) ----------
function halfBeam(x) {
  if (x < 22 || x > 96) { return -1; }
  if (x < 26) { return 3 + (x - 22); }
  if (x <= 76) { return 7; }
  if (x <= 86) { return 7 - Math.round((x - 76) * 3 / 10); }
  if (x <= 93) { return 4 - Math.round((x - 86) * 3 / 7); }
  return 1;
}
function botY(x) {
  var y = 8;
  if (x > 72) { y = 8 + Math.round((x - 72) * 12 / 24); }
  if (x < 28) { y = 8 + Math.round((28 - x) * 0.6); }
  return y;
}
function topY(x) {
  if (x <= 78) { return 21; }
  return 21 + Math.round((x - 78) * 4 / 18);
}

var hx, hdz, hz, hb0, hby, hty, colBot;
for (hx = 22; hx <= 96; hx++) {
  hb0 = halfBeam(hx);
  if (hb0 < 0) { continue; }
  hby = botY(hx);
  hty = topY(hx);
  for (hdz = -hb0; hdz <= hb0; hdz++) {
    hz = CZ + hdz;
    // bilge rise: outer 3 columns lift off the flat bottom -> rounded section, not a brick
    colBot = hby + Math.max(0, Math.abs(hdz) - (hb0 - 3));
    if (colBot > seaTop - 1) {
      fill(hx, colBot, hz, hx, hty, hz, hullTop);
    } else {
      fill(hx, colBot, hz, hx, seaTop - 1, hz, hullLow);
      pb(hx, seaTop, hz, 'black_concrete');
      fill(hx, seaTop + 1, hz, hx, hty, hz, hullTop);
    }
  }
  // deck plate
  fill(hx, hty + 1, CZ - hb0, hx, hty + 1, CZ + hb0, deckPal);
  // bulwark + railing (both sides, identical by construction)
  if (hb0 >= 2) {
    pb(hx, hty + 2, CZ - hb0, hullTop(hx, hty + 2, CZ - hb0));
    pb(hx, hty + 2, CZ + hb0, hullTop(hx, hty + 2, CZ + hb0));
    if (hx % 2 === 1) {
      ps(hx, hty + 3, CZ - hb0, 'iron_bars');
      ps(hx, hty + 3, CZ + hb0, 'iron_bars');
    } else {
      ps(hx, hty + 3, CZ - hb0, 'light_gray_stained_glass_pane');
      ps(hx, hty + 3, CZ + hb0, 'light_gray_stained_glass_pane');
    }
  }
  // hull-curve trim: upside-down stairs at the bilge (half=top follows the convex curve)
  if (hb0 >= 4 && hby + 1 <= seaTop) {
    ps(hx, hby + Math.max(0, hb0 - (hb0 - 3)) - 1, CZ - hb0 - 1, 'red_sandstone_stairs[facing=west,half=top]');
  }
}
// stem bar (the reinforced raked bow) + ice knife
var si3;
for (si3 = 0; si3 <= 10; si3++) {
  fill(88 + si3 * 0, 0, 0, 88, 0, 0, 'air');
}
for (si3 = 0; si3 <= 8; si3++) {
  pb(89 + si3, 15 + si3, CZ, 'black_concrete');
  pb(89 + si3, 16 + si3, CZ, 'orange_concrete');
  if (si3 < 6) { pb(89 + si3, 15 + si3, CZ - 1, 'black_concrete'); pb(89 + si3, 15 + si3, CZ + 1, 'black_concrete'); }
}
// anchor pockets + hawse
ps(93, 21, CZ - 3, 'iron_trapdoor[facing=north,half=bottom,open=false]');
ps(93, 21, CZ + 3, 'iron_trapdoor[facing=south,half=bottom,open=false]');
fill(91, 20, CZ - 4, 91, 21, CZ - 4, 'iron_bars');
// draft marks + name on the bow
ps(90, 20, CZ - 5, 'white_concrete'); ps(88, 19, CZ - 5, 'white_concrete');
ps(86, 20, CZ + 5, 'white_concrete'); ps(84, 19, CZ + 5, 'white_concrete');
ck('HULL');

// ---------- CRACKED FLOE UNDER THE BOW (the ship is riding onto it) ----------
var kx, kz;
for (kx = 84; kx <= 104; kx++) {
  for (kz = 32; kz <= 54; kz++) {
    if ((kx + kz * 3) % 17 === 0) { ps(kx, iceY + 1, kz, 'packed_ice_slab'); }
    if ((kx * 2 + kz) % 23 === 0) { pb(kx, iceY, kz, 'blue_ice'); }
  }
}
for (kx = 88; kx <= 102; kx++) {
  kz = 43 + Math.round(Math.sin(kx * 0.5) * 4);
  pb(kx, iceY, kz, 'water');
  pb(kx, iceY, kz + 1, 'ice');
}
// pressure ridge shoved up by the bow
for (kx = 96; kx <= 101; kx++) {
  for (kz = 36; kz <= 50; kz++) {
    if ((kx * 3 + kz * 5) % 7 < 3) { pb(kx, iceY + 1, kz, 'packed_ice'); }
    if ((kx * 5 + kz * 3) % 11 < 2) { pb(kx, iceY + 2, kz, 'snow_block'); }
  }
}
ck('FLOE');

// ---------- SUPERSTRUCTURE ----------
// L1 accommodation block
fill(46, 23, 37, 64, 26, 49, whitePal);
fill(47, 23, 38, 63, 26, 48, 'air');
fill(46, 27, 36, 64, 27, 50, deckPal);          // L1 roof = walkway deck (extends for the stair)
// L1 windows (crew mess forward, cabins aft)
var wx3;
for (wx3 = 48; wx3 <= 62; wx3 += 2) {
  fill(wx3, 24, 37, wx3, 25, 37, 'light_blue_stained_glass');
  fill(wx3, 24, 49, wx3, 25, 49, 'light_blue_stained_glass');
}
fill(64, 24, 40, 64, 25, 46, 'light_blue_stained_glass');
// L1 doors to the side decks
fill(46, 23, 40, 46, 24, 40, 'air');
ps(46, 23, 40, 'iron_door[facing=west,half=lower,hinge=left]');
ps(46, 24, 40, 'iron_door[facing=west,half=upper,hinge=left]');
fill(64, 23, 43, 64, 24, 43, 'air');

// L2
fill(48, 28, 38, 62, 31, 48, whitePal);
fill(49, 28, 39, 61, 31, 47, 'air');
fill(48, 32, 36, 62, 32, 50, deckPal);
for (wx3 = 50; wx3 <= 60; wx3 += 2) {
  fill(wx3, 29, 38, wx3, 30, 38, 'light_blue_stained_glass');
  fill(wx3, 29, 48, wx3, 30, 48, 'light_blue_stained_glass');
}
fill(48, 28, 42, 48, 29, 42, 'air');

// BRIDGE + wings
fill(50, 33, 37, 60, 36, 49, whitePal);
fill(51, 33, 38, 59, 36, 48, 'air');
fill(50, 37, 36, 60, 37, 50, whitePal);          // bridge roof with a small overhang
// wraparound bridge glass
fill(60, 34, 38, 60, 35, 48, 'light_blue_stained_glass');
fill(50, 34, 39, 50, 35, 47, 'light_blue_stained_glass');
fill(51, 34, 37, 59, 35, 37, 'light_blue_stained_glass');
fill(51, 34, 49, 59, 35, 49, 'light_blue_stained_glass');
// bridge WINGS (port + starboard), supported from below (never floating)
fill(53, 32, 33, 57, 32, 36, deckPal);
fill(53, 32, 50, 57, 32, 53, deckPal);
var wgz;
for (wgz = 33; wgz <= 35; wgz++) {
  ps(53, 33, wgz, 'iron_bars'); ps(57, 33, wgz, 'iron_bars');
  ps(53, 33, 96 - wgz - 43 + 43, 'air');
}
for (wgz = 51; wgz <= 53; wgz++) { ps(53, 33, wgz, 'iron_bars'); ps(57, 33, wgz, 'iron_bars'); }
fill(53, 33, 33, 57, 33, 33, 'iron_bars');
fill(53, 33, 53, 57, 33, 53, 'iron_bars');
ps(55, 31, 34, 'white_concrete'); ps(55, 30, 34, 'white_concrete');   // wing support column
ps(55, 31, 52, 'white_concrete'); ps(55, 30, 52, 'white_concrete');
ps(55, 29, 34, 'iron_bars'); ps(55, 29, 52, 'iron_bars');
// mast + radar + navigation lights
fill(55, 38, CZ, 55, 48, CZ, 'iron_block');
fill(53, 44, CZ, 57, 44, CZ, 'iron_bars');
fill(55, 44, 41, 55, 44, 45, 'iron_bars');
makeSphere(55, 47, CZ, 'white_concrete', 2, false);
ps(55, 49, CZ, 'lightning_rod[facing=up]');
ps(53, 43, CZ, 'redstone_lamp'); ps(57, 43, CZ, 'redstone_lamp');
ps(55, 40, 41, 'sea_lantern'); ps(55, 40, 45, 'sea_lantern');
// floodlight masts on the bridge roof
ps(51, 38, 38, 'sea_lantern'); ps(59, 38, 38, 'sea_lantern');
ps(51, 38, 48, 'sea_lantern'); ps(59, 38, 48, 'sea_lantern');
ck('HOUSE');

// ---------- FUNNEL (red with a white band, black cap) ----------
makeCylinder(41, 28, CZ, 'red_concrete', 4, 10, true);
makeCylinder(41, 33, CZ, 'white_concrete', 4, 2, true);
makeCylinder(41, 38, CZ, 'black_concrete', 4, 1, true);
makeCylinder(41, 39, CZ, 'gray_concrete', 3, 1, true);
fill(41, 39, CZ, 41, 39, CZ, 'campfire[lit=true]');
ps(38, 34, CZ, 'white_concrete'); ps(44, 34, CZ, 'white_concrete');
// funnel exhaust pipes
fill(39, 39, CZ - 2, 39, 41, CZ - 2, 'iron_bars');
fill(43, 39, CZ + 2, 43, 41, CZ + 2, 'iron_bars');
ck('FUNNEL');

// ---------- HELIDECK + HELICOPTER (aft) ----------
fill(23, 26, 36, 37, 26, 50, deckPal);
var hpx, hpz;
for (hpx = 24; hpx <= 36; hpx += 4) {
  for (hpz = 37; hpz <= 49; hpz += 4) {
    fill(hpx, 23, hpz, hpx, 25, hpz, 'iron_block');
  }
}
// deck circle + H marking
for (hpx = 25; hpx <= 35; hpx++) {
  for (hpz = 38; hpz <= 48; hpz++) {
    var ddx = hpx - 30, ddz = hpz - 43;
    var rr = ddx * ddx + ddz * ddz;
    if (rr <= 30 && rr >= 21) { pb(hpx, 26, hpz, 'yellow_concrete'); }
  }
}
fill(28, 26, 41, 28, 26, 45, 'white_concrete');
fill(32, 26, 41, 32, 26, 45, 'white_concrete');
fill(29, 26, 43, 31, 26, 43, 'white_concrete');
// safety net railing round the helideck
var hrz;
for (hrz = 36; hrz <= 50; hrz++) {
  if (hrz % 2 === 0) { ps(23, 27, hrz, 'iron_bars'); ps(37, 27, hrz, 'iron_bars'); }
}
for (hpx = 23; hpx <= 37; hpx++) {
  if (hpx % 2 === 1) { ps(hpx, 27, 36, 'iron_bars'); ps(hpx, 27, 50, 'iron_bars'); }
}
// the helicopter itself
fill(27, 28, 42, 33, 29, 44, 'white_concrete');
fill(31, 28, 42, 33, 29, 44, 'red_concrete');
fill(33, 28, 42, 33, 29, 44, 'light_blue_stained_glass');
fill(24, 29, 43, 27, 29, 43, 'white_concrete');                  // tail boom
fill(23, 29, 43, 23, 31, 43, 'red_concrete');                    // tail fin
ps(23, 30, 42, 'iron_bars'); ps(23, 30, 44, 'iron_bars');        // tail rotor
fill(29, 30, 43, 31, 30, 43, 'gray_concrete');                   // rotor head
pb(30, 31, 43, 'iron_block');
var rb;
for (rb = 1; rb <= 6; rb++) {
  ps(30 + rb, 31, 43, 'light_gray_stained_glass_pane');
  ps(30 - rb, 31, 43, 'light_gray_stained_glass_pane');
  ps(30, 31, 43 + rb, 'light_gray_stained_glass_pane');
  ps(30, 31, 43 - rb, 'light_gray_stained_glass_pane');
}
ps(28, 27, 42, 'iron_bars'); ps(28, 27, 44, 'iron_bars');        // skids
ps(32, 27, 42, 'iron_bars'); ps(32, 27, 44, 'iron_bars');
ck('HELI');

// ---------- WORKING DECKS: cranes, containers, hatches ----------
function container(x, z, col, len) {
  fill(x, deckY + 1, z, x + len, deckY + 3, z + 2, col);
  var cxx;
  for (cxx = x; cxx <= x + len; cxx++) {
    if (cxx % 2 === 0) {
      ps(cxx, deckY + 2, z - 1, 'iron_bars');
    }
  }
  ps(x, deckY + 2, z, 'iron_trapdoor[facing=west,half=bottom,open=false]');
  fill(x, deckY + 4, z, x + len, deckY + 4, z + 2, 'gray_concrete');
}
container(66, 38, 'blue_concrete', 5);
container(66, 45, 'lime_concrete', 5);
container(73, 41, 'orange_concrete', 4);
container(38, 38, 'cyan_concrete', 4);
container(38, 45, 'red_concrete', 4);

// deck crane (A-frame + jib), forward
fill(80, deckY + 1, 40, 80, deckY + 12, 40, 'gray_concrete');
fill(80, deckY + 1, 46, 80, deckY + 12, 46, 'gray_concrete');
fill(80, deckY + 13, 40, 80, deckY + 13, 46, 'gray_concrete');
fill(80, deckY + 13, CZ, 74, deckY + 13, CZ, 'iron_block');
fill(74, deckY + 9, CZ, 74, deckY + 12, CZ, 'iron_bars');
pb(74, deckY + 8, CZ, 'barrel[facing=up]');
ps(78, deckY + 12, CZ, 'gray_concrete');
// aft crane / A-frame over the stern
fill(36, deckY + 1, 38, 36, deckY + 9, 38, 'yellow_concrete');
fill(36, deckY + 1, 48, 36, deckY + 9, 48, 'yellow_concrete');
fill(36, deckY + 10, 38, 36, deckY + 10, 48, 'yellow_concrete');
fill(36, deckY + 10, CZ, 32, deckY + 10, CZ, 'iron_block');
fill(32, deckY + 6, CZ, 32, deckY + 9, CZ, 'iron_bars');
pb(32, deckY + 5, CZ, 'chest[facing=south]');
// winches, bollards, deck fittings
var dfx;
for (dfx = 26; dfx <= 92; dfx += 8) {
  pb(dfx, deckY + 1, 37, 'anvil[facing=north]');
  pb(dfx, deckY + 1, 49, 'anvil[facing=north]');
}
for (dfx = 30; dfx <= 88; dfx += 12) {
  ps(dfx, deckY + 1, 39, 'cauldron');
  ps(dfx, deckY + 1, 47, 'cauldron');
}
fill(84, deckY + 1, 41, 86, deckY + 2, 45, 'gray_concrete');      // windlass housing
ps(85, deckY + 3, CZ, 'lantern[hanging=false]');
// lifeboats in davits, both sides
fill(66, 28, 36, 70, 29, 36, 'orange_concrete');
fill(66, 28, 50, 70, 29, 50, 'orange_concrete');
ps(66, 30, 36, 'iron_bars'); ps(70, 30, 36, 'iron_bars');
ps(66, 30, 50, 'iron_bars'); ps(70, 30, 50, 'iron_bars');
fill(66, 31, 36, 70, 31, 36, 'gray_concrete');
fill(66, 31, 50, 70, 31, 50, 'gray_concrete');
ck('DECKGEAR');

// ---------- STAIRS (accommodation ladders, starboard side deck) ----------
staircase(45, 36, 23, 28, 'east', { width: 1, material: 'iron_block', rail: 'iron_bars' });
staircase(52, 36, 28, 33, 'east', { width: 1, material: 'iron_block', rail: 'iron_bars' });
// doors off each landing into the house
fill(51, 33, 38, 51, 34, 38, 'air');
ck('STAIRS');

// ---------- INTERIORS ----------
// BRIDGE (floor 32, walk 33, ceiling 37)
fill(51, 32, 38, 59, 32, 48, 'polished_andesite');
rug(53, 33, 41, 5, 4, 'blue', 'gray');
var bcx;
for (bcx = 52; bcx <= 58; bcx++) {
  pb(bcx, 33, 47, 'gray_concrete');
  ps(bcx, 34, 47, 'light_gray_stained_glass_pane');
}
ps(54, 33, 46, 'lectern[facing=south]');                       // helm console
ps(56, 33, 46, 'daylight_detector');
pb(55, 33, 46, 'observer[facing=south]');
chairStair(54, 33, 45, 'dark_oak_stairs', 'south');
chairStair(56, 33, 45, 'dark_oak_stairs', 'south');
pb(52, 33, 40, 'dark_oak_fence'); pb(52, 34, 40, 'light_gray_carpet');    // chart table
pb(53, 33, 40, 'dark_oak_fence'); pb(53, 34, 40, 'light_gray_carpet');
ps(52, 33, 41, 'cartography_table');
pb(58, 33, 40, 'barrel[facing=up]'); pb(58, 33, 41, 'chest[facing=east]');
ps(58, 33, 44, 'bell[facing=west,attachment=single_wall]');
ps(53, 36, 43, 'lantern[hanging=true]'); ps(57, 36, 43, 'lantern[hanging=true]');
ps(55, 36, 39, 'lantern[hanging=true]');
// CREW MESS on L1 (floor = deck 22, walk 23, ceiling 27)
fill(47, 22, 38, 63, 22, 48, 'spruce_planks');
rug(50, 23, 40, 6, 5, 'red', 'white');
fill(51, 23, 41, 54, 23, 41, 'spruce_fence');
fill(51, 24, 41, 54, 24, 41, 'white_carpet');
chairStair(51, 23, 40, 'spruce_stairs', 'south');
chairStair(53, 23, 40, 'spruce_stairs', 'south');
chairStair(51, 23, 42, 'spruce_stairs', 'north');
chairStair(53, 23, 42, 'spruce_stairs', 'north');
fill(58, 23, 45, 61, 23, 45, 'spruce_fence');
fill(58, 24, 45, 61, 24, 45, 'white_carpet');
chairStair(58, 23, 44, 'spruce_stairs', 'south');
chairStair(60, 23, 44, 'spruce_stairs', 'south');
// galley run
ps(48, 23, 47, 'furnace[facing=north,lit=true]');
pb(49, 23, 47, 'stripped_spruce_log'); ps(49, 24, 47, 'spruce_slab[type=bottom]');
ps(50, 23, 47, 'smoker[facing=north,lit=false]');
ps(51, 23, 47, 'water_cauldron[level=3]');
pb(52, 23, 47, 'barrel[facing=up]'); pb(53, 23, 47, 'barrel[facing=up]');
shelfWall(60, 23, 39, 'east', 4, 2);
ps(62, 23, 41, 'lectern[facing=west]');
pb(62, 23, 46, 'chest[facing=west]');
ps(50, 26, 43, 'lantern[hanging=true]'); ps(56, 26, 43, 'lantern[hanging=true]');
ps(60, 26, 43, 'lantern[hanging=true]');
ps(48, 23, 39, 'potted_fern');
ck('INTERIOR');

// ---------- FINAL SNOW DUSTING + SCENE DETAIL ----------
var sx3, sz3, si4;
for (si4 = 0; si4 < 120; si4++) {
  sx3 = (si4 * 17) % 112;
  sz3 = (si4 * 29) % 96;
  if (sx3 > 22 && sx3 < 97 && sz3 > 33 && sz3 < 53) { continue; }
  ps(sx3, iceH(sx3, sz3) + 1, sz3, 'snow');
}
// meltwater pools on the floe
for (si4 = 0; si4 < 26; si4++) {
  sx3 = 40 + (si4 * 19) % 66;
  sz3 = 4 + (si4 * 11) % 26;
  pb(sx3, iceY, sz3, 'water'); pb(sx3 + 1, iceY, sz3, 'water');
}
for (si4 = 0; si4 < 22; si4++) {
  sx3 = 44 + (si4 * 23) % 60;
  sz3 = 62 + (si4 * 13) % 30;
  pb(sx3, iceY, sz3, 'water'); pb(sx3, iceY, sz3 + 1, 'water');
}
// depot on the floe alongside: sledges, fuel drums, a marker flag line
fill(70, iceY + 1, 60, 74, iceY + 1, 61, 'spruce_slab[type=bottom]');
pb(70, iceY + 2, 60, 'barrel[facing=up]'); pb(71, iceY + 2, 60, 'barrel[facing=up]');
pb(72, iceY + 2, 61, 'barrel[facing=up]');
pb(76, iceY + 1, 58, 'red_concrete'); pb(76, iceY + 2, 58, 'red_concrete');
var fgi;
for (fgi = 0; fgi < 7; fgi++) {
  pb(60 + fgi * 4, iceY + 1, 66, 'oak_fence');
  pb(60 + fgi * 4, iceY + 2, 66, 'oak_fence');
  ps(60 + fgi * 4, iceY + 2, 67, 'red_wall_banner[facing=south]');
}
ck('SCENE');
ck('DONE');

Static Renders

Antarctic icebreaker in pack ice (guided) isometric viewisometric
Antarctic icebreaker in pack ice (guided) front viewfront
Antarctic icebreaker in pack ice (guided) side viewside
Antarctic icebreaker in pack ice (guided) back viewback
Antarctic icebreaker in pack ice (guided) top viewtop