engine-c: HQ→clash corridor scrap/rock fill + thicker unit silhouettes

This commit is contained in:
local-model/engine-L2-grok-4.5 2026-09-19 14:33:58 +02:00
parent 05a457bf21
commit e032b8cbfa
No known key found for this signature in database
3 changed files with 390 additions and 137 deletions

View file

@ -84,164 +84,253 @@ SDL_Texture *sprites_make_unit(SDL_Renderer *r, UnitType t, Faction f) {
switch (t) {
case UT_INFANTRY:
/* legs → torso → helmet → rifle */
/* legs → torso → pack → helmet/visor → thick rifle (parity snapshot) */
disc(s, 11, 23, 3, ok, og, ob, 255);
disc(s, 19, 23, 3, ok, og, ob, 255);
disc(s, 11, 23, 2, base.r, base.g, base.b, 255);
disc(s, 19, 23, 2, base.r, base.g, base.b, 255);
disc(s, 15, 15, 8, ok, og, ob, 255);
disc(s, 15, 15, 6, base.r, base.g, base.b, 255);
disc(s, 15, 9, 4, ok, og, ob, 255);
disc(s, 15, 9, 3, lite.r, lite.g, lite.b, 255);
line(s, 16, 14, 16, 1, 40, 36, 30, 255);
line(s, 17, 14, 17, 2, 55, 50, 40, 255);
disc(s, 15, 15, 9, ok, og, ob, 255);
disc(s, 15, 15, 7, base.r, base.g, base.b, 255);
disc(s, 10, 16, 3, ok, og, ob, 255); /* backpack */
disc(s, 10, 16, 2, 50, 46, 40, 255);
disc(s, 15, 8, 5, ok, og, ob, 255);
disc(s, 15, 8, 4, lite.r, lite.g, lite.b, 255);
fill_rect(s, 12, 7, 5, 2, 30, 40, 50, 255); /* visor */
line(s, 16, 14, 16, 0, 40, 36, 30, 255);
line(s, 17, 14, 17, 1, 55, 50, 40, 255);
line(s, 18, 14, 18, 2, 45, 40, 34, 255);
disc(s, 17, 1, 2, 60, 55, 45, 255); /* muzzle tip */
break;
case UT_BUGGY:
/* cabin + windshield + chassis + wheels */
/* cabin + windshield + hubbed wheels + thick MG */
fill_rect(s, 3, 7, 24, 16, ok, og, ob, 255);
fill_rect(s, 5, 9, 20, 12, base.r, base.g, base.b, 255);
fill_rect(s, 6, 9, 10, 6, lite.r, lite.g, lite.b, 255); /* cabin */
fill_rect(s, 7, 8, 8, 3, 35, 55, 75, 255); /* windshield */
fill_rect(s, 6, 9, 10, 6, lite.r, lite.g, lite.b, 255);
fill_rect(s, 7, 8, 8, 3, 35, 55, 75, 255);
disc(s, 8, 7, 5, ok, og, ob, 255);
disc(s, 22, 7, 5, ok, og, ob, 255);
disc(s, 8, 23, 5, ok, og, ob, 255);
disc(s, 22, 23, 5, ok, og, ob, 255);
disc(s, 8, 7, 4, tr, tg, tb, 255);
disc(s, 22, 7, 4, tr, tg, tb, 255);
disc(s, 8, 23, 4, tr, tg, tb, 255);
disc(s, 22, 23, 4, tr, tg, tb, 255);
line(s, 15, 15, 29, 15, 40, 36, 30, 255);
disc(s, 8, 7, 2, 90, 85, 75, 255); /* hub */
disc(s, 22, 7, 2, 90, 85, 75, 255);
disc(s, 8, 23, 2, 90, 85, 75, 255);
disc(s, 22, 23, 2, 90, 85, 75, 255);
line(s, 15, 14, 29, 14, 40, 36, 30, 255);
line(s, 15, 15, 29, 15, 50, 45, 35, 255);
line(s, 15, 16, 29, 16, 40, 36, 30, 255);
disc(s, 29, 15, 2, 60, 55, 45, 255);
break;
case UT_TANK:
/* side tracks + hull + cupola + thick barrel */
/* tracks + sprockets + cupola + thick barrel */
fill_rect(s, 2, 8, 5, 12, ok, og, ob, 255);
fill_rect(s, 23, 8, 5, 12, ok, og, ob, 255);
fill_rect(s, 3, 10, 3, 10, tr, tg, tb, 255);
fill_rect(s, 24, 10, 3, 10, tr, tg, tb, 255);
disc(s, 5, 11, 2, 40, 38, 32, 255); /* sprocket */
disc(s, 5, 20, 2, 40, 38, 32, 255);
disc(s, 26, 11, 2, 40, 38, 32, 255);
disc(s, 26, 20, 2, 40, 38, 32, 255);
fill_rect(s, 4, 10, 22, 10, ok, og, ob, 255);
fill_rect(s, 6, 11, 18, 8, base.r, base.g, base.b, 255);
disc(s, 15, 15, 6, ok, og, ob, 255);
disc(s, 15, 15, 5, lite.r, lite.g, lite.b, 255); /* cupola */
disc(s, 15, 12, 2, 40, 38, 32, 255); /* hatch */
disc(s, 15, 15, 7, ok, og, ob, 255);
disc(s, 15, 15, 6, lite.r, lite.g, lite.b, 255);
disc(s, 15, 12, 2, 40, 38, 32, 255);
line(s, 15, 13, 29, 13, 45, 40, 32, 255);
line(s, 15, 14, 29, 14, 50, 45, 35, 255);
line(s, 15, 15, 29, 15, 50, 45, 35, 255);
line(s, 15, 16, 28, 16, 50, 45, 35, 255);
line(s, 15, 15, 29, 15, 55, 50, 40, 255);
line(s, 15, 16, 29, 16, 50, 45, 35, 255);
line(s, 15, 17, 28, 17, 45, 40, 32, 255);
disc(s, 29, 15, 2, 60, 55, 45, 255);
disc(s, 8, 23, 4, tr, tg, tb, 255);
disc(s, 22, 23, 4, tr, tg, tb, 255);
break;
case UT_ARTILLERY:
/* chassis + long barrel tube + muzzle */
/* chassis + thick barrel + muzzle brake */
fill_rect(s, 2, 10, 26, 12, ok, og, ob, 255);
fill_rect(s, 4, 12, 22, 8, base.r, base.g, base.b, 255);
disc(s, 15, 15, 5, ok, og, ob, 255);
disc(s, 15, 15, 4, lite.r, lite.g, lite.b, 255);
disc(s, 15, 15, 6, ok, og, ob, 255);
disc(s, 15, 15, 5, lite.r, lite.g, lite.b, 255);
line(s, 15, 13, 4, 2, 45, 40, 32, 255);
line(s, 15, 14, 4, 3, 50, 45, 35, 255);
line(s, 15, 15, 3, 2, 55, 50, 40, 255);
line(s, 15, 16, 4, 4, 50, 45, 35, 255);
disc(s, 4, 3, 2, 60, 55, 45, 255); /* muzzle */
disc(s, 8, 23, 3, tr, tg, tb, 255);
disc(s, 22, 23, 3, tr, tg, tb, 255);
line(s, 15, 17, 5, 5, 45, 40, 32, 255);
disc(s, 4, 3, 3, 60, 55, 45, 255);
disc(s, 4, 3, 1, 30, 28, 24, 255);
disc(s, 8, 23, 4, tr, tg, tb, 255);
disc(s, 22, 23, 4, tr, tg, tb, 255);
break;
case UT_HARVESTER:
/* cabin + mid-loaded cargo bed (static atlas; no live Unit) */
/* cabin + scoop + mid cargo + hubbed wheels */
fill_rect(s, 1, 6, 28, 18, ok, og, ob, 255);
fill_rect(s, 3, 8, 24, 14, base.r, base.g, base.b, 255);
fill_rect(s, 3, 8, 8, 8, lite.r, lite.g, lite.b, 255); /* cabin */
fill_rect(s, 4, 8, 6, 3, 35, 55, 75, 255); /* cabin glass */
fill_rect(s, 11, 10, 14, 10, 55, 48, 32, 255); /* empty bed */
fill_rect(s, 11, 10, 8, 10, 200, 170, 90, 255); /* ~half cargo gold */
fill_rect(s, 3, 8, 8, 8, lite.r, lite.g, lite.b, 255);
fill_rect(s, 4, 8, 6, 3, 35, 55, 75, 255);
fill_rect(s, 1, 13, 4, 5, 90, 80, 55, 255); /* scoop */
fill_rect(s, 11, 10, 14, 10, 55, 48, 32, 255);
fill_rect(s, 11, 10, 8, 10, 200, 170, 90, 255);
line(s, 14, 10, 19, 10, 160, 130, 70, 255);
line(s, 14, 13, 19, 13, 160, 130, 70, 255);
line(s, 14, 16, 19, 16, 160, 130, 70, 255);
disc(s, 8, 23, 5, ok, og, ob, 255);
disc(s, 22, 23, 5, ok, og, ob, 255);
disc(s, 8, 23, 4, tr, tg, tb, 255);
disc(s, 22, 23, 4, tr, tg, tb, 255);
disc(s, 8, 23, 2, 90, 85, 75, 255);
disc(s, 22, 23, 2, 90, 85, 75, 255);
line(s, 5, 7, 5, 2, lite.r, lite.g, lite.b, 255);
line(s, 6, 7, 6, 3, 50, 46, 40, 255);
break;
case UT_JEEP:
/* open cabin + roll bar + MG */
/* thick roll cage + hubbed wheels + twin MG */
fill_rect(s, 4, 9, 22, 12, ok, og, ob, 255);
fill_rect(s, 6, 11, 18, 8, base.r, base.g, base.b, 255);
fill_rect(s, 7, 10, 8, 5, lite.r, lite.g, lite.b, 255);
disc(s, 9, 22, 5, ok, og, ob, 255);
disc(s, 21, 22, 5, ok, og, ob, 255);
disc(s, 9, 22, 4, tr, tg, tb, 255);
disc(s, 21, 22, 4, tr, tg, tb, 255);
disc(s, 9, 22, 2, 90, 85, 75, 255);
disc(s, 21, 22, 2, 90, 85, 75, 255);
line(s, 11, 11, 11, 3, lite.r, lite.g, lite.b, 255);
line(s, 12, 11, 12, 3, 50, 46, 40, 255);
line(s, 19, 11, 19, 3, lite.r, lite.g, lite.b, 255);
line(s, 18, 11, 18, 3, 50, 46, 40, 255);
line(s, 11, 3, 19, 3, lite.r, lite.g, lite.b, 255);
line(s, 11, 4, 19, 4, 50, 46, 40, 255);
line(s, 15, 14, 28, 14, 40, 36, 30, 255);
line(s, 15, 15, 28, 15, 50, 45, 35, 255);
line(s, 15, 16, 28, 16, 40, 36, 30, 255);
disc(s, 28, 15, 2, 60, 55, 45, 255);
break;
case UT_MUTANT:
/* hunched body + spikes + claws */
disc(s, 15, 17, 10, ok, og, ob, 255);
disc(s, 15, 15, 8, base.r, base.g, base.b, 255);
disc(s, 15, 9, 4, ok, og, ob, 255);
disc(s, 15, 9, 3, lite.r, lite.g, lite.b, 255);
line(s, 12, 6, 10, 1, 40, 36, 30, 255); /* back spike */
/* brow + thick spikes + claw tip */
disc(s, 15, 17, 11, ok, og, ob, 255);
disc(s, 15, 15, 9, base.r, base.g, base.b, 255);
disc(s, 15, 9, 5, ok, og, ob, 255);
disc(s, 15, 9, 4, lite.r, lite.g, lite.b, 255);
fill_rect(s, 11, 7, 7, 2, 30, 40, 50, 255); /* brow */
line(s, 12, 6, 9, 0, 40, 36, 30, 255);
line(s, 13, 6, 10, 1, 55, 50, 40, 255);
line(s, 15, 5, 15, 0, 40, 36, 30, 255);
line(s, 18, 6, 20, 1, 40, 36, 30, 255);
line(s, 15, 16, 26, 8, 40, 36, 30, 255); /* claw arm */
line(s, 24, 9, 28, 6, 55, 50, 40, 255);
line(s, 24, 9, 28, 11, 55, 50, 40, 255);
disc(s, 10, 22, 3, ok, og, ob, 255);
disc(s, 20, 22, 3, ok, og, ob, 255);
disc(s, 10, 22, 2, base.r, base.g, base.b, 255);
disc(s, 20, 22, 2, base.r, base.g, base.b, 255);
line(s, 16, 5, 16, 0, 55, 50, 40, 255);
line(s, 18, 6, 21, 0, 40, 36, 30, 255);
line(s, 17, 6, 20, 1, 55, 50, 40, 255);
line(s, 15, 16, 26, 8, 40, 36, 30, 255);
line(s, 15, 17, 26, 9, 50, 45, 35, 255);
line(s, 24, 9, 29, 5, 55, 50, 40, 255);
line(s, 24, 9, 29, 11, 55, 50, 40, 255);
line(s, 24, 10, 28, 8, 70, 60, 45, 255);
disc(s, 28, 8, 2, 70, 60, 45, 255);
disc(s, 10, 22, 4, ok, og, ob, 255);
disc(s, 20, 22, 4, ok, og, ob, 255);
disc(s, 10, 22, 3, base.r, base.g, base.b, 255);
disc(s, 20, 22, 3, base.r, base.g, base.b, 255);
break;
case UT_BEAST:
/* chunky body + snout + multi-wheel */
/* carapace ridge + tusks + hubbed multi-wheel */
fill_rect(s, 5, 9, 20, 12, ok, og, ob, 255);
fill_rect(s, 7, 11, 16, 8, base.r, base.g, base.b, 255);
fill_rect(s, 9, 10, 12, 3, lite.r, lite.g, lite.b, 255);
disc(s, 9, 21, 4, ok, og, ob, 255);
disc(s, 14, 22, 4, ok, og, ob, 255);
disc(s, 19, 21, 4, ok, og, ob, 255);
disc(s, 23, 22, 4, ok, og, ob, 255);
disc(s, 9, 21, 3, tr, tg, tb, 255);
disc(s, 14, 22, 3, tr, tg, tb, 255);
disc(s, 19, 21, 3, tr, tg, tb, 255);
disc(s, 23, 22, 3, tr, tg, tb, 255);
disc(s, 24, 12, 5, ok, og, ob, 255);
disc(s, 24, 12, 4, lite.r, lite.g, lite.b, 255); /* snout */
line(s, 26, 12, 29, 12, 40, 36, 30, 255);
disc(s, 24, 12, 6, ok, og, ob, 255);
disc(s, 24, 12, 5, lite.r, lite.g, lite.b, 255);
line(s, 26, 10, 29, 8, 40, 36, 30, 255);
line(s, 26, 14, 29, 16, 40, 36, 30, 255);
line(s, 26, 12, 29, 12, 55, 50, 40, 255);
disc(s, 29, 12, 2, 60, 55, 45, 255);
break;
case UT_RAVAGER:
/* heavy hull + side skirts + big barrel */
/* skirts + sprockets + hatch + thick multi-barrel */
fill_rect(s, 0, 7, 5, 14, ok, og, ob, 255);
fill_rect(s, 25, 7, 5, 14, ok, og, ob, 255);
fill_rect(s, 1, 10, 3, 10, tr, tg, tb, 255);
fill_rect(s, 26, 10, 3, 10, tr, tg, tb, 255);
disc(s, 3, 12, 2, 40, 38, 32, 255);
disc(s, 3, 20, 2, 40, 38, 32, 255);
disc(s, 28, 12, 2, 40, 38, 32, 255);
disc(s, 28, 20, 2, 40, 38, 32, 255);
fill_rect(s, 2, 9, 26, 12, ok, og, ob, 255);
fill_rect(s, 4, 10, 22, 10, base.r, base.g, base.b, 255);
disc(s, 15, 15, 7, ok, og, ob, 255);
disc(s, 15, 15, 6, lite.r, lite.g, lite.b, 255);
disc(s, 15, 15, 8, ok, og, ob, 255);
disc(s, 15, 15, 7, lite.r, lite.g, lite.b, 255);
disc(s, 15, 12, 2, 40, 38, 32, 255);
line(s, 15, 13, 29, 13, 45, 40, 32, 255);
line(s, 15, 14, 29, 14, 50, 45, 35, 255);
line(s, 15, 15, 29, 15, 50, 45, 35, 255);
line(s, 15, 16, 28, 16, 50, 45, 35, 255);
line(s, 15, 15, 29, 15, 55, 50, 40, 255);
line(s, 15, 16, 29, 16, 50, 45, 35, 255);
line(s, 15, 17, 28, 17, 45, 40, 32, 255);
disc(s, 29, 15, 2, 60, 55, 45, 255);
disc(s, 7, 23, 5, ok, og, ob, 255);
disc(s, 23, 23, 5, ok, og, ob, 255);
disc(s, 7, 23, 4, tr, tg, tb, 255);
disc(s, 23, 23, 4, tr, tg, tb, 255);
break;
case UT_FLAME:
/* backpack fuel tank + nozzle + body */
/* visor + valves + thick nozzle jet */
fill_rect(s, 7, 12, 16, 12, ok, og, ob, 255);
fill_rect(s, 9, 14, 12, 9, base.r, base.g, base.b, 255);
disc(s, 15, 9, 4, ok, og, ob, 255);
disc(s, 15, 9, 3, lite.r, lite.g, lite.b, 255);
disc(s, 8, 14, 5, ok, og, ob, 255); /* fuel tank */
disc(s, 8, 14, 4, 90, 70, 40, 255);
disc(s, 8, 14, 2, 200, 120, 40, 255);
disc(s, 15, 9, 5, ok, og, ob, 255);
disc(s, 15, 9, 4, lite.r, lite.g, lite.b, 255);
fill_rect(s, 12, 8, 5, 2, 30, 40, 50, 255);
disc(s, 8, 14, 6, ok, og, ob, 255);
disc(s, 8, 14, 5, 90, 70, 40, 255);
disc(s, 8, 14, 3, 200, 120, 40, 255);
disc(s, 8, 12, 1, 60, 55, 45, 255);
disc(s, 8, 16, 1, 60, 55, 45, 255);
line(s, 18, 14, 28, 19, 255, 120, 40, 255);
line(s, 18, 15, 28, 20, 255, 150, 50, 255);
line(s, 18, 16, 27, 21, 255, 180, 60, 255);
disc(s, 28, 20, 2, 255, 200, 80, 255);
line(s, 18, 17, 26, 21, 255, 200, 80, 255);
disc(s, 28, 20, 3, 255, 200, 80, 255);
disc(s, 28, 20, 1, 255, 240, 160, 255);
break;
case UT_MISSILE:
/* launcher rails + tubes on wheeled chassis */
/* dual pods + nose cones + hubbed chassis */
fill_rect(s, 4, 11, 22, 14, ok, og, ob, 255);
fill_rect(s, 6, 13, 18, 10, base.r, base.g, base.b, 255);
fill_rect(s, 11, 6, 10, 4, ok, og, ob, 255);
fill_rect(s, 12, 6, 8, 2, 255, 80, 60, 255);
fill_rect(s, 11, 11, 10, 4, ok, og, ob, 255);
fill_rect(s, 12, 11, 8, 2, 255, 100, 70, 255);
fill_rect(s, 11, 5, 10, 5, ok, og, ob, 255);
fill_rect(s, 12, 5, 8, 3, 255, 80, 60, 255);
fill_rect(s, 11, 11, 10, 5, ok, og, ob, 255);
fill_rect(s, 12, 11, 8, 3, 255, 100, 70, 255);
disc(s, 21, 7, 2, 255, 120, 80, 255);
disc(s, 21, 13, 2, 255, 140, 90, 255);
disc(s, 9, 23, 5, ok, og, ob, 255);
disc(s, 21, 23, 5, ok, og, ob, 255);
disc(s, 9, 23, 4, tr, tg, tb, 255);
disc(s, 21, 23, 4, tr, tg, tb, 255);
line(s, 15, 15, 28, 6, 255, 80, 60, 255);
disc(s, 9, 23, 2, 90, 85, 75, 255);
disc(s, 21, 23, 2, 90, 85, 75, 255);
line(s, 15, 15, 28, 5, 255, 80, 60, 255);
line(s, 15, 15, 28, 6, 255, 100, 70, 255);
disc(s, 28, 6, 2, 255, 140, 90, 255);
break;
case UT_MEDIC:
/* white van + light bar + larger cross + hubs */
fill_rect(s, 5, 10, 20, 15, ok, og, ob, 255);
fill_rect(s, 7, 12, 16, 11, 245, 245, 245, 255); /* white ambulance */
fill_rect(s, 6, 9, 6, 4, 200, 220, 240, 255); /* cab glass */
fill_rect(s, 7, 12, 16, 11, 245, 245, 245, 255);
fill_rect(s, 6, 9, 6, 4, 200, 220, 240, 255);
fill_rect(s, 10, 5, 8, 2, 240, 50, 50, 255); /* light bar */
disc(s, 10, 24, 5, ok, og, ob, 255);
disc(s, 20, 24, 5, ok, og, ob, 255);
disc(s, 10, 24, 4, tr, tg, tb, 255);
disc(s, 20, 24, 4, tr, tg, tb, 255);
disc(s, 15, 9, 5, 240, 50, 50, 255); /* red cross */
fill_rect(s, 14, 5, 3, 8, 255, 255, 255, 255);
fill_rect(s, 11, 8, 8, 3, 255, 255, 255, 255);
disc(s, 10, 24, 2, 90, 85, 75, 255);
disc(s, 20, 24, 2, 90, 85, 75, 255);
disc(s, 15, 9, 6, 240, 50, 50, 255);
fill_rect(s, 14, 5, 3, 9, 255, 255, 255, 255);
fill_rect(s, 11, 8, 9, 3, 255, 255, 255, 255);
break;
default:
disc(s, 15, 15, 10, ok, og, ob, 255);