// red combine harvester in a wheat field
var x, y, z, i;
// ground: wheat field
fill(2, 10, 2, 60, 11, 60, 'dirt');
fill(2, 12, 2, 60, 12, 60, 'farmland');
for (x = 2; x <= 60; x++) {
for (z = 2; z <= 24; z++) {
ps(x, 13, z, 'wheat[age=7]');
}
}
// cut part behind the machine
fill(2, 12, 25, 60, 12, 60, 'dirt_path');
// straw trail
for (z = 46; z <= 60; z++) {
for (x = 28; x <= 32; x++) pb(x, 13, z, 'hay_block');
}
// wheels
// big front wheels
for (x = 20; x <= 22; x++) {
for (y = 13; y <= 21; y++) {
for (z = 22; z <= 30; z++) {
var d1 = Math.sqrt((y - 17) * (y - 17) + (z - 26) * (z - 26));
if (d1 <= 4.3) pb(x, y, z, 'black_concrete');
if (d1 <= 1.5) pb(x, y, z, 'gray_concrete');
}
}
}
for (x = 38; x <= 40; x++) {
for (y = 13; y <= 21; y++) {
for (z = 22; z <= 30; z++) {
var d2 = Math.sqrt((y - 17) * (y - 17) + (z - 26) * (z - 26));
if (d2 <= 4.3) pb(x, y, z, 'black_concrete');
if (d2 <= 1.5) pb(x, y, z, 'gray_concrete');
}
}
}
// small rear wheels
for (x = 22; x <= 23; x++) {
for (y = 13; y <= 17; y++) for (z = 38; z <= 42; z++) {
var d3 = Math.sqrt((y - 15) * (y - 15) + (z - 40) * (z - 40));
if (d3 <= 2.3) pb(x, y, z, 'black_concrete');
}
}
for (x = 37; x <= 38; x++) {
for (y = 13; y <= 17; y++) for (z = 38; z <= 42; z++) {
var d4 = Math.sqrt((y - 15) * (y - 15) + (z - 40) * (z - 40));
if (d4 <= 2.3) pb(x, y, z, 'black_concrete');
}
}
// main body
fill(23, 18, 20, 37, 26, 42, 'red_concrete');
fill(24, 19, 21, 36, 25, 41, 'air');
fill(23, 18, 20, 37, 18, 42, 'gray_concrete');
// grain tank on top
fill(24, 27, 24, 36, 30, 36, 'red_concrete');
fill(25, 28, 25, 35, 30, 35, 'air');
fill(25, 28, 25, 35, 28, 35, 'hay_block');
// cab
fill(26, 27, 18, 34, 32, 23, 'white_concrete');
fill(27, 28, 19, 33, 31, 22, 'air');
for (y = 28; y <= 31; y++) {
for (x = 27; x <= 33; x++) ps(x, y, 18, 'glass_pane');
for (z = 19; z <= 22; z++) { ps(26, y, z, 'glass_pane'); ps(34, y, z, 'glass_pane'); }
}
ps(30, 28, 21, 'spruce_stairs[facing=north]');
// feeder house to the header
fill(27, 17, 14, 33, 22, 20, 'red_concrete');
// header
fill(14, 13, 8, 46, 15, 14, 'red_concrete');
fill(15, 14, 9, 45, 15, 13, 'air');
// cutter bar
for (x = 14; x <= 46; x++) pb(x, 13, 8, 'iron_block');
// reel
for (x = 15; x <= 45; x++) {
pb(x, 18, 10, 'oak_log');
ps(x, 19, 10, 'oak_slab');
ps(x, 17, 10, 'oak_slab');
}
// crop dividers
fill(14, 14, 6, 14, 14, 8, 'white_concrete');
fill(46, 14, 6, 46, 14, 8, 'white_concrete');
// unloading auger
for (x = 8; x <= 24; x++) pb(x, 30, 30, 'light_gray_concrete');
fill(8, 28, 30, 8, 30, 30, 'light_gray_concrete');
// exhaust
fill(36, 27, 40, 36, 31, 40, 'gray_concrete');
// lights
pb(27, 33, 18, 'sea_lantern');
pb(33, 33, 18, 'sea_lantern');
// a tree at the edge
fill(54, 13, 52, 54, 18, 52, 'oak_log');
makeSphere(54, 19, 52, 'oak_leaves', 3, true);