From aac30cb09746b6d39a27a5a1520f3875bf2b7cd0 Mon Sep 17 00:00:00 2001 From: "local-model/engine-L2-grok-4.5" Date: Sat, 19 Sep 2026 11:36:11 +0200 Subject: [PATCH] engine-c: unit mid-layers/tyres + denser combat FX --- engine-c/openkknd | Bin 209912 -> 209912 bytes engine-c/src/projectiles.c | 13 +++- engine-c/src/render.c | 22 ++++++- engine-c/src/sprites.c | 129 +++++++++++++++++++------------------ 4 files changed, 95 insertions(+), 69 deletions(-) diff --git a/engine-c/openkknd b/engine-c/openkknd index 4fa9fdf1a528d618717999267c35ed159591a9c2..041df9fd24ba9a54932e1885fbb1cfbe7141af3b 100755 GIT binary patch delta 30219 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 AvH$=8 delta 30258 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 diff --git a/engine-c/src/projectiles.c b/engine-c/src/projectiles.c index 53be2e0..fc19388 100644 --- a/engine-c/src/projectiles.c +++ b/engine-c/src/projectiles.c @@ -57,8 +57,12 @@ void bullet_update(Game *g, float dt) { Building *t = bld_by_id(g, b->target_bld); if (t) bld_apply_damage(g, t, b->damage); } - particle_burst(g, b->tx, b->ty, 4, - (b->kind==2)?2:1, 255, 200, 80); + /* denser impact: fire/laser core + smoke ring */ + int hit_kind = (b->kind == 2) ? 2 : 1; + particle_burst(g, b->tx, b->ty, 7, hit_kind, 255, 200, 80); + particle_burst(g, b->tx, b->ty, 4, 0, 90, 80, 60); + if (b->kind == 1 || b->kind == 3) + particle_burst(g, b->tx, b->ty, 3, 3, 255, 140, 40); /* swap-remove */ g->bullets[i] = g->bullets[g->bullet_count - 1]; g->bullet_count--; @@ -66,9 +70,12 @@ void bullet_update(Game *g, float dt) { } b->x += dx/d * step; b->y += dy/d * step; - /* trail */ + /* trail — denser muzzle streak for non-ballistic shells */ if (b->kind != 0) particle_spawn(g, b->x, b->y, 2, 255, 180, 60); + if (b->kind == 1 || b->kind == 3) + particle_spawn(g, b->x - dx / d * 3.0f, b->y - dy / d * 3.0f, + 3, 255, 160, 50); } } diff --git a/engine-c/src/render.c b/engine-c/src/render.c index 32f50ef..98fae58 100644 --- a/engine-c/src/render.c +++ b/engine-c/src/render.c @@ -293,17 +293,33 @@ void render_bullets(Game *g) { } } +/* Soft disc for smoke/fire particles (parity with snapshot disc FX). */ +static void draw_particle_disc(SDL_Renderer *ren, int cx, int cy, int rad, + Uint8 r, Uint8 g, Uint8 b, Uint8 a) { + SDL_SetRenderDrawColor(ren, r, g, b, a); + for (int j = -rad; j <= rad; j++) { + int half = (int)sqrtf((float)(rad * rad - j * j)); + SDL_RenderDrawLine(ren, cx - half, cy + j, cx + half, cy + j); + } +} + void render_particles(Game *g) { - /* Larger combat FX (parity with snapshot particle sizes). */ + /* Kind-aware combat FX: discs for smoke/fire, rects for sparks/debris. */ for (int i = 0; i < g->particle_count; i++) { Particle *p = &g->particles[i]; int sx = (int)(p->x - g->cam.x), sy = (int)(p->y - g->cam.y); float life_a = p->life / (p->max_life > 0 ? p->max_life : 1.0f); if (life_a < 0.12f) continue; Uint8 a = (Uint8)(255 * life_a); - SDL_SetRenderDrawColor(g->ren, p->r, p->g, p->b, a); + Uint8 rr = (Uint8)(p->r * life_a), gg = (Uint8)(p->g * life_a), + bb = (Uint8)(p->b * life_a); int sz = (p->kind == 1) ? 5 : (p->kind == 3) ? 3 : (p->kind == 0) ? 4 : 3; - SDL_RenderFillRect(g->ren, &(SDL_Rect){ sx - sz/2, sy - sz/2, sz + 1, sz + 1 }); + if (p->kind == 0 || p->kind == 1) { + draw_particle_disc(g->ren, sx, sy, sz + 1, rr, gg, bb, a); + } else { + SDL_SetRenderDrawColor(g->ren, rr, gg, bb, a); + SDL_RenderFillRect(g->ren, &(SDL_Rect){ sx - sz/2, sy - sz/2, sz + 1, sz + 1 }); + } } } diff --git a/engine-c/src/sprites.c b/engine-c/src/sprites.c index 5e34c82..59e49eb 100644 --- a/engine-c/src/sprites.c +++ b/engine-c/src/sprites.c @@ -76,100 +76,103 @@ SDL_Texture *sprites_make_unit(SDL_Renderer *r, UnitType t, Faction f) { SDL_Color base = faction_color(f); SDL_Color dark = darken(base, 0.55f); SDL_Color lite = lighten(base, 0.45f); - SDL_Color metal = { 60, 60, 70, 255 }; + /* Tyre / mid-tone parity with snapshot draw_unit (mr/mg/mb). */ + const Uint8 tr = 70, tg = 65, tb = 58; const Uint8 ok = 18, og = 16, ob = 14; /* near-black outline */ + (void)dark; switch (t) { case UT_INFANTRY: disc(s, 15, 15, 9, ok, og, ob, 255); disc(s, 15, 15, 7, base.r, base.g, base.b, 255); - disc(s, 15, 12, 3, lite.r, lite.g, lite.b, 255); - line(s, 15, 15, 15, 2, ok, og, ob, 255); /* rifle */ + disc(s, 15, 11, 4, lite.r, lite.g, lite.b, 255); + line(s, 15, 15, 15, 1, ok, og, ob, 255); /* rifle */ break; case UT_BUGGY: - fill_rect(s, 5, 8, 20, 14, ok, og, ob, 255); - fill_rect(s, 7, 10, 16, 10, base.r, base.g, base.b, 255); - disc(s, 10, 8, 3, metal.r, metal.g, metal.b, 255); - disc(s, 20, 8, 3, metal.r, metal.g, metal.b, 255); - disc(s, 10, 22, 3, metal.r, metal.g, metal.b, 255); - disc(s, 20, 22, 3, metal.r, metal.g, metal.b, 255); - line(s, 15, 15, 28, 15, ok, og, ob, 255); + 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, 7, 11, 16, 8, lite.r, lite.g, lite.b, 255); /* mid body */ + 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, ok, og, ob, 255); break; case UT_TANK: - fill_rect(s, 4, 9, 22, 13, ok, og, ob, 255); - fill_rect(s, 6, 11, 18, 9, base.r, base.g, base.b, 255); - disc(s, 15, 15, 6, lite.r, lite.g, lite.b, 255); + fill_rect(s, 2, 8, 26, 14, ok, og, ob, 255); + fill_rect(s, 4, 10, 22, 10, base.r, base.g, base.b, 255); + disc(s, 15, 15, 7, lite.r, lite.g, lite.b, 255); line(s, 15, 15, 30, 15, ok, og, ob, 255); - disc(s, 9, 22, 3, ok, og, ob, 255); - disc(s, 21, 22, 3, ok, og, ob, 255); + disc(s, 8, 23, 4, tr, tg, tb, 255); + disc(s, 22, 23, 4, tr, tg, tb, 255); break; case UT_ARTILLERY: - fill_rect(s, 4, 10, 22, 11, ok, og, ob, 255); - fill_rect(s, 6, 12, 18, 7, base.r, base.g, base.b, 255); - disc(s, 15, 15, 5, lite.r, lite.g, lite.b, 255); - line(s, 15, 15, 4, 4, ok, og, ob, 255); - line(s, 15, 15, 26, 26, ok, og, ob, 255); + 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, 6, lite.r, lite.g, lite.b, 255); + line(s, 15, 15, 3, 3, ok, og, ob, 255); + line(s, 15, 15, 27, 27, ok, og, ob, 255); break; case UT_HARVESTER: - fill_rect(s, 3, 7, 24, 16, ok, og, ob, 255); - fill_rect(s, 5, 9, 20, 12, dark.r, dark.g, dark.b, 255); - fill_rect(s, 6, 10, 18, 10, 180, 150, 70, 255); /* scrap bed */ - disc(s, 9, 22, 3, ok, og, ob, 255); - disc(s, 21, 22, 3, ok, og, ob, 255); - line(s, 6, 8, 6, 4, base.r, base.g, base.b, 255); + 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, 5, 10, 20, 10, 200, 170, 90, 255); /* scrap bed */ + disc(s, 8, 23, 4, tr, tg, tb, 255); + disc(s, 22, 23, 4, tr, tg, tb, 255); + line(s, 5, 7, 5, 2, lite.r, lite.g, lite.b, 255); break; case UT_JEEP: - fill_rect(s, 6, 10, 18, 11, ok, og, ob, 255); - fill_rect(s, 8, 12, 14, 7, base.r, base.g, base.b, 255); - disc(s, 10, 21, 3, metal.r, metal.g, metal.b, 255); - disc(s, 20, 21, 3, metal.r, metal.g, metal.b, 255); - line(s, 15, 12, 15, 5, base.r, base.g, base.b, 255); /* roll bar */ - line(s, 15, 15, 27, 15, ok, og, ob, 255); + 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); + disc(s, 9, 22, 4, tr, tg, tb, 255); + disc(s, 21, 22, 4, tr, tg, tb, 255); + line(s, 15, 11, 15, 3, lite.r, lite.g, lite.b, 255); /* roll bar */ + line(s, 15, 15, 28, 15, ok, og, ob, 255); break; case UT_MUTANT: disc(s, 15, 16, 10, ok, og, ob, 255); - disc(s, 15, 14, 7, base.r, base.g, base.b, 255); - disc(s, 15, 11, 3, lite.r, lite.g, lite.b, 255); - line(s, 15, 16, 23, 10, ok, og, ob, 255); /* arm/club */ + disc(s, 15, 14, 8, base.r, base.g, base.b, 255); + disc(s, 15, 10, 4, lite.r, lite.g, lite.b, 255); + line(s, 15, 16, 24, 9, ok, og, ob, 255); /* arm/club */ break; case UT_BEAST: - fill_rect(s, 7, 10, 16, 11, ok, og, ob, 255); - fill_rect(s, 9, 12, 12, 7, base.r, base.g, base.b, 255); - disc(s, 10, 20, 2, ok, og, ob, 255); - disc(s, 14, 21, 2, ok, og, ob, 255); - disc(s, 18, 20, 2, ok, og, ob, 255); - disc(s, 22, 21, 2, ok, og, ob, 255); - disc(s, 22, 13, 4, lite.r, lite.g, lite.b, 255); + 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); + 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, 23, 12, 5, lite.r, lite.g, lite.b, 255); break; case UT_RAVAGER: - fill_rect(s, 2, 8, 26, 15, ok, og, ob, 255); - fill_rect(s, 5, 11, 20, 9, base.r, base.g, base.b, 255); - disc(s, 15, 15, 7, lite.r, lite.g, lite.b, 255); + fill_rect(s, 0, 7, 30, 16, ok, og, ob, 255); + fill_rect(s, 2, 9, 26, 12, base.r, base.g, base.b, 255); + disc(s, 15, 15, 8, lite.r, lite.g, lite.b, 255); line(s, 15, 15, 29, 15, ok, og, ob, 255); /* big barrel */ - disc(s, 8, 22, 3, ok, og, ob, 255); - disc(s, 22, 22, 3, 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: - fill_rect(s, 7, 11, 16, 14, ok, og, ob, 255); - fill_rect(s, 9, 13, 12, 10, base.r, base.g, base.b, 255); - disc(s, 15, 11, 4, lite.r, lite.g, lite.b, 255); - line(s, 15, 15, 27, 19, 220, 120, 40, 255); /* flame nozzle */ + fill_rect(s, 5, 11, 20, 15, ok, og, ob, 255); + fill_rect(s, 7, 13, 16, 11, base.r, base.g, base.b, 255); + disc(s, 15, 10, 5, lite.r, lite.g, lite.b, 255); + line(s, 15, 15, 28, 20, 255, 150, 50, 255); /* flame nozzle */ break; case UT_MISSILE: - fill_rect(s, 6, 11, 18, 13, ok, og, ob, 255); - fill_rect(s, 8, 13, 14, 9, base.r, base.g, base.b, 255); - disc(s, 10, 22, 3, metal.r, metal.g, metal.b, 255); - disc(s, 20, 22, 3, metal.r, metal.g, metal.b, 255); - line(s, 15, 15, 28, 8, 200, 60, 60, 255); /* launcher */ + 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); + 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); /* launcher */ break; case UT_MEDIC: - fill_rect(s, 7, 10, 16, 14, ok, og, ob, 255); - fill_rect(s, 8, 11, 14, 12, 235, 235, 235, 255); /* white ambulance body */ - disc(s, 11, 23, 3, metal.r, metal.g, metal.b, 255); - disc(s, 19, 23, 3, metal.r, metal.g, metal.b, 255); - disc(s, 15, 10, 4, 220, 60, 60, 255); /* red cross */ - fill_rect(s, 14, 7, 2, 6, 255, 255, 255, 255); - fill_rect(s, 12, 9, 6, 2, 255, 255, 255, 255); + fill_rect(s, 5, 10, 20, 15, ok, og, ob, 255); + fill_rect(s, 7, 12, 16, 11, 245, 245, 245, 255); /* white ambulance */ + 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); break; default: disc(s, 15, 15, 10, ok, og, ob, 255);