diff --git a/engine-c/src/snapshot.c b/engine-c/src/snapshot.c index f656648..090aa0a 100644 --- a/engine-c/src/snapshot.c +++ b/engine-c/src/snapshot.c @@ -520,9 +520,14 @@ static void draw_unit(Unit *u, int sx, int sy) { disc(LX(28,20), LY(28,20), SI(1), 255, 240, 160); break; case UT_MISSILE: - /* MLRS box launcher + rails + warning stripes + hubbed chassis */ + /* MLRS box + rails + stripes + cab + pods + hydrau + hubs (KKND rocket truck) */ fill_rect(sx-SI(12), sy-SI(3), SI(24), SI(12), ok, og, ob); fill_rect(sx-SI(10), sy-SI(1), SI(20), SI(8), br, bg, bb); + fill_rect(LX(4,15)-SI(1), LY(4,15)-SI(1), SI(3), SI(5), 40, 38, 32); /* chassis rail L */ + fill_rect(LX(23,15)-SI(1), LY(23,15)-SI(1), SI(3), SI(5), 40, 38, 32); /* chassis rail R */ + fill_rect(LX(2,11)-SI(1), LY(2,11)-SI(1), SI(6), SI(7), ok, og, ob); /* cab outline */ + fill_rect(LX(3,12)-SI(1), LY(3,12)-SI(1), SI(4), SI(5), 55, 52, 45); + fill_rect(LX(3,12)-SI(1), LY(3,12)-SI(1), SI(4), SI(2), 140, 180, 210); /* cab glass */ fill_rect(LX(8,4)-SI(1), LY(8,4)-SI(2), SI(16), SI(10), ok, og, ob); fill_rect(LX(9,5)-SI(1), LY(9,5)-SI(1), SI(14), SI(8), 50, 48, 42); line(LX(10,6), LY(10,6), LX(22,6), LY(22,6), 90, 85, 70); @@ -532,8 +537,16 @@ static void draw_unit(Unit *u, int sx, int sy) { fill_rect(LX(9,5)-SI(1), LY(9,5)-SI(1), SI(3), SI(8), 255, 200, 40); fill_rect(LX(12,5)-SI(1), LY(12,5)-SI(1), SI(2), SI(8), 30, 28, 24); fill_rect(LX(14,5)-SI(1), LY(14,5)-SI(1), SI(3), SI(8), 255, 200, 40); + fill_rect(LX(17,5)-SI(1), LY(17,5)-SI(1), SI(2), SI(8), 30, 28, 24); + fill_rect(LX(19,5)-SI(1), LY(19,5)-SI(1), SI(3), SI(8), 255, 200, 40); disc(LX(23,7), LY(23,7), SI(2), 255, 120, 80); disc(LX(23,10), LY(23,10), SI(2), 255, 140, 90); + disc(LX(23,12), LY(23,12), SI(1), 255, 160, 100); + fill_rect(LX(7,14)-SI(1), LY(7,14)-SI(1), SI(2), SI(4), 70, 65, 55); /* hydraulic L */ + fill_rect(LX(21,14)-SI(1), LY(21,14)-SI(1), SI(2), SI(4), 70, 65, 55); /* hydraulic R */ + line(LX(8,13), LY(8,13), LX(8,5), LY(8,5), 60, 55, 45); /* elevate strut */ + disc(LX(4,10), LY(4,10), SI(1), 200, 200, 80); /* antenna tip */ + line(LX(4,10), LY(4,10), LX(4,8), LY(4,8), 90, 90, 70); disc(LX(9,23), LY(9,23), SI(5), ok, og, ob); disc(LX(21,23), LY(21,23), SI(5), ok, og, ob); disc(LX(9,23), LY(9,23), SI(4), mr, mg, mb); @@ -545,6 +558,7 @@ static void draw_unit(Unit *u, int sx, int sy) { line(LX(22,8), LY(22,8), LX(29,4), LY(29,4), 255, 80, 60); line(LX(22,10), LY(22,10), LX(29,6), LY(29,6), 255, 100, 70); disc(LX(29,5), LY(29,5), SI(2), 255, 140, 90); + disc(LX(28,7), LY(28,7), SI(1), 255, 180, 100); /* exhaust spark */ break; case UT_MEDIC: /* bumper + grille + lights + door/side + mirrors + exhaust + light-bar + stretcher/cross + hubs */ @@ -879,30 +893,46 @@ static void draw_bld(Building *b, int sx, int sy) { disc(sx + W/2 + 6, sy + H - 5, 3, 35, 28, 18); break; case BT_POWER: - /* tall cooling towers + reactor block + steam plumes (KKND plant read) */ + /* cooling towers + reactor + steam + yard/cables/fins (KKND plant) */ fill_rect(sx + 3, sy + H - 10, W - 6, 8, ok, og, ob); fill_rect(sx + 4, sy + H - 8, W - 8, 5, 55, 50, 42); /* pad */ + fill_rect(sx + 5, sy + H - 7, 2, 2, 35, 32, 28); /* pad bolt L */ + fill_rect(sx + W - 7, sy + H - 7, 2, 2, 35, 32, 28); /* pad bolt R */ /* left cooling tower (taller cone) */ fill_rect(sx + 4, sy + 8, 10, H - 18, ok, og, ob); fill_rect(sx + 5, sy + 9, 8, H - 20, 95, 145, 195); fill_rect(sx + 6, sy + 6, 6, 5, ok, og, ob); fill_rect(sx + 7, sy + 5, 4, 4, 70, 120, 170); /* rim */ + fill_rect(sx + 6, sy + 12, 1, H - 26, 70, 110, 150); /* cooling fin */ + fill_rect(sx + 11, sy + 12, 1, H - 26, 70, 110, 150); disc(sx + 9, sy + 4, 3, 240, 248, 255); /* steam puff */ disc(sx + 7, sy + 2, 2, 220, 235, 250); + disc(sx + 11, sy + 3, 2, 230, 240, 252); /* right cooling tower */ fill_rect(sx + W - 14, sy + 10, 10, H - 20, ok, og, ob); fill_rect(sx + W - 13, sy + 11, 8, H - 22, 85, 135, 185); fill_rect(sx + W - 12, sy + 8, 6, 4, ok, og, ob); fill_rect(sx + W - 11, sy + 7, 4, 3, 65, 115, 165); + fill_rect(sx + W - 12, sy + 14, 1, H - 28, 65, 105, 145); + fill_rect(sx + W - 7, sy + 14, 1, H - 28, 65, 105, 145); disc(sx + W - 9, sy + 5, 3, 235, 245, 255); disc(sx + W - 7, sy + 3, 2, 210, 230, 250); + disc(sx + W - 11, sy + 4, 2, 225, 238, 250); /* central reactor block + glow */ fill_rect(sx + W/2 - 5, sy + H/2 - 4, 10, H/2 - 2, ok, og, ob); fill_rect(sx + W/2 - 4, sy + H/2 - 2, 8, H/2 - 6, 55, 95, 150); + fill_rect(sx + W/2 - 3, sy + H/2, 2, 3, 255, 200, 40); /* warn stripe */ disc(sx + W/2, sy + H/2 + 2, 4, 120, 200, 255); disc(sx + W/2, sy + H/2 + 2, 2, 250, 252, 255); line(sx + W/2, sy + 8, sx + W/2, sy + H - 10, 200, 230, 250); line(sx + 8, sy + H/2 + 2, sx + W - 8, sy + H/2 + 2, 180, 220, 245); + /* switchyard box + cable runs */ + fill_rect(sx + W/2 - 8, sy + H - 14, 6, 5, ok, og, ob); + fill_rect(sx + W/2 - 7, sy + H - 13, 4, 3, 45, 42, 36); + line(sx + W/2 - 5, sy + H - 14, sx + W/2 - 5, sy + H/2 + 6, 90, 85, 70); + line(sx + W/2 + 4, sy + H - 12, sx + W - 10, sy + H/2 + 4, 80, 75, 60); + fill_rect(sx + 2, sy + H - 12, 2, 4, 50, 48, 40); /* fence post L */ + fill_rect(sx + W - 4, sy + H - 12, 2, 4, 50, 48, 40); /* fence post R */ break; case BT_TURRET: /* armored bunker + ringed cupola + thick barrel (KKND turret read) */ diff --git a/engine-c/src/sprites.c b/engine-c/src/sprites.c index eac58ff..08d8cae 100644 --- a/engine-c/src/sprites.c +++ b/engine-c/src/sprites.c @@ -429,9 +429,14 @@ SDL_Texture *sprites_make_unit(SDL_Renderer *r, UnitType t, Faction f) { disc(s, 28, 20, 1, 255, 240, 160, 255); break; case UT_MISSILE: - /* MLRS box launcher + rails + warning stripes + hubbed chassis */ + /* MLRS box + rails + stripes + cab + pods + hydrau + hubs (KKND rocket truck) */ fill_rect(s, 3, 12, 24, 12, ok, og, ob, 255); fill_rect(s, 5, 14, 20, 8, base.r, base.g, base.b, 255); + fill_rect(s, 4, 15, 3, 5, 40, 38, 32, 255); /* chassis rail L */ + fill_rect(s, 23, 15, 3, 5, 40, 38, 32, 255); /* chassis rail R */ + fill_rect(s, 2, 11, 6, 7, ok, og, ob, 255); /* cab outline */ + fill_rect(s, 3, 12, 4, 5, 55, 52, 45, 255); + fill_rect(s, 3, 12, 4, 2, 140, 180, 210, 255); /* cab glass */ fill_rect(s, 8, 4, 16, 10, ok, og, ob, 255); /* box launcher */ fill_rect(s, 9, 5, 14, 8, 50, 48, 42, 255); line(s, 10, 6, 22, 6, 90, 85, 70, 255); /* rails */ @@ -441,8 +446,16 @@ SDL_Texture *sprites_make_unit(SDL_Renderer *r, UnitType t, Faction f) { fill_rect(s, 9, 5, 3, 8, 255, 200, 40, 255); /* warning stripes */ fill_rect(s, 12, 5, 2, 8, 30, 28, 24, 255); fill_rect(s, 14, 5, 3, 8, 255, 200, 40, 255); + fill_rect(s, 17, 5, 2, 8, 30, 28, 24, 255); + fill_rect(s, 19, 5, 3, 8, 255, 200, 40, 255); disc(s, 23, 7, 2, 255, 120, 80, 255); /* nose tips */ disc(s, 23, 10, 2, 255, 140, 90, 255); + disc(s, 23, 12, 1, 255, 160, 100, 255); + fill_rect(s, 7, 14, 2, 4, 70, 65, 55, 255); /* hydraulic L */ + fill_rect(s, 21, 14, 2, 4, 70, 65, 55, 255); /* hydraulic R */ + line(s, 8, 13, 8, 5, 60, 55, 45, 255); /* elevate strut */ + disc(s, 4, 10, 1, 200, 200, 80, 255); /* antenna tip */ + line(s, 4, 10, 4, 8, 90, 90, 70, 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); @@ -452,6 +465,7 @@ SDL_Texture *sprites_make_unit(SDL_Renderer *r, UnitType t, Faction f) { line(s, 22, 8, 29, 4, 255, 80, 60, 255); line(s, 22, 10, 29, 6, 255, 100, 70, 255); disc(s, 29, 5, 2, 255, 140, 90, 255); + disc(s, 28, 7, 1, 255, 180, 100, 255); /* exhaust spark */ break; case UT_MEDIC: /* bumper + grille + lights + door/side + mirrors + exhaust + light-bar + stretcher/cross + hubs */ @@ -685,30 +699,46 @@ SDL_Texture *sprites_make_bld(SDL_Renderer *r, BuildingType t, Faction f) { disc(s, W/2 + 6, H - 5, 3, 35, 28, 18, 255); break; case BT_POWER: - /* tall cooling towers + reactor block + steam plumes (KKND plant read) */ + /* cooling towers + reactor + steam + yard/cables/fins (KKND plant) */ fill_rect(s, 3, H - 10, W - 6, 8, ok, og, ob, 255); fill_rect(s, 4, H - 8, W - 8, 5, 55, 50, 42, 255); /* pad */ + fill_rect(s, 5, H - 7, 2, 2, 35, 32, 28, 255); /* pad bolt L */ + fill_rect(s, W - 7, H - 7, 2, 2, 35, 32, 28, 255); /* pad bolt R */ /* left cooling tower (taller cone) */ fill_rect(s, 4, 8, 10, H - 18, ok, og, ob, 255); fill_rect(s, 5, 9, 8, H - 20, 95, 145, 195, 255); fill_rect(s, 6, 6, 6, 5, ok, og, ob, 255); fill_rect(s, 7, 5, 4, 4, 70, 120, 170, 255); /* rim */ + fill_rect(s, 6, 12, 1, H - 26, 70, 110, 150, 255); /* cooling fin */ + fill_rect(s, 11, 12, 1, H - 26, 70, 110, 150, 255); disc(s, 9, 4, 3, 240, 248, 255, 255); /* steam puff */ disc(s, 7, 2, 2, 220, 235, 250, 255); + disc(s, 11, 3, 2, 230, 240, 252, 255); /* right cooling tower */ fill_rect(s, W - 14, 10, 10, H - 20, ok, og, ob, 255); fill_rect(s, W - 13, 11, 8, H - 22, 85, 135, 185, 255); fill_rect(s, W - 12, 8, 6, 4, ok, og, ob, 255); fill_rect(s, W - 11, 7, 4, 3, 65, 115, 165, 255); + fill_rect(s, W - 12, 14, 1, H - 28, 65, 105, 145, 255); + fill_rect(s, W - 7, 14, 1, H - 28, 65, 105, 145, 255); disc(s, W - 9, 5, 3, 235, 245, 255, 255); disc(s, W - 7, 3, 2, 210, 230, 250, 255); + disc(s, W - 11, 4, 2, 225, 238, 250, 255); /* central reactor block + glow */ fill_rect(s, W/2 - 5, H/2 - 4, 10, H/2 - 2, ok, og, ob, 255); fill_rect(s, W/2 - 4, H/2 - 2, 8, H/2 - 6, 55, 95, 150, 255); + fill_rect(s, W/2 - 3, H/2, 2, 3, 255, 200, 40, 255); /* warn stripe */ disc(s, W/2, H/2 + 2, 4, 120, 200, 255, 255); disc(s, W/2, H/2 + 2, 2, 250, 252, 255, 255); line(s, W/2, 8, W/2, H - 10, 200, 230, 250, 255); line(s, 8, H/2 + 2, W - 8, H/2 + 2, 180, 220, 245, 255); + /* switchyard box + cable runs */ + fill_rect(s, W/2 - 8, H - 14, 6, 5, ok, og, ob, 255); + fill_rect(s, W/2 - 7, H - 13, 4, 3, 45, 42, 36, 255); + line(s, W/2 - 5, H - 14, W/2 - 5, H/2 + 6, 90, 85, 70, 255); + line(s, W/2 + 4, H - 12, W - 10, H/2 + 4, 80, 75, 60, 255); + fill_rect(s, 2, H - 12, 2, 4, 50, 48, 40, 255); /* fence post L */ + fill_rect(s, W - 4, H - 12, 2, 4, 50, 48, 40, 255); /* fence post R */ break; case BT_TURRET: /* armored bunker + ringed cupola + thick barrel (KKND turret read) */