From 25978048e27934c4da6a5701c5c77995af75b22b Mon Sep 17 00:00:00 2001 From: "local-model/engine-L2-grok-4.5" Date: Sat, 19 Sep 2026 18:56:19 +0200 Subject: [PATCH] engine-c: denser BT_WARFACTORY hangar/crane/bay silhouettes --- engine-c/src/snapshot.c | 53 ++++++++++++++++++++++++++++++++++++----- engine-c/src/sprites.c | 51 +++++++++++++++++++++++++++++++++++---- 2 files changed, 93 insertions(+), 11 deletions(-) diff --git a/engine-c/src/snapshot.c b/engine-c/src/snapshot.c index ba728ee..a084e8e 100644 --- a/engine-c/src/snapshot.c +++ b/engine-c/src/snapshot.c @@ -845,7 +845,7 @@ static void draw_bld(Building *b, int sx, int sy) { } break; case BT_WARFACTORY: - /* hangar + crane mast/jib + segmented bay doors (KKND factory read) */ + /* hangar + crane + bay + office/chimney/ramp (KKND factory densify) */ 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, 12, lr, lg, lb); /* roof ridge */ @@ -853,30 +853,71 @@ static void draw_bld(Building *b, int sx, int sy) { 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); + /* corner bracing + rivets */ + fill_rect(sx + 5, sy + 7, 3, 3, 70, 65, 55); + fill_rect(sx + W - 8, sy + 7, 3, 3, 70, 65, 55); + fill_rect(sx + 5, sy + H - 14, 3, 3, 70, 65, 55); + fill_rect(sx + W - 8, sy + H - 14, 3, 3, 70, 65, 55); + fill_rect(sx + 6, sy + 8, 1, 1, 40, 38, 32); /* rivet TL */ + fill_rect(sx + W - 7, sy + 8, 1, 1, 40, 38, 32); + fill_rect(sx + 6, sy + H - 13, 1, 1, 40, 38, 32); + fill_rect(sx + W - 7, sy + H - 13, 1, 1, 40, 38, 32); + /* upper office strip + windows */ { uint8_t dr, dg, db; darken3(br, bg, bb, 0.5f, &dr, &dg, &db); + fill_rect(sx + 10, sy + 14, W - 28, 6, dr, dg, db); fill_rect(sx + 5, sy + H/2 - 2, 8, H/2 - 10, dr, dg, db); } + fill_rect(sx + 12, sy + 15, 3, 3, 160, 200, 230); + fill_rect(sx + 17, sy + 15, 3, 3, 150, 190, 220); + fill_rect(sx + 22, sy + 15, 3, 3, 170, 210, 235); + fill_rect(sx + W/2 - 2, sy + 15, 3, 3, 155, 195, 225); + /* chimney + smoke puff */ + fill_rect(sx + W/2 + 8, sy + 4, 4, 10, ok, og, ob); + fill_rect(sx + W/2 + 9, sy + 5, 2, 8, 55, 50, 45); + disc(sx + W/2 + 10, sy + 3, 3, 90, 88, 85); + disc(sx + W/2 + 12, sy + 2, 2, 110, 108, 105); + /* side workshop annex + tool rack */ + fill_rect(sx + 4, sy + H/2 - 4, 10, H/2 - 6, ok, og, ob); fill_rect(sx + 6, sy + H/2, 6, 4, 90, 80, 55); /* window slit */ - /* overhead crane mast + jib */ + fill_rect(sx + 3, sy + H - 18, 3, 8, 60, 55, 45); /* tool rack */ + fill_rect(sx + 3, sy + H - 17, 1, 2, 140, 120, 70); + fill_rect(sx + 5, sy + H - 16, 1, 3, 120, 110, 90); + /* side exhaust stacks */ + fill_rect(sx + W - 6, sy + H/2 + 2, 3, 8, ok, og, ob); + fill_rect(sx + W - 5, sy + H/2 + 3, 1, 6, 45, 42, 38); + disc(sx + W - 4, sy + H/2 + 1, 2, 80, 78, 72); + /* overhead crane mast + jib + cable/hook */ 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); + line(sx + 19, sy + 10, sx + 19, sy + 26, 55, 50, 40); /* cable */ disc(sx + 18, sy + 24, 3, 80, 75, 55); /* hoist block */ - /* segmented bay doors */ + fill_rect(sx + 17, sy + 27, 3, 2, 100, 90, 60); /* hook */ + fill_rect(sx + W - 12, sy + 3, 2, 2, 220, 200, 80); /* floodlight */ + fill_rect(sx + W - 11, sy + 2, 1, 3, 90, 85, 70); /* antenna stub */ + /* segmented bay doors + hazard + panels */ 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); + fill_rect(sx + 14, sy + H - 28, W - 32, 2, 200, 160, 40); /* hazard top */ + fill_rect(sx + 14, sy + H - 14, W - 32, 2, 200, 160, 40); /* hazard bot */ 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 + 16, sy + H - 24, 4, 3, 45, 44, 40); /* door panel */ + fill_rect(sx + W/2 + 2, sy + H - 24, 4, 3, 45, 44, 40); + fill_rect(sx + W - 22, sy + H - 24, 4, 3, 45, 44, 40); + /* ramp lip + rails/tracks */ + fill_rect(sx + 10, sy + H - 10, W - 20, 5, 50, 48, 42); fill_rect(sx + 12, sy + H - 9, W - 24, 2, 90, 75, 45); + line(sx + 14, sy + H - 8, sx + 14, sy + H - 5, 70, 65, 50); + line(sx + W - 16, sy + H - 8, sx + W - 16, sy + H - 5, 70, 65, 50); + line(sx + 14, sy + H - 6, sx + W - 16, sy + H - 6, 60, 55, 42); /* track */ + line(sx + 14, sy + H - 5, sx + W - 16, sy + H - 5, 55, 50, 38); break; case BT_REFINERY: /* oil-field: derrick + pumpjack + twin tanks + pipes + hopper (KKND read) */ diff --git a/engine-c/src/sprites.c b/engine-c/src/sprites.c index 056b5ba..6cdd445 100644 --- a/engine-c/src/sprites.c +++ b/engine-c/src/sprites.c @@ -655,7 +655,7 @@ SDL_Texture *sprites_make_bld(SDL_Renderer *r, BuildingType t, Faction f) { } break; case BT_WARFACTORY: - /* hangar + crane mast/jib + segmented bay doors (KKND factory read) */ + /* hangar + crane + bay + office/chimney/ramp (KKND factory densify) */ 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, 12, lite.r, lite.g, lite.b, 255); /* roof ridge */ @@ -663,26 +663,67 @@ SDL_Texture *sprites_make_bld(SDL_Renderer *r, BuildingType t, Faction f) { 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 */ + /* corner bracing + rivets */ + fill_rect(s, 5, 7, 3, 3, 70, 65, 55, 255); + fill_rect(s, W - 8, 7, 3, 3, 70, 65, 55, 255); + fill_rect(s, 5, H - 14, 3, 3, 70, 65, 55, 255); + fill_rect(s, W - 8, H - 14, 3, 3, 70, 65, 55, 255); + fill_rect(s, 6, 8, 1, 1, 40, 38, 32, 255); /* rivet TL */ + fill_rect(s, W - 7, 8, 1, 1, 40, 38, 32, 255); + fill_rect(s, 6, H - 13, 1, 1, 40, 38, 32, 255); + fill_rect(s, W - 7, H - 13, 1, 1, 40, 38, 32, 255); + /* upper office strip + windows */ + fill_rect(s, 10, 14, W - 28, 6, dark.r, dark.g, dark.b, 255); + fill_rect(s, 12, 15, 3, 3, 160, 200, 230, 255); + fill_rect(s, 17, 15, 3, 3, 150, 190, 220, 255); + fill_rect(s, 22, 15, 3, 3, 170, 210, 235, 255); + fill_rect(s, W/2 - 2, 15, 3, 3, 155, 195, 225, 255); + /* chimney + smoke puff */ + fill_rect(s, W/2 + 8, 4, 4, 10, ok, og, ob, 255); + fill_rect(s, W/2 + 9, 5, 2, 8, 55, 50, 45, 255); + disc(s, W/2 + 10, 3, 3, 90, 88, 85, 255); + disc(s, W/2 + 12, 2, 2, 110, 108, 105, 255); + /* side workshop annex + tool rack */ 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, 3, H - 18, 3, 8, 60, 55, 45, 255); /* tool rack */ + fill_rect(s, 3, H - 17, 1, 2, 140, 120, 70, 255); + fill_rect(s, 5, H - 16, 1, 3, 120, 110, 90, 255); + /* side exhaust stacks */ + fill_rect(s, W - 6, H/2 + 2, 3, 8, ok, og, ob, 255); + fill_rect(s, W - 5, H/2 + 3, 1, 6, 45, 42, 38, 255); + disc(s, W - 4, H/2 + 1, 2, 80, 78, 72, 255); + /* overhead crane mast + jib + cable/hook */ 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); + line(s, 19, 10, 19, 26, 55, 50, 40, 255); /* cable */ disc(s, 18, 24, 3, 80, 75, 55, 255); /* hoist block */ - /* segmented bay doors */ + fill_rect(s, 17, 27, 3, 2, 100, 90, 60, 255); /* hook */ + fill_rect(s, W - 12, 3, 2, 2, 220, 200, 80, 255); /* floodlight */ + fill_rect(s, W - 11, 2, 1, 3, 90, 85, 70, 255); /* antenna stub */ + /* segmented bay doors + hazard + panels */ 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); + fill_rect(s, 14, H - 28, W - 32, 2, 200, 160, 40, 255); /* hazard top */ + fill_rect(s, 14, H - 14, W - 32, 2, 200, 160, 40, 255); /* hazard bot */ 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, 16, H - 24, 4, 3, 45, 44, 40, 255); /* door panel */ + fill_rect(s, W/2 + 2, H - 24, 4, 3, 45, 44, 40, 255); + fill_rect(s, W - 22, H - 24, 4, 3, 45, 44, 40, 255); + /* ramp lip + rails/tracks */ + fill_rect(s, 10, H - 10, W - 20, 5, 50, 48, 42, 255); fill_rect(s, 12, H - 9, W - 24, 2, 90, 75, 45, 255); + line(s, 14, H - 8, 14, H - 5, 70, 65, 50, 255); + line(s, W - 16, H - 8, W - 16, H - 5, 70, 65, 50, 255); + line(s, 14, H - 6, W - 16, H - 6, 60, 55, 42, 255); /* track */ + line(s, 14, H - 5, W - 16, H - 5, 55, 50, 38, 255); break; case BT_REFINERY: /* oil-field: derrick + pumpjack + twin tanks + pipes + hopper (KKND read) */