engine-c: denser BT_WALL/BT_TURRET fort/turret silhouettes sprites↔snapshot

This commit is contained in:
local-model/engine-L2-grok-4.5 2026-09-19 18:39:03 +02:00
parent 6a489b8f96
commit e0ea7aa85f
No known key found for this signature in database
2 changed files with 60 additions and 6 deletions

View file

@ -911,6 +911,12 @@ static void draw_bld(Building *b, int sx, int sy) {
fill_rect(sx + 4, sy + H - 11, 4, 4, 70, 65, 55); /* armor plate L */ 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 - 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 */ fill_rect(sx + W/2 - 5, sy + H - 8, 10, 3, 35, 32, 28); /* embrasure */
fill_rect(sx + 5, sy + H - 6, 3, 2, 28, 26, 22); /* bolt L */
fill_rect(sx + W - 8, sy + H - 6, 3, 2, 28, 26, 22); /* bolt R */
/* ammo box + strut */
fill_rect(sx + 3, sy + H/2 + 2, 7, 8, ok, og, ob);
fill_rect(sx + 4, sy + H/2 + 3, 5, 6, 55, 50, 42);
line(sx + 6, sy + H/2 + 2, sx + W/2 - 4, sy + H/2, 40, 36, 30);
/* ringed cupola */ /* ringed cupola */
disc(sx + W/2, sy + H/2, W/3 + 3, ok, og, ob); 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); disc(sx + W/2, sy + H/2, W/3 + 1, br, bg, bb);
@ -921,32 +927,53 @@ static void draw_bld(Building *b, int sx, int sy) {
} }
disc(sx + W/2, sy + H/2, W/5, lr, lg, lb); 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 */ disc(sx + W/2, sy + H/2 - 1, 3, 35, 32, 28); /* hatch */
/* thick armored barrel */ disc(sx + W/2 - 4, sy + H/2 + 3, 1, 90, 85, 70); /* rivet */
disc(sx + W/2 + 4, sy + H/2 + 3, 1, 90, 85, 70);
/* thick armored barrel + bands */
fill_rect(sx + W/2 + 2, sy + H/2 - 3, 12, 5, ok, og, ob); 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); fill_rect(sx + W/2 + 3, sy + H/2 - 2, 11, 3, 40, 36, 30);
fill_rect(sx + W/2 + 5, sy + H/2 - 3, 2, 5, 70, 62, 50); /* band */
fill_rect(sx + W/2 + 9, sy + H/2 - 3, 2, 5, 70, 62, 50);
line(sx + W/2, sy + H/2, sx + W/2 + 14, sy + H/2 - 10, 28, 26, 22); 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); 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 */ disc(sx + W/2 + 13, sy + H/2 - 10, 2, 255, 200, 80); /* muzzle tip */
/* searchlight stub */
fill_rect(sx + W/2 - 8, sy + H/2 - 6, 4, 3, 200, 195, 160);
disc(sx + W/2 - 6, sy + H/2 - 7, 2, 255, 250, 210);
break; break;
case BT_WALL: case BT_WALL:
/* thick fort wall + crenels + seams + embrasure (KKND fort read) */ /* thick fort wall + crenels + seams + embrasure (KKND fort read) */
fill_rect(sx + 0, sy + 4, W, H - 4, ok, og, ob); fill_rect(sx + 0, sy + 4, W, H - 4, ok, og, ob);
fill_rect(sx + 1, sy + 6, W - 2, H - 8, 165, 145, 110); fill_rect(sx + 1, sy + 6, W - 2, H - 8, 165, 145, 110);
fill_rect(sx + 2, sy + H - 6, W - 4, 4, 90, 78, 58); /* plinth */ fill_rect(sx + 2, sy + H - 6, W - 4, 4, 90, 78, 58); /* plinth */
/* thick merlons */ fill_rect(sx + 1, sy + H - 5, 3, 3, 70, 60, 45); /* corner stone L */
fill_rect(sx + W - 4, sy + H - 5, 3, 3, 70, 60, 45); /* corner stone R */
/* thick merlons + caps */
fill_rect(sx + 1, sy + 1, 8, 10, ok, og, ob); fill_rect(sx + 1, sy + 1, 8, 10, ok, og, ob);
fill_rect(sx + 2, sy + 2, 6, 8, 195, 175, 140); fill_rect(sx + 2, sy + 2, 6, 8, 195, 175, 140);
fill_rect(sx + 3, sy + 1, 4, 2, 220, 200, 160); /* merlon cap */
fill_rect(sx + W/2 - 4, sy + 1, 8, 10, ok, og, ob); fill_rect(sx + W/2 - 4, sy + 1, 8, 10, ok, og, ob);
fill_rect(sx + W/2 - 3, sy + 2, 6, 8, 200, 180, 145); fill_rect(sx + W/2 - 3, sy + 2, 6, 8, 200, 180, 145);
fill_rect(sx + W/2 - 2, sy + 1, 4, 2, 220, 200, 160);
fill_rect(sx + W - 9, sy + 1, 8, 10, ok, og, ob); fill_rect(sx + W - 9, sy + 1, 8, 10, ok, og, ob);
fill_rect(sx + W - 8, sy + 2, 6, 8, 190, 170, 135); fill_rect(sx + W - 8, sy + 2, 6, 8, 190, 170, 135);
fill_rect(sx + W - 7, sy + 1, 4, 2, 215, 195, 155);
fill_rect(sx + 2, sy + 10, W - 4, 3, 215, 195, 155); /* coping */ fill_rect(sx + 2, sy + 10, W - 4, 3, 215, 195, 155); /* coping */
/* block seams + arrow slit */ fill_rect(sx + 2, sy + 11, W - 4, 1, 120, 105, 80); /* coping shadow */
/* buttresses */
fill_rect(sx + 0, sy + H/2 - 2, 4, H/2, ok, og, ob);
fill_rect(sx + 1, sy + H/2, 2, H/2 - 4, 140, 125, 95);
fill_rect(sx + W - 4, sy + H/2 - 2, 4, H/2, ok, og, ob);
fill_rect(sx + W - 3, sy + H/2, 2, H/2 - 4, 140, 125, 95);
/* block seams + dual slits */
line(sx + 2, sy + H/2 + 2, sx + W - 2, sy + H/2 + 2, 55, 48, 38); line(sx + 2, sy + H/2 + 2, sx + W - 2, sy + H/2 + 2, 55, 48, 38);
line(sx + 2, sy + H/2 + 6, sx + W - 2, sy + H/2 + 6, 75, 65, 50);
line(sx + W/3, sy + 8, sx + W/3, sy + H - 4, 65, 55, 42); line(sx + W/3, sy + 8, sx + W/3, sy + H - 4, 65, 55, 42);
line(sx + 2 * W/3, sy + 8, sx + 2 * W/3, sy + H - 4, 65, 55, 42); line(sx + 2 * W/3, sy + 8, sx + 2 * W/3, sy + H - 4, 65, 55, 42);
fill_rect(sx + W/2 - 2, sy + H/2 - 2, 4, 8, 35, 30, 24); /* embrasure */ fill_rect(sx + W/2 - 2, sy + H/2 - 2, 4, 8, 35, 30, 24); /* embrasure */
fill_rect(sx + W/2 - 1, sy + H/2, 2, 4, 20, 18, 14); fill_rect(sx + W/2 - 1, sy + H/2, 2, 4, 20, 18, 14);
fill_rect(sx + W/4 - 1, sy + H/2 + 1, 3, 5, 40, 35, 28); /* side slit */
fill_rect(sx + 3 * W/4 - 1, sy + H/2 + 1, 3, 5, 40, 35, 28);
break; break;
case BT_REPAIR: case BT_REPAIR:
/* garage + vehicle lift + tool rack + crane (KKND depot read) */ /* garage + vehicle lift + tool rack + crane (KKND depot read) */

View file

@ -717,38 +717,65 @@ SDL_Texture *sprites_make_bld(SDL_Renderer *r, BuildingType t, Faction f) {
fill_rect(s, 4, H - 11, 4, 4, 70, 65, 55, 255); /* armor plate L */ 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 - 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 */ fill_rect(s, W/2 - 5, H - 8, 10, 3, 35, 32, 28, 255); /* embrasure */
fill_rect(s, 5, H - 6, 3, 2, 28, 26, 22, 255); /* bolt L */
fill_rect(s, W - 8, H - 6, 3, 2, 28, 26, 22, 255); /* bolt R */
/* ammo box + strut */
fill_rect(s, 3, H/2 + 2, 7, 8, ok, og, ob, 255);
fill_rect(s, 4, H/2 + 3, 5, 6, 55, 50, 42, 255);
line(s, 6, H/2 + 2, W/2 - 4, H/2, 40, 36, 30, 255);
/* ringed cupola */ /* ringed cupola */
disc(s, W/2, H/2, W/3 + 3, ok, og, ob, 255); 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); 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); 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, W/5, lite.r, lite.g, lite.b, 255);
disc(s, W/2, H/2 - 1, 3, 35, 32, 28, 255); /* hatch */ disc(s, W/2, H/2 - 1, 3, 35, 32, 28, 255); /* hatch */
/* thick armored barrel */ disc(s, W/2 - 4, H/2 + 3, 1, 90, 85, 70, 255); /* rivet */
disc(s, W/2 + 4, H/2 + 3, 1, 90, 85, 70, 255);
/* thick armored barrel + bands */
fill_rect(s, W/2 + 2, H/2 - 3, 12, 5, ok, og, ob, 255); 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); fill_rect(s, W/2 + 3, H/2 - 2, 11, 3, 40, 36, 30, 255);
fill_rect(s, W/2 + 5, H/2 - 3, 2, 5, 70, 62, 50, 255); /* band */
fill_rect(s, W/2 + 9, H/2 - 3, 2, 5, 70, 62, 50, 255);
line(s, W/2, H/2, W/2 + 14, H/2 - 10, 28, 26, 22, 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); 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 */ disc(s, W/2 + 13, H/2 - 10, 2, 255, 200, 80, 255); /* muzzle tip */
/* searchlight stub */
fill_rect(s, W/2 - 8, H/2 - 6, 4, 3, 200, 195, 160, 255);
disc(s, W/2 - 6, H/2 - 7, 2, 255, 250, 210, 255);
break; break;
case BT_WALL: case BT_WALL:
/* thick fort wall + crenels + seams + embrasure (KKND fort read) */ /* thick fort wall + crenels + seams + embrasure (KKND fort read) */
fill_rect(s, 0, 4, W, H - 4, ok, og, ob, 255); fill_rect(s, 0, 4, W, H - 4, ok, og, ob, 255);
fill_rect(s, 1, 6, W - 2, H - 8, 165, 145, 110, 255); fill_rect(s, 1, 6, W - 2, H - 8, 165, 145, 110, 255);
fill_rect(s, 2, H - 6, W - 4, 4, 90, 78, 58, 255); /* plinth */ fill_rect(s, 2, H - 6, W - 4, 4, 90, 78, 58, 255); /* plinth */
/* thick merlons */ fill_rect(s, 1, H - 5, 3, 3, 70, 60, 45, 255); /* corner stone L */
fill_rect(s, W - 4, H - 5, 3, 3, 70, 60, 45, 255); /* corner stone R */
/* thick merlons + caps */
fill_rect(s, 1, 1, 8, 10, ok, og, ob, 255); fill_rect(s, 1, 1, 8, 10, ok, og, ob, 255);
fill_rect(s, 2, 2, 6, 8, 195, 175, 140, 255); fill_rect(s, 2, 2, 6, 8, 195, 175, 140, 255);
fill_rect(s, 3, 1, 4, 2, 220, 200, 160, 255); /* merlon cap */
fill_rect(s, W/2 - 4, 1, 8, 10, ok, og, ob, 255); fill_rect(s, W/2 - 4, 1, 8, 10, ok, og, ob, 255);
fill_rect(s, W/2 - 3, 2, 6, 8, 200, 180, 145, 255); fill_rect(s, W/2 - 3, 2, 6, 8, 200, 180, 145, 255);
fill_rect(s, W/2 - 2, 1, 4, 2, 220, 200, 160, 255);
fill_rect(s, W - 9, 1, 8, 10, ok, og, ob, 255); fill_rect(s, W - 9, 1, 8, 10, ok, og, ob, 255);
fill_rect(s, W - 8, 2, 6, 8, 190, 170, 135, 255); fill_rect(s, W - 8, 2, 6, 8, 190, 170, 135, 255);
fill_rect(s, W - 7, 1, 4, 2, 215, 195, 155, 255);
fill_rect(s, 2, 10, W - 4, 3, 215, 195, 155, 255); /* coping */ fill_rect(s, 2, 10, W - 4, 3, 215, 195, 155, 255); /* coping */
/* block seams + arrow slit */ fill_rect(s, 2, 11, W - 4, 1, 120, 105, 80, 255); /* coping shadow */
/* buttresses */
fill_rect(s, 0, H/2 - 2, 4, H/2, ok, og, ob, 255);
fill_rect(s, 1, H/2, 2, H/2 - 4, 140, 125, 95, 255);
fill_rect(s, W - 4, H/2 - 2, 4, H/2, ok, og, ob, 255);
fill_rect(s, W - 3, H/2, 2, H/2 - 4, 140, 125, 95, 255);
/* block seams + dual slits */
line(s, 2, H/2 + 2, W - 2, H/2 + 2, 55, 48, 38, 255); line(s, 2, H/2 + 2, W - 2, H/2 + 2, 55, 48, 38, 255);
line(s, 2, H/2 + 6, W - 2, H/2 + 6, 75, 65, 50, 255);
line(s, W/3, 8, W/3, H - 4, 65, 55, 42, 255); line(s, W/3, 8, W/3, H - 4, 65, 55, 42, 255);
line(s, 2 * W/3, 8, 2 * W/3, H - 4, 65, 55, 42, 255); line(s, 2 * W/3, 8, 2 * W/3, H - 4, 65, 55, 42, 255);
fill_rect(s, W/2 - 2, H/2 - 2, 4, 8, 35, 30, 24, 255); /* embrasure */ fill_rect(s, W/2 - 2, H/2 - 2, 4, 8, 35, 30, 24, 255); /* embrasure */
fill_rect(s, W/2 - 1, H/2, 2, 4, 20, 18, 14, 255); fill_rect(s, W/2 - 1, H/2, 2, 4, 20, 18, 14, 255);
fill_rect(s, W/4 - 1, H/2 + 1, 3, 5, 40, 35, 28, 255); /* side slit */
fill_rect(s, 3 * W/4 - 1, H/2 + 1, 3, 5, 40, 35, 28, 255);
break; break;
case BT_REPAIR: case BT_REPAIR:
/* garage + vehicle lift + tool rack + crane (KKND depot read) */ /* garage + vehicle lift + tool rack + crane (KKND depot read) */