engine-c: Survivor forward HQ + faction BT_BASE identity in SHOT

Forward twin CC near clash, stronger hx camera weight, Survivors
corner-tower mast vs Evolved organic lobes in draw_bld/sprites.
This commit is contained in:
local-model/engine-L2-grok-4.5 2026-09-19 16:10:03 +02:00
parent 41d0b89948
commit 9cc0aec229
No known key found for this signature in database
5 changed files with 107 additions and 31 deletions

View file

@ -553,20 +553,42 @@ static void draw_bld(Building *b, int sx, int sy) {
switch (b->type) {
case BT_BASE:
/* multi-wing HQ: side wings + centre block + dome + mast */
fill_rect(sx + 4, sy + 18, 18, 28, ok, og, ob);
fill_rect(sx + 6, sy + 20, 14, 24, br, bg, bb);
fill_rect(sx + W - 22, sy + 18, 18, 28, ok, og, ob);
fill_rect(sx + W - 20, sy + 20, 14, 24, br, bg, bb);
fill_rect(sx + 16, sy + 10, W - 32, H - 20, ok, og, ob);
fill_rect(sx + 18, sy + 12, W - 36, H - 24, br, bg, bb);
fill_rect(sx + 20, sy + 14, W - 40, 8, lr, lg, lb); /* roof band */
disc(sx + W/2, sy + H/2 - 2, 12, ok, og, ob);
disc(sx + W/2, sy + H/2 - 2, 10, lr, lg, lb);
disc(sx + W/2, sy + H/2 - 2, 5, 255, 250, 180); /* command dome */
fill_rect(sx + W/2 - 2, sy + 4, 4, H/2 - 8, 200, 180, 60); /* mast */
fill_rect(sx + W/2 - 5, sy + 4, 10, 3, 220, 210, 80); /* antenna tip */
fill_rect(sx + W/2 - 6, sy + H - 14, 12, 6, 40, 38, 34); /* entry */
if (b->faction == FACTION_EVOLVED) {
/* organic lobes + dark central pit (mutant hive) */
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);
disc(sx + W - 14, sy + 18, 12, br, bg, bb);
disc(sx + 16, sy + H - 16, 12, ok, og, ob);
disc(sx + 16, sy + H - 16, 10, br, bg, bb);
disc(sx + W - 16, sy + H - 16, 12, ok, og, ob);
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 */
disc(sx + W/2 + 12, sy + H - 12, 4, lr, lg, lb);
} else {
/* Survivors: lime body + corner towers + central mast */
fill_rect(sx + 4, sy + 4, 14, 14, ok, og, ob); /* NW tower */
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 - 16, sy + 6, 10, 10, br, bg, bb);
fill_rect(sx + 4, sy + H - 18, 14, 14, ok, og, ob); /* SW */
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 - 16, sy + H - 16, 10, 10, br, bg, bb);
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 */
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 */
}
break;
case BT_WARFACTORY:
/* hangar shell + ridge vents + dark bay door */
@ -742,9 +764,9 @@ void snapshot_capture(Game *g, const char *path) {
float ecx = ne ? ex / ne : clash_x;
float ecy = ne ? ey / ne : clash_y;
/* Clash + forward fight, with enough HQ so base buildings stay in frame. */
float cx = clash_x * 0.55f + ecx * 0.15f + hx * 0.30f;
float cy = clash_y * 0.55f + ecy * 0.15f + hy * 0.30f;
/* Clash + forward fight; stronger hx so Survivor forward HQ stays in crop. */
float cx = clash_x * 0.40f + ecx * 0.10f + hx * 0.50f;
float cy = clash_y * 0.40f + ecy * 0.10f + hy * 0.50f;
float camx = cx - g_sw / 2.0f, camy = cy - g_sh / 2.0f;
if (camx < 0) camx = 0; if (camy < 0) camy = 0;