diff --git a/engine-c/src/snapshot.c b/engine-c/src/snapshot.c index 090aa0a..ba728ee 100644 --- a/engine-c/src/snapshot.c +++ b/engine-c/src/snapshot.c @@ -266,30 +266,50 @@ static void draw_unit(Unit *u, int sx, int sy) { tyre_mark(LX(22,23), LY(22,23), SI(4), ph, 0); break; case UT_ARTILLERY: - /* howitzer: outriggers + shield + ammo rack + elevated tube + brake */ + /* howitzer: trails + cradle + shield + ammo + tube bands + brake + hubs */ fill_rect(LX(1,18)-SI(1), LY(1,18)-1, SI(8), SI(3), ok, og, ob); fill_rect(LX(21,18)-SI(1), LY(21,18)-1, SI(8), SI(3), ok, og, ob); fill_rect(LX(0,19)-SI(1), LY(0,19)-1, SI(4), SI(2), 40, 38, 32); fill_rect(LX(26,19)-SI(1), LY(26,19)-1, SI(4), SI(2), 40, 38, 32); + fill_rect(LX(2,20)-SI(1), LY(2,20)-1, SI(2), SI(2), 55, 50, 40); /* trail pin L */ + fill_rect(LX(26,20)-SI(1), LY(26,20)-1, SI(2), SI(2), 55, 50, 40); /* trail pin R */ fill_rect(sx-SI(11), sy-SI(4), SI(22), SI(10), ok, og, ob); fill_rect(sx-SI(9), sy-SI(2), SI(18), SI(7), br, bg, bb); + fill_rect(LX(5,14)-SI(1), LY(5,14)-SI(1), SI(2), SI(5), 40, 38, 32); /* chassis rail L */ + fill_rect(LX(23,14)-SI(1), LY(23,14)-SI(1), SI(2), SI(5), 40, 38, 32); /* chassis rail R */ fill_rect(LX(22,12)-SI(1), LY(22,12)-SI(2), SI(6), SI(8), 55, 50, 40); line(LX(23,13), LY(23,13), LX(27,13), LY(27,13), 90, 80, 55); line(LX(23,15), LY(23,15), LX(27,15), LY(27,15), 90, 80, 55); line(LX(23,17), LY(23,17), LX(27,17), LY(27,17), 90, 80, 55); + fill_rect(LX(23,14)-SI(1), LY(23,14)-1, SI(2), SI(2), 200, 160, 60); /* shell tip */ + fill_rect(LX(25,16)-SI(1), LY(25,16)-1, SI(2), SI(2), 200, 160, 60); fill_rect(LX(10,8)-SI(1), LY(10,8)-SI(1), SI(10), SI(5), ok, og, ob); fill_rect(LX(11,9)-SI(1), LY(11,9)-1, SI(8), SI(3), lr, lg, lb); + fill_rect(LX(12,8)-SI(1), LY(12,8)-1, SI(6), SI(1), 255, 200, 40); /* warn stripe */ disc(sx, sy-SI(1), SI(4), ok, og, ob); disc(sx, sy-SI(1), SI(3), lr, lg, lb); + fill_rect(LX(13,13)-SI(1), LY(13,13)-1, SI(4), SI(3), 55, 50, 40); /* breech */ + fill_rect(LX(14,14)-SI(1), LY(14,14)-1, SI(2), SI(1), 90, 80, 55); line(LX(15,11), LY(15,11), LX(3,1), LY(3,1), 45, 40, 32); line(LX(15,12), LY(15,12), LX(3,2), LY(3,2), 50, 45, 35); line(LX(15,13), LY(15,13), LX(2,1), LY(2,1), 55, 50, 40); line(LX(15,14), LY(15,14), LX(3,3), LY(3,3), 50, 45, 35); line(LX(15,15), LY(15,15), LX(4,4), LY(4,4), 45, 40, 32); + disc(LX(10,8), LY(10,8), SI(1), 70, 65, 55); /* tube band */ + disc(LX(7,5), LY(7,5), SI(1), 70, 65, 55); + fill_rect(LX(12,16)-SI(1), LY(12,16)-1, SI(2), SI(3), 70, 65, 55); /* elev hydrau */ + fill_rect(LX(16,16)-SI(1), LY(16,16)-1, SI(2), SI(3), 70, 65, 55); fill_rect(LX(1,0)-SI(1), LY(1,0)-1, SI(5), SI(4), 60, 55, 45); fill_rect(LX(2,1)-SI(1), LY(2,1)-1, SI(3), SI(2), 30, 28, 24); + disc(LX(3,2), LY(3,2), SI(1), 90, 85, 75); /* brake ring */ + line(LX(20,11), LY(20,11), LX(20,6), LY(20,6), 50, 46, 40); /* antenna */ + disc(LX(20,5), LY(20,5), SI(1), 200, 200, 80); + disc(LX(8,23), LY(8,23), SI(5), ok, og, ob); + disc(LX(22,23), LY(22,23), SI(5), ok, og, ob); disc(LX(8,23), LY(8,23), SI(4), mr, mg, mb); disc(LX(22,23), LY(22,23), SI(4), mr, mg, mb); + disc(LX(8,23), LY(8,23), SI(2), 90, 85, 75); + disc(LX(22,23), LY(22,23), SI(2), 90, 85, 75); tyre_mark(LX(8,23), LY(8,23), SI(4), ph, 0); tyre_mark(LX(22,23), LY(22,23), SI(4), ph, 0); break; @@ -493,31 +513,50 @@ static void draw_unit(Unit *u, int sx, int sy) { tyre_mark(LX(23,23), LY(23,23), SI(4), ph, 0); break; case UT_FLAME: - /* dual tanks + hose + heat shield + nozzle jet */ + /* dual tanks + gauges + hose + shield + nozzle jet + boots */ fill_rect(sx-SI(8), sy-SI(3), SI(16), SI(12), ok, og, ob); fill_rect(sx-SI(6), sy-SI(1), SI(12), SI(9), br, bg, bb); + fill_rect(LX(10,15)-SI(1), LY(10,15)-1, SI(3), SI(4), 45, 42, 36); /* pouch */ + fill_rect(LX(18,16)-SI(1), LY(18,16)-1, SI(3), SI(3), 45, 42, 36); /* belt box */ disc(LX(15,9), LY(15,9), SI(5), ok, og, ob); disc(LX(15,9), LY(15,9), SI(4), lr, lg, lb); fill_rect(LX(12,8)-SI(1), LY(12,8)-1, SI(5), SI(2), 30, 40, 50); + fill_rect(LX(13,7)-SI(1), LY(13,7)-1, SI(3), SI(1), 90, 100, 110); /* brow plate */ + fill_rect(LX(14,11)-SI(1), LY(14,11)-1, SI(2), SI(3), 55, 50, 40); /* shoulder plate */ disc(LX(6,13), LY(6,13), SI(5), ok, og, ob); disc(LX(6,13), LY(6,13), SI(4), 90, 70, 40); disc(LX(6,13), LY(6,13), SI(2), 200, 120, 40); disc(LX(6,19), LY(6,19), SI(5), ok, og, ob); disc(LX(6,19), LY(6,19), SI(4), 90, 70, 40); disc(LX(6,19), LY(6,19), SI(2), 200, 120, 40); + fill_rect(LX(4,12)-SI(1), LY(4,12)-1, SI(2), SI(3), 255, 200, 40); /* tank warn stripe */ + fill_rect(LX(4,18)-SI(1), LY(4,18)-1, SI(2), SI(3), 255, 200, 40); disc(LX(6,11), LY(6,11), SI(1), 60, 55, 45); disc(LX(6,17), LY(6,17), SI(1), 60, 55, 45); disc(LX(6,21), LY(6,21), SI(1), 60, 55, 45); + disc(LX(8,13), LY(8,13), SI(1), 180, 220, 255); /* gauge */ + disc(LX(8,19), LY(8,19), SI(1), 180, 220, 255); + line(LX(8,14), LY(8,14), LX(10,14), LY(10,14), 50, 46, 40); /* strap */ + line(LX(8,18), LY(8,18), LX(10,18), LY(10,18), 50, 46, 40); line(LX(10,14), LY(10,14), LX(16,16), LY(16,16), 50, 45, 35); line(LX(10,15), LY(10,15), LX(16,17), LY(16,17), 70, 55, 35); + disc(LX(12,15), LY(12,15), SI(1), 70, 65, 55); /* hose clamp */ + disc(LX(14,16), LY(14,16), SI(1), 70, 65, 55); fill_rect(LX(16,12)-SI(1), LY(16,12)-SI(1), SI(5), SI(8), 55, 50, 40); fill_rect(LX(17,13)-SI(1), LY(17,13)-SI(1), SI(3), SI(6), 90, 70, 40); + fill_rect(LX(18,14)-SI(1), LY(18,14)-1, SI(1), SI(4), 40, 38, 32); /* nozzle grip */ + disc(LX(19,13), LY(19,13), SI(1), 255, 180, 60); /* pilot light */ line(LX(20,14), LY(20,14), LX(28,19), LY(28,19), 255, 120, 40); line(LX(20,15), LY(20,15), LX(28,20), LY(28,20), 255, 150, 50); line(LX(20,16), LY(20,16), LX(27,21), LY(27,21), 255, 180, 60); line(LX(20,17), LY(20,17), LX(26,21), LY(26,21), 255, 200, 80); + line(LX(21,13), LY(21,13), LX(27,17), LY(27,17), 255, 100, 30); /* upper jet */ disc(LX(28,20), LY(28,20), SI(3), 255, 200, 80); disc(LX(28,20), LY(28,20), SI(1), 255, 240, 160); + disc(LX(26,18), LY(26,18), SI(1), 255, 220, 120); /* ember */ + disc(LX(27,22), LY(27,22), SI(1), 255, 160, 60); + fill_rect(LX(11,22)-SI(1), LY(11,22)-1, SI(3), SI(3), 40, 36, 30); /* boot L */ + fill_rect(LX(17,22)-SI(1), LY(17,22)-1, SI(3), SI(3), 40, 36, 30); /* boot R */ break; case UT_MISSILE: /* MLRS box + rails + stripes + cab + pods + hydrau + hubs (KKND rocket truck) */ diff --git a/engine-c/src/sprites.c b/engine-c/src/sprites.c index 08d8cae..056b5ba 100644 --- a/engine-c/src/sprites.c +++ b/engine-c/src/sprites.c @@ -198,30 +198,50 @@ SDL_Texture *sprites_make_unit(SDL_Renderer *r, UnitType t, Faction f) { disc(s, 22, 23, 4, tr, tg, tb, 255); break; case UT_ARTILLERY: - /* howitzer: outriggers + shield + ammo rack + elevated tube + brake */ + /* howitzer: trails + cradle + shield + ammo + tube bands + brake + hubs */ fill_rect(s, 1, 18, 8, 3, ok, og, ob, 255); /* left outrigger */ fill_rect(s, 21, 18, 8, 3, ok, og, ob, 255); /* right outrigger */ - fill_rect(s, 0, 19, 4, 2, 40, 38, 32, 255); - fill_rect(s, 26, 19, 4, 2, 40, 38, 32, 255); + fill_rect(s, 0, 19, 4, 2, 40, 38, 32, 255); /* spade L */ + fill_rect(s, 26, 19, 4, 2, 40, 38, 32, 255); /* spade R */ + fill_rect(s, 2, 20, 2, 2, 55, 50, 40, 255); /* trail pin L */ + fill_rect(s, 26, 20, 2, 2, 55, 50, 40, 255); /* trail pin R */ fill_rect(s, 4, 11, 22, 10, ok, og, ob, 255); fill_rect(s, 6, 13, 18, 7, base.r, base.g, base.b, 255); + fill_rect(s, 5, 14, 2, 5, 40, 38, 32, 255); /* chassis rail L */ + fill_rect(s, 23, 14, 2, 5, 40, 38, 32, 255); /* chassis rail R */ fill_rect(s, 22, 12, 6, 8, 55, 50, 40, 255); /* ammo rack */ line(s, 23, 13, 27, 13, 90, 80, 55, 255); line(s, 23, 15, 27, 15, 90, 80, 55, 255); line(s, 23, 17, 27, 17, 90, 80, 55, 255); + fill_rect(s, 23, 14, 2, 2, 200, 160, 60, 255); /* shell tip */ + fill_rect(s, 25, 16, 2, 2, 200, 160, 60, 255); fill_rect(s, 10, 8, 10, 5, ok, og, ob, 255); /* gun shield */ fill_rect(s, 11, 9, 8, 3, lite.r, lite.g, lite.b, 255); - disc(s, 15, 14, 4, ok, og, ob, 255); + fill_rect(s, 12, 8, 6, 1, 255, 200, 40, 255); /* warn stripe */ + disc(s, 15, 14, 4, ok, og, ob, 255); /* recoil cradle */ disc(s, 15, 14, 3, lite.r, lite.g, lite.b, 255); + fill_rect(s, 13, 13, 4, 3, 55, 50, 40, 255); /* breech */ + fill_rect(s, 14, 14, 2, 1, 90, 80, 55, 255); line(s, 15, 11, 3, 1, 45, 40, 32, 255); /* elevated tube */ line(s, 15, 12, 3, 2, 50, 45, 35, 255); line(s, 15, 13, 2, 1, 55, 50, 40, 255); line(s, 15, 14, 3, 3, 50, 45, 35, 255); line(s, 15, 15, 4, 4, 45, 40, 32, 255); + disc(s, 10, 8, 1, 70, 65, 55, 255); /* tube band */ + disc(s, 7, 5, 1, 70, 65, 55, 255); + fill_rect(s, 12, 16, 2, 3, 70, 65, 55, 255); /* elev hydrau */ + fill_rect(s, 16, 16, 2, 3, 70, 65, 55, 255); fill_rect(s, 1, 0, 5, 4, 60, 55, 45, 255); /* muzzle brake */ fill_rect(s, 2, 1, 3, 2, 30, 28, 24, 255); + disc(s, 3, 2, 1, 90, 85, 75, 255); /* brake ring */ + line(s, 20, 11, 20, 6, 50, 46, 40, 255); /* antenna */ + disc(s, 20, 5, 1, 200, 200, 80, 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); break; case UT_HARVESTER: /* cabin + boom/scoop + conveyor + hopper panels + exhaust/lights + hubbed wheels */ @@ -402,31 +422,50 @@ SDL_Texture *sprites_make_unit(SDL_Renderer *r, UnitType t, Faction f) { disc(s, 23, 23, 4, tr, tg, tb, 255); break; case UT_FLAME: - /* dual tanks + hose + heat shield + nozzle jet */ + /* dual tanks + gauges + hose + shield + nozzle jet + boots */ 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); + fill_rect(s, 10, 15, 3, 4, 45, 42, 36, 255); /* pouch */ + fill_rect(s, 18, 16, 3, 3, 45, 42, 36, 255); /* belt box */ 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); /* visor */ + fill_rect(s, 13, 7, 3, 1, 90, 100, 110, 255); /* brow plate */ + fill_rect(s, 14, 11, 2, 3, 55, 50, 40, 255); /* shoulder plate */ disc(s, 6, 13, 5, ok, og, ob, 255); /* dual fuel tanks */ disc(s, 6, 13, 4, 90, 70, 40, 255); disc(s, 6, 13, 2, 200, 120, 40, 255); disc(s, 6, 19, 5, ok, og, ob, 255); disc(s, 6, 19, 4, 90, 70, 40, 255); disc(s, 6, 19, 2, 200, 120, 40, 255); - disc(s, 6, 11, 1, 60, 55, 45, 255); + fill_rect(s, 4, 12, 2, 3, 255, 200, 40, 255); /* tank warn stripe */ + fill_rect(s, 4, 18, 2, 3, 255, 200, 40, 255); + disc(s, 6, 11, 1, 60, 55, 45, 255); /* valve */ disc(s, 6, 17, 1, 60, 55, 45, 255); disc(s, 6, 21, 1, 60, 55, 45, 255); + disc(s, 8, 13, 1, 180, 220, 255, 255); /* gauge */ + disc(s, 8, 19, 1, 180, 220, 255, 255); + line(s, 8, 14, 10, 14, 50, 46, 40, 255); /* strap */ + line(s, 8, 18, 10, 18, 50, 46, 40, 255); line(s, 10, 14, 16, 16, 50, 45, 35, 255); /* hose */ line(s, 10, 15, 16, 17, 70, 55, 35, 255); + disc(s, 12, 15, 1, 70, 65, 55, 255); /* hose clamp */ + disc(s, 14, 16, 1, 70, 65, 55, 255); fill_rect(s, 16, 12, 5, 8, 55, 50, 40, 255); /* heat shield */ fill_rect(s, 17, 13, 3, 6, 90, 70, 40, 255); + fill_rect(s, 18, 14, 1, 4, 40, 38, 32, 255); /* nozzle grip */ + disc(s, 19, 13, 1, 255, 180, 60, 255); /* pilot light */ line(s, 20, 14, 28, 19, 255, 120, 40, 255); line(s, 20, 15, 28, 20, 255, 150, 50, 255); line(s, 20, 16, 27, 21, 255, 180, 60, 255); line(s, 20, 17, 26, 21, 255, 200, 80, 255); + line(s, 21, 13, 27, 17, 255, 100, 30, 255); /* upper jet */ disc(s, 28, 20, 3, 255, 200, 80, 255); disc(s, 28, 20, 1, 255, 240, 160, 255); + disc(s, 26, 18, 1, 255, 220, 120, 255); /* ember */ + disc(s, 27, 22, 1, 255, 160, 60, 255); + fill_rect(s, 11, 22, 3, 3, 40, 36, 30, 255); /* boot L */ + fill_rect(s, 17, 22, 3, 3, 40, 36, 30, 255); /* boot R */ break; case UT_MISSILE: /* MLRS box + rails + stripes + cab + pods + hydrau + hubs (KKND rocket truck) */