Основа —
docs/world.md. Ключевое правило арта из сеттинга: тёплый цвет — только жизнь. Золото колокольчика, бронза, огонь кузни. Всё остальное — серо-оливковое, ржавое, тёмное.
Движок и генератор (apps/game/tools/pixelart/) используют ровно эти цвета. Имя цвета — тоже комментарий к настроению.
| Слот | HEX | Роль |
|---|---|---|
| P0 | #17171d |
контур, самая тёмная тень |
| P1 | #23232b |
тень плащей, ночная сторона |
| P2 | #2f2f38 |
тёмный серый |
| P3 | #3e3e48 |
пепельный накат, тень тайлов |
| P4 | #5b5b66 |
базовый серый |
| P5 | #767681 |
светлая пыль |
| P6 | #94949e |
пепельный бугор, свет |
| P5H | #b2b2bb |
выгоревший свет (редко!) |
| Слот | HEX | Роль |
|---|---|---|
| G0 | #343b2c |
тень травы |
| G1 | #4a5340 |
базовый луг |
| G2 | #626c4c |
трава, свет |
| G2H | #7d8662 |
сухие стебли |
| Слот | HEX | Роль |
|---|---|---|
| R0 | #3a2822 |
тёмная ржавчина, тень |
| R1 | #5c3b2e |
базовая ржавчина |
| R2 | #82503a |
светлая ржавчина |
| M0 | #26262e |
тёмный металл |
| M1 | #44454e |
сталь |
| M2 | #61626c |
светлый металл |
| Слот | HEX | Роль |
|---|---|---|
| W0 | #22343c |
глубина |
| W1 | #3b5e6b |
базовая |
| W2 | #568590 |
блики, рябь |
| Слот | HEX | Роль |
|---|---|---|
| B0 | #8a6a2e |
бронза, тень |
| B1 | #d99a32 |
бронза, свет / цветок |
| B2 | #f2cd68 |
золото,highlight цветка и колоколов |
| F0 | #d97f2b |
огонь кузни, уголёк |
| F1 | #f2b45a |
огонь, свет |
| Слот | HEX | Роль |
|---|---|---|
| C0 | #3a4356 |
плащ звонаря (тень) |
| C1 | #4d5a72 |
плащ звонаря (свет) |
| W3 | #8a8f7d |
вощёное полотно, Мила |
| S0 | #8a6d55 |
кожа, тень |
| S1 | #c9a689 |
кожа, свет |
| T0 | #5a4a3c |
шляпа/плащ Ирвина |
| T1 | #77634f |
шляпа/плащ Ирвина, свет |
Правила палитры: чёрный/белый запрещены (крайности — P0 и P5H). B1/B2/F0/F1 занимают не более 5% площади любого спрайта — золото должно быть событием, а не заливкой.
Источник номиналов — реестр apps/game/tools/pixelart/sizes.mjs (его читают генераторы и линтер; рантайм берёт размер кадра из атласа — AssetLoader.frameSize).
DEFAULT_ISO).tree, tree_2, tree_3) + кадр качания каждого (*_sway, крона +1px по X).chars/hero_lamp.png, группа satellite в sizes.mjs).props, footprint w×h): спрайт покрывает весь footprint, якорь — низ-центр footprint'а (движок ставит сам). Слоты:
npm run aiart (gen/build/promote, манифест apps/game/tools/aiart/atlas-manifest.json); в assets/ — только после ручного апрува обзорного листа (status: approved). Палитра — параметр манифеста; по умолчанию эти 32 цвета.P0 только на внешнем силуэте; внутренние формы отделяются тенью, не контуром.#f2b45a по умолчанию); холодный свет — только для неживого (резонанс башни — W2). Ночной ambient областей — глубокая синева (#3e4658 и темнее), свет колокольчиков — B2 #f2cd68. Интенсивность источника ≤ 1.1, радиус ≤ 5 юнитов; «золото — событие, а не заливка» относится и к свету: гало — событие сцены, не фон. Виньетка (низкое hp, зона наката) и тёмные ауры зон — multiply-затемнение краёв/пятна, не рисуются в спрайты.Все PNG — из apps/game/assets/, генерируются apps/game/tools/pixelart/gen.mjs.
apps/game/src/data/map.ts)| id | файл | содержание |
|---|---|---|
| 0 | tiles/grass.png |
серая трава, редкие сухие стебли |
| 1 | tiles/path.png |
звонёная тропа: утоптанный пепел, светлее травы |
| 2 | tiles/water.png |
Серый пруд: W1 база, блики W2 |
| 3 | tiles/tree.png |
дерево Ржавой рощи — 32×48, tall-объект |
| 4 | tiles/ash.png |
пепельный бугор: P4/P6 с тёмным ободом |
| 5 | tiles/bellflower.png |
трава + цветок B1/B2 (квестовый тайл) |
| 6 | tiles/tower.png |
башня Звенца — 32×80, tall-объект 2.5 юнита: бак на ногах-рельсах, колокол B0/B2 под баком |
| 7 | tiles/house.png |
дом — 32×56, tall-объект 1.75 юнита, объёмный в изометрии: две стены сходятся ближним углом (юго-запад C1 светлая, юго-восток C0 тёмная), шатровая крыша. Ещё четыре фасада: house_2 — двускатная шпальная с фронтоном и трубой, house_3 — низкий сарай с широким окном (оба 32×56, 1.75 юнита), house_4 — амбар с воротами 32×80 (2.5 юнита), house_5 — двухэтажный, два ряда окон, 32×80. Варианты HOUSE по хэшу, в Звенце расставлены явно |
| 18 | tiles/wire.png |
бухта кабеля рощи — 32×32, tall-объект 0.6 юнита: ржавые кольца R1/R2 по M1/M0 с тёмными сечениями |
| 28 | tiles/boulder.png |
валун — 32×32, tall-объект 1.05 юнита, непроходим: камень в изо-объёме (верх P4/P5, юго-запад P5 с бликами P5H, юго-восток P2/P3), трещины P1, пепел на верхней грани. Ещё два вида: boulder_2 — острый скол 32×40 (1.25 юнита), boulder_3 — плоский лежачий 32×24 (0.75 юнита); те же грани, тень-подошва. Варианты BOULDER по хэшу |
| 29 | tiles/bush.png |
мёртвый куст — 32×40, tall-объект 1.25 юнита, непроходим: облако ветвей G0/G1/G2 с прорехами, стебли G2H, тёплых нет. Ещё два вида: bush_2 — приземистый развесистый 32×32 (1.0 юнита), bush_3 — высокий столбик 32×48 (1.45 юнита). Варианты BUSH по хэшу |
| 19 | tiles/rail.png |
рельсы разъезда — 32×16, ходовой: две нити R1/R2 по шпалам T0/T1 на утоптанном пепле |
| 20 | tiles/stairs.png |
люк-ступени — 32×16, ходовой: тёмный провал P0 с тремя ступенями, ржавая кромка R1 |
| 21 | tiles/machine.png |
Старая Машина — 32×80, tall-объект 2.5 юнита: железный корпус M0/M1 с ржавыми потёками, труба, тёмное устье с тлеющими углями F0/B0 (огонь — жизнь) |
| — | tiles/house_big.png |
большой дом — 64×80, prop-объект footprint 2×2: два модуля щитов, козырёк над дверью, окна с переплётом |
| — | tiles/chest.png |
сундук — 24×18, prop интерьеров: вощёное дерево T0/T1, бронзовая полоса по стыку крышки и замок B0/B1/B2 (см. SIZES.prop.chest) |
| — | tiles/grass_2/3.png, tiles/path_2.png, tiles/ash_2.png |
варианты текстур 32×16 (та же палитра, другой seed шума) — микс по хэшу координат, в tiles не попадают |
| — | tiles/decor_tuft/stone/bald.png |
декор 16×16, рисунок в ромб 16×8: кустик G1/G2/G2H, камешек P3/P5, проплешина G0/G1 — прозрачное поле, рисуются плашмя |
| файл | кадры | содержание |
|---|---|---|
chars/hero_down_1.png, hero_down_2.png |
ходьба вниз | звонарь: плащ C0/C1, шляпа T0, колокольчик B0 |
chars/hero_up_1.png, hero_up_2.png |
ходьба вверх | спина: узел плаща, лампа |
chars/hero_side_1.png, hero_side_2.png |
ходьба вправо | влево — горизонтальный флип |
chars/elder_irwin.png |
idle | длинный плащ T0/T1, борода S0, стилос |
chars/trader_mila.png |
idle | платок W3, тележка-ручка, ручной колокольчик B1 |
chars/fauna_deer_1.png, fauna_deer_2.png |
стоит/шаг | безгласный олень: серо-оливковый G1/G2, рога M2, без тёплых пикселей |
apps/game/tools/pixelart/gen.mjs — генератор: пиксель-карты в ASCII + энкодер PNG (без зависимостей).apps/game/assets/ — выход генератора, загружается AssetLoader по ключу = пути без расширения (tiles/grass → assets/tiles/grass.png).