Приложение к Reference - Asset Inventory. Собрано разведкой 2026-07-20.
Наша папка Art
Инвентаризация Assets/_Project/Art/ — папки, которую делаем мы сами (в отличие от покупных/скачанных паков в Assets/Honeti, Assets/Kenney, Assets/Feel, Assets/Cainos).
Что внутри по объёму:
| Подпапка | Файлов (без .meta) | На диске | В git |
|---|---|---|---|
| Sprites | 2449 | 29 MB | да, 5219 записей |
| Arena | 127 | 879 KB | да, 256 |
| UI | 19 | 145 KB | да, 41 |
| Shaders | 16 | 108 KB | да, 32 |
| Materials | 4 | 24 KB | да, 8 |
| Animations | 0 (только .gitkeep) | 0 | 1 |
Главный дисбаланс виден сразу: 29 из 30 мегабайт папки — это пул скачанных спрайт-паков, из которого в игре реально задействовано 12 файлов. Всё, что мы нарисовали/написали руками, занимает меньше 1 MB.
Sprites
Верхнеуровневая карта. Детальный разбор боевой пригодности — в sprite-packs-audit и sprite-recommendations, здесь не дублируется.
Две корневые папки — Pixel Art Heroes (114 файлов) и New FREE Pixel Art Heroes (2334). Деление историческое: это два разных «залива» с itch, а не осмысленная классификация. Часть паков лежит в обеих (см. дубликаты ниже).
Pixel Art Heroes/
| Папка | Файлов | Стилевая семья | Разбор |
|---|---|---|---|
| EVil Wizard 2 | 9 | LuizMomo / Heroes | разобрана |
| Fantasy Warrior | 10 | LuizMomo / Heroes | разобрана — используется в игре |
| Huntress | 12 | LuizMomo / Heroes | разобрана |
| Huntress 2 | 11 | LuizMomo / Heroes | разобрана |
| Martial Hero 2 | 9 | LuizMomo / Heroes | разобрана (дубликат) |
| Medieval Warrior Pack 2 | 12 | LuizMomo / Heroes | разобрана — используется в игре |
| Medieval Warrior Pack 3 | 11 | LuizMomo / Heroes | разобрана |
| Monster_Creatures_Fantasy(Version 1.3) | 8 | LuizMomo / мобы | помечена как неполный фрагмент (дубликат) |
| Monsters Creatures Fantasy 2 | 27 | LuizMomo / мобы | разобрана (Bat/Mimic/Rat/Slime) |
| Nneshan | 4 | одиночный | исключена (статика) |
New FREE Pixel Art Heroes/
| Папка | Файлов | Стилевая семья | Разбор |
|---|---|---|---|
| ArcherHero | 8 | graphic-novel одиночный | разобрана |
| AxeWarriors | 189 | Bandits / AxeWarriors (per-frame) | разобрана (3 палитры одного архетипа) |
| Bandits | 83 | Bandits / AxeWarriors | разобрана |
| Characters 500+ (by batareya) | 526 | портреты | исключена (статика). 8.8 MB — крупнейший кусок папки |
| Evil Wizard | 6 | LuizMomo | разобрана |
| Evil Wizard 3 | 12 | LuizMomo | разобрана |
| FREE_Kobold Warrior 2D Pixel Art | 8 | одиночный, cute | разобрана (дырки: нет Death/Hit) |
| Forest_Monsters_FREE | 14 | LuizMomo / мобы | разобрана |
| Goblin Monsters 4 Colors | 45 | статичные силуэты | исключена (не анимации) |
| Goblin_Fighter | 2 | атлас-лист | разобрана |
| Goose | 8 | мем | разобрана (пасхалка) |
| Hero Knight 2 | 9 | LuizMomo | разобрана |
| HunterOrc | 12 | LuizMomo | разобрана |
| Martial Hero | 10 | LuizMomo | разобрана |
| Martial Hero 2 | 9 | LuizMomo | разобрана (дубликат) |
| Martial Hero 3 | 11 | LuizMomo | разобрана |
| Martial Hero 3(1) | 11 | LuizMomo | чистый дубликат предыдущей |
| Monster_Creatures_Fantasy(Version 1.3) | 8 | LuizMomo / мобы | неполный фрагмент (дубликат) |
| Ranger cat - spritesheets | 32 | одиночный, зверолюд | разобрана (два масштаба одного дизайна) |
| SkeletonKnight | 10 | high-polish undead | разобрана |
| Slime_Pixel_Monsters_Vol_1_COLOR_OUTLINE | 759 | per-frame мобы | разобрана. 5.7 MB, избыточная плотность кадров |
| Tiny RPG Pack 01 (Soldier&Orc) | 38 | Ansimuz / Tiny RPG | разобрана |
| Tiny RPG Pack 02 (Demon_A&Blood Monster_A) | 32 | Ansimuz / Tiny RPG | разобрана |
| Warrior-V1.3 | 143 | LuizMomo, платформерный набор | разобрана |
| Wizard Pack | 8 | LuizMomo | разобрана |
| Wizardgooseassets | 14 | мем | разобрана |
| imp_axe_demon | 101 | per-frame low-fantasy | разобрана |
| pack_loreon_knight | 47 | per-frame low-fantasy | разобрана |
| skeleton_sword | 53 | per-frame low-fantasy | разобрана |
| swordman pack | 1 | атлас-лист | разобрана |
| vagabond | 77 | одиночный | исключена (нет боевого набора). 1.2 MB за один кадр jump/landing |
| viking_axe_pack | 48 | per-frame low-fantasy | разобрана |
Не разобранных папок нет — оба документа покрывают весь пул. Но покрытие «разобрана» означает «оценена на пригодность», а не «используется».
Что из пула реально живое
Из 2770 ассетов (по GUID) в игре задействовано 12 листов из 2 паков:
Pixel Art Heroes/Medieval Warrior Pack 2/Sprites/— Idle, Run, Attack1–4, Take Hit, Death (7 листов). Идёт вPrefabs/UnitView.prefabи в клипыScriptableObjects/Visuals/MedievalWarrior/*.anim.Pixel Art Heroes/Fantasy Warrior/Sprites/— Idle, Run, Attack1, Death (4 листа). Идёт вScriptableObjects/Visuals/FantasyWarrior.asset+ клипы.
Остальные ~2758 файлов не имеет ни одной ссылки. Это не мусор в смысле «удалить сегодня» — это референс-пул под будущий ростер, и оба research-документа именно им и оперируют. Но он лежит в git и весит 29 MB.
Отдельно к удалению без потерь:
Martial Hero 3(1)— побайтный дубликатMartial Hero 3.- второй экземпляр
Monster_Creatures_Fantasy(Version 1.3)(лежит в обеих корневых папках, и обе версии — неполный фрагмент без Idle/Hit/Death). - второй экземпляр
Martial Hero 2. Characters 500+ (by batareya)(8.8 MB) иvagabond(1.2 MB) — по обоим разборам не боевые; 10 MB репозитория за материал, который в лучшем случае референс.
Ещё: аудит утверждает «спрайт-паки по git-конвенции пока не коммитятся». Это не так — git ls-files показывает 5219 записей под Art/Sprites. Либо конвенцию не применили, либо документ устарел. Стоит развести явно.
Если вектор действительно уходит в скелетную анимацию (Spine / Unity 2D Animation), весь этот пул превращается из «кандидатов в ростер» в «референс силуэтов», и держать его в репо становится тем более трудно оправдать.
Animations
Пусто. Только .gitkeep.
Не используется — точнее, папка-заглушка, которая никогда не наполнялась. При этом анимации в проекте есть, но лежат в другом месте: Assets/_Project/ScriptableObjects/Visuals/ (UnitBase.controller, FantasyWarrior/*.anim, MedievalWarrior/*.anim).
Это прямая структурная ошибка: .anim и .controller — это арт-ассеты, а не ScriptableObject’ы, и в ScriptableObjects/ им не место. Либо переносить их в Art/Animations/, либо удалять пустую папку и признавать, что визуальные клипы живут рядом с VisualData. Сейчас — худший вариант: заведена папка под цель, цель реализована мимо неё.
Materials
Четыре материала, все живые.
| Файл | Шейдер | Где используется | Статус |
|---|---|---|---|
MAT_SegmentedHealthBar.mat | Guildmaster/UI/SegmentedHealthBar | Prefabs/UI/HealthBar.prefab | живое |
MAT_SegmentedManaBar.mat | тот же шейдер, без щита | Prefabs/UI/ManaBar.prefab | живое |
MAT_Sprite_HitFlash.mat | Guildmaster/Sprite/HitFlash | Prefabs/UnitView.prefab (на Body-спрайте, _FlashAmount гонится через MPB из UnitView.cs) | живое |
TMP_NameLabel_Outline.mat | TMP SDF | Prefabs/UI/NameLabel.prefab, Prefabs/UI/FloatingText.prefab | живое |
Замечание к структуре: ещё четыре материала лежат не здесь, а в Art/Shaders/ (MapBackdrop, MapFog, MapIcon, MapTable). Папка Materials при этом существует и ровно для этого предназначена. Развести.
Shaders
Восемь шейдеров + четыре .hlsl-инклуда + четыре материала (которым здесь не место, см. выше). Заголовочные комментарии написаны по делу — из них видно не только «что», но и «почему именно так».
Карта акта (свежий слой, ветка feat/act-map-overhaul)
| Файл | Что делает | Статус |
|---|---|---|
SH_Map_Backdrop.shader (68 стр.) | Лист «старой бумаги» под узлами. Готовой текстуры пергамента нет, фактура собирается из одного grayscale-шума (Feel/MMTools/.../MMCloudsNoise.png), взятого дважды с разным тайлингом: крупно — волокно, мелко — зерно. Рваный край считается в шейдере по периметру. Виньетка тут же, а не постобработкой — иначе боевой Volume задел бы арену. | живое: MapBackdrop.mat → Configs/MapStyle.asset |
SH_Map_Table.shader (64 стр.) | Поверхность под листом, видна за рваными краями. Тайл — Kenney/kenney_pattern-pack/pattern_63.png, пятно света — Kenney/kenney_light-masks-1.0/circle_a_streaks_noise.png. Непрозрачный и самый дальний по Z: он закрывает пустоту, которую камера иначе заливает цветом очистки. | живое: MapTable.mat → MapStyle.asset |
SH_Map_Icon.shader (77 стр.) | Иконки узлов в едином цветовом решении: спрайт обесцвечивается и красится по рампе тень→свет (gradient map). Разномастные иконки Honeti читаются как один набор. Состояние узла приходит через SpriteRenderer.color = vertex color. Обвязка (_Flip, _MainTex_ST, инстансинг) скопирована с HitFlash. | живое: MapIcon.mat → Prefabs/Map/MapNode.prefab |
SH_Map_Fog.shader (66 стр.) | Атмосферный туман над непройденной частью акта: два слоя шума ползут в разные стороны, растворение — дизерингом по матрице Байера (гладкая дымка поверх пиксельных иконок читалась бы как фильтр из другой игры). | дремлющее, но не мусор. Материал по-прежнему прописан в MapStyle.asset, код WorldMapView.PlaceFog жив; эффект гасится тумблером VisualToggles по решению Макса («вообще не то, мб позже вернёмся»). Удалять нельзя — это осознанно отложенное, а не забытое |
MapBackdropCommon.hlsl / MapFogCommon.hlsl / MapIconCommon.hlsl / MapTableCommon.hlsl | Тела пасс, вынесенные в общие файлы, чтобы правка не разъезжалась между пассами 2D и Forward | живое (подключаются #include, не GUID-ссылкой — поэтому в grep по GUID выглядят как «0 ссылок», это ложная тревога) |
Готча, зафиксированная прямо в комментарии MapIconCommon.hlsl: в SH_Sprite_HitFlash код продублирован между пассами и не вынесен в инклуд. Пока не аукнулось, но помечено как мина.
Бой / VFX
| Файл | Что делает | Статус |
|---|---|---|
SH_Sprite_HitFlash.shader (177 стр.) | Точная копия официального URP 2D Sprite-Unlit-Default + одна строка вспышки. Базироваться на официальном критично: он несёт _Flip (flipX/flipY!), _MainTex_ST, инстансинг — прежний «голый» шейдер их не имел, и спрайт рисовался криво. _FlashAmount подмешивает цвет поверх итогового (не множитель), поэтому «в белый» реально заливает, в отличие от SpriteRenderer.color. | живое через MAT_Sprite_HitFlash.mat |
SH_Sprite_Shatter.shader (153 стр.) | Разлёт спрайта на треугольники одним дро-коллом. Меш — квад, триангулированный на разъединённые треугольники (ShatterMesh); каждый несёт центроид и случайные параметры. Vertex двигает тройку вершин как жёсткое целое: псевдо-3D кувыркание + 2D-спин + дрейф + гравитация. Цвет в три фазы: impact-вспышка → возврат исходного → выцветание в emissive-бирюзу (bloom подхватит). | живое, но через Shader.Find, а не через материал-ассет: Presentation/DeathShatter.cs:182 |
SH_Pixel_Burst.shader (103 стр.) | Пиксельный «брызг» частиц одним дро-коллом (hit-spark / muzzle / dust / heal). Общий меш PixelBurstMesh с запечёнными на частицу углом разлёта, рандомами скорости/жизни и порогом отсева. | живое, тоже через Shader.Find: Presentation/PixelBurst.cs:98 |
SegmentedHealthBar.shader (149 стр.) | Сегментированный HP/щит-бар для uGUI (world-space, надголовный). Всё за проход по UV.x: HP → щит → chip-дельта (догоняющий trail) → пустота. Насечки фиксированного значения: при росте EHP они сгущаются, а ширина бара не меняется (трюк LoL). | живое через оба MAT_Segmented*.mat |
Оба Shader.Find-шейдера — тот случай, когда grep по GUID даёт ноль, а ассет живее всех живых. Отдельная готча: Shader.Find не тянет шейдер в билд автоматически, если он не в Always Included Shaders или не в материале-ассете. Проверить, что они не отвалятся в плеере, стоит отдельно — по коду этого не видно.
UI
19 файлов в трёх местах. Пиксель-арт, производный от покупного пака Honeti.
UI/Honeti-gm/ — 9 файлов, всё живое
Результат работы Editor-тула Palette Remapper (Scripts/EditorTools/PaletteRemap/PaletteRemapWindow.cs, дефолтная выходная папка прописана буквально на эту директорию). Оригиналы Honeti перекрашены в нашу палитру — сверил побайтно, все девять отличаются от исходников, то есть ремап реально применён.
| Файл | Размер | Что это по факту |
|---|---|---|
WindowStroke_gm.png | 48×48 | Рамка панели: тонкий тёплый золотисто-коричневый кант с внутренней тенью, центр прозрачный. 9-slice. Самый нагруженный ассет темы — панели, диалоги, поля поиска, топбар |
GoldOutlined_gm.png | 16×16 | Кнопка secondary: скруглённый прямоугольник, оливково-золотой контур в 1px, заливки нет |
GoldOutlinedHover_gm.png | 16×16 | То же, светлее — hover |
GoldOutlinedDown_gm.png | 16×16 | То же, притоплено — press |
Gold2_gm.png | 16×16 | Кнопка primary: сплошная латунная заливка с bevel |
Gold2Hover_gm.png / Gold2Down_gm.png | 16×16 | Её состояния |
Inactive1_gm.png | 16×16 | Disabled / неактивный таб — тусклая плашка |
Separator_gm.png | 4×4 | Разделитель |
Подключены не через GUID, а по URL-пути в UI/Theme/components.uss — около 30 правил. Из-за этого поиск по GUID показывает по ним ноль ссылок; это ложное срабатывание, не мусор. Побочный эффект настоящий: переименование или перенос папки молча ломает тему, без ошибки компиляции.
Дыра: components.uss в двух местах (строки 1018 и 1440) тянет иконки напрямую из покупного пака — Honeti/PixelArtGUI/Textures/Icons/16/HeartRed.png и .../LockGold.png, мимо ремапа. Эти две иконки останутся в исходных цветах Honeti, когда всё вокруг перекрашено. Либо прогнать через тул, либо осознанно оставить.
UI/Icons-gm/Map/ — 9 иконок узлов карты
Вопреки суффиксу -gm, это побайтные копии оригиналов Honeti, а не перекраска (проверил cmp — все девять идентичны файлам из Honeti/PixelArtGUI/Textures/Icons/32/, кроме Help.png, который взят из /16/). И это правильно: перекраску делает SH_Map_Icon на лету через gradient map, потому что тон карты крутят десятки раз и перегенерировать набор на каждый поворот было бы дорого. Суффикс -gm тут вводит в заблуждение — он обещает ремап, которого нет.
| Файл | Что на картинке | Узел | Статус |
|---|---|---|---|
CompassOutlined.png 32×32 | Латунный компас с синим лимбом и красной стрелкой | Icon_Start | живое |
Sword01Outlined.png 32×32 | Прямой меч синеватой стали, золотая гарда, остриём вверх | Icon_Battle | живое |
Sword03Outlined.png 32×32 | Меч крупнее и богаче: красное лезвие, золотая крестовина | Icon_Elite | живое |
SkullOutlined.png 32×32 | Голубовато-серый череп анфас | Icon_Boss | живое |
ScrollOutlined.png 32×32 | Свёрнутый пергаментный свиток | Icon_TextEvent | живое |
Chest01Outlined.png 32×32 | Сундук с золотыми оковками, закрыт | Icon_Chest | живое |
PouchGreenCoinsGoldOutlined.png 32×32 | Зелёный кошель с золотыми монетами | Icon_Shop | живое |
Help.png 16×16 | Бледный «?» — почти белый, без внутренней тени | Icon_Unknown | живое, но проблемное |
Helmet02Outlined.png 32×32 | Сине-стальной шлем с забралом и гребнем | — | не используется |
Все восемь используемых прописаны в Prefabs/Map/MapNode.prefab (у него дети Icon_Start, Icon_Battle, Icon_Elite, Icon_Boss, Icon_TextEvent, Icon_Chest, Icon_Shop, Icon_Unknown — по одному на каждое значение MapNodeType из Scripts/Guild/RunState.cs).
Две реальные проблемы:
Help.png— 16×16 против 32×32 у всех остальных. Взят не из той папки исходников. В ряду одинаковых узлов «?» будет либо вдвое мельче, либо растянут вдвое с разъездом пиксельной сетки. Чинится в одно действие: скопироватьHoneti/PixelArtGUI/Textures/Icons/32/Help.png. Дополнительно: иконка почти сплошь белая, аSH_Map_Iconкрасит по яркости исходника — значит она ляжет целиком в_LightColorи останется плоской, без рельефа тень→свет, который вытягивает остальные иконки. Стоит взять вариант с контуром/тенью.Helmet02Outlined.png— сирота. Ни одной ссылки во всёмAssets/. По смыслу это был кандидат на Elite, проигравшийSword03Outlined. Мусор — удалять.
UI/WhiteFill.png — 16×16
Ровный белый квадрат, лежит в корне UI/ без папки. Живое: используется как база под шейдерную заливку в Prefabs/UI/HealthBar.prefab и Prefabs/UI/ManaBar.prefab (SegmentedHealthBar рисует всё сам, спрайт нужен только чтобы Image было что растягивать). Технический ассет; лежать в корне рядом с тематическими папками ему не стоило бы, но это косметика.
Arena
127 файлов, все — один автоматический побочный продукт, ничего нарисованного руками.
Arena/
└── Grayscale/
├── TX Tileset Grass Gray.png (256×256, атлас травы/земли/мостовой)
├── TX Tileset Wall Gray.png (512×512, атлас стен и парапетов)
└── Tiles/ 125 × TileBase (.asset)
Что на картинках по факту:
TX Tileset Grass Gray.png— обесцвеченный тайлсет Cainos: в верхней половине редкие мелкие детали-разбросы (травинки, камешки) на ровном сером; в нижней — блоки плитки/мостовой с фаской и трещинами и клинья переходов. Контраст очень низкий, всё сидит в узкой средней зоне серого.TX Tileset Wall Gray.png— кирпичная кладка в сером: угловые блоки с проёмами, длинные стеновые панели, вертикальные тонкие парапеты, отдельный элемент с зарешёченным окном. Читается заметно лучше пола — кладка даёт рисунок.
Живое, полностью. 125 .asset — это TileBase-обёртки, каждая ссылается на свой спрайт из этих двух PNG; они уложены в Scenes/WorldScene.unity (grayscale-дубль тайлмапов). Переключением между цветным и серым корнем занимается Presentation/TestZoneArenaSkin.cs (_colorRoot / _grayRoot), реагируя на TestZoneChangedEvent — это визуал тест-зоны «Бой» вне боя.
Замечания:
- Папка называется
Arena, а содержит толькоGrayscale. Собственного арта арены у нас нет вообще — цветной пол берётся прямо из покупного пака Cainos. То естьArena/сейчас не «наша арена», а «наш дериватив чужой арены». Имя обещает больше, чем есть. - 125 сгенерированных
.assetв git — приемлемо (они маленькие), но это машинный вывод. Если тайлсет когда-нибудь перегенерируют, всё переедет разом; полезно, чтобы скрипт генерации лежал рядом и был назван в истории (сейчас он упомянут только в коммитах63dec900/08b7077e). - Grayscale-пол вышел очень блёклым и малоконтрастным. Под заявленную эстетику тест-зоны это скорее плюс (фон должен отступать), но если серый режим когда-нибудь понадобится как полноценная арена — читаемости не хватит.
Сводка
Живое и работает:
- все 4 материала в
Materials/; - все 8 шейдеров + 4 инклуда + 4 материала в
Shaders/(fog — дремлет по решению, не мусор); - вся
Honeti-gm/(9 файлов, через USS по путям); - 8 из 9 иконок в
Icons-gm/Map/; WhiteFill.png;- вся
Arena/Grayscale/(127 файлов); - 12 листов из 2 спрайт-паков.
Мусор / кандидаты на удаление:
Art/UI/Icons-gm/Map/Helmet02Outlined.png— сирота, ноль ссылок;Sprites/.../Martial Hero 3(1)— побайтный дубликат;- вторые экземпляры
Martial Hero 2иMonster_Creatures_Fantasy(Version 1.3); Characters 500+ (by batareya)(8.8 MB) иvagabond(1.2 MB) — не боевые по обоим разборам;Art/Animations/— пустая папка-обещание, которое реализовали в другом месте.
Дыры и расхождения:
Help.png16×16 в наборе 32×32 + плоская белая заливка под gradient-map шейдер.- 4 материала карты лежат в
Shaders/, а не вMaterials/. .animи.controllerлежат вScriptableObjects/Visuals/, а не вArt/Animations/.components.ussтянет две иконки (HeartRed,LockGold) напрямую из пака Honeti, мимо палитрового ремапа — они останутся в чужих цветах.- Суффикс
-gmуIcons-gm/обещает перекраску, которой там нет (она в шейдере). Имя врёт. SH_Pixel_BurstиSH_Sprite_Shatterподключаются черезShader.Find— проверить, что они попадают в билд (Always Included Shaders или материал-ассет), иначе в плеере отвалятся молча.sprite-packs-audit.mdутверждает, что паки не коммитятся; фактически в git 5219 записей и 29 MB.- Дублирование кода между пассами в
SH_Sprite_HitFlash— помечено самим автором в комментарииMapIconCommon.hlslкак мина на будущее.