From f59d5bb30d314ef2d694f06df0df6810f5ff44d0 Mon Sep 17 00:00:00 2001 From: "local-model/engine-L2-grok-4.5" Date: Sat, 19 Sep 2026 18:14:39 +0200 Subject: [PATCH] engine-c: clearer BASE/REFINERY silhouettes --- engine-c/src/snapshot.c | 121 ++++++++++++++++++++++++++++++---------- engine-c/src/sprites.c | 101 +++++++++++++++++++++++++++------ 2 files changed, 178 insertions(+), 44 deletions(-) diff --git a/engine-c/src/snapshot.c b/engine-c/src/snapshot.c index e9b0f31..00c17d7 100644 --- a/engine-c/src/snapshot.c +++ b/engine-c/src/snapshot.c @@ -586,7 +586,7 @@ static void draw_bld(Building *b, int sx, int sy) { switch (b->type) { case BT_BASE: if (b->faction == FACTION_EVOLVED) { - /* organic lobes + dark central pit (mutant hive) */ + /* hive: lobes + membrane ridges + spine + pit eye (KKND HQ read) */ disc(sx + 14, sy + 18, 14, ok, og, ob); disc(sx + 14, sy + 18, 12, br, bg, bb); disc(sx + W - 14, sy + 18, 14, ok, og, ob); @@ -597,29 +597,71 @@ static void draw_bld(Building *b, int sx, int sy) { disc(sx + W - 16, sy + H - 16, 10, br, bg, bb); disc(sx + W/2, sy + H/2, 16, ok, og, ob); disc(sx + W/2, sy + H/2, 14, br, bg, bb); - disc(sx + W/2, sy + H/2, 8, 28, 18, 22); /* dark pit */ - disc(sx + W/2, sy + H/2, 4, 60, 20, 30); - disc(sx + W/2 - 10, sy + 10, 5, lr, lg, lb); /* blister */ + /* membrane ridges between lobes */ + line(sx + 18, sy + 20, sx + W/2 - 8, sy + H/2 - 4, ok, og, ob); + line(sx + W - 18, sy + 20, sx + W/2 + 8, sy + H/2 - 4, ok, og, ob); + line(sx + 18, sy + H - 18, sx + W/2 - 6, sy + H/2 + 6, ok, og, ob); + line(sx + W - 18, sy + H - 18, sx + W/2 + 6, sy + H/2 + 6, ok, og, ob); + /* dorsal spine + tendrils */ + fill_rect(sx + W/2 - 2, sy + 4, 4, H/2 - 8, ok, og, ob); + fill_rect(sx + W/2 - 1, sy + 5, 2, H/2 - 10, 90, 40, 55); + line(sx + W/2, sy + 8, sx + W/2 - 10, sy + 18, 70, 30, 45); + line(sx + W/2, sy + 8, sx + W/2 + 10, sy + 18, 70, 30, 45); + /* dark pit + glowing eye */ + disc(sx + W/2, sy + H/2, 8, 28, 18, 22); + disc(sx + W/2, sy + H/2, 5, 60, 20, 30); + disc(sx + W/2, sy + H/2, 3, 220, 60, 90); + disc(sx + W/2, sy + H/2, 1, 255, 180, 200); + ring(sx + W/2, sy + H/2, 10, 2, 50, 25, 35); /* pit rim */ + /* extra blisters */ + disc(sx + W/2 - 10, sy + 10, 5, lr, lg, lb); disc(sx + W/2 + 12, sy + H - 12, 4, lr, lg, lb); + disc(sx + 10, sy + H/2 + 2, 3, lr, lg, lb); + disc(sx + W - 10, sy + H/2 - 4, 3, lr, lg, lb); + disc(sx + W/2 + 8, sy + 14, 2, 180, 70, 100); } else { - /* Survivors: lime body + corner towers + central mast */ - fill_rect(sx + 4, sy + 4, 14, 14, ok, og, ob); /* NW tower */ + /* Survivors HQ: towers + walkways + dome + dish + entry (KKND HQ read) */ + fill_rect(sx + 4, sy + 4, 14, 14, ok, og, ob); fill_rect(sx + 6, sy + 6, 10, 10, br, bg, bb); - fill_rect(sx + W - 18, sy + 4, 14, 14, ok, og, ob); /* NE */ + fill_rect(sx + W - 18, sy + 4, 14, 14, ok, og, ob); fill_rect(sx + W - 16, sy + 6, 10, 10, br, bg, bb); - fill_rect(sx + 4, sy + H - 18, 14, 14, ok, og, ob); /* SW */ + fill_rect(sx + 4, sy + H - 18, 14, 14, ok, og, ob); fill_rect(sx + 6, sy + H - 16, 10, 10, br, bg, bb); - fill_rect(sx + W - 18, sy + H - 18, 14, 14, ok, og, ob); /* SE */ + fill_rect(sx + W - 18, sy + H - 18, 14, 14, ok, og, ob); fill_rect(sx + W - 16, sy + H - 16, 10, 10, br, bg, bb); + /* tower windows + corner lights */ + fill_rect(sx + 8, sy + 8, 3, 3, 200, 230, 255); + fill_rect(sx + W - 13, sy + 8, 3, 3, 200, 230, 255); + fill_rect(sx + 8, sy + H - 13, 3, 3, 200, 230, 255); + fill_rect(sx + W - 13, sy + H - 13, 3, 3, 200, 230, 255); + disc(sx + 7, sy + 5, 2, 255, 220, 80); + disc(sx + W - 7, sy + 5, 2, 255, 220, 80); + /* courtyard body + roof band */ fill_rect(sx + 14, sy + 14, W - 28, H - 28, ok, og, ob); fill_rect(sx + 16, sy + 16, W - 32, H - 32, br, bg, bb); - fill_rect(sx + 18, sy + 18, W - 36, 8, lr, lg, lb); /* roof band */ + fill_rect(sx + 18, sy + 18, W - 36, 8, lr, lg, lb); + /* walkways between towers */ + fill_rect(sx + 16, sy + 8, W - 32, 3, 90, 85, 70); + fill_rect(sx + 16, sy + H - 11, W - 32, 3, 90, 85, 70); + fill_rect(sx + 8, sy + 16, 3, H - 32, 90, 85, 70); + fill_rect(sx + W - 11, sy + 16, 3, H - 32, 90, 85, 70); + /* command dome + mast + radar dish */ disc(sx + W/2, sy + H/2 - 2, 10, ok, og, ob); disc(sx + W/2, sy + H/2 - 2, 8, lr, lg, lb); - disc(sx + W/2, sy + H/2 - 2, 4, 255, 250, 180); /* command dome */ - fill_rect(sx + W/2 - 2, sy + 2, 4, H/2 - 6, 200, 180, 60); /* mast */ - fill_rect(sx + W/2 - 6, sy + 2, 12, 3, 220, 210, 80); /* antenna */ - fill_rect(sx + W/2 - 6, sy + H - 12, 12, 6, 40, 38, 34); /* entry */ + disc(sx + W/2, sy + H/2 - 2, 4, 255, 250, 180); + fill_rect(sx + W/2 - 2, sy + 2, 4, H/2 - 6, 200, 180, 60); + fill_rect(sx + W/2 - 6, sy + 2, 12, 3, 220, 210, 80); + disc(sx + W/2 + 8, sy + 8, 5, ok, og, ob); /* dish */ + disc(sx + W/2 + 8, sy + 8, 3, 180, 200, 220); + line(sx + W/2 + 2, sy + 6, sx + W/2 + 8, sy + 8, 160, 150, 100); + /* entry bunker + blast doors */ + fill_rect(sx + W/2 - 8, sy + H - 14, 16, 8, ok, og, ob); + fill_rect(sx + W/2 - 6, sy + H - 12, 12, 6, 40, 38, 34); + fill_rect(sx + W/2 - 4, sy + H - 11, 3, 4, 70, 65, 55); + fill_rect(sx + W/2 + 1, sy + H - 11, 3, 4, 70, 65, 55); + /* side annex windows */ + fill_rect(sx + 18, sy + H/2 + 2, 6, 4, 160, 200, 230); + fill_rect(sx + W - 24, sy + H/2 + 2, 6, 4, 160, 200, 230); } break; case BT_WARFACTORY: @@ -657,34 +699,57 @@ static void draw_bld(Building *b, int sx, int sy) { fill_rect(sx + 12, sy + H - 9, W - 24, 2, 90, 75, 45); break; case BT_REFINERY: - /* latticed derrick tower + gantry + hopper + scrap tank (KKND oil-field read) */ - fill_rect(sx + 6, sy + H - 14, W - 12, 10, ok, og, ob); /* slab */ - fill_rect(sx + 8, sy + H - 12, W - 16, 6, 70, 62, 48); - /* derrick mast + lattice */ + /* oil-field: derrick + pumpjack + twin tanks + pipes + hopper (KKND read) */ + fill_rect(sx + 4, sy + H - 12, W - 8, 10, ok, og, ob); /* slab */ + fill_rect(sx + 6, sy + H - 10, W - 12, 6, 70, 62, 48); + /* latticed derrick mast */ fill_rect(sx + W/2 - 3, sy + 4, 6, H - 18, ok, og, ob); fill_rect(sx + W/2 - 2, sy + 5, 4, H - 20, 95, 85, 65); line(sx + W/2 - 6, sy + 10, sx + W/2 + 6, sy + 22, 55, 48, 38); line(sx + W/2 + 6, sy + 10, sx + W/2 - 6, sy + 22, 55, 48, 38); line(sx + W/2 - 6, sy + 24, sx + W/2 + 6, sy + 36, 55, 48, 38); line(sx + W/2 + 6, sy + 24, sx + W/2 - 6, sy + 36, 55, 48, 38); + line(sx + W/2 - 6, sy + 38, sx + W/2 + 6, sy + H - 18, 55, 48, 38); + line(sx + W/2 + 6, sy + 38, sx + W/2 - 6, sy + H - 18, 55, 48, 38); line(sx + W/2 - 5, sy + 8, sx + W/2 - 5, sy + H - 16, 40, 36, 30); line(sx + W/2 + 5, sy + 8, sx + W/2 + 5, sy + H - 16, 40, 36, 30); fill_rect(sx + W/2 - 7, sy + 2, 14, 5, ok, og, ob); /* crown */ fill_rect(sx + W/2 - 5, sy + 3, 10, 3, 200, 170, 80); /* beacon */ - /* gantry arm toward hopper */ + /* pumpjack horse-head (left of mast) */ + fill_rect(sx + 8, sy + H/2 - 2, 4, H/2 - 8, ok, og, ob); + fill_rect(sx + 9, sy + H/2, 2, H/2 - 12, 90, 80, 60); + fill_rect(sx + 6, sy + H/2 - 6, 14, 4, ok, og, ob); + fill_rect(sx + 7, sy + H/2 - 5, 12, 2, 110, 95, 70); + disc(sx + 8, sy + H/2 - 8, 4, ok, og, ob); /* horse head */ + disc(sx + 8, sy + H/2 - 8, 2, 130, 110, 80); + line(sx + 10, sy + H/2 - 4, sx + W/2 - 4, sy + 16, 80, 70, 50); /* bridle cable */ + /* gantry arm + walkway toward hopper */ fill_rect(sx + W/2 + 2, sy + 14, W/2 - 10, 4, ok, og, ob); fill_rect(sx + W/2 + 3, sy + 15, W/2 - 12, 2, 120, 100, 60); + fill_rect(sx + W/2 + 4, sy + 18, W/2 - 16, 2, 70, 60, 45); /* catwalk */ line(sx + W/2 + 4, sy + 18, sx + W - 12, sy + H - 22, 90, 75, 50); - /* hopper / processing shed */ - fill_rect(sx + W - 22, sy + H - 30, 16, 16, ok, og, ob); - fill_rect(sx + W - 20, sy + H - 28, 12, 12, br, bg, bb); - fill_rect(sx + W - 18, sy + H - 26, 8, 6, 140, 110, 55); + /* hopper / processing shed + windows */ + fill_rect(sx + W - 24, sy + H - 32, 18, 18, ok, og, ob); + fill_rect(sx + W - 22, sy + H - 30, 14, 14, br, bg, bb); + fill_rect(sx + W - 20, sy + H - 28, 10, 6, 140, 110, 55); + fill_rect(sx + W - 18, sy + H - 26, 3, 3, 180, 220, 255); /* window */ + fill_rect(sx + W - 13, sy + H - 26, 3, 3, 180, 220, 255); fill_rect(sx + W - 16, sy + H - 18, 4, 4, 40, 36, 30); /* chute */ - /* scrap tank (left) */ - disc(sx + 14, sy + H - 20, 10, ok, og, ob); - disc(sx + 14, sy + H - 20, 8, 200, 165, 85); - ring(sx + 14, sy + H - 20, 5, 2, 90, 70, 45); - line(sx + 20, sy + H - 18, sx + W/2 - 4, sy + H - 14, 110, 90, 50); + /* twin scrap tanks */ + disc(sx + 14, sy + H - 18, 9, ok, og, ob); + disc(sx + 14, sy + H - 18, 7, 200, 165, 85); + ring(sx + 14, sy + H - 18, 4, 2, 90, 70, 45); + disc(sx + 28, sy + H - 16, 7, ok, og, ob); + disc(sx + 28, sy + H - 16, 5, 180, 150, 75); + ring(sx + 28, sy + H - 16, 3, 1, 80, 60, 40); + /* pipe runs tank→mast→hopper */ + line(sx + 20, sy + H - 16, sx + W/2 - 4, sy + H - 12, 110, 90, 50); + line(sx + 28, sy + H - 14, sx + W/2 - 2, sy + H - 14, 100, 85, 45); + line(sx + W/2 + 4, sy + H - 14, sx + W - 20, sy + H - 20, 100, 85, 45); + fill_rect(sx + W/2 - 1, sy + H - 16, 3, 4, 80, 70, 50); /* valve */ + /* oil stain pool under slab */ + disc(sx + W/2 - 8, sy + H - 6, 4, 40, 32, 20); + disc(sx + W/2 + 6, sy + H - 5, 3, 35, 28, 18); break; case BT_POWER: /* tall cooling towers + reactor block + steam plumes (KKND plant read) */ diff --git a/engine-c/src/sprites.c b/engine-c/src/sprites.c index 982d3ba..c6da581 100644 --- a/engine-c/src/sprites.c +++ b/engine-c/src/sprites.c @@ -398,7 +398,7 @@ SDL_Texture *sprites_make_bld(SDL_Renderer *r, BuildingType t, Faction f) { switch (t) { case BT_BASE: if (f == FACTION_EVOLVED) { - /* organic lobes + dark central pit (parity draw_bld) */ + /* hive: lobes + membrane ridges + spine + pit eye (KKND HQ read) */ disc(s, 14, 18, 14, ok, og, ob, 255); disc(s, 14, 18, 12, base.r, base.g, base.b, 255); disc(s, W - 14, 18, 14, ok, og, ob, 255); @@ -409,12 +409,30 @@ SDL_Texture *sprites_make_bld(SDL_Renderer *r, BuildingType t, Faction f) { disc(s, W - 16, H - 16, 10, base.r, base.g, base.b, 255); disc(s, W/2, H/2, 16, ok, og, ob, 255); disc(s, W/2, H/2, 14, base.r, base.g, base.b, 255); + /* membrane ridges between lobes */ + line(s, 18, 20, W/2 - 8, H/2 - 4, ok, og, ob, 255); + line(s, W - 18, 20, W/2 + 8, H/2 - 4, ok, og, ob, 255); + line(s, 18, H - 18, W/2 - 6, H/2 + 6, ok, og, ob, 255); + line(s, W - 18, H - 18, W/2 + 6, H/2 + 6, ok, og, ob, 255); + /* dorsal spine + tendrils */ + fill_rect(s, W/2 - 2, 4, 4, H/2 - 8, ok, og, ob, 255); + fill_rect(s, W/2 - 1, 5, 2, H/2 - 10, 90, 40, 55, 255); + line(s, W/2, 8, W/2 - 10, 18, 70, 30, 45, 255); + line(s, W/2, 8, W/2 + 10, 18, 70, 30, 45, 255); + /* dark pit + glowing eye */ disc(s, W/2, H/2, 8, 28, 18, 22, 255); - disc(s, W/2, H/2, 4, 60, 20, 30, 255); + disc(s, W/2, H/2, 5, 60, 20, 30, 255); + disc(s, W/2, H/2, 3, 220, 60, 90, 255); + disc(s, W/2, H/2, 1, 255, 180, 200, 255); + ring(s, W/2, H/2, 10, 2, 50, 25, 35, 255); /* pit rim */ + /* extra blisters */ disc(s, W/2 - 10, 10, 5, lite.r, lite.g, lite.b, 255); disc(s, W/2 + 12, H - 12, 4, lite.r, lite.g, lite.b, 255); + disc(s, 10, H/2 + 2, 3, lite.r, lite.g, lite.b, 255); + disc(s, W - 10, H/2 - 4, 3, lite.r, lite.g, lite.b, 255); + disc(s, W/2 + 8, 14, 2, 180, 70, 100, 255); } else { - /* Survivors: corner towers + central mast (parity draw_bld) */ + /* Survivors HQ: towers + walkways + dome + dish + entry (KKND HQ read) */ fill_rect(s, 4, 4, 14, 14, ok, og, ob, 255); fill_rect(s, 6, 6, 10, 10, base.r, base.g, base.b, 255); fill_rect(s, W - 18, 4, 14, 14, ok, og, ob, 255); @@ -423,15 +441,39 @@ SDL_Texture *sprites_make_bld(SDL_Renderer *r, BuildingType t, Faction f) { fill_rect(s, 6, H - 16, 10, 10, base.r, base.g, base.b, 255); fill_rect(s, W - 18, H - 18, 14, 14, ok, og, ob, 255); fill_rect(s, W - 16, H - 16, 10, 10, base.r, base.g, base.b, 255); + /* tower windows + corner lights */ + fill_rect(s, 8, 8, 3, 3, 200, 230, 255, 255); + fill_rect(s, W - 13, 8, 3, 3, 200, 230, 255, 255); + fill_rect(s, 8, H - 13, 3, 3, 200, 230, 255, 255); + fill_rect(s, W - 13, H - 13, 3, 3, 200, 230, 255, 255); + disc(s, 7, 5, 2, 255, 220, 80, 255); + disc(s, W - 7, 5, 2, 255, 220, 80, 255); + /* courtyard body + roof band */ fill_rect(s, 14, 14, W - 28, H - 28, ok, og, ob, 255); fill_rect(s, 16, 16, W - 32, H - 32, base.r, base.g, base.b, 255); fill_rect(s, 18, 18, W - 36, 8, lite.r, lite.g, lite.b, 255); + /* walkways between towers */ + fill_rect(s, 16, 8, W - 32, 3, 90, 85, 70, 255); + fill_rect(s, 16, H - 11, W - 32, 3, 90, 85, 70, 255); + fill_rect(s, 8, 16, 3, H - 32, 90, 85, 70, 255); + fill_rect(s, W - 11, 16, 3, H - 32, 90, 85, 70, 255); + /* command dome + mast + radar dish */ disc(s, W/2, H/2 - 2, 10, ok, og, ob, 255); disc(s, W/2, H/2 - 2, 8, lite.r, lite.g, lite.b, 255); disc(s, W/2, H/2 - 2, 4, 255, 250, 180, 255); fill_rect(s, W/2 - 2, 2, 4, H/2 - 6, 200, 180, 60, 255); fill_rect(s, W/2 - 6, 2, 12, 3, 220, 210, 80, 255); + disc(s, W/2 + 8, 8, 5, ok, og, ob, 255); /* dish */ + disc(s, W/2 + 8, 8, 3, 180, 200, 220, 255); + line(s, W/2 + 2, 6, W/2 + 8, 8, 160, 150, 100, 255); + /* entry bunker + blast doors */ + fill_rect(s, W/2 - 8, H - 14, 16, 8, ok, og, ob, 255); fill_rect(s, W/2 - 6, H - 12, 12, 6, 40, 38, 34, 255); + fill_rect(s, W/2 - 4, H - 11, 3, 4, 70, 65, 55, 255); + fill_rect(s, W/2 + 1, H - 11, 3, 4, 70, 65, 55, 255); + /* side annex slits */ + fill_rect(s, 18, H/2 + 2, 6, 4, 160, 200, 230, 255); + fill_rect(s, W - 24, H/2 + 2, 6, 4, 160, 200, 230, 255); } break; case BT_WARFACTORY: @@ -465,30 +507,57 @@ SDL_Texture *sprites_make_bld(SDL_Renderer *r, BuildingType t, Faction f) { fill_rect(s, 12, H - 9, W - 24, 2, 90, 75, 45, 255); break; case BT_REFINERY: - /* latticed derrick tower + gantry + hopper + scrap tank (parity draw_bld) */ - fill_rect(s, 6, H - 14, W - 12, 10, ok, og, ob, 255); - fill_rect(s, 8, H - 12, W - 16, 6, 70, 62, 48, 255); + /* oil-field: derrick + pumpjack + twin tanks + pipes + hopper (KKND read) */ + fill_rect(s, 4, H - 12, W - 8, 10, ok, og, ob, 255); /* slab */ + fill_rect(s, 6, H - 10, W - 12, 6, 70, 62, 48, 255); + /* latticed derrick mast */ fill_rect(s, W/2 - 3, 4, 6, H - 18, ok, og, ob, 255); fill_rect(s, W/2 - 2, 5, 4, H - 20, 95, 85, 65, 255); line(s, W/2 - 6, 10, W/2 + 6, 22, 55, 48, 38, 255); line(s, W/2 + 6, 10, W/2 - 6, 22, 55, 48, 38, 255); line(s, W/2 - 6, 24, W/2 + 6, 36, 55, 48, 38, 255); line(s, W/2 + 6, 24, W/2 - 6, 36, 55, 48, 38, 255); + line(s, W/2 - 6, 38, W/2 + 6, H - 18, 55, 48, 38, 255); + line(s, W/2 + 6, 38, W/2 - 6, H - 18, 55, 48, 38, 255); line(s, W/2 - 5, 8, W/2 - 5, H - 16, 40, 36, 30, 255); line(s, W/2 + 5, 8, W/2 + 5, H - 16, 40, 36, 30, 255); - fill_rect(s, W/2 - 7, 2, 14, 5, ok, og, ob, 255); - fill_rect(s, W/2 - 5, 3, 10, 3, 200, 170, 80, 255); + fill_rect(s, W/2 - 7, 2, 14, 5, ok, og, ob, 255); /* crown */ + fill_rect(s, W/2 - 5, 3, 10, 3, 200, 170, 80, 255); /* beacon */ + /* pumpjack horse-head (left of mast) */ + fill_rect(s, 8, H/2 - 2, 4, H/2 - 8, ok, og, ob, 255); + fill_rect(s, 9, H/2, 2, H/2 - 12, 90, 80, 60, 255); + fill_rect(s, 6, H/2 - 6, 14, 4, ok, og, ob, 255); + fill_rect(s, 7, H/2 - 5, 12, 2, 110, 95, 70, 255); + disc(s, 8, H/2 - 8, 4, ok, og, ob, 255); /* horse head */ + disc(s, 8, H/2 - 8, 2, 130, 110, 80, 255); + line(s, 10, H/2 - 4, W/2 - 4, 16, 80, 70, 50, 255); /* bridle cable */ + /* gantry arm + walkway toward hopper */ fill_rect(s, W/2 + 2, 14, W/2 - 10, 4, ok, og, ob, 255); fill_rect(s, W/2 + 3, 15, W/2 - 12, 2, 120, 100, 60, 255); + fill_rect(s, W/2 + 4, 18, W/2 - 16, 2, 70, 60, 45, 255); /* catwalk */ line(s, W/2 + 4, 18, W - 12, H - 22, 90, 75, 50, 255); - fill_rect(s, W - 22, H - 30, 16, 16, ok, og, ob, 255); - fill_rect(s, W - 20, H - 28, 12, 12, base.r, base.g, base.b, 255); - fill_rect(s, W - 18, H - 26, 8, 6, 140, 110, 55, 255); - fill_rect(s, W - 16, H - 18, 4, 4, 40, 36, 30, 255); - disc(s, 14, H - 20, 10, ok, og, ob, 255); - disc(s, 14, H - 20, 8, 200, 165, 85, 255); - ring(s, 14, H - 20, 5, 2, 90, 70, 45, 255); - line(s, 20, H - 18, W/2 - 4, H - 14, 110, 90, 50, 255); + /* hopper / processing shed + windows */ + fill_rect(s, W - 24, H - 32, 18, 18, ok, og, ob, 255); + fill_rect(s, W - 22, H - 30, 14, 14, base.r, base.g, base.b, 255); + fill_rect(s, W - 20, H - 28, 10, 6, 140, 110, 55, 255); + fill_rect(s, W - 18, H - 26, 3, 3, 180, 220, 255, 255); /* window */ + fill_rect(s, W - 13, H - 26, 3, 3, 180, 220, 255, 255); + fill_rect(s, W - 16, H - 18, 4, 4, 40, 36, 30, 255); /* chute */ + /* twin scrap tanks */ + disc(s, 14, H - 18, 9, ok, og, ob, 255); + disc(s, 14, H - 18, 7, 200, 165, 85, 255); + ring(s, 14, H - 18, 4, 2, 90, 70, 45, 255); + disc(s, 28, H - 16, 7, ok, og, ob, 255); + disc(s, 28, H - 16, 5, 180, 150, 75, 255); + ring(s, 28, H - 16, 3, 1, 80, 60, 40, 255); + /* pipe runs tank→mast→hopper */ + line(s, 20, H - 16, W/2 - 4, H - 12, 110, 90, 50, 255); + line(s, 28, H - 14, W/2 - 2, H - 14, 100, 85, 45, 255); + line(s, W/2 + 4, H - 14, W - 20, H - 20, 100, 85, 45, 255); + fill_rect(s, W/2 - 1, H - 16, 3, 4, 80, 70, 50, 255); /* valve */ + /* oil stain pool under slab */ + disc(s, W/2 - 8, H - 6, 4, 40, 32, 20, 255); + disc(s, W/2 + 6, H - 5, 3, 35, 28, 18, 255); break; case BT_POWER: /* tall cooling towers + reactor block + steam plumes (KKND plant read) */