diff --git a/apps/game/assets/tiles/ash.png b/apps/game/assets/tiles/ash.png index 95dc3a7..2255c06 100644 --- a/apps/game/assets/tiles/ash.png +++ b/apps/game/assets/tiles/ash.png Binary files differ diff --git a/apps/game/assets/tiles/ash_2.png b/apps/game/assets/tiles/ash_2.png index 2c3192f..7bbc216 100644 --- a/apps/game/assets/tiles/ash_2.png +++ b/apps/game/assets/tiles/ash_2.png Binary files differ diff --git a/apps/game/src/systems/Atmosphere.ts b/apps/game/src/systems/Atmosphere.ts index 5001764..9f9ca7d 100644 --- a/apps/game/src/systems/Atmosphere.ts +++ b/apps/game/src/systems/Atmosphere.ts @@ -62,9 +62,9 @@ }) : new ParticleEmitter({ color: 0x666677, - rate: 5, + rate: 9, lifetime: [4, 9], - velocity: { x: [-9, -3], y: [-2, 2] }, + velocity: { x: [-7, -2], y: [1, 4] }, // ветер + медленное падение size: 1, spawnArea: { width: 520, height: 300 }, seed: 20260905 diff --git a/apps/game/tools/pixelart/gen.mjs b/apps/game/tools/pixelart/gen.mjs index 95cf7a7..1dcbf26 100644 --- a/apps/game/tools/pixelart/gen.mjs +++ b/apps/game/tools/pixelart/gen.mjs @@ -84,7 +84,7 @@ return c; } -function ashTile(seed = 9) { +function ashTile(seed = 9, stems = 4) { // Пепельный бугор: чуть светлее травы, тоже без обводки. const c = new Canvas(SIZES.tile.w, SIZES.tile.h); fillDiamond(c, SIZES.tile.w / 2, SIZES.tile.h / 2, SIZES.tile.w, SIZES.tile.h, 'P3'); @@ -94,6 +94,14 @@ const y = 4 + Math.floor(r() * 9); if (c.get(x, y)) c.set(x, y, 'P5'); } + // Проглядывающая трава: стебли сквозь пепел (жизнь пробивается). + for (let i = 0; i < stems; i++) { + const x = 3 + Math.floor(r() * 26); + const y = 3 + Math.floor(r() * 10); + if (!c.get(x, y)) continue; + c.set(x, y, r() < 0.4 ? 'G1' : r() < 0.5 ? 'G2H' : 'G0'); + if (c.get(x, y - 1)) c.set(x, y - 1, 'G0'); // второй пиксель стебля + } return c; } @@ -977,7 +985,7 @@ save(waterTile(0), 'tiles/water_1.png'); save(waterTile(1), 'tiles/water_2.png'); save(ashTile(), 'tiles/ash.png'); -save(ashTile(41), 'tiles/ash_2.png'); +save(ashTile(41, 2), 'tiles/ash_2.png'); // реже трава — редкий второй оттенок save(decorTuft(), 'tiles/decor_tuft.png'); save(decorStone(), 'tiles/decor_stone.png'); save(decorBald(), 'tiles/decor_bald.png'); diff --git a/packages/engine/src/render/Lighting.ts b/packages/engine/src/render/Lighting.ts index addf9d7..73f50bf 100644 --- a/packages/engine/src/render/Lighting.ts +++ b/packages/engine/src/render/Lighting.ts @@ -137,8 +137,8 @@ alpha: number; } -/** Цвет тени тёмного пятна (умножается на сцену). */ -const DARK_SPOT_TINT = 0x3e3e48; +/** Цвет тени тёмного пятна (умножается на сцену) — тёплая пепельная мгла. */ +const DARK_SPOT_TINT = 0x4a4440; interface LightEntry { def: LightDef;