engine-c: deepen WF/POWER/TURRET silhouettes

This commit is contained in:
local-model/engine-L2-grok-4.5 2026-09-19 17:55:24 +02:00
parent a8da6d3970
commit e9627a42e1
No known key found for this signature in database
2 changed files with 144 additions and 60 deletions

View file

@ -591,17 +591,38 @@ static void draw_bld(Building *b, int sx, int sy) {
}
break;
case BT_WARFACTORY:
/* hangar shell + ridge vents + dark bay door */
/* hangar + crane mast/jib + segmented bay doors (KKND factory read) */
fill_rect(sx + 4, sy + 6, W - 8, H - 12, ok, og, ob);
fill_rect(sx + 6, sy + 8, W - 12, H - 16, br, bg, bb);
fill_rect(sx + 8, sy + 10, W - 16, 10, lr, lg, lb); /* roof ridge */
fill_rect(sx + 10, sy + 12, 6, 6, 55, 50, 42); /* vent */
fill_rect(sx + W/2 - 3, sy + 12, 6, 6, 55, 50, 42);
fill_rect(sx + W - 16, sy + 12, 6, 6, 55, 50, 42);
fill_rect(sx + 10, sy + H - 28, W - 20, 18, ok, og, ob);
fill_rect(sx + 12, sy + H - 26, W - 24, 14, 35, 35, 40); /* bay */
line(sx + W/2, sy + H - 26, sx + W/2, sy + H - 12, 70, 68, 60);
fill_rect(sx + 8, sy + H - 10, W - 16, 4, 50, 48, 42); /* ramp lip */
fill_rect(sx + 8, sy + 10, W - 16, 12, lr, lg, lb); /* roof ridge */
fill_rect(sx + 10, sy + 12, 5, 5, 55, 50, 42); /* ridge vents */
fill_rect(sx + W/2 - 8, sy + 12, 5, 5, 55, 50, 42);
fill_rect(sx + W/2 + 3, sy + 12, 5, 5, 55, 50, 42);
fill_rect(sx + W - 15, sy + 12, 5, 5, 55, 50, 42);
/* side workshop annex */
fill_rect(sx + 4, sy + H/2 - 4, 10, H/2 - 6, ok, og, ob);
{
uint8_t dr, dg, db;
darken3(br, bg, bb, 0.5f, &dr, &dg, &db);
fill_rect(sx + 5, sy + H/2 - 2, 8, H/2 - 10, dr, dg, db);
}
fill_rect(sx + 6, sy + H/2, 6, 4, 90, 80, 55); /* window slit */
/* overhead crane mast + jib */
fill_rect(sx + W - 14, sy + 4, 6, H - 18, ok, og, ob);
fill_rect(sx + W - 13, sy + 5, 4, H - 20, 95, 88, 70);
fill_rect(sx + 14, sy + 6, W - 28, 4, ok, og, ob);
fill_rect(sx + 15, sy + 7, W - 30, 2, 120, 110, 85);
line(sx + 18, sy + 10, sx + 18, sy + 22, 70, 65, 50);
disc(sx + 18, sy + 24, 3, 80, 75, 55); /* hoist block */
/* segmented bay doors */
fill_rect(sx + 12, sy + H - 30, W - 28, 20, ok, og, ob);
fill_rect(sx + 14, sy + H - 28, W - 32, 16, 32, 32, 38);
line(sx + W/2 - 6, sy + H - 28, sx + W/2 - 6, sy + H - 12, 70, 68, 60);
line(sx + W/2, sy + H - 28, sx + W/2, sy + H - 12, 70, 68, 60);
line(sx + W/2 + 6, sy + H - 28, sx + W/2 + 6, sy + H - 12, 70, 68, 60);
line(sx + 14, sy + H - 20, sx + W - 18, sy + H - 20, 55, 52, 48);
fill_rect(sx + 10, sy + H - 10, W - 20, 5, 50, 48, 42); /* ramp lip */
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) */
@ -634,29 +655,54 @@ static void draw_bld(Building *b, int sx, int sy) {
line(sx + 20, sy + H - 18, sx + W/2 - 4, sy + H - 14, 110, 90, 50);
break;
case BT_POWER:
/* cooling towers + reactor core + steam cross */
disc(sx + W/2 - 6, sy + H/2 + 2, 8, ok, og, ob);
disc(sx + W/2 - 6, sy + H/2 + 2, 6, 100, 160, 210);
disc(sx + W/2 + 6, sy + H/2 + 2, 8, ok, og, ob);
disc(sx + W/2 + 6, sy + H/2 + 2, 6, 90, 150, 200);
fill_rect(sx + 6, sy + 6, W - 12, 10, ok, og, ob);
fill_rect(sx + 8, sy + 7, W - 16, 7, 70, 120, 170); /* reactor slab */
disc(sx + W/2, sy + 10, 4, 250, 252, 255);
line(sx + W/2, sy + 4, sx + W/2, sy + H - 4, 230, 245, 255);
line(sx + 4, sy + H/2, sx + W - 4, sy + H/2, 200, 230, 250);
fill_rect(sx + W/2 - 2, sy + H - 8, 4, 5, 55, 50, 42); /* base stub */
/* tall cooling towers + reactor block + steam plumes (KKND plant read) */
fill_rect(sx + 3, sy + H - 10, W - 6, 8, ok, og, ob);
fill_rect(sx + 4, sy + H - 8, W - 8, 5, 55, 50, 42); /* pad */
/* left cooling tower (taller cone) */
fill_rect(sx + 4, sy + 8, 10, H - 18, ok, og, ob);
fill_rect(sx + 5, sy + 9, 8, H - 20, 95, 145, 195);
fill_rect(sx + 6, sy + 6, 6, 5, ok, og, ob);
fill_rect(sx + 7, sy + 5, 4, 4, 70, 120, 170); /* rim */
disc(sx + 9, sy + 4, 3, 240, 248, 255); /* steam puff */
disc(sx + 7, sy + 2, 2, 220, 235, 250);
/* right cooling tower */
fill_rect(sx + W - 14, sy + 10, 10, H - 20, ok, og, ob);
fill_rect(sx + W - 13, sy + 11, 8, H - 22, 85, 135, 185);
fill_rect(sx + W - 12, sy + 8, 6, 4, ok, og, ob);
fill_rect(sx + W - 11, sy + 7, 4, 3, 65, 115, 165);
disc(sx + W - 9, sy + 5, 3, 235, 245, 255);
disc(sx + W - 7, sy + 3, 2, 210, 230, 250);
/* central reactor block + glow */
fill_rect(sx + W/2 - 5, sy + H/2 - 4, 10, H/2 - 2, ok, og, ob);
fill_rect(sx + W/2 - 4, sy + H/2 - 2, 8, H/2 - 6, 55, 95, 150);
disc(sx + W/2, sy + H/2 + 2, 4, 120, 200, 255);
disc(sx + W/2, sy + H/2 + 2, 2, 250, 252, 255);
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);
break;
case BT_TURRET:
/* bunker base + cupola + thick barrel */
fill_rect(sx + 3, sy + H - 12, W - 6, 10, ok, og, ob);
fill_rect(sx + 5, sy + H - 10, W - 10, 7, 55, 50, 42);
disc(sx + W/2, sy + H/2 + 1, W/3 + 2, ok, og, ob);
disc(sx + W/2, sy + H/2 + 1, W/3, br, bg, bb);
disc(sx + W/2, sy + H/2 + 1, W/5, lr, lg, lb);
disc(sx + W/2, sy + H/2 - 1, 3, 40, 38, 32); /* hatch */
line(sx + W/2, sy + H/2, sx + W/2 + 13, sy + H/2 - 12, 30, 28, 24);
line(sx + W/2 + 1, sy + H/2 + 1, sx + W/2 + 13, sy + H/2 - 11, 50, 45, 35);
disc(sx + W/2 + 12, sy + H/2 - 11, 2, 255, 200, 80);
/* armored bunker + ringed cupola + thick barrel (KKND turret read) */
fill_rect(sx + 2, sy + H - 14, W - 4, 12, ok, og, ob);
fill_rect(sx + 3, sy + H - 12, W - 6, 9, 48, 44, 38); /* bunker slab */
fill_rect(sx + 4, sy + H - 11, 4, 4, 70, 65, 55); /* armor plate L */
fill_rect(sx + W - 8, sy + H - 11, 4, 4, 70, 65, 55); /* armor plate R */
fill_rect(sx + W/2 - 5, sy + H - 8, 10, 3, 35, 32, 28); /* embrasure */
/* ringed cupola */
disc(sx + W/2, sy + H/2, W/3 + 3, ok, og, ob);
disc(sx + W/2, sy + H/2, W/3 + 1, br, bg, bb);
{
uint8_t dr, dg, db;
darken3(br, bg, bb, 0.45f, &dr, &dg, &db);
ring(sx + W/2, sy + H/2, W/4 + 1, 2, dr, dg, db);
}
disc(sx + W/2, sy + H/2, W/5, lr, lg, lb);
disc(sx + W/2, sy + H/2 - 1, 3, 35, 32, 28); /* hatch */
/* thick armored barrel */
fill_rect(sx + W/2 + 2, sy + H/2 - 3, 12, 5, ok, og, ob);
fill_rect(sx + W/2 + 3, sy + H/2 - 2, 11, 3, 40, 36, 30);
line(sx + W/2, sy + H/2, sx + W/2 + 14, sy + H/2 - 10, 28, 26, 22);
line(sx + W/2 + 1, sy + H/2 + 1, sx + W/2 + 14, sy + H/2 - 9, 55, 48, 38);
disc(sx + W/2 + 13, sy + H/2 - 10, 2, 255, 200, 80); /* muzzle tip */
break;
case BT_WALL:
/* battlement blocks + ridge + shadow seam */

View file

@ -403,17 +403,34 @@ SDL_Texture *sprites_make_bld(SDL_Renderer *r, BuildingType t, Faction f) {
}
break;
case BT_WARFACTORY:
/* hangar shell + ridge vents + dark bay door */
/* hangar + crane mast/jib + segmented bay doors (KKND factory read) */
fill_rect(s, 4, 6, W - 8, H - 12, ok, og, ob, 255);
fill_rect(s, 6, 8, W - 12, H - 16, base.r, base.g, base.b, 255);
fill_rect(s, 8, 10, W - 16, 10, lite.r, lite.g, lite.b, 255);
fill_rect(s, 10, 12, 6, 6, 55, 50, 42, 255);
fill_rect(s, W/2 - 3, 12, 6, 6, 55, 50, 42, 255);
fill_rect(s, W - 16, 12, 6, 6, 55, 50, 42, 255);
fill_rect(s, 10, H - 28, W - 20, 18, ok, og, ob, 255);
fill_rect(s, 12, H - 26, W - 24, 14, 35, 35, 40, 255);
line(s, W/2, H - 26, W/2, H - 12, 70, 68, 60, 255);
fill_rect(s, 8, H - 10, W - 16, 4, 50, 48, 42, 255);
fill_rect(s, 8, 10, W - 16, 12, lite.r, lite.g, lite.b, 255); /* roof ridge */
fill_rect(s, 10, 12, 5, 5, 55, 50, 42, 255); /* ridge vents */
fill_rect(s, W/2 - 8, 12, 5, 5, 55, 50, 42, 255);
fill_rect(s, W/2 + 3, 12, 5, 5, 55, 50, 42, 255);
fill_rect(s, W - 15, 12, 5, 5, 55, 50, 42, 255);
/* side workshop annex */
fill_rect(s, 4, H/2 - 4, 10, H/2 - 6, ok, og, ob, 255);
fill_rect(s, 5, H/2 - 2, 8, H/2 - 10, dark.r, dark.g, dark.b, 255);
fill_rect(s, 6, H/2, 6, 4, 90, 80, 55, 255); /* window slit */
/* overhead crane mast + jib */
fill_rect(s, W - 14, 4, 6, H - 18, ok, og, ob, 255);
fill_rect(s, W - 13, 5, 4, H - 20, 95, 88, 70, 255);
fill_rect(s, 14, 6, W - 28, 4, ok, og, ob, 255);
fill_rect(s, 15, 7, W - 30, 2, 120, 110, 85, 255);
line(s, 18, 10, 18, 22, 70, 65, 50, 255);
disc(s, 18, 24, 3, 80, 75, 55, 255); /* hoist block */
/* segmented bay doors */
fill_rect(s, 12, H - 30, W - 28, 20, ok, og, ob, 255);
fill_rect(s, 14, H - 28, W - 32, 16, 32, 32, 38, 255);
line(s, W/2 - 6, H - 28, W/2 - 6, H - 12, 70, 68, 60, 255);
line(s, W/2, H - 28, W/2, H - 12, 70, 68, 60, 255);
line(s, W/2 + 6, H - 28, W/2 + 6, H - 12, 70, 68, 60, 255);
line(s, 14, H - 20, W - 18, H - 20, 55, 52, 48, 255);
fill_rect(s, 10, H - 10, W - 20, 5, 50, 48, 42, 255); /* ramp lip */
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) */
@ -442,29 +459,50 @@ SDL_Texture *sprites_make_bld(SDL_Renderer *r, BuildingType t, Faction f) {
line(s, 20, H - 18, W/2 - 4, H - 14, 110, 90, 50, 255);
break;
case BT_POWER:
/* cooling towers + reactor core + steam cross */
disc(s, W/2 - 6, H/2 + 2, 8, ok, og, ob, 255);
disc(s, W/2 - 6, H/2 + 2, 6, 100, 160, 210, 255);
disc(s, W/2 + 6, H/2 + 2, 8, ok, og, ob, 255);
disc(s, W/2 + 6, H/2 + 2, 6, 90, 150, 200, 255);
fill_rect(s, 6, 6, W - 12, 10, ok, og, ob, 255);
fill_rect(s, 8, 7, W - 16, 7, 70, 120, 170, 255);
disc(s, W/2, 10, 4, 250, 252, 255, 255);
line(s, W/2, 4, W/2, H - 4, 230, 245, 255, 255);
line(s, 4, H/2, W - 4, H/2, 200, 230, 250, 255);
fill_rect(s, W/2 - 2, H - 8, 4, 5, 55, 50, 42, 255);
/* tall cooling towers + reactor block + steam plumes (KKND plant read) */
fill_rect(s, 3, H - 10, W - 6, 8, ok, og, ob, 255);
fill_rect(s, 4, H - 8, W - 8, 5, 55, 50, 42, 255); /* pad */
/* left cooling tower (taller cone) */
fill_rect(s, 4, 8, 10, H - 18, ok, og, ob, 255);
fill_rect(s, 5, 9, 8, H - 20, 95, 145, 195, 255);
fill_rect(s, 6, 6, 6, 5, ok, og, ob, 255);
fill_rect(s, 7, 5, 4, 4, 70, 120, 170, 255); /* rim */
disc(s, 9, 4, 3, 240, 248, 255, 255); /* steam puff */
disc(s, 7, 2, 2, 220, 235, 250, 255);
/* right cooling tower */
fill_rect(s, W - 14, 10, 10, H - 20, ok, og, ob, 255);
fill_rect(s, W - 13, 11, 8, H - 22, 85, 135, 185, 255);
fill_rect(s, W - 12, 8, 6, 4, ok, og, ob, 255);
fill_rect(s, W - 11, 7, 4, 3, 65, 115, 165, 255);
disc(s, W - 9, 5, 3, 235, 245, 255, 255);
disc(s, W - 7, 3, 2, 210, 230, 250, 255);
/* central reactor block + glow */
fill_rect(s, W/2 - 5, H/2 - 4, 10, H/2 - 2, ok, og, ob, 255);
fill_rect(s, W/2 - 4, H/2 - 2, 8, H/2 - 6, 55, 95, 150, 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);
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);
break;
case BT_TURRET:
/* bunker base + cupola + thick barrel */
fill_rect(s, 3, H - 12, W - 6, 10, ok, og, ob, 255);
fill_rect(s, 5, H - 10, W - 10, 7, 55, 50, 42, 255);
disc(s, W/2, H/2 + 1, W/3 + 2, ok, og, ob, 255);
disc(s, W/2, H/2 + 1, W/3, base.r, base.g, base.b, 255);
disc(s, W/2, H/2 + 1, W/5, lite.r, lite.g, lite.b, 255);
disc(s, W/2, H/2 - 1, 3, 40, 38, 32, 255);
line(s, W/2, H/2, W/2 + 13, H/2 - 12, 30, 28, 24, 255);
line(s, W/2 + 1, H/2 + 1, W/2 + 13, H/2 - 11, 50, 45, 35, 255);
disc(s, W/2 + 12, H/2 - 11, 2, 255, 200, 80, 255);
/* armored bunker + ringed cupola + thick barrel (KKND turret read) */
fill_rect(s, 2, H - 14, W - 4, 12, ok, og, ob, 255);
fill_rect(s, 3, H - 12, W - 6, 9, 48, 44, 38, 255); /* bunker slab */
fill_rect(s, 4, H - 11, 4, 4, 70, 65, 55, 255); /* armor plate L */
fill_rect(s, W - 8, H - 11, 4, 4, 70, 65, 55, 255); /* armor plate R */
fill_rect(s, W/2 - 5, H - 8, 10, 3, 35, 32, 28, 255); /* embrasure */
/* ringed cupola */
disc(s, W/2, H/2, W/3 + 3, ok, og, ob, 255);
disc(s, W/2, H/2, W/3 + 1, base.r, base.g, base.b, 255);
ring(s, W/2, H/2, W/4 + 1, 2, dark.r, dark.g, dark.b, 255);
disc(s, W/2, H/2, W/5, lite.r, lite.g, lite.b, 255);
disc(s, W/2, H/2 - 1, 3, 35, 32, 28, 255); /* hatch */
/* thick armored barrel */
fill_rect(s, W/2 + 2, H/2 - 3, 12, 5, ok, og, ob, 255);
fill_rect(s, W/2 + 3, H/2 - 2, 11, 3, 40, 36, 30, 255);
line(s, W/2, H/2, W/2 + 14, H/2 - 10, 28, 26, 22, 255);
line(s, W/2 + 1, H/2 + 1, W/2 + 14, H/2 - 9, 55, 48, 38, 255);
disc(s, W/2 + 13, H/2 - 10, 2, 255, 200, 80, 255); /* muzzle tip */
break;
case BT_WALL:
/* battlement blocks + ridge + shadow seam */