engine-c: denser BT_POWER cooling/reactor/switchyard silhouettes

This commit is contained in:
local-model/engine-L2-grok-4.5 2026-09-19 19:21:46 +02:00
parent 205490c5fc
commit 7333e950ca
No known key found for this signature in database
2 changed files with 140 additions and 70 deletions

View file

@ -1006,46 +1006,81 @@ static void draw_bld(Building *b, int sx, int sy) {
fill_rect(sx + 24, sy + H - 7, 6, 2, 28, 22, 14); fill_rect(sx + 24, sy + H - 7, 6, 2, 28, 22, 14);
break; break;
case BT_POWER: case BT_POWER:
/* cooling towers + reactor + steam + yard/cables/fins (KKND plant) */ /* denser KKND plant: pad, twin cooling, reactor, stack, switchyard, steam */
fill_rect(sx + 3, sy + H - 10, W - 6, 8, ok, og, ob); fill_rect(sx + 2, sy + H - 11, W - 4, 9, ok, og, ob); /* slab */
fill_rect(sx + 4, sy + H - 8, W - 8, 5, 55, 50, 42); /* pad */ fill_rect(sx + 3, sy + H - 9, W - 6, 6, 55, 50, 42); /* pad */
fill_rect(sx + 5, sy + H - 7, 2, 2, 35, 32, 28); /* pad bolt L */ fill_rect(sx + 4, sy + H - 8, 2, 2, 35, 32, 28); /* pad bolt L */
fill_rect(sx + W - 7, sy + H - 7, 2, 2, 35, 32, 28); /* pad bolt R */ fill_rect(sx + W/2 - 1, sy + H - 8, 2, 2, 35, 32, 28); /* pad bolt C */
/* left cooling tower (taller cone) */ fill_rect(sx + W - 6, sy + H - 8, 2, 2, 35, 32, 28); /* pad bolt R */
fill_rect(sx + 4, sy + 8, 10, H - 18, ok, og, ob); fill_rect(sx + 3, sy + H - 4, W - 6, 2, 45, 40, 32); /* curb */
fill_rect(sx + 5, sy + 9, 8, H - 20, 95, 145, 195); /* left cooling tower (taller cone + bands) */
fill_rect(sx + 6, sy + 6, 6, 5, ok, og, ob); fill_rect(sx + 3, sy + 7, 11, H - 18, ok, og, ob);
fill_rect(sx + 7, sy + 5, 4, 4, 70, 120, 170); /* rim */ fill_rect(sx + 4, sy + 8, 9, H - 20, 95, 145, 195);
fill_rect(sx + 6, sy + 12, 1, H - 26, 70, 110, 150); /* cooling fin */ fill_rect(sx + 5, sy + 5, 7, 5, ok, og, ob);
fill_rect(sx + 11, sy + 12, 1, H - 26, 70, 110, 150); fill_rect(sx + 6, sy + 4, 5, 4, 70, 120, 170); /* rim */
disc(sx + 9, sy + 4, 3, 240, 248, 255); /* steam puff */ fill_rect(sx + 5, sy + 14, 1, H - 28, 70, 110, 150); /* cooling fin L */
disc(sx + 7, sy + 2, 2, 220, 235, 250); fill_rect(sx + 11, sy + 14, 1, H - 28, 70, 110, 150);
disc(sx + 11, sy + 3, 2, 230, 240, 252); fill_rect(sx + 5, sy + 18, 7, 1, 80, 125, 170); /* band */
fill_rect(sx + 5, sy + 28, 7, 1, 75, 118, 162);
fill_rect(sx + 6, sy + 22, 2, 2, 180, 220, 255); /* port window */
disc(sx + 8, sy + 3, 3, 240, 248, 255); /* steam puff */
disc(sx + 6, sy + 1, 2, 220, 235, 250);
disc(sx + 10, sy + 2, 2, 230, 240, 252);
disc(sx + 9, sy + 5, 2, 210, 228, 245);
/* right cooling tower */ /* right cooling tower */
fill_rect(sx + W - 14, sy + 10, 10, H - 20, ok, og, ob); fill_rect(sx + W - 14, sy + 9, 11, H - 20, ok, og, ob);
fill_rect(sx + W - 13, sy + 11, 8, H - 22, 85, 135, 185); fill_rect(sx + W - 13, sy + 10, 9, H - 22, 85, 135, 185);
fill_rect(sx + W - 12, sy + 8, 6, 4, ok, og, ob); fill_rect(sx + W - 12, sy + 7, 7, 4, ok, og, ob);
fill_rect(sx + W - 11, sy + 7, 4, 3, 65, 115, 165); fill_rect(sx + W - 11, sy + 6, 5, 3, 65, 115, 165);
fill_rect(sx + W - 12, sy + 14, 1, H - 28, 65, 105, 145); fill_rect(sx + W - 12, sy + 15, 1, H - 30, 65, 105, 145);
fill_rect(sx + W - 7, sy + 14, 1, H - 28, 65, 105, 145); fill_rect(sx + W - 6, sy + 15, 1, H - 30, 65, 105, 145);
disc(sx + W - 9, sy + 5, 3, 235, 245, 255); fill_rect(sx + W - 12, sy + 20, 7, 1, 70, 112, 155); /* band */
disc(sx + W - 7, sy + 3, 2, 210, 230, 250); fill_rect(sx + W - 12, sy + 30, 7, 1, 68, 108, 150);
disc(sx + W - 11, sy + 4, 2, 225, 238, 250); fill_rect(sx + W - 10, sy + 24, 2, 2, 170, 210, 245); /* port */
/* central reactor block + glow */ disc(sx + W - 9, sy + 4, 3, 235, 245, 255);
fill_rect(sx + W/2 - 5, sy + H/2 - 4, 10, H/2 - 2, ok, og, ob); disc(sx + W - 7, sy + 2, 2, 210, 230, 250);
fill_rect(sx + W/2 - 4, sy + H/2 - 2, 8, H/2 - 6, 55, 95, 150); disc(sx + W - 11, sy + 3, 2, 225, 238, 250);
fill_rect(sx + W/2 - 3, sy + H/2, 2, 3, 255, 200, 40); /* warn stripe */ disc(sx + W - 8, sy + 6, 2, 200, 220, 240);
/* central reactor block + glow + panels */
fill_rect(sx + W/2 - 6, sy + H/2 - 5, 12, H/2 - 1, ok, og, ob);
fill_rect(sx + W/2 - 5, sy + H/2 - 3, 10, H/2 - 5, 55, 95, 150);
fill_rect(sx + W/2 - 4, sy + H/2 - 1, 3, 3, 255, 200, 40); /* warn L */
fill_rect(sx + W/2 + 1, sy + H/2 - 1, 3, 3, 255, 200, 40); /* warn R */
fill_rect(sx + W/2 - 3, sy + H/2 + 4, 2, 2, 40, 70, 110); /* panel */
fill_rect(sx + W/2 + 1, sy + H/2 + 4, 2, 2, 40, 70, 110);
fill_rect(sx + W/2 - 2, sy + H/2 + 8, 4, 2, 200, 160, 40); /* hazard belt */
disc(sx + W/2, sy + H/2 + 2, 4, 120, 200, 255); disc(sx + W/2, sy + H/2 + 2, 4, 120, 200, 255);
disc(sx + W/2, sy + H/2 + 2, 2, 250, 252, 255); disc(sx + W/2, sy + H/2 + 2, 2, 250, 252, 255);
ring(sx + W/2, sy + H/2 + 2, 5, 1, 90, 160, 220);
line(sx + W/2, sy + 8, sx + W/2, sy + H - 10, 200, 230, 250); line(sx + W/2, sy + 8, sx + W/2, sy + H - 10, 200, 230, 250);
line(sx + 8, sy + H/2 + 2, sx + W - 8, sy + H/2 + 2, 180, 220, 245); line(sx + 8, sy + H/2 + 2, sx + W - 8, sy + H/2 + 2, 180, 220, 245);
/* switchyard box + cable runs */ /* exhaust stack + plume */
fill_rect(sx + W/2 - 8, sy + H - 14, 6, 5, ok, og, ob); fill_rect(sx + W/2 + 6, sy + 6, 4, H/2 - 8, ok, og, ob);
fill_rect(sx + W/2 - 7, sy + H - 13, 4, 3, 45, 42, 36); fill_rect(sx + W/2 + 7, sy + 7, 2, H/2 - 12, 60, 58, 52);
line(sx + W/2 - 5, sy + H - 14, sx + W/2 - 5, sy + H/2 + 6, 90, 85, 70); fill_rect(sx + W/2 + 6, sy + 4, 4, 3, 50, 48, 42); /* stack cap */
line(sx + W/2 + 4, sy + H - 12, sx + W - 10, sy + H/2 + 4, 80, 75, 60); disc(sx + W/2 + 8, sy + 2, 3, 180, 190, 200); /* smoke */
fill_rect(sx + 2, sy + H - 12, 2, 4, 50, 48, 40); /* fence post L */ disc(sx + W/2 + 9, sy + 0, 2, 160, 170, 180);
fill_rect(sx + W - 4, sy + H - 12, 2, 4, 50, 48, 40); /* fence post R */ /* switchyard: transformers + bus + insulators */
fill_rect(sx + W/2 - 10, sy + H - 16, 7, 6, ok, og, ob);
fill_rect(sx + W/2 - 9, sy + H - 15, 5, 4, 45, 42, 36);
fill_rect(sx + W/2 + 3, sy + H - 15, 6, 5, ok, og, ob);
fill_rect(sx + W/2 + 4, sy + H - 14, 4, 3, 50, 48, 40);
fill_rect(sx + W/2 - 8, sy + H - 17, 2, 2, 90, 85, 70); /* insulator */
fill_rect(sx + W/2 + 5, sy + H - 16, 2, 2, 90, 85, 70);
fill_rect(sx + W/2 - 1, sy + H - 18, 3, 2, 70, 68, 58); /* bus bar */
line(sx + W/2 - 6, sy + H - 16, sx + W/2 - 6, sy + H/2 + 6, 90, 85, 70);
line(sx + W/2 + 5, sy + H - 14, sx + W - 10, sy + H/2 + 4, 80, 75, 60);
line(sx + W/2 + 2, sy + H - 17, sx + W/2 + 7, sy + H/2 + 8, 85, 80, 65);
/* control booth + fence */
fill_rect(sx + 14, sy + H - 20, 8, 8, ok, og, ob);
fill_rect(sx + 15, sy + H - 19, 6, 6, 40, 55, 70);
fill_rect(sx + 16, sy + H - 18, 2, 2, 180, 220, 255); /* booth window */
fill_rect(sx + 19, sy + H - 18, 2, 2, 160, 200, 240);
fill_rect(sx + 17, sy + H - 15, 2, 3, 35, 32, 38); /* door */
fill_rect(sx + 2, sy + H - 13, 2, 4, 50, 48, 40); /* fence post L */
fill_rect(sx + W/2 - 12, sy + H - 13, 2, 4, 50, 48, 40);
fill_rect(sx + W - 4, sy + H - 13, 2, 4, 50, 48, 40); /* fence post R */
line(sx + 3, sy + H - 12, sx + W - 4, sy + H - 12, 60, 55, 45); /* fence rail */
break; break;
case BT_TURRET: case BT_TURRET:
/* denser KKND turret: berm+bunker+cupola+barrel+radar+coax */ /* denser KKND turret: berm+bunker+cupola+barrel+radar+coax */

View file

@ -812,46 +812,81 @@ SDL_Texture *sprites_make_bld(SDL_Renderer *r, BuildingType t, Faction f) {
fill_rect(s, 24, H - 7, 6, 2, 28, 22, 14, 255); fill_rect(s, 24, H - 7, 6, 2, 28, 22, 14, 255);
break; break;
case BT_POWER: case BT_POWER:
/* cooling towers + reactor + steam + yard/cables/fins (KKND plant) */ /* denser KKND plant: pad, twin cooling, reactor, stack, switchyard, steam */
fill_rect(s, 3, H - 10, W - 6, 8, ok, og, ob, 255); fill_rect(s, 2, H - 11, W - 4, 9, ok, og, ob, 255); /* slab */
fill_rect(s, 4, H - 8, W - 8, 5, 55, 50, 42, 255); /* pad */ fill_rect(s, 3, H - 9, W - 6, 6, 55, 50, 42, 255); /* pad */
fill_rect(s, 5, H - 7, 2, 2, 35, 32, 28, 255); /* pad bolt L */ fill_rect(s, 4, H - 8, 2, 2, 35, 32, 28, 255); /* pad bolt L */
fill_rect(s, W - 7, H - 7, 2, 2, 35, 32, 28, 255); /* pad bolt R */ fill_rect(s, W/2 - 1, H - 8, 2, 2, 35, 32, 28, 255); /* pad bolt C */
/* left cooling tower (taller cone) */ fill_rect(s, W - 6, H - 8, 2, 2, 35, 32, 28, 255); /* pad bolt R */
fill_rect(s, 4, 8, 10, H - 18, ok, og, ob, 255); fill_rect(s, 3, H - 4, W - 6, 2, 45, 40, 32, 255); /* curb */
fill_rect(s, 5, 9, 8, H - 20, 95, 145, 195, 255); /* left cooling tower (taller cone + bands) */
fill_rect(s, 6, 6, 6, 5, ok, og, ob, 255); fill_rect(s, 3, 7, 11, H - 18, ok, og, ob, 255);
fill_rect(s, 7, 5, 4, 4, 70, 120, 170, 255); /* rim */ fill_rect(s, 4, 8, 9, H - 20, 95, 145, 195, 255);
fill_rect(s, 6, 12, 1, H - 26, 70, 110, 150, 255); /* cooling fin */ fill_rect(s, 5, 5, 7, 5, ok, og, ob, 255);
fill_rect(s, 11, 12, 1, H - 26, 70, 110, 150, 255); fill_rect(s, 6, 4, 5, 4, 70, 120, 170, 255); /* rim */
disc(s, 9, 4, 3, 240, 248, 255, 255); /* steam puff */ fill_rect(s, 5, 14, 1, H - 28, 70, 110, 150, 255); /* cooling fin L */
disc(s, 7, 2, 2, 220, 235, 250, 255); fill_rect(s, 11, 14, 1, H - 28, 70, 110, 150, 255);
disc(s, 11, 3, 2, 230, 240, 252, 255); fill_rect(s, 5, 18, 7, 1, 80, 125, 170, 255); /* band */
fill_rect(s, 5, 28, 7, 1, 75, 118, 162, 255);
fill_rect(s, 6, 22, 2, 2, 180, 220, 255, 255); /* port window */
disc(s, 8, 3, 3, 240, 248, 255, 255); /* steam puff */
disc(s, 6, 1, 2, 220, 235, 250, 255);
disc(s, 10, 2, 2, 230, 240, 252, 255);
disc(s, 9, 5, 2, 210, 228, 245, 255);
/* right cooling tower */ /* right cooling tower */
fill_rect(s, W - 14, 10, 10, H - 20, ok, og, ob, 255); fill_rect(s, W - 14, 9, 11, H - 20, ok, og, ob, 255);
fill_rect(s, W - 13, 11, 8, H - 22, 85, 135, 185, 255); fill_rect(s, W - 13, 10, 9, H - 22, 85, 135, 185, 255);
fill_rect(s, W - 12, 8, 6, 4, ok, og, ob, 255); fill_rect(s, W - 12, 7, 7, 4, ok, og, ob, 255);
fill_rect(s, W - 11, 7, 4, 3, 65, 115, 165, 255); fill_rect(s, W - 11, 6, 5, 3, 65, 115, 165, 255);
fill_rect(s, W - 12, 14, 1, H - 28, 65, 105, 145, 255); fill_rect(s, W - 12, 15, 1, H - 30, 65, 105, 145, 255);
fill_rect(s, W - 7, 14, 1, H - 28, 65, 105, 145, 255); fill_rect(s, W - 6, 15, 1, H - 30, 65, 105, 145, 255);
disc(s, W - 9, 5, 3, 235, 245, 255, 255); fill_rect(s, W - 12, 20, 7, 1, 70, 112, 155, 255); /* band */
disc(s, W - 7, 3, 2, 210, 230, 250, 255); fill_rect(s, W - 12, 30, 7, 1, 68, 108, 150, 255);
disc(s, W - 11, 4, 2, 225, 238, 250, 255); fill_rect(s, W - 10, 24, 2, 2, 170, 210, 245, 255); /* port */
/* central reactor block + glow */ disc(s, W - 9, 4, 3, 235, 245, 255, 255);
fill_rect(s, W/2 - 5, H/2 - 4, 10, H/2 - 2, ok, og, ob, 255); disc(s, W - 7, 2, 2, 210, 230, 250, 255);
fill_rect(s, W/2 - 4, H/2 - 2, 8, H/2 - 6, 55, 95, 150, 255); disc(s, W - 11, 3, 2, 225, 238, 250, 255);
fill_rect(s, W/2 - 3, H/2, 2, 3, 255, 200, 40, 255); /* warn stripe */ disc(s, W - 8, 6, 2, 200, 220, 240, 255);
/* central reactor block + glow + panels */
fill_rect(s, W/2 - 6, H/2 - 5, 12, H/2 - 1, ok, og, ob, 255);
fill_rect(s, W/2 - 5, H/2 - 3, 10, H/2 - 5, 55, 95, 150, 255);
fill_rect(s, W/2 - 4, H/2 - 1, 3, 3, 255, 200, 40, 255); /* warn L */
fill_rect(s, W/2 + 1, H/2 - 1, 3, 3, 255, 200, 40, 255); /* warn R */
fill_rect(s, W/2 - 3, H/2 + 4, 2, 2, 40, 70, 110, 255); /* panel */
fill_rect(s, W/2 + 1, H/2 + 4, 2, 2, 40, 70, 110, 255);
fill_rect(s, W/2 - 2, H/2 + 8, 4, 2, 200, 160, 40, 255); /* hazard belt */
disc(s, W/2, H/2 + 2, 4, 120, 200, 255, 255); disc(s, W/2, H/2 + 2, 4, 120, 200, 255, 255);
disc(s, W/2, H/2 + 2, 2, 250, 252, 255, 255); disc(s, W/2, H/2 + 2, 2, 250, 252, 255, 255);
ring(s, W/2, H/2 + 2, 5, 1, 90, 160, 220, 255);
line(s, W/2, 8, W/2, H - 10, 200, 230, 250, 255); line(s, W/2, 8, W/2, H - 10, 200, 230, 250, 255);
line(s, 8, H/2 + 2, W - 8, H/2 + 2, 180, 220, 245, 255); line(s, 8, H/2 + 2, W - 8, H/2 + 2, 180, 220, 245, 255);
/* switchyard box + cable runs */ /* exhaust stack + plume */
fill_rect(s, W/2 - 8, H - 14, 6, 5, ok, og, ob, 255); fill_rect(s, W/2 + 6, 6, 4, H/2 - 8, ok, og, ob, 255);
fill_rect(s, W/2 - 7, H - 13, 4, 3, 45, 42, 36, 255); fill_rect(s, W/2 + 7, 7, 2, H/2 - 12, 60, 58, 52, 255);
line(s, W/2 - 5, H - 14, W/2 - 5, H/2 + 6, 90, 85, 70, 255); fill_rect(s, W/2 + 6, 4, 4, 3, 50, 48, 42, 255); /* stack cap */
line(s, W/2 + 4, H - 12, W - 10, H/2 + 4, 80, 75, 60, 255); disc(s, W/2 + 8, 2, 3, 180, 190, 200, 255); /* smoke */
fill_rect(s, 2, H - 12, 2, 4, 50, 48, 40, 255); /* fence post L */ disc(s, W/2 + 9, 0, 2, 160, 170, 180, 255);
fill_rect(s, W - 4, H - 12, 2, 4, 50, 48, 40, 255); /* fence post R */ /* switchyard: transformers + bus + insulators */
fill_rect(s, W/2 - 10, H - 16, 7, 6, ok, og, ob, 255);
fill_rect(s, W/2 - 9, H - 15, 5, 4, 45, 42, 36, 255);
fill_rect(s, W/2 + 3, H - 15, 6, 5, ok, og, ob, 255);
fill_rect(s, W/2 + 4, H - 14, 4, 3, 50, 48, 40, 255);
fill_rect(s, W/2 - 8, H - 17, 2, 2, 90, 85, 70, 255); /* insulator */
fill_rect(s, W/2 + 5, H - 16, 2, 2, 90, 85, 70, 255);
fill_rect(s, W/2 - 1, H - 18, 3, 2, 70, 68, 58, 255); /* bus bar */
line(s, W/2 - 6, H - 16, W/2 - 6, H/2 + 6, 90, 85, 70, 255);
line(s, W/2 + 5, H - 14, W - 10, H/2 + 4, 80, 75, 60, 255);
line(s, W/2 + 2, H - 17, W/2 + 7, H/2 + 8, 85, 80, 65, 255);
/* control booth + fence */
fill_rect(s, 14, H - 20, 8, 8, ok, og, ob, 255);
fill_rect(s, 15, H - 19, 6, 6, 40, 55, 70, 255);
fill_rect(s, 16, H - 18, 2, 2, 180, 220, 255, 255); /* booth window */
fill_rect(s, 19, H - 18, 2, 2, 160, 200, 240, 255);
fill_rect(s, 17, H - 15, 2, 3, 35, 32, 38, 255); /* door */
fill_rect(s, 2, H - 13, 2, 4, 50, 48, 40, 255); /* fence post L */
fill_rect(s, W/2 - 12, H - 13, 2, 4, 50, 48, 40, 255);
fill_rect(s, W - 4, H - 13, 2, 4, 50, 48, 40, 255); /* fence post R */
line(s, 3, H - 12, W - 4, H - 12, 60, 55, 45, 255); /* fence rail */
break; break;
case BT_TURRET: case BT_TURRET:
/* denser KKND turret: berm+bunker+cupola+barrel+radar+coax */ /* denser KKND turret: berm+bunker+cupola+barrel+radar+coax */