Все принятые геймдизайнерские решения — с датой и причиной. Пишется в момент принятия. Отсюда решения расходятся по канон-документам; здесь — история и обоснования.

Что ещё НЕ решено и требует проработки — Meta - Roadmap. Снятые с дизайна механики — legacy.

Как ссылаться на решение

Номера уникальны только внутри сессии: сессия 2026-07-15 нумерует сквозняком 1–72, а сессии 2026-07-17 и позже начинают счёт заново. Поэтому голое «№1» неоднозначно. Канонная форма ссылки — ДАТА/№: 2026-07-24/15, 2026-07-15/68. Старые ссылки вида «реш. №39» относятся к сессии 2026-07-15.

Донумерационные обозначения GDD-N / TECH-N

В записях до 2026-07-16 доки цитируются по старой нумерованной схеме (GDD-8, TECH-6). Файлов с такими именами больше нет — vault перешёл на латинские слаги. Обозначения оставлены как есть: это исторические записи, и переписывать их задним числом значит терять след того, что автор имел в виду в тот день. Соответствие ищется по MOC. В футерах «Правит доки» — навигации, а не истории — ссылки переведены на слаги.


Оглавление


2026-08-23 (4) — постоянных панелей нет: описания и статы живут в тултипах

Сказано: «Зачем эта панель вообще? Наводимся на героев. Нам так и так тултип со статами. Ты чего? У нас же тултипы для этого и нужны) И так во всем» (23.08.2026, сессия ce48eacb, ответ на опросник).

Решено (HARD, на всю игру):

  1. Постоянная панель описания на экране не заводится нигде. Имя стоит на поверхности, описание и числа приходят тултипом по наведению. Механизм один — цепочка TooltipChain, второго нет.
  2. Панель осмотра «Сосуда» снимается с экрана подготовки. Освободившаяся ширина уходит содержимому: карточка героя растёт с 326x659 до 432x659 при кадре 1920x1080.
  3. Исключение для чисел статов отменяется. Статы читаются тем же тултипом, что и всё прочее.

Почему: панель занимала четверть кадра всегда, отвечая на вопрос, который задают изредка, и была вторым механизмом описаний при уже живой цепочке тултипов — то есть прямым нарушением правила «у каждого факта один владелец». Плата за неё видна числом: без панели карточка героя из столбика 1:2 становится портретом 2:3, а замах оружия выходит за силуэт примерно на треть ширины тела и в узкой рамке резался бы. Живой герой на островке — смысл всего каркаса (решение 2026-08-23 (3)), и панель стоила ему подвижности.

Что это замещает: решение 2026-08-22 (4) в двух местах — superseded, не отменено целиком. Трёхслойная модель показа (плитка → панель → карточка) остаётся по смыслу — обзор, быстрая справка, полное досье, — но средний слой отныне реализуется тултипом, а не панелью: панель убирается совсем. Оговорка «сравнивать по всплывающим окнам нельзя» снимается автором.

Цена, принятая сознательно: сравнить двух бойцов больше нельзя одним взглядом — тултип гаснет вместе с курсором, и сравнение идёт наведением по очереди.

Дом решения: Modes - Preparation Screens §0 и §3, Modes - UI Feedback.


2026-08-23 (3) — экран «Отряд» становится единым каркасом: герои стоят, вкладка меняет полку

Сказано: «Мне очень нравится идея, что везде по итогу будут стоять наши 4 спрайта итоговых персонажей. Вот так вот, красивые, в полный рост. И уже на них мы меняем релики. Тут мы меняем весселов. Тут мы менячем предметы. Т.е. внешний вид везде будет одинаковый почти. Верхняя часть - одна и та же. … Снизу свой уникальный вид инветаря» (23.08.2026, сессия ce48eacb, ответ на опросник). Там же про размер: «Нет, спрайт на весь допустим экран, на весь размер, не такое мелкое поле. Он - больше. … Например показывать не просто спрайта, а спрайт + фон (земля на которой стоит в духе нашей арены). И на землю класть нужное. Напирмер релик и сосуд могут - это просто имена даже, а не слоты. Чем занята говорит именно текст + внешний вид. Предметы можно ниже ног “на земле”» (23.08.2026, сессия ce48eacb). Про удаление: «Расстановку вообще не просил, хз зачем она, легаси, удаляем» (23.08.2026, сессия ce48eacb). Про Тактику: «таксику лучше вместе с сосудами реликвия и предметами. Просто вместе инвентарей как раз будут именно настройки. Так будто лучше и логичнее и не плодим сущности» (23.08.2026, сессия ce48eacb).

Решено:

  1. Экран один, вкладок четыре. Верхний таб зовётся «Отряд»; внутри полки Сосуды · Мементо · Предметы · Тактика. Отдельных экранов «Отряд», «Предметы» и «Инвентарь» больше нет.
  2. Каркас постоянен, вкладка меняет только полку и землю под ногами. Постоянны верхняя навигация и четыре карточки героев; вкладка трогает содержимое полки внизу и то, чем занята земля. Переключение не двигает ни одного постоянного элемента.
  3. Карточка героя — спрайт в полный рост и островок земли в ракурсе арены. Четыре островка, по одному на бойца; на вкладке «Сосуды» карточка означает место в строю, и пустое рисуется пунктирным островком без героя.
  4. Слотов у человека нет. Мементо — это облик: надел — спрайт стал этим бойцом, и квадрат рядом дублировал бы уже сказанное телом. Занятость читается подписью одной строкой: «Ирма, Антимаг»; свободный — «Ирма, Свободный сосуд».
  5. Три цвета в подписи, не два. Имя — основным, Мементо — акцентным, «Свободный сосуд» — приглушённым. Иначе пустота светится наравне с обликом и перестаёт от него отличаться.
  6. Предметы стоят НА земле у ног — три открытых и закрытый четвёртый с замком. Навесное усиление лежит рядом с человеком, а не входит в него.
  7. Надевание — только перетаскивание с полки на героя. Кнопки «Надеть» нет. Прежний жест «брось карточку на тело в мире» снят вместе с окном инвентаря.
  8. Подтабы стоят шапкой полки — переключатель у того, чем он правит.
  9. Склад — иконками, а не карточками-таро. Таро это язык выбора (награда, лавка), склад отвечает на вопрос «что у меня есть», где нужны плотность и узнавание. Фактура таро при этом не выбрасывается, а поднимается уровнем выше — на карточку героя.
  10. LoadoutScreen (экран снаряжения одного «Сосуда») удаляется как легаси. Мементо и Предметы уезжают полками сюда, Поведение — полкой «Тактика», Улучшения — в расширенную карточку по ПКМ.
  11. Полка «Тактика» закрыта до своего захода. Механика поведения не продумывается; вкладка стоит на месте и гаснет текстом, оставаясь живой — по правилу Modes - UI Feedback §1 мёртвая кнопка читается как сломанный экран. Место в ленте занято заранее намеренно: вкладка, пришедшая позже, сдвинула бы остальные и переучила руку.

Почему: прежний инвентарь был окном поверх расстановки со сквозной дыркой к арене — треть кадра уходила не под содержимое, а под проход к миру, и она же порождала класс готч «проходит клик насквозь или нет». Надевание Мементо было единственным в игре жестом такого рода: везде вещь надевается на носителя, а тут — броском на тело в мире. Каркас снимает и окно, и особый жест разом, а взамен даёт то, чего у экрана подготовки не было никогда: человека видно целиком.

Что это замещает: решение 2026-08-22 (4) в части раскладок — superseded. Страницы «Отряд» («Витрина») и «Предметы» («Строки») отменены как две отдельные раскладки, их содержимое переезжает в общий каркас. Числа состава (4 в бою, 8 мест отряда, 3+1 слот предмета) остаются в силе.

Отвергнуто: перенести инвентарь в правую колонку (двенадцать иконок в столбик читаются медленнее строки, склад становится кишкой, тащить приходится поперёк кадра); подтабы под спрайтами (липнут глазом к людям, а переключают склад); подтабы второй лентой сверху (два ряда табов друг под другом — игрок каждый раз решает, какой главный).

Чертёж: Лаборатория, раздел «Отряд: единый каркас» (docs/lab/src/sections/ui-prep-frame.ts) — схема каркаса, четыре полки, три места подтабов с вердиктом.

Открыто: как выглядит базовый вид «Свободного сосуда» — от него зависит, читается ли пустота без подписи; отклик при перетаскивании (цель огромная, но без подсветки контура и земли игрок тянет в пустоту).

Дом решения: Modes - Preparation Screens.


2026-08-23 (2) — «Реликвия» становится «Мементо»: имя называет память, а не экипировку

Сказано: «у нас то что щас называлось “реликами” и своим названием сбивает с толку ибо обычно привычно что это экип айфтемы а не классы - не назывались ранее как-то более красиво и круто разве? memento? Что-то связанное с памятью? … Мне не кажется ведь?» (23.08.2026, сессия df1cdd43).

Решено:

  1. Сущность зовётся «Мементо» (англ. Hero Memento). Прежнее имя — «Реликвия» / Hero Relic — снято во всей документации и во всех игровых текстах.
  2. Форма в игре — одно слово, «Мементо». Полная форма «Мементо героя» ставится только там, где термин вводится читателю впервые.
  3. Род и склонение: средний, несклоняемое. «Принятое Мементо», «три Мементо», «Мементо в запасе». Это не косметика — согласование переписывает каждую фразу, где стояла «Реликвия».
  4. Ступени и оси сохраняют смысл, меняют только существительное. Ступень: Треш-Мементо (Trash Memento) — по правилу «ступень + сущность» из Meta - Glossary. Тип: Стандартное / Проклятое / Божественное Мементо. Редкость: Обычное / Уникальное.
  5. Код не переименовывается. RelicData, RelicRarity, id relic.*, RelicArcanaCard.uxml остаются как есть: id технические и стабильные по правилу domain.name. Прецедент — Геомант, где имя сменилось, а relic.geomancer остался.

Почему: слово «Реликвия» занято дважды, и оба раза чужим смыслом. В жанре — намертво: в Slay the Spire реликвия это пассивный предмет, и игрок читает наше «Реликвия» как «шмотка», а получает целого бойца с китом и стат-блоком. Внутри нашей же игры — тоже: Предмет отряда описан в глоссарии через «копится без лимита слотов, как реликвии в Slay the Spire». То есть реликвиями StS у нас работают предметы, а Реликвией зовётся класс-чемпион. «Мементо» — про память, ровно про то, чем сущность и является («памятная вещь героя, в которой сохранилась его сила»), и в жанре свободно.

Имя не новое. Hero Memento живёт в README.md с 04.06.2026 и ни разу не оспаривалось, при том что глоссарий всё это время писал Hero Relic. То есть у сущности было два английских имени: витрина проекта говорила одно, канон и код другое. Тихий дефект единственного источника правды — не падает тестом, виден только человеку, который читает и то, и другое. Решение снимает расхождение в пользу того имени, что уже стоит на витрине.

Отвергнуто: оставить Relic и вычистить Memento из README (дешевле на день работы, но конфликт с жанром и с Предметами отряда остаётся навсегда); «Аркан» (слово уже занято метафорой редкостей — Обычные это «Младшие арканы», Уникальные «Старшие», и вторым смыслом его брать нельзя).

Дом решения: Meta - Glossary, Content - Mementos.


2026-08-22 (9) — места отряда и четвёртый слот предмета открываются наградой забега

Сказано: «Награда внутри забега» (22.08.2026, вопрос о том, чем открываются места 7-8 и четвёртый слот предмета).

Решено: вместимость отряда сверх шести (места 7 и 8) и четвёртый слот предмета у «Сосуда» — награда внутри забега, а не мета-прогрессия дома. Значит расширение сгорает вместе с забегом, как уровни «Сосудов» и Судьбы, и каждый новый поход начинается с шести мест и трёх слотов.

Почему это важнее, чем кажется: решение кладёт вместимость в ту же корзину, что и вся остальная мощь забега — «между забегами переносятся только люди и летопись». Будь оно метой, дом копил бы вместимость навсегда, и поздние забеги стартовали бы сильнее ранних — ровно то, от чего рамка развития гильдии защищает.

Что из этого следует для реализации: число открытых мест живёт в состоянии ЗАБЕГА, а не в профиле; экран читает его оттуда, а GameConfig держит только базу и потолок.

Дом решения: Modes - Preparation Screens §2.1, ТЗ Planning - Preparation Screens §9.3.


2026-08-22 (8) — на экране остаются имена, описания уходят в тултипы

Сказано: «Описание способностей тоже должно быть в тултипе. Мы большую часть вещей и описаний (те же перки и тп) стараемся убрать в свои тултипы. Учитывай это» (22.08.2026, сессия 216679c6).

Решено:

  1. Описания живут в тултипах, на поверхности стоят имена. Перк — знак и имя; способность — имя и цена; улучшение — имя и состояние; травма — название и занятые места; предмет — иконка. Что всё это делает, рассказывает окно по наведению.
  2. Числа статов — исключение, остаются целиком. Панель осмотра существует ради сравнения бойцов, а сравнивать по всплывающим окнам нельзя.
  3. Цена способности остаётся в строке. По ней собирается ритм кита без единого наведения; всё остальное — эффект, условие, длительность — в тултипе.
  4. Второго механизма не заводим: цепочка TooltipChain, лимит три окна, FIFO, Shift — подробность (решение 2026-08-06/9).
  5. Улучшения Реликвии — под способностями (IX-А, место, названное Максом): шестёрка видна целиком, включая закрытые, тремя состояниями «взято / доступно / закрыто».

Что это поменяло в уже принятом: панель осмотра и обе карточки перерисованы — перки и травмы стали чипами, у способностей осталась цена, освободившееся место на правой странице Реликвии занял ряд улучшений.

Цена, принятая сознательно: без наведения экран не отвечает на «а что это даёт», поэтому имена обязаны быть говорящими.

Дом решения: Modes - Preparation Screens §0.


2026-08-22 (7) — разворот собран: клетки на «Основном», лор и числа на «Дополнительно»

Сказано: «VI-В Клетки на развороте», «VII-А Лор и статистика», копии и уровень — в «Основное» (22.08.2026, разбор стенда ui-inspect-cards).

Решено:

  1. Таб «Основное» — «Клетки на развороте»: облик узкой колонкой слева, остальное четырьмя секциями в собственных рамках, по две на страницу. Травмы находятся мгновенно, пятая секция добавляется без переверстки разворота.
  2. Таб «Дополнительно» — «Лор и статистика»: слева кто и откуда плюс как выглядит, справа — шесть строк чисел и строка летописи.
  3. Уровень и копии Реликвии — на «Основном». Это механика роста кита, а не его история; в статистике остаются числа прожитого: бои, победы, носители, походы.

Отклонено: VI-А «Портрет и лист» (правая страница вырождается в список), VI-Б «Человек и боец» (облик ужат, Судьба спорит с перками за низ), VII-Б «Летопись лентой» (статистика сжимается до двух строк, сравнить двоих числами нельзя).

Чем дизайн осмотра закрыт: панель — колонка у кромки, карточка — разворот с двумя табами, раскладка обоих табов выбрана, у Реликвии тот же каркас. Дальше — реализация.

Дом решения: Modes - Preparation Screens §4-5.


2026-08-22 (6) — карточка это разворот книги с табами, а вид — в облачении Реликвии

Сказано: «ты не оформила и не разделила это как книгу с двумя страницами (разворот). Переформи для начала. Вообще не надо все в одну умещать. Сверху должны быть табы I. Основное (боевое, перки + внешний вид (в данный момент, если есть релик - то внешний вид в релике), II. Дополнительно (Лор (кто, откуда, как выглядит + статистика (мб чет еще?)). У релика - сходим обарзом» (22.08.2026, разбор стенда ui-inspect-cards).

Решено:

  1. Расширенная карточка — книга с двумя страницами. Разворот с корешком, а не одно поле.
  2. Сверху два таба, и всё в одну страницу не умещается: I · Основное — боевое, перки и внешний вид; II · Дополнительно — лор (кто, откуда, как выглядит) и статистика.
  3. Внешний вид — в облачении текущей Реликвии. Карточка показывает человека таким, какой он сейчас. Это требование к пайплайну арта: облик зависит от связки «Сосуд + Реликвия», абстрактного тела на карточке не бывает.
  4. У Реликвии тот же каркас — тот же разворот и те же два таба; расходится только содержимое.
  5. Панель осмотра — III-А «Колонка у кромки»: узкая панель во всю высоту у правой кромки, содержимое списком. Состав почти не страдает; плата — прокрутка.

Отклонено целиком: первая шестёрка карточек (одно окно без табов, всё содержимое разом) — «ничего из этого». Также III-Б «Широкая карта» и III-В «Полка снизу».

Дом решения: Modes - Preparation Screens §4-5.


2026-08-22 (5) — состав показывается телами, а вещи — строками

Сказано: «I-Г Витрина» для отряда, «II-А Строки» для предметов (22.08.2026, разбор стенда ui-party-items).

Решено:

  1. Страница «Отряд» — I-Г «Витрина». Четвёрка стоит телами на живой расстановке, подпись под каждым, лента отряда полкой снизу, вуаль 35% вместо 75%. Состав читается тем же способом, что и в бою, — и решение «кто идёт» принимается в тех же образах, в которых будет проверяться.
  2. Страница «Предметы» — II-А «Строки». «Сосуд» строкой: портрет, имя, четыре квадратных слота в ряд. Слоты выстроены в одну вертикаль, поэтому «у кого пусто» читается одним взглядом сверху вниз — это главный вопрос страницы.

Следствие, которое надо принять сразу: на «Витрине» подписи под телами вмещают только имя и Реликвию. Значит перки, Судьба, Обеты и уровень уезжают в панель осмотра и расширенную карточку целиком — на самой странице отряда их нет. Панель перестаёт быть удобством и становится обязательной частью экрана.

Отклонено: I-А «Ложа» (панель ест треть ширины у состава), I-Б «Разворот» (выехавшая панель накрывает двух «Сосудов» из четырёх), I-В «Кокпит» (состав вырождается в список имён), II-Б «Пары» (слоты уходят вглубь плитки, сравнение становится обходом четырёх углов), II-В «Верстак» (состав виден только именами, перенос вещи требует двух переключений фокуса), II-Г «Колонны» (четыре колонки съедают высоту, складу остаётся одна строка).

Дом решения: Modes - Preparation Screens §2; чертежи — раздел Лаборатории ui-party-items.


2026-08-22 (4) — человек показывается тремя глубинами: плитка, панель осмотра, карточка поверх

Сказано: «Представь что при нажатии на персонажа - должна октрываться целиком его карточка поверх. Прям большая, почти на весь экран (почти, около 80-90%, лишь края чуть открыты). И в ней уже внешний вид vessel целиком, имя, описание (лор), травмы, текущее снаряжение и прочая-прочая инфа. … Прям тут в инвентаре травмы видимы не должны быть. Только в это расширенной карточке или в эффектах (баффы, дебаффы, но это уже потом, просто учитывай на будущее). … Т.е. на ПКМ на vessel на любой из вкладок - открывает расширенный экран. Также расширенный экран будет у relic. А еще как помнишь у нас как в Guildrun при нажатии на юнита - справа будет открываться инфа о юните. И там будут кнопки “о Сосуде”, “о Реликвии” (если релика нет - она не горит)» (22.08.2026, сессия 216679c6).

Решено:

  1. Три глубины показа, у каждой свой вопрос. Плитка — «кто у меня есть и кто в бою»; панель осмотра справа — «что этот боец умеет сейчас»; расширенная карточка поверх — «кто он и из чего собран». Слой выбирается вопросом, а не остатком места.
  2. Жесты: ЛКМ — панель осмотра, ПКМ — расширенная карточка, перетаскивание — перенос. Двойной клик не занимаем: он неотличим от двух выборов и ложно срабатывает на драге.
  3. Расширенная карточка — окно на 80–90% кадра, края подложки видны. Кромка сообщает «ты заглянул, а не ушёл с экрана». Такая же карточка у Реликвии — то же окно и тот же жест.
  4. Панель осмотра живёт везде, где есть юнит — подготовка, бой, двор, расстановка. Один жест даёт один ответ во всей игре; второй похожей панели рядом не заводится.
  5. Кнопка «О Реликвии» без Реликвии не горит, но остаётся живой по правилу UI Feedback §1.
  6. Травм на плитке нет. Их дом — расширенная карточка, позже второй дом — панель эффектов. Требование injuries-mettle «видны до входа в бой» остаётся в силе и читается как «доступны в один жест до боя»; формулировка там обновлена в тот же день, иначе числилась бы нарушенной.
  7. Состав из четырёх «Сосудов» стоит на КАЖДОЙ странице подготовки — страницы переключают не предмет разговора, а то, что с составом делают.
  8. Нижняя лента страницы «Отряд» — весь отряд восемью местами, четвёрка боя в ней же (шесть открыто, два за улучшением). Не «скамейка сверх четвёрки»: иначе игрок считает вместимость сложением двух рядов и ошибается.
  9. Предметы отряда (Party) получают свою вкладку, и она отложена — на страницах «Отряд» и «Предметы» они не показываются вовсе.

Дом решения: Modes - Preparation Screens — новый док, заведён этим решением. Вайрфреймы раскладок — раздел Лаборатории по этому доку.

Частично superseded 2026-08-23

Пункт 4 заместило решение 2026-08-23 (4): панель осмотра перестаёт быть постоянным жильцом экрана, описания и статы уходят в тултип. Три глубины показа (п. 1) и жесты (п. 2) остаются в силе.

Пункты 7 и 8 заместило решение 2026-08-23 (3): отдельные страницы «Отряд» и «Предметы» отменены, их место занял единый каркас с четырьмя полками. Сами числа состава — четвёрка в бою, восемь мест отряда — не менялись.


2026-08-22 (3) — вердикты по подтяжке UI: паузы, заголовки, одна колонка и общий выход титра

Сказано: «Беру 3А, 4А, 7А (берем такой эффект появления для “Победы” (в конце боя и в конце игры - свое), “Поражения”, входа в бой (В бой! с мечами). Т.е. будет много где, единый стиль и источник и переюзание под всякие ситуации), для настроек берем II-Б · одна колонка по центру, для победы в забеге - III-Б · знак плюс итоги забега» (22.08.2026, разбор стенда ui-uplift).

Решено:

  1. Паузы — 3А: ритм по числу рефа, 19% высоты кадра между группами.
  2. Заголовки секций — 4А. В профиле сделано в тот же день; настройки ждут своего наполнения — на трёх строках секции выглядели бы обещанием.
  3. Знак исхода — 7А, и он перестаёт быть экраном. Приём появления титульной надписи со знаком переиспользуется в четырёх местах: победа в бою, победа в забеге (своя, крупнее), поражение и вход в бой («В бой!» со скрещёнными мечами). Требование Макса — ОДИН источник: разница между случаями идёт данными, а не четырьмя похожими эффектами по экранам.
  4. Настройки — II-Б: одна колонка по центру, мера строки 40% ширины кадра.
  5. Исход забега — III-Б: знак плюс итоги забега строками.

Открыто: меню (А/Б/В), лоадаут (А), HUD (А) — стенд ждёт вердикта.

Дом решения: план Planning - UI Uplift §4; там же требования к общему приёму титра.


2026-08-22 (3) — «Колыбельная» дешевеет, и Пожиратель выходит в норму

Сказано: «Дать больше окна сна» и «Уменьши кд сна» (22.08.2026, сессия 093c5940).

Цена каста 50 → 35 маны. Кулдауна у способности нет, гейт чисто ресурсный: при регене 5/сек это каст раз в 7 секунд вместо десяти.

Что дал замер. Окно сна выросло с 20% боя до 60%, счёт контроля с 4.0 до 12.0, эффективный урон (свой плюс отнятый у врага) — с 57 до 140 при классовой норме 132. Вклад в отряд перевернулся: −25.7 → +33.2, поражение → победа. Кит был последним среди дальников и стал первым.

Оговорка, без которой число врёт. Скачок вклада преувеличен: бенч замены меряет от МЕДИАННОГО кита роли, а поднявшийся Пожиратель сместил саму медиану — эталонным дальником вместо Следопыта стал трешевый Лучник, и вся колонка дальников подросла. Надёжен здесь ранг внутри роли (последняя → первая) и эффективный урон против нормы, а не абсолютная дельта.

Перепроверено в тот же день, на зафиксированном эталоне:

Цена кастаСекунд снаДоля бояЭффективный урон (норма 132)ВкладИсход боя
50 (было)4.020%57 · 43%−25.7поражение
408.040%113 · 86%−9.9поражение
358.040%113 · 86%+12.1победа
3012.060%140 · 106%+28.9победа

Принято 35 — и это самая любопытная строка таблицы. У сороковки и тридцатки пятёрки числа ОДИНАКОВЫЕ: те же два каста, те же восемь секунд сна, тот же эффективный урон. Разница только в том, что второй сон приходит на секунду раньше — и этого хватает, чтобы бой сложился в победу вместо поражения. Стендовая линза (одна цель, бессмертный эталон) такой разницы не видит вовсе: там цикл упирается в длительность сна, а не в тайминг.

Тридцатка тоже работает, но даёт 60% покрытия — «одного врага фактически нет весь бой». Тридцать пять берут тот же исход при вдвое меньшем присутствии сна на арене.

Дом факта: the-lull Шаги 1 и 5, Relics/Dreameater.asset; замер — docs/balance-issues.md §BAL-032.

2026-08-22 (2) — цена контроля живёт на эффекте, тремя ступенями

Сказано: «Контроль бывает же разного уровня. Просто замедление, станы и тп. Надо на каждый эффект свой же заводить, разве нет?» и «Да, три ступени 1 / 0.5 / 0.166» (22.08.2026, сессия 093c5940).

Ценность контроля считается весом на каждом эффекте, а не общим курсом «секунда = столько-то урона». Шкала — три ступени:

ВесЧто попадает
1.0полный запрет действий: стан, сон, заморозка, подброс, немота, провокация
0.7корень: цель бьёт стоя, но не двигается
0.5частичный: не бьёт и не кастует, но ходит
0.166замедление и родня

Корень — своя ступень, 0.7 (число Макса, добавлено в тот же день). В League он идёт по единице наравне со станом; у нас цель под корнем продолжает наносить урон, и ставить ей полную цену значило бы завышать вклад всех троих носителей. Ниже половины он тоже не опускается: в бою, где половина дела — дойти, отнятый шаг стоит дорого.

Почему отвергнут общий курс. Он приравнивает стан ко сну, а замедление к обоим — при том что замедленная цель продолжает бить. Ставка «замедление = половина стана» была бы завышена втрое: в League of Legends, где эта шкала работает годами, замедление стоит шестую часть стана (десять секунд замедления — 1.6 очка против десяти за стан).

Почему не выводить вес из содержимого эффекта (альтернатива скрайба): у замедления нет очевидного курса, и «доля снятого стата» его не даёт — цифра всё равно назначается, только неявно и без места, где её видно.

Из Dota — оговорка на будущее: длительность не единственный множитель, ценность зависит от кулдауна и надёжности. У нас это уже учтено формой замера: секунды считаются ЗА БОЙ, а не за каст.

Дом факта: docs/balance-issues.md §BAL-032; реализация — поле ControlWeight на EffectData, ещё не сделана.

2026-08-22 (1) — Огненному мечнику +200 HP, и вопрос закрыт

Сказано: «Хп увеличь на 200 и забудь пока про него» (22.08.2026, сессия 093c5940).

MaxHP Мечника 1500 → 1700 (Override в стат-блоке, как у прочих китов с личным запасом).

Почему это сработало, а снижение самоурона — нет. Плата за разгон упала вдвое и не изменила ровным счётом ничего: вклад в отряд остался −29.7. Двести HP — прибавка в 13% — сдвинули его на +3.5, то есть на тридцать три пункта. Кит стоял ровно на грани: ему не хватало запаса, чтобы дожить до момента, когда разгон начинает окупаться, и никакая экономия на плате этого не давала.

Честная оговорка: исход сменился с поражения (32.8 с) на ничью по потолку времени (240 с), а не на победу. Мечник перестал проигрывать бой, но выигрывать его не начал — и стоит проверить, не стал ли он в затяжном размене неубиваемым за счёт лечения с добивания.

Дом факта: the-pyre Шаг 3, Relics/FlameSwordsman.asset; замер — docs/balance-issues.md §BAL-033.

2026-08-21 (10) — Огненный мечник платит за разгон вдвое меньше

Сказано: «Снять часть самоурона (снизить до 0.5%)» (21.08.2026, сессия 093c5940 — выбор из четырёх правок после разбора трассами).

Самоурон «Пылающих клинков» — 1% → 0.5% текущего HP за удар (effect.blazing_blades).

Почему. Замер показал кита, у которого урона больше нормы (164%), а вклад в отряд худший в ростере (−29.7). Трассы объяснили: он собирает фокуса больше, чем танк (1525 против 1334), и гибнет на 11-й секунде двадцатисекундного боя — раньше, чем раскрутится разгон, ради которого он платит здоровьем. Плата остаётся частью характера, но перестаёт брать вдвое за то, чего кит не получает.

Отвергнуто: поднимать урон (его достаточно — не хватает времени его нанести); ускорять сам разгон (меняет ощущение кита сильнее, чем цена); давать защиту от фокуса в базу (это уже новая механика, а не правка числа).

Дом факта: the-pyre Шаг 5, ассет Effects/BlazingBlades.asset.

2026-08-21 (9) — раны: цены приняты, тон остаётся медкартой

Сказано: «Принять как есть» (цены) и «Сухо-механически» (тон) — 21.08.2026, сессия 093c5940, приёмка после заведения четырнадцати ассетов.

Цена снятия — одна на ступень: Ушиб 30, Рана 80, Увечье 200 золота. Разводить цены внутри ступени не стали: раны различаются эффектом, а не ценником, а три числа игрок держит в голове без подсказки. Ориентиры — награда за бой 20 и предметы по 55-90, то есть ушиб стоит полтора боя, рана дороже среднего предмета, увечье почти неподъёмно за акт.

Тон текста — сухо-механический, вопрос каталога о «голосе мира» закрыт: рана называется медицински и описывается числами («Отнявшийся глаз: −35% к дальности атаки, −20% к скорости атаки»). Отвергнут пересказ ран в голосе мира и гибрид «имя в тон, описание сухое»: рана — это счёт, который игрок оплачивает, и читаться она должна как счёт, а не как сцена.

Дом фактов: injury-catalogue §Цена снятия и имена ассетов; сами ассеты — ScriptableObjects/Consequences/.

2026-08-21 (8) — бой остаётся дорогим: пересматривается норма, а не бои

Сказано: «Оставить дорогими» (21.08.2026, сессия 093c5940 — выбор из трёх вариантов правки).

Замер лестницы акта 1 дал цену рядового боя 43-55% HP отряда против ориентира 25-30%, записанного в act-1-encounters. Ориентир и правится: бои остаются такими, число нормы пересматривается.

Отвергнуто: срезать бюджеты боёв (ранние с 8-10 до 6-7 очков, поздние с 12-14 до 10-11) — то есть чинить бои под старое число.

Почему это осмысленно, а не отказ от нормы. Цена боя 43-55% — единственное, что не зависит от состава: разброс по китам съедает разницу между строями (BAL-029), а цена держится на всех двенадцати замеренных четвёрках. Дорогой бой при этом даёт ровно то, ради чего затевались раны: на 232 боях каскад дошёл до средних и тяжёлых, четверо «Сосудов» выбыли из забега. Сделай бои дешевле — и система снова окажется без повода включиться, как было при пяти гоблинских стычках.

Новое число нормы не назначено — оно выводится из того, сколько боёв подряд отряд должен держать между передышками, и это отдельный разговор.

2026-08-21 (7) — вердикт по копиям: густой шлейф и рябь по иллюзии

Выбор из десяти вариаций на стенде Лаборатории (#/ghosts), решение по картинкам.

1. Шлейф — густой: восемь копий разом (А2). Отвергнуты редкие копии (А1: на коротком рывке успевает встать одна), копии с лентой (А3), голограмма (А4) и холодный призрак (А5 — читается мгновенно, но одинаково у всех юнитов, рывок перестаёт быть ИХ рывком). Цена признана: восемь тел по шестнадцать частей — самая дорогая вариация по рендеру, поэтому интервал остаётся ручкой в CombatFeelConfig, а не константой.

2. Иллюзия — рябь по копии (Б2). Копия расходится кругами от точки удара. Отвергнуты осколки (Б1: это язык СМЕРТИ, на секунду читается как «убили»), полосы (Б3) и дымка (Б4).

3. Рябь строится теми же копиями, а не отдельным префабом колец. Растущие наружу и гаснущие копии остаются внутри одного приёма — заводить под неё второй визуальный канал (партикл-префаб) значило бы, что «удар по иллюзии» и «шлейф» перестают быть одной магией.

Владелец правды: Gamefeel - VFX Language §Призрачные копии; стенды с вердиктом — docs/lab/src/sections/gamefeel-ghosts.ts.

2026-08-21 (6) — призрачные копии: шлейф за рывком и удар по иллюзии на уклонении

Дословно: «Смотри, первое я хочу, чтобы, когда кто-то делает рывок, например, наш ассасин, уклоняясь или же наши монах тепортируясь, вот знаешь, оставлялся шлейф за ним, то есть из его копий призрачных. <…> чтобы, когда он уклонял как раз-таки на союзника или вот на сам союзник уточнялся, то атака проходила, то есть эффект попадания был, знаешь, по этой как разке illusion» (21.08.2026, сессия 53fcf509).

1. Шлейф тянется только за СВОИМ движением. Кувырок «Отхода», телепорт «Смещения», рывок способности оставляют цепочку призрачных копий тела. Тело, которое унесло чужим толчком (отбрасывание, «ядро», Порыв ветра на союзника), копий не оставляет. Причина: копия говорит о намерении, а не о скорости — за отброшенным шлейф читался бы как «он туда рвался». Отвергнут вариант «любое смещение» (проще в коде: маркер полёта один на всех) и вариант «плюс Порыв ветра».

2. Уклонение показывается ударом по иллюзии — на ВСЕХ четырёх видах уклонения. «Отход», «Порыв», «Смещение» и «Уклонение» одинаково оставляют копию в точке, из которой тело выпало, и удар доводится по ней: ядро, серп и искры играют по копии, а она осыпается. Отвергнут вариант «только там, где тело физически ушло с места»: он реже приедается, но оставляет чистое «Уклонение» (каждая X-я атака мимо) без всякого объяснения на экране.

3. Это ПЕРЕСМОТР правила «нет контакта — нет серпа». До сегодня словарь событий держал промах пустым: только надпись «evade». Правило остаётся в силе для промаха по телу, но уклонение промахом больше не считается — у него есть по чему ударить. Прежний показ читался как «ничего не произошло», хотя в этот момент кит отработал свою главную способность.

Владелец правды: Gamefeel - VFX Language §Словарь событий — формы, роли и статус обоих событий.

2026-08-21 (5) — бои акта 1 пересобираются: бюджет в очках угрозы, фракции вперемешку

Дословно: «У нас щас вообще бои норм не созданы. Надо старые все удалить и собрать новые бои с кучей наших новых противников. Разве нет?» (21.08.2026, сессия 093c5940).

1. Валюта сложности боя — ThreatPoints, уже проставленные у каждого врага. Ступени бюджета (proposed до замера): рядовой ранний 8-10, рядовой поздний 12-14, элитный 18-20, босс 28. Прежние бои стоили 3-7 очков (элитный 12) — против четырёх полноценных китов это спарринг, и бенч забега показал ровно это: ноль смертей за акт (docs/balance-issues.md BAL-028).

2. Фракции идут вперемешку по всему акту — гоблины и бандиты вместе, звери и нежить примесью. Отвергнут вариант «одна фракция на акт»: он чище тематически, но обесценивает тултип Вида на узле, а тот и делает выбор маршрута решением (2026-07-15/66).

3. Пять старых гоблинских энкаунтеров удаляются, но дев-пресеты перенацеливаются. На GoblinWarband ссылаются четыре пресета, на GoblinScouts — три: это проверочные бои для китов, и пресет с пустым энкаунтером запускал бы проверку против пустой арены. Дамми-энкаунтеры (тир Special) не трогаются — инструмент, а не контент.

4. Босс акта 1 получает временную заглушку одним боем на 28 очков. Полный сценарий (Гоблинская Банда) требует зон размещения с квотой, кольцевой расстановки, стен и массового отбрасывания — ничего этого в движке нет. Заглушка нужна потому, что боссовых энкаунтеров сейчас ноль, и боссовый узел молча закрывается элиткой: акт меряется легче, чем задуман.

Грабли: EncounterTier знает только Common/Elite/Finalist, поэтому ступени «ранний» и «поздний» рядовой ему неизвестны — бой на 14 очков может выпасть на первом этаже. Развилка (поле диапазона этажей · новые значения enum · отдать рост долям элит) оставлена открытой в самом доке.

Владелец правды: Run - Act 1 Encounter Ladder — составы, бюджеты и запросы боёв.


2026-08-21 (4) — раны за смерти: шесть слотов, каскад вверх, дно под тяжёлым

Дословно: «И сделать да, раны за смерти в бою. Не более 3-х мелких, 2-х средний и 1-й тяжелой. Как в НРИ некоторых. Если дают мелкую, а слоты заняты - все, автоматом меняется на случайную среднюю. […] Мелкие проходят сами в течении времени (например спустя 3 “уровня”). Обычно в бою получаем именно мелкие. Они могут быть в духе “-30% стартового хп” , “-30% скорости передвижения и тд”. Т.е. даже мелкие - очень ощутимые. Поэтому игрок должен балансировать между “выполнить квест” и сделать это без потерь». О размере отряда — «Давай четверо в начале, можно нанимать вплоть до 6 (с улучшениями - до 8)». О том, что режет мелкая рана, — «Зависит от раны» (21.08.2026, сессия 093c5940).

1. Истощение забега держат раны, а не переносимое HP. Перенос HP отвергнут прямо: «У нас хил в бою есть. В этом сложность. Чистое HP у нас не сделать» — лечение внутри боя стирает след, который перенос должен был оставлять. Раны его не стирают: они живут между боями и хилу не подчиняются.

2. Ёмкость «Сосуда» — шесть слотов: 3 Ушиба, 2 Раны, 1 Увечье (числа proposed до замера смертности). Переполнение поднимает ступень: мелкая при полных мелких → случайная средняя, средняя при полных средних → тяжёлая, тяжёлая при занятом слоте → выбывание из забега (на высоких возвышениях — гибель, 2026-07-27/2). Каскад даёт нелинейную цену: пока слоты свободны, рисковать дёшево, после — каждая смерть дорожает скачком.

3. Источник — смерть в бою, редко — уникальные атаки элит и боссов, плюс отдельные ивенты. Триггер детерминированный (умер → получил), RNG решает только, какая именно травма выпала. Работает это лишь потому, что смерть в бою у нас не гибель насовсем.

4. Мелкие ощутимы: порядка −30% по своему стату. Что именно режет травма — стартовое HP или максимум — зависит от конкретной травмы. Разница неслучайна: по стартовому отыгрывается лечением в бою и потому бьёт слабее по составам с Поддержкой, по максимуму не лечится ничем. Выбор делается осознанно при авторинге каждой травмы.

5. Снятие: у торговца за золото, на привале за действие, мелкие истекают сами. Средние и тяжёлые сами не проходят никогда.

6. Зачем система нужна — она достраивает испытания до выбора. Провал испытания в каноне = «без награды, не поражение», то есть чистый апсайд: пробовать выгодно всегда. С ранами испытание становится ставкой деньги против ран, и появляется то самое «балансировать между выполнить квест и сделать это без потерь». Это же закрывает риск, названный в meta-progression §Тюнинг-риск.

7. Отряд забега растёт: 4 на старте → 6 наймом → 8 с улучшениями. Формула «в гильдии всегда 4 «Сосуда»» отменена. Рост даёт забегу ротацию — без неё травма отнимала бы четверть отряда без права отыграться, и система бесила бы независимо от чисел (реф — Battle Brothers, где ранения работают ровно потому, что скамейка глубокая). Открытым осталось, какое улучшение открывает восьмого, и растёт ли вместе с отрядом пул копий Реликвий.

Грабли: до этого разговора раздел травм числил триггером «конец боя ниже порога HP». При текущих числах боя отряд заканчивает бой на 78–89% HP (реестр баланса, прогон 03.08) — порог не срабатывал бы никогда, и механика существовала бы только на бумаге.

Владелец правды: Run - Injuries & Mettle (раны), Run - Guild Development §Размер отряда забега (число бойцов).


2026-08-21 (3) — гильдия единая: «Сосуды» между игроками не распределяются

Дословно: «Мы управляем ЕДИНОЙ ГИЛЬДИЕЙ. А не конкретными юнитами. Все хорошо. Напиши это явно и убери из гдд что-то из-за чего который раз ты ловишь такой глюк» (21.08.2026, сессия 093c5940).

1. Распределение «Сосудов» между игроками снято целиком. Прежняя модель — «хост выбирает, сколькими „Сосудами“ управляет каждый игрок», с таблицей «1 игрок = 4, 2 игрока = по 2, 4 игрока = по 1» (GDD-6, GDD-12) — отменена. В гильдии по-прежнему четыре «Сосуда», но число игроков на это никак не влияет: любой Гильдмастер распоряжается любым «Сосудом», в любой момент забега.

2. У «Сосуда» нет владельца-игрока, и это HARD. Не существует «его Сосуда», «моего бойца», «Сосудов на игрока». Правильные слова — «кого ведёт», «в гильдии»; неправильные — «выдать», «раздать», «на игрока».

3. Почему снято, а не переформулировано. Строка meta-progression «4 игрока = по 1 персонажу» читалась как раздача собственности, и об неё спотыкались раз за разом: агент, дойдя до любой новой механики поверх забега, начинал спрашивать «а чьи это будут раны» и «как шестеро делятся на четверых». Пока раздача существует хотя бы как опция, вопрос законен. Снятие механики убирает вопрос вместе с ней — переформулировка бы не убрала.

4. Что это НЕ отменяет. Свобода лезть в общее, перехват вещи из рук, споры и арбитры остаются как были — они и раньше стояли на том, что всё общее. Роли игроков по-прежнему отклонены (Coop - Minigames & Roles), и теперь у отказа появилось второе основание: закреплять роль не за чем.

Правит доки: Coop - Overview §Модель сессии (дом правила), Run - Meta Progression, pitch §10, Coop - Minigames & Roles, Boss - Goblin Warband, CLAUDE.md.


2026-08-21 (5) — числа мага ветра приняты; его автоатака бьёт воздухом, а не магией

Дословно: «Урон автоатак - дробящий, сильный порыв ветра», по перезарядке — «Оставить и замерить», по остальным числам — «Принимаю всё», по улучшению «Обратный ход» — «Оставить как замысел» (21.08.2026, сессия 6be58847).

1. Автоатака — ДРОБЯЩИЙ урон, физическая школа. Скрайб ставил Аркану по остаточному принципу (школы «Ветер» в движке нет, а физика «не читалась как магия ветра») — отвергнуто. Порыв воздуха бьёт давлением, а не заклинанием, и дробящий это выражает точнее. Следствие приятное: кит с магической фантазией гасится ФИЗИЧЕСКОЙ бронёй, то есть в матчапах ведёт себя не как остальная поддержка.

2. Числа приняты как есть: запас «Встречного ветра» 200 при резе вдвое (впитывает 400 входящего дальнего — четыре-шесть выстрелов, ровно на свои 4 секунды), радиус «Порыва» 4, сдвиг 1.6 (дистанция контакта ближнего боя, то есть выводит из зоны), мана 60 при цене каста 60, класс Поддержка по классовой норме.

3. Перезарядка «Порыва» — 8 секунд, и она У КАЖДОГО СОЮЗНИКА СВОЯ. Принята к замеру, а не к вере: четверо под аурой дают четыре независимых кулдауна, то есть около 12% отменённых автоатак по команде. Общий счётчик на маге отвергнут не по балансу, а по цене: эффектная модель держит состояние в эффекте, и «один кулдаун на всех» потребовал бы нового шва.

4. Улучшение T2 «Обратный ход» остаётся замыслом. Механики прерывания чужой атаки в движке нет, и заводить её ради одного улучшения не будем — Шаг 6 не реализован ни у одного кита.

Владелец правды: The Zephyr (Windwarden), relic.windwarden, docs/balance-issues.md (BAL-ZEPHYR-1).

2026-08-21 (4) — маг ветра защищает ДО удара: щит режет вдвое и тратится, реакция выдёргивает союзника

Дословно: «Активка - вешает щит, уменьшающий урон дальнего боя на 50% на 4 сек. Когда этот щит сломан - эффект пропадает», «Пассивка (реакция) - двигает союзника в сторону (при ближнем ударе - от атаки) (при дальнем - под прямым углом относительно полета снаряда). Также вешает уклонение (1 стак из 4, смотри ослепление) на 4 сек» (инбокс, разнесён 21.08.2026); по форме щита — «Щит-половинщик», по моменту реакции — «Реакция - именно ДО удара. В этом и суть» (21.08.2026, сессия 6be58847).

1. «Встречный ветер» — щит-половинщик, а не редукция со сроком. Каждый дальний удар режется вдвое, срезанная половина списывается с запаса потока; кончился запас — поток пропал раньше срока. Так слово «сломан» из заметки получает смысл: щит съедает ровно то, что не долетело. Отвергнуты чистая редукция на 4 секунды (тогда ломаться нечему) и «пул отдельно, аура отдельно» (два счётчика на одну фантазию, и непонятно, чем тратится пул).

2. Фильтр щита — по ДАЛЬНОСТИ, а не по школе урона. Ось новая: щиты в движке фильтруются по школе (физ/маг/стихия), по дальности — ни один. Цена названа сразу: отличить дальний удар от ближнего можно только по атакующему (UnitData.AttackType), в самом запросе урона признака дальности нет. Для автоатак это точно, для способности мили-юнита с дистанции — приближение.

3. «Порыв» срабатывает ДО удара и отменяет его. Это второй негейт в ките поверх щита — скрайб предлагал ставить реакцию после удара, чтобы кит не превращался в стену; отвергнуто словом Макса: выдернуть союзника из-под удара и есть фантазия ветра, после удара она читалась бы как утешение. Ставка уравновешена перезарядкой реакции, а не сдвигом момента.

4. «Уклонение» — зеркало Слепоты, а не шанс промаха. Каждая X-я атака ПО носителю уходит мимо, стаков от 1 до 4, X = 5 − стаки — ровно как у слепоты, только со стороны цели. Выходного рандома в игре нет, и этот эффект его не заводит. Дом эффекта — каталог стат-модификаторов.

5. Слово «Уклонение» освободилось переименованием. Прежде так звался реактив-кувырок с зарядами (effect.dodge.name); он стал «Отходом» (2026-08-21/3), потому что называет действие, а не результат. Два эффекта различаются по цене: отход тратит заряд и уносит носителя с места, уклонение ничего не тратит и просто отправляет чужую атаку мимо.

Владелец правды: The Zephyr (Windwarden), Effect - Stat Modifiers.

2026-08-21 (3) — реакции выстраиваются в очередь: приоритет числом, за отменённый удар не платят

Дословно: «У нас уже появляется несколько реакций и надо как-то чтобы они не “подрались”, юзались корректно друг за другом, а не одновременно две. Т.е. имели важность свою внутри. Что думаешь?» и, о форме, — «Скорее “Реакция на юните самом”, “Реакция на предмете юнита”, “Реакция другого юнита”. Что-то в эту сторону, нет? Или просто приоритет числом (рекомендуемый) и потом через AI дату дать его настраивать?» (21.08.2026, сессия 6be58847).

1. Порядок реакций задаётся приоритетом-числом, а не порядком наложения эффектов. До этого решения первой спрашивали ту реакцию, чей эффект раньше повесили, — то есть порядок зависел от случайности боя. Отвергнута и предложенная скрайбом жёсткая лестница по «типу вмешательства»: в автобое порядок срабатывания — это рычаг игрока, а не константа дизайнера, и прятать его целиком в код неправильно.

2. Стартовые числа стоят одним списком: Уход 300 (носитель покидает место удара), Отбив 200 (удар встречают зарядом), Поглощение 100 (съесть долетевшее), Множители 0. Читается одной фразой — «сначала уходишь, потом отбиваешь, потом терпишь». Это дефолты, а не закон: бесплатные реакции берут значение чуть выше своей ступени, потому что спрашивать их надо прежде платных — иначе заряд сгорит на ударе, который и так не нашёл бы цель.

3. При равных числах работает ось Макса: своя реакция раньше чужой. Собственный заряд восстанавливается сам и дёшев, а реакция союзника — редкий ресурс на всю команду. Ступени «от предмета» пока нет: предметы дают только статы и ни одной реакции не вешают, признака такого в рантайме не существует — место под неё оставлено в перечислении.

4. Проход обрывается на первой реакции, отменившей удар. За отменённый удар больше не платят ни зарядом, ни запасом щита. Это чинит живой дефект: «Оплот» не смотрел на отмену и вешал щит против удара, которого уже не было, сжигая заряд.

5. Настройка приоритета игроком — шов сейчас, экран потом. В AIProfile сегодня один PassiveTrigger на весь юнит, списка по эффектам нет вовсе; давать игроку крутить порядок раньше, чем реакций станет много, — это экран ради двух галочек.

6. «Изворотливость» переименована в «Отход». Имя называет ровно то, что происходит — уход с места. Освободившееся слово «Уклонение» отдано будущему эффекту-зеркалу Слепоты («каждая X-я атака по носителю мимо»). В лок-таблице effect.dodge.name пока стоит старое «Уклонение» — правка ждёт свободного редактора.

Владелец правды: Assets/_Project/Scripts/Combat/Effects/ReactionPriority.cs, EffectSystem.RunPreDamage, тест ReactionOrderTests.

2026-08-21 (2) — Знамёна сняты: у отряда остаётся один предмет, и он копится

Дословно: «Знамен в принципе нет пока, все, упрощаем механику!» и, о лимите слотов, — «Лимит снять, копятся» (21.08.2026, сессия 6be58847).

1. Знамёна сняты с дизайна целиком. Четыре Знамени — Проклятое, Летящее, Испытывающее, Золотое — вместе с паркингом «Знамя Предсказаний» уезжают в Legacy. Файл и так стоял с пометкой «дизайн Макс планирует пересматривать» с 29.07 и ни разу не сдвинулся; пересмотр закончился снятием, а не переработкой.

2. Предметов остаётся два скоупа, и оба зовутся своими именами: Vessel Item (предмет Сосуда, до трёх штук) и Party Item (предмет отряда). Имена одновременно технические и игровые — код уже зовёт их так (ItemScope.Vessel / ItemScope.Party), а игроку они самоописательны и учить их не надо. Отвергнуто заведение третьего слова («Трофей», «Артефакт») — оно потребовало бы объяснять игроку разницу, которой в механике нет.

3. Party Item копится весь забег, лимита слотов у него нет — как реликвии в Slay the Spire. GameConfig.PartyBannerSlots (стоял 2) теряет смысл и снимается. Это меняет жанр сущности: дефицит слотов делал Party Item выбором из двух, а коллекция делает его кривой роста по забегу — и именно кривая нужна, чтобы мерить винрейт по узлам.

4. Ассет-сирота item.war_banner не удаляется, а переделывается в обычный Party Item и получает карточку. item.oaken_charm остаётся Vessel Item, карточка за ним же.

Владелец правды: Assets/_Project/Scripts/Data/Definitions/ItemData.cs, Content - Items, Legacy.

2026-08-21 (1) — ступень всегда идёт с сущностью; третий тир врага зовётся Ветераном

Дословно: «Давай “Ветеран”?» и, на возражение о занятом слове, — «Почему бы не иметь Trash Relic, Trash Enemy, Veteran Enemy, Veteran Vessel? Я про то, что названия повторяются» (21.08.2026, сессия 6be58847).

1. Ступень — это ПРИЛАГАТЕЛЬНОЕ, и голым оно не употребляется никогда. Термин собирается как ступень + сущность: Trash Relic, Trash Enemy, Veteran Enemy, Veteran Vessel; по-русски — «треш-реликвия», «враг-ветеран», «Сосуд-ветеран». Голое «Ветеран» без существительного — запрещённая форма, а не термин.

Правило снимает возражение, из-за которого имя чуть не отклонили: «Ветеран» уже занят Сосудом, пережившим завершённый забег (глоссарий, 2026-07-27/6). Но конфликт был не в слове, а в том, что слово стояло голым существительным. Со ступенью-прилагательным Veteran Vessel и Veteran Enemy — два разных термина, и спутать их негде. Прецедент уже работал незамеченным: DropRarity.Trash у реликвии и тир Треш у врага сосуществуют с самого начала.

2. Третий тир врага — Ветеран. Рабочее имя «Элита» снято. Причина ровно та, которой Макс открывал вопрос: «Это не главный бой в элитном сражении, а просто сильный юнит». Ось врага теперь: Треш / Обычный / Ветеран / Специальный. Отвергнуты «Матёрый» и «Отборный» (предложены скрайбом как обход конфликта — обход оказался не нужен), «Сильный» (безлико) и «Ударный» (описывает поведение, а не ступень).

3. Слово «Элита» не освобождается, а закрепляется за БОЕМ. EncounterTier.Elite — тир энкаунтера, и он остаётся: элитное сражение как узел карты никуда не девается. До этого решения одно слово держало две оси — ступень силы юнита и роль боя.

4. У Сосуда и у врага критерий ветеранства РАЗНЫЙ, и это нормально. Сосуд-ветеран — факт биографии (пережил хотя бы один завершённый забег); враг-ветеран — ступень силы (одно-два ясных правила, меняющих приоритет команды). Прилагательное читается одинаково («прошёл через бои, и это видно»), а критерий у каждой сущности свой и прописан в глоссарии отдельной строкой.

5. Кода переименование не касается. Оси тира юнита в движке нет вовсе: EncounterTier описывает бой, а у врага флага тира не существует — то же расхождение уже зафиксировано в Enemies - Implementation Status по хвату командира и наездника. Правятся только карточки, глоссарий и индекс раздела.

Владелец правды: Glossary, Enemies - Index, карточки врагов.

2026-08-06 (9) — подсказки ходят цепочкой окон, а не раскрываются внутри карточки

Дословно: «Щас у нас при наведении на термин открывается новый тултип» и, на опросник о том, кто прав, — «Код прав, цепочка остаётся» (06.08.2026, сессия 0db98a77).

1. Наведение на термин внутри подсказки открывает НОВОЕ окно. Форма, которая предлагалась в плане §II.10.5 — «башню окон не строим, Shift дописывает определения внутрь той же карточки, закреплённое окно всегда ОДНО» — отменена как нереализованная. Она прямо противоречила уже принятому лимиту в три окна, и расхождение прожило в документации незамеченным с 26.07.

2. Окон на экране не больше трёх, самое старое уходит первым. TooltipChain<T>, Limit = 3, FIFO. Ограничение читательское, а не техническое: четвёртое окно — уже не контекст, а стена, а интерес игрока движется вперёд по цепочке, а не назад к первому термину.

3. Shift остаётся переключателем ПОДРОБНОСТИ того же окна, а не раскрывателем терминов: он пересобирает открытые окна на месте и работает как toggle поверх галки «всегда подробно».

Владелец правды: Assets/_Project/Scripts/UI/Tooltips/TooltipChain.cs, TooltipSystem.cs; память tooltip-and-descriptor-decisions.

2026-08-06 (8) — пост-процессор кривых принят: правит копию, момент удара подтверждает Макс

Дословно: «Принято, пользуемся» (06.08.2026, сессия 0db98a77, в ответ на опросник по висящим вердиктам).

1. Третья фаза Animation Lab закрыта — AnimationLabProcessor идёт в работу. Тул написан 26.07.2026 и всё это время ждал приёмки; теперь прогоняем его на боевых клипах по ходу работы. Инструмент — AnimationLabProcessor.Process(rig, clip, Options).

2. Оригинал клипа не трогается никогда: результат пишется новым файлом рядом (<name>_processed.anim). Решение Макса от 26.07.2026 остаётся в силе и переподтверждено приёмкой — пост-процессор правит копию, а не источник, поэтому неудачный прогон ничего не стоит.

3. Три пасса, в этом порядке: чистка мёртвых констант (только при совпадении с позой префаба), оверлаппинг (лаг в один кадр на уровень иерархии, крайние ключи остаются на месте), тангенсы по фазам (сглаживание плюс линейный разгон в удар).

4. Момент удара предлагает тул, утверждает Макс. SuggestImpactTime считает подсказку по пиковой скорости и на этом останавливается: тайминг попадания — вопрос ощущения, и автоматом он не назначается.

Владелец правды: Assets/_Project/Scripts/EditorTools/AnimationLab/, память animation-lab-pipeline.

2026-08-21 — догнать рефы: план работ по UI принят рабочим порядком

Дословно: «Дальше мы изучаем конкретно еще раз Guildrun и в особенности - Heroes Olden Era. У нас UI намного слабее их. Выписываем, пытаемся понять как сделать наш лучше, взяв эти рефы», «Olden Era мне нравится даже больше, хихи» и — про сам план — «Я предлагаю пока все и в будущем по этому плану работать» (21.08.2026, сессия 26182ec4).

1. Heroes Olden Era становится ОСНОВНЫМ ориентиром интерфейса, Guildrun — вторым. До этого оба числились равными; теперь при расхождении приёмов выбирается Heroes.

2. Диагноз назван четырьмя осями (все сразу): плоско, пусто и рыхло, нет декора и деталей, слабая типографика.

3. Разрыв померен и оказался НЕ в размерах. Колонка меню, высоты кнопок и кегли у нас уже в тех же долях кадра, что у рефа. Держится он на четырёх вещах: за интерфейсом нет изображения, у элементов нет концов, нет группировки паузами, состояние показано заливкой вместо света.

4. Работы выстроены в очередь по отношению «эффект к затратам», и очередь принята как рабочий порядок на будущее. Первые пять пунктов делаются темой и раскладкой, последние два (обрамление арены и знак на экране исхода) ждут художника — до арта их результат остаётся макетом.

5. Правило захода: один пункт — один коммит и один кадр ИЗ ИГРЫ. Кадр из стенда превью для приёмки не годится: он не поднимает презентационный слой.

Правит доки: план — tech/40-planning/ui-uplift.md, замеры — Art_Dev/UI Refs/_teardowns/08-gap-vs-refs.md, стенд с макетами — раздел Лаборатории ui-uplift.

2026-08-21 — интерфейс уходит в холод: поверхности синеют, мир остаётся тёплым

Дословно: «Что у нас по итогу с цветовой темой7 Что мы решили? А то в настрорйках одно, в других - другое…» и «У нас же по логике надо было сделать, что UI - синеватый. Изучи что мы записывали в гдд» (21.08.2026, сессия 26182ec4).

1. Договорённость 06.08 исполняется буквально: UI синеватый, мир тёплый. Рампа поверхностей уходит с тона 32° на 188° при насыщенности 0.30; светлоты не меняются, то есть контраст текста и язык состояний остаются прежними. Это НЕ новая гамма, а исполнение старого решения: тогда в работу ушла соседняя фраза того же дня («фон — приглушённая латунь»), и интерфейс остался тёплым.

2. Латунь остаётся ценностью, патина — действием. Роли не тронуты. Фон теперь родня действию по тону, и различие держат насыщенность и кайма: у главной кнопки бирюзовая, у обычной латунная.

3. Гамма выбрана по кадрам, а не по описанию — четыре варианта одного экрана (тёплая как была, 195°/S18, 210°/S12 и принятая 188°/S30).

Правит доки: gdd/10-vision/visual-direction.md и ui-visual-language.md (там гамма названа «табак и патина» — тёплая половина устарела); тех-запись 2026-08-21-the-interface-finally-went-cold.

2026-08-21 — статистика профиля: наигранное как у Steam, победа — пройденный акт

Дословно: «Всё время с запущенной игрой (рекоменд.)» и «Акт пройден до конца (рекоменд.)» (21.08.2026, сессия 26182ec4).

1. Наигранное считается всё время, пока игра запущена — меню, двор и пауза идут в зачёт наравне с боем, как считает Steam. Вариант «только забеги» честнее отвечал бы на вопрос «сколько игралось», но разошёлся бы с числом в библиотеке Steam, а расхождение двух видимых игроку счётчиков объяснить нечем.

2. Победа в забеге — акт пройден до конца. Поражение — отряд лёг и перезапусков не осталось. Брошенный на середине забег не считается ни тем, ни другим: он вообще не попадает в статистику. Наказывать за перерыв игра не должна — выйти в меню это не проигрыш.

3. Длина забега меряется узлами, пройденными ногами. Стартовый узел не считается: там не с кем драться.

Правит доки: реализация — PlayTimeTracker, RunStatsRecorder; тех-запись 2026-08-21-the-run-result-is-written-by-the-stage-not-the-loop.

2026-08-21 — выбор режима становится рядом карточек; галочка лобби уходит в футер

Дословно: «Делаем выбор режима таким же карточками (кампания, ристалище и пвп)» и — про галочку онлайн-лобби — «В футер рядом с “Назад”» (21.08.2026, сессия 26182ec4).

1. Развилка в игре выглядит ОДИНАКОВО везде, где она есть. Приём с Heroes Olden Era — ряд крупных дверей со знаком, заголовком капсом и коротким описанием — заведён на «Профиле» и с этого решения принят как общий вид всякого выбора «во что идём»: режим игры, двери профиля, а дальше и остальные развилки. Игрок учит один жест, а не по одному на экран.

2. Три режима — три двери. Кампания (карта акта), Ристалище (площадка без карты и сейва), PvP (матч). Порядок неизменен; знак говорит про содержание режима, а не про его имя.

3. Галочка «Создать онлайн-лобби» стоит в футере, рядом с «Назад». Она про сеанс, а не про режим, и на поле карточек ей места нет: ряд дверей должен читаться рядом дверей, а не набором дверей с настройкой посередине. Прежний порядок «сначала с кем играем, потом во что» этим не нарушается — галочка видна одновременно с режимами и работает на любой из них.

4. Подсказка «за курсором» снята. Описание режима стоит на самой карточке и видно всегда; строка под кнопками отвечала на вопрос, на который карточка отвечает сама.

5. Подписи «Нажмите, чтобы выбрать» под рядом дверей тоже нет — снята в тот же день: «Убери эту надпись “нажми чтобы начать”, мы игроков за дурочков не держим)». Ряд крупных карточек читается как выбор сам, и объяснять жест, который экран показывает собой, значит держать игрока за неспособного. У рефа такая строка есть — это тот случай, когда приём взят, а его подпорка нет.

Правит доки: реализация — ModeChoiceView (общий вид развилки), NewGameScreenView, ProfileHubView; тех-запись 2026-08-21-two-forks-one-view-and-the-uxml-that-had-nothing-left-to-hold.

2026-08-21 — подключение к чужой игре становится полноэкранным; ожидание делится на два вида

Дословно: «у тебя подключение должно быть в деином стиле с лентой скорее? Не надо делать свой уник стиль! Просто да, внутри есть loading с загрузкой, отображается на фоне снизу справа как подбор игры во всяких мп, можно легко отменить при нажатии и тд. Не по середине, не мешает делать всякие дела. Твое мнение? Или лучше вообще полноэкранный экран подключения к лобби. На весь экран с кнопкой отмены. Чтобы был фокус именно на этом. Будто так даже лучше будет сделать» (21.08.2026, сессия 26182ec4).

1. Ожидание — не одна сущность, а две, и делятся они по тому, МОЖЕТ ЛИ игрок продолжать жить. Фоновое ожидание («хозяин ещё собирается») не отбирает управление и живёт лентой в углу — так устроен подбор игры в сетевых играх. Ожидание, за которым следует смена всего («подключение к чужой игре»), управление отбирает по существу: через несколько секунд твоя игра кончится и начнётся чужая, и делать в это время нечего.

2. Подключение к лобби получает ПОЛНОЭКРАННЫЙ экран с кнопкой отмены. Маленькая модалка посередине признана худшим из трёх вариантов: кадр загораживает, а фокуса не даёт. У полноэкранного есть и то, чего нет у остальных, — место сказать, на каком мы этапе (ищем маршрут, соединились, тянем состояние), вместо одной строки, по которой не понять, движется ли что-то.

3. Своего стиля у него не будет — прямое требование: заслонка тем же токеном veil, что у экрана запуска, кольцо и две строки тем же контролом WaitNote, кнопка отмены обычной пластиной.

Правит доки: стенд ui-notice (облики сообщений), реализация — BusyOverlayView и CoopSessionPresenter.

2026-08-20 — сообщения делятся на ленту и окно; четыре потока текста получают свои углы

Дословно: «Мне очень нравится лента на чет мизерное и мелкое (нельзя взять релик, если не хватает слотов, например, или не да, “не получилось подключиться к игре). А чет более важное, где надо принять варианты (например “вернуться”, “повторить” и тп) - окно посередине и общее затемнение как ESC. Или я не прав? Как лучше сделать?» и «Список игроков обычно сверху слева. Список событий снизу справа. Чат (его тоже лучше задизайнить -как сообщения видны и тп?) - снизу слева» и «Ленту все-таки снизу справа. Обычно лента НЕ будет появляться в бою. А если и будет - все ок, так задумано» (20.08.2026, сессия 26182ec4).

1. Одна модель сообщений, два облика, и облик выбирает МОДЕЛЬ. Заказ остаётся один (NoticeRequest), а вид определяется списком ответов: пуст — лента, непуст — окно по центру со затемнением. Оставить выбор вызывающему коду нельзя: «важность» каждый заказчик оценивает по-своему, и через месяц «не хватает слота» приехало бы модалкой. Исключение одно и тоже механическое: вид Error — всегда окно, даже с единственным ответом («сейв не записался» не должен промелькнуть).

2. Облик окна — ярлык над кромкой (вариант A стенда). Ярлык с видом сообщения выступает над верхней гранью панели, то есть вид читается раньше текста. Скругление из наброска Макса заменено фаской: радиус в дизайн-системе нулевой, язык формы — скос (PlateButton, SlantedPanel). Отклонены: кайма-полоска слева (вид узнаётся только цветом), стекло без рамки (плохо отделяется от боя), сплошная шапка цветом вида (спорит яркостью с кнопкой), знак-символ слева (нужен набор знаков).

3. Правило «окно закрывается только кнопкой» сужено до окон с решением. Прежняя формулировка (09.08.2026) распространялась на всё; лента ей противоречит по устройству — она живёт временем. Кнопка «Понятно» у каждого «сохранено» была бы пыткой, поэтому: окно с ответами — только кнопкой, лента — уходит сама, клик закрывает досрочно.

4. Четыре потока текста получают углы. Игроки — слева сверху (там панель и стоит с 03.08.2026), журнал событий — справа снизу, чат — слева снизу, лента — справа снизу над журналом. Возражение Никси («лента сядет на журнал и закроет его свежие строки») снято решением Макса: уведомления приходят в основном вне боя, где журнал молчит, а совпадение признано допустимым и осознанным.

5. Журнал событий живёт в углу HUD и тает. Пять-шесть последних строк, старые угасают, полная история — по клавише. Отклонены: только окно по клавише (события пролетают мимо глаз — а «кто меня убил» спрашивают ровно в момент смерти) и два режима с тумблером (второй облик ради малого числа игроков). В журнал уходят и кооп-события («Гилберт в лавке»): это история, а не обращение к игроку.

6. Чат открывается Enter, отпускает клавиатуру Esc. Причина не в привычке: вне ввода строка обязана не держать фокус, иначе в бою с паузой пробел перестанет быть паузой, а буквенные хоткеи — хоткеями.

7. Пинг в списке игроков — числом всегда, роль хозяина — подписью. Числу («48 ms») отдано предпочтение перед тремя рисками: у рисок нет порога, о котором договорились. Корона отклонена — иконка нигде больше не язык интерфейса, а подпись читается и в локали, и при плохом различении цвета.

Правит доки: стенды Лаборатории ui-notice, ui-log, ui-players (там же отклонённые раскладки и числа долей кадра).

2026-08-07 — общее решение: тыкают все, расхождение видно кружками, кубик зовут руками

Дословно: «У нас мини-игры при не согласии есть (бросок d20), изучи. Должны тыкнуть все обязательно. С выбором ноды на карте. к слову, надо сделать аналогично» и «Это должно быть расширяемо и меняемо. Просто учитывай, что много что еще может добавить и надо сделать хороший механизм, что будет хорошо поддерживать идеи в будущем» (07.08.2026, сессия 9c0cf5ea).

1. Совместное решение принимают ВСЕ, и это один механизм на все экраны. Награда 1-из-3, узел карты, улучшение «Сосуда», кнопки «Начать» и «Продолжить» — одно и то же: участник выбирает вариант, решение принято при полном совпадении. Согласие оказалось частным случаем выбора с единственным вариантом, поэтому отдельного «гейта готовности» больше нет. Новый совместный экран стоит ключа и списка вариантов, а не своей механики.

2. Чей выбор — показывает кружок цвета игрока. Дословно: «Все обозначается ПОКА ЧТО просто кружком цвета игрока. Кружок под карточкой, под нодой и т.д.» Один приём для всех решений: под карточкой награды, под узлом карты, под чем угодно следующим. Мейн-цвет уже канон присутствия (Coop - Presence §Мейн-цвет), так что новой сущности не заводится.

3. Голос снимается повторным нажатием, передумать можно одним. Тот же жест, что у кнопки «Готов»: повтор того же варианта — отказ, другой вариант — замена без промежуточного шага. Выбор остаётся обратимым, пока группа не сошлась.

4. Расхождение НЕ разрешается само — подтверждение вердикта 30.07.2026. Все выбрали разное: решения нет, большинство ничего не решает, игра арбитра не подсовывает. Ритуал зовут руками.

5. Кубик — d6, как и записано (заявка «d20» в переписке отклонена самим Максом в пользу канона). Ничья: «Если сразу в нескольких большие значения - кидаем новые кубики» — совпадает с уже принятым бесплатным перебросом между участниками ничьей.

6. Кубик рисуется 3D-мешем без физики, грани — классические точки. Совет принят после разбора: исход броска у нас известен ДО анимации (его назначает хозяин сеанса), поэтому физика либо синхронизировалась бы по сети, либо подделывалась под нужную грань — а подделка видна и убивает доверие к арбитру, которое ГДД защищает отдельным запретом на «удачливые» кубики. Меш без физики приходит к заданной грани траекторией. Условие стиля: плоская заливка и одна ступень тени, цвета из палитры; реалистичный свет выбьет кубик из сторибука. Скины при этом становятся материалом, а не сотней кадров на каждый.

7. Лавка в коопе отложена — «У нас пока лавка не готова, забили». Заодно снимается вопрос про транзакции над покупкой: до самой лавки он преждевременен.

9. Пинги получают носитель: колесо в духе LoL, но КОНТЕКСТНОЕ. Заявка Макса: «Колесо взаимодейтсвий - изучи в лол что я имею в виду. Это через ctrl (или альт? забыл я) + лкм команды в духе “ого, это враг опасный”, “ого, смотри сюда!”, “нам надо защищать этого юнита”». В LoL это ping wheel: зажать Alt/Ctrl с ЛКМ, повести мышь, отпустить; восемь универсальных пунктов.

Наш реестр пингов (Coop - Interplay Registry §Пинги) уже описывает содержимое — «Сюда», «Этого фокусим», «Дорого / Не бери», «Хочу это», «Смотри», — а носителя не имел. Берём колесо, но с одним отличием: пункты собираются под целью курсора, а не показываются все сразу. У LoL контекст даёт только точка на карте, у нас же пинг адресован объекту — бойцу, узлу, товару, — и общий набор из восьми дал бы половину неприменимых пунктов в каждой ситуации.

Реплики «Сосудов» пока не делаем (вердикт Макса 07.08.2026): сначала механика и иконки. Правило «пинг говорит голосом Сосуда» из реестра при этом не отменено — оно ждёт контента.

Заход отдельный и не дешёвый: колесо (UI), контекстные наборы (данные), канал пинга (сеть).

8. Где игрок — подписью в списке участников, и мест ровно шесть. Дословно: «Афк 1 минута - отошел. Во дворе быть НЕ может, это стадия ДО забега. На карте, арене, “в инвентаре”, “в ESC меню”

  • да». Отсюда: двор своего места не получает — он идёт до забега, игрок там ещё не в игре, и для списка это «в меню» вместе с главным меню и выбором дома. «Отошёл» — это минута без ввода, а не только свёрнутое окно: человек отходит от компьютера, не сворачивая игру, и ровно тогда его ждут. Инвентарь поверх карты значит «в инвентаре»: игрок смотрит туда.

Правит доки: Coop - Arbiters (кубик, ничья, вид), Coop - Presence (кружок как носитель «чей выбор»).

2026-08-06 (7) — бьём только туда, куда РЕАЛЬНО достаём: досягаемость владеет весами зон

Дословно: «Надо рандомить точку удара, до которой юнит из его положения РЕАЛЬНО может достать. Понимаешь? […] По этой же логике, если будет великан, а мечник достает лишь до его ног - то он бьет чисто по ногам!» (06.08.2026, сессия 1d0b7283).

1. У цели три зоны по вертикали: голова 5%, корпус 80%, верх ног 15%. Заказ Макса дословно: «И вообще хорошо, если можно ударить выше тела (щека, шея и т.д.) и ниже тела (верняя часть ног). С каким-то шансом.» Зоны — якоря в риге (Aim_Head, Aim_Body, Aim_Legs) детьми соответствующих костей, радиусы и веса — общие в CombatFeelConfig. Якорь следует за костью, поэтому анимация, поворот и масштаб учитываются даром.

2. Заявленные проценты — это БАЗА, которую перевешивает досягаемость. Вес зоны множится на долю её накрытия кругом атаки и нормализуется. Мечник у великана бьёт по ногам не по особому правилу, а потому что до корпуса не дотягивается. Отвергнут выключатель «зона доступна / нет»: зона на границе мерцала бы между 0 и 100% от шага юнита, а множитель меняется плавно.

3. Круг атаки считается ТОЙ ЖЕ формулой, что и в симуляцииAttackRange как зазор между поверхностями плюс радиусы тел. Отсюда следует, а не постулируется: если бой засчитал удар, ближайшая точка тела цели гарантированно достижима. Отвергнут собственный якорь «точка размаха» на риге: он завёл бы вторую метрику дальности рядом с боевой, и они разошлись бы.

4. Дальний край силуэта запрещён ВСЕМ, включая стрелков. Дословно: «Запрет для всех. Очень странно если дальник также ударит в спину стрелой, согласись?» Удар приходит в ближнюю к атакующему половину фигуры; попадание за силуэт невозможно, а не маловероятно.

5. Отвергнуто деление на восемь сторон света (предложение Макса, снято после разбора рисков, которые он сам и попросил оценить). Причина не в цене расчёта — она копеечная, — а в том, что у плоского спрайта нет глубины: «сзади-слева» и «слева» рисуются одним пикселем. Вдобавок секторы «сверху/снизу» спорили бы с зонами за вертикальную ось, дав факту двух владельцев. Вместо восьми секторов — разделение по осям: вертикаль держат зоны, горизонталь — ближняя половина.

6. Вырожденный случай кричит. Если после всех ограничений не осталось ни одной зоны, бьём в самую достижимую — и громко ругаемся в консоль. Дословно: «МЫ ОРЕМ ГРОМКО. Чтобы такое не пропустить случайно.» Крик идёт по КИТУ, один раз за бой: по экземпляру он залил бы консоль и перестал читаться.

7. Вычеркнута таблица «Убийца со спины / Копейщик снизу / Стрелок издалека». Она стояла в 70-gamefeel/vfx-language.md как канон, но Максом не принималась: «я такое вообще не писал, мб ты добавила вычеркивай, пока такого нет». Написана мной и позже мной же процитирована как правда — тот самый случай, ради которого заведена строка «сказано» в журнале.

Отложено, не делаем сейчас: прицельные удары навыком в конкретную часть тела — в том числе в такую, куда обычная атака не попадает. Дословно: «мб какие-то навыки “хедшот!” (хд) могут стрелять в определенные части тела. Или в части тела, что для обычных атак не доступны. Но об этом запиши, скажи что такое может появиться, но щас делать НЕ будем.»

8. Досягаемость давит вес КВАДРАТОМ, а не линейно (уточнение того же дня, после первого прогона). Линейного множителя оказалось мало: корпус заявлен тяжелее ног в шестнадцать раз, и корпус, доступный на четверть, всё равно выигрывал у ног, доступных на три четверти. Резкость вынесена ручкой (ImpactZoneReachSharpness, 1–4), значение — 2. Дословно: «Давай пока квадрат оставим и нормально». Что это даёт в числах: точка, где зоны уравниваются, — около 33% накрытия корпуса; ниже неё удары уходят в ноги. Хочется «чисто по ногам» раньше — ставится 3.

9. Выбор зоны и место внутри неё считаются по РАЗНОЙ геометрии. Зона выбирается по долям роста от позиции из ленты — одинаково у всех клиентов при любой фазе анимации; точка ставится вокруг живого якоря на кости — чтобы вспышка попадала в нарисованную часть тела. Причина: выбор зоны дискретен, и миллиметровая разница в позе перебрасывала бы удар из корпуса в ногу — двое игроков видели бы разные части тела. Место внутри зоны непрерывно, там та же разница незаметна.

Считать точку в симуляции — рассмотрено и отклонено. Вопрос Макса дословно: «Не лучше ли точку удара считать с симе?» Нет, пока нет: симу пришлось бы узнать геометрию фигуры, которая живёт в арте (якоря на костях), а розыгрыш зоны из боевого потока случайности сдвинул бы все последующие броски — урон, криты, лут. Переехать туда зона обязана в тот день, когда понадобится МЕХАНИКЕ: крит по голове, броня по частям тела, прицельные удары. Тогда она перестанет быть визуальным фактом.

Владелец правды: замысел — VFX Language §«Точка попадания — зона»; числа — CombatFeelConfig (веса, радиусы, доли роста, резкость); выбор — ImpactZoneSolver; тесты ImpactZoneTests (поведение) и ImpactZoneRigTests (согласованность конфига с ригом). Плану системы оружия зоны не принадлежат: там речь про архетип, облачение и тайминг.

2026-08-06 (6) — у всего кликабельного полный набор состояний; фокус доходит до геймпада; «лист» снят

Разбор жалобы Макса на работу по UI: «Как будто ты упускаешь 70% важного, не проверяешь себя, не понимаешь что я от тебя прошу. … Как будто у нас нет единого цельного набора всех элементов, их состояний. Часто встречаются очень старые состояния кнопок и решения, от которых мы отказались.»

Четыре вердикта, все — его выбор из предложенных вариантов.

1. Обязательный набор состояний: наведение, нажатие, выключенность, фокус; отмеченность где применима. Фокус нужен не мыши, а клавиатуре и геймпаду: на Steam Deck курсора нет, и без фокуса интерфейс непроходим. Перечень элементов и их наборов стал ДАННЫМИ (UiComponentRegistry), гейт — UiStateGateTests. На день решения :checked не был объявлен ни разу, :active отсутствовал у двенадцати классов, :focus — у тринадцати; всего гейт нашёл 50 дыр.

2. Кликабельное получает фокус физически. Чип, слот, карточки и родня — VisualElement, а он фокус не принимает: правила :focus стояли в теме мёртвыми. Отвергнуто «фокус только у кнопок» (геймпадная навигация стала бы отдельным заходом) и «focusable только у ведущего к выбору» (границу пришлось бы проводить заново на каждом новом элементе).

3. Отклик строки настроек — подсветка полосы целиком, а не её контрола: цель шириной в панель против галочки 20×20. Прямая отсылка к его же правилу от 26.07.2026: «Нет, полоса везде. Вдруг просто навестись захочется, хихи. КОНСИСТЕНТНОСТЬ.»

4. Регистр «лист» снят с игры. Пергамент .gm-panel--sheet стоял на четырёх живых экранах (гильдии, Двор, новая игра, профиль) при том, что метафора стола отменена ещё 03.08. Дословно: «Снять — экраны идут в стекло». Вместе с ним ушли шесть запечённых фактур и запекатель.

Следствия для документации: Vision - UI Visual Language переписан под минимализм и стекло (стоял living с отменённым содержанием), а в closed-forks отмечено, что живой бой за меню не отклонён, а принят и работает.


2026-08-06 (6) — время замаха одинаково у всех; персональные доли сняты

Дословно: «Время замаха должно быть у всех одинаковым. И точка.» (06.08.2026, сессия a4e2eebd).

1. Доля замаха — свойство ХОРЕОГРАФИИ, а не бойца. Она переехала на архетип анимаций: один и тот же взмах не может замахиваться по-разному у двух юнитов. Своего поля у юнита больше нет.

2. Персональные доли десяти юнитов сняты. Были заданы вручную ровными числами — Скелет-мечник 0.35, Антимаг 0.45, Арканист 0.35, Пожиратель снов 0.35, Хранитель углей 0.35, Хладнорождённый 0.50, Гемомант 0.40, Некромант 0.35, Ночной клинок 0.25, Водный монах 0.40. Теперь у всех 0.40 — замер из клипа атаки (контакт на 28 кадре из 70).

3. Что осталось личным. Потолок длительности свинга (AttackSwingTicks): «редкий тяжёлый удар с длинным заносом» — это идентичность кита, а не свойство взмаха. Им и задаётся разница между бойцами.

4. Модель времени подтверждена Максом отдельно: доля считается от ДЛИТЕЛЬНОСТИ СВИНГА, а не от интервала атаки. Дословно: «надо мерить не от скорости атаки как таковой, а от скорости анимации атаки итоговой». Так и работает: min(потолок, интервал) — у кита с атакой раз в 5 секунд замах остаётся 0.4 с, а остаток интервала он ждёт.

Цена, которую надо замерить: у десяти юнитов замах изменился в пределах ±0.15 доли свинга. Это телеграф и окно прерывания — заведено в docs/balance-issues.md.

Владелец правды: AnimationArchetypeData.WindupShare, тест SimulationReadsNoClipTests (симуляция не читает клип), план Planning - Weapon System §4.

2026-08-06 (5) — Сосуд носит голову, Реликвия несёт всё остальное; голова врага из пула вида

Уточнение 2026-08-06/4: владельцы расставлены, и граница прошла не там, где я предположила.

1. Граница — «Сосуд против Реликвии», а не «оружие против брони». Дословно: «У нас архетип зависит от релика. Броня зависит от релика. Предметы в руках зависят от релика. Голова и части - от вессела. […] По итогу у нас есть вессел. Он надевает релик» (06.08.2026, сессия a4e2eebd). Это тот же канон, что 2026-08-01/8 («голова — якорь, тело носит Реликвия»), доведённый до формы данных.

2. Скин оружия отдельной сущностью НЕ становится — он часть облачения. Дословно: «У нас могут повторяться архетипы анимаций у разных реликов, поэтому нам нужны скины на оружие. Их можно включить в принципе также как и броню в одно - в одно место - визуал релика». То есть спрайты отвязываются от архетипа (он повторяется), но едут вместе с бронёй — владелец у них один. Моё предложение развести их на два ассета отклонено как лишнее деление.

3. Термин: «облачение», а не «визуал» — слово занято, UnitVisual сегодня означает набор клипов. Инженерное уточнение, дизайн не трогает.

4. Головной убор — слой Реликвии поверх головы Сосуда. Следствие, которое придётся отработать: шлем обязан уметь прятать волосы. Уборов пока нет, механизм скрытия заводим вместе с первым.

5. Голова врага: явная у уников, из пула вида у рядовых. Дословно: «Зависит от врагов. Можно включить как „выбрать конкретную” (мб какой-то уник или элита), так и „общий пул” (в него не входят уник головы)». Пул лежит на виде (Бандиты, Гоблины, Звери, Големы) и перечисляет общие головы, а не исключает уникальные: так «уник выпал рядовому» невозможен структурно, а не по забытому флагу. Выбор из пула идёт через IRngService — иначе в кооперативе двое увидят разных гоблинов.

6. Внешность Сосуда уже имеет владельца — BirthSeed. Заводить поле под голову не нужно и нельзя: сид рождения по замыслу разворачивает и досье, и внешность, и «меняться не должен никогда».

Владелец правды: Planning - Weapon System §2, §3.1.

2026-08-06 (4) — оружие получает три оси: архетип даёт анимации, скин даёт спрайты, юнит носит броню

Заход вырос из аудита визуального слоя: заказ был «учитывай, что будут другие виды оружия, скины, экипировка, а от типа оружия меняются анимации».

1. Оси три, и они не смешиваются. Архетип оружия решает, какие клипы играют и какие узлы есть в риге (меч+щит, копьё, посох, два клинка). Скин оружия — какие спрайты лежат на предметах этого архетипа (длинный меч, топор, щит без спрайта). Внешность юнита — как выглядит сам боец. Дословно: «Мы щас говорим про систему оружия. У нас могут быть разные скины у одного анимационного вида оружия. Понимаешь о чем я? Тут же вопрос насчет анимаций в первую очередь» (06.08.2026, сессия a4e2eebd).

2. Отсутствие щита — это СКИН, а не архетип. Дословно: «лучше „отсутствие” щита сдеай как „скин” на этот тип оружия. Это даже более правильно. Просто да, скин, где щит без спрайта». Причина: хореография «меча и щита» не меняется от того, есть ли у конкретного бойца щит в кадре, и плодить архетипы под каждое сочетание значило бы дублировать наборы клипов ради пустого спрайта. Отвергнут мой вариант «профиль оружия „только меч”» — он давал ту же картинку ценой лишнего набора клипов.

3. Броня зависит от юнита и живёт отдельным слоем от головы. Дословно: «броня (все, помимо головы и её частей) - будет зависеть от конкретного юнита». Слои разведены заранее, потому что броня почти наверняка станет экипировкой — меняемой в забеге, — а голова-Сосуд не станет: она якорь личности. Механизм наложения при этом один на все слои: список «часть рига → спрайт», где пустая запись означает «не показывать».

4. Поза левой руки при скрытом щите пока не чинится. Клип ставит её в хват, и без спрайта рука держит пустоту. Дословно: «Все ок, это временный вариант».

Владелец правды: план Planning - Weapon System; после реализации — сами ассеты архетипов и скинов.

2026-08-06 (3) — направление удара замеряется по клипу: позу в момент события спрашивать нельзя

Поправка к 2026-08-06/2, пункт 2. Направление осталось тем же по смыслу — движение клинка на кадре контакта, — но берётся теперь замером клипа, а не позой в момент события. Скриншот следующего боя: «Удар сверху вниз, а этот эффект идет под очень странным углом» (06.08.2026, сессия a4e2eebd).

1. Причина: порядок кадра, а не формула. Событие урона приходит внутри Update презентера, у которого [DefaultExecutionOrder(-100)] — то есть раньше видов и заведомо раньше, чем Animator применит позу (она встаёт между Update и LateUpdate). Кости в этот момент стоят в ПРОШЛОМ кадре: на медленной атаке 15–20° ошибки, на быстрой — 60–100°, потому что взмах в 200° укладывается там в два-три кадра показа.

2. Замер по клипу выбран как «вариант В», который и был согласован изначально. Дословно тогда: «Пупупу, согласен, можно В». Промежуточный рантайм-вариант через перпендикуляр к рычагу был приближением и стрельнул в тот же день.

3. Что замеряем. Два сэмпла клипа вокруг кадра контакта, разница положений кончика оружия — и есть движение. Хранится в координатах корня тела, поэтому разворот юнита приходит даром через знак масштаба.

4. Прецедент, который стоило заметить раньше. Дуга за клинком уже читала геометрию в LateUpdate и объясняла это прямым комментарием в коде — «в Update дуга отставала бы от руки на кадр». Форме такой возможности нет: она рождается по событию, значит опирается только на замер.

Владелец правды: UnitView.MeasureStrikeDirection и TryGetStrikeDirection.

Правит доки: Gamefeel - VFX Language §Серп лежит вдоль направления удара.

2026-08-06 (2) — знак удара лежит вдоль движения клинка, а не по хорде «замах → цель»

Разбор скриншота боя в QA: «Видишь как у нас летит хит эффект от меча к юниту? Он точно летит не от точки края меча в момент эвента начала замаха к точки хита» (06.08.2026, сессия a4e2eebd).

1. Диагноз: модель, а не поломка кода. Форма строилась по хорде A→B ровно как записано в каноне. Замер живого префаба (QA Notes, дамп docs/lab/data/hit-geometry.json): точка A — кончик клинка на StrikeStart — лежит за спиной и выше (−0.71, +0.90), цель стоит впереди на два с лишним корпуса. Хорда наклонена на ~20°, а клинок в момент касания идёт вниз под ~75°. Рубящий удар читался лежачей полосой.

2. Направление берётся из движения клинка в момент касания. Выбран вариант «касательная» («согласен, можно В»). Рука — жёсткий рычаг вокруг плеча, поэтому направление есть перпендикуляр к вектору «плечо → кончик»; из двух сторон верна та, что смотрит на цель. Ни истории кадров, ни замера клипа не нужно.

3. Длину несёт только урон. Прежде режущий брал минимум по длине хорды, и она всегда побеждала: знак выходил в полтора роста юнита (2.48 при H = 1.6). Расстояние до цели — свойство расстановки, а не удара.

4. Фолбэка нет, есть ругань. Дословно: «Нет, давай без легаси все же. Просто ругань, хихи». Нет тела, оружия или плеча — формы не будет, причина уходит в консоль. Прежний путь «строим от корпуса» рисовал знак наугад.

5. Точка A и маркер StrikeStart уходят из формы. Маркер остаётся у дуги за клинком, которая живёт на взмахе. Метод вида, отдававший точку A, удалён — иначе остался бы код, врущий названием.

6. Заодно принято по виду следа: обводка резкая и мельче (дословно: «Черный аутлайн сделать резким и более мелким»), мягкость — только на внутренних переходах между ступенями; у дуги заведена рванность краёв двумя потоками шума по углу.

Владелец правды: UnitView.TryGetStrikeDirection (направление), HitFormFactory (длина), SH_Vfx_HitForm.shader и SH_Vfx_SwingArc.shader (мягкость и рванность), CombatFeelConfig (ручки).

Правит доки: Gamefeel - VFX Language — §Термины, §Автоатака мили.

2026-08-06 (1) — пиксель-арт снят целиком; единого имени у стиля нет, у каждого слоя своё

Контекст. Макс: «У нас уже давно НЕ пиксель арт! Надо везде где про него написано - или удалить, либо указать что мы от него отказались.» Разведка показала, что отказ уже состоялся — но четырьмя разными решениями по четырём слоям, и ни один документ их не сводил: интерфейс ушёл в июле («мы уходим от пикселей… Как минимум в интерфейсе - 100%»), VFX 2026-07-31/53, персонажи 2026-08-01/14, окружение 2026-08-02/44. Ни одного слоя, где пиксель остался живым, нет.

2026-08-06/1 — общего имени у визуального стиля не будет; язык называет каждый слой сам. Выбор Макса из двух вариантов (распространить «сторибук» на весь проект против термина на слой). Дословно: «У каждого слоя свой термин». Причина, по которой это не формальность: слои решают разные задачи и уже говорят разными языками — персонажи плоским «сторибуком», VFX гладким параметрическим «SAO-стилем», интерфейс палитрой «табак и патина» со стеклом, окружение тем же сторибуком, но своими правилами (цветной контур, приглушённая гамма, живописная плоскость). Термины не назначались задним числом — все четыре уже приняты, они лишь не были собраны вместе.

2026-08-06/2 — правила, не зависевшие от пикселя, отмену переживают. Экранный рендер, нецелый скейл и порог bloom к стилю не привязаны: нецелый скейл держится на том, что боевая камера ведёт зум непрерывно и в ровное кратное на экране не попасть. Правило заведено потому, что при чистке они вычёркивались бы заодно с термином, а обосновывались им в трёх местах сразу (visual-direction, скилл uitk, правила импорта).

2026-08-06/3 — где термин нёс АРГУМЕНТ, аргумент переписывается, а не удаляется. Два случая. В VFX Language правило «форму делает шейдер» стояло на том, что пиксельная текстура эффекта конкурирует с пиксельным юнитом: конкуренции больше нет, правило переставлено на причины, которые её пережили. В Character Animation отказ от меш-деформации опирался ЦЕЛИКОМ на размазанные тексели — там вывод помечен как требующий пересмотра, а не развёрнут молча: плоский сторибук с solid-заливкой деформируют ровно так (Wildfrost, Cult of the Lamb), и это решение Макса, а не писаря.

Правит доки: visual-direction (§Стилевое решение переписан целиком), pillars, pitch, vision (столп 5 переименован в «Ощущение важнее верности формату» — смысл не менялся, он к отмене и привёл), character-animation, vfx-language. Вне vault: скиллы gamefeel-vfx и uitk, .cursor/rules/agent-workflows, docs/art/ТЗ_пиксель-арт_юниты.md (помечен отменённым, не удалён — на его §0 ссылается тех-журнал 2026-07-30-sprite-filtering-bilinear-no-mips), портфолио-кандидаты.


2026-08-06 — след клинка становится росчерком: тёмное живёт внутри градиента, ширина идёт полумесяцем

Поправка к 2026-08-05/3: у формы удара обводка лежит СНАРУЖИ, у дуги за клинком — нет. Повод — кадр из Cult of the Lamb в QA Notes и наблюдение «у нас трейл меча слишком… ммм.. скучный?».

1. Тёмное у следа — крайняя ступень его же градиента, а не слой поверх. Дословно: «Сделать градиент с началом и концом с черным (+ по краям)? Чтобы выглядло как этакий аутлайн и это ничего не нарушало» (06.08.2026, сессия a4e2eebd). Контур снаружи, нарисованный днём раньше в двух вариантах, отклонён целиком: он второй слой, а нужен один.

2. Поперёк следа три ступени: пересвет в середине, цвет к краям, чёрная кромка. Дословно: «в центре цвет более ярко-белый, по краям - более цветной». Это та же ось «ядро и кайма», что у формы удара, — у дуги её просто не было: она рисовалась одним плоским цветом.

3. Кромка съедает толщину ИЗНУТРИ. Габарит дуги не меняется, меняется то, сколько внутри осталось свету. Выбрано против «нарастает снаружи»: так лайн не спорит с размером эффекта и не требует запаса меша.

4. Ширина идёт полумесяцем, и сужение УСКОРЯЕТСЯ к хвосту. Дословно: «След не просто должен сотановиться менее по opasity незаметным, но менять и “ширина” следа на его окончании. (Как “параболе”? Хз как сказать, но чем ближе к концу, тем быстрее уменьшение)». Профиль — степень ниже единицы, принято 0.55; 0.35 и 0.85 нарисованы рядом на случай, если в движении вердикт сменится.

5. Передний край открыт. Чёрного торца у клинка нет: там пик света, и в кадре Lamb это самое яркое место. Хвост при этом сходит в чёрное сам — там ширина уже нулевая.

6. Что осталось несделанным из той же заметки. «Не хватает ему рванности» — неровность краёв у дуги НЕ добавлена. У формы удара она есть и детерминирована сидом, у следа её нет; отдельная работа.

7. Цена та же, что у формы. Приём выглядит бесплатным, но чёрное — это перекрытие, а перекрывать сложением нельзя: SH_Vfx_SwingArc тоже переехал на premultiplied alpha. При выключенной подаче шейдер ведёт себя ровно как прежний аддитив.

Владелец правды: docs/lab/src/sections/gamefeel-lineart.ts (стенды и меры), SH_Vfx_SwingArc.shader (реализация), SwingArcStyle и CombatFeelConfig (числа и тумблер).

Правит доки: Gamefeel - VFX Language.

2026-08-05 (4) — цвет юнита один: тело красится тем же оттенком, что и его эффекты

1. У цвета юнита ОДИН владелец — его оттенок (UnitTone). Дословно: «Т.е. да, нужен ЕДИНЫЙ источник для тинта и эффектов. Цвет у эффектов - корректный как раз, а тинт - не особо» (05.08.2026, сессия d8b1d1a8). Тем же оттенком, которым юнит светит — снаряд, его след, искры удара, контур каста, осколки смерти, — красится и само тело: в бою, на карточке инвентаря, в витрине.

2. Ступень приглушения тела (BodyShade: Ash / Verdant / Tan) снята целиком. Она была ГЛАВНЕЕ оттенка и стояла руками у тридцати китов из сорока восьми: тело рисовалось пеплом или охрой, пока его же искры летели синими. Это и есть «тинт не особо» — не тон был плохим, а второй владелец перебивал его на большей части ростера.

3. Задача, ради которой ступень существовала, исчезла сама. Приглушение разводило тех, кто носит ОДИН арт (решение 30.07.2026). После переезда всего ростера на общий скелет (04.08.2026) арт делят ВСЕ, и четырьмя ступенями серого сорок восемь китов не различить — различение ушло в оттенок, которым у каждого свой.

4. Красятся ВОЛОСЫ и всё, что в руках, — больше ничего. Дословно: «Скорее только волосы И любое оружие» (05.08.2026). Оттенок берут причёска, оружие любого вида и щит; кожа, лицо, одежда, руки и ноги остаются в том цвете, каким их нарисовали. Причина в природе тинта: он умножается на арт, и цветное тело под цветным множителем уходит в грязь, а прядь волос и сталь клинка написаны под покраску и принимают цвет честно.

5. Тинт по-прежнему УМНОЖАЕТСЯ на арт и потому затемняет и уводит оттенок, но не перекрашивает нарисованное. Настоящая перекраска — работа Palette Remapper, и это решение её не отменяет.

Правит доки: Gamefeel - VFX Color (§Приглушение тела заменён). Владелец правды в коде: UnitColorRoles.Body, тест UnitTintPolicyTests.BodyTint_IsTheSameToneAsTheEffects.

2026-08-05 (3) — форма удара получает чёрную обводку; «кайма» и «обводка» — разные вещи

1. Форма удара обводится ЧЁРНЫМ. Дословно: «Давай чисто черную кайму» (05.08.2026, сессия a4e2eebd). Выбор сделан по стендам Лаборатории (#/lineart) из четырёх вариантов: без обводки, чёрная, тёмный оттенок своего цвета, тот же оттенок с нажимом. Повод — арт персонажей ушёл в плоский сторибук с толстым лайнартом (2026-08-01/8), а эффект остался бесконтурным облаком света.

2. Термин — ОБВОДКА, и он не синоним «каймы». Слово «кайма» в кластере занято с 31.07.2026: это внешняя часть формы, несущая цвет элемента в способе смешения «ядро и кайма», и в шейдере она живёт как _RimColor. Обводка — тёмная граница СНАРУЖИ всей формы, включая кайму. Разводить обязательно: без этого следующая правка перекрасит элемент, думая, что чинит контур.

3. Разведение осей не нарушено. Правило «юнит держит форму, эффект держит яркость» остаётся: обводка не красит, она перекрывает. Её вклад в цвет ровно нулевой — это чёрное перекрытие, а не ступень палитры, поэтому владельца цвета оно не заводит.

4. Обводка — постоянной ширины. Принят стенд black как он нарисован. Вариант «ширина по толщине формы» (нажим кисти, острия сохраняются) рисовался только для цветной обводки и на чёрной не проверялся — если ровная затупит острия сильнее, чем хочется, это одна ручка.

5. Обводку получает только форма удара. Дуга за клинком, свечение части при касте, искры и ядро остаются без неё: дуга и свечение — это свет, а не знак, а на теле юнита обводка встала бы вторым контуром поверх лайна самого арта. Зоны на земле и купол барьера — кандидаты, но отдельным решением.

6. Чем платим — сменой блендинга. Blend One One умеет только прибавлять свет, поэтому тёмная обводка при нём физически невозможна (стенд blend-add рисует её, и её нет). Шейдер формы переходит на premultiplied alpha: пиксель с нулевой альфой ведёт себя как прежний аддитив, свечение и bloom работают как работали.

7. Что стенд опроверг. Прогноз «восемь тёмных контуров в свалке сложатся в грязь» не подтвердился: обводка не складывается, а перекрывает, и в свалке из восьми ударов она РАЗДЕЛЯЕТ формы, которые без неё сливались в белое пятно.

Владелец правды: docs/lab/src/sections/gamefeel-lineart.ts (стенды и меры), SH_Vfx_HitForm.shader (реализация), CombatFeelConfig (ширина и тумблер).

Правит доки: Gamefeel - VFX Language.

2026-08-05 (2) — награда лежачими строками; сундук в два такта; событие и привал панелью

1. Награда — лежачие строки, но шире рефа. Дословно: «Награды - Вариант B . Хотя карточки должны быть более широкими, слишком много места теряем» (05.08.2026, сессия 35d14bea). Форма Hades: иконка слева, редкость словом справа, отдельная строка-стат с «50 ➜ 60». Ширина поднята с 45.9% рефа до 60% экрана — на исходной по бокам оставалась четверть кадра пустоты, а наша строка несёт кит целиком, а не одну фразу.

2. Редкость называется СЛОВОМ. Следствие выбранной формы, а не отдельное решение: в разборе девяти рефов слово — единственный носитель редкости, читаемый без знания легенды, и в этой раскладке для него есть место у правого края строки.

3. Сундук — два такта, содержимое приходит обычной наградой. Дословно: «Сундук - вариант А. Т.е. сначала просто сундук, анимка и обычный ревард экран». Своей раскладки у содержимого нет намеренно: второй такт это тот же экран награды. Цена принята сознательно — второй клик оправдан анимацией открытия; если её не будет, вариант «экрана сундука нет вовсе» вернётся на стол.

4. Событие — панель справа, арт слева заходит под неё. Приём Guildrun: кайма панели нарисована только там, где нет арта, а сам арт прорывает нижнюю кромку и уходит в игровое поле. Условие работоспособности записано в стенде: под панель заезжает только ТЁМНАЯ часть иллюстрации, иначе текст поплывёт.

5. Привал остаётся раскладкой события — текст и список действий, бюджет строкой в шапке. Значит действия НЕ адресные: «перевязать раны» относится к отряду вообще. Вариант с отрядом телами отклонён вместе с адресностью.

6. Лавка вердикта не получила — единственный экран этого захода, оставшийся в ожидании.

Владелец правды: docs/lab/src/sections/ui-{reward,chest,event,camp}.ts (чертежи и меры), RewardScreen.uxml, ChestScreen.uxml, EventScreen.uxml, CampScreen.uxml (реализация).

2026-08-05 (1) — главное меню остаётся как есть; настройки берут горизонтальные табы

1. Главное меню пересмотрено и оставлено прежним. Дословно: «Для нашего меню главного оставь пока наш вариант» (05.08.2026, сессия 35d14bea). Решение принято после того, как рядом с ним встали пять альтернатив, снятых с четырнадцати рефов, — то есть это подтверждение выбора, а не его отсутствие.

2. Чем платят отвергнутые — записано, чтобы не пересматривать по кругу. Плита CotDG закрывает половину кадра наглухо; список по центру ложится ровно туда, где идёт бой; обложка Hades II прячет «Присоединиться» на шаг вглубь, а кооп мы обязаны показывать первым; меню внизу слева даёт лучшую видимость кадра, но при крупном кегле пункт спорит с вывеской за первый взгляд; два списка занимают правую сторону, но у рефа два ритма читаются как две разные системы, и правый низ вдобавок занят всплывашкой Steam.

3. Настройки — горизонтальные табы. Дословно: «для настроек - берем горизонтальные таблы». Самая частая схема класса: семь рефов из тринадцати. Вертикальные табы (Hades II) отклонены вместе с их вместимостью в восемь разделов, две колонки без табов (Skul, Factorio) — вместе с их «всё видно разом».

4. Что схема обязывает соблюдать. Подпись слева, виджет справа — так во всех тринадцати рефах без исключения. Заголовка «Настройки» на экране нет: он уже назван табом, с которого пришли. Индикатора «изменено, но не применено» нет ни у одного рефа — настройка применяется сразу, и это норма класса, а не наше упущение.

Владелец правды: docs/lab/src/sections/ui-mainmenu.ts, docs/lab/src/sections/ui-settings.ts (чертежи и меры), MainMenuScreen.uxml, SettingsScreen.uxml (реализация).

2026-08-05 — профиль и гильдия делят одну раскладку: список слева, панель выбранного справа

1. Раскладка выбрана из шести нарисованных, по три на экран. Дословно: «Берем вариант гильдии #2 и для профиля и для гильдии» (05.08.2026, сессия 35d14bea). Второй вариант гильдии — узкая колонка слотов слева и панель выбранного дома справа; тот же приём назначен экрану профиля. Чертежи со всеми вариантами и мерами — Лаборатория, область «Интерфейс».

2. Один приём на два экрана — сознательно. Экраны стоят в цепочке входа подряд, и разные приёмы на них заставляли бы игрока учиться дважды подряд ради одного и того же действия «выбери из списка».

3. Что раскладка даёт сверх ряда карточек. Ростер дома виден телами, а не числом, и в панель влезает книга гильдии. У профиля справа встаёт «Как меня видят» (ник, цвет, курсор) — то, чего нет ни у одного рефа, потому что их профиль это только слот сохранения, а наш держит ещё и идентичность игрока.

4. Чем платим. Слот становится строкой: бухгалтерия профиля (наиграно, дата) ужимается до одной линии под именем, а не идёт столбцом, как в карточке. Ряд карточек из вариантов А и Б отклонён вместе с этим.

5. Состав карточки профиля — «бухгалтерия», не состояние забега. Дословный выбор Макса из трёх предложенных наборов: «Бухгалтерия, как Slay the Spire». Время в игре и дата обновления; где игрок сейчас — это про дом, а не про профиль, потому что слотом сохранения у нас служит дом.

Владелец правды: docs/lab/src/sections/ui-profile.ts, docs/lab/src/sections/ui-guilds.ts (чертежи и меры), ProfileScreen.uxml, GuildSelectScreen.uxml (реализация).

2026-08-04 (4) — из боя не уходят навсегда: побег длится четыре секунды, кайт — сколько угодно

1. Побег ограничен по времени. Дословно: «Возврат по времени (побег не более 4 секунд, если это не кайт юнит как рейнджер, он может кайтить сколько угодно)» (04.08.2026, сессия 86077da2). Боец отступает не дольше четырёх секунд, после чего возвращается в бой независимо от здоровья.

2. Кайт — не побег, и предела у него нет. Отход у кайтера — способ драться, а не способ выжить; Следопыт кайтит столько, сколько нужно. Разводятся они полем «кайт включён», а не отдельным списком имён.

3. Пока — побег выключен у всех, кроме Следопыта. Дословно: «Пока отключи побег у ВСЕХ кроме рейнджера». Временная мера на время балансного захода: с ней замеры чистые, а вернуть побег отдельным китам можно по одному.

4. Причина решения — бои, которые не заканчивались. Порог возврата задан долей HP и недостижим, когда лечить некому: боец уходил навсегда, обе стороны оставались живы. Восьмая часть боёв круга не имела исхода (93 из 702), у Монаха вихря — больше половины его матчей. После правки — 2 из 702.

Владелец правды: ProfileBrain.ResolvePositioning, SimTuning.RetreatMaxSeconds.

2026-08-04 (3) — дистанция боя измеряется ступенями, а не числами у каждого

1. Дальность авто-атаки — одна из шести ступеней. Дословно: «дальность классы не задают, но должны быть уровни свои отдельно … И все юниты привязываются к одному из этих дальностей + могут чуть уменьшить или увеличить от него. Но по сути мы задаем лишь их, и если что через это и балансим» (04.08.2026, сессия 86077da2). Ступени: обычный ближний бой, длинное оружие (копейщик), дальний с малой дистанцией, обычный дальний, дальний с большой, без ограничений — 1 / 2 / 5 / 8 / 12 / 25 мировых единиц.

2. Ступени и есть ручка баланса дистанции. Личное отличие юнита задаётся долей от ступени (±25%), а не своим числом: иначе правка ступени переставала бы доезжать до тех, кто от неё отличается, и ручка молча ломалась бы ровно на интересных китах. Сдвинули «обычного дальника» — поехали все обычные дальники.

3. «Без ограничений» — это число, а не бесконечность. На дальность опираются геометрические гейты боя (сближение, предсказание «замах докрутит», кайтинг); бесконечность превратила бы их в сравнение с бесконечностью. Шестая ступень задана крупнее арены (поле 20×12, диагональ около 23) и играется как «через всю арену».

4. Причина решения — молчаливый дефолт. Пока дальность была свободным полем, незаполненное значение уезжало на дефолт конфига, и «дальник в упор» выглядел в данных ровно как «ближник». Ступень требует ответить «кто он по дистанции» прежде, чем появится число.

Открыто: дальность каста умений. Своего ограничения у умений сейчас нет вовсе — любое кастуется через всю арену; привязка их к тем же ступеням обсуждается отдельно, вместе с вопросом «подходить или не кастовать», когда цель дальше.

Владелец правды: AttackRangeBand, StatsConfig.RangeOf, RangeBaseline, тест AttackRangeBandTests.

2026-08-04 (2) — главное меню сходит с панели: колонка текста слева поверх живого боя

Продолжение 2026-08-04/1 и первое применение разборов реф-базы не по цвету, а по раскладке.

1. Панели у главного меню больше нет. Дословно: «У нас зря меню все посередине и имеет за собой панель. Это надо для настроек и прочего, но в меню лучше - просто небольшие кнопки-текст без заднего фона и сам фон (например наша битва, что мы временно отказались от неё)» (04.08.2026, сессия ca460396). Замер рефов совпал с этим до чисел: меню в левой трети — 10 игр из 14, панели нет у 12, текст без плашки у 8, глобального затемнения нет у 11. Единственный реф с настоящей панелью — Factorio, и он же единственный, который читается как отдельная программа, а не как игра.

2. За меню идёт живой бой, а не иллюстрация. Двадцать заранее заданных боёв («2 реликвии против кучи гоблинов», по формулировке Макса — «Все прям на грани»), берутся вразнобой один за другим. Записи не будет: ядро детерминированное, поэтому состав плюс сид дают тот же бой покадрово — «заранее просчитанный» получается бесплатно, а система реплеев ради фона не нужна.

3. Поехавший от баланса «эпик» — приемлемая цена. Дословно: «Что делаем при изменении баланса? Пока забьем, думаю? Даже если поедет “Эпик” боя, пока нам простителньо». У фонового боя нет условия успеха, кроме «идёт и выглядит живым», победа любой стороны одинаково годится. Единственный настоящий отказ — бой, кончившийся за три секунды или не кончающийся вовсе; его закрывает таймаут с переходом к следующему, а не поддержка двадцати сценариев руками.

4. Отдельной цветовой роли «текст поверх сцены» не заводим. Довод Макса: «не надо считать от боя. Мы ведь его приглушим черным специально». Принято с поправкой: приглушение и вспышки живут в разных слоях, и гасить кадр достаточно сильно, чтобы взрыв не пробивал, значило бы погасить бой до нечитаемости — гасим слабо, а контраст пунктов держит локальная вуаль под колонкой (так делают пятеро рефов из восьми, кладущих меню на фон).

5. Это отменяет решение «главное меню = кнопки ESC-меню». Тогда оба меню намеренно выглядели одинаково, чтобы не читаться из разных интерфейсов. Теперь их различие осмысленно: ESC — панель-маршрутизатор поверх игры, главное меню — сам кадр игры. Отсюда же открытый хвост: пауза и настройки сейчас делят один диалог 1280x860, тогда как рефы разводят их вдвое (пауза 25.9% ширины против 33.6–84% у настроек).

Владелец правды: Assets/_Project/UI/Screens/MainMenuScreen.uxml, блок «ГЛАВНОЕ МЕНЮ» в components.uss, тест ScreenLayoutOverlapTests.

2026-08-04 — вход в игру идёт цепочкой экранов; между домом и забегом встаёт Двор

Пересмотр модели «одной двери» (02.08.2026, сеанс рождается там, где решено владение) в части UI: сам заказ остаётся единым (режим + дом + лобби уезжают в игру одним GameStartRequest), но собирается он теперь не одним листом, а шагами.

1. Экран «Создать игру» держит только режим. Кнопки «Начать» на нём нет: клик по режиму — это уже уход дальше. Дословно: «Т.е. не надо кнопку внизу “начать”. Если нажимаем на режим - уже переносит дальше» (04.08.2026, сессия 60e7fc08). Прежний лист собирал всё сразу, и дом приходилось показывать рядом с режимами, которым он не нужен: половина экрана появлялась и исчезала вслед за выбором, а «Начать» стояло третьим шагом после двух уже сделанных выборов.

2. Дом выбирается СВОИМ экраном и только у Кампании. Ристалище и PvP уходят в игру тем же кликом — дома у них нет. Слоты домов показываются все, включая свободные, числом из GameConfig.MaxGuildsPerProfile: список, кончающийся на последнем заведённом доме, не отвечает на первый же вопрос игрока «а можно ещё?».

3. Между домом и забегом встаёт Двор гильдии. Дословно: «Добавь этап хаба в компании. Просто экран заглушка где написано IN PROGRESS и лишь одна кнопка - начать забег». Полная дорога входа: Создать → Кампания → дом → Двор → «Начать забег» → забег; либо Создать → Ристалище (или PvP) → сразу туда. Двор — это то, откуда выходят на дорогу, и всё междузабежное (ростер, найм, лавка — Двор) будет жить там же, а не внутри акта.

4. Возврат из забега пока ведёт в главное меню, а не во Двор. У заглушки одна кнопка, и цикл «двор → забег → двор» запер бы игрока во дворе без выхода. Развилка открыта: с появлением содержимого Двора возврат туда становится ожидаемым.

Правит доки: карточка Двора guild-courtyard (когда заглушка обрастёт содержимым), open-forks (возврат из забега).

2026-08-04 (1) — палитра «табак и патина»: интерфейс выходит из черноты, у действия свой цвет

Продолжение 2026-08-03/6. Разбор базы UI-референсов дал число, которое объяснило давнюю претензию «выглядит бедно»: вся структурная часть палитры сидела в коридоре шириной семнадцать градусов (ink h27–36, brass h34–40, parchment h38–44). Фон и акцент были разведены на шесть градусов — контрастировать было нечем, экран отличался только светлотой. Для сравнения: у Guildrun разнос 37°, у Slay the Spire 162°, у Age of Wonders 151°.

1. Гамма — «табак и патина»: тёплый сумрак, окисленная бирюза, латунь. Дословно: «Давай табак и берюза попробуем» (04.08.2026, сессия 8bc09118). Рампа ink остаётся тёплой (h32), но вынимается из черноты: самая тёмная ступень уходит с l=0.06 на 0.15, насыщенность падает с 0.30 до 0.18 — прежняя на светлой поверхности читалась грязью.

2. Причина светлеть — не вкус, а арт и глаза. Дословно: «у нас модельки персонажей будут в темные такими грязными лайнами» и «я также хочу НЕ уходить в даркововатый UI вообще. Я хочу сделать его наоборот приятным и теплым». Тёмный силуэт на почти чёрной панели теряет форму. Формулировка границы принадлежит Максу: «Мы берем гамму для темного UI (бережем глазки, хихи), но UI НЕ должен быть именно дарковым, dark fantasy».

3. У действия появился свой цвет, отдельный от ценности. Заведена рампа patina (h185) — окисленная латунь. Разделение ролей жёсткое: patina значит «сюда нажать» (primary-кнопка, наведение, фокус, выделение), brass значит «это ценно» (валюта, редкость, уровень, оправа избранного). Один цвет на две роли и был причиной, по которой подсветить действие было нечем, кроме светлоты.

4. Это ОТМЕНЯЕТ решение 2026-07-25 «primary остаётся тёмной». Тогда выбор стоял между тёмным полем с латунной подписью и латунной плашкой с тёмным текстом, и вторая читалась чужой — потому что латунь значила «ценно», и заливка ею выглядела инверсией. Теперь у действия свой цвет, и заливка перестала быть инверсией: бирюзовое поле не спорит с латунью, а противопоставлено ей по смыслу.

5. Копировать Guildrun целиком — отклонено. Дословно: «Мне очень нравятся цвета Guildrun? твой вариант D. Но… это слишком плагиат?» Их схема (аналоговая: акцент лежит рядом с фоном, разнос 37°) редкая и потому узнаваемая — прямое заимствование заметил бы любой, кто играл в жанрового соседа. Взята формула, а не цвета: тёмный фон, действие и ценность как две роли, градиент на кнопке, кайма ценности только у активной.

Грабли: цвета героев (flare, одиннадцать секторов круга) на роль акцента влияют, но проверить конфликт сейчас нельзя — Макс: «Цвета у нас пока ПРИМЕРНЫЕ. На них воообще опираться не надо». Проверка отложена, а не отменена: когда ростер получит финальные оттенки, акцент интерфейса надо сверить с ними, иначе кнопка станет неотличима от лечения.

Владелец правды: Assets/_Project/UI/Theme/tokens.primitives.uss (значения), tokens.semantic.uss (роли), тест PaletteSnapshotTests (снимок не разошёлся с USS).

2026-08-03 (6) — регистр «лист» отменён: панели становятся стеклом, идентичность уходит в цвет и свет

Пересмотр записи 2026-08-03/5, принятый в тот же день, при разборе базы UI-референсов (78 экранов из 30 игр).

1. Из двух регистров поверхностей остаётся один — стекло. Дословно: «Я соглашался с идеей “стол гильдмастера”, но, как я и сказал, понял, что мне больше нравится минималистичный стиль. TFT, Guildmaster (он вообще топ!)» (03.08.2026, сессия 8bc09118). Регистр лист — непрозрачный пергамент с фактурой в оправе — отменён; все панели строятся как полупрозрачное тёмное поле с тонкой каймой, как в TFT HUD и Guildrun Event Screen (кайма там даже не сплошная, а уголками). Тёмный фон и падение света к краям кадра сохраняются: они бесплатны и работают.

2. Причина — исполнимость в одиночку. Дословно: «Как говорил, я хочу что-то, что я смогу сделать сам, без дизайнера. И я вот думал о том, чтобы делать простой визуал, но усиливать его постобработкой (самая лучшая постобработка у Darkest Dungeon 2, кстати) и всякими партиклами, шейдерами и т.д.» Фактура пергамента требует либо художника, либо запекания текстур; стекло целиком описывается токенами. Метафора отменяется не потому, что плоха, а потому, что её носитель — материал — единственный элемент языка, который нельзя сделать кодом.

3. Постобработка становится отдельным треком и покрывает мир И интерфейс. UI рисуется через RenderTexture сразу, даже пока эффекты выключены: ретрофитить этот шов потом дорого, а завести его заранее — почти бесплатно.

4. Освободившееся место занимают три носителя идентичности, а не пустота. Метафора стола была ответом на «выглядит бедно»; тёмная панель с тонкой каймой сама по себе — дефолт инди-UI, которым отличаться нечем (так выглядит примерно половина собранных рефов). Взамен назначаются: цветовая температура (у Guildrun это золото-бирюза по тёмно-зелёному, узнаётся мгновенно), свет и постобработка, арт, выходящий за границу панели — приём из Guildrun Event Screen, где иллюстрация выезжает за край панели в игровое поле. Конкретные значения температуры назначаются после замера палитры по всей базе рефов.

Что от записи 2026-08-03/5 остаётся в силе: плашка-подложка под заголовок (п. 4 — это форма, а не фактура). Что падает вместе с листом: книга как предмет для справочных экранов (п. 2) — она была фактурой. Что переоткрывается: отказ от живого боя на фоне главного меню (п. 5) обосновывался доводом «на столе бой не идёт» — с отменой стола довод исчез, и развилка возвращается в открытые.

Правит доки: Vision - UI Visual Language (переписывается после замера палитры), open-forks, closed-forks.

2026-08-03 (5) — интерфейс изображает СТОЛ ГИЛЬДМАСТЕРА; книга — предмет на нём, а не рамка всего

Заход по внешнему виду UI, начавшийся с претензии к кнопкам и шрифту и упёршийся в вопрос, на который у дизайна не было ответа: что вообще изображает наш интерфейс? Проверка показала, что в ГДД слова «гроссбух», «пергамент», «латунь» не встречались ни разу — метафора жила только в комментариях к токенам USS, то есть у визуального языка интерфейса не было владельца и он держался на формулировках агента. Пять вердиктов.

1. Метафора интерфейса — стол гильдмастера. Дословно: «Утверждаем стол гильдмастера» (03.08.2026, сессия d2239d53) — в ответ на предложение: тёмный стол под лампой, на нём лежат вещи, и каждый экран получает физический смысл (лист бумаги, разложенные карты, разворот книги, развёрнутый пергамент). Причина завести метафору вообще: без неё любая фактура читается «текстурой непонятно чего», и подбор шума заменяет рисование предмета.

2. Книга — для справочных экранов, а не рамка всего интерфейса. Дословно: «Мб сделаем как книгу?» Ответ дизайна: разворот навязывает две страницы; на статистике, компендиуме и книге гильдии контент парный и книга работает буквально, а настройки, пауза и меню одноколоночные — там правая страница осталась бы пустой. Принято в редакции «книга — один из предметов на столе».

3. Регистры поверхностей разведены по признаку «есть ли под панелью живой мир». Лист (непрозрачный пергамент в оправе) — там, где мира нет: главное меню, создание игры, настройки. Стекло (полупрозрачное тёмное поле) — там, где мир есть: пауза поверх боя, где бой обязан читаться. Признак физический, а не вкусовой, поэтому спор «стекло или пергамент» больше не возникает.

4. Заголовку положена плашка-подложка. Дословно: «У подписи не хватает какой-то плашки за ней». Заголовок, висящий в воздухе, читается текстом; на плашке — предметом (реф — Across the Obelisk, где «Settings» сидит на деревянной табличке).

5. Живой бой на фоне главного меню — ОТКЛОНЁН. Предлагалось: «Также мб нам поменять главный экран? Сделать предзаписи битв как в Factorio, чтобы на заднем плане шел бой (приглушенный чуть темным цветом, будто как при ESC)». Отклонено самим автором после утверждения метафоры: «Если у нас стол гильдмастера, оно нам надо? хихи. Пока запишем и забудем?» На столе бой не идёт — сцена под лампой и живая арена за ней были бы двумя языками на одном экране. Разбор варианта (включая довод Factorio FFF #362 «живая симуляция, а не запись, потому что запись стареет») — в closed-forks.

Правит доки: Vision - UI Visual Language (заведён этой записью), closed-forks.

2026-08-03 (5) — профиль это слот с номером; идентичность игрока живёт в нём

Решение Макса: «У профиля (у нас их может быть несколько) надо не ник, а просто Profile 1, Profile 2, т.е. просто номер и все. И все сейвы и настройки в нем. Т.е. при старте - просто требует создать профиль в одном из нескольких слотов (см все про это в документации), потом автоматически заходим через созданный слой. В “Профиле” можно выбрать профиль, создать новый, удалить старый. Есть настройки отдельно с курсором, с ником (варианты “брать со стим” или “перезаписать” (т.е. можно ввести желаемый для игры ник сюда и выбрать это), с цветом. Кнопка “сохранить”.» (03.08.2026).

Что это меняет:

  1. У профиля нет имени — только номер слота. Именуемая сущность у игрока одна, и это дом: он же слот сохранения. Второе имя рядом заставляло бы придумывать название тому, что различают по счёту.
  2. Игра не заводит профиль за игрока. Нет ни одного — первое, что он видит, это выбор слота; дальше вход автоматический, без лишнего экрана.
  3. Идентичность — ник, мейн-цвет, курсор — принадлежит профилю. Ник переключателем «из Steam / свой»: по умолчанию берётся из Steam, вторым вариантом игрок вводит желаемый.

Граница, которую пришлось провести отдельно. ТЗ сейвов говорит «настройки не входят в профиль», и это остаётся верным для настроек КЛИЕНТА: громкость и разрешение принадлежат машине и не должны прыгать при смене слота. Ник, цвет и курсор — не настройки, а ответ на вопрос «кем я играю», и они обязаны меняться вместе с профилем. Признак границы — не слово «настройка», а «принадлежит машине или игроку».

Цвет остаётся уникальным в сессии. Выбор в профиле — пожелание: его могли занять раньше. Конфликт разводит хост, опоздавшему достаётся ближайший свободный цвет; отказывать во входе из-за совпадения вкусов мы не будем.

Правит доки: Planning - Save System (§UX входа — развилка закрыта), Coop - Presence & Cursors (мейн-цвет выбирается в профиле).

2026-08-03 (4) — уголь один на всех; Очаг греет своих, стойкость гасит угли

Разбор Хранителя очага по ходу балансного захода. Четыре вердикта.

1. «Углей» ровно один вид. Дословно: «нет никакого “живого угля”. Это тот же уголь, негативный эффект, единый цельный уголь, в этом и суть!» (03.08.2026, сессия 87bf8fd2). Эффект-близнец для союзников (effect.warm_ash) отменён и удалён: на союзнике уголь — та же уязвимость к огню, что и на враге. Пользу из углей на своих извлекает сам Хранитель, пассивкой: знание «угли можно обратить в закалку» принадлежит тому, кто делится огнём, а не огню. Иначе эффект пришлось бы учить различать стороны, и любой второй огненный кит молча раздавал бы стойкость.

2. Что даёт пассивка. Дословно: «-1% длительность дебаффов за стак (до 50%) это основное. Т.е хил даже 1 за стак в сек. Основное - сопротивление дебаффам». Итог: за каждый стак «Углей» на союзнике — −1% длительности входящих дебаффов (потолок −50%) и 1 HP/сек лечения, считается до 50 стаков («Лимит не не более 50 стаков для хила»). Действует на всех живых союзников на поле.

3. Свои горят — это цена, а не побочка. На вопрос, задумано ли, что против огненных врагов угли на союзниках опасны: «Да, задумано». Конструкция держится на том, что бесплатной закалки не бывает.

4. Стойкость сжимает окно жизни «Углей» — и всех дебаффов такого рода. Дословно: «Да, и всех таких дебаффов в т.ч.!» Речь про эффекты, живущие собственным таймером схода вместо общей длительности («Угли», «Изморозь»): стойкость к дебаффам масштабирует именно это окно. Побочный смысл, названный Максом с самого начала: закалённый углями союзник быстрее их стряхивает, то есть сам себя ограничивает в дальнейшей закалке.

Тем же ходом доделан долг карточки burn: тег Мокрый ускоряет сход «Углей» ×2 — правило было описано с 2026-07-26, но в движке отсутствовало, как и само состояние. Мочат автоатаки водного монаха (4 секунды, по решению 2026-07-2х «пусть мокрый накладывает активки и пассивка монаха на 4 сек»).

Правит доки: The Hearth, Burn, Frost.

2026-08-03 (3) — скоуп меты демо; три новые оси открытий; живой баланс уходит под мету

Сессия про мета-прогрессию: что именно копится между забегами и в каком темпе открывается к концу демо. Шесть вердиктов Макса за один ход.

1. Скоуп меты в демо. Дословно: «В мете демки должно быть 2-3 капитана и 3 crew у каждого» (03.08.2026, сессия a4710a44). Плюс: «в демо будет до 3-4 возвышений». Отсюда объём открытий по осям Капитана — 2 Капитана сверх стартового и до 6 Экипажей сверх первых.

2. Демо длиннее одного забега. Из предложенных границ демо выбран вариант «акт плюс гарантированный второй забег другим Капитаном»: демо показывает мету, а мета внутри одного забега невидима по определению. С учётом 3–4 возвышений реальная длина — порядка пяти-шести завершённых забегов.

3. Ширина пула Реликвий становится осью меты. Дословно: «Ширина пула берем, потом обсудим». Часть Реликвий закрыта и открывается игрой; драфт растёт в ширину, не в силу — запрет «мета не поднимает мощь» (2026-07-15/31) не задет. Числа (сколько открыто на старте, чем открывается) отложены осознанно.

4. Особые места карты становятся осью меты. Дословно: «Особые места берем». Банк особых мест (act-map-regions §Особые места) перестаёт быть россыпью идей и получает работу: карта богатеет по месту за веху, а не включается целиком. Ложится рядом с уже принятым «Подземелья и Великий путь открываются в мете» (2026-08-02).

5. Информация на экранах становится осью меты. Дословно: «Информацию на экранах - берем». Ориентир сложности узла, состав врага в тултипе, счётчики — не даны сразу, а открываются. Новичка не заваливает панелью, ветеран получает приборы; ось работает на столп «скилл в подготовке». Требование к соседям: Приказы Мистика (Картограф, Провидец) обязаны давать больше, чем открытый дефолт, иначе мета обесценит фичу Капитана.

6. Живой баланс прячется под мету гильдии. Дословно: «Живой баланс (которые меняется, добавляет модификаторы и тп) - скрываем его тоже под метой гильдии. Мб после прохождение Возвышения 1». «Движущаяся мета» (принята 2026-07-15/72, форма — модификаторы забега в духе Pact of Punishment) перестаёт быть отложенной абстракцией и получает место входа: ориентир — открытие после Возвышения 1. То есть первый забег её не видит вовсе.

7. Мини-игры-арбитры — это косметика, и мелочь Гильдмастера их покупает законно. Дословно: «Некоторые мини-игры у нас - это та же косметика, хихи. Просто небольшие вариации в пул. Именно мини-игры для споров и тп». Возражение скрайба снято как основанное на подмене: я читала «мини-игры» как редкие события забега (Coop - Minigames & Roles) и защищала правило «мелочь покупает только косметику». Речь шла про пул арбитров (Coop - Arbiters) — ритуалы разрешения спора, где скины кубиков за достижения уже приняты (2026-07-29). Вариация ритуала силы не даёт и никем, кроме спорщиков, не оплачивается — правило целое.

Граница, которую вердикт проводит и которую легко потерять: арбитр — косметика (мелочь), мини-игра-событие забега — контент (веха). Слово одно, каналы разные.

Заявка на экран меты (proposed, вердикта нет). Дословно: «Я хочу чтобы мета виделась красиво и на своем экране. Мб как в Minecraft достижения, мб как в POE улучшения скиллов, показывающие что кого открывает». Рекомендация скрайба — язык достижений Minecraft (корень, ветки, видимая зависимость «что кого отпирает»), а не дерева PoE: узел PoE стоит очко из конечного запаса, поэтому дерево обещает «или-или», а наша мета не отнимает — взяв одно, игрок не теряет другое. Три канала оплаты (валюта гильдии · веха · мелочь) различаются рамкой узла, по образцу task/goal/challenge. Открытая сложность: домовые покупки принадлежат конкретному дому, а вехи — профилю навсегда, значит единый экран обязан подписывать домовую ветку именем активного дома, иначе соврёт при заведении второй гильдии.

8. Стартовая выдача демо: два Капитана из трёх, третий закрыт. Дословно: «Сначала открыто 2 капитана из 3». Прежнее предположение скрайба (один Капитан на старте, второй за первый забег) отменено: первый забег даёт выбор, а не одну дверь. Следствие для показа — Капитаны I и II растут от корня двумя независимыми ветками; нарисовать второго потомком первого значило бы показать зависимость, которой нет.

9. Экипажи открываются игрой за своего Капитана, и условия названы. Дословно: «3 crew у каждого, 2 открывается за 1 игру за капитана, 3 открывается за победу в демо». Правило FTL («Layout B за достижение на корабле A») получает конкретные пороги: №2 — один забег этим Капитаном, №3 — победа. Открытым осталось, считается ли победа именно этим Капитаном (предложение скрайба) или любая.

10. Мега-уники Реликвий скрыты, а не закрыты. Дословно: «Скрыты пока мега наши уники, что в планах. Совершенство, стиллер заклианий и тд». Заводит четвёртое состояние узла: закрытый показывает силуэт и условие, скрытый не показывает даже места на экране. Правило «закрытое видно с условием» существует ради витрины, но для сюрприза оно вредно — силуэт тратит встречу заранее. Состав класса и условия открытия — позже, вердикта нет.

11. Экран меты живёт в хабе, и слово канон-термин. Дословно: «Экран меты в хабе, называй это именно “хабом”, плз». Термин закреплён за пространством между забегами; «двор гильдии» остаётся именем формы хаба (guild-courtyard), но в разговоре и подаче зовём хабом.

Правит доки: план и расписание открытий — docs/meta-progression-progress.md (временный), раздел Лаборатории «Мета → Открытия и созвездия» (docs/lab/src/sections/meta-unlocks.ts), канон-дома — guild-development, Vision - Guildmaster & Captain, act-map-regions.

2026-08-03 (2) — курсор виден только своей стороне; «кто за кого играет» получает владельца

Решение Макса: «Курсор надо видеть лишь у членов своей команды. Надо завести нормальный источник правды кто какой команды, если еще нет, и использовтаь его в текущем пвп и в курсорах» (03.08.2026, сессия b307a49b). Вторым вердиктом того же хода курсоры в бою остаются видны, но приглушены — правило «курсор гаснет в бою» (Coop - Presence & Cursors §Правила слоя, п. 5) отменяется.

Что меняется в присутствии:

  1. «Курсор виден остальным ВСЕГДА» получает исключение: всегда — в пределах своей стороны. В кампании сторона одна, и правило там незаметно; в PvP чужой курсор не виден вовсе.
  2. Наведение и «взятое в руку» едут тем же пакетом, значит скрываются вместе с курсором. Отдельного правила для них не нужно, и заводить его нельзя: два правила про одно разошлись бы.
  3. Курсор в бою виден полупрозрачным и без подписи. Прежний запрет опирался на боевые инструменты (миниигры), которых нет и не скоро; а бой — как раз момент, когда все смотрят вместе, и знание «напарник тут, а не отошёл» дороже чистоты арены. К вопросу вернёмся, когда инструменты появятся.

Почему решение шире курсоров. «Моя команда» в коде — литеральный ноль в четырёх местах расстановки. Пока за игру садится один человек, ноль верен по совпадению; при двух живых игроках в PvP обе стороны считают себя командой 0 и распоряжаются одним и тем же строем. То есть источника правды «кто за кого играет» у нас не было вовсе, а PvP вдвоём сломан ещё до курсоров.

Скрытие делается на отправке, а не на отрисовке. Не показать пришедший чужой курсор — вежливая просьба: байты уже в памяти клиента противника. Пакет присутствия склеивает хост, там же он и режется по сторонам. В кампании сторона одна, пакет один, цена нулевая.

Дом стороны — сеанс, а не мероприятие (уточнено в тот же день при сверке с кодом). Первая прикидка отдавала стороны мероприятию — «сторон нет в хабе, значит они его свойство», — но шов «за какую команду играет этот клиент» уже существовал (ILocalPlayer) и жил в корне, а режим выбирается на входе в игру и внутри сеанса не меняется. Мероприятие оставило себе один вопрос, на который отвечает только оно: сколько у площадки сторон.

Правит доки: Coop - Presence & Cursors.

2026-08-03 — одинаковые спрайт и цвет допустимы: тинт стал возможностью, а не обязанностью

Решение Макса: «Нет, забей, можно иметь одинаковые спрайты и цвет. Это не страшно, хихи» (03.08.2026). Отменяет правило от 30.07.2026, по которому юниты, делящие один спрайт, обязаны различаться ступенью приглушения, а ровно один из группы показывает арт как есть.

Чем правило было плохо на практике. Ступеней приглушения четыре (None, Ash, Verdant, Tan), а один только лист гоблина делят ШЕСТЬ юнитов — BanditAssassin, GoblinCommander, GoblinCutthroat, GoblinGrunt, GoblinWarrior, GoblinWolfrider. Шесть попарных различий из четырёх значений не собираются: правило требовало невозможного, и единственным способом «выполнить» его была подгонка значений под зелёный тест.

Что осталось в силе. Тинт по-прежнему УМНОЖАЕТСЯ на арт (осветлить им нельзя), ступени по-прежнему названы в палитре. И только. Снят и запрет красить одиночку — юнита, чей арт ни с кем не делится: это выбор автора контента, а не дело теста.

Следствие в коде: из UnitTintPolicyTests убраны SharedArt_KeepsExactlyOneUnshadedOriginal, SharedArt_ShadesDifferFromEachOther и OwnArt_IsNeverShaded; на их месте оставлено объяснение, чтобы правило не завели обратно по памяти. Тех-запись — 2026-08-03-six-goblins-and-four-shades.

2026-08-02 (2) — пол арены: плита в пустоте, язык сторибука, край говорит «сделано»

Заход открыт Максом от процедурной генерации вообще: «Я понял, что оба недооценивали процедурную генерацию для текстур или еще каких-то нужны». Разбор проекта вывел на пол арены — самый большой кусок экрана в бою, помеченный в сцене как Arena Ground (Temp).

2026-08-02/40 — арена ВИСИТ В ПУСТОТЕ и не притворяется местностью. Дословно: «хочется сохранить вид, что у нас этакая арена летает “где-то” над пустатой. Чтобы игра прямо говорила “хей, это просто боевая арена, вот поэтому мы показываем анимацию создания и тп”». Следствие: под плитой не земля, а пустота; борт виден фронтально снизу; окружения вокруг арены нет и не рисуется. Анимация создания из ArenaSwapShape перестаёт быть эффектом на входе и становится объяснением того, что видно весь бой.

2026-08-02/41 — плита строгий прямоугольник, борт 1 мировая единица. Прямоугольник совпадает с боевым полем один в один, поэтому площадь не теряется. Толщина выбрана Максом после сравнения на стенде: 0.4 ед читалось пластиной, 1.5 — островом («тянет обратно в кусок мира»).

2026-08-02/42 — край плиты несёт ЦИФРУ. Решение Макса: «верни в пластине тонкий вариант с эффеком digital». Край — единственное место, где игра весь бой говорит, что арена сделана. Разметка идёт шагом в мировую единицу, поэтому край работает ещё и линейкой масштаба. Открыто: канон цифровой подмены говорит, что цифра — язык ПЕРЕХОДА, а не состояния. Либо край получает исключение, либо формулировку правила надо менять.

2026-08-02/43 — язык арены: тёмный цветной контур, приглушённая природная гамма, скупая плотность с пустым центром. Все четыре выбраны Максом по стенду. Контур не чёрный, потому что чёрный душит цветной свет боя. Гамма приглушена, чтобы арена не спорила с латунно-пергаментным интерфейсом. Центр пуст, потому что там дерутся: деталь в центре отнимает читаемость у юнитов и телеграфов.

2026-08-02/44 — пиксель-арт не распространяется на окружение. Макс: «зачем нам вообще пиксель арт? Мы же от него уходим. В эом и суть, у нас процедурка есть!!!» Решение 2026-08-01/14 отменяло пиксель для персонажей; теперь то же верно для арены. Практическое следствие важнее эстетического: в пикселе фактуру делает ручная работа, и процедура там соревнуется с художником, а в сторибуке стиль состоит из формы, контура и света — и всё три считаются.

2026-08-02/45 — плоскость обязана быть живописной, а не залитой. Претензия Макса к первому подходу: «выглядит слишком… подетски? Непонятные фигуры, что это вообще?». Разбор по референсам, на которые опирался Wildermyth (фоны Samurai Jack, Cartoon Saloon, старый концепт-арт Disney), дал четыре правила, и ни одно не про «плоско»: у земли нет обводки (границу держит контраст тона), форма обязана читаться объектом (тропа — лента вдоль движения, порода — углы группами), поверх заливки лежит зерно, свет направленный, с прижатыми тенями.


2026-08-02 — карта делится на ОБЛАСТИ: форма занимает площадь, зоны режут её поперёк

Заход открыт Максом как «система зон» (биомы). Разговор начался с высоты узлов и плотности, а свернул в другую систему: карта перестаёт быть профилем ширины по этажам и становится местностью из областей. Дословно: «Форма участка - это как фракция. Может занять собой не ширину и длину, а именно что определенную область, площадь, как и фракция.»

2026-08-02/1 — область это площадь со своей топологией, а не режим ширины этажа. Пример, которым Макс это объяснил: «остров - отдельная от всех зона, к которой ведет лишь 1 путь и лишь 1 выход». Отсюда карта собирается двумя уровнями: макро — раскладка областей по этажам и полосам, микро — раскрытие каждой области своим генератором.

2026-08-02/2 — длина у всех маршрутов ОДНА, ширина свободна кроме вех. Дословно: «ширина как раз прикольно, если вообще будет какая угодно (до приличных ограничений), кроме как на определенных вехах. А длина для все ходинаковая.» Следствие, важное для всех форм: форма меняет связность и группировку, но не длину пути. Подземелье занимает те же этажи, что параллельная дорога, — иначе «шаг = этаж» врёт и счётчик до босса теряет смысл.

2026-08-02/3 — зона это КАРМАН, и она лежит поперёк ритма. Не пояс этажей во всю ширину: пояс нельзя обойти, а значит выбора «через кого идти» он не даёт. Дословно про пересечение с областями: «биом может лежать поперек ритма, в этом и суть! хихи». Граница зоны намеренно не совпадает с границей области — это и отличает карту от оглавления.

2026-08-02/4 — модификаторы зоны бьют по врагам «и мб не только». Дословно: «не важно по кому бьет. Давай так - он накладывает модификаторы на врагов и мб не только.» В данных это список модификаторов с областью применения (враги / все / отряд), дефолт — враги.

2026-08-02/5 — тропа шириной два. Единица отняла бы выбор целиком и остаётся привилегией застав-якорей.

2026-08-02/6 — база форм: поле, остров, тропа. «Поле, отсров - ок, база», «Тропа - гуд». Остальные девять форм расписаны и ждут вердикта.

2026-08-02/7 — «мост» отклонён. Дословно: «Мост - это вариация тропы, зачем?» Связку между областями делает короткая тропа; отдельной сущности не заводим.

2026-08-02/8 — тропа шириной ОДИН, длиной от одного узла до четырёх; мост — её частный случай. Дословно: «тропа - ширина именно 1. От 1 ноды внутри, до 4. Мост - частный случай этого.» Отменяет мою двойку из /5: обязательный проход внутри тропы допустим потому, что выбор живёт МЕЖДУ областями, а не внутри одной.

2026-08-02/9 — архипелаг отклонён как форма. Связность у него та же, что у поля, отличается только расстановка — значит это опция раскладки («гроздья»), а не форма. Ушёл по той же причине, по какой ушёл мост: «Архипелаг вообще не понял, сомнительно». Гребёнка, рукава и сход одобрены («ок»), лестница и логово помечены как интересные — но не финал.

2026-08-02/10 — формы делятся по редкости, редкие работают как чудеса света. Дословно: «поле, остров и тропа - самые частые. Другие - редкие или очень редкие. Это как “чудеса света”, хихи.» Отсюда моя оговорка, принятая как правило: гарантия важнее веса — на акт кладётся одно гарантированное редкое место, иначе «редко» на практике означает «никогда».

2026-08-02/11 — у области есть карточка при наведении: имя, образ, суть. Дословно: «Желательно чтобы игрок смог навестить на карте и на форму области, а не только на фракцию, чтобы почитать чет нарративное и суть.» Следствие для данных: форма становится контентом (имя, лок-ключи, лор, вес редкости в SO), а не только правилом генерации.

2026-08-02/12 — подземелье остаётся отдельной сущностью и имеет список вариантов. Вопрос Макса: «Но где тут мое “подземелье”? Где идеи из разряда его? Где варианты для “подземелья”?» — моё растворение его в «свойстве сокрытая» отменено. Подземелье — вставка: не форма и не свойство, а готовый авторский подграф. Первые пять вариантов (Клетка, Сетка 3×3, Ступени, Гнездо, Склеп) и банк чудес — в карточке карты.

2026-08-02/13 — гребёнка, рукава, сход, лестница и логово приняты. «почему пишет что гребенка, рукава и сход с лестницей и логовом ждут вердикат, если я одобрил?» — статусы на стенде и в карточке исправлены на принятые. Открытым остаётся только имя лестницы (коллизия с алгоритмом «монотонная лестница» в коде): Осыпь / Каскад / Спуск.

2026-08-02/14 — редкая форма И ЕСТЬ чудо света; отдельной категории не нужно. Дословно: «я описывал твои варианты (например лестинца), что с позиции карты, такой рельеф - это чудо мира, хихи». Отсюда следствие для имён: форма — это рельеф, и зваться она должна ландшафтно (Осыпь, Гребень, Перевал, Долина). Уникальные места со своим игровым правилом (Обелиск, Караван-сарай) — отдельный банк «особых мест», не рельеф.

Предложено мной по подземельям, вердикта нет (proposed): внутри подземелья работает тот же словарь форм, только в миниатюре и без права выйти — грамматика «дверь → одна-две внутренние области → сердце» (Ход, Зал, Развилка, Спуск, Кладовая, Сердце); ещё семь вариантов самих подземелий (Улей, Тюремный блок, Хранилище, Алтарь, Лабиринт, Штольня, Сокрытое логово).

2026-08-02/15 — структура подземелья фиксированная: вход → веха → веха → выход. Дословно: «Длина подземелья статичная - вход, 2 вехи. выход». Мои варианты на три этажа (Сетка 3×3, Ступени) под неё не влезают, Клетка и Гнездо поглощены сценариями ниже.

2026-08-02/16 — подземелье это разновидность ивента. Дословно: «Можно сказать, что все подземелье - это этакая разновидность ивента. В начале часто - ивент, потом - сложное испытание». Первая веха настраивает вторую — связка, которой у нас нет нигде: сейчас текстовое событие и бой друг о друге не знают. Плюс: «Берем не только плохое. но иногда и хорошее.»

2026-08-02/17 — вход в подземелье охраняет привратник, и он берёт плату. Дословно: «Странный старик на входе подземелья. Говорит что ожидает, но требует плату. Т.е. игрокам не обязательно прыгать в пустоты, но придется норм заплатить.»

2026-08-02/18 — четыре сценария подземелий назначены. Могучий враг, Вражда, Выживание, Спасение — записаны в карточку карты его формулировками, вместе с числами (2/3/4 волны по сложности, ×1.5 за бой против двух фракций). Каждый требует от движка того, чего сейчас нет: волны с сохранением позиций и HP, переэкипировка между волнами, таймер как условие, временные Сосуды, подкрепление по условию, спавн с нескольких сторон. Список требований — там же.

2026-08-02/19 — идеи ищем в ДОРОГАХ, а не в узлах. Дословно: «я именно идеи про ПУТИ. Понимаешь? Про выбор путя. Именно с этой частью надо и придумывать.» Ребро карты сейчас не несёт ничего, хотя выбор игрок делает именно на нём. Банк из двенадцати дорог (тракт и тропа, привратник, заслон, вслепую, режущая, тайная, пограничная, под наблюдением, обоз, встреча в пути, клятва на распутье, тесная кооп-дорога) — в карточке карты; правило подачи: свойство дороги читается ЛИНИЕЙ, не значком.

2026-08-02/20 — слои карты открываются постепенно. Фракции зон — сразу, с нулевого возвышения; фракции + модификаторы — с первого; подземелья и великий путь — в мете. Причина названа прямо: «Карта получается очень интересно, но сложно». Подземелья при этом объявлены опциональными допами: «пути на них генерятся ДОПОЛНИТЕЛЬНО откуда угодно… даже могут появиться не смотря на генержку как ответления на тропе».

2026-08-02/21 — великий путь: сквозная линия через акт с тремя ступенями наград. Дословно: «Grand Line - это случайный путь от начала и до конца. Идя по нему - даем небольшие бонусы, что можно учитывать в стратегии.» Ступени: около четырёх узлов по линии (костёр в талии не в счёт) — реликвия как за обычного противника; около половины — предмет один из трёх; путь целиком — реликвия как за элиту. Открывается в мете, «чтобы не переусложнять в начале»; награды пока намеренно негромкие.

2026-08-02/22 — линия случайна, и заложничество и есть её цена. Дословно: «линия идет как угодно. Рандом. Ты не можешь уйти куда надо, ты становишься её заложником. Это уже и есть наказание.» Моё предложение вести её через опасные узлы отклонено — плата уже встроена: следуя линии, отряд теряет право идти туда, куда ему нужно. Там же принято: ступени 1 и 2 считаются суммарно, третья — весь путь целиком. Осталось proposed: в коопе линия одна на партию.

2026-08-02/23 — подземелье длину маршрута НЕ меняет. Дословно: «подземелье работает в духе “видишь вход, видишь выход, но не то, что внутри”. Т.е. длина НЕ изменяется.» Ветка занимает те же этажи, что обычная дорога рядом: вход на этаже N, выход на N+3. Правило «длина у всех одна» целое, исключений не заводим.

2026-08-02/24 — подземелье отделено от карты, фракции сверху на него не влияют. Дословно: «подземелье вообще отделенно от всего. То, что в подземелье - это в подземелье, фракции сверху на подземелье НЕ влияют. Выглядит будто “дырка в бездонную бездну”.» Механически: модификаторы зоны внутрь не заходят, пул врагов у подземелья свой. В показе: пятно зоны и знаки рельефа обрываются на кромке, дверь бесцветна (иначе фракция была бы известна до входа), дыра — чернота с медленно дышащей кромкой, единственная метка на краю — привратник.

2026-08-02/25 — у знаков рельефа свой тумблер map.relief. «рельефам нужен тумблер, да». Это тот слой, который может оказаться шумом, и проверяется он переключателем, а не спором.

2026-08-02/26 — реализованное показывается карточками, а не списком. «То что уже есть в игре - вообще не представлено в виде карточек. Это о плохо, поправь!» — семь эффектов карты (лист, стол, шторка, моргание, волна дорожек, туман, поездка фишки) нарисованы в Лаборатории живьём, на настоящем такте. Правило стенда «раздел показывает ПРИНЯТОЕ» нарушалось им же: принятое лежало таблицей, и посмотреть его было негде.

2026-08-02/27 — первый акт это Далёкий Тракт. Дословно: «1 акт - это Далекий Тракт. Поэтому тут есть разбойники, что нападают на путников. Есть армия какого-то королевства и много гоблинов. Закон тут когда то был, но щас все в хаосе, пусть это и остается местом где проходит торговля, поэтому тут и нужны очень сильно различные наемники и гильдии.» Три силы акта — разбойники, армия королевства, гоблины — и есть его фракции-пулы; «закон был и кончился» даёт первую тихую ноту ключа «хаос против порядка», работающую без раскрытия. Записано в Narrative - Lore.

2026-08-02/28 — карта не архипелаг: области различаются покровом, а не водой. Дословно: «это не то, чтобы реально острова… Да, могут быть моря. Могут быть гигатские мосты через них (наши тропы) или чере леса. Но да, это не сеть остовов.» Море и пропасть — редкий приём, и тогда через них перекинут гигантский мост, который и есть тропа. Слово «остров» было названием ТОПОЛОГИИ и сбивало обоих: предложено переименовать форму в Урочище (Enclave), альтернативы — Котловина, Затвор, Чаща, Глухомань. Вердикта нет.

2026-08-02/29 — атласная модель принята как вектор подачи: рельеф показан самой землёй, фракция — страной на ней. Прототип живьём — раздел «Карта → Земля и страна» в Лаборатории. Пайплайн генерации (Вороной + Ллойд → склейка ячеек области → сглаживание Чайкина → фрактальное смещение → печать в RT) и приёмы бумажной картографии (ореол, тень по юго-восточной кромке, отмывка от северо-запада, штриховка Лемана, подписи курсивом и капителью, пунктир границ) записаны в Gamefeel - Map Presentation. Найдено рендером, а не рассуждением: отмывка на полной силе превращает землю в мятую фольгу (поле резко ломается вдоль медиальной оси), а ореол градиентной полосой в воде не виден вовсе — нужны чёткие линии.

2026-08-02/30 — форма «один вход, один выход» зовётся Чащей (Thicket). Выбор Макса из шести кандидатов (Урочище, Котловина, Затвор, Чаща, Глухомань, Анклав). Заодно снимается морская коннотация «острова», которая тянула за собой архипелаг.

Идея Макса про летающие острова (proposed, вердикта нет): «Берем базовые летающие острова. Каждый тип местности - свой остров все-таки… Между ними - натуральная пустота, мосты и т.д. Карта становится в 2 уровня… это 3д карта островов на столе!» Плюс он же назвал слабое место: «999 мостов - будет не дело».

Моя оценка (proposed), трижды с возражением: (1) идея действительно чинит настоящую болезнь — пробел между областями получает физический смысл, которого у пустого места на сплошной земле нет; (2) но «остров на каждую область» возвращает архипелаг, отменённый решением /28 часом раньше, и даёт 15–20 мостов при восьми областях — «гигантский мост» перестаёт быть событием; (3) и конфликтует с трактом как ТОРГОВОЙ ДОРОГОЙ: по мостам караван идёт ниткой, засаду в чаще ставить негде, а разбойники акта живут именно засадами. Это решение про сеттинг, а не про подачу.

Рекомендация: остров = крупная плита акта (3–4 на акт), внутри плиты области различаются покровом; мостов тогда два-три и каждый событие. Полноценный небесный архипелаг — облик ДРУГОГО акта: разный силуэт актов сам по себе сильный приём для рогалика. Цена низа острова невелика, пока камера строго сверху (контур вытягивается вниз с сужением и шумом, водопад — шейдером по кромке); дорожает она на наклоне камеры, перекрытиях и взаимных тенях.

2026-08-02/31 — местность не рисуем; территориальный слой один — зона влияния. Дословно: «Местность мы пока что никак НЕ рисуем. Может это и не надо. Остаемся на карте. Просто делим и рисуем зоны влияния. Остаемся на Дальнем Тракте.» Рельеф остаётся МЕХАНИКОЙ (форма области решает, как ходят дороги), но своей картинки не получает — его видно по рисунку графа. Атласная земля, знаки рельефа и летающие острова помечены отложено, требует доработки: материал не выбрасываем, он пригодится для облика второго акта.

Найдено рендером (продолжение): кромку зоны нельзя обводить по каждому кругу метабола — внутренние дуги остаются видны, и территория читается как гроздь пузырей. Кромка берётся как заливка минус её же сжатая копия. Дизеринг зоны на плотности 55% ядовит, рабочее значение — 30%.

2026-08-02/32 — карта это остров, поделённый зонами без остатка. Дословно: «лучше как раз на основе зон влияний создавать этакий “остров”, по которому идем. Как на скрине “Берег, ореол, тень, отмывка”. И все эти эффекты забираем», «у нас карте на просто прямоугольник. а такой вот рандомный отсров», «нет, ничейной земли НЕТУ». Отсюда: форма острова выводится из зон влияния, берег получает атласные приёмы, отложенный прототип «Земля и страна» частично возвращается — но применённый к карте целиком, а не к каждой области.

2026-08-02/33 — рваность границ сильная, «мне нравится такая дикая рванность».

2026-08-02/34 — из подписей только имя, и оно целиком внутри своей зоны. Дословно: «Только имя, и имя расположено так, чтобы помещаться в свою зону. Не обязательно центрально, но так, чтобы НЕ перекрывала ноды и пути… Имя (шрифт) быть разных размеров в зависимости от размера фракции.» Печати и эмблемы, предложенные мной по рефу Spire Biomes, отклонены.

2026-08-02/35 — цвет из пресетов фракции. «Скорее мы имеем около 10 пресетов на фракцию. Схожие цвета (например гоблины - всегда зеленые), но отличающиеся. Берем на рандом цвета оттуда без повторений.»

2026-08-02/36 — переход между зонами это база, а не событие. «Никакого вспыхивания пока» — вспышка кромки при входе, предложенная мной, отклонена.

Найдено рендером: узкая изрезанная зона может не вместить имя ни на каком кегле — генерации придётся гарантировать зонам минимальную «пухлость» либо разрешать подписи ложиться поверх дорог. Разброс светлоты в пресетах должен быть узким, иначе оттенок выцветает до бежевого и фракция перестаёт читаться.

2026-08-02/37 — имя зоны идёт вдоль её оси. «Имя идет вдоль оси - круто, сделаем».

2026-08-02/38 — лист под островом остаётся прямоугольным. «у нас под островом “карта”. Наверное тот же прямоугольник. А наш остров читаеся как остров благодаря береговой линии и т.д.»

2026-08-02/39 — раскладке нужен воздух: больше шаг между узлами и пробел между областями. Дословно: «У нас должен быть намного больший сейс по высоте между точками. И по ширине между ними. И опять, ты не добавила пробел между разными рельефами. Они должны читаться отдельно.» Пробел между областями — это и есть показ рельефа: отдельной картинки ему не нужно.

Найдено рендером акта в НАСТОЯЩИХ пропорциях: на тесной сетке пять имён из шести не находят места, потому что дороги режут территорию на ленты; веер рёбер из узкой колонки усугубляет это и повторяет болезнь, которую лечили в D7. Отсюда предложение (proposed) ограничить число исходов из узла двумя-тремя.

Отрисовка отложена («запиши все в гдд, отрисуем потом») — накопленные требования записаны в подачу карты и карточку карты.

Замысел подземелий (его же, реализация открыта). «опциональные проходы - подземелья, что появляются с середины 1-ого акта… Пока не зайдешь - не узнаешь что за фракция и какие эффекты (а там сразу несколько усложняющих эффектов), зато узнаешь какая награда за прохождение ДО входа.» Про цену сложности сказано прямо: «Я знаю, что сильно усложяню карту, но мне кажется это очень интересный слой планирования и глубины.»

Предложено мной, вердикта нет (proposed): область = форма × свойства (сокрытая, туманная, гнилая, спорная, ничейная, владение, тихая) — тогда подземелье это остров со свойством «сокрытая», а не отдельная сущность; подземелье собирается авторским подграфом из SO; пятно зоны — атмосфера, а принадлежность носит ободок на узле; никакая область кроме заставы не занимает всю ширину акта.

Правит доки: новый Run - Act Map: Regions & Zones (модель, таблицы форм и свойств, инварианты, открытые развилки); живые схемы — раздел «Карта → Формы областей» в Лаборатории; ход захода — docs/map-zones-progress.md.


2026-08-01 (8) — персонажи уходят от пикселя в плоский сторибук; голова — якорь, тело носит Реликвия

Контекст. Макс поднял смену визуального стиля персонажей: пиксель-арт «не к селу» рядом с гладкими светящимися боевыми эффектами. Разведка проекта + ресёрч референсов, техники рисунка для любителя и модульных лиц (эта сессия) → три решения. Реализации нет — это направление.

2026-08-01/14 — арт персонажей уходит от пиксель-арта в плоский «сторибук» бумажной куклой. Дословно: «хочу отказаться от пиксель арт стиля для персонажей. Он не к селу не в городу», «Эффекты в другом стиле, свет и прочее». Параметры (ответы Макса в интервью сессии):

  • полу-пропорциональный герой (5-6 голов): «Полу-пропорциональный герой»;
  • сторибук, но проще Slay the Spire: «Сторибук, думаю… STS хороший пример, но мб что-то все-таки попроще. Все-таки автобаттлери персов видно из далека»;
  • заливка solid, БЕЗ нарисованных теней — объём и свет отдаёт движок: «можно мне рендерить без теней. Просто цвета solid и текстурные элементы мб»;
  • толстый лайнарт: «Контур - толстый лайнарт»;
  • рисует сам, любитель с ростом навыка: «Рисую сам… навыки есть. Но да, скорее любитель»;
  • пилот перехода — танк щит+меч: «В первую очередь как и с bone анимациями - щит и меч, наш танк».

Причина. Плоский гладкий силуэт снимает конфликт «пиксельный юнит против гладкого света», который до этого держали намеренно разведённым по измерениям (форма=пиксель / свет=гладко, 2026-07-31/53): форму подтягиваем к той же гладкости, что и свет. Референс-триада — Wildermyth (компоновка и тон уютное→тёмное под наклонный борд 15-25°), Wildfrost (плоский цвет живой оттеночной вариацией, без теней), Cult of the Lamb (cut-out + эмоция на глазах); планка упрощения Reigns/South Park, дисциплина силуэта Darkest Dungeon. Читаемость мелкой фигуры = силуэт, не детали (тест чёрной заливкой — критерий приёмки). Отвергнуто (ресёрч источника арта): AI-генерация по частям (риск консистентности), покупные паки (чужой стиль), заказ художнику (цена). Носитель арта (вектор Inkscape/Affinity vs растр Krita) — открыто, «обдумаем».

superseded для «Стилевое решение: стилизованный пиксель-арт (принято 2026-07-18)» (visual-direction): пиксель-арт как визуальный язык персонажей отменён. Экранный рендер, порог bloom и нецелый скейл к самому стилю не привязаны и остаются.

2026-08-01/15 — визуал юнита СТАЛ модульным: голова-Сосуд — постоянный якорь личности, Реликвия меняет тело, оружие и размер. Дословно: «при реликвиях - менялся персонаж, оружие, мб даже размеры и тп. Но голова оставалась оригинальной». Обоснование Макса, три пункта дословно: «1 - Выделить что vessel - это ПЕРСОНАЖ 2 - Возможно хочу кастомизацию и это сделает ее оправленной 3 - Если рисовать все под кастомизацию (глаза, лицо и тп) - можно создать много сочетаний».

superseded для инварианта «Визуал цельный на Реликвию, не модульный (“Сосуд” на поле — только UI-портрет). TECH-6 §4» (§Принципы, «Реликвии и юниты»). Разворот: Сосуд теперь ВИДЕН на поле — своим лицом, и это носитель его идентичности; кит по-прежнему от Реликвии, «пилот + чемпион» цел — пилот лишь получил лицо на арене, а не только в UI. Нарративный HARD «копия Сосуда неотличима» (devices) НЕ ломается: лицо тоже часть копируемых данных, двойник несёт то же лицо → неотличим; наоборот, видимое лицо усиливает удар подмены — переписали именно ЛИЦО, которое игрок знал. «Мб даже размеры» принято как направление, но размер-под-Реликвию оставлен гибким: если тело меняет тир, голова НЕ масштабируется рантаймом, а рисуется в разрешении своего тира (иначе рассинхрон вроде «тир-64 оружие на тир-128», уже ловили) — голова часть тир-рига, крепится в neck-anchor тела.

2026-08-01/16 — лицо = детерминированный face-DTO; модульность живёт на генерации, в бою голова стабильна. Из ресёрча (RimWorld / Battle Brothers / CK3-DNA):

  • лицо = плоский вектор индексов [форма головы, глаза, брови, рот, нос, причёска, борода] + palette-id кожи/волос; сериализуется как ДАННЫЕ (инвариант «данные, а не объекты»);
  • показ = чистая функция от DTO → стек SpriteRenderer + тинт через IUnitBodyVisual/MaterialPropertyBlock (HARD «тинт только повторкам, White=не красим»: кожа/волосы рисуются светлыми, палитра опускает);
  • копия по тому же DTO неотличима ПО ПОСТРОЕНИЮ (нет скрытого рандома в рендере); инвариант держит тест по образцу GameDataPathTests;
  • character-creator собирает лицо из модулей ОДИН раз и запекает; в боевой рантайм модульность не тащим (издалека тонкая мимика не видна — урок Reigns; стоимость стыков реальна);
  • стартовый минимум: форма головы 5, глаза 6 (+состояния открыт/моргание/оглушён/мёртв флагом), брови 4, рот 5, нос 3, причёска 10, борода 5 — начинать с нижней границы, добавлять по нехватке.

Это закрывает «оправданную кастомизацию» и «много сочетаний»: ~38 элементов → десятки тысяч лиц, с палитрой практически неповторяющиеся; окупается на ростере гильдии 8→64. Ложится на принятое без конфликтов (палитра-единственный-владелец, тинт через IUnitBodyVisual, сортировка на виде, сетка тиров 64/96/128); новое требование одно — face-DTO + тест воспроизводимости копии.

Открыто: носитель арта (вектор/растр); меняет размер Реликвия или тир-роль; нужны ли отдельные boneslot’ы под сегменты лица сверх части Eyes.

Правит доки: visual-direction (пиксель-решение → superseded, указатель сюда; «Визуальный столп» ждёт наполнения Максом), character-animation (открытый вопрос «покадровые vs скелетные — все или никто» закрыт в пользу «весь каст скелетный/плоский»; модульная голова + neck-anchor), §Принципы «Реликвии и юниты» (TECH-6 §4 → superseded), backlog-gamefeel (tier живости: look-at головой, дыхание, hit-reaction, secondary оружия, свет от эффектов). Нарративная сторона (Сосуд-личность виден на поле) — след для контура narrative. Реализации нет — направление.


2026-08-01 (7) — Комбо считает Атаки, и разрыв гасит только свои заряды

Решение Макса после разбора красного контракт-теста: дефект оказался не в ассете, а в том, что описанного в ГДД Комбо в движке не существовало. Сказано дословно: «У нас же есть механика комбо обговоренная. и она должна работать так как записано в гдд. Это не только у него, но и у драурга, например».

2026-08-01/12 — единица счёта — Атака, и считается путь, а не результат. Дословно: «Надо чтобы считали “Атаки” (а в атаках может быть несколько УДАРОВ). И да, промах - это тоже атака. Надо не чтобы попала, а чтобы атака прошла полный пусть от замаха до рекавери.» Отсюда:

СлучайИдёт в серию
Атака дошла до конца рекаверида
Атака ушла мимо (слепота, уклонение)да — взмах состоялся
многоударная Атака (Монах: два Удара)да, один раз
Атака прервана контролем в замахе или хвостенет

Закрывает proposed из open-forks §Ритм атаки, п. 2 (третья Атака, а не третий Удар) и п. 4 («Комбо ждёт первого носителя») — носителей двое и они были всё это время: цикл ударов голема и «каждая третья» Драугра, просто считали не то.

2026-08-01/13 — разрыв Комбо гасит взведённый заряд, но только СВОЙ. Голем, которого застанили с занесённым тяжёлым ударом, теряет его и начинает круг с обычного: «Гасит». Заряды не от серии — Скрытность Убийцы, «Восходящий удар» Монаха, ответ дуэлянта после парирования — разрыв не трогает: «Разрыв гасит только заряды серии».

Разведено это потому, что «сбили» и «отошёл» — разные истории. Правило заряженных ударов («если их хоть 1 раз сбили - то все, он прошел и не вернется») исполняет снятие носителя: контроль, контра, диспел. А время вне боя — не то же самое, и карточка Скрытности прямо разрешает «не атаковать и отбегать», чтобы сохранить удар из тени. Один закон на всех отнял бы у Убийцы этот удар почти после каждого добега.

Правит доки: open-forks §Ритм атаки (п. 2 и 4 закрыты), реализация — статус врагов; техническая сторона — журнал tech, 2026-08-01-the-series-counts-attacks-and-owns-its-charges.


2026-08-01 (6) — на блоке говорит только щит, тело молчит

Решение Макса на живом play-QA костяной дуэли: «Только щит должен работать». Отменяет часть 2026-07-31/67, где щит светился вместе с золотой вспышкой тела — на скелетном юните это читалось как «весь боец залит золотом», то есть как пробитие, а не как отбитый удар.

ИсходТелоЩит
полный блокне вспыхивает вовсевсполох цветом защиты
щит пробит частичновспышка ШКОЛЬНАЯ (часть урона вошла именно в тело)всполох цветом защиты

Золотом тело не красится больше нигде: защиту показывает сам щит, а тело говорит только за себя. Сплющивание на блоке остаётся — толчок по щиту тело приняло.

Правит доки: VFX Language §Свечение части при касте, §Словарь событий.


2026-08-01 (5) — архетип формы удара берётся из данных; безоружный бьёт дробящим

Решение Макса после того, как он поймал в реализации подставленный дефолт. Сказано дословно: «Никакого дефолта. Только явное указание (или по типу из SO)» и «А безоружный будет с дробящим».

Что это значит. У формы удара два законных источника, оба в SO юнита, и третьего не появится:

Кто бьётОткуда архетип
дальний бойиз AttackType.Ranged — форма одна на всех, линия-всполох; тип урона не спрашивается
ближний бойиз типа урона, но только потому, что три физических типа ПРЯМО называют способ доставки
безоружныйдробящий: кулак это тяжёлое, а не острое

Дефолт запрещён именно потому, что он молчит. «Ледяной удар» не говорит, посохом бьют или когтем; подставленный серп был бы догадкой показа, выданной за замысел. Невыразимый случай обязан падать тестом до боя (HitFormCoverageTests) и шуметь в консоль в рантайме, а не рисоваться наугад.

Сегодня выразимо всё: двадцать семь ближников бьют Blunt / Slash / Pierce, а магия, свет, тьма, яд и кровь сидят на дальниках, где форма одна. Появится магический ближник — его архетип придётся объявить полем в UnitData, и это отдельное решение, а не молчаливая ветка в коде.

Правит доки: VFX Language §Три архетипа.


2026-08-01 — Целитель держит своих, Поддержка давит на врага; болванка мерится от живого кита

Решение Макса после замера лечения. Сказано дословно: «У нас же есть класс целитель, вот они и должны хилять (или накладывать щиты) на союзников как основная механика. А поддержка - это либо баффы либо дебаффы либо что-то в эту сторону». И отдельно про Хранителя углей: «Хрнаитель углей вроде поддержка, а не хил? Он чисто антидебффер вроде пока что».

Что из этого следует для линейки. Норма лечения остаётся только у Целителя (110 HP/сек); у Поддержки она снята в ноль — лечение там свойство отдельного кита, а не обязанность роли. Друид лечит и остаётся Поддержкой: его лечение побочно к ядам, и мерить его потоком HP нельзя (600 за бой длиной 240 секунд — 2.5 HPS, при том что без него отряд гибнет за 25 секунд).

Валюта Целителя — лечение ИЛИ щиты. Это уравнивает два способа держать своих, но вскрывает долг измерителя: стенд снимает только вылеченное, выданный щит в замер не попадает.

Про Пастыря — поднять, но умеренно и через его суть. Сказано: «Пастырь - он хиляет норм от недостоющего. Т.е. суть чтобы он на грани держал людей. Подними его, но не слишком уж сильно». Внесено: доля недостающего HP 8% → 25%, плоское лечение не тронуто. На лёгкой ране лечит почти как прежде (150), умирающего вытаскивает вдвое сильнее (350). Замер в рядовых боях: 37 → 40 HPS — прибавка мала именно потому, что там некого спасать.

Про болванку — точка отсчёта другая, чем я взяла. Замер показал, что трешевый травник лечил 121% от живого Пастыря, хотя по паспорту стоял на честных 70% от норматива. Пока ростер к норме не приведён, вторая валюта болванки мерится от живого носителя роли: лечение 300 → 180, это 69% от Пастыря по факту.

Про Друида — вопрос открыт. Сказано: «изучи баланс прогны в локал чате или в доке когда он сильный - это когда милишников с обоих команд много, надо бы реально подумать сколько хилять должны». Изучено: карточка и BAL-012 держат замер 28.07 — в свалке ближников отряд с Друидом не теряет никого, без поддержки гибнет за 25 секунд. Числа «сколько он должен лечить» не назначены; развилка живёт в docs/balance-issues.md BAL-025.

Правит доки: ClassBalanceConfig.asset, The Shepherd, Bundle of Herbs, docs/balance-issues.md.


2026-08-01 — треш-реликвии: 70% нормы, одна активка на мане, по болванке на класс

Заказ Макса. Сказано: «У нас планировались “релики-мусор”. Сделаем такие? Слабые, значения слабее рекомендуемых, около 70% урона (или иной полезности) и 70% хп. Оч простая 1 активка или 1 пассивка.» Примеры оттуда же: «“получить щит” (танк), “выстрелить усиленно” (дальник-лучник, х3 рекастом), “похилять и снять 1 слабый эффект” (хил), “призвать 1 скелета” (призыватель), “парирование” (брузер) и тп. А без релика - вообще 50% и 50% от рекомендации (т.е. не запрещаем, но явно указывай, чел, бери релик))».

Принято (вердикты того же дня):

РазвилкаРешениеЧто отвергнуто
сколько болваноксемь, по одной на каждый класспять «как назвал» и шесть со слитыми Поддержкой и Целителем: испытание «выставь трёх хилов» тогда нечем закрыть, а треш существует ровно ради таких заказов
от чего считать 70%от классовой нормы ClassBalanceConfigот среднего по живым китам: база гуляет после каждой балансной правки, и болванки поехали бы вслед за ней
«без реликвии — 50%»правим relic.base: 1000 HP, 55 DPS, броня 30, навыков нользаводить второй ассет: этот и так подставляется в пустой слот
ресурс болванокмана у всех, активка у всех; пул равен цене каста, кулдаун нулевойкулдаун вместо маны (предлагала я, отклонено Максом: «Нет, у трешей есть мана у всех! Везде актика.»)
набор маны с ударовнет, только регенерация«немного давать»: у мусора одна ручка темпа, разгон от темпа боя остаётся удовольствием обычек
«х3 рекастом» у лукаурон ×3 одним выстреломзалп из трёх стрел; сказано: «У нас есть механика “рекаст”. х3 урон одним выстрелом»

Побочное решение, выросшее из вопроса Макса о линейке. Сказано: «И у нас есть проверка выживаемости в статах? Реальная выживаемость + реальное хп (хп + зашщита)? Есть требования и подсчет для поддержки? Сколько должны хилять? А то будто этого не хватает сильно». Проверено: нормы лечения не существовало вовсе, а бюджеты брони стояли нулями. Принято — норма лечения Целителя 110 HP/сек (вровень с уроном Брузера: одно вылеченное HP равно одному нанесённому), Поддержке половина; бюджеты брони по докстрингу 120 / 60 / 30 / 20. Отвергнуто: 55 HPS («полбойца» — оставляет класс заведомо дешевле бойца) и 154 HPS («как урон Убийцы» — уводит бои в овертайм).

Следствие, которое придётся разбирать отдельно: живые хилы лечат вчетверо ниже новой нормы (Пастырь около 20-25 HPS при норме 110), поэтому трешевый травник по норме выходит сильнее обычки. Разрыв заведён проблемой в docs/balance-issues.md, а не сглажен занижением болванки: норма — цель, к которой приводят ростер.

Правит доки: Relic - Catalog (раздел «Треш»), семь карточек gdd/relics/trash-*, Content - Relics §Редкость.


2026-08-01 — кисть становится отдельной частью: она верхний слой над оружием

Решение Макса. Сказано: «Надо добавить ладонь. Чтобы она была на рукояти меча. А меч смогли сделать выше рук.» и, отдельным доводом: «Да и в каком-то плане ладонь должна быть и для анимации? Разве нет? А то щас её часть работы выполнял локоть, что было плохо.»

Сетка до этого числила кисть врисованной в предплечье, и я советовала слить её туда же — совет был неверен, потому что мерил только анимационную пользу. У кисти две работы, и обе настоящие:

  1. Сортировочная. Кисть — верхний слой сэндвича предплечье → оружие → кисть. Без неё меч лежит НА руке, а не в руке: рукоять оказывается поверх пальцев.
  2. Анимационная, довод Макса. Без своего звена рука кончается предплечьем, оружие прилипает к его концу, и дотягиваться приходится локтем — то есть локоть выполнял работу запястья.

Новой кости не нужно: спрайт вешается на уже существующий узел рига Rotation Point (Grip) (дочерний у Arm_Down), а конвенция реестра частей и так гласит «кисть = кость, у которой есть хват». Габарит по тирам — 4×5 · 6×7 · 8×9.

Следствие, которое ещё не закрыто: порядок отрисовки перестаёт быть константой. Сейчас ордера живут в префабе рига (Sword = 2, руки 4/5/6), поэтому меч выше руки невозможен, а обе руки имеют одинаковые ордера и дальняя не уходит за корпус. Но и простой перестановки мало: меч по позе бывает перед телом, за головой и за корпусом. Направление — пресеты порядка, ключуемые в клипе одним индексом, а не 18 дорожками; внутренний порядок конечности при этом константа, меняется только «звено перед корпусом или за ним». Чем ключевать индекс (анимируемое поле против события анимации) — не проверено, требует опыта в редакторе.

Владелец правды: раздел «Сетка размеров частей» в docs/view-angle-progress.md (габарит кисти), BoneUnit_Standart.prefab (ордера), scripts/aseprite_parts.py check (перекрытия частей).

2026-08-01 — человек-герой становится тиром 128; шея входит в сетку сегментом роста

Решение Макса по размеру фигуры: выбран вариант «Да, человек теперь 128» из предложенных (до этого канон держал человека и героев на 96). Поводом стал замер его рабочей фигуры в Aseprite/Bone Animations/Pixel Hero - Parts - Workbench.aseprite: плечи 32 и голова шириной 16 — ровно канонные ширины тира 128, при высотах уровня 96 и фактическом росте 116, то есть между тирами. Ширину править дороже высоты (на голове 12 px тира 96 нарисованное лицо не собирается — одни глаза занимают 11 px), поэтому тянем высоты вверх, а не ширины вниз.

Следствия, каждое обязательно к учёту:

  • Фигура человека теперь крупнее стилевого ориентира. У героя Songs of Conquest ~102 px, у нас 128. SoC остаётся рефом по раздаче пикселей и пропорции, но не по абсолютному размеру.
  • Тир 96 занимают юниты помельче, ярлык «большой» освободился — нужен ли четвёртый размерный тир под крупных врагов, не решено и ушло в развилки.
  • Риг измерен на старой болванке и после перерисовки перемеряется, а не подгоняется.

Шея — сегмент роста, но часть спрайта головы. Вердикт инженерный, а не ГД: поводом был вопрос Макса «Как шею анимировать, скажи мне? Хихи. Будем как просто чатсь торса? тогда это просто в body? Или что?». Ответ — ни то, ни другое:

ТирШеяТорс было → станет
64220 → 18
96432 → 28
128644 → 38

Шея забирает высоту у торса, а не добавляет к росту: именно её отсутствие в разборе и увело рабочую фигуру на 116. Отдельной кости Neck в риге нет и не будет — кость длиной 6 px бесполезна (поворот на 10° сдвигает верх на один пиксель, а пиксели на такой короткой кости рвутся). Шея анимируется вращением кости Head, чей пивот стоит в её основании, поэтому череп и шея наклоняются вместе. В спрайт торса шею класть нельзя: при наклоне головы она осталась бы стоять колом и стык открылся бы.

Владелец правды: раздел «Сетка размеров частей» в docs/view-angle-progress.md; линейки под рисование генерируются оттуда скриптом scripts/art-proportion-ruler.py, который падает при расхождении таблиц. Кода это не трогает: в риге кости тела — Hips, Torso, Head (RigProfile.cs), и они не меняются.

2026-08-23 — имя реликвии в интерфейсе одно, и его даёт локализация

Решено: реликвия называется на всех экранах одинаково — именем из локализации, то есть на языке игрока. При RU это «Антимаг», при будущей EN — то, что заведут в английской таблице.

Почему: кадры экранов 23.08.2026 показали, что одна и та же реликвия зовётся по-разному: в инвентаре титулом арканы («THE ANTIMAGE», строился из строкового id), в расстановке — русским именем из локализации. Игрок видел две разные вещи вместо одной.

Сказано: «Ну. От перевода зависит. Но если выбрано RU - то на русском конечно» (23.08.2026, сессия 14ae129e).

Что это значит для латинских титулов. Титул вида The Antimage перестаёт быть источником имени в UI: его строил ContentTitle.Arcana из id, минуя таблицы. Сам приём не отменён — он вернётся естественным путём, когда английская локаль заполнится английскими именами. Отдельного правила «имя строится из id» больше нет.

Где живёт: MenuRouter.BuildInventory, VesselCardView, UiPreviewCatalog; имя берётся через LoadoutViewModel.Name / ключ {id}.name.


2026-08-01 — Тиров врага четыре, а не три; два разбойника берутся, стилер отклонён

Решение Макса в ответ на вопрос о тире дуэлянта и убийцы. Сказано: «Все - стандарт. У нас будет 4 типа все-таки. 1 - треш (просто без способностей особо как раз или оч слабые пассивки), 2 - обычки, 3 - элитка (или как-то иначе назвать. Это не главный бой в элитном сражении, а просто сильный юнит) 4 - специальный (вот тут как раз мини боссы, боссы и тп)».

Ось Тип получает четыре значения вместо трёх (было Обычный / Элита / Босс):

ТирКто это
Трешбез способностей вовсе или очень слабые пассивки
Обычный«обычки» — рабочая масса встречи
Элитапросто сильный юнит, не главный бой элитного сражения
Специальныймини-боссы, боссы и подобное

Уточнение про Элиту важно и снимает прежнюю двусмысленность: «элита» больше не намекает на элитный энкаунтер, это про силу самого юнита. Имя третьего тира открыто («или как-то иначе назвать») — ушло в развилки.

Кода это не трогает: тира врага в EnemyData нет вовсе, ось живёт во frontmatter карточек (enemy_group), а движок различает силу через _threatPoints и стат-блок.

Прочие вердикты того же хода:

  1. Разбойник-дуэлянт и разбойник-убийца — оба «стандарт» (Обычный), несмотря на три правила у первого и два у второго.
  2. Разбойник — стилер предметов НЕ делается сейчас. Сказано: «Его НЕ делаем». Уточнено в тот же день: «Стилер будет, но потом, хихи» — то есть кит отложен, а не отклонён. Заявка остаётся в списке ждущих карточек с пометкой «не сейчас»; разбор вариантов кражи лежит в закрытых как материал к будущему заходу, а не как приговор. Что придётся решить, когда возьмёмся: предметы живут вне боя, поэтому честная кража требует шва «исход боя меняет состояние забега», которого нет.
  3. Кровь убийцы живёт 3 секунды, а не 5 — берём срок из ассета effect.bleed, чтобы у длительности порции остался один владелец. Заявка говорила «на 5 сек»; число в карточке будет 3.
  4. Маскировка убийцы — средняя ступень, как у гоблина-убийцы: разбойник отличается от него кровью и уроном, а не качеством прятки.

2026-07-31 (вечер, 26) — Гоблин-кривляка: плоский стат регена, цель только с маной, канал окнами

Четыре вердикта Макса по последнему врагу ростера — синей повязке проказников. Разбор начался с моей ложной находки: я грепнула ассеты регистрозависимо (stat: 27 вместо Stat: 27) и доложила, что маны в игре нет ни у кого. Сказано: «Т.е. нет? У нас есть реген маны щас. Ты чего?» — пул задан у всех девятнадцати реликвий, и он равен стоимости активки, то есть мана у нас работает как второй кулдаун, а _resourceRegenPerSecond: 5 задаёт его темп.

  1. Форма дебаффа — плоский стат регена, а не множитель. Заведён StatType.ResourceRegenFlat: слагаемое к базе ДО множителя ResourceGainEff. Альтернатива (множитель ×0.2) была сегодня эквивалентна и не стоила кода, но расходится с «-4 единицы» на первом же ките с другой базой. Цена названа прямо: реген перестал быть «одинаковым у всех» (решение 2026-07-27) — одинакова теперь только БАЗА.
  2. Сила — как заявлено, -4 из базовых 5. Набор падает до 1/сек, время до каста растёт впятеро: Арканисту с 3 секунд до 15, Некроманту с 20 до 100. Смягчение до ×0.5 отклонено.
  3. Цель — ближайший ИЗ тех, у кого есть мана (новый режим NearestEnemyWithResource). Безресурсный боец отсекается: для него дебафф стоит ровно ноль. Это ограничение цели, а не умный выбор — сравнения «у кого пул больше» нет, поэтому кривляка остаётся Обычным и не спорит с принципом 2026-07-31/вечер-25.
  4. Канал окнами: 4 сек канала, 6 сек откат. Вариант «держит постоянно, пока жив» отклонён. Оговорка ушла в замер (BAL-023): откат тикает от старта каста, поэтому передышка выходит 2 секунды, а не 6.

Титул — «Гоблин-кривляка». Из трёх выбран тот, что даёт каналу готовый визуал: передразнивает жесты кастера, и тому сбивается набор силы. Отклонены «нытик» (нечего показать глазом) и «зубоскал» (тон уходит от смешного к неприятному).

2026-07-31 (вечер, 25) — Обычному врагу разрешена ОДНА простая активка

Решение Макса по расхождению, вскрытому реализацией Гоблина-шутника: он заведён Обычным, но несёт активку «Горсть в глаза», а принцип стартового ростера (каталог, методичка создания противника) до сих пор читался как «Обычные — простые противники без активных навыков».

Вердикт: оставить Обычным, а принцип уточнить. Выбрано из трёх вариантов (поднять до Элиты / переделать слепоту в пассивку на авто-атаку) — сказано выбором: «Оставить Обычным, уточнить принцип».

Новая формулировка принципа: Обычному разрешена одна простая активка без выбора цели. Различитель тира — не наличие активки, а право на умный выбор и вес в бою: у Элиты правило меняет приоритет команды, у Обычного активка бьёт по той же цели, что и его атака. Шутник по статам не элита (HP очень низкий, урон символический), а его слепота раз в 8 сек читается прозрачнее многих пассивок.

2026-07-31 (вечер, 24) — Мокрый уходит Потоку; анти-хил обычно от яда, но не тождество

Два вердикта Макса по итогам разбора дыр ростера (сам разбор — заявка на вердикт, roster-gaps).

  1. Мокрый получает носителя — Поток. Тег кладут оба его навыка, «Восходящий удар» и взрыв «Водяного щита», на 4 сек; обычная атака не кладёт (как и со стаками холода). Сказано: «Пусть мокрый накладывает активки и пассивка монаха на 4 сек. Уточни это и в описании». До этого решения у Мокрого не было ни одного носителя ни в карточках, ни в заявках: producer’а унёс реворк Прилив → Поток 2026-07-29, а два правила Комбинаций под него остались.
  2. Анти-хил и яд — не одно и то же. Сказано: «Яд не всегда антихил, но обычно антихил именно от яда». То есть анти-хил остаётся своей шкалой (effect.antiheal_*, четыре ступени), доступной любому киту, а яд — обычным её носителем, но не единственным и не обязательным. Прежняя формулировка «идентичность яда = анти-хил» этим уточнена: связь типичная, а не определяющая.

Прочие дыры разбора обсуждать пока не стали — механики и решения по ним Макс назвал осознанными.

2026-07-31 (вечер, 23) — Гоблин-шутник: титул принят, цель — ближайшая, статы по каскаду

Приёмка дизайн-прохода (его провела Никси по мандату «проказников оформить самой, решения вынести на приёмку»). Три вердикта Макса:

  1. Титул — «Гоблин-шутник». Из трёх предложенных выбран тот, что слышит подвид, а не механику: «пыльник» и «ослепитель» отклонены.
  2. Приоритет цели — ближайший, как у прочих гоблинов. Предложение скрайба целить в сильнейшего по урону отклонено: у мелкого проказника нет права на умный выбор, и слепота, ушедшая в танка, — часть его цены. Пресет берётся готовый, ai_preset.goblin_archer (ближайший + кайт).
  3. Стат-блок — как посчитал каскад, без ручных правок: HP 520, скорость 2.48, урон 30, темп 0.7, дальность 6, снаряд 8, броня 0, угроза 3.

Механика — дословно из заметки: «Горсть в глаза» кладёт 2 стака слепоты на 3 сек. раз в 8 сек. Синяя повязка не тронута: её мана-дрейн ждёт вопроса Арканы.

2026-07-31 (вечер, 22) — слепота: глубина стаками 1-4, каждый стак живёт своё время

Решение Макса. У слепоты стаки от одного до четырёх, и глубина — это период промаха:

СтаковПромахивается
1одна атака из четырёх
2одна из трёх
3одна из двух
4одна из одной — слепой не попадает вовсе

Каждый стак живёт отдельно по времени, как кровотечение — порционная модель. Отсюда слепота ослабевает постепенно (с «всё мимо» до «каждая четвёртая»), а не гаснет разом, и потолок в четыре осмыслен: пятый стак нечем выразить, кроме «мимо чаще, чем бьёт».

Гоблин-проказник (белая повязка) накладывает два стака на своё время — то есть в пике мешает так, что цель промахивается каждой третьей атакой.

Механика детерминированная, без шанса, — как обещал каталог эффектов (§Детерминизм). Контра остаётся за Меткостью из того же каталога; она не реализована и ждёт носителя. В движке: effect.blind, BlindComponent. Инженерная сторона — запись 2026-07-31-blindness-counts-swings-not-hits.

2026-08-01 (4) — жизнь эффекта: снятие сохраняет форму и меняет цвет

Закрывает обе темы, оставленные неразобранными: финалы эффектов и рождение со стакингом.

2026-08-01/11 — снятие эффекта СОХРАНЯЕТ форму и меняет только ЦВЕТ. Дословно: «клинс может эффект сделать быстро все текстуры снимаемого эффекта - небесно голубым, а потом быстро растаять? И покажем “что” и покажем “как”». Причина, почему это ложится идеально: та же ось, что у удара — форма говорит ЧТО сняли (языки, налёт, пузыри остаются узнаваемыми), цвет говорит ЧЕМ сняли. Новой сущности не понадобилось. Голубой — цвет действия, а не кастера: клинс Пастыря и клинс Друида обязаны читаться одинаково. Перекраска и таяние последовательны (сначала цвет 2–3 кадра, потом растворение 3–6): одновременно вышло бы «мигнуло и исчезло», и «что» потерялось бы.

2026-08-01/12 — клинс и диспел баффа красятся РАЗНО: голубой и тёмный. Это противоположные факты — с тебя сняли плохое либо сорвали хорошее, — и в коде они уже различены (OnEffectDispelled знает автора снятия). Диспел вдобавок срывается, а не тает: у него нет мягкости клинса.

2026-08-01/13 — истечение гаснет ровно и В СВОЁМ ЦВЕТЕ. Дословно: «а развеился сам - быстро исчезание по опасити и все». Любая перекраска превратила бы истечение в событие, а оно не событие — просто время вышло. Симметрично барьеру: развеивание ровное, разрушение с осколками.

2026-08-01/14 — стак и обновление длительности различаются жестом: ТОЛЧОК против ВОЛНЫ. Толчок — форма дёргается наружу и возвращается («стало больше»); волна идёт по телу без роста формы («стало дольше, но не сильнее»). Два разных факта — два разных жеста.

2026-08-01/15 — «не влез в потолок» не показывается вовсе. Дословно: «У нас в принципе нет потолка. На 20 стаках льда, например - это стан, уже инфа. Уже все не зря». Моя посылка была неверной: я приводила Криоманта как пример удара впустую, но двадцатый стак «Изморози» — не отказ, а переход в статую. Глухих потолков у нас почти нет: угли и гниль до 999, кровь без потолка. Показывать нечего.

Правит доки: VFX Language (§Жизнь эффекта), стенд docs/gamefeel-demos §Превью эффектов — шесть событий жизни на одном носителе формы.


2026-08-01 (3) — стадию крови несёт пропитывание тела

2026-08-01/10 — стадия крови читается ПРОПИТЫВАНИЕМ: тело краснеет снизу вверх. Дословно: «Давай B возьмем, ок? Не съедает силуаэт, просто чуть красит. Это ок». Подтон намеренно слабый — это часть решения, а не настройка: силуэт несёт класс и оружие, то есть факт важнее стадии крови.

Причина выбора: пропитывание работает площадью, а не мелкой графикой, поэтому переживает свалку из восьми тел. Отклонены три подхода: капли со струйками (мелко, теряется), свечение ран (путается с огнём), пульс (требует смотреть на юнита секунду, а в автобое её нет). Моя ставка была на свечение ран — я переоценила довод «носитель уже есть» и недооценила то, что яркость на теле у нас уже занята огнём.

Механика крови при этом не менялась — порции работают как работали, DPS-метр только читает их суммарный урон. Отдельно записано потому, что в ходе разбора я дважды уехала в правку механики там, где вопрос был про показ.

Правит доки: VFX Language (§Кровотечение), стенд docs/gamefeel-demos §Превью эффектов (вариант B помечен принятым, три остальных оставлены как разбор).


2026-08-01 (2) — тик DoT это волна в цвете школы; у крови четыре ступени по DPS

2026-08-01/7 — «DoT бьёт мимо щита» ОТМЕНЕНО до записи в канон. Обсуждались три правки: кровь и яд накладываются только от урона, дошедшего до HP, и тикают мимо щита. Отменил сам Макс: «Щит - это просто временное хп. Без доп сложных механов… Галя, у нас отмена!». Причина сильнее визуальной выгоды: щит остаётся простым временным HP, а игровая условность формулируется так — «барьер не то, чтобы прикрывает тело от атак, а скорее не даёт повредить тому, на ком находится, забирая урон на себя». Записано здесь, чтобы через месяц идея не пришла заново как свежая.

2026-08-01/8 — тик любого DoT показывается МЯГКОЙ ВОЛНОЙ по силуэту в цвете школы. Идея Макса: «моргает юнит зеленым при получение урона дотами от ядов, а эффекты ядов - это просто обычные эффекты, для которых мы уже решили визуал». Я обобщила её с яда на все DoT, потому что иначе получались бы два несовместимых языка: огонь висит знаком, яд мигает. Общий закон: постоянный знак получает только тот статус, у кого есть постоянное СОСТОЯНИЕ ТЕЛА (горит — языки, обмёрз — налёт, ранен — порезы). Волна намеренно отличается от вспышки удара: та белая, резкая, три кадра; эта цветная, мягкая, около десяти.

Следствие для ядов: у яда состояния тела нет, значит постоянного знака ему не полагается вовсе. Десять разных ядов выглядят одинаково — одной зелёной волной, — а различаются дебафф-частью, у которой визуал уже решён. Это закрывает вопрос «ядов много, как быть»: различие живёт там, где меняет решение.

2026-08-01/9 — у крови четыре ступени, и считаются они по DPS в долях maxHP цели за секунду. Ступень: до 1% — сочится, 1–3% — капает, 3–8% — течёт, выше 8% — хлещет (лужа под ногами и след при движении). Почему доли, а не абсолютные числа: стаков у порционной модели нет, а абсолютный DPS устареет с ростом статов за забег и по-разному прочтётся на гоблине и на боссе. Число порезов остаётся вторым, независимым фактом: ступень говорит, как быстро он умирает, порезы — сколько ран открыто; десять слабых порций и две сильных не должны выглядеть одинаково.

Правит доки: VFX Language (§Статусы — волна тика, ступени крови), стенд docs/gamefeel-demos §Превью эффектов (четыре ступени крови, три стенда волны; устаревшие превью яда и крови из сетки удалены).


2026-08-01 — угли против изморози 1 к 1; ядов много, различаем по последствиям; кровь показывается порциями

Разбор сочетаний статусов на одном теле. По ходу сверки с кодом и ГДД отменены два моих утверждения: у Поджога нет стаков вовсе (_maxStacks: 1), а «яд» — не эффект, а форма.

2026-08-01/1 — угли и изморозь взаимно вычитаются 1 к 1. Дословно: «уходят тогда угли и изморозь. Пока 1 к 1 (1 уголь гасет 1 изморозь и наоборот)». ЗАМЕНЯЕТ правило матрицы «Огонь топит лёд» (2026-07-29: огонь ускоряет сход «Изморози» ×2, не сбрасывая) — оно помечено superseded, потому что два правила про одну пару стихий означают двух владельцев одного факта. Дословно про замену: «огонь и лед - берем новое, заменяем старое». Причина, почему новое лучше: вычитание по стакам симметрично и не зависит от таймеров схода, а защита «крио-кит не обнуляется одним огненным врагом» сохраняется даже лучше — один уголь снимает ровно один стак, а не ускоряет сход всей шкалы.

2026-08-01/2 — приоритет статусов внутри канала — фиксированное число в SO статуса. Моё предложение считать приоритет по ожидаемому остаточному урону отклонено: динамическая ставка требует гистерезиса и всё равно мигает на близких значениях, а фиксированный порядок предсказуем и правится в ассете.

2026-08-01/3 — шкала 1-9 / 10-29 / 30-99 / 100+ описывает УГЛИ (плюс факт горения), а не стаки Поджога. Уточняет 2026-07-31/79, где она была записана как «шкала Поджога». Дословно: «глянь механику огня. У НЕГО НЕТ СТАКОВ», и затем «Да, она описывает уголь, хихи. Точнее уголь + огонь». Сверено с ассетами: Burn_maxStacks: 1, длительность 5 с; Ember_maxStacks: 999, бессрочно. Отсюда и осмысленность пасхальной ступени 100+: угли действительно уезжают в сотни, потому что бессрочны. Следствие правила: ступень показа несёт опасность, а не счётчик стаков — горящий с углями опаснее горящего без них, потому что угли усиливают огонь по цели.

2026-08-01/4 — угли показываются через УДАР, а не постоянным знаком. Дословно: «Можно делать что атаки оставляют за собой в хите больше огненных всполохов, если урон - огненный. Например автоатаки мечника. Т.е. даже если противник не будет гореть, покажем что урон огнем растет». Моё предложение тлеющих точек внутри силуэта отменено. Причина Макса точнее моей: угли — множитель огненного урона, то есть свойство будущего удара, а не состояние тела; показывать их в момент, когда они работают, — честнее. Информация приходит постепенно, поэтому детонация не выглядит беспричинной: игрок видел, как искр становилось больше.

2026-08-01/5 — визуальный различитель заводится под разницу в ПОСЛЕДСТВИЯХ, а не под разницу в имени или авторе. Поднято Максом: «У нас нет единого “яда”. У нас есть кучу ядов со своими уник дотами и эффектами… Мб они и будут отличаться мизерно в визуале, но да, они различные. Как быть? Как сделать все информативно?» Разложение на три уровня:

  • Род — канал «тело»: яд это пузыри вверх и зелёный подтон, кровь это капли вниз. Отвечает «его травят» либо «он кровит», и не более.
  • Функция дебаффа — своим каналом по смыслу: шред брони истончает контур (защита тает), замедление уходит в землю, антихил не доносит искры, отложенная печать — знак со сроком, который убывает.
  • Число уникальных ядов — каждый даёт свой источник пузырей (разные точки на теле, оттенки внутри зелёного). Это не косметика: «Взрыв спор» Друида лечит за каждый уникальный яд.

Два яда с одинаковой функцией выглядят одинаково — и это правильно, игроку от них одно и то же.

2026-08-01/6 — кровотечение не получает своего знака: порция крови это текущий порез. Сверено с кодом: кровь идёт по StackRule.Portions — каждое наложение своя порция со своей силой и своим сроком, порции сходят независимо, потолка нет (_maxStacks: 0 означает «без потолка», а не ноль стаков), а Stacks — производная от их числа. Ступеней у механики нет вовсе, поэтому показ их не назначает: число текущих порезов = число ран, интенсивность капания = сумма силы порций. Совпадение с порезами неслучайно — у пореза тоже свой запас и своё независимое угасание.

Ложная находка, снятая в тот же ход: я приняла _maxStacks: 0 у крови за дефект данных и завела балансную запись о «нулевом уроне». Неверно: Stacks инициализируется единицей, а ноль в этом поле — объявленное отсутствие потолка у порционной модели. Запись отозвана до коммита. Урок: у порционного эффекта поля стакинга читаются иначе, чем у обычного.

Правит доки: VFX Language (§Статусы — угли, яды, кровь), Combination Rules (правило огонь-лёд заменено), State Tags (строка «Обмороженный»).


2026-07-31 (ночь, 28) — осколки барьера разлетаются радиально от юнита и быстро гаснут

2026-07-31/96 — при пробитии куски скорлупы уходят РАДИАЛЬНО прочь от юнита и быстро гаснут по прозрачности. Дословно: «все трещинки щита разлетаются от юнита. т.е. вокруг него. Достаточно быстро пропадают (исчезая по опасити)».

Отменяет часть 2026-07-31/82: там разрушение уходило по касательной от последнего удара, и направление считалось смыслом («видно, кто добил»). Теперь направления у слома нет: барьер лопается целиком, а не сдувается в сторону. Кто добил, и так читается вспышкой в точке контакта, которая идёт кадром раньше, — то есть касательный разлёт дублировал уже сказанное, а взамен ломал форму: куски уезжали в одну сторону, и от скорлупы оставался полумесяц.

Что от /82 остаётся в силе: два финала по-прежнему различаются. Разрушение — куски наружу плюс быстрый фейд; развеивание — ровное угасание вверх без осколков. Различитель сместился с направления на само наличие осколков, и это надёжнее: направление в свалке читается плохо, а «развалилось или растаяло» видно всегда.

Правит доки: VFX Language (§Барьер — финалы), стенд docs/gamefeel-demos §Барьер (финал «разрушение», кейсы «внешняя пробита» и «насквозь»).


2026-07-31 (ночь, 27) — зоны: стоячие заводим, показ ставит на подводку, линия получает носителя

Первый разбор зон. Сверено с кодом: форм всего две (AreaShape.Circle, AreaShape.Line), зоны есть у двоих (Криомант — круг 3.0 вокруг ЦЕЛИ, Копейщик — круг 2.5 вокруг себя), Line не использует никто, стоячих зон нет ни одной, а телеграф-система уже работает (лента вперёд, время объявляет EffectData.TelegraphSeconds) — но геометрии зоны лента не несёт.

2026-07-31/93 — стоячие зоны заводятся как ОТДЕЛЬНАЯ механика. Облако спор, ледяное поле, горящая земля: зона живёт на арене, тикает и задевает тех, кто в ней. Причина: это единственный способ дать позиционную игру в бою, которым игрок не управляет, — решает расстановка, то есть решение, принятое до боя. Прямо в столп «решения вне боя обязаны быть видны в бою». Цена названа: это не эффект на юните, а новая сущность симуляции со своей геометрией, длительностью и правилом «кого задевает», плюс её надо писать в ленту, чтобы показ мог её нарисовать. Работа контуров combat-sim (сущность и тик), data-authoring (определение) и content-design (носители).

2026-07-31/94 — показ зоны ставит акцент на ПОДВОДКУ, а не на след. Выбран вариант «подводка до удара». Моя рекомендация была обратной (след важнее, потому что в автобое игрок всё равно не уклонится, а отметина на земле объясняет постфактум) — и она отклонена. Принимаю: подводка создаёт напряжение и делает бой читаемым в момент, а не только в разборе; наш лаг показа делает её честной — сим уже посчитал, лента держит, значит круг не врёт о том, что случится.

Следствие, которое надо решить в механике: подводке негде жить без окна подготовки. Зональные касты обязаны иметь cast-time, иначе круг вспыхнет в том же кадре, что урон. У Криоманта и Копейщика это надо проверить и, если каста нет, завести — балансная правка, замер заведён (BAL-022).

2026-07-31/95 — форма Line получает носителя: линейная атака нужна. Дословно: «Завести носителя — линейная атака нужна». Причина: форма в данных без носителя — мёртвый код по нашему правилу, а второй геометрический почерк после круга полезен сам по себе: прокол сквозь ряд читается иначе, чем взрыв вокруг. Заявка уехала в Open Forks §Новый контент; кит выбирает Макс.

Язык зоны (предложение скрайба, proposed): контур несёт форму, заливка почти отсутствует — зоны пересекаются, а аддитивные заливки складываются в кашу уже на второй. Зона лежит в плоскости земли с той же сплюснутостью, что тень юнита и купол барьера. Цвет по готовому правилу: зона-удар это событие и красится палитрой бьющего, зона-аура это состояние и красится цветом статуса.

Правит доки: VFX Language (§Зоны), Open Forks (стоячие зоны в инкубатор, линейная атака в контент), docs/balance-issues.md (BAL-022).


2026-07-31 (ночь, 26) — лечение собирает, яд выделяет; блок стал направленным

Две мелочи, висевшие с разбора статусов. Дословно: «Давай мелочи ( Из мелочей висят хил с вектором внутрь и направленный блок; из крупного), пропиши».

2026-07-31/91 — у лечения вектор ВНУТРЬ: искры приходят извне к телу. Причина: дефект нашёлся в моей же сетке превью — яд и лечение оба шли вверх и оба зелёные, то есть «его травят» и «его лечат» сливались в одно пятно, хотя это противоположные факты. Разведение бесплатное и диегетичное: яд выделяет, лечение собирает. Цвет менять не понадобилось — работает вектор. Антихил достался тем же приёмом: тот же приход внутрь, но искры гаснут на подлёте и осыпаются, не достав до тела. Читается как «не доходит», и это ровно то, чем антихил является.

2026-07-31/92 — блок ПРОВЕРЯЕТ направление: удар в заднюю полусферу его не будит. Сектор — 180°, тем же правилом, что у парирования (ParryComponent._frontalDegrees, InFront). Причина: до этого показ был вынужден врать или молчать — жест «подставил щит» на удар со спины означал бы разворот, которого не было (2026-07-31/88). Теперь жест честен всегда: он есть ровно там, где блок сработал. Барьер направления по-прежнему не знает и гасит любой урон, включая тик яда и удар в спину, — просто без жеста; это и есть разница между механизмом и способом его получить.

  • Ориентации в симуляции нет как состоянияFacing выводится по цели, а если её нет, по движению. Правило одно на игру, поэтому блок обязан читать его из общего места, а не завести свою копию (техдолг записан: сейчас Facing/InFront приватны в ParryComponent, а показ выводит «спереди» по своей конвенции — два владельца одного правила).
  • Facing неизвестен (стоит без цели) — сектор не сужается, как у парирования: иначе блок отключался бы в момент, когда юнит просто никого не выбрал.
  • Балансная цена названа: блокеры слабеют, потому что удары с фланга и со спины больше не гасятся, и сильнее всех это задевает Защитника, которого окружают по роли. Компенсацию заранее не вводим — сначала замер (BAL-021).

Правит доки: VFX Language (§Статусы — лечение и антихил, §Барьер — блок направленный), docs/balance-issues.md (BAL-021), стенд docs/gamefeel-demos (превью лечения и антихила, кейс «блок со спины»).


2026-07-31 (ночь, 25) — форма барьера это эллипс, и зазор до тела заметный

Закрывает развилку целиком: 2026-07-31/89 оставил выбор из трёх круглых форм.

2026-07-31/90 — форма барьера — ЭЛЛИПС (симметричный сфероид), зазор до тела увеличен. Дословно: «Давай просто элипс. И добавь больше оффсета между юнитов и барьером, они должны быть чутка больше, хихи». Отклонены купол-овоид (моя рекомендация) и кокон-суперэллипс. Причина, которую стоит запомнить на будущее: я оптимизировала форму под облегание силуэта — сужение к макушке убирало «пустой воздух» над головой. Но пустое место у барьера не дефект, а смысл: барьер окружает юнита, а не обводит его. Плотно облегающая форма читается как контур тела, а не как силовое поле.

Числа: полуоси ~0.34 H в ширину и ~0.68 H в высоту, центр на 0.52 H от земли, низ подрезан линией земли (симметричная форма всё равно уходит под арену, и подрезка честнее, чем парящий овал). Против прежних 0.28 H × 0.60 H это примерно на пятую часть просторнее.

Разбор всех отклонённых вариантовClosed Forks §Форма и поверхность барьера, чтобы через полгода никто не начал заново предлагать грани.

Правит доки: VFX Language (§Барьер — числа формы), стенд docs/gamefeel-demos §Барьер (эллипс помечен принятым, рабочие сцены переведены на него).


2026-07-31 (ночь, 24) — поверхность барьера круглая и без углов; в покое только силуэт

Закрывает половину развилки, оставленной 2026-07-31/80: чем нарисована поверхность.

2026-07-31/89 — поверхность барьера КРУГЛАЯ, без единого угла. Дословно: «Поверхность - это практически вытянутый по высоте шар. Конус? Не знаю как назвать. Но кругая форма. Показывается подсвечивается лишь при ударе, как и говорили, а так - видно лишь силуэт», плюс «Какую форму взять корректно? Предложи. Именно что без углов». Отклонены оба гранёных варианта из стенда — «грани и полигон» (моя рекомендация, опиравшаяся на «цифра — язык перехода») и «стеклянные фасеты». Причина отклонения — за Максом; моя опора на цифровой язык оказалась слабее того, что гладкая скорлупа честнее сочетается с остальным джусом, который весь параметрический.

В покое видно только силуэт — тонкая линия контура, заливка почти нулевая. Подсветка приходит исключительно с ударом: пятно в точке контакта расходится волной по поверхности (чем слабее остаточная вспышка, тем шире фронт). Это уточняет 2026-07-31/80: «почти невидим» означает именно контур, а не приглушённый объём.

Термин для канона — «купол». Математически это вытянутый по высоте сфероид; слово «конус» не подходит (у конуса вершина), «шар» — тоже (он не круглый в проекции). Два предложенных соседа — чистый эллипс и кокон (суперэллипс с почти прямыми боками, углов нет ни у одного).

Ждёт вердикта: какая из трёх круглых форм. Моя рекомендация — купол-овоид: сужается к макушке на 26% и подрезан линией земли, поэтому не оставляет пустого воздуха над головой, не спорит с тенью и опирается на ту же землю, что юнит. Варианты в движении — стенд docs/gamefeel-demos §Барьер.

Что решение НЕ поломало: узор трещин (2026-07-31/83) живёт в геометрии купола, а не по граням, — и на гладкой поверхности работает даже лучше: узор задаёт линии разлома, поэтому при пробитии скорлупа расходится кусками именно этой формы, а не случайными обломками.

Правит доки: VFX Language (§Барьер — форма), стенд docs/gamefeel-demos §Барьер (три круглых варианта вместо гранёных, стопка переведена на гладкую).


2026-07-31 (ночь, 23) — блок стоит НА барьере: различитель это длительность и жест, а не сущность

Вопрос Макса: «Что если щит - это действие при блоке? У нас щас есть щитовик например что имеет анимацию защиты щитом. Как понимаю, барьер излишен?» Ответ нашёлся в коде, а не в дизайне.

2026-07-31/86 — барьер НЕ излишен: блок на нём и стоит. BlockComponent при срабатывании накладывает короткий щит-эффект (0.4 с в ассете «Оплота»), который и поглощает тот самый удар. То есть барьер — механизм, блок — один из способов его получить. Обратное неверно: вард Антимага, водяной щит Монаха и щит от нехватки HP живут вообще без жеста, а DoT будит барьер и не будит блок (IsDirectHit). Слить их значило бы остаться без ответа на вопрос, чем тик яда съедает щит.

2026-07-31/87 — блок и барьер различаются в показе ДЛИТЕЛЬНОСТЬЮ и ЖЕСТОМ, а не отдельным языком. Мигнувшая оболочка (0.4 с, узор не успевает проявиться) читается как «отбил»; висящая — как «под защитой». Одна система, два режима, ни одной новой сущности. Заодно объясняется, почему блок требует дееспособности, а барьер нет: жест поднимает носитель, поглощение — нет.

2026-07-31/88 — жест блока целится В ТОЧКУ УДАРА, но только когда удар пришёл спереди. Направление берётся оттуда же, откуда точка попадания (область корпуса со смещением к атакующему, 2026-07-31/28), поэтому наведение почти бесплатно: базовая поза плюс Aim части-щита — тот же приём, что у оружия. Ограничение названо честно: BlockComponent направление не проверяет и гасит любой прямой удар, включая в спину. Рисовать «подставил щит» на удар со спины нельзя — это ложь про разворот, поэтому там остаётся только вспышка оболочки. Оба случая — в стенде (§Барьер, кейсы «блок» и «удар со спины»).

Следствие для анимации: у Защитника два независимых заряда блока, значит два жеста могут пойти почти подряд и посреди собственного замаха. Жест обязан жить на верхнем слое и прерываться, иначе второй блок не покажется вовсе.

Открытая развилка: делать ли блок направленным в симуляции (тогда удар со спины не блокируется вовсе, и жест честен всегда). Это позиционная механика, она меняет баланс всех блокеров и упирается в позиционирование, которое само ждёт вердикта.

Правит доки: VFX Language (§Барьер — блок как режим), стенд docs/gamefeel-demos §Барьер (два новых кейса).


2026-07-31 (ночь, 22) — трещины барьера это УЗОР, проявляемый частями; оболочка на тип, вложенность = очередь трат

Продолжение 2026-07-31/81. По ходу разбора отменены два моих предложения — стопка пулов в симуляции и счётные трещины.

2026-07-31/83 — трещины барьера это ЗАГОТОВЛЕННЫЙ УЗОР, из которого показывается доля, а не набор отдельных трещин. Дословно: «Скорее у щитов должны быть заготовленные (процедруно) узор трещин. А мы просто показываем постепенно некоторую часть из них? Т.е. не “8 трещин”, а скорее от “видно часть” до “видно весь узор целиком”». Причина: у порезов на теле дискретность несёт смысл — каждый порез это удар; у барьера смысл другой, «насколько цел», то есть площадь, а не счёт. Счётные трещины ломались бы на двадцатом ударе: пришлось бы либо вытеснять старые (щит не заживал — ложь), либо упереться в лимит и перестать показывать разницу. Узор снимает и лимит, и вопрос композиции: он связный, поэтому распад идёт ровно по своим трещинам, а не по случайным осколкам. Три следствия, которые пришлось назвать отдельно:

  • Порядок проявления идёт от точек удара, а не по индексу. Иначе теряется «помнит, откуда бил» — то, что у счётных трещин было бесплатно.
  • Геометрия узора монотонна, яркость равна текущей целостности. Добавленный щит не имеет права стирать проявленное (трещины не заживают), но и «вот-вот лопнет» при крепком барьере — ложь. Широкая бледная сеть читается как «его сильно били, но сейчас он крепок» — тот же приём, что у гаснущих порезов.
  • Полный узор совпадает с пробитием, поэтому шкала не требует отдельной калибровки.

2026-07-31/84 — оболочка рисуется на ТИП щита, а не на эффект; вложенность равна очереди трат. Типы и цвета: обычный сероватый, физический оранжевый, магический фиолетовый (цвета Макса). Четыре налёта Антимага дают ОДНУ фиолетовую оболочку — игроку нужно «магией не пробить», а не «какой из четырёх сейчас тает». Значит оболочек максимум три, и вложенность постоянная: школьные снаружи, обычный ближе к телу. Разное время жизни и разные размеры внутри одного типа не показываются вовсе. Проверено в коде: порядок уже такой — RunPreDamage (школьные щиты) идёт до вычета общего пула в TickLedger, правка не потребовалась.

2026-07-31/85 — трещины есть только у оболочек, которые РЕАЛЬНО ели урон. Причина: пока внешняя цела, до внутренней урон не доходил, поэтому трещин у неё быть не может. Правило выводится из очереди трат и заодно закрывает вопрос перегрузки: одновременно треснутых максимум три, а на практике одна-две — чтобы треснули все три, нужен урон трёх разных типов. Показывать «трещины только у верхней» не понадобилось.

Стопка пулов в симуляции отменена (моё предложение). Дословно: «Хотя, у нас визуал всегда ПОСЛЕ боя. Значит в коде щитать можно обычно, сохранять данные для визуала и с ними как-то уже чет придумывать?» Причина: показ идёт по ленте, то есть по уже случившейся истории — ему нужен журнал событий (щит поднят: тип, величина · поглощено: тип, сколько · щит ушёл: тип, сколько унёс), а не структура состояния сима. Порядок трат остаётся какой есть, балансу ничего не грозит, состояние оболочек живёт в показе — ровно как порезы.

Находка по пути, не про визуал: ShieldComponent.OnExpire вычитает полный номинал щита, а поглощение уроном списывается из общего пула мимо эффекта. Поэтому «щит 100 + щит 500 → удар 200 → 500 истёк» даёт 0 вместо 100: кламп забирает чужой вклад. Лечится тем, что поглощение уменьшает HeldShield того пула, который съел. Заведено в docs/balance-issues.md.

Правит доки: VFX Language (§Барьер), стенд docs/gamefeel-demos §Барьер — двенадцать ситуаций от покоя до пробития насквозь.


2026-07-31 (ночь, 21) — барьер постоянный и почти невидимый; подсветка от поглощённого урона, остаток трещинами

Тема, отложенная в 2026-07-31/76. Разводится с блоком щитом-предметом (2026-07-31/11): здесь поглощающий барьер, EffectTag.Shield.

2026-07-31/80 — барьер висит ПОСТОЯННО, но в покое почти невидим; подсветка растёт от поглощённого урона и локальна в точке удара. По смыслу (дословник не сверен): «Барьер - постоянный. Но очень-очень незаметный в “пассивном” состоянии, если его никто не прокает. Чем больше урон блокируемый - тем сильнее подсветка (особенно в месте удара. Ну и эффект “разрушения” (если сломали) и “развеивания” (гаснет) если прошло время.» Плюс: «Если дамажит эффект - то подсветка (вспыхивание) по всему щиту, но слабее». Причина: сфера — самая большая площадь из всего, что мы рисуем, и постоянная яркая сфера перекрыла бы канал «Тело» (горение, яд, порезы оказались бы за стеклом). Почти невидимый покой снимает конфликт, не отказываясь от объёма. Разведение «удар в место» против «урона всюду» бесплатно даёт читаемость источника: DoT светит ровно по всей поверхности и слабее, потому что бьёт не в точку.

Моё предложение «сфера проявляется только на удар» отвергнуто — барьер обязан быть видимым как состояние, а не только как реакция.

2026-07-31/81 — остаток барьера читается ТРЕЩИНАМИ. Дословно: «Трещины по щиту?» Причина: прямая рифма с уже принятыми порезами (2026-07-31/50) — тело помнит бой порезами, барьер помнит его трещинами, и это один язык вместо двух. Заодно трещины дают готовый язык пробития. Отменяет мою «дистанцию, докуда добежала рябь»: та требовала увидеть волну целиком, то есть работала только в момент удара, а трещины видны всегда.

2026-07-31/82 — у барьера ДВА разных финала, и они обязаны читаться по-разному. Разрушение (сломали): трещины сходятся, поверхность разлетается по касательной от последнего удара — у слома есть направление, видно, кто добил. Развеивание (истёк): гаснет ровно, вверх, без осколков и без направления. Причина: «сняли» и «кончился» — разные тактические факты; одинаковый показ слепил бы их в один.

Стаки барьеров (Антимаг копит без потолка, 2026-07-31/71) показываются той же трёхступенчатой шкалой, что стаки статусов, — толщиной и плотностью каймы. Новой сущности не заводим.

Две связки достались бесплатно: серп обрывается о барьер так же, как о щит (2026-07-31/11 работает без правок, меняется только, обо что тормозит форма), и пореза нет — «нет вскрытия, нет пореза» распространяется на барьер само собой.

Ждёт вердикта: язык поверхности. Дословно: «Отрисуй варианты на сайте, скажу». Три варианта живут в стенде docs/gamefeel-demos §Барьер — грани и полигон, гладкое свечение с каймой, стеклянные фасеты.

Правит доки: VFX Language (§Статусы, барьер), Open Forks §2.5 (тема из отложенной стала «ждёт одного вердикта»).


2026-07-31 (ночь, 20) — пороги ступеней абсолютные и живут на статусе; шкала огня 1-9-30-100

Уточнение к 2026-07-31/78 в тот же вечер: Макс принёс шкалу числами и тем самым отменил мою формулу порога.

2026-07-31/79 — пороги ступеней задаются АБСОЛЮТНЫМИ числами на самом статусе, а не выводятся из потолка. Дословно: «Смотри, насчет 4 ступени на примере огня / 1 - мало (1-9) / 2 - средне (10-20) / 3 - много (30-99) / 4 - пасхалка (100-999) / Скорее так?» Причина: формула 2026-07-31/78 («10× балансного потолка») опиралась на существование потолка, а у Поджога его нет — стаков бывает 999. Абсолютные пороги вдобавок режут не порядок величины, а игровой смысл: норма, сильно, перекачано, поломка. Единой формулы на все статусы не будет — масштаб стаков у Изморози и Углей свой, поэтому четыре порога живут в SO статуса (играет ассет, не числа в C#).

Шкала Поджога — 1-9 / 10-29 / 30-99 / 100+. Диапазон второй ступени расширен с «10-20» до «10-29»: в присланной схеме 21–29 не покрывалось ничем, а 30 названо явно, поэтому дыра закрыта подъёмом верхней границы второй, а не опусканием третьей. Откат — одно число.

Четвёртая ступень открыта вверх: 999 — пример, а не граница. Иначе на тысяче стаков показ провалился бы в никуда, то есть ровно в том случае, для которого ступень заводилась.

Переход между ступенями — кроссфейд 0.15 с, а не переключатель. DoT тикает и добавляется, стаки ходят вокруг порога (29↔30), и на жёсткой границе тело мигало бы между состояниями. Пять кадров при 30 Гц — предел, ниже которого переход не заметен, выше начинает читаться как своя анимация.

Правит доки: VFX Language (§Стак читается тремя ступенями), стенд docs/gamefeel-demos §Статусы (шкала перестроена: стенды ходят по 4 · 17 · 52 стака).


2026-07-31 (ночь, 19) — стак читается тремя ступенями; четвёртая существует как пасхалка на сломе

Закрывает развилку, оставленную 2026-07-31/76: чем постоянный слой показывает число стаков. Варианты сравнивались в движении в стенде docs/gamefeel-demos §Статусы.

2026-07-31/77 — градация стака на теле — ТРИ ступени: есть / много / на пределе. Дословно: «Слушай, можно 3 ступени, да». Причина: глаз надёжно различает ровно столько ступеней яркости; непрерывная шкала формально честнее к модели, но 4 против 5 стаков в бою не читается — то есть шкала существовала бы ради себя. Вариант без градации отвергнут, потому что главный случай («третий стак Поджога, пора детонировать») уехал бы целиком в информационный слой, а он тумблер и по умолчанию выключен.

2026-07-31/78 — четвёртая ступень существует, но как ПАСХАЛКА на сломе, а не как продолжение шкалы. Дословно: «Правда у нас может быть иногда прям дофига (999, хихи), это мега редкие случаи и мб 4 ступень как этакую пасхалку?» Причина: абсурдный стак нельзя показывать «ещё ярче» — три ступени уже заняли шкалу читаемости, и четвёртая яркость размыла бы её. Вместо ступени тело меняет состояние: перестаёт «гореть» и становится источником (языки сходятся в столб выше роста, тело уходит в силуэт внутри пересвета). Три гарда, без которых пасхалка ломает язык:

  • Порог выводится, а не пишется числом: десятикратное превышение балансного потолка стака. [superseded 2026-07-31/79] — правило опиралось на существование потолка, а у Поджога его нет. Пороги стали абсолютными числами на самом статусе. Уцелевшая часть мысли: где стак ограничен балансом, порог недостижим и пасхалка не срабатывает вовсе — она живёт ровно там, где игра ломается по задумке (принцип «игра должна ломаться в задуманных местах»).
  • Число частиц не растёт — работает тот же потолок, что у искр (2026-07-31/12). 999 стаков не имеют права стать 999 частицами; растёт характер, не количество.
  • В язык читаемости четвёртая ступень не входит: важную информацию на неё вешать нельзя, её почти никто никогда не увидит. Свой тумблер обязателен, как у любого эффекта джуса.

Правит доки: VFX Language (§Статусы, градация), Open Forks §2.5 (развилка закрыта).


2026-07-31 (ночь, 18) — статусы: четыре канала вокруг тела, цвет от статуса, точность по тумблеру

Первый разбор постоянного слоя: до этого в бою статусы были невидимы вовсе (жили только дев-кольца CombatStatusOverlay по консольной команде). Отправная точка — зона E описи Toolbox: «у постоянного эффекта другая экономика внимания».

2026-07-31/72 — у СОСТОЯНИЯ цвет говорит, ЧТО происходит; палитра автора остаётся событию наложения. По смыслу (дословник не сверен): «Цвет у каждого обычного эффекта - свой! А вот у личных уник эффектов… в общем, мб будет от цвета юнита. Но общие - свой цвет. Статус красится статусом, как ты сказала». Причина: ось 2026-07-31/62 («цвет говорит, ЧЕМ ударили») решает опознание автора, а на висящем статусе игрок читает состояние цели — два яда разного цвета перестали бы быть одним понятием. Автор при этом не теряется: он отыгран вспышкой и искрами в момент наложения, где цвет бьющего остаётся в силе. Критерий раздела: общий статус — язык боя, уникальный личный эффект — язык персонажа. Гард: уникальный эффект, висящий на ЧУЖОМ теле, красится статусом невзирая на уникальность, иначе метка Следопыта и метка Варлока стали бы двумя разными понятиями. Практически палитрой юнита красятся почти только баффы на себя.

2026-07-31/73 — постоянный слой разложен на ЧЕТЫРЕ канала, и в канале не больше одного статуса. Каналы: воля (поза и темп самого тела — стан, сон, заморозка), тело (силуэт и его материал — горение, яд, изморозь, кровотечение, скрытность), снаружи (контур и над головой — щит, метка, усиление), земля (под ногами — замедление, корни). Причина: на одном юните законно висят пять эффектов, а юнитов восемь; без бюджета выходит ёлка. Каналы не спорят физически — это четыре разных места вокруг силуэта. Воля старше остальных (кто выключен, тактически важнее, чем кто горит), младшее в канале гасится, а не прячется: выключенный слой читался бы как «эффект слетел».

2026-07-31/74 — различитель статуса — вектор и темп движения, а не иконка. Вверх быстро — горит, вверх редко — отравлен, вниз — теряет, нулевое движение — окаменел, медленный пульс — выключен и цел, дрожь — выключен и мучается, орбита — помечен извне. Причина: движение ловится периферийным зрением раньше цвета и много раньше формы, а тела у нас 96 px и статус висит секундами. Следствие для Заморозки: ей нужен не эффект, а отнятие движения — абсолютный стоп-кадр среди шевелящихся читается быстрее любого свечения и стоит ноль частиц.

2026-07-31/75 — статусы «про движение» живут в канале ЗЕМЛИ; эхо-силуэты остаются за рывками. По смыслу (дословник не сверен): «Силуэты эхо - звучит! Правда, эхо силуэты еще планировались для быстрых рывков и прочего такого». Причина: эхо по природе — след быстрого движения, и приём, означающий одновременно «очень быстро» и «очень медленно», не означает ничего. Плюс дыра: замедленный юнит, стоящий на месте и бьющий, эха не даёт вовсе, а слоу застаёт его чаще всего именно так. Клякса под ногами работает в обоих случаях, а зона земли пустует.

2026-07-31/76 — точные числа живут в отдельном информационном слое, и он ТУМБЛЕР, а не удержание; пауза его сама не включает. По смыслу (дословник не сверен): «не надо АВТОМАТИЧЕСКИ на паузе показывать все эффекты. Вдруг визуал просто разглядывают? хихи. Просто кнопку переключатель (мб тогда не альт или шифт а z, например)». Причина: постоянный слой отвечает «что происходит и насколько плохо», точное число стаков и длительность нужны в момент разбора — держать их всегда значит вернуть иконочную ёлку. Моё предложение авто-показа на паузе отвергнуто верно: пауза у нас ещё и кадр, чтобы разглядеть бой. Клавиша — Z (Alt и Shift заняты жанровыми смыслами).

Почему НЕ копируем LoL (проверено по канону и вики): там статусы — иконки на HP-баре с цветокодом «зелёное хорошее / красное плохое» плюс отдельная настройка «Show Loss of Control UI». Задача другая: игрок ведёт одного чемпиона и ему нужен точный таймер на себе, отсюда иконки и цифры — и Riot пришлось выпускать инфографику-расшифровку, потому что в тимфайте система плывёт. У нас игрок командует восемью телами, и точность до четверти секунды ему не нужна. Взято два зерна: цветокод «хорошее/плохое» и принцип «самый важный плюс длительность». Правка Макса к принципу: важнейшее у нас часто не контроль, а стаки Поджога.

Ждёт вердикта: градация стака на постоянном слое (три ступени / непрерывно / без градации) — варианты живут в стенде docs/gamefeel-demos §Статусы, вопрос записан в Open Forks §2.5. Отдельной темой отложен щит как сфера, реагирующая на направление удара (просьба Макса разобрать позже).

Правит доки: VFX Language (раздел «Статусы»), Toolbox (зона E перестала быть пустой по дизайну — реализации по-прежнему нет).


2026-07-31 (ночь, 18) — свет не съедает форму; щит светится на блоке; контур каста снят

Приёмка свечения в play-mode. Уточняет 2026-07-31/59-62.

2026-07-31/66 — свечение не должно съедать спрайт: форма читается сквозь свет. Дословно: «Но можно как-то чтобы за свечением не терялся сам спрайт, его форма? Или думаешь лучше как щас?» Причина: плоская заливка светом поднимала тёмные пиксели наравне со светлыми, и клинок на пике терял гарду и грани — оставался светящийся прямоугольник. Свет теперь идёт по яркости самого арта, а доля плоского света — ручка (CastGlowFlatness, поставлено 0.35 по сравнению трёх рендеров).

2026-07-31/67 — щит светится, когда принял удар. Дословно: «Можешь сделать щит с таким же свечением при блоке?» Причина: блок уже говорил золотой вспышкой ТЕЛА, но сам щит в этом не участвовал. Теперь тот же свет, что у каста, цветом защиты, в момент поглощения. Барьер без щита в руках (эффект «Оплота») не светит ничем: врать, чем принят удар, нельзя.

2026-07-31/68 — контур каста на теле снят. Дословно: «А свечение юнита убери, хихи». Причина: после адресного свечения части контур силуэта стал вторым, конкурирующим сигналом на то же событие. Следствие, требующее решения: 2026-07-31/61 отдавал контур длительным баффам как их телеграф — теперь у них его нет. Записано в Open Forks.

2026-07-31/69 — свет идёт ПОЛНОСТЬЮ по арту: плоской доли нет. Дословно: «давай “0.0 — форма максимальная, свет суше.” И так замечательно, хихи». Причина: выбрано по трём рендерам одного меча, снятым уже с bloom. Плоская доля светила ярче, но съедала грани; при нуле свечение целиком повторяет собственную яркость спрайта, а нужную яркость добирает bloom. CastGlowFlatness = 0.

Правит доки: VFX Language (свет модулируется артом, блок светит щитом), Style SAO.


2026-07-31 (ночь, 17) — чем исполнен приём объявляет НАВЫК; роль боевая, часть находит тело

Реализация 2026-07-31/60 (светится часть-источник, а не «оружие»). Вопрос был мой: как приём называет свою часть, если расстановка у каждого юнита своя.

2026-07-31/63 — часть-источник объявляет НАВЫК, а юнит отвечает только «что у меня есть». Дословно (по прошлому разбору): «просто требовать указывать что в руке - какой тип… Если двуручка - то в левой руке и в правой одно и тоже». Причина: «виды юнитов по вооружению» — комбинаторный перечень рядом с фактическим содержимым рук, то есть второй источник правды. Юнит держит анатомию (что в какой руке и какого типа), навык — свой адрес. Настраиваемость «иногда щит, иногда одно из двух оружий» живёт на навыке и работает для любой расстановки.

2026-07-31/64 — адрес называется боевой РОЛЬЮ, а не узлом рига. Перечень: обычное оружие (по умолчанию), вторая рука, обе руки, щит, всё тело, «не светится». Причина: одно значение обязано лечь на разный арт — «вторая рука» у дуалиста это второй кинжал, у щитовика щит, у монаха кулак. Двуручное копьё остаётся ОДНИМ источником при любом адресе руки: иначе свет ляжет дважды по одному древку.

2026-07-31/65 — кулаки считаются оружием. Дословно (дословник не сверен): «Оружие (в т.ч. посохи, луки, мечи, когти, кулаги и тп)». Причина: у безоружного приёма источник обязан быть, иначе телеграф пропадает у целого архетипа; пустая рука отвечает самой кистью.

Ждёт вердикта: значение «всё тело» заведено технически, но дизайн-решения на него нет — 2026-07-31/61 отдал длительным баффам контур плюс пульс оружия. Вопрос «светит ли марш телом» записан в Open Forks §2.5.

Правит доки: Style SAO (адресация частью, а не ролью).


2026-07-31 (ночь, 16) — у накопления щитов Антимага один тормоз: длительность, а не потолок стаков

Разбор боевого дефекта (зеркальный бой расходился на Антимагах) вышел на карточку Эгиды: у «Отражающего налёта» тормоза оказалось два — длительность щита и потолок «до 10 штук».

2026-07-31/71 — потолка по числу щитов у налёта НЕТ; накопление тормозит только длительность. Дословно: «отражающий налет — убери инфу про “до 10 штук”. Там должен быть просто длительность щита, вроде?» Причина: у одного факта один владелец, а здесь силу кита ограничивали два числа сразу — и второе (потолок) в бою почти не срабатывало: щит живёт 6 сек, за это время четыре врага-мага успевают дать порядка четырёх кастов, то есть до десяти стаков дело не доходит. Снятие потолка балансно почти бесплатно, зато правило кита формулируется одной фразой: крепнет ровно настолько, насколько часто противник колдует. В ассете ArcaneWard потолок остаётся техническим (50) — как защита от бесконечности, не как балансный регулятор.

Правит доки: Relic - The Aegis (шаг 5 п.1).


2026-07-31 (ночь, 15) — надголовный UI: бары всегда видны, текст-имя убран, размер постоянный по экрану

Разбор скрина боя: надголовный UI в покое нечитаем (тайповые имена мелким кеглем), маны не видно, HP-полоса бедная, боевые цифры мелкие. Ресёрч жанра — TFT, Mechabellum, Dota Underlords, Backpack Battles. Это тот самый «реворк HP-полосок», до которого 2026-07-31/61 отложил судьбу hp-bar-punch и low-hp-pulse.

2026-07-31/67 — над юнитом НЕТ текста-имени. Совсем. Дословно: «Да, 100% убираем текст». Причина: ни один автобаттлер жанра не пишет имя над юнитом — опознание идёт силуэтом спрайта + цветом владельца

  • (позже) тиром; «GoblinArcher» 8-м кеглем не читается в толпе и есть чистый клаттер. Имя и детали живут в планируемой плашке инфы о юните и по наведению/паузе.

2026-07-31/68 — HP виден всегда; мана видна для юнита С пулом (даже пустым треком), безресурсному — не показывается (выбор A на развилке). Дословно: «хп бар надо видеть всегда» + на уточняющей развилке «А». Причина: убираем не бар, а текст. Юнит с пулом показывает мана-трек даже при нуле текущей — читается как «кто вот-вот кастанёт» (модель TFT: синяя мана стыкуется с HP); это уже поведение ManaBarView.Bind (прячет только при MaxResource ≤ 0). Чистый болванчик без способностей пула не имеет — пустая полоса под тем, кто не кастует никогда, была бы ложью и спорила бы с минимализмом /70. Первичная гипотеза «маны не видно = недоразводка» опровергнута: юниты тест-боя (GoblinArcher, BaseRelic) резурслесс по данным (_resourceType: 0, _abilities: [], нет MaxResource в стат-блоке), и бар честно молчит. Кода править не потребовалось; чтобы увидеть ману вживую — ставить в бой юнита с пулом (класс со способностью).

2026-07-31/69 — надголовный UI И боевые цифры держат ПОСТОЯННЫЙ экранный размер; зум на них не влияет. Дословно: «Не важно как приближаешь — размер хп баров должен быть одинаковый… Зум не должен влиять на размер» + «размер цифр урона — тоже постоянный». Причина: сейчас бары и цифры живут в мире и ужимаются вместе с камерой — в обзоре нечитаемы, а «качество» при наведении было просто зумом. Оговорка (отложено): на дальнем зуме постоянные бары начнут наезжать друг на друга — тогда добавим порог «на отдалении гаснут/сжимаются», не в первый круг.

2026-07-31/70 — минимализм: над юнитом ничего, кроме баров. Иконки класса/типа НЕТ. Дословно: «Иконку класса — НЕ надо. Минимализм. Мб потом добавим». Причина: чем меньше висит над головами, тем чище читается свалка; принадлежность уже несёт цвет самого бара, отдельный значок пока лишний. Рамку/вид HP-бара в этот заход не трогаем («рамку бара оставляем такую же пока что») — редизайн самой полосы отдельным разговором.

Отложено (по слову Макса «мб потом»): пип уровня/тира в рамке бара (трюк TFT — звёзды в health bar) и иконка класса/типа на торце. Оба — в Gamefeel - Backlog.

Слой — uGUI world-space, НЕ UITK: бары и цифры это HealthBarView / ManaBarView / FloatingText (TMP), контур gamefeel-vfx. UITK войдёт позже — для плашки инфы о юните.

Правит доки: реализация, тайминги, размеры — код (HealthBarView.cs, ManaBarView.cs, FloatingText.cs, CombatFeelConfig.cs); докстринги владеют механикой. Отложенный тир — 70-gamefeel/backlog-gamefeel.md. Владелец правды: код презентации; этот журнал — «почему».


2026-07-31 (ночь, 14) — аудит легаси-джуса под новую модель хита: корзины и снятия

Проход по всем ~28 боевым эффектам под новую модель хита (2026-07-31/6..12, vfx-language.md): что снять, что свести, что оставить. Раскладка целиком — рабочий реестр gamefeel-effects-rework-progress.md; сюда — только принятые вердикты с причиной.

2026-07-31/61 — hp-bar-punch, low-hp-pulse, hit-nudge сняты в легаси. Дословно: hp-bar-punch «убираем в легаси, мб потом»; low-hp-pulse «лишнее, думаю, пока в легаси»; hit-nudge «легаси». Причина: первые два почти не читаются на фоне цифр и вспышки тела; их судьбу окончательно решаем при реворке HP-полосок. Тумблеры выключаем, код пока не трогаем.

2026-07-31/62 — hit-flash делается белым; цвет школы урона переезжает на VFX удара. Дословно: «хит флеш - белый (хотя мб сделаем потом красным. но пока - белый)». Причина: по модели 2026-07-31/7 форма говорит КАК доставили, цвет — ЧЕМ ударили; носитель школы (яд/свет/тьма) — серп и искры, а не заливка тела. ResolveHitFlashColor по школе становится наследством. Красный вариант оставлен открытым.

2026-07-31/63 — hit-flash и impact-frame сводятся в один «белый удар-в-кадр». Причина: при белом hit-flash затухающая вспышка (0.25с) и резкий белый силуэт на 1–2 кадра — это один эффект в два слоя; два раздельных тумблера — наследство. Согласовано, реализацию обдумываем позже.

2026-07-31/64 — contact-dust и impact-dust сводятся в одну форму пыли на двух триггерах. Дословно (про дубль): «дублирование? втф». Причина: одна визуальная форма (пыль у ног) на двух поводах — старт/стоп бега и получение мили-удара; держать два отдельных префаба незачем.

2026-07-31/65 — hitstop под вопрос (НЕ финал): кандидат — оставить только на тяжёлых ударах и киллах. Дословно: «в легаси на обдумывание, надо ли оно нам». Причина: hitstop — соль удара в бою один-на-один, но у нас толпа на 30 Гц, и заморозка на каждом ударе даёт кашу микропауз по всей арене. Совсем снимать жалко — отсюда кандидат «только тяжёлые/киллы». Решение отложено.

2026-07-31/66 — telegraph-flash и guard-pose переезжают в слой эффектов способностей. Дословно: «гуд, войдет в эффекты способностей». Причина: подсветка тела на телеграфе и поза щита — это не общий per-hit фидбэк, а визуал конкретного приёма («Оплот»); их дом — будущий слой эффектов навыков.

Подтверждено без изменений: hit-squash («норм»), idle-breath, facing-flip-squash, kill-slowmo, finisher, вся стадийная смерть (anticipation → голограмма → вспышка → shatter). REWORK-заходы отдельными сессиями: hit-spark (из-за модели хита), лечение целиком (heal-flash + heal-vfx). IMPROVE, обсуждаем позже: impact-dust, muzzle, floating-text, cast-burst/cast-outline (как слой каста), screen-shake (Максу слишком слаб — поднять числа).

Владелец правды: реестр статусов — gamefeel-effects-rework-progress.md; тумблеры и числа — CombatFeelConfig.cs; дизайн форм — 70-gamefeel/vfx-language.md.


2026-07-31 (ночь, 13) — свечение части-источника при касте: профиль как у удара, часть = чем бьют

Разбор свечения оружия при касте (реф SAO). Уточняет 2026-07-31/13 (свечение оружия как отсутствующий шов) и 2026-07-31/17 (короткие всполохи на навыках, не постоянка) — не спорит с ними, а достраивает профиль, адресацию и цвет.

2026-07-31/59 — свечение наливается по профилю УДАРА (заряд за cast-time → пик на выпуске → спад); пассив светит как актив. По смыслу (дословник не сверен): «Пассив - изучи их. Это тоже активки, просто без маны, хихи. Светятся в момент применения. Т.е. как и актив». Причина: уточняет «короткие всполохи» из 2026-07-31/17 до профиля с зарядом — у навыка с cast-time всполох растягивается в наливающееся свечение и пик на кадре выпуска, у мгновенного (без каста) остаётся чистым всполохом. Пассив механически = активка без маны, поэтому визуально неотличим и отдельного профиля не требует — моё предложение дать пассиву свой пульс/ауру отклонено.

2026-07-31/60 — светится ЧАСТЬ-ИСТОЧНИК удара, а не «оружие». По смыслу (дословник не сверен): «Оружие (в т.ч. посохи, луки, мечи, когти, кулаги и тп), Щиты и прочие детали персонажа (например нога при ударе ногой, хихи)». Причина: расширяет 2026-07-31/13 от «свечение оружия» до любой доставляющей части — меч, посох, лук, коготь, кулак, нога при пинке, щит при щитовом навыке. Адресуем свечение по тому, ЧЕМ бьют, а не по держателю оружия. Инженерно: части скелета получают роль, свечение адресует набор ролей поверх общего BodyVisualState (надстройка, не второй канал — часть обязана и светиться сама, и вспыхивать со всеми при ударе); по умолчанию светится часть-носитель приёма.

2026-07-31/61 — длительный бафф/аура телеграфится КОНТУРОМ, а не свечением части. По смыслу (дословник не сверен): «Если общие баффы или чет длительное (марш, например) - то светится аутлайн и при касте (старте боя) небольшой пульс». Причина: свечение части — язык «направленный удар зреет»; у длительного эффекта без адресной части (марш, аура) этой части нет, поэтому он берёт уже существующий контур силуэта (_Outline / PlayCastCharge) плюс короткий пульс оружия на старте каста. Так свечение части остаётся узким языком и не размывается на любой каст.

2026-07-31/62 — цвет свечения = UnitData.VfxColor юнита; навык его не переопределяет. Дословно: «Цвет юнита (VfxColor)». Причина: держит консистентность со всем боевым VFX (цвет с юнита, решение 30.07) и не заводит цветовое поле в AbilityData/EffectData — лишний шов в data-authoring. Мой proposed про override цветом школы навыка отклонён.

Правит доки: VFX Language (новый раздел «Свечение части при касте» + строка «Каст» в словаре событий).


2026-07-31 (ночь, 12) — искр вдвое больше, порезов дюжина

2026-07-31/57 — количество искр удваивается: формула 6 + доля_HP × 120, потолок 48. Дословно: «Искр больше! Они же мелкие и пропадают быстро. Чуть ли не удваивай, если что откатим». Моя оценка (3 + доля × 60, потолок 24) была занижена: мелкая частица, живущая доли секунды, требует количества, чтобы вообще быть замеченной.

2026-07-31/58 — лимит порезов на теле 12 (диапазон Макса 8–12, взят верх). Дословно: «Лимит порезов 8-12. Они будут очень мелками. Опять, есличто откатим.». Моё снижение до шести отменено — оно опиралось на пиксельный порез, а порез гладкий (2026-07-31/53) и потому дюжина читается как «изрублен», а не как шум.

Оба числа приняты в режиме «если что откатим» — откат каждого стоит одной строки.


2026-07-31 (ночь, 11) — дуга за клинком возвращается: два эффекта в РАЗНОЕ время

Исправление моего неверного прочтения плюс четыре уточнения по порезам.

2026-07-31/52 — дуга за клинком НУЖНА как VFX; отклонён был только трейл. Дословно: «Я про “дугу за клинком”. Я скзаал что трейл (вариант 1) не надо, ибо это более плохая версия “дуги за клинком. А саму дугу за клинком - надо.». Я записала «дугу за оружием» как движение спрайта в анимации — это была ошибка чтения, и 2026-07-31/41 вместе с термином в словаре поправлены. Восстанавливает суть 2026-07-31/20, но по другой причине: слоёв снова два, однако конфликт двух центров решён не иерархией, а временем — дуга живёт на strike-фазе взмаха, серп начинается на кадре Hit. Одновременно их не бывает, поэтому спорить им не о чем. Следствие для промаха: дуга есть всегда, когда клинок махнул, — «дуга оружия в пустоту» из 2026-07-31/41 это именно она. Серпа, ядра и пореза при промахе нет. Дуга говорит «клинок прошёл здесь», и это правда даже при промахе; серп говорит «удар состоялся», и это было бы ложью.

2026-07-31/53 — порез рисуется гладко, в общем стиле джуса, а не пиксельно. Дословно: «Как и весь VFX, порезы НЕ в писксель арте, а в нашем SAO стиле». Снимает моё возражение про сетку 96 px: тонкий светящийся штрих читается там, где пиксельная царапина в один пиксель потерялась бы.

2026-07-31/54 — заживление пропорционально «запасу» пореза. Дословно: «если порез на 1000 хп, а хил на 400 - то его яркость снизится на 40%. И так до 0%… “заживление” не мгновенно, но быстро». Лучше моего предложения гасить по таймеру: здесь пропорция, а не секунды, поэтому мерцания нет и лечение читается как процесс. Отвечает на возражение о мигании при непрерывном хиле.

2026-07-31/55 — порезы это нарративный HP-бар, и так задумано. Дословно: «Порезы - это нарративный хп бар в каком-то смысле. И это же круто!». Возражение о дублировании индикации принято как замысел, а не как дефект. Осталось наблюдение: индикаторов здоровья становится три (полоса, порезы, пульс на низком HP) — избыточность третьего решается после появления порезов в игре.

2026-07-31/56 — порез от выстрела делается тем же приёмом, что у колющего: короткая зазубрина в линию рядом с точкой хита. Отдельного правила у дальнего боя нет.

Правит доки: VFX Language §Термины, §Два эффекта в разное время, §Порезы.


2026-07-31 (ночь, 10) — тело помнит бой: порезы накапливаются, хил заживляет старые

Разбор слоя искр, начатый с ресёрча эталона. Находка ресёрча: в SAO крови нет — вместо неё светящиеся красные прорехи на аватаре, а синие полигоны отвечают только за смерть. То есть у эталона два разных языка: повреждение красное и НА ТЕЛЕ, уничтожение синее и в воздухе.

2026-07-31/47 — заведён словарь терминов джуса. Прямая жалоба Макса: «у нас терминов нет норм, путаюсь». Канон: форма (серп / веретено / звезда), ядро (радиальная вспышка), искры (частицы прочь), порез (красная метка на теле), остаток (пыль и след), A / B (точки построения), дуга за оружием (движение оружия в анимации, НЕ эффект). Слово «разрез» изъято.

2026-07-31/48 — удар оставляет ПОРЕЗ, и порезы накапливаются на теле. Дословно: «Я бы хотел оставлять мелкие-мелкие порезики на модельке юнита. Такие вот как раз красные. Слабые, но заметные и видно что “юнита сильно ранили”». Порез несёт место, вес (долю HP удара) и порядок. Причина: состояние тела начинает рассказывать историю боя без полосы HP, и красное перестаёт быть разовым всплеском.

2026-07-31/49 — хил заживляет САМЫЕ СТАРЫЕ порезы. Дословно: «при хиле самые старые “исцеляются”… легонько записывает ранку, на сколько хп ранка, порядок и этим определяем как они заживляют». Лечение читается как процесс: тело чинится в том порядке, в каком его ломали.

2026-07-31/50 — цвет вскрытого красный у ВСЕХ юнитов. Дословно: «Пока берем что у всех цвет красный. Единая система. Потом мб поменяем». Моё предложение развести по видам (костная пыль у скелета, каменная крошка у голема, споры у гриба) отложено, не отвергнуто.

2026-07-31/51 — блок вскрытия не даёт; его искры пополам. Щит принял удар, тело целое, поэтому пореза нет. Искры — половина цвета блокирующего, половина цвета атакующего: в одном событии видно обе стороны размена. Это единственное место, где деление 50/50 принято, и оно осмысленно — у события два автора.

Инженерная цена, записанная сразу: порез это СОСТОЯНИЕ тела, а не событие, поэтому живёт в BodyVisualState через шов IUnitBodyVisual, а не в пуле эффектов. Нужен лимит списка (порядка 8–12 записей; вытеснение старых совпадает с логикой заживления), позиции обязаны идти из IRngService — порез виден долго и всем, а Random разошёлся бы между клиентами в кооперативе.

Правит доки: VFX Language §Термины (новый), §Порезы (новый).


2026-07-31 (ночь, 11) — Маскировка: четыре ступени с радиусом, обнаружение командное и не залипает

2026-07-31/46 — радиусы обнаружения назначены. Дословно: «Сильная - около радиус около 2, Средняя - 4, Большая - 6. Числа примерные». Инвиз расстоянием не обнаруживается вовсе.

2026-07-31/47 — скрытый выпадает из выбора цели, а прилетевший в него удар гаснет. По смыслу (дословник не сверен): «На момент автоатаки. Т.е. это обычно “я притаился перед нанесением удара”. Если его пытаются ударить и он уходит в инвиз - это уклонение. И должно работать как уклонение». Второе — краевой случай: враг занёс удар, пока цель была видна, и потерял её из виду до контакта.

2026-07-31/48 — обнаружение командное и не залипающее. Увидел один — видит команда; отошли все — юнит снова пропал. Личное обнаружение дало бы картину, которую нельзя прочитать глазами; залипающее превратило бы маскировку в «бесплатный первый ход и больше ничего».

2026-07-31/49 — маскировка слетает от своей атаки И каста.

2026-07-31/50 — «Скрытность» Убийцы становится потребителем Маскировки. По смыслу (дословник не сверен): «Невидимость как и писал - 4 уровень Маскировки». Тот же бафф урона и скорости плюс ступень Инвиз; отдельной механики невидимости больше нет.

Владелец правды: ConcealmentSystem и ConcealmentComponent, радиусы — SimTuningConfig (вкладка «Маскировка»), тесты ConcealmentTests.


2026-07-31 (ночь, 10) — парирование ловит прилетевший удар; окно 0.3 это щит, а не один отбив

2026-07-31/42 — триггер парирования — прилетевший ближний Удар, как у Блока. Дословно: «Первое - прилетевшим ударом, как блок». Отвергнута альтернатива «по намерению атакующего» (кто выбрал парирующего целью): она позволяла бы отбивать до попадания, но потребовала бы нового шва «кто в кого целится», а со шва по удару механика собирается из уже написанного.

2026-07-31/43 — окно 0.3 с гасит ВСЕ Удары, а не один. Выбрано против дефолта скрайба («один Удар, иначе это анти-серийный щит»). Следствие принято сознательно: против парирующего многоударная Атака теряет столько Ударов, сколько уместилось в окно, — то есть парирование сильнее всего именно против серий, и многоударным китам нужен другой ответ на него.

2026-07-31/44 — «+30% на 1 сек» это скорость ПЕРЕДВИЖЕНИЯ. Парировал копейщика — получил возможность до него дойти. Это ответ на «меня достают, а я нет», поэтому против равного по дальности бонуса нет вовсе.

2026-07-31/45 — микро-стан стал общим ассетом игры. effect.micro_stun, 0.4 с (было 0.25 внутри пассива Монаха). Число одно на игру: на него ссылаются и «Вихревой заход», и парирование. 0.4 выбрано потому, что стан обязан покрывать замах ускоренного удара, иначе у цели появляется свободный кадр ровно там, где его быть не должно.

Что осталось открытым: носителя у парирования нет — ни один кит его не объявляет. Пока не выдан киту, примитив в бою не участвует.

Владелец правды: ParryComponent / ParryWindowComponent, ассеты Effects/Parry и соседние, тесты ParryTests.


2026-07-31 (ночь, 9) — рекаст УСКОРЯЕТ фазы, а не снимает их; две ручки, обе общие

2026-07-31/39 — рекаст ничего не обрезает. Дословно: «Никакого “обрезает”. Наддо именно ускоряет! Я же везде это писал. Ускоряет!!! Примерно на х2 от оригинальных значений». Доигрыш прерванной атаки и замах вышедшего вне очереди удара остаются на месте и проигрываются вдвое быстрее. Причина: снятая фаза убирает окно, в которое противник успевает ответить, — ускоренная лишь сокращает его. На этом же держится соседнее правило: уже занесённый замах не ускоряется никогда, иначе телеграф крадётся задним числом и парированию не во что целиться.

2026-07-31/40 — чисел два, и оба общие. Дословно: «Лучше 2 разных числа. Пока временно оба - х2. Потом подкорректируем с позиции визуала и ощущения» и «Общая константа, это ведь общая механика». Ускорение доигрыша и ускорение замаха разведены (крутить их придётся под разное — «отпустил оружие» против читаемости телеграфа), но живут одной парой ручек на всю игру, а не полями кита.

2026-07-31/41 — снятие ожидания интервала остаётся частью рекаста. Без него ускоренный хвост просто раньше кончится, юнит встанет в боевое ожидание, и удар всё равно придёт по расписанию.

Следствие, вскрывшееся при реализации: ускоренный замах обязан сокращать весь свинг, а не переливать сэкономленное в доигрыш. Хвост меряется от контакта, поэтому по сырой формуле удар, вышедший вдвое быстрее, получил бы вдвое более длинный доигрыш — и весь выигрыш рекаста вернулся бы обратно тем же тиком.

Владелец правды: RuntimeUnit.RecastAttack, ручки — SimTuningConfig (вкладка «Рекаст»), инварианты — WindupAutoAttackTests (группа «Рекаст»).


2026-07-31 (ночь, 9) — нет контакта, нет формы; блок обрывает серп; гибрид смешивает ядром и каймой

2026-07-31/41 — форма принадлежит КОНТАКТУ, а не взмаху: на промахе её нет вообще. Дословно: «Если промаха нет, формы вообще нет, хихи. Хватит и просто дуги оружия в пустоту и надпись evade». Замещает 2026-07-31/23, где было записано обратное — «дуга рисуется всегда, когда махнул, а искры только при попадании». Причина замены: форма это заявление «удар состоялся», и на промахе она была бы ложью; движение оружия при этом видно само по себе, потому что это анимация, а не эффект. Форма при этом появляется ПОСЛЕ хита — сразу как нанесён урон, не раньше (уточнение Макса тем же ходом), и быстро прорастает за пару кадров. Поэтому вопрос «а что если промах» решается сам: к моменту старта результат уже наступил, предсказывать и стирать нечего, окно опережения ленты боя здесь не участвует. Следствие для авторинга: маркер StrikeStart нужен как ГЕОМЕТРИЯ (точка A, откуда пришёл клинок), а не как момент запуска — запуск один, кадр Hit.

2026-07-31/42 — блок ОБРЫВАЕТ форму о щит; оба поведения за тумблером. Заблокированный удар в тело не вошёл, поэтому точка хита у формы становится конечной, как у дробящего, и «пробил / не пробил» читается самой формой, а не только цветом вспышки. Дословно: «прекрасная идея! Давай! (сделай чтобы могли потом оба варианта могли включить, проверить их в действии и решить потом)». По умолчанию обрыв; окончательный выбор — после проверки в игре.

2026-07-31/43 — гибрид смешивает цвета способом «ядро и кайма». Выбран из четырёх нарисованных вариантов: показывает оба цвета одновременно в одном месте, что на форме длиной в четыре кадра надёжнее градиента вдоль. Остальные три — вдоль формы, поперёк толщины, слоями — не отвергнуты, а отложены («Про другие не забываем, но пока ток его берем»). Ядро при любом способе остаётся белым пересветом.

2026-07-31/44 — серия ударов рисует форму на каждый контакт, особого рисунка серии нет. Дословно: «Три атаки - три серпа. Все логично. Но обычно у таких атак урон мелкий - так что фигуры тоже будут мелкими». Размер уже идёт от урона (2026-07-31/37), поэтому мелкость получается сама.

2026-07-31/45 — форма замирает вместе с hitstop, а не живёт на unscaled. Удар залипает в воздухе на кадр, и это работает в пользу веса.

2026-07-31/46 — ядро попадания: радиальная вспышка, единственный собственный параметр — радиус. Своей формы по архетипу у неё нет (форму несёт серп), цвета — те же и тем же способом смешения.

Правит доки: VFX Language §Форма принадлежит контакту, §Блок, §Серия, §Hitstop, §Ядро попадания, §Гибриды.


2026-07-31 (ночь, 8) — форма проходит НАСКВОЗЬ; дальний бой в той же семье; числа назначены

2026-07-31/36 — точка хита лежит в СЕРЕДИНЕ формы у серпа и веретена, в КОНЦЕ у дробящего. Дословно: «у серпа и у веретена - точка хита - центральаня. А у дробящего - конечная», и до этого: «Серп чаще всего - будет сильно проходить через юнита, веретено - центрально проходит через удар. Т.е. проходит чаще всего вообще насквозь». Причина: клинок не встаёт в теле. Форма, кончающаяся ровно на цели, читается как «дотянулся»; проходящая навылет — как «рассёк». Уточняет 2026-07-31/30: A и B задают форму, но B — не её конец, а середина (кроме дробящего, где булава остаётся в точке удара, а дальше идёт звезда).

2026-07-31/37 — протяжённость, размер и толщина зависят от урона. Все линейные размеры множатся на вес удара (EvaluateHitVfxSizeMultiplier: 0.7 на лёгком, 1.0 на тяжёлом), пропорции при этом сохраняются.

2026-07-31/38 — линия-всполох дальнего боя это ТОТ ЖЕ процедурный колющий, только с нулевым прогибом. Дословно: «Линия всполох у атаки дальнего боя похожа на обычную колющую атаку (просто линия процедурная). Появляется после попадания в хит. Идет по направлению движения снаряда. Чтобы у дальнего боя была простая, но такая же система эффектов и все было едино». Точка хита у неё тоже центральная — снаряд идёт навылет. Причина: одна семья форм на весь бой; разница между серпом, колющим и линией — в числах, а не в коде.

2026-07-31/39 — гибриды смешивают цвета ГРАДИЕНТОМ, процедурно. Дословно: «это градиенты. Как именно - процедурка тож отвечает». Каким именно градиентом — открытый вопрос: вариант «ядро одного цвета, кайма другого» НЕ отклонён, он просто ещё не показан. Разбор вариантов — в стенде docs/gamefeel-demos/ §Гибриды.

2026-07-31/40 — «мимо брони» отдельного показа НЕ требует. Дословно: «Свет, тьма, Чистый - проблема тоже решается. По самой атаке легко понять». Снаряд света читается как снаряд, удар света в ближнем — как один из трёх архетипов. Моё предложение «эффект проступает внутри силуэта» снято; показ эффектов-способностей отложен как отдельная будущая тема.

Числа назначила я (стартовые, ждут приёмки глазами): режущий — полная длина 1.4 H, прогиб 0.20–0.28 H, полутолщина 0.055–0.075 H; колющий — 1.1 H, прогиб почти ноль, полутолщина 0.028–0.036 H; дробящий — 0.5 H до B плюс звезда радиусом 0.35 H; линия-всполох — вся дистанция выстрела, полутолщина 0.024–0.032 H. Толщина сходит к нулю на обоих остриях, ядро занимает внутренние ~55%.

Правит доки: VFX Language (§Серп, §Правила генерации, §Числа, §Дальний бой, §Мимо брони), docs/gamefeel-demos/ (раздел форм магии снят, добавлен дальний бой).


2026-07-31 (ночь, 7) — серп по двум точкам; формы под элементы отменены, элемент несёт цвет

Пересмотр после того, как Макс «долго думал». Отменяет часть решений того же дня — редкий случай, когда правка приходит до реализации, и именно поэтому она дешёвая.

2026-07-31/30 — серп строится по ДВУМ ТОЧКАМ: A (начало взмаха) и B (точка хита). Дословно: «серп строится не по реальному движению удара. А по закруглению от начальной позиции удара к моменту хита. Куда дальше идет меч, как завершает - это не важно». Причина: траектория зависит от клипа, клипы у юнитов разные и правятся; две точки — контракт, переживающий перерисовку анимации, и считается без сэмплирования кривой. Замещает 2026-07-31/20: связка «мазок поперёк + дуга от плеча» отменена. У неё было два разных центра, из-за чего потребовалась иерархия primary/secondary; с построением по A→B центр один, и надобность в иерархии исчезает вместе с проблемой. Слой остаётся ровно один.

2026-07-31/31 — три архетипа это ПРАВИЛА ГЕНЕРАЦИИ, а не три готовых знака. Дословно: «это не 3 одинаковых знака. Скорее это “правила для их генерации”. ЧТобы они были процедуреными, разными, но считывались хорошо и понятно». Каждый удар рисует свой знак; правило гарантирует читаемость архетипа. Ограничение остаётся прежним: генератор не вправе менять размер — он несёт вес удара (2026-07-31/28).

2026-07-31/32 — дробящий двухчастный: слабый серп плюс звезда в точке B. Уточнение к 2026-07-31/27: булава ведёт лёгкое движение и раскалывает в момент контакта, а не только раскалывает.

2026-07-31/33 — отдельных форм под элементы НЕ будет; предложение восьми форм магии отклонено целиком. По смыслу (дословник не сверен): «А вот для магии и тп - не надо в принципе… в ближнем бою у нас всегда есть физ элемент или понимание в какую из 3 этих форм можно подставить всё». Причина — разделение осей: форма говорит КАК доставили, цвет говорит ЧЕМ ударили. Матрица покрывается умножением, а не перечислением: серп × оранжевый — огненный меч, серп × голубой — ледяной, и новый элемент стоит одну строку палитры вместо нового эффекта. Работает потому, что юнит тематичен — Криомант ледяной именно потому, что он Криомант, поэтому «палитра бьющего» (2026-07-31/12) и «цвет элемента» — одно и то же.

2026-07-31/34 — дальний бой получает линию-всполох. Дословно: «Чаще всего стоит просто отрисовывать линию-всполох. Просто для “откуда пришла” и общего эффекта атак. Больше и не требуется». Причина: у выстрела нет взмаха, и рисовать ему дугу значило бы придумывать движение, которого не было.

2026-07-31/35 — гибриды получают цвет НА ЭЛЕМЕНТ, а не один на юнита. Удар, сочетающий стихию и физику (огонь плюс режущий), комбинирует два цвета. Способ смешения — открытый вопрос.

Осталось нерешённым: линия-всполох вместо полёта снаряда или в дополнение; способ смешения двух цветов у гибрида; чем показывается «мимо брони» у Света, Тьмы и Чистого — своей формы у них теперь нет, а факт остаётся невидимым (предложение «эффект проступает внутри силуэта» к новой модели прикладывается без конфликта, потому что это подача, а не форма).

Правит доки: VFX Language §Автоатака мили (переписан), docs/gamefeel-demos/ (раздел форм магии снят).


2026-07-31 (ночь, 6) — форма удара параметрическая: три архетипа одной семьи

2026-07-31/26 — мазок и дуга рисуются ШЕЙДЕРОМ на одном quad. Дословно: «Мазок именно рисуем сами. надеюсь?». Причина: форма считается в пикселе (SDF), параметры идут юниформами — это и есть принятая линия «гладкая форма без спрайтов» (2026-07-31/16). Отвергнут стек Shapes-мешей: плоская заливка без свечёного ядра плюс лишние draw call’ы на каждый удар.

2026-07-31/27 — форма зависит от типа урона, веса удара и геометрии; архетипов три, шейдер один. Заявка Макса: «он зависит от типа удара и урона, положения юнита атакующего (+ рандом)». Режущий — серп поперёк; колющий — узкое веретено вдоль вектора (укол не заметает, он входит); дробящий — звезда-трещина, дословно «как стекло бьётся»: 7–9 лучей неравной длины, внутренний радиус растёт, лучи рвутся от центра. Причина одной семьи: параметры (число лучей, кривизна, длина, толщина, разброс) покрывают все три, поэтому новый тип урона — новая комбинация чисел, а не новый ассет.

2026-07-31/28 — рандом не касается размера. Гуляют только угол (±10° у серпа, ±6° у веретена) и кривизна; у звезды неровность лучей и есть её характер. Причина: размер несёт вес удара, и случайный размер лишил бы игрока возможности прочитать по нему силу. Разнообразие уже даёт другой канал — точка попадания в области. Это моё возражение на «+ рандом» в исходной заявке: рандом принят, но не туда, куда напрашивался.

2026-07-31/29 — магия мазка не получает. У магического, светового и тёмного урона нет клинка, которым машут; «след лезвия» для них враньё. Их форма — отдельная строка словаря.

Правит доки: VFX Language §Форма — параметрическая, docs/gamefeel-demos/ (раздел «Три архетипа»).


2026-07-31 (ночь, 5) — взмах мили: мазок ведёт, дуга подкладывает, трейл отклонён

Первое заполненное событие словаря боевых VFX. Разбор шёл по живой покадровой демонстрации трёх вариантов на настоящем тайминге (30 кадров, контакт на 16-м) — она сохранена в docs/gamefeel-demos/.

2026-07-31/20 — форма взмаха собрана из ДВУХ слоёв: мазок поперёк (primary) и дуга за клинком (secondary). superseded решением 2026-07-31/30: слой остался один, серп строится по двум точкам. Дословно: «Дуга за клинком берем. Трейл - это лишнее и более слабое повторение дуги. И берем Мазок поперек». Причина иерархии (моя вводная, принята по умолчанию — отменяется одним словом): у слоёв разные центры — мазок стоит в точке контакта, дуга растёт из плеча бьющего, — и при равной яркости кадр читался бы как две вспышки в разных местах. Поэтому мазок яркий с белым ядром, дуга тусклее, без ядра и прозрачная у плеча: без этого градиента сектор залепляет тело и читается как второй удар.

2026-07-31/21 — трейл клинка отклонён. Дословно: «более слабое повторение дуги». Плюс он тянет в постоянное свечение, запрещённое решением 2026-07-31/17.

2026-07-31/22 — мазок остаётся в мире, а не едет за бьющим. Даёт ему остаться крупным, пока атакующий отходит после выпада.

2026-07-31/23 — дуга принадлежит ОРУЖИЮ, ядро и искры — ПОПАДАНИЮ. superseded решением 2026-07-31/41: на промахе формы нет вовсе, она принадлежит контакту. Разные владельцы, разные триггеры: форма рисуется всегда, когда клинок махнул, хит-эффект — только если удар вошёл. Причина: промах и холостой замах начинают читаться бесплатно (дуга есть, искр нет), а до этого промах не выглядел никак, кроме слова «evade». Соответствует правилу «показ подаёт, но не переписывает»: клинок действительно махнул.

2026-07-31/24 — попадание приходит в ОБЛАСТЬ корпуса со смещением к стороне атакующего. Идея Макса: «интереснее будет если для визуала мы будем бить не в одну цель, а в область… точка берётся чаще всего ближе к тому, где ударяющий». Убийца бьёт в спину, защитник в центр груди, копейщик снизу — к ногам. Причина: восемь ударов в одну точку HitPoint давали восемь одинаковых вспышек в одном пикселе. Инвариант: разброс идёт из IRngService, не из Random — иначе показ разойдётся между клиентами в кооперативе.

2026-07-31/25 — границы взмаха приходят из клипа отдельными маркерами StrikeStart / StrikeEnd, имена обязаны отличаться от Hit. Предложение Макса добавить два события в анимацию. Переименование контактного маркера MarkerHit выполнено тем же заходом (тех-журнал 2026-07-31-the-contact-marker-is-called-hit).

Правит доки: VFX Language §Автоатака мили (первое заполненное событие словаря), docs/gamefeel-demos/ (живая демонстрация).


2026-07-31 (ночь, 4) — форму делает шейдер, свечение живёт на навыках, диегетичность мягкая

Четыре вердикта по стилевым принципам джуса, вынесенные после ресёрча (LoL VFX Style Guide, диегетический интерфейс, разбор SAO).

2026-07-31/16 — форма эффектов гладкая и параметрическая; спрайтовые листы не наш путь. Дословно: «главдкая форма без спрайтов, чисто шейдеры и тп - это круто. Согласен. Я как раз за не классический пиксель арт, хихи». Причина: пиксельная текстура эффекта конкурирует с пиксельным юнитом за детализацию и проигрывает — юнит важнее. Свечение конкуренции не создаёт, потому что живёт в другом измерении (яркость) и на форму не претендует. Отвергнут спор «пиксельные эффекты против гладких» как неверно поставленный: слои надо разводить, а не выбирать между ними. Следствие: форму даёт Shapes и шейдер, спрайт остаётся только на характер, который светом не передать. Отменяет мой прежний proposed о поиске спрайтовых паков эффектов.

2026-07-31/17 — свечение частей тела — короткие всполохи на навыках, не постоянное состояние. Дословно: «я имел в виду именно короткие всполохи при навыках (активки и пассивки) с кд. Не на постоянке конечно же». Причина: базовая планка на «светится» съедает шкалу важности — ульте некуда расти, и это та же ловушка, что уже обойдена в правиле про насыщенность цвета. Носитель всполоха — срабатывание активки или пассивки с кулдауном.

2026-07-31/18 — диегетичность — мягкий ориентир, не HARD. Дословно: «Диегеничность - мягкий ориентир. Не столь важно, но учтем». Причина: линза полезна («что эффект сообщает»), но правом вето не наделена. Формулировка Макса, которая идёт вместе с вердиктом: «VFX должен давать инфу и быть красивым» — это два требования, а не выбор между ними. Моё предложение сделать диегетичность фильтром с правом отсечения — отклонено.

2026-07-31/19 — Light2D отложен сознательно. Дословно: «Свет.. обдумаем. Пока без него планируем, мб прикрутим позже». Причина: решение не «нет», а «не сейчас» — поэтому в реестре невыбранного свет переезжает из «не дошли» в «отложено», и планировать эффекты надо так, чтобы они работали БЕЗ него. Моя оценка «свет — самый большой невыбранный рычаг» остаётся в силе и записана.

Порядок работ: первым разбирается удар мили, не статусы. Моё предложение начать со статусов (информация важнее красоты) — отклонено.

Правит доки: VFX Language (новый раздел о форме), Style - SAO (три вердикта), Toolbox (реестр невыбранного).


2026-07-31 (ночь, 3) — SAO становится эталоном всего джуса; опись арсенала и зон

2026-07-31/13 — SAO — основной реф не только перехода арены, но и визуала боевых эффектов. Дословно: «Запиши основной реф - SAO. В визуале тоже к нему стремимся. Светящиеся части персонажа при кастах и тп». Причина: ресёрч показал, что работает в этом эталоне не неон, а диегетичность — каждый эффект там сообщение Системы, а не украшение: оружие светится потому, что система распознала приём, аватар осыпается кубами потому, что объект удалён. У нас уже есть безмолвная Система, язык verb(args) и цифровая подмена арены, поэтому реф не меняет стиль, а даёт имя тому, что наполовину построено. Из четырёх приёмов эталона один готов целиком (распад), второй готов по данным и не имеет носителя (цветовая подпись без трейла клинка), третий отсутствует как шов (свечение оружия отдельно от тела), четвёртый живёт в чужом контуре (плашки имён приёмов — narrative).

Не берём: гладкость 3D-аниме (у нас пиксель-арт, берём логику приёмов, не рендер), плашки имён на каждый удар (в SAO бьёт один герой, у нас четверо одновременно), плотность неона (кадр аниме нарисован под один момент, у нас реальное время).

2026-07-31/14 — плотность арены объявлена константой дизайна. Моя оценка «в кооперативе до тридцати двух юнитов» была ошибкой; Макс поправил: в гильдии всегда четыре «Сосуда», кооператив меняет только распределение управления между игроками. Причина записи: ошибка вела к неверному бюджету джуса — я закладывала запас на плотность, которой не бывает, и это стоило бы заниженной щедрости на каждом эффекте. Открытым остаётся другое следствие кооператива: замедление глобально, а смотрят четыре игрока в разные места.

2026-07-31/15 — арсенал и зоны описаны реестром. Заведён Toolbox: восемь инструментов с явным «чего каждый не умеет в принципе», пять видов реакции на момент (визуал / трансформ / время / камера / звук), десять зон от тела до света, плюс отдельный реестр невыбранного. Причина: половина плохих решений в джусе рождается из выбора инструмента, который физически не умеет требуемого — партиклы не держат форму, Shapes не держит текстуру. Опись отвечает на «чем это можно сделать» до спора о вкусе. Реестр невыбранного отделён сознательно: «не сделано» и «отвергнуто» — разные факты, и путать их дорого.

Опись вскрыла две дыры, которых не было ни в одном списке задач: Light2D в проекте ноль экземпляров при 152 масках света на диске, и боевой показ статусов отсутствует — яд, стан, щит рисует только dev-оверлей по консольной команде, то есть в настоящем бою они невидимы.

Правит доки: Toolbox (новый), Style - SAO (новый), Time & Camera (плотность арены исправлена), Gamefeel - Index, MOC.


2026-07-31 (ночь, 2) — джус получает свой кластер; реестр хранит назначение, а не инвентарь

Тема пришла жалобой на боевые VFX («мелкие, не то, что хотелось»), а уткнулась в другое: разбор показал, что спеки на боевые эффекты не существует нигде. Записан был только цвет; как эффект выглядит, насколько крупен и как быстро живёт — не отвечал ни один док. Формулировка Макса: «у нас негде в ГДД не прописаны VFX. Как должны выглядеть, на сколько масштабно, быстро и тп».

2026-07-31/9 — джус переезжает в свой кластер 70-gamefeel. Туда уехали три файла из 10-vision (цвет эффектов и два бэклога), туда же легли новые: язык эффектов и палитра сырья. Причина: джус перерос статус подраздела визуального видения — под ним живут эффекты, партиклы, свечение, тряска, замедление и реакции камеры, а главного документа не было вовсе. Прежняя раскладка не имела дома для вопроса «как выглядит удар», и вопрос просто не задавался.

2026-07-31/10 — владелец кластера — контур xgaida-x-nixi-gamefeel-vfx, а не писарь ГДД. Решение Макса: «писарь ГДД больше про чистый геймдизайн, баланс, механики». Причина: в джусе дизайн и реализация неотделимы — тайминг эффекта одновременно и дизайн-решение, и число в конфиге. Развести их по двум скиллам значило бы развести один факт по двум головам. Прецедент тот же, что у narrative с кластером 60-narrative.

2026-07-31/11 — реестр в кластере хранит НАЗНАЧЕНИЕ, а не инвентарь. Заказ звучал как «чтобы там хранилось заодно, что у нас вообще есть на проекте». Записано иначе: полный список ассетов остаётся за Reference - Asset Inventory, а в Asset Palette живёт связка «роль → файл». Причина: второй список тех же файлов стал бы вторым владельцем факта и разошёлся бы с первым на первом же паке. Назначение ролей — самостоятельный дизайн-факт, и другого дома у него нет.

2026-07-31/12 — цвет искр попадания остаётся палитрой БЬЮЩЕГО. Вопрос переоткрывался («частица с цветами типа урона»), вердикт — не менять решение от 30.07. Причина: тип урона уже говорит вспышкой тела по школе, а палитра бьющего несёт личность юнита; отдать искры типу значило бы сказать одно дважды и потерять второе.

Не принято, лежит как proposed: каркас четырёх ролей (ядро / форма / осколки / остаток), трёхстадийный тайминг и шкала масштаба в долях роста юнита — записаны в VFX Language как предложение и ждут разбора словаря событий.

Правит доки: Gamefeel - Index (новый), VFX Language (новый), Asset Palette (новый), MOC (раздел 70, 10-vision укорочен), три переехавших дока (шапки и тайтлы под кластер).


2026-07-31 (вечер) — защита золотая, блок сверкает, стан Решительного удара — секунда

2026-07-31/5 — золотая только ВСПЫШКА НА ЮНИТЕ, интерфейс защиты остаётся синим. Дословно: «Защита - это желтый-золотой эффект, а не синий», и уточнение следом: «И почему цифру урона поменяла? Должны быть синими. я говорил только про VFX на юните!». Первая попытка перекрасила саму роль --gm-color-combat-shield и утащила в золото заодно полосу щита и цифру поглощённого — объём был взят шире просьбы. Итог: ролей две — --gm-color-combat-shield (лёд, интерфейс) и --gm-color-combat-block-flash (золото, вспышка тела). Разные факты, и сводить их в один токен значит запрещать им расходиться.

2026-07-31/6 — яркость вспышки блока: как у прежней синей, не выше. Дословно: «Куда такое свечение? Надо было как синее раньше по яркости! Не больше!!!». HDR-вариант (флар яркостью 2.2 за порогом bloom) отвергнут и снят.

2026-07-31/6б — настоящая причина: вспышка была завязана на ПОЛНЫЙ блок, которого до активки не бывает. Дословно, трижды: «визуал не работает ДО применения активки». Живая трасса боя подтвердила: каждый удар до активки — частичный блок (щит гасит 50, ~14 проходит в HP), поэтому условие «полный блок» (HpDamage <= 0) ложно, и вспышка молчит. Только ослабление цели «Решительным ударом» на 30% роняет входящий ниже щита, удар гасится целиком — и вспышка впервые срабатывает. Исправлено: вспышка играет на ЛЮБОЕ поглощение щитом (ShieldDamage > 0), с первого удара. Это обычная вспышка тела нормальной яркости, перекрашенная в золото — исходный синий вариант, просто в цвете защиты. Промежуточные попытки (HDR-флар, затемнение тела с отдельным тинтом щита) отвергнуты и сняты: причина была не в силе свечения, а в условии показа.

2026-07-31/6а — вспышка защиты играет на ФАКТ срабатывания щита, а не на полный блок. Дословно: «Эффект теперь не всегда есть почему-то при блоке». Причина: условие требовало, чтобы удар был поглощён ЦЕЛИКОМ (HpDamage <= 0), а щит Оплота — 50 единиц плюс доля недостающего HP против авто-атаки на 109, то есть целиком он удар почти никогда не съедает. Теперь вспышка идёт на любое срабатывание щита (ShieldDamage > 0); пробили его или нет, читается остальным — искрами, отбросом и цифрой HP, которые по-прежнему гаснут только на полном блоке.

2026-07-31/7 — стан «Решительного удара» — 1 секунда. Было 0.5 и в карточке, и в ассете; Макс поднял до секунды. Карточка Bulwark обновлена, ResoluteStrikeStun в движке тоже.

2026-07-31/8 — «Решительный удар» это не способность, а усиленная авто-атака. Дословно: «Это не способность. Это автоатака обычная и точка. Просто усиленная атака». Разбор кода показал, что в движке она реализована ровно наоборот — самостоятельным мгновенным ударом (_castSeconds: 0, эффекты применяются в момент каста, связи с авто-атакой нет), из-за чего у неё нет ни замаха, ни анимации. Механизм для правильного поведения в движке есть — EmpowerNextAttackComponent и поля EmpowerDamageMult / NextWindupMult у RuntimeUnit. Переделка отложена (займётся отдельная сессия), расхождение занесено в реестр расхождений.


2026-07-31 (ночь) — удар приходится на вход в дистанцию; щит перестаёт моргать до удара

Контекст: Макс смотрел бой в игре и выдал четыре замечания по подаче — три из них оказались про одно и то же, про щит.

2026-07-31/1 — удар случается в момент, когда дистанции хватило, а не после остановки. По смыслу (дословник не сверен): «атака должна считаться так, чтобы атака была сразу при достижении нужной дистанции. И визуал и сим». Механизм для этого уже был — замах, начатый за границей досягаемости, с кадром контакта на въезде в неё, — но выдавался он только разогнавшимся. Все остальные добегали, тормозили и лишь потом начинали замах: удар приходил заметно позже момента, в который выглядел заслуженным. Теперь въезд полагается каждому подбегающему бойцу ближнего боя. Цена названа: мили начинают бить раньше на длину замаха, и это сдвиг боевой математики, а не только картинки — заведено на замер (BAL-019).

2026-07-31/2 — удар с разбега покупается ВЪЕЗДОМ, а не набранным разгоном. Заряд переживал остановку, поэтому «добежал, встал, ударил» считалось разбегом: юнит стоял на месте, играя клип рывка, и получал укороченный замах. Отвергнута мягкая правка «чинить только показ, механику оставить» — она сохранила бы расхождение между тем, что видно, и тем, что посчитано. Разбег теперь гаснет вместе с прибытием.

2026-07-31/3 — барьер подводится ПОЗОЙ, а синее моргание переезжает на блок. Вспышка щита играла как предупреждение перед барьером и читалась как сам удар — предупреждение спорило с событием, о котором предупреждает, а при барьере раз в 0.4 секунды просто мигало. Решение Макса: моргание срабатывает при БЛОКЕ, вместо хит-эффекта. Заблокированный удар теперь подаётся синей вспышкой и цифрой поглощённого — без искр и без отброса тела (тело удар не приняло), но с выпадом бьющего и hitstop: кто-то ведь ударил, и у столкновения есть вес.

2026-07-31/4 — подводка «Оплота» 0.3 → 0.6 сек. Щит должен стоять заранее, а не приезжать вместе с ударом. Окно опережения показа — 10 секунд, так что предел здесь не технический; 0.6 выбрано как вдвое раньше прежнего при жизни самого барьера 0.4 сек.

Правит доки: карточки не тронуты — ни одна не описывала ни тайминг замаха, ни подводку щита. Владелец правды: AutoAttackSystem.ChargesIntoReach, RuntimeUnit.ChargingIn, BattleTelegraphPresenter, BulwarkShield.asset, тесты ChargeAttackTests.


2026-07-30 (ночь, 5) — яд остаётся тегом, но расхождение с типом теперь падает тестом

Контекст: после того как «Кровавый обмен» Десятины перевели на фильтр по типу урона, Макс задал общий вопрос — «яд теперь тоже тип урона, проверь везде». Проверка нашла расхождение и три вранья в доках.

2026-07-30/20 — «Ядовитая печать» Клыка считается ядом. Печать била обеими половинами яда (PoisonPhysical + PoisonMagical), но тега Poison не несла, поэтому не попадала ни в счёт уникальных ядов Друида, ни под «Взрыв спор» — при том что второй источник яда заведён ровно ради этой синергии (2026-07-29/4). Тег проставлен.

2026-07-30/21 — тег яда остаётся, и остаётся ручным. Скрайб предлагала вывести Poison из типов урона компонентов, чтобы у факта «это яд» был один владелец. Отвергнуто Максом: тег и тип отвечают на разные вопросы — «что висит на цели сейчас» против «чем ударили», — и механики яда (детонация «Взрыва спор», AI-фокус «целься в неотравленного», диспел по категории) спрашивают именно состояние. Вывод из типа вдобавок сделал бы невыразимым ядовитый дебафф без урона — заявленный анти-хил яда именно такой. Цена решения названа и оплачена: раз тег ставится руками, разойтись с типом он может молча, поэтому инвариант закрыт сторожем в тестах, а не внимательностью автора.

2026-07-30/22 — «Гниль» бьёт поровну физическим и магическим ядом. Карточка Клыка обещала «12/сек, половина магическим», ассет давал 12 целиком физическим. Вердикт Макса: права карточка. В ассете два периодических компонента по 6 dps. Это и держит заявленную идентичность кита — единственный, кто гложет обе брони пассивкой, а не только печатью.

2026-07-30/23 — сила кровотечения в «Жилах» пишется от наносимого урона до защиты. Формулировка Макса дословно: «накладывает эффект “Кровотечение” на 30% от наносимого урона (до учёта защитных показателей)». Прежнее «30% нанесённого ею урона» врало: доля считается от урона автоатаки по статам, потому что тик крови сам режется физбронёй, и доля от прошедшего означала бы двойное гашение (против танка кровь потеряла бы три четверти силы).

2026-07-30/24 — у Десятины нет и не было пробития брони; шред снят целиком. Шаг 4 карточки обещал «пробитие брони 2.5% за удар», движок делал обратное — дебафф effect.stone_crush на цели (−2.5% физброни за стак, до 40 стаков). Вердикт Макса: «пробития брони нету в принципе, удали лучше» — вся механика ближней формы живёт в навыках Шага 5, и шред там не прописан ни строкой. Это легаси Геоманта, того же рода, что и убранный 2026-07-30 дробящий урон: стояло в шаге 4 по инерции и ни одним навыком не подтверждалось. Ассет удалён, из ближней стойки и реестра контента выписан.

2026-07-30/25 — в упор Десятина бьёт БЛИЖАЙШЕГО. Прежнее «больше всего брони» держалось единственным обоснованием — «там смысл шреда»; шреда не стало, не стало и причины. В упор кит оказывается не по выбору, а потому что до него дошли. Вместе с фокусом снят и режим TargetingMode.HighestArmor, заведённый под шред часом раньше и оставшийся без потребителя.

Правит доки: The Fang (шапка, шаг 4, «Гниль»), The Tithe («Жилы» + описание Кровотечения), Relic - Implementation Status (хвост про яд Клыка устарел). Владелец правды: VenomSeal.asset, Rot.asset, тест DamageTypeCoverageTests.EveryPoisonousEffect_CarriesPoisonTag.


2026-07-30 (ночь, 4) — канал автоатаки как фаза ритма; у Десятины две формы вместо обеих сразу

Контекст: у Десятины формы существовали только на бумаге — в ассете была ОДНА автоатака, на которой висели эффекты обеих форм сразу. Разбирая, чем должен быть «поток (канал)» из карточки, Макс задал модель сам, и она оказалась лучше предложенной скрайбом.

2026-07-30/13 — канал авто-атаки это ФАЗА ритма, а не отдельный ритм. Формулировка Макса: «должен быть урон мгновенно, и должна быть стадия взмаха начальная — обычно сильно дольше, чем обычно, — и стадия рекавери аналогично дольше. А между атаками — тики». То есть Замах → Канал → Хвост встаёт внутрь существующего цикла атаки. Отвергнут вариант скрайба «частые снаряды-капли, поток — язык показа»: снаряд по природе дискретная посылка со временем полёта, и потока из посылок не выходит.

2026-07-30/14 — тик канала это обычный удар, и потому канал не обходит классовый коридор. Второй формулировкой Макса — «скорость атаки это расстояние между тиками урона» — модель закрылась сама: при уроне тика, равном урону удара, DPS канала равен норме кита и считается той же формулой, что у всех. Отвергнуто «своё поле DPS канала» (предлагал Макс, снял после возражения): у этой величины уже есть владелец — пара статов, которую читают стенд и ClassBalanceConfig, — и второй владелец разошёлся бы с ним на первом же прогоне, как уже разошлись нормы в карточках. Цена канала — занос и сворачивание, в которые кит не бьёт вовсе: средний DPS тем ниже нормы, чем чаще поток срывают. Разрыв — без рефанда (вердикт Макса): часть тиков урона прошла, атака состоялась частично.

2026-07-30/15 — форму держит СТОЙКА, и она переписывает профиль целиком. Дальняя форма Десятины — кровавый поток (Кровотечение, дальность 8), ближняя — колющие выпады со шредом брони (дальность 1), порог 3 с гистерезисом до 4.5. Дробящий урон убран совсем: он был легаси Геоманта, карточка его нигде не просила, а в шапке карточки он стоял по инерции. Дальность и темп переехали из кита в формы — у величины, которая у каждой формы своя, не может быть владельца в ките.

Что осталось долгом, а не сделано: «Жилы» (условие «пока HP выше 30%», плата 4% макс HP за удар, кровотечение силой 30% от удара) и разный фокус авто-атаки по форме — фокус живёт в AIProfile, который мозг читает один раз при сборке.

Правит доки: The Tithe (шапка и шаг 4), Relic - Implementation Status, Meta - Open Forks §2.5 (четыре рабочих числа форм ждут приёмки); инженерная сторона — записи «Channelled Attack Is A Phase, Not A Rhythm» и «Attack Form Is A Snapshot The Stance Sets».


2026-07-30 (день) — OST: каркас SAO живёт в верхах стаккато, гитара принята добавкой, тариф Suno закрыт

Первые прогоны боссовой темы в Suno. Записи /16-/18 — вердикты Макса на слух, /15 и /19 — организационные.

2026-07-30/15 — Suno берём Pro ($10), Premier покупается позже и на один месяц по триггеру. Триггер один: мотив утверждён, и на сборке слоёв в FMOD выяснилось, что раздельная генерация состояний не сходится без слышимого шва — тогда нужен Premier-овский Advanced Split, месяц, и назад на Pro. Почему: права, v5.5, WAV и параллельные генерации на тарифах одинаковые. Premier добавляет три вещи, и две нам не нужны: Studio — оффлайн-компоновщик, дублирующий то, что FMOD делает в рантайме (купить его значит перенести решение из рантайма в экспорт, то есть ухудшить), плюс он в бете с 2025; 10 000 кредитов — не аргумент, add-on пакеты продаются и на Pro, а весь заход по теме ест ~1300-1800 из 2500. Третья, Advanced Split, единственная реальная: на Pro стемы — это сепарация с артефактами (слышны, когда слой гаснет живьём), на Premier — регенерация партии заново, чисто, но не 1:1 с оригиналом, поэтому мешать её с остатком нельзя.

2026-07-30/16 — каркас Кадзиуры живёт в ВЕРХАХ и в стаккато; низ, тайко и литавры к нему не относятся. Замещает описание каркаса, которое стояло в контракте аудио-скилла и в брифе (superseded): там было «струнное остинато у низких, тайко и литавры». Почему: промпт, собранный по той строке, дал вердикт Макса «музыка для боя в Риме, гладиаторская». Строка была домыслом. Разбор есть — Jocoy & Hoffer, Composer Kajiura Yuki and neo-medieval anime soundtracks (Mutual Images 11, 2023) перечисляет пять маркеров стиля: модальные лады, высокие женские голоса парами, высокие инструментальные тембры, фолковая мелодика, движущая перкуссия фоном. Прежний промпт не содержал ни одного. Побочно подтвердилось наше собственное решение: её выдуманный язык Kajiurago («lyrics have no meaning», вокалистам дана свобода фразировки) — тот же приём, что наш конланг, значит он подпёрт рефом, а не выдуман нами.

2026-07-30/17 — боевое ощущение даёт АРТИКУЛЯЦИЯ, а не регистр. Уточняет /16: поднятый регистр сам по себе задачу не решил. Отвергнуты как носители темы флейта и соло-скрипка (вердикт Макса: «слишком много дудки», «не боевая, а просто баллада», «скрипка лишняя вот вообще, слишком фэнтезийно стандартный вайб»); отвергнут размер 6/8 — тянет в балладу. Почему: флейта и соло-скрипка тянут длинные ноты легато, отсюда протяжное «ууу», долгий разгон и балладность. В Swordland верх тоже есть, но он стаккатный — струнная секция короткими штрихами гонит ритм, а не поёт линию. Марш при этом делали тайко и низ, а не размер 4/4, поэтому 4/4 вернулся без риска.

2026-07-30/18 — электрогитара принята в базовый состав как ДОБАВКА, не как лид. Вердикт Макса по гитарному варианту: «гитара звучит как добавка — оч круто». Третьим рефом добавлен Windblown, но как функция, а не состав: «вокал и его сочетание с эпичной музыкой, то, как песни передают настрой и заряжают игрока». Почему: гитаре дают вести — она забирает тему целиком, и высокий верх, ради которого всё перестраивалось, исчезает. У Кадзиуры она и работает поверх каркаса, а не вместо него. Windblown разложен на слои потому, что его OST написал Danger и база у него электронная: берём градус и роль голоса, синтезаторы в палитру не переезжают. Реф работает как вопрос к готовому треку — «заряжает или просто красиво звучит».

2026-07-30/19 — у OST-материалов четыре дома, и промпт-пакет больше не ведёт историю правок. Требование Макса: «не пиши сюда в один файл что поменялось и почему, веди журнал как в тех или в гдд».

ФактДом
актуальный промпт, настройки, что слушатьdocs/ost-prompt-pack.md — инструмент, только текущее состояние
сырые прогоны: блок, seed, странность, вердиктdocs/ost-run-log.md — данные замеров
решение и что отверглиэтот журнал
проверенное ушами ПРАВИЛО промптинга.claude/skills/xgaida-x-nixi-audio/references/suno-prompting.md
замысел: закон трека, рефы, роль вокала.../references/voice-and-music.md

Почему: пакет промптов — то, из чего копируют в интерфейс. История правок внутри него делает рабочий файл нечитаемым и заводит второго владельца факта: при следующей итерации промпт и врезка о прошлой итерации расходятся. Это ровно та же болезнь, от которой правило 5 вылечило карточки контента (2026-07-30/1).

2026-07-30/20 — боссовая тема «нежная и сильная»: сила приходит АРКОЙ, а не плотностью. Формулировка Макса: «эльфийская, лирическая, но с силой — нежная и сильная». Вердикт по третьему прогону, где ставка была на энергию: «как будто песня про мехов, хихи. Слишком активная. И будто много барабанов или чего-то такого». Уточняет /17. Почему: три прогона прошли по одной оси — убрал драйв, получил балладу; добавил, получил боевик. Ось выбрана неверно. Сила в этом каркасе приходит от голоса и гармонии и подаётся аркой (тихо → мощно), а не ровной плотностью ритм-секции. Отсюда два следствия для промптов: слов про энергию в промпте должно быть мало (четыре указания разом складываются в боевик, и общий совет гайдов тот же — «слишком busy, убери половину дескрипторов»), а динамика задаётся тегами интенсивности в поле Lyrics ([Verse - Intimate], [Chorus - Powerful]) — приём найден 30.07.2026 и раньше нами не использовался.

2026-07-30/21 — тон боссовой темы: эпик «на грани смерти», а не триумф. Слова epic и anime из промптов вычеркнуты. Вердикт Макса по четвёртому прогону: «слишком аниме, слишком добренько-яркие… у нас реф — аниме, но там эпика как раз не было особо. Точнее был, но он был на грани смерти. Это НЕ хихи, эпик, всё круто». Уточняет /16-/20. Почему: в Suno epic — модификатор трейлерной мажорной грандиозности, anime тянет в J-pop яркость; вместе они дают ровно ту бодрость, которую Макс отверг. Тон рефа устроен иначе: обзоры SAO S1 описывают музыку как баланс «героической решимости, нужной чтобы выжить в игре на смерть, с эмоциональным весом отчаянного положения» — две краски одновременно, решимость и меланхолия. Замена в промптах: cinematic battle score, desperate and determined, melancholic undertone; в Exclude — triumphant fanfare, bright major key, j-pop, cheerful.

2026-07-30/22 — заведён ЭТАЛОН ТОНА как отдельный якорь; имена композиторов в промптах запрещены. Требование Макса: «запиши конкретно всё, что узнаешь, а то который раз не туда уезжаешь». Почему: четыре уезда подряд (Рим, баллада, мехи, добренькое аниме) имели одну общую причину — тон нигде не был зафиксирован конкретно и реконструировался из переписки заново перед каждым промптом. Теперь он живёт разделом «ЭТАЛОН ТОНА» в voice-and-music.md: одна формулировка цели, таблица всех четырёх уездов с вызвавшими их словами, целевая палитра «берём / не берём» и список стоп-слов. Отдельно HARD: имена композиторов и артистов (Yuki Kajiura, Lorien Testard, Danger) в промпт не пишутся — после разбирательств с лейблами Suno считает это импersonation’ом, отклоняет промпт и выдаёт аккаунту страйк, а страйк уносит библиотеку и права на всё в ней. Правильный путь — описывать музыкальную ДНК по формуле «характер + подача + обработка».

2026-07-30/23 — состав зафиксирован каноном; лид — ЧИСТАЯ электрогитара, «нежная эльфийская». Требование Макса: «надо сначала решить какие инструменты, чтобы их чётко прописать. А то ты теги чего быть не должно что добавляешь, то убираешь». Вердикт по лиду: «нежная, эльфийская гитара». Состав: лид — чистая электрогитара (singing sustain, gentle vibrato, lyrical phrasing); тело — тёплая струнная секция без соло; подкладка — деликатное фортепиано (из Luminous Sword); пульс — сдержанный низкий барабан; воздух — простор ревербом; вокал — сопрано вокализом парами, только босс и элитка. Вне состава: соло-скрипка, флейта, тайко, литавры, низкое остинато, драм-кит, хор, колокольчики. Почему: у поля Exclude всего пять слотов, и пока состав плавал, они работали латками — при борьбе с яркостью solo violin был вытеснен, и скрипка вернулась в следующем прогоне (жалоба Макса «опять скрипка»). Состав, прописанный точно в позитиве, не оставляет места лишнему, и Exclude становится константой: solo violin, metal riff, taiko, triumphant fanfare, j-pop. Гитара при этом берётся в лирической ипостаси — чистый тембр с долгим сустейном, а не тот инструмент, что рифует в Swordland; поэтому запрещена жанровая манера (metal riff), а не тембр.

2026-07-30/24 — до попадания в настроение сознательно идём ЗА рефом, своё добавляем после. Формулировка Макса: «SAO — идеальный реф. Потом найдём в нём что-то своё. А пока надо хотя бы дойти до “вот, оно!” по настроению». Почему: оригинальность, добавляемая до того как поймано целевое настроение, неотличима от промаха — именно так прошли четыре уезда, где каждый шаг «в свою сторону» уводил от цели. Сначала совпадение с рефом как измеримая точка, потом отход от него как осознанное решение.

2026-07-30/25 — нежность живёт ТОЛЬКО в тембре лида; мрачность даёт низ, бой даёт пульс. Вердикт Макса по шестому прогону: «песня не боевая вообще, скорее лирически спокойная, даже lofi… вообще 0 мрачности, просто грусть». Уточняет /23: фортепиано и простор-реверб выведены из боевого состава (остаются для карты, таверны, аутро), в состав возвращён низ — виолончели. Почему: канон состава был собран целиком из мягких красок, и промпт получился с восемью указаниями на нежность против одного на бой — при дословном соблюдении формулы «нежная и сильная». Мрачность и грусть — разные вещи: грусть даёт меланхоличная мелодия в верхах, мрачность даёт низкий регистр и напряжение; без низа выходит печальный lofi. Отсюда правило промптинга: промпт пересчитывается по сторонам перед отправкой — сколько слов тянет в мягкость, сколько в мрак и движение.

2026-07-30/26 — арка «тихо → мощно» живёт МЕЖДУ состояниями, а не внутри боевого трека. Почему: starts intimate and grows делал первую половину трека небоевой, а боевой луп играет с любого места и обязан быть боевым сразу. Арка ложится на переходы фаза 1 → интерлюдия → фаза 2 → аутро, то есть ровно на слои FMOD (/19, 2026-07-30/… про многослойное событие), а внутри боевого лупа держится ровный накал. Теги интенсивности остаются в силе для лирических контекстов и вокальных блоков.

2026-07-30/27 — журнал промптов ведётся с полными текстами и дельтами. Требование Макса: «не просто удаляй старые, а записывай как меняли и почему на память в будущем». Почему: промпт, который не сработал, — это измерение, а не мусор: без его текста нельзя понять, какое именно слово дало результат, и через месяц та же формулировка вернётся как «новая идея». Дом — docs/ost-run-log.md §История промптов (полный текст каждой версии, дельта к предыдущей, вердикт, названные виновники). Рабочий пакет при этом остаётся чистым по /19 — история туда не возвращается.

2026-07-30/28 — производство музыки выделено в отдельный скилл xgaida-x-nixi-music. Предложение Макса: «лучше отдельный скилл для создания песен через Suno, а из audio лишнюю инфу убрать». Граница: music владеет созданием материала (целевой тон, канон состава, промптинг Suno, журналы прогонов и промптов, аккаунт и права), audio владеет кодом и интеграцией (фасад, ключи, каталог, FMOD, банки, микс, генерация SFX через ElevenLabs, речь блипами). Почему: это разные деятельности с разным владельцем и разным циклом — Suno крутит Макс, Никси промпт-инженер, итерация идёт «промпт → вердикт на слух → дельта», тогда как audio-задача идёт «карта → пайплайн → тест». Держать их в одном скилле значило смешивать код с производством контента; за один вечер материалы по музыке выросли до трёх референсов, из которых два целиком про генерацию. Речь блипами и голос нарратора НЕ переехали — это код и FMOD, а не генерация, и они остались в audio (voice-and-narrator.md, бывший voice-and-music.md). music-tooling.mdsfx-tooling.md, из него убрана вся часть про Suno.

2026-07-30/29 — виноват не инструмент, а его МАНЕРА: скрипка и барабаны возвращены в состав. Разбор боевых треков SAO Максом: «Барабаны и скрипка нужны. Гитара, особенно такая, грязная в каком-то плане, с редким соло — тоже. Но они должны передавать нужное нам настроение. Проблемы щас именно с этим». Замещает часть /23 и /25 (superseded): solo violin убран из Exclude, clean electric guitar перестал быть лидом. Новый состав: лид — скрипка «невероятно красивая и смертельная»; второй голос — слегка перегруженная гитара с редким соло; низ — виолончели плюс бас-гитара (услышана в Critical Phase); удар — бьющие барабаны. Постоянный Exclude стал taiko, war march, triumphant fanfare, j-pop, metal riff. Почему: пять прогонов подряд я вычёркивала тембр вместо того, чтобы менять артикуляцию и характер. Скрипка провалилась не потому что скрипка, а потому что пела длинными нотами и звучала «стандартно-фэнтезийно»; в рефе она смертельная. Это самый дорогой урок захода: вычёркивание инструмента лечит симптом и одновременно отнимает краску, которая в рефе есть.

2026-07-30/30 — боссовый трек строится СТУПЕНЯМИ и обязан «развлекать собой». Разбор Макса: в Confront Battle переход к активной стадии идёт «в 4 шага, готовя нас»; Critical Phase «развлекает собой — то добавляет соло, то ускоряет темп, то переход»; и главное — «не всегда ААААААА, есть паузы и сильные части с хорошим, достаточно быстрым переходом». Уточняет /26. Почему: ровный однородный луп — не то, что делает реф. Ступени Кадзиуры ложатся прямо на нашу модель состояний FMOD: ступень это слой, а не новый трек, — то есть структура рефа и наша техническая схема совпали, и это подтверждает выбор многослойного события. Паузы обязательны: контраст даётся снятием, а не только добавлением. Правило «ровный накал внутри лупа» уточняется — ровный ≠ однородный, запрещено только тихое начало, потому что луп играет с любого места.

2026-07-30/31 — формула SAO: рок-перкуссия и синт ПРОТИВОПОСТАВЛЕНЫ средневековой мелодии. Найдено в академическом разборе (Jocoy & Hoffer): «driving rock percussion with heavy synth for Sword Art Online counters the medieval qualities of the melody to underscore the isekai, video-game based storyline». Макс услышал рок в треках и спросил — подтвердилось источником. Замещает два моих запрета (superseded): синтезаторы разрешены как краска (запрет остаётся только на электронную подачу целиком — это Danger, не наш путь), и ритм признан ОСНОВОЙ, а не поддержкой — Кадзиура сама считает свой стиль «primarily rhythmic in nature». Почему это важно нам сверх звука: рок и синт там смысловой слой, а не украшение — акустика говорит «фэнтези», рок и синт говорят «это внутри видеоигры». У нас фэнтези внутри цифровой Системы и арена подменяется цифрой, то есть приём попадает в наш нарратив буквально, а не по аналогии. Заодно из разбора: боевая кульминация у неё — две контрастные темы (агрессивная на стаккато и высоком женском хоре ↔ соло-скрипка с модальной меланхоличной мелодией), что и есть услышанная Максом «смена на скрипку невероятно красивую и смертельную»; приём средневековости — кварты и квинты; колокольчики и гонги — её сквозной язык, а не «яркость ради яркости», поэтому возвращаются краской.

2026-07-30/32 — генерируем ЧАСТИ, а не целые треки. Ответ на вопрос Макса «Suno справится с таким количеством деталей?» — нет, не за один промпт, и стратегия меняется. Почему: рабочий объём промпта 6-12 тегов, теги для модели вероятностные подсказки; наших требований к боссовой теме больше двадцати. Промпт из двадцати тегов даёт муть. Но трек нам и не нужен единым файлом — он живёт слоями в FMOD, а у Кадзиуры кульминация и так собрана из двух контрастных тем. Совпали три вещи: структура рефа, наша техническая схема и предел инструмента. Порядок: один промпт = одна часть (тема A, тема B, интерлюдия, аутро) по 6-9 тегов; консистентность держит Audio Influence от одного сэмпла, а не промпт; ступени и переходы собирает FMOD, потому что «в 4 шага» по заказу Suno не сделает, а четыре слоя по параметру дают то же и управляемо; детали доводятся хирургией секций, не переписыванием промпта; тембр держит Persona. Правило: больше 12 тегов в промпте = задача поставлена неверно, её надо разрезать, а не сокращать.

Правит доки: новый .claude/skills/xgaida-x-nixi-music/ (SKILL.md, references/tone-and-lineup.md, references/suno-prompting.md, references/account-and-rights.md); .claude/skills/xgaida-x-nixi-audio/{SKILL.md,references/voice-and-narrator.md,references/sfx-tooling.md}; docs/{ost-prompt-pack,ost-run-log,ost-boss-theme-brief}.md.

2026-07-30 (ночь, 3) — четвёртое состояние атаки: между ударами есть окно, и в нём юнит ждёт, а не бездельничает

Продолжение записи ниже. Макс спросил, почему длительность свинга ограничена секундой, и из этого выяснилось, что модель боя описывает цикл атаки на одно состояние беднее, чем нужно.

Коллизия номеров с параллельной сессией

Номера в журнале сквозные по дате, а сессий за одну ночь работает несколько. Запись «(ночь, 2) — числа ростера» заняла 2026-07-30/6 и /7 теми же номерами, что и запись про словарь удара ниже (/6/9, уже закоммичена и разошлась по глоссарию, combo-rules, frost, tech-debt). Эта запись нумеруется с /10, чтобы не усугублять. Процедурная дыра: нумерация по дате не выдерживает параллельной работы — либо номер становится «дата + метка сессии», либо сквозным по всему журналу. Вердикт за Максом.

2026-07-30/10 — у цикла атаки четыре состояния, а не три. Замах → урон → рекавери → боевое ожидание (CombatIdle, опционально). В состоянии атаки — первые три; боевое ожидание в него не входит, но цель в нём известна и держится.

Имена (вердикт Макса): Idle · Windup · Recovery · CombatIdle. Пара Idle / CombatIdle сама несёт различие — простой вне боя и простой внутри атакующего лупа, — и читается без комментария. Предложения скрайба Poised и Standby отклонены как требующие догадки, AttackIdle — как читаемое «бездельничает во время атаки».

Idle означает «вне боя», и это уточнение Макса против моей же неверной поправки: бой — это ровно четыре стадии выше. Юнит, выбравший цель и бегущий к ней, ещё не в бою — он до неё не достаёт и в цикл не вошёл. Я предлагала читать Idle как «вне атакующего лупа, но, возможно, в разгаре сражения»; это размывало границу, ради которой состояние и разводится. Почему: нынешний Idle описывает две несовместимые ситуации — свой докстринг признаётся прямо: «нет активного свинга, в т.ч. на кулдауне между ударами, юнит свободен». Пока свинг занимал весь интервал, разницы не было; с окном между атаками она принципиальна, потому что парированию нужно знать, кто именно на него нацелен, а бегущий мимо бездельник — не то же самое, что ждущий своего удара боец.

Урон — это событие на границе, а не фаза (уточнение к /6, формулировка Макса): замах — всё «до урона», дальше момент урона, дальше рекавери. При серии Ударов таких событий внутри одного замаха несколько, рекавери начинается после последнего.

2026-07-30/11 — таймер Комбо считает время ВНЕ атакующего лупа; порог — 1.5 сек. Замещает 2026-07-30/8 (superseded): формула «1.5 сек + интервал атаки» больше не нужна. Почему: добавка интервала существовала ровно для того, чтобы штатный цикл медленного кита не рвал серию сам. Когда таймер тикает только при выпадении из лупа (цели нет, оглушён, бежит вне досягаемости), штатное Ожидание серию не трогает вовсе — и порог становится честной константой, не зависящей от скорости атаки. Побочно исчезает странность, при которой окно росло вместе с замедлением: замедленный кит теперь не теряет Комбо, потому что из лупа он не выпадал.

2026-07-30/12 — парирование ловит всех, у кого парирующий выбран целью авто-атаки (вариант А, вердикт Макса), а не только тех, кто уже занёс удар. Возражение скрайба, записанное для истории: при варианте А микростан прилетает за намерение, которого игрок не видит, и парирование ближе к AoE-стану по всем, кто смотрит в мою сторону. Вариант Б («только занёсшие замах») наказывал бы за уже начатое действие. Макс выбрал А; фронтальный фильтр и вопрос о пределе дистанции — открыты, Open Questions.

2026-07-30/13 — в Ожидании юнит движется, в трёх фазах атаки останавливается. Именно это даёт рейнджеру окно «выстрелил и успела пробежать». Уже реализовано под другими именами: гейт CombatPositioning.CanLandWindup не пускает замах, если цель за время замаха уйдёт за reach + tolerance, а ChargesIntoReach разрешает удар с разбега.

Скорость по состояниям (уточнено Максом в тот же ход):

СостояниеДвижение
Боевое ожидание (CombatIdle)полная скорость, без штрафов — это и есть окно рейнджера
Замах · урон · рекаверистоит; у кита со стрельбой на ходу — движение со штрафом скорости
Замах при ударе с разбегадвижется полноценно (ChargedSwing); иначе удар с разбега невозможен по построению

Штраф «стрельбы на ходу» живёт ровно на трёх фазах атаки и в Ожидание не заходит. Текущий код это уже так и считает (firing = Windup || Recovery), поэтому при вводе CombatIdle штраф остаётся на месте — расщепляется только Idle.

2026-07-30/14 — Ожидание держит слот боевого контакта и линию. Иначе танк между ударами формально отпускал бы фронт, и слоты перетасовывались бы каждый цикл.

Два режима темпа — приняты (описание Макса): у быстрого кита анимация занимает весь интервал, удары идут без зазора, «непрекращающийся град»; у медленного анимация длится своё время, а остаток интервала он ждёт, и это ощущается как «заносит редко, но тяжело». Переключение — по скорости атаки, тип юнита не вводим: анимация физически не может быть длиннее интервала, поэтому режим выводится сравнением двух чисел, а флаг стал бы вторым владельцем того же факта.

2026-07-30/15 — потолок свинга остаётся глобальным (30 тиков), но у юнита появился свой override. Вердикт Макса после разбора: 1.5 сек и даже 2 сек уместны отдельным китам, но не всем. Почему дефолт не поднят до 45, хотя об этом и была речь: пауза между атаками = интервал − свинг. Подъём глобального потолка при неизменных темпах обнуляет паузу у Брузера, РДД и Поддержки и срезает её у Танка с 0.83 до 0.33 сек — то есть даёт обратное просьбе «паузы заметнее». Одинаковая длина заноса у всех при этом сама по себе ценна: она держит читаемость поля боя на восьми юнитах. Реализовано в тот же ход: UnitData.AttackSwingTicks (0 = глобальный дефолт), шесть тестов, инженерная часть — Journal - The Swing Ceiling Becomes Per-Unit Data. Мой прежний proposed — брать порог из длины клипа — снят самой же реализацией: он вернул бы fps и авторскую нарезку кадров в тайминг геймплея, чего модель тайминга избегает намеренно.

Правило, которое идёт вместе с ручкой: длинный занос имеет смысл только вместе со снижением скорости атаки того же юнита. Иначе окно ожидания исчезает, и «редкий тяжёлый удар» превращается в «непрерывный тяжёлый», то есть в рост DPS вместо смены характера. Общий пересмотр темпов и MaxAnim Макс отложил — тема идёт в реестр балансных проблем (docs/balance-issues.md) как отдельный заход.

Правит доки: Meta - Glossary (Комбо, боевое ожидание), Open Questions (фильтр парирования, исключения движения, порог режимов).


2026-07-30 (ночь, 2) — три уровня удара: Удар, Атака, Комбо; стихии переименованы в комбинации

Тема всплыла из технической правки: ClipMarkers читает только первый маркер клипа, и я записала «несколько ударов в свинге» как фичу без носителя. Макс поправил — носитель будет, и оказалось, что слоёв не два, а три, а слово «комбо» у нас уже занято стихиями.

2026-07-30/6 — словарь из трёх уровней. Удар (hit) — одно разрешение контакта: один расчёт урона, одно попадание, один on-hit. Атака (attack) — один цикл авто-атаки, внутри от одного до N Ударов; прерываема. Комбо (combo) — серия Атак, живущая пока боец продолжает бить. Почему три, а не два: у Комбо есть собственное правило жизни (таймаут ниже), значит это отдельный атом правил, а не разговорный синоним «длинной атаки». Уровень без своего правила термина не заслуживает.

2026-07-30/7 — «состояние атаки» = Атака целиком, от замаха до конца восстановления. Пока боец в замахе или в доигрыше, он считается атакующим. Почему: промежуток между Ударами внутри цикла не должен читаться как «перестал драться» — иначе Комбо рвалось бы у любого кита с длинным свингом. Формулировка Макса: «от взмаха до конца, всё целиком».

2026-07-30/8 — таймаут Комбо = 1.5 сек + интервал атаки бойца. superseded в тот же день решением 2026-07-30/11: с появлением четвёртого состояния таймер считает время вне атакующего лупа, а не вне состояния атаки, и добавка интервала перестала быть нужной — порог стал константой 1.5 сек. Разбор ниже оставлен как есть: он объясняет, почему голая константа была неверна при трёхфазной модели. Комбо рвётся, когда боец пробыл вне состояния атаки дольше этого времени; тогда серия начинается заново. Почему не константа 1.5 сек (мой первый proposed): 1.5 сек меньше интервала Танка (1.82 сек при эталонном темпе 0.55 атак/сек), поэтому у половины ростера Комбо рвалось бы само по себе, без всякой помехи. Почему добавка не избыточна при определении 07-30/7 (простой между Атаками и так близок к нулю, ведь доигрыш занимает остаток интервала): она страхует от замедления. Лёд снимает до 60% скорости атаки — интервал Танка растёт до ~4.5 сек, простой между Атаками до ~3.5 сек, и на голых 1.5 сек Комбо обнулялось бы просто потому, что кита заморозили. Двойное наказание за один дебафф мы не закладываем.

Интервал берётся фактический, тиково-квантованный (TickRate / IntervalTicks), а не сырой стат скорости атаки — у этого числа один владелец, AttackTiming. Таймаут пересчитывается при каждом продлении Комбо, поэтому баффы и дебаффы скорости влияют сразу.

Следствие для плейтеста, названное заранее: при этих числах Комбо получается живучим — его рвут только длинные станы (порядка 2.5 сек и больше), потеря цели или долгий бег. Микростан 0.25 сек не рвёт ничего. Если по ощущениям Комбо должно быть хрупче, крутить надо слагаемое 1.5, а не формулу.

2026-07-30/9 — взаимодействия стихий переименованы из «комбо» в «Комбинация» (combination). Раскол, Детонация, Проводимость, «огонь топит лёд», «лёд + дробящий» — это Комбинации. Почему: слово combo забрал уровень из 07-30/6, у которого есть механическое правило прерывания. Держать один термин на два разных явления — заводить второго владельца слова; проигрывает то значение, у которого своего правила нет. Предложение Макса, принято.

Правит доки: Meta - Glossary (четыре термина), Effect - Combination Rules (заголовок, title, тело), Effect - Frost («второе комбо» → «вторая комбинация»).

Разнос не закончен, и это названо намеренно: слаг файла остаётся combo-rules.md, а в одиннадцати карточках эффектов ссылка стоит с алиасом «матрица комбо-правил». Переименование файла и правка 21 ссылки затронули бы двенадцать доков, которые прямо сейчас правит параллельная сессия (effects.md, cc-primitives, cleanse, stat-modifiers, authoring/*), — pathspec-коммит забрал бы их незакоммиченную работу. Делается отдельным заходом, когда зона освободится; до тех пор термин верен в тексте, а слаг исторический.

По той же причине словарь остался в шапке Open Questions, хотя по правилу закрытая тема оттуда исчезает: файл прямо сейчас пишет Макс (там же лежит неразобранное сырьё — гоблины-проказники, парирование, блок, маскировка, качество реликвий, доп-статы, инженер), и коммит с этим путём унёс бы его незакоммиченные заметки. Уборка словаря идёт вместе с разбором этого сырья.


2026-07-30 (ночь, 3) — Криомант в холодной линии, Десятина вместо Геоманта, демон без автоатаки

2026-07-30/10 — все три носителя холода играют в одну линию. Монах воды и Драугр уже клали Frost, а Криомант — легаси-Frozen (свой четырёхсекундный слоу без стаков). Теперь его автоатака кладёт стак общей линии, а «Ледяные оковы» заменены «Ледяной зоной»: канал 5 сек, тик 0.5 сек, круг радиуса 3 вокруг цели, стак «Изморози» и 0.15 урона автоатаки льдом за тик. Почему: главный крио-кит в общую линию не играл вовсе — команда «крио + крио» не ускоряла ступени, и синергия, ради которой линия заводилась, не существовала. Отличить это глазами было нельзя: оба эффекта выглядят как «замедлил». Что осталось замыслом: центр зоны — позиция цели, а не свободно выбранная точка. Таргетинга по точке у способностей нет; круг «вокруг себя» дальнику второй линии кладёт лёд туда, где врагов нет. Легаси-ассеты Frozen и IceChainsStun удалены вместе с записями реестра.

2026-07-30/11 — Пожирательница снов не автоатакует, и это отдельный режим. Заведён AutoAttackMode.None: юнит не входит в замах вовсе. Почему не «урон 0»: ноль оставляет её в ритме атак — подходит, машет, тратит замах и хвост, ведёт себя как боец, просто безвредный. Для кита, чей весь урон живёт в «Кошмаре», это врёт и визуально, и в замере. Второй потребитель режима уже описан — Барабанщик.

2026-07-30/12 — The Cairn (Geomancer) → The Tithe (Hemomancer). Вердикт Макса: имя врало — кит про кровь, а не про камень. «Десятина» названа по сути его сделки: он забирает долю с своих. Слаг файла переименован вместе с именем (ссылок немного, а the-cairn в тексте про кровь читался бы как ошибка), id ассета relic.geomancer оставлен — он технический и стабильный, переименование потянуло бы миграцию по энкаунтерам, тестам и отчётам баланса.

Правит доки: The Winter (активка и линия), The Lull (нет автоатаки), The Tithe (имя), Relic - Implementation Status, ассеты Cryomancer, Dreameater, ContentDatabase; инженерная сторона — запись «Cryomancer Joins The Frost Line».


2026-07-30 (ночь, 2) — числа ростера приведены к движку, а движок — к вердиктам Макса

Контекст: Макс прочитал все 27 карточек и внёс правки — часть чисел поправил, часть формулировок переписал, местами оставил заявки прямо в тексте. Правило приёмки он же и задал: числа берём из движка, если кит участвовал в балансном прогоне и статы после него не менялись; где менялись — спросить у него. Скрайб вытащил фактические числа из ассетов (реликвии, эффекты, компоненты, ClassBalanceConfig) и свёл с карточками — 14 расхождений число-в-число плюс 11 мест, где карточка описывает несуществующее.

2026-07-30/6 — норма и коридор берутся из ClassBalanceConfig, не из карточек. _baseDps: 110, _bandWidth: 0.3, множители класса дают: Танк и Поддержка 55 (39–72), Брузер 110 (77–143), РДД 132 (92–172), Убийца 154 (108–200). Прежние «целевой DPS 120 в коридоре 90–150» в карточках были ±25% от собственного центра и с конфигом не совпадали ни центром, ни шириной. Почему конфиг: норма, живущая в тексте карточки, не участвует в замерах — стенд читает конфиг. Два владельца одной величины разошлись бы на первом же балансном проходе, что и произошло.

2026-07-30/7 — по 14 числам вердикт Макса, куда движется правда. Его правка признана каноном и внесена в ассеты у девяти китов: щит Aegis 60 на 6 сек (было 120/4), плоская часть щита Bulwark 50 (было 30), у Torrent мана 50 и щит 600 (было 35/300), у Hearth угли на союзнике −1% за стак с потолком 50 стаков (было −10% и потолок 5 — итоговые −50% те же, но шаг в десять раз мельче), «Голод» Cairn забирает 20% текущего HP и оставляет себе 30% (было 10% и 50%), «Кровавый обмен» лечит на 30% (было 15%), у Bonewright мана и призыв 100 (было 40) и щит костей 40 + 1×AP (было 90 плоских), «Воспламенение» Pyre 15 за стак (было 20), бонус Криоманта считается и для умений (был только для автоатак). Обратное направление — там, где прав движок: шипы Древня бьют 25 + 10% брони с кулдауном 1 сек (в карточке стояло «100% брони, 0.5 сек»), Пастырь лечит себе 25%, союзнику 75% (в карточке было 100/150). Карточки приведены к ассетам.

2026-07-30/8 — четыре вердикта не легли в данные и стали кодовым долгом. Пять стаков углей на себя у Hearth (_payloadRepeats не действует на _selfEffects), лечение Cairn на 100% забранного (у StoneTitheComponent лечения нет), два стака яда с тыла у Fang (RearStrikeEffectComponent не берёт количество), +5% за стак льда у Winter (TaggedTargetDamageBonus плоский по правилу, не per-stack). Список — Relic - Implementation Status §Кодовые долги.

2026-07-30/9 — Пожирательница снов не автоатакует. Весь её урон живёт в «Кошмаре»; вне сна демон занимается своими смешными делами. Почему это не просто флейвор: её мерка — интервал «уснула → проснулась», и автоатака в ассете (130 при темпе 0.75) даёт ей урон, которого по дизайну быть не должно, искажая замер.

Заодно закрыт старый долг сверки. Три расхождения из handoff (споры Друида не лечат, воспламенение без стаков, шипы без роста радиуса) все три оказались сделаны — а мои же записи об этом врали. Нашлось сделанным и другое: 200% у «Решительного удара», замедление и щит «Стального вихря», кувырок Убийцы и телепорт за спину из скрытности, диспел «Длани жизни».

Правит доки: 13 карточек реликвий (числа, коридоры, чистка заявок в дома), Relic - Implementation Status (пересверка + кодовые долги), Open Forks (имена, обнулённые улучшения Cairn, вопрос по улучшениям Lull), 11 ассетов под ScriptableObjects/{Effects,Relics}.


2026-07-30 (вечер) — активка Грозы бьёт в одну цель; архетип «Берсерк» снят

Оба вопроса всплыли при чистке карточек (запись ниже): в карточке Грозы жили две несовместимые активки, а следствие про Берсерка стояло непроверенным с 29-го.

2026-07-30/4 — «Абсолютная сила» это одиночный разряд, а не окно цепных молний. Канон — заметка Макса: подготовка, затем мега-сильный удар по одной цели. Прежняя редакция (каст 1 сек → 2 сек цепных молний со скоростью 300% и увеличенной дальностью) superseded. Почему: пассивка кита уже размазывает урон по строю, и активка «ещё больше цепных молний» была её усилением, а не решением. Одиночный разряд даёт киту второй режим — выбор между размазанным и точечным уроном, — и делает осмысленной цену: 1.5 секунды без движения под сбиваемой подготовкой. Числа proposed скрайбом: ×4 автоатаки, подготовка 1.5 сек. Потолок взят от Драугра (×5), у которого условий три (нужен оглушённый холодом враг, две секунды на месте, сбиваемый канал), а у Грозы одно, — поэтому множитель ниже. Цена прерывания сохранена прежней: мана потрачена, удара нет, 20% урона от молнии по себе.

2026-07-30/5 — архетип «Берсерк» из ростера уходит. Подтверждение следствия от 2026-07-29: слот занял The Draugr (Frostbound), а сам архетип снимается, потому что без Ярости как ресурса (отложена, 2026-07-27/2) берсерк — просто брузер с большим уроном. Почему подтверждение отдельным решением: долг в Roadmap был закрыт ещё 29-го, но термин продолжал жить в примерах реплик, в реестре пари и в tech-плане — то есть архетип «снят» и «не снят» одновременно. Зомби-упоминания вычищены этим же заходом.

Правит доки: The Storm (Шаг 2 и Шаг 5), Open Questions §2.5 (оба пункта закрыты, число разряда переехало в «числа-предложения»), Coop - Wagers и Character Registry (упоминания архетипа), Planning - Stabilization (пункт «Берсерк и Прилив ждут дизайна» закрыт).


2026-07-30 (утро) — карточки контента держат только механику; провенанс, долги и флаги разнесены

Контекст: правило «карточка несёт только актуальное состояние» Макс принял ещё 2026-07-28 (запись ниже, «AP как ось роста»), но применено оно не было — и 2026-07-30 заход по реализации китов долил в карточки обратное: блоки «РЕАЛИЗАЦИЯ 2026-07-30» во фронтматтере всех 27 реликвий. Макс вернулся к этому со словами «мне сейчас очень сложно читать».

Решение Макса 2026-07-30/1 — средняя глубина реза. В карточке остаются Шаги 1/3/4/5/6/7: числа, кулдауны, что делает навык, AI-настройки. Шаг 2 сжимается до фантазии и роли. Из карточки уходит всё остальное: обоснования выбора, «чем закрывает дыру ростера», пометки proposed, врезки «Решение Макса от…», «Реализовано …», разделы «Чего требует от движка» и «Баланс-флаги», сырые заметки-заявки в теле.

Маршрутизатор «факт → дом» (принят этим заходом):

ФактДом
механика, числа, кд, AI-настройкикарточка
почему выбрали так и что отверглиэтот журнал
что не реализовано и чем код расходится с замысломimplementation-status реликвий и врагов
неутверждённые числа, имена, класс, незаданные поляMeta - Open Forks
что и как замерить, где кит может сломать балансdocs/balance-issues.md
идея без вердиктаинкубатор идей

Поле needs_review сужено до классификации. Оно кормит character-registry.base и сводку в Roster - Balance, поэтому не удалено, а опустошено: по контракту тег-справочника в нём живут только открытые вопросы по тегам, и никогда — заявки на реализацию. Карточка-надгробие The Tide не тронута: её врезка и есть содержание надгробия.

Провенанс, снятый с карточек реликвий

Ниже — «почему», которое жило в карточках. Дизайн самих китов пачки 29-го числа описан записями 2026-07-29 (ночь, 3/4/5); здесь то, чего в них нет.

The Aegis (Антимаг). Закрывает дыру: танк-щитовик и танк-колючка есть, но на магический урон не отвечает ни один; Aegis — первый профильный ответ и единственная контра Арканы. Дробящая автоатака выбрана не случайно — попадает в уязвимость верхней ступени холода (+20%), поэтому он работает добивающей рукой крио-состава, не имея к холоду отношения. Раскладка брони сдвинута в магическую (40 физ / 80 маг), потому что специализация должна читаться в статах, а не только в способностях. Щит от школы — первый в игре щит с фильтром; «щиты общие, от физ и от маг» Макс перечислил как общую механику. Конверсия «поглощённое → нанесённое» — то же правило, что у взрыва щита Монаха воды (2026-07-28/12), но считается поглощённый урон, а не размер щита: кит награждается за то, что его действительно били магией. Триггер на каст, а не на урон, — чтобы игрок видел причину раньше следствия.

The Rift (Арканист). Ось Арканы закрыта 2026-07-29, Рифт работает её второй половиной. Темп 3 сек — ровно тот интервал, который Макс указал кулдауном; после 2026-07-28/2 гейт один, ресурсный. Закрывает дыру: магический урон был у половины китов, а усилить его было нечем — метка Хантера бьёт по всему урону, шред Кузнеца только по физике. Самая низкая живучесть в игре скомпенсирована телепортом, а не статами: кит переживает не размен, а отдельные удары. Уклонение детерминированное по правилу нулевого выходного рандома. Рост стрел не капается по образцу «Углей»; тормоз естественный — «Разлад» сходит за 6 секунд, поэтому разгон окупается только команде, которая фокусит вместе с ним.

The Fang (Ночное лезвие). Второй источник яда — прямой запрос синергийного анализа (докармливает Друида, который лечит за каждый уникальный яд), и единственный, кто снимает обе брони. Единственный кит, у которого бонус за тыл встроен в идентичность, а не просто применяется. Дальность 2 — сознательный компромисс: слот боевого контакта занимает не всегда, но дальником не считается и фокусу доступен. Яд обязан быть ядом: по канону сродство Яд это всегда «DoT + негативный эффект», здесь негативный эффект — шред брони. Отложенный взрыв печати — не выстрел, а таймер: за три секунды цель либо умирает раньше, либо доживает, и отсюда осмысленный AI-выбор, на кого её вешать.

The Torrent (Монах воды). Наследник The Tide (реворк 2026-07-29): старый дальний гибрид-саппорт снят целиком, унаследован только «Водяной щит». Закрывает дыру: отбрасывание было у Копейщика и Монаха вихря, и оба тратят на него способность — регулярный толчок «раз в 4 сек» делает из позиционики постоянный фон и кормит правило «толчок в стену бьёт дважды» (2026-07-28/11). Периодичность толчка не зависит от скорости атаки: иначе у факта «как часто толкает» стало бы два владельца — таймер и стат.

The Hearth (Хранитель углей). Закрывает дыру №2 синергийного анализа — сильный клинз-саппорт другого типа, а не шестой хилер; ради него понижен клинз Пастыря до тира 1, ниша освобождена намеренно. Он переворачивает знак существующей механики: «Угли» были дебаффом на врагах, здесь они на своих и дают стойкость. Одна механика, два смысла, ноль новых систем. На CC в автобое нельзя отреагировать руками — единственным ответом было «снять постфактум», Hearth даёт проактивную защиту. Сопротивление огню в подарок — потому что кит только что навесил на союзника угли. «Угли на союзнике» выражены отдельным эффектом-близнецом, а не полярностью существующего: иначе один EffectData обслуживал бы и бафф, и дебафф, и диспел-фильтры разъехались бы.

The Lull (Пожиратель снов). Вердикт Макса 2026-07-29: её урон не будит спящих. Правило «любой урон будит, пробуждающий бьёт ×2» остаётся в силе для всех, кроме неё, и сделано это полем эффекта, а не хардкодом под кита. Тьма — самое редкое сродство и до неё без носителя. Сон — единственный CC со встроенной ценой за неаккуратность. Ядро кита: сон превращается из контроля в окно казни, которое она обслуживает сама; нарастание — награда за то, что цель никто не тронул. «Союзники не агрятся на спящих» — правило целеуказания, а не свойство эффекта: иначе каждого кита пришлось бы настраивать руками.

The Cairn (Геомант). Развилка «чем платит команда» закрыта вердиктом Макса 2026-07-30/2 — вариант (а), текущее HP. Отвергнуты: (б) максимум HP на бой — лечение не возвращает потерянное, и танк перестаёт быть танком; (в) максимум на весь забег — это уже Последствие, конфликтует с их каноном «строго в границах забега, снимается лечением». Себе он получает половину отобранного: сделка арифметически невыгодна и выгодна только позиционно — команда переливает живучесть из тех, кого не фокусят, в того, кто дерётся. Одна норма DPS на оба режима, иначе гибрид станет способом обойти классовый коридор.

The Draugr (Хладнорождённый). Слот переиспользован, а не заведён новый: карточка стояла пустым каркасом с 2026-07-15, и заметка Макса описывает ровно её. Следствие — архетип Берсерк уходит: он висел нереализуемым, потому что ярость как ресурс отложена (2026-07-27/2), а без неё берсерк это просто брузер с большим уроном. Натяжение с Расколом намеренное: союзник-дилер может разбить статую, и тогда драугр каналит по секундному стану, а не по двухсекундному, — состав «драугр + тяжёлый физик» становится осознанным решением, а не автоматическим плюсом. Условие каста нужно, чтобы активка была не «ещё одной кнопкой урона», а обналичиванием собственной работы: платит риском, две секунды стоит на месте.

The Bonewright (Костодел). «Собиратель костей» кормится только своей смертью (вердикт Макса 2026-07-30/3). Прежняя редакция давала кости за смерть любого юнита на арене: это кормило некроманта чужой работой и делало пассивку невидимой — игрок не связывал щит с тем, что сделал сам. Радиус 6 — цена позиции: армию надо держать при себе. Взрыв костей равен 100% размера щита, своего числа у него нет.

The Runesmith (Кузнец). Редкость поднята с Обычной до Уникальной (вердикт Макса 2026-07-29, прежнее значение superseded): кит не «герой с киллер-фичей», а энейблер-крафтер, его сила измеряется составом гильдии, а не своими числами, и обычная редкость обещала бы игроку лишнее. Кража брони — в долг, а не перманентом: иначе Кузнец становится неубиваемым, а руны убегают вместе с ним. Именно физброня в «Разломе» делает его киллер-ответом на Earth Golem.

The Paragon (Идеал). Тип — Божественная. Системная роль: первый персонаж, обналичивающий перенасыщенный саппорт-слот, — превращает претензию «5 хилов перебор» в фичу. «Идеальные удары» несут встроенную контр-игру: состав с частым контролем душит бонус. «Идеальная форма» — актив за ману, а не пассив (подтверждено Максом): полный иммунитет без гейта дегенеративен. T3-клинз оставлен привилегией уника, спец-клинсовик капается на T2.

The Pyre (Мечник). Класс сменён на Убийцу (2026-07-28): Брузер был велик по запасу прочности и мал по норме урона. Огненная половина считается процентом от максимального HP, а не текущего: иначе удар слабел бы по мере добивания, и антитанк выдыхался ровно там, где должен доводить дело до конца. Он анти-танк по времени, а не по формуле: «Угли» и разгон темпа копятся, пока он бьёт одну цель, а долго бить приходится именно толстых. Потолка стаков нет намеренно (2026-07-26/4). Темп каста 10 сек — рекомендованный, а не запертый: гейт ресурсный именно затем, чтобы игрок мог его ломать. Сам эффект «Угли» общий, а процентная прибавка за уголь — личный функционал Мечника.

The Shepherd (Пастырь). Редизайн 2026-07-25: автоатака больше не лечит вместо урона — он эталонный носитель Света, бьёт врага Чистым уроном и лечит раненого союзника рядом. Себя лечит слабее, чем других (2026-07-27/3), и это замещает прежний полный запрет само-лечения (2026-07-26/7): причиной неубиваемости была ульта с процентом от недостающего HP, а не сам факт само-лечения. Клинз понижен 2 → 1 (2026-07-29): тир 2 оставлен спец-клинсовику, иначе хилу-универсалу сильное снятие досталось бы бесплатно и спец-клинсовик рождался бы ненужным.

The Bloom (Друид). Исправление канона 2026-07-28: прежняя запись называла «Взрыв спор» пассивным, наносящим урон и расходующим эффекты — все три утверждения были неверны. Вердикт Макса: способность только лечит, а урон Друида целиком живёт в пассивном яде. Автоатака целится в неотравленного по тому же принципу, что Криомант не тратит атаки на замороженного: яд расходится по строю.

The Winter (Криомант). Кит владеет только числом стаков за удар; сила и длительность состояний живут в холодной линии. От AP растёт число стаков, а не длительности (следствие 2026-07-28/13): длительности принадлежат линии, иначе она перестаёт быть общей. «Ледяная зона» замещает «Ледяные оковы» (superseded 2026-07-29): стан и уязвимость теперь свойства линии, держать их ещё и в активке значило бы завести второго владельца одного факта. Роль сместилась с «нажал кнопку — все стоят» на «выбрал место — там становится холодно», и это честнее для автобоя. Личный бонус (+25% / +50%) остаётся свойством кита: это про его синергию с собственным контролем, а не про хрупкость цели.

The Verdict (Убийца). Скрытность защищает от агро-автоатаки танка (2026-07-26) — это и есть окно прорыва в бэклайн, ограниченное по времени и заслуживаемое убийством; развеять её и следом сагрить — валидная контр-тактика. Уклонение — кувырок с уходом с места: оно не просто гасит урон, а даёт занять позицию. Направление кувырка равно направлению текущего намерения, поэтому уклонение никогда не сбивает план юнита, а ускоряет его, и отдельный сброс цели у противника не нужен.

The Gale (Монах вихря). Синергия 2026-07-12: «отталкивают» — любое отбрасывание врага, включая чужое, и монах с любым командным источником толчка задуманы как пара. Микро-стан 0.25 с — «аниме»-склейка: между толчком и добиванием у цели нет ни одного свободного кадра. Рывок, а не блинк, и позиция рывка выбирается так, чтобы линия «монах → цель» смотрела в ближайшего другого врага — тогда толчок отправит цель в него, а не в пустоту. Цепное отбрасывание намеренно слабее главного, чтобы финальный телепорт сел на главную цель, а не на случайного задетого.

The Bulwark (Оплот). Щит короткой вспышкой (2026-07-26/6): при двухсекундном окне величина щита не значила ничего — сколько он поглотит, решало число прилетевших ударов, и правка размера не меняла размен один-на-один. Короткая вспышка вернула смысл величине, а заряды дали возможность выдержать два удара подряд.

The Bond (Шаман). Интент 2026-07-12: это распределённый танк-хил, а не бэклайн-саппорт. Танковость идёт от механики, а не от статов: «Связь» размазывает бурст на связку. Плата за силу — вся связка идеальная цель под AoE, поэтому позиция Фронт осознанная.

The Thorn (Древень). DoT шипы не будит: иначе яд или поджог превращают его в вечный дамаг-пульс; ответка шипов тоже не считается прямым уроном, чтобы два Древня не зацикливали друг друга. Внутренний кулдаун 0.5 сек нужен, чтобы ритм ответки задавал Древень, а не скорость атаки окружившей его толпы.

Провенанс, снятый с карточек боссов

Дезертировавшая Армия. Правило титулов (Макс, 2026-07-29): чем проще, тем лучше — титул это одно понятное слово о боевой функции, а не о судьбе персонажа; метафоры (the Whetstone, the Anvil, the Kept) отклонены, а смысловые повороты кладутся в смену титула по стадиям. Звание General, а не «Командир», потому что термин «Командир» решено не вводить. Overridden выбран как кодерское и смыслово точное слово — его не стёрли, а переопределили; отклонены the Overwritten, the Elevated («Возвышенный» звучит нормально, а нужно, чтобы стало не по себе), the Unhandled, the Compiled, the Recursive, the Patched. Порядок «катсцена → расстановка → бой» жёсткий: сказанное до расстановки — информация, с которой игрок работает под таймером, сказанное после было бы наказанием за уже сделанное. В первой стадии Сорель не лжёт: разведчики настоящие, и к консоли он тянется только после поражения — драматургия здесь не разоблачение врага, а падение человека, которого вынудил сам игрок. Разные окна статистики по стадиям — буквальная разница между разведкой и взломом. Окно консоли в сцене — выплата по всем посевам сразу: игрок привык, что ENC_0x1A4 просто символы, и тут человек в кадре начинает этими символами командовать миром. Направление 2026-07-29: консоль игроку дадут нарративно, к финалу; будет ли она исполняемым инструментом — решим потом, глубоко не закладываем. Почему он лучший босс из трёх: единственный, кто отвечает на подготовку игрока, а не на его действия в бою, — и этим делает драфт риском, а не только силой.

Гоблинская Банда. Решения Макса 2026-07-29: четверо распределяются двумя зонами с квотой 2 + 2 (нового шва в ядре не нужно); зона стадии 2 — настоящее кольцо, и тех-долг формы зон берётся сознательно ради картинки; минимальная дистанция держится не валидацией, а молнией. Последнее — принципиально: если интерфейс не даст ошибиться, молния не ударит никогда, и правило станет декорацией вместо столпа «решения вне боя видны в бою». Зона с квотой переиспользуема — на неё сядут построения Приказа «Тактик» и Приказ «Авангард».

Разбойничье Гнездо. «Минута молчания» — решение через бездействие: игрок платит временем и получает мир вместо боя, но беднее. Такой механики у нас нет ни одной — вся агентность выражается кликом, — и она ложится в доктрину «скилл в подготовке, не в реакции».

Правит доки: все 27 карточек реликвий и три карточки боссов — чистка до механики; Relic - Implementation Status и Enemies - Implementation Status — приняли долги и требования к движку; Meta - Open Forks — неутверждённые числа и имена; docs/balance-issues.md — флаги к первому замеру; инкубатор — идея «Марша мёртвых за павших».


2026-07-30 (ночь) — хаб гильдии: двор, где люди стоят телами

Контекст: Макс пришёл обдумать хаб — место сохранений, меты и старта забегов. Состав хаба канон уже держал (три раздела: Казармы, Книга, Прокачка дома — 2026-07-27/22), формы у него не было. Скрайб принёс ресёрч чужих хабов (Hades, Darkest Dungeon, Mewgenics) и предложил «стол с предметами»; Макс забраковал его как слабый вопросом «а как будут видны члены гильдии и как играется кооп?» — и это переломило сессию.

#РешениеПричинаСтатусКанон
1Хаб — Двор гильдии: третий скин персист-арены, где люди ростера стоят телами. Не новая сцена и не отдельный мирСлой 3 держится на том, что человека жалко: гибель «Сосуда» не наказывает механически, платится только память. Карточка в картотеке — это данные О человеке, а не человек; умершая строчка не болит. Отвергнуты: «стол как весь хаб» (люди остаются строчками, кооп = очередь у одного интерфейса), «комната-локация с NPC» (новая сцена, арт, налог на ходьбу каждый забег)acceptedModes - Guild Courtyard
2Стол остаётся, но как инструмент ВНУТРИ двора, а не как сам хаб: книга, картотека, чертёж дома — прозрачный слой поверх живого двораТри раздела канона никуда не деваются, им нужно место. Модель «UI поверх живого мира» у нас уже принята для инвентаря, задник-стол уже единственный в игреacceptedguild-courtyard §Стол мастера
3Видны все, кто дома — не кап и не выборка «значимых»Рост ростера 8 → 64 должен читаться физически: двор наполняется, и видно, на что ушла казна. Цена принята сознательно — дальние тела показываются упрощённо, иначе шесть десятков ригов просадят кадрacceptedguild-courtyard §Люди во дворе
4Хаб — главный экран игры, титульник тонкий (выбрать профиль и дом). Имущество игрока (компендиум, мастерская AI-профилей) по-прежнему не входит в дом, но открывается ярлыком из двораИгрок живёт в доме, а не в титульном меню; выбрасывать его на титул за компендиумом незачем. Граница владения «дом vs игрок» (2026-07-27/12) при этом целаacceptedguild-courtyard §Вход и выход
5Зоны двора на старте: Ворота (отряд и старт забега), Калитка (кандидаты), Мемориал, Стол мастера, Тренировочный пунктКуча из шести десятков тел читается хуже таблицы; место = смысл, и взгляд сам находит важное. Калитка — прямое воплощение канонного «кандидаты стучатся в дверь»acceptedguild-courtyard §Зоны двора
6Тренировочный пункт живёт зоной во дворе, а не узлом на карте забегаЗакрывает развилку, висевшую открытой с 2026-07-27. Переучивание перков — часть быта дома за валюту гильдии; узел в забеге сделал бы правку durable-перков частью одного заходаacceptedguild-courtyard §Зоны двора, guild-development
7Картотека — навигатор по двору, а не замена ему: клик по карточке ведёт камеру к человеку, клик по телу открывает досьеРовно та жалоба, из-за которой в Darkest Dungeon просили «весь ростер на одном экране». Экран нужен, но как поисковик по двору, иначе двор превращается в декорацию, по которой невозможно работатьacceptedguild-courtyard §Стол мастера
8Гость в чужом дворе может всё, кроме необратимого по людям: наём и роспуск — за хозяином домаКазна принадлежит дому и тратится каждым без гейта прав (2026-07-27/10), но люди — это биографии хозяина. Общие деньги не дают права необратимо менять чужую историюacceptedguild-courtyard §Кооп во дворе
9Двор допускает лёгкие необязательные мелочи (похлопать по плечу, поставить двоих рядом, дать прозвище, положить что-то на Мемориал, гульнуть двором) — при трёх обязательных критериях: нет срока и не копится · не даёт силы · стоимость внимания не растёт с ростеромВыбор Макса из трёх вариантов; предложенный скрайбом HARD «двор не создаёт задач вообще» отклонён как слишком сухой. Критерии — страховка от известных грабель: ограниченные слоты активностей дали Darkest Dungeon его ботлнек, а у нас ростер вдвое больше их максимумаacceptedguild-courtyard §Люди во дворе
10Связи между людьми — надписи без механики: «выжил вместе с такой-то» плюс эти двое стоят рядом во двореДанные уже пишутся для Летописи, влияния на бой ноль, обслуживания ноль — а привязанность растёт. Столп «нарратив рождается сам» без новой системыacceptedguild-courtyard §Люди во дворе
11Ветеранство читается глазами двумя рычагами: накидываемая метка (плащ, лента, жетон) и место во дворе (новобранцы у калитки, ветераны у стола)Шрамы и вариации тел множили бы арт на число ступеней. Риг уже умеет носить предмет, а место говорит статус раньше, чем игрок прочитает меткуacceptedguild-courtyard §Люди во дворе
12Возвышение меняет двор светом, плотностью людей и размером Мемориала — не переделкой тайлов под ступеньДуга «мило → мрачно» получает физическое тело в том месте, которое игрок видит каждый забег, и платится освещением, а не арт-пакетом. Двор читает ступень своего дома (2026-07-27/5)acceptedguild-courtyard §Возвышение меняет двор
13У Гильдмастера есть тело: фигура в робе с капюшоном, лицо скрыто (реф Wizard of Legend), управляется ходьбой; цвета робы открываются за мелочь ГильдмастераРешение Макса против предложения скрайба «мастера бестелесны». Аргумент, который скрайб не учёл: у мелочи Гильдмастера не было главного носителя — фигура мастера самая заметная вещь в коопе. Скрытое лицо при этом делает мастера инородным двору, и «хаос против порядка» (2026-07-27/тональный ключ) получает тело задолго до разворотаacceptedguild-courtyard §Гильдмастер во дворе
14Покупки дома видны во дворе: слоты ростера — это больше народу, удобства — появившиеся объектыВалюта гильдии расширяет опции и удобство, но её эффект должен быть заметен без цифр. Витрина уже есть — не пользоваться ею значит оставить прокачку полоской в чертежеacceptedguild-courtyard §Стол мастера
15Скин арены ровно один в момент времени (бой · Ристалище · двор) → во время забега двор недоступен по построению; выход в забег = ворота, за ними на столе раскладывается карта актаСледствие конституции persist-мира: мир не выгружается, взаимоисключающие полноэкранные пространства уже приняты. Ничего блокировать руками не нужно, а вход в забег читается без экрана загрузкиacceptedguild-courtyard §Форма, proving-grounds

proposed скрайба (ждёт вердикта Макса):

#ПредложениеПричина
16Двор не гейтит действия: «В забег», картотека и книга доступны с любого места, сам двор компактныйМакс выбрал управляемую ходьбу вместо «работа сразу, фигура доезжает». Ходьба как удовольствие — хорошо; ходьба как условие доступа — тот самый налог, из-за которого хабы в жанре просят проскакивать. Формулировка страховки озвучена, но вердикта на неё ещё не было

Правит доки: новый Modes - Guild Courtyard (владелец формы хаба), Run - Guild Development §Хаб гильдии (состав остался, форма ушла ссылкой; снят открытый вопрос про тренировочный пункт), Meta - Glossary (Двор гильдии, аватар Гильдмастера; уточнены Ристалище и Мемориал), proving-grounds (открывается из двора), Coop - Overview §Карта владения.


2026-07-30 (вечер) — тинт красит только повторок; цвета ростера переезжают в дизайн

Контекст: Макс пришёл с жалобой на цвета юнитов — «стандартная релика зачем-то имеет тинт, огненный мечник выглядит зелёным, и такого дофига». Разбор нашёл дев-фолбэк в резолвере: незаданный тинт подменялся оттенком от хеша имени SO. Замер подтвердил жалобу дословно — огненный мечник получал hue 147 (зелёный), базовая болванка 126 (тоже зелёный), всего под рулеткой было 8 юнитов из 17.

#РешениеПричинаСтатус
1Тинт тела нужен ТОЛЬКО чтобы развести юнитов, делящих один спрайт. У владельца своего арта тинт White; внутри группы, делящей арт, ровно один остаётся White — он оригинал, остальные подкрашиваютсяФормулировка Макса: «тинт нужен лишь если спрайт юзается сразу несколькими персами, и то лишь повторкам. А если одним — и не надо». Тинт не описывает персонажа, он различает копии; на своём арте он только глушит краски художникаaccepted
2Дев-фолбэк «White = не задан → оттенок от хеша имени» снят. White означает ровно «не красим»Хеш имени не знает ни цвета арта, ни того, делит ли юнит спрайт: он отвечал на вопрос, которого никто не задавал, и делал цвет невидимым в инспекторе. Отвергнута починка «подобрать фолбэку хорошие цвета» — цвет тела авторское решение, а любой фолбэк его отбираетaccepted
3Перекраска персонажа тинтом объявлена невозможной, а не «плохо настроенной». Тинт умножается на готовый цветной арт: синий рыцарь под оранжевым тинтом становится тёмно-серым, не огненным. Перекраска — работа Palette Remapper или своего артаЗамер причин «странных цветов»: Друид красился зелёным поверх КРАСНОГО воина, Треант — зелёным поверх СИНЕГО рыцаря. Умножение умеет только затемнять и глушить, поэтому повторкам ставится приглушающий сдвиг, а не «цвет идеи»accepted
4Назначение цветов эффектов по ростеру переезжает в Vision - VFX Color §Ростер; в тех-справке остаются формула множителей, контракт полей и потребителиЗаявка Макса «надо добавить мейн цвета и градиенты в ГД док». Таблица баз лежала в тех-вике и была вторым владельцем дизайн-факта: «кому какой цвет» решает дизайнер, а не инженерaccepted (владение)
5Палитра разброса отдельным решением на юнита НЕ является — выводится из базы (конец 0 пересвет в его оттенке, конец 1 насыщенный конец), поэтому в дизайн-таблицу не пишетсяВозражение скрайба на «расписать и градиенты тоже»: два числа, которые нельзя выбрать независимо, в таблице стали бы вторым владельцем базы. Формула — в тех-справке, значения — в SOaccepted (правка формулировки задачи)
6Главный цвет обязан быть задан у каждого юнита явно. Прежняя цепочка «цвет эффектов не задан → тинт тела» больше не работает: тинт теперь честно бывает White, а ровно белый эффект даже не пробивает порог bloomСледствие п. 2, поймано при разборе. Сторож — UnitTintPolicyTests.VfxColor_IsAuthoredExplicitlyaccepted

Довердикты Макса тем же вечером:

#РешениеПричинаСтатус
7Развести юнитов с общего арта по свободным пакам — сделано: Друид → Forest Mushroom, Монах → Fantasy Warrior. Приглушение осталось только там, где своего арта нетВердикт Макса на предложение скрайба («можешь, если это быстро»). Умножение на красного воина давало три различимых градации на четверых носителей; свой арт различает честно, а тинт становится тем «минимумом», которым он и должен быть. Проверено, что быстро: у обоих паков уже есть нарезка, клипы и override-контроллерaccepted
8Оттенок эффектов МОЖЕТ повторяться между юнитамиФормулировка Макса: «цвета могут повторяться, в чём проблема, 0 проблем вообще, мб даже лучше». Одиннадцать героев уже занимают весь круг, и требование уникальности гнало бы врагов в чужие сектора ради самой уникальности. Совпадение читается как родство, а не как ошибкаaccepted
9«Враги — единая красная семья» СНЯТО. Враждебность носит полоса HP над юнитом, а не цвет искр; враги различаются приглушённой насыщенностью, оттенок берут по существуВердикт Макса: «ТО, что противники враги говорит ХП БАР над ними, а не тинт» и «куда гоблина в красный». Прежнее правило решало опознание, которое уже решено интерфейсом, и заодно запрещало гоблину быть зелёным. Замещает решение 2026-07-26 о красной семьеaccepted, замещает прежнее (superseded)
10Гоблин-рядовой нейтрален (Dust), выразительность растёт к головорезу (Venom)Требование Макса «рядовые должны быть нейтральными». Рядовой — фон пачки, лицо есть у того, у кого есть механикаaccepted
11ВСЕ цвета юнита — в токенах дизайн-системы, в SO только РОЛЬ. UnitData держит UnitTone и BodyShade; значения живут в tokens.*.uss → снимок GuildmasterPalette; HDR-яркость накручивает CombatColorPalette множителямиТребование Макса «все цвета надо хранить в ТОКЕНАХ, а не наобум в SO». Формально это незакрытый долг правила от 2026-07-27 («цвет не хардкодится — ни в C#, ни в USS, ни полем Color в SO»): цвета юнитов были последним местом, где сырые Color уцелели. Роли названы по смыслу оттенка, а не по юниту — роль на каждого героя превратила бы палитру во второй реестр контентаaccepted
12Палитра разброса перестала быть данными — выводится из роли формулойОна и не была решением: три поля на юнита дублировали правило множителей, вбитое руками в 17 ассетовaccepted
13CombatFeelConfig переезжает на роли вторым заходом (23 цветовых поля; семь из них уже дублируют токены значение в значение)Вопрос Макса «если норм переносится в токены, лучше единый источник?» — да, и там дубль уже существует, держится только на том, что его не правили. Отдельный коммит, потому что миграция типов полей — самая рискованная часть, и её лучше обкатать на юнитахaccepted (план)

Сверка фактом (не по памяти): главные цвета и палитры разброса уже залиты в SO у всех 17 юнитов ровно по формуле множителей — сверены поштучно, расхождений нет. Заливать было нечего; не хватало именно записи «кому какой цвет» в дизайне.

Правит доки: Vision - VFX Color §Ростер (новый раздел), Reference - VFX Color §5 (таблица заменена указателем) и §3 (оговорка про White-тинт), тех-журнал 00-meta/journal/2026-07-30-body-tint-only-tells-twins-apart.md.


2026-07-30 — кооп получает свой кластер: присутствие, арбитры, четыре класса синхронности

Контекст: Макс попросил единый источник правды о коопе — собрать разбросанные идеи взаимодействия (броски кубов, видимость курсоров, общие деньги) и придумать новые. По ходу дал вторую заметку: «view у нас целиком просчитан заранее, там просто смотри мультик вместе как видео, а мышки — риалтайм; такие детальки стоит проговорить». Сессия шла с веб-ресёрчем по кооп-референсам.

#РешениеПричинаСтатус
1Кооп получает свой кластер 50-modes-ux/coop/ — вход index плюс четыре дока (присутствие, арбитры, взаимодействия, модель синхронности). Прежний одиночный multiplayer.md расформирован, его содержимое — в indexРешение Макса «сначала надо единый источник обо всём». Один док на кооп уже не держал материал: там модель сессии, экономика дома, споры и сетевые требования — четыре разных предметаaccepted
2Кластер держит только то, что без коопа не существует. Кооп-следствия чужих систем (казна дома, голосование за улучшение, таймер расстановки, «Шёпот толпы») остаются у своих владельцев и попадают в кластер ссылкой — таблица §Карта владенияВозражение скрайба на «перенести сюда всё»: кооп — линза поверх всей игры, а не кластер знания. Перенос казны из Run - Guild Development дал бы второго владельца одного факта, то есть прямое нарушение правила единственного источникаaccepted (правка исходной формулировки задачи)
3Игроки видят курсоры друг друга — направление принято, детали в Coop - PresenceЗаявка Макса. Вся агентность игроков живёт вне боя, значит кооп ощущается ровно настолько, насколько игроки видят друг друга в подготовке и в магазине. Чужой курсор — самый дешёвый носитель присутствия (опыт Figma / Miro)accepted (направление), детали proposed
4Разная природа синхронности — ось отдельного дока. Четыре класса: бой = «кино» (предпросчитан), транзакции (казна, покупки, расстановка), присутствие (курсоры, пинги), локальный шум (камера, звук)Заметка Макса. Деление экономит и трафик, и споры: класс 1 — один пакет на бой, класс 3 — поток теряемых мелочей, класс 4 — вообще не сеть. Дизайн формулирует требования к ощущению, тех-вика выбирает механизмaccepted (рамка)
5Дизайн-требования к бою-«кино»: все смотрят один и тот же бой; пауза и скорость общие; камера личная; отстающий догоняет, а не тормозит группу; задержка допустима перед боем, не внутриСледствие п. 4. Общий кадр отобрал бы у игрока единственную личную свободу в фазе, где всё остальное общее; личная пауза сделала бы невозможным обсуждение, ради которого пауза и естьaccepted (рамка), proposed в деталях
6Владение бросками d6 при спорах переехало из Run - Events & Minigames в Coop - Arbiters; на прежнем месте — указательИнструмент-арбитр — кооп-механика, а не узел карты. Заявка Макса 2026-07-29 сохранена дословно, вместе с оговоркамиaccepted (владение)
7Развилка «роли игроков» переехала из Meta - Open в Coop - Minigames & Roles §Роли и семи-коопРазвилка чисто кооповая; в инкубаторе она лежала без движения с раннего наброска. Переезд ставит её рядом с альтернативой и вердиктомaccepted (владение)
8Ярлык титулов для нового кластера — Coop (Coop - Presence & Cursors и т.п.)Система тайтлов привязывает ярлык к папке; папка coop внутри 50-modes-ux получает свой ярлык, иначе четыре дока стали бы Modes - ... и слились с раскладкой клавиш и UI-фидбэкомaccepted (структура)

proposed скрайба (ждут вердикта Макса):

#ПредложениеПричина
9Арбитр — лестница из трёх ступеней: уговор → голосование большинством → кубик только при равенстве или в игре на двоихКубик на последней ступени остаётся событием, а не рутиной. Урок из жанра: в Divinity: Original Sin спор решался «камень-ножницы-бумага», а в DOS2 механику убрали — Larian дала персонажам расходиться вместо того, чтобы сводить их случайностью. Точный вывод: арбитр законен только там, где решение физически одно. У нас гильдия и кошелёк одни, дивергенции почти негде взяться
10Ротация «Старшего» как альтернатива кубику для крупных решений (маршрут, финальная трата перед боссом)Там случайность обесценивает подготовку. «Старший» даёт социальную драму вместо рандома: право решать надо тратить осмотрительно
11Мягкая заявка на объект («кто-то уже смотрит эту позицию») и правило «отказ должен быть предсказан, а не показан после»Казна общая без гейта прав (2026-07-27/10), значит двое могут потратить одни деньги. Показать покупку и отобрать — обещание, взятое назад; ощущается багом даже когда работает штатно
12Пари между Гильдмастерами как занятие на время боя: втайне ставят на «героя боя», после боя открываютАвтобатлерная болезнь «во время боя нечего делать» в коопе умножается на четверых. Пари даёт причину смотреть внимательно, платит нарративом и не требует ввода в бой — автономность боя не тронута. Данные уже есть в боевом логе
13Эпитафия — при смерти «Сосуда» каждый предлагает строку в Мемориал, группа выбираетДешевле всех мини-игр (текст, никакой новой механики), попадает прямо в столп «нарратив рождается сам», работает и в соло
14Слепой драфт как опция-челлендж: реликвии видны только своему игроку, договариваются словамиПрямое лекарство от квотербекинга (референс — Hanabi). Именно опция: правилом он ограничил бы свободу лезть в общее, принятую 2026-07-19
15Зарок Гильдмастера (Pledge) вместо фиксированных ролей: личная тайная задачка на забег («ни один лучник не умрёт»)Жёсткие роли противоречат «коопу как свободе» и плохо живут при переменном числе игроков. Зарок расшатывает квотербекинг, не ломая общую цель. Слово выбрано в обход коллизии: Обет (Vow) уже занят правилом поведения «Сосуда» (2026-07-27/11) — Зарок берёт игрок, Обет берёт боец. HARD-оговорка: формулировки только «сохранить / обойтись без / успеть», никогда «пусть кто-то погибнет» — скрытый предатель в игре, обещающей дружбу, это не наш обман ожиданий
16Пинг говорит голосом «Сосуда», а не игрокаDeep Rock Galactic держит на этом половину обаяния коопа. У нас барки и процедурный лор уже есть — служебный инструмент сшивается с нарративом почти бесплатно
17Скрыть чужие курсоры можно у себя, свой от других — нельзяМолчаливый курсор за плечом давит (известная жалоба на Figma), поэтому личная настройка нужна. Тайное присутствие в игре про общий кошелёк — инструмент грифинга

Довердикты Макса тем же днём (по четырём развилкам, вынесенным скрайбом):

#РешениеПричинаСтатус
18Курсоры видны всегда, у каждого личный выключатель чужих. Вариант «только в момент действия» отклонёнВердикт Макса. Приглушать присутствие ради комфорта — терять половину смысла; давление лечится выключателемaccepted
19Кубик доступен всегда, как только спор заявлен. Спор — ВЫБОР игроков, а не обязанность. Лестница скрайба «уговор → голосование → кубик при равенстве» и авто-определение спора системой отклоненыФормулировка Макса: «если хотят спорить — почему бы и нет?». Игра не диагностирует спор и не подсовывает арбитра; группа, договаривающаяся словами, кубика не увидит вовсеaccepted (правит proposed №9)
20Арбитр — не один предмет, а несколько быстрых ритуалов (d6, «камень-ножницы-бумага» и родня), и выбирают их САМИ СПОРЩИКИ, а не случайный ролл игры. Дефолт — d6Вердикт Макса, продолжающий №19: раз спор — выбор игроков, то и орудие спора их выбор; «на кубиках или на камень-ножницах?» уже часть перепалки. Дефолт-кубик снимает риск, что выбор ритуала станет ещё одним споромaccepted; список ритуалов открыт
21Камера в бою личная, плюс добровольное «смотреть глазами игрока»Вердикт Макса. Кадр — единственная личная свобода в фазе, где всё остальное общее; делиться им приятно, навязывать нельзяaccepted
22Заводится ЛИЧНАЯ ВАЛЮТА Гильдмастера — третий канал рядом с домом и контентом. Не для силы, отдельная мини-механика, открывается вехой (не с первого забега), отключаемаяРешение Макса, ответившее на вопрос «чем занять игроков во время боя»: пари требуют ставки, ставка требует своих денег. Валюта живёт ровно в социальном слое, ради которого кооп затевалсяaccepted
23Тратится на косметику, которую видят остальные: скин курсора, шрифт и рамка ника, скины кубиков, жестыРешение Макса («скин на курсор, на шрифт никнейма»). Скрайб добавил инвариант: покупка обязана быть видимой другим — косметика «только для себя» в кооп-валюте бессмысленна. Петля замкнута внутри косметики, поэтому награда за возню не может протечь в силуaccepted
24Пари — НЕ «кто нанесёт больше урона». Ставят на события, зависящие от AI, таргетинга и порогов; линия из 3-5 строк генерируется под конкретный бой, ставки скрыты до конца боя, банк общий (тотализатор)Требование Макса: «кто больше урона» решается выбором дамагера за секунду — никакой игры. Тотализатор выбран скрайбом вместо игры против казны: валюта не печатается, инфляции нетaccepted (требование), каркас proposed
25Имя валюты — «Гильдейская мелочь» / Guild Coppers»superseded №35 (уточнено тем же днём)Вердикт Макса из четырёх предложенных составных имён. Требование, из-за которого отклонены «Жетоны»: нужен коопно-гильдийский флёр, а «жетон» — слово про учёт. Отклонены также «Стекляшки», «Фишки», «Гильдейские фанты», «Право хвастать». Цена имени, записанная скрайбом: «мелочь» читается как деньги, поэтому инвариант «не покупает силу» обязан быть виден в подаче — отдельный карман и витрина без единой боевой строкиaccepted; в glossary внесено
26Термин «Зарок» / Pledge для личной тайной цели игрока — чтобы не столкнуться с Обетом (Vow), правилом поведения «Сосуда»Разведение омонимов: Зарок берёт игрок, Обет берёт боец. Внесено в глоссарий со статусом proposed — сам Зарок ещё не приняттермин accepted, механика proposed
27Зарок Гильдмастера платит гильдейской мелочьюМысль Макса, сцепившая два предложения: тайная цель без награды — просто самоограничение, а с валютой это ставка на весь забег, и платит она тем, что нельзя обменять на силуaccepted (при условии, что Зарок вообще берём)

Достроено тем же днём (заход «дальше по трём веткам»):

#ЧтоПричинаСтатус
28Строки пари привязаны к боевой ленте. Каталог по осям (выживание · таргетинг · темп · чужое поведение · сорванный каст · плотность · уклонения), каждая строка проверяется одним запросом к событиям лентыВ коде уже есть BattleTape: события лежат за весь бой, снимки — окном. Значит проверяемость пари — не гипотеза, а свойство существующего механизма. Строка, которую нельзя проверить машинально, в линию не попадает: иначе пари станет спором о трактовкеproposed
29Ловушка предпросчёта названа: сим уезжает вперёд по ленте, поэтому к моменту ставки ответ может быть уже посчитан. Отсюда два требования: окно ставок закрывается до старта сима боя, и пока ставки открыты, лента не уходит клиенту ни целиком, ни фрагментомБез этого пари либо читерится чтением памяти, либо игра начинает знать ответ и назначать цену по нему. Цену из результата не делаем никогдаaccepted (требование)
30Коэффициентов не будет вообще: при тотализаторе цену назначают сами ставкиСнимает задачу, которую игра честно решить не может — оценить вероятность события, исход которого она уже посчиталаaccepted (следствие)
31Список ритуалов-арбитров (d6 · камень-ножницы-бумага · «ближе к числу» · «пальцы на счёт три») с правилом масштаба: парный ритуал в споре втроём не предлагаетсяОтбор по трём условиям: секунды, без навыка (иначе арбитр начнёт проверять реакцию — против доктрины «скилл в подготовке»), масштаб на 3-4 спорщика. Турнир на выбывание за право купить сапоги никому не нуженproposed
32Каталог Зароков по трём группам («сохранить» · «обойтись без» · «успеть») плюс четыре правила: один на забег · провал ничего не отнимает · вскрытие в конце забега всем сразу · ни один зарок не требует чужой ошибкиПроверяемость — как у пари, из ленты и состояния забега. Правило про провал важнее прочих: штраф за провал толкал бы игрока топить общий забег ради личного очкаproposed
33Расхождение с тех-каноном примирено: «отстающий догоняет» относится к лагу показа, а выпавший из сессии — к составу сессии, и там уже принята автопауза с выбором (тех-журнал 2026-07-16)Формулировка скрайба «никаких „ожидаем игрока“» противоречила принятому решению. Разведено по природе события: лаг — про показ, дисконнект — про сессию, ждать осмысленно только во втором случаеaccepted (правка формулировки)
34Скорости показа нет ни личной, ни общей — исправлено в кооп-докеСкрайб написал «пауза и скорость общие», но фаст-форвард отклонён ещё 2026-07-29 и зафиксирован в коде показа. Пауза общая, ускорения не существуетaccepted (исправление)

Довердикты по итогам захода (вечер того же дня):

#РешениеПричинаСтатус
35Имя валюты уточнено: «Мелочь Гильдмастера» / Guildmaster's Coppers. Замещает №25Вердикт Макса на возражение скрайба: прилагательное «гильдейская» заявляло владельцем гильдию, тогда как валюта личная — это спорило с границей «дом vs игрок» (2026-07-27/12) и грозило слиться с будущим именем Валюты гильдии, которая до сих пор безымяннаaccepted, заменяет №25
36Зароки и фиксированные роли игроков — отложены оба. Материал в кооп-доке сохранён как готовый к возвратуВердикт Макса. Валюта от этого не страдает: она живёт на пари, а Зароки были вторым источником для разнообразия, не для работоспособности. Проверка при возврате: Зарок не должен стать выгоднее пари, иначе игроки начнут играть в свои цели вместо общего забегаотложено
37Скины кубиков разведены по каналам: обычные — за мелочь, памятные — за достижения и не продаются никогдаВердикт Макса. У обоих каналов остаётся своя ценность, у игрока — разница между «купил» и «заслужил». Следствие для авторинга: канал стоит в данных скина, и однажды заслуженный скин нельзя потом положить в лавкуaccepted
38Реестр ритуалов-арбитров: шесть штук, каждый играется от двух до четырёх (Кости · Знаки · Ближе к числу · Морра · Соломинки · Чётное слово)Требование Макса «записать 4-6 на будущее, играться должны и в дуо, и вчетвером» отсекло «камень-ножницы-бумагу» в чистом виде: он парный по природе и втроём вырождается в турнир на выбывание. Взята его многосторонняя форма («Знаки»). Прочий отбор — секунды, ноль навыка и реакции, результат читается без подсчётаaccepted (реестр); сколько делаем на старте — открыто

Ревизия реестра ритуалов (там же, 2026-07-30):

#РешениеПричинаСтатус
39Морра и «Чётное слово» вычеркнуты из реестра. Введено правило простоты: ритуал объясняется одной фразой и заканчивается за секундыВердикт Макса. Морра требует держать в голове чужие возможные руки — это мышление, а не ритуал; «Чётное слово» это два шага и сложение вместо одного взгляда на результатaccepted, правит №38
40Кликер-на-скорость отклонён самим Максом и заменён на «Один клик»: каждый ставит одну метку, цель скрыта и открывается после, ближайший берётЗаявка была «кликер 5 сек, кто больше», через ход уточнена: «точнее не кликер, а просто 1 клик». Возражение скрайба записано в док, чтобы соблазн не вернулся: случайность годится в арбитры потому, что равномерна, а скорость клика — свойство человека и его мыши. Иначе один игрок забирает все споры, спор решается периферией, а игрок с усталыми руками выпадаетaccepted
41«Ближе к числу» и «Один клик» слиты в одну игру — с вводом жестом, как у МаксаЭто была одна и та же механика в двух формах ввода, и форма Макса лучше: метка ставится мгновенно, печатать число медленно и мимо тона. Реестр стал короче без потери разнообразияaccepted
42Жребий в реестре только ОДИН. Соломинки, Колесо, тяга карты и три сундучка — одна механика в четырёх костюмах; скрайб рекомендует КолесоВ правилах между ними нет разницы вовсе, вся разница в драматургии: Колесо даёт общее действие и паузу перед результатом, а арбитр у нас существует ради баек, которые рождаются из ожиданияформа proposed, число жребиев — accepted

Итого в реестре четыре ритуала: Кости (дефолт) · Знаки · Один клик · Жребий.

Командные интеграции: реестр и первые вердикты (2026-07-30, вечер):

#РешениеПричинаСтатус
43Заведён реестр интеграций Coop - Interplay Registry — отдельный дом для мелочей «что игроки делают друг с другом». Границы кластера переразведены: presenceпассивная видимость, interplayактивные действия, minigames (переименован из interactions) — мини-игры как события забегаПросьба Макса: «надо иметь файл со всеми такими интеграциями». Мелочи имеют свойство теряться и переизобретаться, поэтому у каждой строки в реестре есть статус и место жизни, а отклонённое лежит рядом с причинойaccepted
44Хулиганство разрешено и расширено: толкнуть чужой курсор, выхватить вещь из рук — реликвию при надевании, бойца при перетаскивании, позицию из витрины, карточку кандидата, лежащий кубикВердикт Макса: «Хулиганство в таком духе мы не запрещаем, а даем возможность. Хулиганить или нет решать сами игроки, хихи». Референс того же рода — перетаскивание товарища в R.E.P.O. Работает потому, что никого не ломает: перехват стоит задержку и смешок, а не потерюaccepted
45HARD: перехватывать можно ПРОЦЕСС, но не подтверждённое. Пока вещь в воздухе — она общая; легла — это решение группы. Кубик: пинать лежащий можно, катящийся неприкосновененИначе перехват превращается в откат чужого действия и нарушает правило «не отбирать то, что игрок уже увидел сделанным» (sync-model §Класс 2). Для кубика граница ещё жёстче: пнуть катящийся — подделать результат арбитраaccepted
46Взяты: чокнуться (два курсора рядом, оба кликнули), прозрачная казна (кто и на что потратил — видно всем), метка выбранного узла и рисование на общем полотне (реф Slay the Spire 2), печати на итоге боя (уезжают в Хронику)Вердикты Макса. Общее у всех: две руки, обратимость, общее полотно — из этого выведен тест на интеграцию (§в реестре). Рисование живёт на каждом полотне (карта, арена, витрина, досье), живёт до конца фазы и ни на что не влияетaccepted
47Эмоции есть — короткий набор «как в LoL» (да · нет · спасибо · жду · ой · смешно), но языком мира: жест аватара, поза, барк «Сосуда», выкрик с трибунЗаявка Макса. Прежняя формулировка скрайба «эмодзи-реакций не будет» не отменяется, а уточняется: реакции есть, оформлены как наши. Механике эмоция ничего не сообщает — как и пинг, это жест (класс 3)accepted; словарь и носитель открыты
48Пинги переехали из presence в реестр; владение — тамПинг — активное действие, а не пассивная видимость. Разведение границ (см. №43)accepted (владение)
49Шестнадцать идей первого захода отклонены с причиной и оставлены в реестре, а не удаленыВердикт Макса «остальное — не уверен» плюс разбор скрайба: половина провалила тест по третьему пункту — это украшение мира (курсор зевает, аватар сидит у костра, боец кланяется), которое можно увидеть, но нельзя сделать вместе. Причина записана, чтобы идеи не вернулись под другими именамиaccepted
50Скрайбу указано не генерировать «двадцать для красивого числа»Прямая претензия Макса. Реестр требует обоснования на строку, а не объёма; часть отклонённого материала при этом годится нарративу — но как реплики мира, не как кооп-интеграциипринято к работе

Эмоции и рисование: детали (2026-07-30, довердикты):

#РешениеПричинаСтатус
51Эмоции — мета-косметика за мелочь Гильдмастера; на старте открыт только «лайк»Вердикт Макса. Личная валюта получает вторую честную трату рядом со скинами, а словарь общения растёт вместе с игроком: первый вечер — один лайк, через месяц — своя манера. Инвариант «валюта не покупает силу» держится: эмоция ничего не сообщает механикеaccepted
52Словарь эмоций — с характером, не служебный. Кроме коротких «да/нет/жду» в нём настоящие эмоции (грустно, злость, смех, лайк) и реплики голосом мира — образец Макса: «Слава гильдии!». Носитель — иконка у курсораЗаявка Макса. Поза аватара во дворе отложена как возможное развитие: иконка работает на любом экране, поза — только во двореaccepted; полный словарь и цены открыты
53Рисование: кисть, ластик (в том числе по ЧУЖОМУ), два размера кисти, 7 готовых цветов плюс восьмой свой из RGB. Живёт до конца ЗАБЕГАВердикт Макса. Срок жизни до конца забега даёт «я же говорил» доказательство: вернулся на карту через три боя — стрелка на пропущенной ветке всё ещё там. Стирание чужого — фича того же рода, что перехват вещей: рисунок не решение и не транзакция, а разговор, поэтому прав и лимитов не вводим. Семь готовых цветов берутся из палитры проекта, восьмой произвольный — цвет рисунка не участвует в чтении бояaccepted
54Готча, вытекающая из №53: рисунок стал частью состояния забега и попадает в сейв. Хранить штрихи (цвет, толщина, точки), а не растровый слойИз дизайн-формулировки «живёт до конца забега» это не видно, а цена ошибки высокая: растр на весь акт — мегабайты в каждом файле сейва и в облачной синхронизации, вектор — килобайтыaccepted (требование к реализации)
65Постоянное «кто где» — это список игроков со значком экрана у каждого (на карте · в витрине · во дворе · в бою)Вердикт Макса на дополнение скрайба к №64: анимация ухода показывает момент, список отвечает в любую секунду. Заодно снимается вопрос, где жить прочим признакам присутствия («выбирает», «готов», «отошёл») — там же, отдельная панель аватарок не нужнаaccepted
59У игрока есть МЕЙН-ЦВЕТ: выбирает сам, меняет перед забегом. Тем же цветом идут курсор, подпись, метки узлов, штрихи рисования, печати, аватаркаРешение Макса: «это будем часто юзать во всём коопном». Цвет становится идентичностью в коопе, а не украшением одного экрана. Скрайб добавил три условия работоспособности: цвета из палитры (её HARD-владение не трогаем), уникальны в сессии (два одинаковых убивают мгновенное «чей это»), и различимы на арене, карте и во дворе, а не только в менюaccepted
60Публичное наведение и призрачная копия взятого — приняты (были proposed)Вердикт Макса. Оба нужны не для красоты: наведение снимает половину голосового трафика «да вон тот лучник», а призрачная копия — условие работы перехвата, потому что выхватить можно только то, что видно в рукахaccepted
61Вместо метки над объектом — маленькая иконка «смотрю» рядом с курсором того, кто изучает позициюРешение Макса. Дешевле и чище: витрина не обрастает мигающими метками, информация та же. Задача та же — чтобы отказ на покупку из общей казны был предсказан, а не показан после кликаaccepted
62«Не участвую» — кнопка внутри ритуала, а не право молчать. Обычные решения (маршрут, улучшение, покупка) принимают все; отказаться можно от начавшегося ритуалаУточнение Макса, поправившее скрайба: тот предлагал общее правило «отказ = согласие с остальными». Граница верная — добровольным у нас является спор, а не участие в жизни гильдииaccepted, правит proposed
63Ничья на костях перебрасывается бесплатноНичья — сбой механизма, а не решение игрока; платить за неё запасом перебросов несправедливоaccepted
64Курсор не пропадает, а уходит: переходя на другой экран, он уезжает в сторону этого перехода — видно, куда делся человекЗаявка Макса. Решает самый частый вопрос кооп-сессии «ты где?»: исчезнувший курсор сейчас читается как «отошёл», хотя игрок просто в другом месте. Дополнение скрайба: анимация — это момент, заметный только если смотрел; поэтому рядом нужен постоянный значок текущего экрана у аватарки. Вместе закрывают тему, по отдельности нет. Требования: около четверти секунды, читаемость периферией, и «свернул окно» показывать иначе, чем «ушёл на карту»proposed (заявка принята к проработке)
57Жребий берём в ДВУХ костюмах — Колесо и Карточки. Предложение скрайба «только Колесо, остальное читается как повтор» отклоненоФормулировка Макса: «тут подача сильно решает… визуал разный, для таких мини-игр этого достаточно». Отсюда принцип, годный дальше: для микро-ритуала подача и есть механика — игрок не сравнивает их по правилам, он выбирает, во что приятнее ткнуть. Ощущения при этом разные по-настоящему: Колесо даёт паузу и общее действие, Карточки — мгновенность «хватит спорить». Соломинки и три сундучка не берём: третий и четвёртый вид того же жребия ощущения не добавятaccepted, правит proposed №42
58На старте делаем два ритуала — Кости и Знаки; Один клик, Колесо и Карточки лежат в реестре и добавляются по желаниюВердикт Макса, совпал с рекомендацией скрайба. Два ритуала уже дают разные породы решения: случайность и «переиграл»accepted
56Уточнение к №54 (решение то же, обоснование другое). Хранение рисунков: штрихи-полилинии как источник правды, растр как кэш отрисовки в RenderTexture. Настоящие причины — точки всё равно летят по сети, у штриха есть автор (инвариант «ничто не тайно»), карта акта зумится, и сейв у нас JSON-конверт под облачной маской Saves/**/*.json. Размер файла — последняя причина, а не перваяВопрос Макса «разве растр не легче, и как быть с кругом, нарисованным не отрывая мышь». Ответ: круг и загогулина — это один штрих с N точками, вектор их покрывает; а мегабайты действительно мелочь, поэтому исходная мотивировка скрайба через размер файла была слабой и замененаaccepted (уточнение)
55Клич гильдии, хоровой отсчёт и титул вечера — не кооп-интеграции, а нарратив. Дальше не проектируютсяВердикт Макса: «Клич гильдии и тп - это нарратив, а не кооп И нет, пока про них просто забываем». В реестре интеграций остались только с этой пометкой, чтобы не всплыли снова как кооп-фичиотклонено для коопа

Открылось попутно:

  • Таймер фазы расстановки получил второй аргумент. Он не только анти-AFK: одновременность — приём против квотербекинга из настольного кооператива (пока время идёт, каждый занят своим углом, а не слушает лидера). Возражение скрайба про 90 секунд вместо 30 от этого только крепнет.
  • У жанрового соседа появляется кооп. Guildrun заявил кооп на двоих в разработке (проверено вебом 2026-07-30). Прежняя оценка «пересечение рамочное» устарела: их кооп заходит ровно в наши точки — общие решения в магазине, драфт реликвий, расстановка. Отличие остаётся структурным: у них 2 игрока и свои герои, у нас 1-4 на одну гильдию с общим кошельком.
  • Расхождение с тех-викой, требующее вердикта техов. Journal - Host-Authoritative, Not Lockstep предполагает репликацию состояния каждый тик; заметка Макса про «кино» открывает дешёвые варианты (трасса событий одним пакетом; вход плюс сид с локальным проигрыванием). Второй упирается в тот же float, из-за которого отклонён lockstep, но расхождение здесь не ломает правила — только картинку. Дизайн своих требований не меняет, вопрос отдан тех-вике.

Правит доки: новый кластер Coop - Overview · presence · arbiters · Coop - Minigames & Roles · sync-model · wagers (заведён под №22-24); расформирован 50-modes-ux/multiplayer.md (ссылки переведены по всему vault); указатели — events-minigames §Мини-игры, Open §Перенесённое в канон, Roadmap §Кооп, MOC §50, guild-development §Экономика дома (третий канал).

Осталось открытым: название личной валюты (три варианта у скрайба, вердикт за Максом), состав пула арбитров, строки пари и правила генерации линии, канал скинов кубиков, судьба фиксированных ролей.


2026-07-29 (ночь, 10) — каркас Стадий босса: игрок входит свежим, босс накапливает

Контекст: скрайб проверил цену боссовых швов по коду и вынес развилку «что такое фаза босса». Первый ответ Макса скрайб понял сложнее, чем было сказано, и получил вторую поправку.

#РешениеПричина
1Термин — Stage / «Стадия», не «фаза»слово «фаза» в коде занято дважды: AttackPhase (Windup / Recovery / Idle) и BrainPhase (стаггер AI). Два владельца одного слова в файлах симуляции — дефект. Макс и сам писал «Стадия» в карточке разбойников
2Стадия — это отдельный ОБЫЧНЫЙ бой. Стадии связаны только СЮЖЕТНО, и не более тогоформулировка Макса, поправившая скрайба: тот записал каркас как цепочку стычек с окном, переносом состояния и асимметрией восстановления. Верная модель проще — узел босса это несколько обычных боёв подряд, склеенных текстом
3Отряд игрока входит в каждую стадию полностью восстановленным; павшие не возвращаются (второе — дефолт скрайба)вердикт Макса. Смерть «Сосуда» остаётся событием уровня забега, иначе травмы и Закалка перестают работать
4«Босс усилился во второй стадии» — это ДАННЫЕ, а не перенос состоянияследствие п. 2: во второй стадии стоит другая запись врага, уже с баффами. Машинерия «бой помнит прошлый бой» не нужна вообще
5Между стадиями можно перерасставиться, но не пересобираться (дефолт скрайба)следующий бой другой, и расстановка — его условие; смена предметов и билда посреди начатого узла ломала бы смысл подготовки к узлу

Довердикты Макса тем же вечером:

#РешениеПричина
6Стадия 1 Гоблинской Банды остаётся как есть — это испытание и сторителлинг. Скрайб предлагал слить её в один общий бой ради экономии; предложение отклонено«Не все бои должны быть обязательно супер сложными» (реф — практика ДнД). Скрайб перепутал «убрать шов» с «убрать испытание»: ценность стадии не в сложности, а в инаковости условия
7Испытание стадий — в РАЗНЫХ УСЛОВИЯХ плюс ОГРАНИЧЕННОЕ ВРЕМЯ. К каждой стадии готовятся отдельно, и время на подготовку не бесконечноФормулировка Макса. Это и есть ответ на вопрос «зачем стадии при полном восстановлении»: испытание не про запас HP, а про то, выдержит ли один состав три разные задачи
8Ограничено время ФАЗЫ РАССТАНОВКИ, не бойуточнение Макса. В бою времени по-прежнему нет лимита: исход считается по последней живой команде (BattleOutcome), и это не меняется
9В окне между стадиями меняются расстановка и AI-профили; снаряжение, предметы и состав — нетвердикт Макса. Узел уже начат, пересобираться посреди него нельзя
10Таймер расстановки принят — пункт закрыт из открытых вопросовлежал там с возражением скрайба «давит на реакцию» (спор со столпом «скилл в подготовке, а не в реакции»). В рамке стадий возражение рассыпается: без таймера три условия решаются идеально каждое, и у решения нет цены. Снято правилом «истечение = играем как стоим» (proposed), которое не даёт таймеру проверять скорость рук

Направление, записанное на будущее (детали отложены):

#РешениеПричина
18У каждого боя есть название. Сначала показывается машинными символами, после 5 побед над этим энкаунтером открывается «название от разработчика». В демо — после 1 победы, с комментарием Макса «в полной версии открывается не так быстро, но пусть вы увидите, что тут будет»Идея Макса. Комментарии разработчика и открываемые тайны объявлены частью нарратива — то есть это не бонус-контент, а слой рассказа. Механизм не новый: это врезка «Из мастерской» (решение 2026-07-27/24, дом — Компендиум в Roadmap), перенесённая с карточек на бои

| 19 | Символ до раскрытия — настоящий идентификатор (ENC_0x1A4 / enc.goblin.03), и он же лок-ключ: «наш личный язык» | Предложение скрайба, принятое Максом. Иначе бои до раскрытия сливаются в безликую массу, а с честным id игрок запоминает «снова 0x1A4» и радуется, когда тот оказывается «Трое и костёр». Совпадение id с лок-ключом даёт даровой дев-инструмент: идентификатор виден прямо в игре | | 20 | Пять побед — это долго НАМЕРЕННО: система не для первого и не для второго забега | Вердикт Макса, снимающий возражение скрайба «откроется только хардкорщикам». Долгий горизонт здесь и есть смысл | | 21 | Голос разработчика — это ЛИЧНОСТЬ, а не набор регистров. В разных моментах он реагирует по-разному — саркастично о действиях игрока (постмодерн, отсылки, лёгкий троллинг) или как творец, делящийся своим миром, — но флёр узнаваем всюду | Формулировка Макса, поправившая скрайба: тот предложил разделить регистры по месту («сарказм про игрока, творец про мир»), что оказалось слишком механическим. Личности разрешено быть разной — это норма, а не непоследовательность | | 22 | «Системно-нарративный язык» — это отдельный ЯЗЫК в локализации, наравне с EN и RU. Нераскрытое имя — строка, отрендеренная на нём, а не отсутствие перевода. Подставляется в нужных местах | Идея Макса, заменившая предложенный скрайбом флаг раскрытия на строке. Языком лучше: sys-значение — настоящее значение, поэтому проверка полноты ключей (полный прогон к финальной стадии) ловит дыры как обычно, и «не раскрыто» не спутается с «забыли перевести». Концептуально язык Системы становится реальным языком в таблице переводов — мета-нарратив входит в технический слой, а не в текст | | 23 | Сейвскам, о котором речь: игрок выходит из боя посреди него, увидев, что проигрывает, откатывается и пробует снова | Уточнение Макса. Счётчик привязан не к «перезагрузкам узла» вообще, а к незавершённому бою плюс повторный вход в тот же узел |

proposed скрайба к голосу разработчика:

  • Отсылки только на вечное — жанровая классика, ДнД, роглайты как явление, мы сами. Никогда на актуальную мету и мемы: постмодерн старит игру быстрее всего остального. Троллинг — только за то, что игрок делает в нашей игре.
  • Такт: выход из проигранного боя часто не читерство, а тревожность. Тон — «мы оба знаем, что ты сделал» (соучастие), а не «ты жалок». Ложится в вектор Happy Guildmasters и в «решительно, а не страшно»: подкалываем привычку, не человека.
  • Код локали — x-sys: по BCP 47 префикс x- — легальная приватная зона, чужой код не занимаем и стандарт не ломаем.
  • Системный язык переключается целиком — если он полноценная локаль, его можно включить на всю игру. Готовая открываемая тайна за достижение, стоимость нулевая.
  • Шов в UI-слое: в Unity Localization строка берёт активную локаль, поэтому «эта строка на sys, остальные на русском» требует явного запроса таблицы нужной локали, а не просто LocalizedString.
  • Шов в сейве: троллинг за сейвскам требует счётчиков поведения (выход из незавершённого боя, повторный вход в тот же узел). Сейв версионируется через [SaveSchema], поэтому закладывать надо сейчас — иначе потом это миграция схемы ради шутки.

Снято: возражение скрайба «забытый лок-ключ будет выглядеть как нераскрытое имя» — вердикт Макса: к финальной стадии будет полная проверка всех ключей, а sys-значение и так настоящее.

Попутно приём ложится в мета-нарратив: игрок проходит путь «сначала код, потом автор за кодом» — та же тема, что Система и консоль.

Дезертировавшая Армия — имена и титулы, тот же вечер:

#РешениеПричина
14Тактик — Sorel the Enhancer («Сорель Усилитель»), второй — General Aldis the Bright Shield («Генерал Алдис Светлый Щит»)Выбор Макса из шести вариантов на каждого. Титул описывает боевую функцию: Сорель мегабаффер и стратег (реф — сцена из Overlord), Алдис защитник и душевный воин
15Звание второго — General, а не «Командир»Слово «Командир» решено не вводить как термин (запись ночи 9); «Генерал и Тактик» читается точнее
16ПРАВИЛО ТИТУЛОВ: чем проще, тем лучше — одно понятное слово о боевой функции, никакой нарративной сложностиПрямое указание Макса, распространяется на всех будущих противников. Отклонены метафоры скрайба: the Whetstone, the Anvil, the Kept, the Effigy, the Borrowed Crown. Смысловые повороты кладутся в смену титула, не в сам титул
17Во второй стадии титул Сореля меняется на the Overridden («Переопределённый»)Идея смены — Макса. Слово кодерское (override) и точное: Сореля не стёрли, а переопределили — он всё ещё он, только исполняет чужое. До второй стадии в титулах ни одного намёка на консоль. Отклонены the Overwritten, the Elevated, the Unhandled, the Compiled, the Recursive, the Patched

Дезертировавшая Армия — телеграф, тот же вечер:

#РешениеПричина
24Игрок узнаёт, что его прочли, из КАТСЦЕНЫ. Сорель как типичный злодей проговаривает вслух: «Разведчики донесли… Самый частый тип урона — Аркана! Значит, массовая защита от Арканы!» Реплика подставляет реальную статистику и называет следующий из неё баффРешение Макса, закрывшее вопрос телеграфа целиком. Никаких иконок и служебных подсказок: враг сам объясняет свою домашнюю работу, что и в характере, и дёшево
25Порядок жёсткий: катсцена → расстановка → бойОт порядка зависит смысл. Сказанное до расстановки — это информация, с которой игрок работает в окне (под таймером); сказанное после было бы наказанием за уже сделанное. Разница между задачей и фрустрацией ровно в этом шаге
26В первой стадии Сорель НЕ лжёт: разведчики настоящие, знание получено честно. К консоли он тянется только после поражения в первой стадии, поняв, что проигрываетУточнение Макса, снявшее выдумку скрайба «первая реплика лжёт рамкой». Драматургия получается не разоблачением врага, а падением человека: он переступает черту, зная её цену (видел, как строка убила его солдата), и вынудил его к этому сам игрок. Первая победа оказывается не победой, а толчком
27Окно консоли рендерится прямо в сцене: игрок видит сами команды и то, что они делаютИдея Макса. Выплата по посевам: игрок давно видит ENC_0x1A4 на узлах как «просто символы», и тут человек в кадре начинает этими символами командовать миром. Текстом такое не рассказать. Команды пишутся на x-sys — не «шрифтом под код», а на нашей третьей локали (решение 22), один владелец языка

proposed скрайба к катсцене:

  • Обмануть его можно, и это разрешено явно: игрок с Арканой в ростере, играющий физикой, получает бафф врага мимо. Наша разведка против его разведки — столп «скилл в подготовке», а не дырка.
  • Ветка для размытого профиля обязательна: без доминирующего типа урона шаблон «самый частый — …» ломается. Реплика на этот случай — подарок за нестандартный билд: «У них нет предпочтений… значит, у них нет и слабостей?» Враг растерян, бафф слабее.
  • Разные окна статистики по стадиям: стадия 1 читает этот забег (разведчики физически могли видеть только пройденный путь), стадия 2 — всю историю профиля: «ты всегда так делаешь». Это не трюк, а буквальная разница между разведкой и взломом: первое доступно человеку, второе — только консоли.
  • Реплика — лок-строка с параметром, не фиксированный текст; озвучке не подлежит (речь контурная).

proposed скрайба к окну консоли: одна грамматика на всю игру, зафиксированная в доке (иначе язык распадётся на декорацию) · читаемость без знания программирования (buff.apply(...) понимает любой, for (i = 0; ...) — нет) · показывать только те команды, которые язык действительно умеет, бедный словарь лучше богатого · скип посимвольной печати.

Язык Системы и кластер нарратива, тот же вечер:

#РешениеПричина
28Консоль игроку дадут — НАРРАТИВНО, к финалу. Будет ли она настоящим исполняемым инструментом — решаем потом, глубоко не закладываемВердикт Макса на вопрос скрайба «дразним или выдаём». Для сцены с Сорелем важно, что окно консоли готовит игрока к языку, а не дразнит впустую
29Тип языка — команды, а не программа: декларативные приказы, никаких циклов и ветвленийСогласие Макса с рекомендацией скрайба после ресёрча. «Это именно что КОНСОЛЬ: пишешь команду — она исполняется». Циклы превратили бы её в головоломку-программирование, а наш жанр про подготовку
30Префикс gm. — маркер привилегии, как sudo: чтение мира без префикса, изменение мира с ним. НЕ на всех командахПрефикс предложил Макс, ограничение — скрайб, принято. Префикс на всём становится невидимым за пять минут (как System. в C#), а раскрыть в финале можно только то, что игрок замечал. Так каждое появление gm. — событие: Сорель впервые пишет его в кадре, а игрок в финале получает право его писать
31У gm. три дна: Game Master (читается сразу) → Guildmaster, рабочее имя мира и проекта (раскрытие) → титул самого игрокаПервые два — Макс, третий нашёл скрайб. Игрок и есть Гильдмастер, то есть команды всё это время подписаны его титулом, и в финале консоль не «дают», а возвращают
32Заведён кластер 60-narrative — лор, мета-нарратив, реестр посевов, приёмы рассказа, язык СистемыПросьба Макса «папка, где легко найти всё про мир и про то, КАК мы рассказываем». Это была починка дефекта: у мета-нарратива было три владельца (открытые вопросы, журнал, питч), лор лежал одиноким файлом в 10-vision, а реестр посевов — названный дорогим-в-ретрофите швом — не имел дома вовсе

Ресёрч по языку (2026-07-29, пять референсов). Главный вывод: шифр — не язык. Fez и Tunic подменяли символы буквами и слогами, их разгадывают за вечер; Chants of Sennaar даёт языку грамматику (~30 слов) и потому живёт всю игру. Остальное: Zachtronics — 13 инструкций ради правдоподобия машины, бедный словарь читается как настоящая система · Else Heart.Break() — язык нарочно менее строгий, мануал лежит на внутриигровых дискетах (документация как находка) · Duskers — автодополнение, история, алиасы обязательны, «игра про стратегию, а не про ловкость» · Baba Is You — грамматика из трёх слов несёт огромную глубину. Конспект — Narrative - System Language.

Находка ресёрча: словарь языка уже существует — это наши строковые id domain.name, на которых мы пишем год. Иначе пришлось бы вести два словаря (декоративный и настоящий), и они разошлись бы за месяц.

Отложено Максом: язык предметов и энкаунтеров — как именно называются сущности внутри языка.

#РешениеПричина
33Тон мета-разворота — ФАКТ, не обвинение: «вот это факт. Плохо или нет — считай как хочешь. Но правда есть правда»Уточнение Макса, поправившее скрайба (тот записал «разворот приходит как обвинение»). Холоднее и сильнее: обвинение даёт игроку роль ответчика, от которой можно защититься («это же просто игра»), а с фактом не спорят. Система не морализирует и не торжествует
34Приём «демонстрация вместо утверждения»: перезапись ветерана. На высшей сложности в начале забега барьер требует, чтобы один «Сосуд» умер — и это ветеран. Игра его не убивает, а копирует (Ctrl+C, Ctrl+V), говорит об этом прямо и добавляет: «но ты ведь не заметишь никакой разницы, так? Это ведь просто небольшое изменение в данных»Идея Макса. Мир не заявляет, что он конструкт, а делает с человеком игрока то, что делают с данными
35Цены нет: игрок не теряет ничего. Момент чисто нарративный, сложности живут отдельноВердикт Макса, отменивший предложение скрайба «удалять биографию — уровни, Обеты, летопись». То предложение превратило бы приём в честную транзакцию и вернуло бы игроку право на обиду. Без цены сильнее по трём причинам: игрок уже приготовился платить, и приготовленное горе повисает без адресата · отсутствие платы само доказывает, что это была не механика (подтвердить цифрами нельзя, потому что цифр нет) · без платы игрок даже не жертва — заплатив, он получил бы моральное превосходство «со мной поступили плохо», а тут жаловаться не на что

Требования к приёму (proposed скрайба): копия неотличима — любой маркер разрушит приём, потому что докажет обратное · приём не требует, чтобы его почувствовали (кто пожмёт плечами, тот дешево прошёл барьер, и это нормально) · технически это clone() DTO, то есть игра говорит буквальную правду о том, что делает код.

#РешениеПричина
36У Системы НЕТ голоса. Она безмолвный исполнитель, машина. Голос имеет только авторФормулировка Макса, закрывшая вопрос скрайба «чей голос». Молчащая машина сильнее говорящей: с говорящей можно спорить и осмысленно её ненавидеть, у неё есть воля — и она немедленно становится GLaDOS, то есть чужим приёмом. Процесс не спорит и не оправдывается, а в финальном развороте «порядок = Система» злодея не оказывается вовсе
37Следствие: x-sys — это ВЫВОД Системы, а не её речьУточнение скрайба к п. 36. Речь адресована кому-то, вывод не адресован никому — он просто есть, и игрок читает его через плечо. Поэтому и жуткий
38Три состояния имени показываются РАЗНО: имя не заслужено → стабильный id (enc.goblin.03) · ещё не прогрузилось → id разрешается в имя на глазах · поломано → повреждённое имя (item.oaken_charm.corrupt)Постановка Макса (поломанные предметы, начальные имена энкаунтеров, имена врагов до прогрузки), решение формы — скрайб. Соблазн сделать всё «одинаково машинным» ломает приём: игрок не различит незнание, загрузку и поломку. Суффикс .corruptнаш настоящий служебный суффикс сейв-системы, то есть сломанный предмет подписан тем же словом, которым код помечает испорченные данные

proposed скрайба: мелькание id при загрузке — на грани восприятия, кадр-два, чтобы игрок не был уверен, видел ли он что-то. Полный разборчивый показ на каждой загрузке стёр бы приём за час (та же болезнь, что у gm. на всех командах), а сомнение вместо информации — идеальный посев, в коопе работающий вдвойне: один заметил, другой нет.

#РешениеПричина
39Слой «Две Силы» ОТМЕНЁНВердикт Макса. Говорящие божества спорили с п. 36 и вернули бы фигуру «злой ИИ, который дразнит». Разбор — Closed Forks
40Онтология мира окончательна, и ЗЛА КАК ТАКОВОГО НЕТ: живое — герои, существа, боссы (хаос) · Система — безмолвный исполнитель, процесс без воли (порядок) · игроки · создатель как сторонний комментатор-рассказчик, который НИ НА ЧТО НЕ ВЛИЯЕТФормулировка Макса. Ни антагониста, ни тёмной воли: с процессом нельзя договориться и его не за что ненавидеть. Ограничение, которое легко нарушить из лучших побуждений: автор не влияет никогда, ни в финале — вмешавшийся рассказчик становится богом из машины, и конструкция «зла нет, есть процесс» рассыпается
41Мотивация игрока и приз: помочь гильдии выиграть Чемпионат, чтобы «загадать любое желание» — а это доступ к консолиИдея Макса. Приз звучит фэнтезийным клише, которое никто не читает всерьёз, и потому работает как посев с первых минут
42Истинный финал: пройти на финальном возвышении → игрок получает консоль и может исправить всё (сгладить краски, вернуть мягкость, воскресить погибших сюжетных NPC). Это концовка первой кампании; следующие возможны как DLCИдея Макса. Ложится на принятую 2026-07-19 №4 структуру «кампаний под единым каркасом»

Наблюдение скрайба, принятое в канон: истинный финал — зеркало перезаписи ветерана. В начале высшей сложности игра на любимце игрока показывает, что данные можно подменить незаметно, и у игрока остаётся одно знание. В финале игрок делает то же самое — правит мир командами; мир меняется, а знание остаётся у него, потому что прожитое не отменяется вместе с данными. Значит перезапись ветерана — не просто посев, а урок обращения с инструментом, преподанный на том, кто дорог, задолго до выдачи инструмента. Игрок при этом не побеждает Систему, а пользуется ею: становится тем, кем был всю игру (тем, кто программирует живых), но впервые с полным знанием — и выбирает сделать мир мягче.

Два ограничения (proposed скрайба, вытекают из п. 40): консоль выдаёт турнир, правило мира, а не автор из милости · мрак не обесценивается возможностью его убрать, потому что игрок его уже прожил: он правит мир вперёд, и возможности «переиграть, будто не было» мы не даём.

Язык Системы — грамматика, словарь и адреса (тот же вечер):

#РешениеПричина
43Одна форма предложения: глагол снаружи, остальное аргументыapply(army, resist.arcane, 40). Форма «глагол.объект» отклоненаТочка у нас уже занята как разделитель пространства имён (relic.the_draugr), и она не может значить две вещи. Побочно gm. встаёт без исключения: gm — пространство привилегированных команд, как relic — пространство реликвий. Естественный порядок слов (apply resist.arcane to army, как в Baba Is You) отклонён: читается легче, но хуже ощущается машинным выводом
44Двадцать глаголов: пять читающих (scan, list, count, find, trace) и пятнадцать меняющих под gm. (set, apply/remove, spawn/kill, copy, purge, move, bind/unbind, lock/unlock, rename, grant/revoke, revert, stop)Малый набор — ради правдоподобия машины (урок Zachtronics). Префикс появляется ровно тогда, когда мир меняется. stop вместо halt — правка Макса: понятнее обычному игроку. Сюжетно значимы copy (сцена с ветераном) и revert (истинный финал)
45Четыре границы: нет условий и циклов · нет создания понятий (только существующие id) · нет обращения к прошлому (revert только к сохранённому состоянию) · player читается, но не изменяетсяГраницы важнее возможностей: именно они делают систему правдоподобной. Четвёртая объясняет сцену с ветераном: Система не может дотянуться до игрока, только до его данных, поэтому копирует «Сосуда» — и единственное место, где эта смерть существует, его голова, куда у языка нет средств попасть
46Отказ без объяснений: denied · undefined: relic.foo · lockedСистема безмолвна, значит не объясняется и не помогает. Ни извинений, ни «возможно, вы имели в виду» — половина характера языка живёт здесь
47Сущности обозначаются АДРЕСАМИ, а не словами: E.421.02.117 — род (буква) · фракция, вид, подвид (по цифре, позиция фиксирована) · тип (редкость у предмета, ранг у врага) · порядковый номер. Короткая форма — E4.117, минимальный размерПроблему поставил Макс: enemy.goblin_archer игрок читает мгновенно, тайны нет, и весь язык оказывается «английским в костюме кода» — а тайна на английских корнях вдобавок несправедлива к русскому игроку. Адреса непрозрачны для всех одинаково, генерируются из данных, запоминаются как номер и правдивы: внутри рантайма сущность и есть индекс. Главное — игрок расшифровывает сам: замечает, что гоблины это 4xx, и это его открытие (механика Chants of Sennaar). Глаголы остаются словами, поэтому игрок понимает что делает Система, но не знает с кем
48Порядковый номер уникален внутри ФРАКЦИИСледствие короткой формы E4.117: иначе два разных врага получат один короткий адрес, и сокращение начнёт лгать
49Адрес ВЫЧИСЛЯЕТСЯ из закрытых перечислений, а не пишется рукамиШесть уровней — шесть решений на сущность; одна ошибка в подвиде, и адрес врёт, а игрок, расшифровавший систему, получит ложь. Прямое нарушение правила «ни одно семя не лжёт»
50Поломанное состояние — через ДВОЕТОЧИЕ: item.oaken_charm:corruptТретий сегмент через точку занят действием в аудио-ключах (effect.burn.apply), поэтому …​.corrupt прочиталось бы как аудио-событие. Прежнее предложение скрайба с точкой отменено

Открыто по языку: конфликт «подвид в адресе есть, а в строковом id нет» — либо подвиды становятся отдельными записями, либо выпадают из адреса (вариант «адрес точнее id» скрайб считает тихим костылём) · как именно ломается строка у :corrupt · назначение цифр фракциям и видам · хватит ли одного разряда (девять фракций, девять видов).

Разбор Гоблинской Банды, тот же вечер:

#РешениеПричина
11Стадия 1 — две зоны размещения с квотой «по два „Сосуда“ в каждой», квота проверяется до бояРешение Макса (дословник не сверен), снявшее выдуманную скрайбом дорогую позицию: «в чём проблема? 2 зоны, считываем перед началом, что по 2 релика в каждой зоне». Зоны у нас есть, нужны квота и валидация — ядро не трогается. Третья сторона в бою для стадии 1 не нужна вовсе: големы — обычные враги команды босса
12Зона размещения стадии 2 — настоящее кольцо, а не четыре прямоугольника у бортовВердикт Макса; тех-долг формы зон берётся сознательно ради картинки
13Кучность не запрещается валидацией — за неё бьёт молнияВердикт Макса. Иначе интерфейс не дал бы ошибиться и молния не ударила бы никогда, то есть правило стало бы декорацией. Это столп «решения вне боя видны в бою»

Наблюдения скрайба к стадии 1: «зона с квотой» — механизм переиспользуемый, на него потом сядут уникальные построения Приказа «Тактик» и Приказ «Авангард». И раз юниты двигаются, освободившаяся пара побежит помогать против босса — стадия сама рождает динамику «успей и приди на помощь», а сколько держатся первые двое, задаёт толщина щита, поэтому отдельный таймер боя не нужен.

proposed скрайба к таймеру: истечение не карает, а даёт войти с унаследованной расстановкой · таймер живёт только на узлах со стадиями (в обычном бою условие одно и известное, давить нечем) · числа 60 сек на первую расстановку и 30 на межстадийную вместо «30 на всё» из заметки Макса.

Открылось попутно: таймер расстановки требует кооп-правила «чей клик последний» — его нет.

Что каркас вычеркнул из цены боссов — два шва целиком: «многостадийный бой» и «перенос состояния между стадиями». Вместо них остаётся контейнер узла (последовательность боёв, текст между ними, условие выбора следующего для ветвления у Разбойничьего Гнезда) — оркестрация над боями, которая нужна карте и так.

Заодно исправлен перевёрнутый вывод скрайба о ценах (сверка с кодом): не «дешевле всех Гоблинская Банда, дороже всех Дезертировавшая Армия», а наоборот. У Банды четыре шва лежат в ядре (два параллельных боя, третья сторона, форма зоны, валидация дистанции), у Армии почти всё считается вне тика: профиль команды — функция от ростера до первого тика, вывод юнита живым — путь DeathSystem без смерти, порог HP имеет образец PassiveThresholdPct * MaxHP в BulwarkComponent.cs:103. Третья сторона при этом частично есть: Teamint с MaxTeams = 8, не хватает матрицы враждебности, условия победы по цели и починки Team == 0 ? left : right в FleeSteering.cs:98.

Правит доки: Enemies - Bosses (каркас Стадий), три карточки боссов («фаза» → «Стадия», пересчитанные таблицы швов), Meta - Roadmap §Блок 2.55 (реестр швов и исправленный вывод о порядке входа).


2026-07-29 (ночь, 9) — Приказ и Экипаж; Капитан остаётся Капитаном, а различают их прозвища

Контекст: скрайб собрал по девять и восемь вариантов терминов для двух осей Капитана, Макс выбрал — и отдельно оспорил попытку переименовать саму персону.

#РешениеПричина
1Ось умений = Command / «Приказ», в подаче нумеруется: «Приказ #3 — Покупка Дирижабля»Выбор Макса из девяти вариантов (отклонены Stratagem, Edict, Writ, Discipline, Doctrine, Charter, Boon, Art — разбор в Meta - Closed Forks). Нумерация — не украшение: приказы берутся по одному в начале акта, поэтому номер = порядок взятия, и список читается как журнал забега. Побочно снимает главный минус слова (Command «слишком общее»): «Приказ #3» ни с чем не путается
2Ось состава = Crew / «Экипаж»Выбор Макса. Термин был в работе с 2026-07-29 (ночь, 6) как proposed, теперь принят
3Персона остаётся Captain / «Капитан»; попытка скрайба заменить её на Marshal / Patron / Herald отклонена МаксомВозражение Макса — «а почему это не может быть капитан-мистик?» — проверено и подтвердилось. Captain от позднелат. capitaneuscaput «голова», то есть не воинское звание, а «тот, кто во главе»; отсюда живые невоенные сочетания captain of industry, captain of the team, captain of the guard. Конструкция читается как «глава + сфера», поэтому Капитан-мистик не ломается
4Различать Капитанов будут ПРОЗВИЩА, а не звания. Формат (proposed скрайба): Captain <Имя>, the <Epithet>Вторая половина возражения Макса: у пиратов звание было одно, а идентичность несло прозвище (Calico Jack — за ситцевую одежду, Blackbeard — образ, культивированный намеренно). Приём стоит ноль: глоссарий не меняется, четыре звания под четыре архетипа изобретать не нужно
5Слово «Капитан» нельзя занимать вторым смыслом: набросок экипажа «Капитан (баффер-воин)» переименован в «Ветеран» (рабочее имя)Единственный настоящий дефект, который нашёлся в споре об имени. Финальным именем станет прозвище по формату из п. 4
6Слово «Командир» как термин не вводим, в текстах ГДД оно вычищено до «Капитана»Гильдмастер и Капитан уже разведены, третье имя рядом вернуло бы путаницу. Формулировки «командир» в записях ночи 6–8 читать как «Капитан»

Побочная находка для лора (не решение): пиратский капитан был выборным, а квартирмейстер мог ветировать его решения, пока корабль не в погоне и не в бою. Ограниченная и разграниченная по фазе власть капитана — исторична, и это готовый посев для кооп-«комитета мастеров», выбирающего Капитана на забег.

Заодно исправлено противоречие: раздел «доктрина у Капитана одна, одно правило» спорил с принятой в ночь 8 структурой «пул качаемых фич». Переписан на «пул Приказов у Капитана свой, экипажей несколько».

Правит доки: Vision - Guildmaster & Captain (термины, раздел про имя и прозвища, переименование наброска, открытые вопросы), Meta - Glossary (Доктрина → Приказ, Экипаж принят), Meta - Closed Forks (разбор отклонённых вариантов).


2026-07-29 (ночь, 8) — отбор фич командира и его прокачка внутри забега

Контекст: Макс прошёл по двадцати кандидатам с вердиктами и задал новую структуру — командиров мало, но у каждого пул своих механик, одна стартовая, остальные вкачиваются по ходу.

#РешениеПричина
1Командиров мало, у каждого пул своих фич: одна выбирается стартовой, остальные вкачиваются по ходу. Архетипы тематические — обеспечение (торговец), магия, провидение (мистик), стройФормулировка Макса. Заменяет схему «одна доктрина + три экипажа» в части идентичности: прежде Капитан был статичным выбором и после первых минут переставал существовать, теперь у него есть кривая внутри забега. Налог на изучение при этом падает — три-четыре командира с пулом читаются легче восьми капитанов с одним правилом каждый
2Прокачка идёт ВНУТРИ забега; мета даёт только ширину (новые фичи в пул, новые стартовые опции, новых командиров)Не новое решение, а следствие Блока 0: между забегами мощь не переносится, домой уезжают только «Сосуды» и летопись. Побочно снимает вопрос «если всё вкачано, зачем выбирать стартовую» — в мете расширяется выбор, а не сила
3Итоговый отбор — девятнадцать фич по четырём архетипам. Торговец: Ростовщик · Квартирмейстер · Вербовщик · Дипломат · Контрабандист · Дирижабль. Маг: Боевой маг · Фортификатор · Знаменосец · Чароплёт · Телепортист. Мистик: Оракул · Провидец · Картограф · Наставник. Полководец: Тактик · Авангард · Обоз · ЛюбовникиВердикты Макса по каждому кандидату. «Чароплёт» и «Телепортист» дописаны скрайбом, чтобы у архетипа Мага хватило наполнения
4Правки к отобранным: Обоз — шесть «Сосудов» (было пять) · Провидец видит награды только за элитки, боссов и сундуки · «Канонир» стал Боевым магом · Знаменосец даёт два баффа · Оракул прогоняет бой сколько угодно раз, но каждый за золото · Вербовщик вдобавок повышает лимит наёмниковВсе — от Макса. Сужение Провидца до якорных узлов попутно снимает риск обесценить обычный драфт
5«Любовники» — в бой выходят двое вместо четырёх, но заметно усиленные (вместо отклонённого «Двоедушного»)Идея Макса. Оговорка скрайба записана в канон-доме: фича обнуляет половину позиционики и делает половину ростера ненужной, поэтому она законна как экзотика в глубине дерева, но стартовой быть не должна
6Отклонено (не переоткрывать): Инженер — слишком сложно · Землемер и Сапёр — «вообще не туда» · Двоедушный — заменён · Ломбард и Эхо — не надо · Погонщик, Церемониймейстер, Скупщик, Смотритель — скучноВердикты Макса. Причины записаны рядом с идеями, чтобы отказ не пришлось выяснять заново

Довердикты Макса тем же вечером:

#РешениеПричина
7Ритм прокачки: на старте забега выбор стартовой фичи 1 из 3 (реф — благословение Neow в Slay the Spire), дальше по одной фиче в начале каждого акта. Платится вехами, золото как ускорение отклоненоГарантированный темп, экономика не трогается, третьего счётчика на экране нет
8Вопрос лимита одновременных фич закрылся самПри одной фиче на акт за забег их набирается три-четыре, а не весь пул — слоты и растущие цены не нужны, ограничителем работает структура забега. Следствие для наполнения: пул командира должен быть заметно больше взятого за забег (6–8 при 3–4 взятых), иначе последний выбор станет фиктивным
9Знаменосец переехал от Мага к ПолководцуБлагословения перед боем — про строй и подготовку отряда, а не про магию
10«Любовники» → The Lovers, модификатор ЗАБЕГА, а не фича командираЭто правило всего забега, и там оно честнее: opt-in модификатор с повышенной наградой, а не то, во что можно вкачаться посреди акта. Дом — Roadmap §Движущаяся мета, где он становится первым конкретным модификатором

Итого восемнадцать фич у командиров плюс один модификатор забега.

proposed скрайба, ждёт вердикта: экипажи оставить как отдельную ось (стартовый состав), не сворачивая в «стартовую фичу» — состав и правило разные роды выбора, и оба читаются игроком.

Правит доки: Vision - Guildmaster & Captain (структура пула, итоговый каталог из девятнадцати фич по архетипам, таблица отклонённого, пары «командир ↔ стартовая фича», открытые вопросы).


2026-07-29 (ночь, 7) — граница доктрины: она запекается в бой, а не участвует в нём

Контекст: Макс расширил постановку — доктрина может влиять и на бой, «просто чтобы это было просчитано». Примеры от него: барьер на зоне до боя (реф Mechabellum), предбоевая атакующая магия, уникальные построения, механики с реликвиями и инвентарём.

#РешениеПричина
1Граница доктрины проходит между «до боя» и «во время боя», а не между боем и забегом. Законно всё, что вычисляется до первого тика: барьеры, предбоевой залп, построения, стартовый бафф, право занимать зоны, правила драфта и инвентаря. Незаконно — вмешательство после «в бой» и выдача юнитам новых способностейПрежняя формулировка (2026-07-29/ночь-6, п. 2) была узкой и superseded в этой части. Технический критерий совпадает с дизайнерским: бой — это бейк данных плюс фикс-тик, поэтому «запекаемое» не ломает ни детерминизм, ни «просчитанность». А слой «до боя» у нас пуст: между расстановкой и первым тиком не происходит ничего. Запрет на новые способности юнитам остаётся — это поле Реликвий
2Записаны все идеи скрайба: двадцать кандидатов — 8 первой пачки (маршрут, экономика, информация) + 12 предбоевых + 6 прочихПросьба Макса «запиши все-все». Каталог нужен, чтобы отбирать из списка, а не из памяти; часть третьей пачки честно помечена как «скорее уклоны, чем доктрины»
3Предложены пары «доктрина ↔ экипаж» для пяти набросков: Некромант → Вербовщик, Друид → рощи на карте, Элементалист → Землемер/погода акта, Капитан → Тактик/Фортификатор, Просветитель → ОракулУ набросков был только состав и не было идентичности. Пары подобраны так, чтобы фантазия читалась без объяснений

Шортлист скрайба по цене: Фортификатор (барьеры уже спроектированы — Стена и Купол), Авангард (флаг CanUseExtendedDeployment в данных уже есть), Оракул (прогон боя вперёд — механика, доступная только нашему движку: симуляция детерминированная, «сим впереди, показ с лагом» принят 2026-07-28/4).

Термины — рекомендация с EN-каноном: Charter / «Устав» для правила и Crew / «Экипаж» для набора. Альтернативы перечислены в канон-доме с причинами отказа (Doctrine — казённо, Creed — про веру, Standing Orders — длинно, Articles — путается с «предмет»; Complement — редкий, Retinue — иная метафора, Loadout — убивает лор). Вердикта нет.

Правит доки: Vision - Guildmaster & Captain (граница, три пачки кандидатов, таблица терминов, пары для набросков).


2026-07-29 (ночь, 6) — Капитан = доктрина плюс экипаж; доктрина меняет правила забега

Контекст: Макс поставил вопрос прямо — Капитан должен давать новую механику («дирижабль: перелёт не по связям, а на любую следующую точку за ресурс»), а не «у меня яды сильнее». Просил ресёрч и возможное возражение. Ресёрч: Balatro (колоды), FTL (корабли), Into the Breach (отряды), плюс разборы асимметричного дизайна.

#РешениеПричина
1Капитан состоит из двух осей, и обе открываются в мете: Доктрина — одно уникальное правило забега (идентичность); Экипаж — стартовый набор Реликвий, предметов и наёмников (вкус)Формулировка Макса. Скрайб добавил асимметрию весов: доктрина — то, чему игрок учится, экипаж лишь задаёт первые минуты. Третий, необязательный слой — малый пассивный уклон
2Доктрина меняет правила ЗАБЕГА, а не бояБой автономен, и его правила уже держат Реликвии с эффектами — доктрина конкурировала бы с двадцатью карточками за одно поле. Слой забега при этом беден интерактивом (карта как в Slay the Spire, экономика — просто золото), и новая механика ощущается новой именно там. Дирижабль Макса попадает ровно туда; попутно это свежая территория — в жанре карта forward-only, перелёты существуют только модами
3Числовой уклон («сильнее яды») — законен, но как вкус, не как идентичностьОн дубль: экипаж уже выдал ядовитые Реликвии и тем сказал «играй через яды». Бонус повторяет сообщение тише и без решений. Значит доктрина обязана давать то, чего набор дать не может — это и есть ответ на вопрос Макса «или отговори меня»
4Записаны все восемь доктрин-кандидатов с ценой реализации: Картограф · Ростовщик · Дипломат (дешёвые) · Дирижабль · Обоз · Контрабандист (средние) · Инженер · Провидец (дорогие)Прямая просьба Макса «запиши все свои». Отбор — отдельным заходом; каталог нужен, чтобы выбирать из списка, а не из памяти
5Термин «Командир» не вводим — это Капитаны; пять набросков стали каталогом ЭкипажейУ нас уже разведены Гильдмастер (роль игрока) и Капитан (сущность забега); третий термин рядом воспроизвёл бы ту же путаницу
6Доктрина у Капитана одна, экипажей несколько (ориентир — три), и они открываются постепенно: сначала доступен один. Конструктор есть, но ограниченный — игрок берёт Капитана и один из его наборов; свободного «любая доктрина × любой набор» не будетФормулировка Макса, и она сильнее обоих вариантов скрайба. Персонаж цел (доктрина неотделима от лица и имени), плохих комбинаций не существует — экипажи проектируются под свою доктрину, — а кривая обучения выходит правильной сама: первый забег даёт нулевой налог на изучение, дальше игрок углубляется в одно правило вместо прыжков по новым. Приём проверен дважды: FTL (Layout A/B/C одного корабля, открываются достижениями на нём же) и Hades (Аспекты одного оружия)

proposed скрайба, ждёт вердикта:

  1. Термины «Доктрина» и «Экипаж» — держатся за капитанскую метафору и не конфликтуют с занятыми словами («Отряд» — окно интерфейса, «Знамя» — Party-предмет, «специализация» путается с боевой ролью).
  2. Пять правил проектирования экипажей, вытекающих из чужих грабель: различаются подходом, а не силой (ловушка FTL, где Layout B бывает строго сильнее и Layout A умирает) · первый экипаж — учебный, на нём доктрина читается яснее всего · три экипажа как ориентир · малый уклон вешать на экипаж, а не на Капитана (тогда «яды сильнее» — свойство набора, и вариативность получается без единой новой механики) · экипаж открывается за игру этим же Капитаном, как Layout B в FTL.
  3. Два-три Капитана на старте, а не один — выбор из одного не ощущается решением.

Что сказал ресёрч. Balatro меняет колодами правила, а не числа (Painted Deck: +2 к размеру руки, −1 слот джокера), и успех строится на знании механик; FTL и Into the Breach — стартовый набор задаёт стратегию всего забега. Контраргумент оттуда же и важен: каждый асимметричный персонаж несёт «налог: выучи и мои правила», а сложность балансировки растёт экспоненциально с их числом; практический ориентир — меньше десяти. Комбинации осей умножают этот налог ещё раз — отсюда и рекомендация про склейку.

Правит доки: Vision - Guildmaster & Captain (две оси, каталог доктрин, каталог экипажей, открытые вопросы) · Meta - Glossary (Доктрина, Экипаж) · Roadmap (§«Капитан: как влияет» разобрано, строка про Командиров разнесена, Наёмники теперь ссылаются на Экипаж).


2026-07-29 (ночь, 5) — её урон не будит спящих; последний кит пачки — геомант

#РешениеПричина
1Урон Пожирательницы снов сон НЕ сбивает — это её фишка. Правило «любой урон будит, пробуждающий ×2» остаётся в силе для всех остальных, включая её союзниковВердикт Макса. Заменяет proposed «долг кошмара» (superseded): пассивка возвращается к исходной формулировке — нарастающий урон тьмой за каждую секунду сна. Кит получает то, чего нет ни у кого: сон превращается в окно казни, которое он обслуживает сам, а союзники обязаны держать руки при себе
2Исключение реализуется полем эффекта («урон источника не будит»), а не хардкодом под кита, и должно остаться единственнымData-driven: следующий носитель сна иначе потребует правки кода. Единственность — условие читаемости: второй такой носитель сделает правило нечитаемым, и сон станет обычным станом с оговорками
3Пожирательница — женского рода (gender: Женский)Формулировка Макса («её урон», «её фишка»). Раньше поле стояло «Не определено»
4The Cairn (Geomancer) заведён — прежний вердикт «отложить» снят. Начинает бой на 1% HP, «Каменная десятина» забирает у союзников до 10% начального HP и возвращает себе половину забранного; дальняя форма кровоточит и лечится от любых кровотечений в радиусе, ближняя крошит 2.5% брони за ударОтложенным он оставался из-за цены, а не из-за дизайна — но цена лучше видна написанной. Сделка с возвратом 50% и есть его баланс: команда осознанно теряет суммарный запас, значит перелив живучести не бесплатен
5Открытый вопрос по десятине оставлен вердикту Макса: отнимать текущее HP (рекомендация), максимум на бой или на забег. Третий вариант конфликтует с каноном ПоследствийЭто разные киты, а не разные числа: от формы зависит, есть ли хилеру что лечить и остаётся ли танк танком

Цена по геоманту — самая высокая в пачке: четыре отсутствующие механики (кровотечение, изменение статов союзников до первого тика, гибридная модель поведения AI, исцеление от чужого урона в радиусе), и три из них нужны только ему. Отсюда вывод для планирования: кит хороший, но идёт последним, а не первым — в отличие от Фанга и Рифта, которые собираются почти целиком на существующем.

Инкубатор реликвий пуст: все девять черновиков из заметок 2026-07-28/29 оформлены в карточки.

Правит доки: The Lull (пассивка, род, AI, требования) · Сон (первое исключение) · новая The Tithe · Кровотечение (первый носитель) · каталог · инкубатор.


2026-07-29 (ночь, 4) — инкубатор пуст: антимаг, хранитель углей, ядовитый клинок, демон снов

Контекст: продолжение поштучного разбора. Четыре оставшихся кита оформлены в карточки; в инкубаторе реликвий не осталось неразобранных черновиков из заметок 2026-07-28/29.

#РешениеПричина
11 стак «Изморози» за удар у Криоманта и Драугра (было предложено 2 — superseded)Вердикт Макса: «если что — потом увеличим». Следствие названо в карточках: на одних автоатаках Криомант идёт до верхней ступени 27 секунд, поэтому основной разгон линии — «Ледяная зона» (до 10 стаков за полный канал), а не тычки. У Драугра цикл даёт 5 стаков на три удара
2The Aegis (Antimage) — танк, получающий щит от магического урона за каждый вражеский каст, и «Перегрузка», конвертирующая поглощённый магический урон в удар (масштаб 0.4)Первый кит, наказывающий врага за колдовство, и первый танк, чья живучесть зависит от состава противника, а не от своих чисел. Он же единственная контра Арканы. Требует нового понятия — щит с фильтром по школе (Макс сам перечислял «щиты общие, от физ и от маг»)
3The Hearth (Emberkeeper) — клинз тира 2 + «Угли» на союзниках как сопротивление эффектам (кап 50%)Закрывает дыру №2 синергийного анализа: сильный клинз-саппорт другого типа, не шестой хил. Приём ценен тем, что переворачивает знак существующей механики — на враге угли уязвимость, на союзнике стойкость; ноль новых систем в ядре. Ради него Пастырь и понижен до тира 1
4The Fang (Nightblade) — убийца с дальностью 2, яд с автоатак, удвоенный яд с тыла со шредом −3 к обеим броням за стак; «Ядовитая печать» взрывается через 3 секЗакрывает «второй источник яда» (докармливает Друида) и даёт единственный шред обеих школ. Позиционика конвертируется в шред напрямую — бонус за тыл встроен в идентичность, а не просто применяется
5The Lull (Dreameater) — сон 4 сек, союзники не агрятся на спящих; урон тьмой копится во сне и выплачивается при пробуждении (proposed)Первый носитель Тьмы (сродство было без кита) и первый носитель Сна. Вариант с накоплением выбран потому, что канон Сна («спадает от любого урона, пробуждающий удар ×2») остаётся нетронутым, а «плох против AoE» из заметки сохраняется сам собой

Конфликт, найденный чтением канона: заметка Макса давала демону пассивку «тик урона по спящим», но Сон спадает от любого урона — тик разбудил бы цель сам, первым же срабатыванием, и получил бы за это бонус ×2. Правило названо железным («иначе сон = обычный стан»), поэтому менять его скрайб не стал: в карточке записан вариант «долг кошмара» с двумя альтернативами и явной пометкой, что вердикт нужен.

Заявка в модель AI-настроек: «союзники не агрятся на спящих» — это правило агро, а не свойство эффекта. Фильтр «исключить спящих» обязан жить в самом целеуказании отряда, иначе контроль демона будут ломать свои же киты, и настраивать пришлось бы каждого вручную.

Цена реализации по четырём: Fang — низкая (всё есть, кроме общей идентичности яда); Hearth — низкая в ядре, но нужен способ выразить «угли на союзнике» (рекомендация — отдельный эффект-близнец, иначе один EffectData начнёт обслуживать и бафф, и дебафф); Aegis — средняя (щит по школе); Lull — высокая, потому что он первый носитель Сна, которого в коде нет вовсе.

Правит доки: новые The Aegis · The Hearth · The Fang · The Lull · Криомант и Драугр (1 стак) · Сон (носитель, открытый вопрос, требование к агро) · каталог · инкубатор (четыре черновика помечены оформленными, две дыры ростера закрыты).


2026-07-29 (ночь, 3) — два кита из инкубатора в карточки: холодный драугр и арканист-разломщик

Контекст: холодная линия и Аркана закрыты, значит два кита, которые на них стоят, можно проектировать на готовом фундаменте. Оба оформлены по методичке; числа, помеченные proposed, ждут приёмки.

#РешениеПричина
1«Морозный драугр» наполнил пустой слот The Draugr, а не завёл новую карточку. Подпись класса — Frostbound вместо Berserker (proposed)Карточка стояла пустым каркасом с 2026-07-15 («нежить-викинг, дизайн не проработан»), и заметка описывала ровно её: скелет с двуручным дробящим, брузер-контроль на холоде. Второй драугр был бы дублем имени
2Архетип «Берсерк» уходит из ростера (долг из roadmap закрыт)Без Ярости берсерк — просто брузер с большим уроном, а Ярость отложена (2026-07-27/2). Слот приносит больше пользы как ближний носитель холода: до него холод жил только в бэклайне, и команда была обязана брать РДД, чтобы получить линию
3Драугр — замкнутая петля: сам кладёт «Изморозь» (2 стака за удар, 3 на каждом третьем с ×2 урона), сам обналичивает её каналом «Ледяная жатва» (условие — рядом есть оглушённый холодом; продлевает оглушение на 2 сек, бьёт ×5 автоатаки, сбивается)Ровно заметка Макса. Петля намеренно самоусиливающаяся: его дробящий урон попадает в уязвимость верхней ступени (+20%). Отсюда и главный баланс-флаг — три множителя в одном ките
4Драугр конкурирует с Расколом за одно окно — и это оставлено как естьСоюзник может разбить статую раньше (Раскол снимает заморозку и ставит свой стан на 1 сек), и тогда драугр каналит по секундному окну вместо двухсекундного. Состав «драугр + тяжёлый физик» становится осознанным решением, а не автоматическим плюсом
5«Аркановый РДД» заведён как The Rift (Arcanist) (имя proposed): телепорт-уклонение с щитом (период 15 сек, детерминированно), «Аркановый залп» за 15 маны — 3 стрелы, каждая кладёт «Разлад» (−3 магического сопротивления на 6 сек, стакается как «Угли»), каждый следующий каст добавляет стрелуПервый носитель Арканы и первый энейблер магической стороны: шред физброни у нас был (Кузнец), магического — нет. Ценность кита растёт с числом магов в гильдии, то есть он усиливает драфт, а не себя
6Уклонение — детерминированный триггер по периоду, не шансПравило нулевого выходного рандома. Срабатывает первый ближний удар после готовности периода; режим «и против дальних атак» — AI-настройка игрока, честно меняющая исход

Цена реализации разошлась радикально, и это стоит помнить при планировании: Драугру нужны пять отсутствующих механик (канал, страх, расщепление удара между двумя школами, конус, продление чужого эффекта) — зато четыре из них нужны и другим (канал — новой активке Криоманта, страх — боссам, линия — всей холодной теме). The Rift собирается почти целиком на существующем: под вопросом только триггер «по мне ударили в ближнем бою» и мультиснаряд. Если брать одного — брать The Rift.

Правит доки: The Draugr (полный дизайн), новая The Rift · каталог реликвий · инкубатор (два черновика помечены оформленными) · Meta - Glossary («Разлад») · Справочник тегов (Страх, Мультиснаряд, Снижение сопротивления) · Roadmap (долг «Берсерк» закрыт).


2026-07-29 (ночь, 2) — сила холода растёт со стаками; Раскол разбивает статую; у Криоманта новая активка

Контекст: Макс поправил две записи того же дня — скрайб понял «три ступени» как три фиксированных значения и отдельно спрашивал про судьбу «Ледяных оков», хотя новая активка Криоманта уже была записана в заметках.

#РешениеПричина
1Ступень отвечает «что включено», текущее число стаков — «насколько сильно». Замедление растёт 20% → 60% к 19 стакам (сквозь границу ступени), длительность периодического рута 0.5 → 1.5 сек, потеря скорости атаки под рутом 20% → 60%. Интерполяция линейная между границамиВозврат к исходной заметке Макса: «числа зависят от ТЕКУЩИХ значений холода — чем больше, тем сильнее». Предыдущая запись (/вечер, п.1) давала ступени по одному фиксированному числу — superseded. Ощущение «промерзает всё сильнее» должно быть непрерывным, а не тремя рывками; читаемость держит тултип с итоговым значением, а не дискретность
2Раскол ПРЕРЫВАЕТ оглушение и обнуляет «Изморозь». Мой proposed «не прерывает» снятВердикт Макса: «так задумано». Верхнее окно становится настоящей развилкой: держать статую 2 секунды под +20% к дробящему и +40% к льду — или разменять остаток контроля на разовый +15% максимального HP чистым. Решение принимается AI-настройками до боя (фильтр «бить ли цель в оглушении холода»), то есть там, где у нас живёт агентность. Побочно: цель не может быть одновременно и залочена, и разобрана
3«Ледяные оковы» заменены «Ледяной зоной» (superseded): канал на 5 сек, каждые 0.5 сек кладёт стаки «Изморози» всем врагам в зоне и наносит урон льдомОбе функции оков (масс-стан + «+20% урона по замороженным») теперь принадлежат линии — стан живёт на верхней ступени, уязвимость задаётся стаками. Кит сместился с «нажал кнопку — все стоят» на «промораживаю площадь»: исход зависит от расстановки врагов, а не от одного каста. Цена — две отсутствующие механики (прерываемый канал, наземная зона)

Уточнение к п. 2 (Макс, тот же день): Раскол не просто прерывает — он снимает заморозку и накладывает своё оглушение на 1 сек. Это предохранитель развилки: без него разбить статую в первую десятую долю секунды значило бы выбросить почти весь заработанный контроль, и «правильным» ответом всегда было бы ждать. Теперь обмен честный — до 2 секунд контроля меняются на 1 секунду гарантированного плюс чистый бурст. Стан обычный: тир 2, tenacity его режет.

Реализационный долг: ассет IceChainsStun.asset обслуживал старые оковы и остался без владельца — снять или перепрофилировать под стан верхней ступени (заход data-authoring).

Правит доки: Effect - Frost (таблица ступеней, Раскол) · Combo Rules · The Winter (новая активка, AI-блоки, теги) · Property Reference (оковы убраны из тиров) · Справочник тегов (Зона, Канал) · Combat - Stats (таблица ресурсов).


2026-07-29 (ночь) — Раскол только по статуе, лёд плюс дробящий, Аркана закрыта

Контекст: добивание хвостов по холодной линии и Аркане. Всплыло, что новая карточка холода спорила с решениями 2026-07-27/5 и /7 (цена очистки в стаках) и /8 (тиры): холод был записан тиром 1 и «снимается целиком», хотя стакается и по канону относится к тиру 2.

#РешениеПричина
1Раскол срабатывает только по цели в оглушении верхней ступени («Обратился в лёд», 20 стаков). Прежнее условие «любая обмороженная цель» — supersededХолод перестаёт быть постоянным фоном и становится сетапом под окно: копишь двадцать стаков, цель превращается в статую на 2 секунды, и в эти секунды физический дилер обналичивает +15% максимального HP чистым. Побочно снят конфликт: при старом условии свой же брузер снимал заморозку первым тяжёлым ударом и обрывал работу контроллера
2Верхняя ступень даёт ещё и +20% получаемого дробящего урона — «лёд + дробящий» как второе комбо окнаПромороженная цель хрупкая — правило читается без тултипа. Даёт школе дробящего урона фракционный смысл без новых сущностей: носители уже есть (Кузнец, Монах воды, будущий Морозный драугр)
3Огонь «Изморозь» не сбрасывает, а ускоряет её сход ×2Зеркало правила «Мокрый ускоряет сход «Углей» ×2» — контрслой обоюдный и равный по силе. Сброс делал бы одного огненного врага полным ластиком для крио-кита, а огня в бестиарии много (весь шаман-эшелон гоблинов)
4Мана-дрейн Арканы остаётся полноценным инструментом; его бесполезность против безресурсных китов — задуманаВердикт Макса: «он не для всех ситуаций». Аркана — школа, работающая по кастующим. Требование скрайба, вытекающее из вердикта: наличие ресурса у цели обязано быть видно до боя (тултип врага, компендиум), иначе ситуативность читается как поломка
5Разгон реген-темпа Арканой — без потолкаВердикт Макса: «всё ок». Читаемость единого ритма (5 в секунду, шкала 20 секунд) не приносится в жертву зря — разгон и должен ощущаться разгоном; контроль идёт через цену и замер, а не через кап
6Холод приведён к канону снимаемости: тир 2, цена очистки по лестнице 5 / 10 / 20 стаковИсправление собственной ошибки карточки: она объявляла тир 1 и снятие целиком, что противоречило решениям /5, /7 и /8. Плоское значение всегда выигрывает у доли (15% от 20 — это 3), поэтому цена читается просто числом стаков
7AP крио-юнита скейлит число стаков за удар, а не длительности ступенейСледствие 2026-07-28/13, а не новое решение: длительности принадлежат линии; если бы их менял AP отдельного кита, линия перестала бы быть общей. Растущий AP значит «промораживаю быстрее»
8У Криоманта снят бонус «+20% урона по замороженным» (superseded); его личные «+25% по обмороженным / +50% по оглушённым холодом» остаютсяУязвимость промороженной цели теперь свойство ступени. Держать её ещё и в активке — второй владелец одного факта, ровно та болезнь, из-за которой холод и выносили в общий слой. Личный бонус кита — про его синергию с собственным контролем, а не про хрупкость цели, поэтому дублем не является

Открыто (вердикта нет): что делают «Ледяные оковы» теперь, когда стан есть и у самой линии — оставить досрочным станом или переделать в ускоритель (+5 стаков всем обмороженным). Рекомендация скрайба — второе, чтобы у факта «когда цель становится статуей» остался один владелец. Также proposed: Раскол оглушение не прерывает, и Криомант кладёт 2 стака за автоатаку.

Правит доки: Effect - Frost · Combo Rules · Поджог · Теги-состояния · Property Reference · CC-примитивы · Combat - Effects (§Аркана, таблица стихий) · The Winter · Meta - Glossary · Справочник тегов · Методичка эффектов.


2026-07-29 (вечер) — холодная линия ступенями, Аркана через ресурс, три реворка и одно исключение

Контекст: разбор сырья, накопившегося в открытых вопросах за 2026-07-28/29 — девять боевых сущностей, три босса фракций, две новые фракции и полтора десятка системных идей. Ресёрч точечный: стакающийся холод, спелл-стилер, opt-in модификаторы сложности.

#РешениеПричина
1Холодная линия — три ступени, а не шкала на 20 стаков. Стак-носитель «Изморозь» (кап 20) наполняет шкалу и переводит цель по порогам 4 / 10 / 20: Замёрз (−30% скорости) → Примёрз (обездвиживание 1 с раз в 4 с, −40% скорости атаки, +10% уязвимости к льду) → Обратился в лёд (оглушение 2 с, +20/+40% уязвимости, после чего стаки сбрасываются в ноль)Уточняет решение 2026-07-28/13, не заменяя его. В автобое игрок не считает стаки: ступень читается иконкой, интерполяция по счётчику — нет. Ступени — три правила, шкала — один ползунок (принцип «правило важнее числа»). Сброс на верхней ступени обязателен, иначе два крио-юнита держат цель в вечном цикле при контроле без DR. Раскладка чисел по ступеням — proposed скрайба, ждёт приёмки
2Аркана получила ось: чужой ресурс. Немота (только ресурсные активки), разгон своего реген-темпа, пробитие магзащиты, магический урон; отнятие чужого ресурса — бонус-строка, не ядроЗакрывает «механику Арканы допишем позже» (2026-07-25/3). Ось выбрана не произвольно: с тех пор как кулдаун ресурсных активок равен нулю (2026-07-28/2), темп набора ресурса определяет всё — значит элемент, работающий с ресурсом, автоматически значим. Дрейн не может быть ядром: против безресурсных китов он не делает ничего и читается как сломанный герой. Оформление — proposed
3Немота (Silence) введена как CC-примитив с правилом «блокирует только ресурсные активки; автоатака и пассивки работают»Нужна Аркане, и нужна честной: игрок должен понимать, почему на безресурсном ките немота бесполезна. В коде отсутствует, как и обездвиживание, провокация и страх (сверено 2026-07-29)
4Пастырь: DispelPower 2 → 1 (прежнее значение superseded)Тир 2 отдан специализированному клинсовику — огненному утилити-киту, чья идентичность целиком в снятии. Хилу-универсалу сильное снятие досталось бы бесплатно, и спец-клинсовик рождался бы уже ненужным
5Рунный кузнец: редкость Обычная → Уникальная (superseded)Кит не «герой с киллер-фичей», а энейблер-крафтер: его сила измеряется составом гильдии, а не своими числами. В витрине 1-из-3 как рядовой боец он обещает лишнего
6The Tide снят целиком, наследник — The Torrent (Water Monk) (superseded): ближний брузер с дальностью 2, дробящий урон, унаследованный «Водяной щит» и новая пассивка «Восходящий удар» (раз в 4 с ×2 урона + отбрасывание на 2). Старый дизайн — в легасиИсполняет пометку 2026-07-28/14 «идёт под реворк» и закрывает дизайн-долг от 2026-07-12 («кит читается как две-три реликвии»). Реворк в одну новую фантазию оказался дешевле распила на двух персонажей. Луч «урон+хил по линии» остался без носителя намеренно: он требует лучевых проверок в тике и правила прохождения сквозь союзников. Имя — proposed скрайба
7Спелл-стилер сохраняет d6 — как ЯВНОЕ исключение из правила нулевого выходного рандомаВердикт Макса. Правило («механика, вносящая случайность после „в бой“, отклоняется по умолчанию») остаётся в силе для всего остального; здесь оно пробивается осознанно ради фантазии хаотичного вора и ровно в одном уникальном ките. Ограничение к реализации: d6 выбирает действие, а не число урона — иначе исключение расползётся в обычный разброс и правило умрёт. Отдельная цена, названная ресёрчем (у Rubick самые сложные взаимодействия во всей игре): каждой способности нужен флаг «крадётся / нет» с самого начала, иначе ретрофит по всему ростеру
8Боссов три, по одному на фракцию (Гоблинская Банда · Разбойничье Гнездо · Дезертировавшая Армия). «Дикие звери + Друиды» и «Призрачный Корован» — фракции, не боссы. Карточки заведены как теория, требуемые от движка швы сведены реестромПоправка Макса к разбору скрайба. Боссы держатся на механиках, которых нет (фазы, третья сторона, подкрепление посреди боя, чтение состава игрока, диалог с таймером) — писать их как «нужен ассет» значило бы соврать о цене

Форма движущейся меты опознана, не решена заново. Заметка Макса про opt-in модификаторы забега («+30% меты, включил — не выключить») — это Pact of Punishment из Hades: модификаторы с ранками, растящие награду; признанная практика против фиксированных пресетов сложности. Направление принято ещё 2026-07-15/72 и /18, поэтому это уточнение формы, а не новое решение.

Возражения скрайба, оставленные в канон-домах (proposed, вердикта нет): таймер расстановки 30 секунд давит на реакцию против доктрины «скилл в подготовке»; доплата за выживших платит за осторожность и штрафует правильный размен; наёмники безопасны только как стартовый набор Капитана.

Правит доки: новые Effect - Frost, The Torrent, Enemies - Bosses (+3 карточки), Species - Revenant Caravan · Combat - Effects (§Аркана, лёд в таблице стихий) · CC-примитивы · Теги-состояния · Meta - Glossary (Изморозь, Немота, Аркана) · Пастырь · Кузнец · The Tide (надгробие) · Meta - Legacy · Криомант · Друид · инкубатор реликвий · Combat - Stats · Combat - Positioning · Run - Meta Progression · Content - Items & Banners · Run - Events & Minigames · Vision - Guildmaster & Captain · Свет, пост, атмосфера · Roadmap (Блок 2.55 — реестр швов боссов) · Open Questions.


2026-07-29 — ревизия документации: две оси статуса у контента, разбор закрытых развилок отдельно

Контекст: постановка Макса (дословник не сверен) — «в открытых вопросах лежит много решённого; решённое должно быть в журнале». Плюс запрос на видимую границу «реализовано / только теория» в дереве контента. Это процедурные решения скрайба, а не дизайн-решения — игровых правил они не меняют.

#РешениеПричина
1У карточки контента две независимые оси статуса: status — про документ, impl (engine/partial/paper) + asset — про то, есть ли сущность в игре. Владелец факта — шапка карточки; сводки implementation-status.md её только читаютГотовый док про несуществующего героя выглядел так же, как док про работающего. Из ГДД не читалось, что можно пощупать: реликвий в движке 10 из 21, врагов 4 из 13, а кровотечения и сна нет в коде вовсе
2order в папках контента разбит на полосы (служебное 0–9 · движок 10–499 · разделитель 500 · бумага 510+ · инкубаторы 900), граница показана файлом divider-theory.mdДерево само отвечает «что живое», без открывания карточек. Правило: карточка переезжает через разделитель тем же заходом, которым меняется impl
3Разборы закрытых развилок вынесены из open.md в приложение Meta - Closed Forks; журнал остаётся коротким (решение + причина), а в открытых вопросах закрытого больше нетИсполняет постановку, но не теряет историю: разбор защищает от переоткрытия развилки через полгода. Тащить ~250 строк таблиц вариантов внутрь журнала — сделать нечитаемым живой док, в который смотрят каждую сессию
4Дубли сняты: риски жанра живут только в Roadmap §Блок 4, «обучение AI по реплею» — только в §Блок 3Правило 2: факт с двумя владельцами расходится. В open.md копия рисков уже начала жить своей жизнью
5Сырьё Макса от 2026-07-28/29 собрано в раздел «ждёт разбора» внутри open.md, а не лежит выше заголовка документаЗаметки физически вклинились перед # Открытые вопросы — файл читался как две несвязанные половины. Раздел временный: по мере вердиктов пункты уходят в карточки и roadmap

Найденные долги (не решения, а находки сверки): item.oaken_charm и item.war_banner живут в движке без дизайна; item.swift_boots расходится с карточкой (flat +0.6 против +30%); три реликвии числятся partial по данным handoff, кодом не пересверены.

Правит доки: Meta - Open Forks (переписан), новые Meta - Closed Forks и четыре implementation-status.md, MOC, индексы relics/enemies/species, 67 карточек контента (шапки), scripts/check-wiki-frontmatter.ps1.


2026-07-28 (вечер, 4) — бой считается вперёд, показ идёт с лагом; игрок на бой не влияет

Контекст: возврат к отложенному намерению «сим впереди, показ с лагом» — его требуют slowmo, начинающийся чуть раньше смерти, и телеграф «Оплота» (щит поднимается до удара). Постановка родилась в заходе по скелетной анимации; разбор и ТЗ-заготовка — журнал лага показа (удалён 30.07.2026, история в git).

Решения:

  1. Бой просчитывается вперёд, игроку показывается «мультик» с задержкой. Принято как приоритетное направление после остатка волны 1 плана AP. Причина: иначе презентация узнаёт о событии в тот же кадр, что и симуляция, и «заранее» физически неоткуда взять — остаётся предикция, которая иногда врёт.
  2. Игрок на бой не влияет вообще — это гарант. Бой целиком картинка; пауза и скорость останавливают и гонят показ, а не просчёт. Причина: гарант снимает всё дорогое разом — откаты, задержку реакции на ввод и репликацию состояния на тик в коопе (достаточно разослать начальное состояние и сид). Симуляция становится чистой функцией, а телеграфы — знанием вместо догадки.
  3. Окно опережения — минимум 5 секунд (150 тиков). Причина: хватает с запасом и щиту за 0.3 с, и slowmo перед смертью, а сверх того даёт горизонт режиссуры: за пять секунд можно узнать про клатч один-на-один и подвести камеру. Стоимость снимков на такое окно — сотни килобайт.
  4. Внешнее влияние на бой (подкрепления, события мира) разрешено, но адресуется в тик не ближе горизонта показа. Причина: влияние «на сейчас» пришло бы в уже показанное прошлое. Механизм адресации в будущий тик в коде уже есть (команды с TargetTick), поэтому правило ничего не изобретает.
  5. Архитектура — «лента боя»: сим продюсер, показ консюмер, величина опережения параметр. Причина: «бежать чуть впереди» и «просчитать целиком» перестают быть развилкой — это одна ручка. Минимум гарантирован сразу, полный просчёт догоняется в свободное время; фриз полного предпросчёта, если он понадобится, прячется за цифровым переходом арены.
  6. Порядок работ: добить волну 1 плана AP → ТЗ на ленту → лента первым приоритетом. Причина: остаток волны 1 живёт в симуляции, лента — в презентации; они не пересекаются, поэтому порядок не наращивает цену переезда.

Находка при сверке: таймаута боя в игре нет — он существует только в балансном тулинге (BalanceScenarioData._maxSeconds, SimBench). Зато в SimTuning есть овертайм-рампа: урон растёт после порога и не касается лечений, поэтому бой сходится по существу. Жёсткий кап тиков нужен лишь как страховка от патологии (неуязвимые или недостижимые цели), а не как механика.


2026-07-28 (вечер, 3) — приёмка AP-скейлов: что у кого растёт; толчок в стену; холодная линия

Контекст: Макс прошёл по таблицам скейлов в docs/ap-and-skills-progress.md и переставил, ЧТО именно растёт у каждого кита. Заодно вскрылась системная ошибка в моих формулах.

Решения:

  1. Форма роста строго линейная, без затухания на хвосте. Значения Макса на 50 и 100 AP — канон; значение на 200 AP выходит выше интуитивного и принимается таким. Причина: вехи 50 / 100 / 200 — не равные ступени, шаги между ними +50, +50, +100. Числа задавались «на глаз» как три равных шага, поэтому четвёртое каждый раз оказывалось вдвое ниже линейного (Оплот 1.0 против 1.2 с, снижение урона 60% против 70%, Рейнджер +10% против +30%, Маг молний 2500 против 3000). Затухание после сотни потребовало бы двух коэффициентов на параметр и ослабило бы разгон именно там, где он задуман сильнейшим.
  2. Мечник: скейлы понижены — «×2 ровно на 100 AP, не раньше». Разгон за удар +0.5 п.п. за 10 AP, потолок +10 п.п., урон за уголь +1.5.
  3. Защитник: щит от AP не растёт вовсе — растёт окно вспышки (0.4 → 0.6 / 0.8 / 1.2 с). У активки растёт сила снижения урона (30% → 40 / 50 / 70%), а не длительность дебафа и не стан. Причина: щит той же величины, ловящий всё больше ударов подряд, меняет характер кита осмысленно; растущая длительность контроля у танка — не его фантазия, в отличие от Криоманта.
  4. Друид: от AP растут только DoT и HoT. Длительность яда, замедление и радиус взрыва — нет.
  5. Рейнджер: пол штрафа снят, штраф уходит в плюс (−50% → −30 / −10 / +30%). Причина: «сломано, но маг-хантер звучит смешно» — на высоком AP кит стреляет на ходу быстрее, чем стоя, и перестаёт выбирать между «идти» и «стрелять». Заказанная поломка.
  6. Древень: от AP растёт только бонус за стак, и только его броневая часть (20% → 30 / 40 / 60%). Бонус Max HP, бонус радиуса шипов и базовый радиус — нет. Причина: шипы бьют процентом от брони, поэтому одна ось даёт и защиту, и урон; живучесть по HP остаётся классовой — кит становится больно колючим, а не неубиваемым.
  7. Копейщик: от AP растут только три дальности — линия выпада, радиус вихря, дистанция отбрасывания. Замедление, щит от нанесённого и урон ×3 — нет. Причина: кит целиком про охват, и ни одного числа урона в его AP-профиле.
  8. Маг молний: база одиночного удара 1000 (было 400): 1500 / 2000 / 3000 по вехам.
  9. Шаман: длительность «Связи» от AP не растёт — только радиус. Число связанных +1 за каждые 100 AP принято.
  10. Длительность полёта считается из дистанции при фиксированной скорости. Причина: полёт — контроль-иммунное оглушение, значит дальний толчок сам по себе держит цель дольше. Отдельный параметр длительности дал бы второго владельца одному свойству.
  11. Толчок в стену бьёт дважды: упёршийся в край арены получает урон толчка повторно. Причина: даёт позиционную игру любому источнику смещения — развернуть цель в стену выгоднее, чем в пустоту, — и читается без цифр в тултипе.
  12. Урон взрыва щита — доля размера щита, а не своё число. Единая модель для «Собирателя костей» Некроманта и «Водяного щита» Приливной. Причина: иначе «насколько мощны кости» получает двух владельцев, и AP скейлит это дважды.
  13. Сила холодных состояний перестаёт быть свойством Криоманта. Холодная линия выносится в общий слой по образцу огненной: «Замёрз» (минус скорость), «Примёрз» (обездвиживание), «Обратился в лёд» (стан), у каждого свои базовые числа и условия перехода; крио-юниты их только накладывают. Проработка — отдельный заход. Причина: Криомант не единственный носитель холода, а числа состояния, живущие внутри одного кита, придётся копировать в каждого следующего.
  14. The Tide идёт под реворк — AP-скейлы ей не прописываются (как и Идеалу).
  15. Источники AP: квесты, уникальные эффекты за квесты и предметы. Классы и реликвии базового AP не дают. Причина: AP должен читаться как ставка игрока, а не как невидимая часть базы. Привязка к квестам делает его наградой за пройденный путь «Сосуда», а не побочным эффектом выбора кита.

Канон-дома: Effect - Displace (длительность из дистанции, удар в стену), The Gale, The Bonewright (взрыв = 100% щита), The Winter и Meta - Roadmap блок 2 (холодная линия как задача), The Tide (пометка реворка), таблицы скейлов — docs/ap-and-skills-progress.md §3.

Попутно закрыто недоразумение: StatType.AbilityPower = 10 — это порядковый номер стата в перечислении (ID для сериализации Unity, менять нельзя — сломает ассеты), а не его базовое значение. Базовое значение AP у юнитов — ноль, потому что стат просто отсутствует в статблоках.


2026-07-28 (вечер, 2) — ресурсная модель: запас равен стоимости, гейт один; контроль-луп Монаха

Контекст: Макс попросил прописать в каждой карточке темп способностей — «за скок ОБЫЧНО заполняется мана, хихи». Сверка с ассетами показала, что темп держат два владельца сразу (кулдаун И стоимость), что карточка Мечника расходится с ассетом, а двое китов вообще живут на чистом кулдауне.

Решения:

  1. Гейт каста один — ресурсный. Кулдаун у ресурсных активок равен нулю. Причина: при двух гейтах разгон набора ресурса бессмыслен — кулдаун всё равно держит, — а один факт («как часто кастует») получает двух владельцев и расходится при каждой правке. У Пастыря уже разошёлся: КД 5 с при мане на 6 с. Карточка Мечника при этом прямо обещала «жёсткого кулдауна нет», а в ассете стоял КД 10 — код противоречил дизайну.
  2. Запас маны равен стоимости активки. Полная шкала = ровно один каст. Причина: заполненная полоска и есть «готово». Игроку не нужно держать в голове ни размер запаса, ни отдельный кулдаун — читаемость вместо арифметики.
  3. Ману тратит ровно одна способность кита, не больше. Причина: следствие решения 2 — при двух платных активках запас пришлось бы равнять дорогой, и шкала перестала бы читаться для дешёвой.
  4. Друид и Древень переведены на ману (45 → каст раз в 9 с; 40 → раз в 8 с) с чистого кулдауна (было 11 и 12 с). Причина: Макс: «Друид - тоже на мане должен работать!!!». Единая модель темпа на весь ростер, без исключений «этот на КД, а этот на ресурсе».
  5. Ассасин получает активку «Уйти в тень» — вход в «Скрытность» без убийства, 75 маны, раз в 15 с. «Изворотливость» переклассифицирована в пассивную (2 заряда, перезарядка 5 с). Причина: у Убийцы вообще не было ресурса и ни одной активной способности; активка даёт ему то же окно прорыва, что и убийство, но за плату. «Изворотливость» тратится защитно и без каста — то есть пассив по механике, и называть её активной значило врать в карточке.
  6. Монах: коридор «ядра» шире базовой ширины на 25%. Причина: толчок в плотный строй должен цеплять соседей, а не только тех, кто оказался ровно на линии полёта.
  7. Монах: удар в спину идёт вне очереди, ускоренной анимацией автоатаки, а цель получает полный микро-стан 0.25 с ДО удара. Порядок: полёт кончился → стан → удар → стан доигрывает. Причина: нужен непрерывный контроль-луп «толчок → добивание», в котором у цели нет ни одного свободного кадра — то самое «аниме». Стан именно полный (не только обездвиживание), иначе цель успевает ударить в ответ, и склейка рассыпается. Удар вне очереди — иначе телепорт визуально зависает перед замахом, ожидая интервала атаки.
  8. Стоимость «Воспламенения» — 50, а не 60; набора маны с попаданий у Мечника нет. Причина: играет ассет; на 50 сходится и таблица в Combat - Stats. Набор с попаданий снят решением 2026-07-27, но карточка Мечника продолжала его обещать.
  9. Шаман: «Связь» — пассивка с кулдауном 4 с (не активка). Барабанщик: «Марш» — бесплатный канал без кулдауна. Причина: «Марш» — основной инструмент Барабанщика в бою, платить за то, что он делает всегда, незачем. У Шамана «Связь» работает сама, значит пассив по той же мерке, что «Изворотливость».

Канон-дома: Combat - Stats §«Восстановление ресурса» (модель + таблица ростера), Effect - Displace (ширина «ядра», микро-стан как свойство реактива), карточки всех реликвий — строка маны/КД у каждого навыка и в «Шаге 1». Свойства полёта («оглушён, сопротивление контролю не действует»), которые Макс просил записать, в displace.md уже были — дублировать не стал.

Статус чисел: у десяти реализованных китов стоимости взяты из ассетов (факт). У Storm, Bond, Bonewright, Cadence, Tide, Runesmith числа предложены мной и помечены в карточках «ждёт приёмки». Идеалу стоимость не задана — кит ждёт реворка.


2026-07-28 (вечер) — AP как ось роста; карточки контента держат только актуальное состояние

Контекст: Макс обнаружил, что сила навыков (AP) в игре мертва — стат объявлен, но ни один ассет его не даёт и ни одна способность от него не считается, — и прописал AP-скейлы в 14 карточках реликвий. Заодно упёрся в то, что раздел «как это работает» в карточках перемешан с историей: кто что решил, почему, какой замер подтвердил, каким компонентом реализовано.

Решения:

  1. Карточка контента несёт ТОЛЬКО актуальное состояние: механику, числа, шов. Провенанс — callout’ы «Решение Макса от <дата>», причины выбора, отчёты замеров, пометки «Реализовано <дата>: такой-то компонент», «Исправление канона» — из карточек уезжает в этот журнал. В карточке остаётся одна ссылка на журнал внизу. Причина: у карточки одна работа — ответить «что и как работает сейчас». История решений нужна, но у неё уже есть дом, и держать её в двух местах значит нарушать единый источник правды: при следующей правке механики расходятся именно карточка и её же врезки. Удалять историю при этом нельзя — она лекарство от «переписал модель огня три раза».
  2. AP — ось роста внутри забега, а не часть базовой силы. Старт 0 у всех реликвий и классов; средний реальный вклад за забег ~50, конец акта при ставке на AP ~100, практический максимум ~200. Форма аддитивная: база + коэффициент × AP. Причина: при старте с нуля включение скейлов не сдвигает баланс — все формулы дают ровно текущие числа, и классовые коридоры от 2026-07-28 остаются линейкой. Плюс так AP читается игроком как «моя ставка», а не как невидимая часть базы.
  3. Единой нормы роста нет; щедрость зависит от того, насколько AP ожидаем для кита. Кастерам (маги, хилы, контроллеры) AP растит главные числа предсказуемо — это их основной способ усиления. Физическим китам (убийцы, танки, брузеры) — вторичные параметры (дальность, радиус, длительность бафов, множители), зато щедро. Причина: вкладываться в AP убийце нелогично, поэтому такая ставка обязана окупаться заметно — иначе выбор мёртвый. А у мага рост должен быть ровным и ожидаемым, потому что это его штатный путь.
  4. Капов почти нет. Ограничение ставится лишь там, где без него параметр теряет смысл. Причина: «игроки должны мочь ломать игру» — прямое следствие концепции задуманной поломки (2026-07-28/1). Кап на каждом параметре стрижёт разгон под середину и убивает саму ставку.
  5. Длительность контроля скейлить от AP МОЖНО (стан, корень, заморозка). Причина: замещает моё предложение о запрете. Это самый мощный вектор, поэтому он отдаётся тем, чья фантазия и есть контроль: Криомант с 200 AP останавливает строй целиком — заслуженная поломка, купленная за стату, а не бесплатная.
  6. Один параметр может расти от нескольких статов сразу (AP + сила атаки + скорость атаки + броня), если это логично по концепции кита. Причина: замещает моё предложение «один параметр — один источник». Запрет ради стройности отнял бы естественные связки: у Древня броня и урон шипов — одно и то же число, у Пастыря лечение и есть нанесённый урон.
  7. Порядок реализации: сначала отсутствующие механики, потом числа AP. Причина: новые фичи в карточках Макс дописывал именно затем, чтобы подсветить нереализованное. Числа поверх несуществующей механики — работа впустую.
  8. Кламп скорости атаки не нужен. Проверка показала, что его и нет: StatsConfig.AttackSpeedMin/Max симуляцией не применяются — поля мёртвые и подлежат удалению вместе с проверяющим их тестом. Причина: потолок темпа бил ровно по тому киту, чья фантазия — разгон (Мечник), а мёртвая настройка в конфиге вводит в заблуждение при следующем разборе.
  9. AP Некроманта растит статы призванных, не их количество. Причина: количество от AP делает ответ на вопрос «сколько у меня скелетов» функцией предметов и обесценивает апгрейд «Высший некромант», который как раз про количество.
  10. Идеал (The Paragon) ждёт реворка — AP-скейлы ему не прописываются. Причина: расписывать числа по механикам, которые сменятся, — работа в мусор.

Канон-дома: модель AP разнесена в Combat - Stats §«Сила навыков (AP): модель роста». Скейлы по каждой реликвии и порядок реализации — docs/ap-and-skills-progress.md (статус proposed: числа ждут приёмки, модель принята).

Отсрочка разноса, названная вслух: карточки на момент записи ещё не почищены (решение 1) и скейлы в них не внесены — и то, и другое идёт волной 4 плана, после приёмки чисел. Иначе 21 карточка переписывается дважды.


2026-07-28 — игра должна ломаться; процентный огонь Мечника, лечащий взрыв Друида

Контекст: балансный проход по реестру docs/balance-issues.md. Разбор уперся в вопрос «а надо ли вообще чинить кита, который выносит двадцать боёв из двадцати» — и ответ на него оказался концептуальным, а не балансным.

Решения:

  1. ИГРА ДОЛЖНА ЛОМАТЬСЯ — но там, где мы это задумали. Одна из основнейших концепций проекта. Рогалик продаёт игроку удовольствие найти поломанную стратегию; отнять её — отнять жанр. Поэтому крайний винрейт сам по себе не дефект: первый вопрос — «это суть кита или случайность?». Дефект — поломка без цены, поломка не там, где задумано, или поломка, обесценивающая весь остальной ростер. Классовый коридор остаётся линейкой для «случайно выпал», а не приговором киту, чья роль — выпадать. Причина: без этой рамки петля баланса стрижёт ростер под середину, и киты превращаются в набор одинаково-приличных. Ровный ростер — не сбалансированный, а пресный.
  2. Мечник — эталон задуманной поломки, и переведён в Убийцу. Его урон в одну цель обязан уходить за коридоры. Цена: накопленное живёт на цели и теряется при переключении, разгон требует времени, сам хрупок (1500 HP), платит здоровьем за удар, лечится только с добивания. Причина: дуэлянт-антитанк механически ближе к Убийце; Брузер был велик по прочности и мал по норме урона. Замер: дуэль 0.95, тройки 0.45, отряды 0.25 — заказанная фигура.
  3. Процентный урон огня возвращается — но НА ТЫЧКУ, а не в DoT. Огненная половина автоатаки бьёт 1% макс. HP цели + 0.25% за каждый уголь, без потолка. Поджог остаётся плоским (30/сек), «Угли» остаются общим эффектом (+1% к входящему огню за стак) — процентная прибавка это личный функционал Мечника поверх общего эффекта. Причина: уточняет решение 2026-07-26/4, где сказано «процентная часть теперь живёт в „Углях“, то есть в тычках», но не сказано, процент чего — код прочёл это как множитель к урону, дизайн имел в виду долю макс. HP. Формулировка стоила трёх разговоров об одном и том же; теперь закрыта. Мина процентной модели (растёт вместе с полосками HP контента — причина снятия в legacy) принята осознанно: она и есть механизм задуманной поломки.
  4. «Взрыв спор» Друида — чисто лечащий. Урона не наносит, яды не расходует, порог целей — одна. Лечение вокруг каждой отравленной цели, и не мгновенное, а HoT: 60/сек × 3 сек, стаки по числу уникальных ядов и по числу взрывов рядом. Урон Друида целиком живёт в пассивном яде на автоатаках. Причина: карточка The Bloom описывала способность неверно в трёх местах («пассивный», «нанося урон», «эффекты расходуются») — исправлено по вердикту Макса. Суть кита в том, что он превращает разнообразие ядов в лечение, а не в ещё один источник урона.
  5. Классовые нормы урона утверждены от замысла (замещают числа 2026-07-26/1, снятые с медианы ростера): Брузер 1.0 — эталон, Танк 0.5, Убийца 1.4, Дальник 1.2, Поддержка и контроллер 0.5, Призыватель 0.5 от 110 урона в секунду. Коридор ±30%. Причина: «выше роли» должно значить «выше замысла», а не «выше того, что стенд намерил вчера».
  6. BaseRelic ничего не меряет. Это обычный персонаж для лёгкости тестов — чистые статы без скиллов, «золотой стандарт». Приведён к классовой норме Брузера (2000 HP, 110 урона), которая по живому ростеру совпала с его средним. Место в хвосте таблицы — следствие отсутствия набора, не балансное показание; сравнивать китов «с эталоном по силе» нельзя.

Канон-дома: Relic - The Pyre (шаги 2-4), Relic - The Bloom (шаг 5), рамка о поломках — docs/balance-issues.md.


2026-07-27 (ночь, 3) — прокачка «Сосуда» в забеге: уровни, Судьбы-квесты, Обеты

Контекст: прямое следствие 2026-07-27/17 — Судьба уехала внутрь забега, а системы, которая её выдаёт, не существовало. Разбирали сразу после сессии по мете. Канон-дом заведён: Run - Vessel Progression.

Зачем система нужна (формулировка Макса): дать игроку чувство роста, когда драфт не идёт. Копии могут не собраться — четыре Реликвии на руках, качество не растёт, и кажется, что стоишь на месте, хотя играл хорошо.

#РешениеПричина
1Прокачка «Сосуда» — гарантированная и ЯВНАЯ прогрессия забега, а не скрытая страховкаВторой канал роста рядом с уровнями Реликвий: те растут копиями (universality vs сила), этот — опытом. Игрок всегда видит, что двигается
2Защита от невезения у нас — ИНСТРУМЕНТЫ КОНТРОЛЯ (рероллы, широкий выбор), а не тихая подкрутка весовЗакрывает строку «Защита от невезения» (roadmap Блок 2), где висели пити-таймеры и скрытые счётчики. Явный рычаг в руках игрока честнее незаметной подкрутки — и не создаёт эксплойт-вектор «фармить неудачи», которого мы боялись (difficulty-skill §4.5, гоча про прайминг счётчика)
3Опыт растёт за участие в бою + бонус за подвигиПодвиги уже отслеживаются для Летописи (procedural-lore) — одна система событий питает и прогресс, и память, новой машинерии не нужно
4Темп — примерно два уровня за первый акт (ориентировочно к привалу)Четыре «Сосуда» × каждый уровень = клики. Плотнее — и забег превращается в меню-симулятор
5На уровне — витрина из ЧЕТЫРЁХ вариантов + реролл за золото забегаЭто и есть инструмент контроля из №2, применённый к самому себе: широкий выбор и платный реролл вместо скрытых гарантий
6Три рода содержания: улучшения-статы · Судьбы-квесты · ОбетыРазные темпераменты в одном выборе: надёжное число, рискованный квест с большей наградой, правило-ограничение. Ни один не доминирует всегда
7Статы улучшений НЕ ограничены китом: можно трогать что угодно, вплоть до «толстяк: +размер, +макс HP, сильный минус к скорости»Отклонено предложение скрайба ограничить прокачку кит-независимыми статами. Причина Макса: именно свободная кастомизация делает человека запоминающимся — у него появляется форма. Следствие принято сознательно: вложения прилипают к роли, и переназначение Реликвии меняет вопрос с «кто понесёт кит» на «кому кит подходит»
8Около 80% улучшений несут заодно небольшой минус (реф Brotato / ROUNDS)Чтобы рост не был пресным «стал сильнее», а был выбором формы
9Судьбы — обычно квесты, иногда стартовые бонусы. Первые примеры: Жаждущий смерти, Удачливый (награда не определена), Главный герой, УчёныйКвест-таланты HOTS: условие в бою → постоянный бонус. Даёт цель поверх обычного боя, не трогая автономность боя
10Провал квеста: прогресс сбрасывается, сам квест остаётсяЦена провала — потерянное время, а не мёртвый выбор на весь забег. Сгорающий квест наказывал бы за один невезучий бой слишком дорого
11Обет нарушить НЕЛЬЗЯ — это жёсткое правило поведения: он меняет сам AI, юнит физически не делает запрещённогоБой автономен, игрок не управляет тем, кого бьёт юнит. Нарушаемый Обет штрафовал бы игрока за поведение AI — ровно «кража победы», риск №1 роадмапа. Заодно Обет остаётся правилом, а не числом
12В коопе улучшение выбирают голосованием, спор разбивает кубикТот же инструмент-арбитр, что и в остальном коопе (Coop - Overview): решение общее, спор становится байкой

Готча, зафиксированная явно: «Жаждущий смерти» (квест «умереть в 5 боях подряд») работает только потому, что смерть в бою ≠ гибель насовсем — гибнут лишь на высоких возвышениях, в ивентах и особых сражениях (2026-07-27/2). Чиня одно, не сломать другое.

Осталось открытым: награда «Удачливого»; все числа (опыт, кривая, размер пула, величина минусов); подача прогресса квеста в UI; список Обетов; как читается смена роли человека («толстяк») в подготовке, где класс приходит от Реликвии.

Правит доки: Run - Vessel Progression (новый канон-дом), Content - Relics (§Судьба — ссылка на новый дом), Run - Meta Progression (граница двух слоёв прогрессии), Vision - Difficulty & Skill §4.5 (защита от невезения = инструменты контроля), Meta - Roadmap (тема закрыта, строка «Защита от невезения» решена), Meta - Open Forks (черновые строки помечены принятыми), Meta - Glossary (Обет, уровень «Сосуда»).


2026-07-27 (ночь, 2) — тональный ключ: «хаос против порядка» как обман ожиданий

Контекст: идея Макса по ходу сессии о мете. Даёт тон-развороту (pitch §11, 2026-07-19/7) конкретный носитель — не атмосферу вообще, а одну фразу, которая держит всю дугу.

#РешениеПричина
1Пролог встречает игрока фразой «Это история о битве хаоса и порядка…», и фраза повторяется по ходу игры как рефренНа входе читается как жанровое клише — то есть работает приманкой ровно так же, как «добрая кооп-игрушка». Повтор нужен, чтобы к моменту разворота фраза уже сидела в памяти и её можно было переосмыслить, а не услышать заново
2В финале дуги (после боссов, консоли и их безумия) фраза объясняется наоборот: «хаос» — это живые, люди и существа; «порядок» — Система, которая всё сильнее влияет на мирПереворот через переосмысление уже сказанного, а не через новую информацию: «оно всегда было тут», а не «прикрутили поворот». Это самый дешёвый посев foreshadowing из возможных — одна строка текста, — и при этом он держит весь разворот
3Фраза — первый и главный элемент «реестра посевов» для мета-нарратива «мир-как-конструкт» (open)Реестр посевов был назван дорогим-в-ретрофите швом. Теперь у него есть якорь, вокруг которого собираются остальные семена — консоль у трёх фракций, поведение боссов, «язык мира»

Наблюдение скрайба (proposed, не решение): механика игры уже стоит на стороне «порядка». Игрок не сражается сам — он программирует поведение живых: AI-профили, пороги отступления, приоритеты целей. А «Сосуды» — люди, в которых вкладывают чужую силу. Если так, то разворот достаётся игроку не как сюжетная новость, а как обвинение: порядок, который душит мир, — это буквально то, чем игрок занимался весь забег. Стоит проверить эту рамку при проработке — она бесплатна (механика уже есть) и попадает и в столп «Нарратив рождается сам», и в разворот тона.

Правит доки: Meta - Open Forks §Мета-нарратив (носитель разворота назван), pitch §11 (тональная дуга получила ключ), lore — при проработке сеттинга.


2026-07-27 (ночь) — развитие гильдии: дом, ветераны, смерть и память

Контекст: дизайн-сессия по всему Слою 3 целиком. Слой был принят 2026-07-19/3 и получил канон-дом 2026-07-26, но жил каркасом: «валюта открытий, темп, дерево прегенов, экран-хаб» стояли в роадмапе нерешёнными, а ProfileState/GuildState в сейв-слое ждали, что именно в них копится. Разбирали от каркаса вниз: что такое кампания, чем игрок рискует, что такое дом — и только потом экономику и память.

Опорное наблюдение сессии: «Сосуд» не несёт мощи (весь кит — в Реликвии). Значит его гибель не наказывает механически: новый человек приходит равным по силе. Платится только память. Это позволяет взять ставки уровня Darkest Dungeon, не заплатив ни копейки силовой инфляцией и не нарушив решение 2026-07-15/31.

Решения:

#РешениеПричина
1Кампания = уникальный забег со своими ивентами, противниками и локациями. На старте кампания одна; новые (и «хаос-мод», где доступен весь контент разом) — к релизу или в DLCКампания становится контентом, а не системой: не заводит четвёртый слой между забегом и гильдией со своим сохранением и своим «выходом посреди». Гильдия копит лишь «что пройдено и на каком возвышении»
2Смертность «Сосудов» — функция возвышения. На низких ступенях люди не гибнут вовсе; на высоких там, где прежде была рана, наступает гибель. Убивают ивенты и особые сражения, обычный бой — нетЭто в первую очередь тон, а не сложность: дуга «мило → мрачно» (pitch §11) получает механическое тело. Ставки растут ровно там, где игрок сам попросил жёстче
3Ростер дома: старт 8, растёт метой до 64 за валюту гильдииДом должен быть домом, а не четвёркой. Запас людей — обязательное условие смертности и гейта ветеранов (№6): без глубокой скамейки одна плохая ночь запирает игрока
4Вторая гильдия = чистый лист истории. Механически дома равны; разное — люди, книга, пройденные кампании, возвышениеСлот сохранения с характером (модель Slay the Spire). Уклон/специализация дома отклонены: они бы вводили силовые различия между домами вопреки 2026-07-15/31
5Возвышение: доступ — в профиле, текущее и максимальное — в гильдии. Открыл ступень раз — она доступна любому дому; но тон и смертность конкретного дома идут от его ступениВетеран не обязан ползти снизу на каждом новом доме, но и «мрачность» не включается в доме, который её не заслужил
6Гейт ветеранов на верхних ступенях: чем выше возвышение, тем больше ветеранов обязано быть в отряде — лестницей (один → двое → все четверо), и только на самых верхних ступенях. Ветеран = пережил хотя бы один завершённый забег (победа или поражение — неважно, важно вернулся живым)Смыкает смертность с привязанностью: на вершину идут именно те, кем ты уже играл (реф Mewgenics). Лестница же служит предохранителем от спирали — потеряв ветеранов, откатываешься на ступень, а не в начало. Порог «один завершённый забег» читается одной строкой и не требует счётчиков подвигов
7Анти-грайнд: после гибели N ветеранов (ориентир — 8) открывается наём ветеранов за валюту. Купленный несёт −3% статов; штраф сходит со службойЧтобы вершина не превращалась в отработку часов после плохой ночи. −3% — намеренно мелкая заноза: зудит, что история куплена, а не прожита, но не ломает бой. Сходит со службой, потому что наёмник со временем прирастает к дому
8«Наём с запросами»: игрок заказывает нужные перки, приходят три кандидата, различающиеся только внешностью, именем и досье. Стоит валюту, и ощутимо. Ветеран под запросы = сумма стоимостей (ветеранство + запрос)Игрок должен уметь собрать нужного человека, но платить за это. Кандидаты механически идентичны — выбор чисто нарративный, то есть система даёт власть над билдом, не давая её над случайностью бесплатно
9Базовый канал набора — кандидаты приходят сами: после забега и по событиям в дверь стучатся несколько человек с готовыми досье, берёшь кого-то одногоДрафт вместо магазина: каждый новичок — событие, а не покупка. Бесплатный путь остаётся всегда, платный (№8) лишь адресный
10Валюта принадлежит ДОМУ, а не игроку. Тратить может каждый участник, без гейта правОбщий кошелёк комитета мастеров — то самое место координации и споров, ради которого кооп затевался (pitch §10). Игра не запрещает хаос, а даёт им владеть; спор решается кубиком и уговором, а не правами доступа
11Золото забега и валюта дома — разные ресурсы. Золото в конце забега сгораетЕдиный ресурс превратил бы экономику забега в копилку: выгоднее не тратить, чем играть. Разведение убирает скрягу-стратегию целиком
12Валюта растит ДОМ, вехи открывают КОНТЕНТ. За валюту гильдии покупается то, чем гильдия владеет; Судьбы, прегены и Капитаны открываются только игрой и падают в профиль игрокаКто чем владеет — тот за то и платит. Заодно снимается кооп-вопрос «мы платили втроём, а открылось кому?»: за общие деньги нельзя купить личное открытие
13За валюту дома покупаются: слоты ростера (8→64), баны и рероллы пула реликвий, качество и число кандидатов при наборе, стартовые условия забега, удобства и косметика домаВсе четыре канала расширяют опции и удобство, а не потолок мощи. Стартовые условия — ближайший к границе пункт, требует осторожных чисел
14Капитаны — контент игрока: открываются вехами в профиль, доступны любому его домуЕдиное правило на весь открываемый контент, без исключений; ветеран не теряет любимый стиль, заводя новый дом
15Преген: экземпляр у каждого дома свой и он смертен. Погиб в этом доме — ушёл из этого дома навсегда; в другом его можно взять сноваОткрытие остаётся опцией, а не расходником (2026-07-15/31): потерять сам анлок нельзя. При этом бессмертных любимцев на вершине не заводится, и ставки живы
16Уникальность прегена держится на авторских перках и написанном досье (замещает 2026-07-15/28, где она держалась на Судьбе)Судьба уехала в забег (№17) и уникальность нести больше не может. Перки — durable-свойство человека, значит уникальность живёт вместе с ним; шов «Сосуд пустой, кит в Реликвии» цел, нового слоя не заводится
17Судьба переезжает из «Сосуда навсегда» в ЗАБЕГ: это квест уровня «Сосуда» (реф Heroes of the Storm), живёт только внутри забегаСудьба как пожизненное свойство конфликтовала с людьми, живущими годами: она задавала стиль забега, а не человека. Квест-на-забег возвращает ей роль тактического решения. Следствие: появляется незаспроектированная система «опыт и уровни Сосуда в забеге» — это Слой 2, отдельная тема роадмапа
18Перки — durable, фиксируются при найме. Менять их можно будет через «тренировочный пункт»; его форма (хаб дома за валюту / узел на карте) — открытый вопросЧеловек остаётся собой между походами. Возможность переучивания нужна, чтобы старый ветеран не становился обузой из-за неудачного перка
19Летопись живёт в книге гильдии, и записываются ВСЕ «Сосуды», включая погибших. Память не сжимается, не обрезается по кап; отдельно и явно отмечаются те, кто дожил до конца забега. Рост файла сохранения — приемлемая ценаЧеловек умер — память о нём не должна деградировать: это и есть валюта Слоя 3. Кап «держать N лучших записей» отклонён Максом прямо: несколько мегабайт текста ничего не стоят, а урезанная биография обесценивает потерю
20«Истории о забегах» = Хроника дома: лента, где каждый забег закрывается записью (кампания, итог, возвышение, ярчайшие моменты, павшие). Мемориал — раздел той же книги, не вторая системаЗакрывает открытый вопрос pitch §9 «хроника, галерея баек или мемориал» одной сущностью. Дёшево в производстве и читается как летопись дома во времени
21Досье «Сосуда» привязано к сиду РОЖДЕНИЯ человека, а не забегаПрежняя привязка к сиду забега ломалась о людей, живущих много походов: личность пересобиралась каждый поход, пока Летопись помнила подвиги — герой переставал быть собой. Кандидат, не принят: часть фрагментов прирастает со службой
22Хаб гильдии — три раздела: Казармы (ростер, досье, отбор четвёрки), Книга гильдии (Летопись + Хроника + Мемориал), Прокачка дома за валюту. Компендиум и мастерская AI-профилей в дом НЕ входят — это имущество игрока, живёт в главном менюДом содержит то, что у дома можно отнять. Знание об игре и заготовки поведения принадлежат игроку и обязаны переживать смену дома
23Кооп-гость уносит домой: открытия — в свой профиль, запись «гостевали у гильдии такой-то» — в Хронику своего активного дома. Валюты и ветеранства не привозитОн играл чужими людьми и тратил чужую казну — приносить их плоды к себе неправомерно. Но след совместного вечера в его истории остаться должен. Заодно закрыт вопрос 2026-07-26 «запись гостю в дом или в профиль»
24Записки из мастерской (геймдев-кухня: как рождалась реликвия, что задумывалось) — награда меты. Форма: закрытая врезка «Из мастерской» в карточке компендиума, открывается вехой по этой же сущностиНаграда для того, кто игру полюбил, а не отработал. Безопасная форма импульса «Две Силы» из open: не авторы на сцене (self-insert читается как эго), а следы их рук в кодексе. Тонально работает на разворот — комментарий к милому реликту читается иначе, когда игра уже показала зубы

Замещения. №16 замещает 2026-07-15/28 (superseded: уникальность прегена больше не на Судьбе). №17 меняет статус Судьбы, принятый 2026-07-15/27 и описанный в relics-overview §Судьба: прогрессивный ревил прегена остаётся, но раскрывает перки и досье, а не Судьбу.

Осталось открытым: «Тайна» досье — Макс думает над самим её существованием и формой; форма тренировочного пункта (№18); числа (порог смертей для найма ветеранов, лестница гейта, цены). Новая большая тема — опыт и прокачка «Сосуда» в забеге (Судьбы-квесты, +статы, Обеты): ушла в Meta - Roadmap Блок 1, канон-дома пока нет.

Правит доки: Run - Guild Development (канон-дом слоя, переписан), Run - Procedural Lore (сид рождения, книга гильдии, Тайна в открытые), Content - Relics (§Судьба и §«Сосуды»), Run - Injuries & Mettle (летальный верхний край на высоких возвышениях), pitch §9 (открытый вопрос закрыт), Vision - Difficulty & Skill (возвышение задаёт смертность), Coop - Overview (общая казна, гость), Meta - Glossary (новые термины), Meta - Roadmap (Блок 1 сокращён, заведена тема прокачки «Сосуда»), Meta - Open Forks (черновые строки помечены принятыми).


2026-07-27 (вечер) — ресурс по времени, хил по источникам, стаки при очистке

Контекст: разбор Пастыря на Ристалище. Его активка лечила 300 плюс 100% недостающего HP каждые шесть секунд, то есть полностью отменяла урон по одной цели, а пассивка отдавала в лечение весь нанесённый урон. Заодно всплыло, что тип ресурса в ките ничего не значит: шесть китов объявлены на Мане, Копейщик на Ярости — и все набирают одинаково, от попаданий.

Решения:

  1. Ресурс восстанавливается ПО ВРЕМЕНИ: 5 в секунду, одинаково у всех. Набор от попаданий снят; запас — 100 (полная шкала ровно 20 секунд). Темп каста = стоимость ÷ 5, считается в уме. Причина: пока ресурс капал с ударов, скорость атаки была двойным бустом — быстрее бьёшь, чаще ульта, — а темп способности зависел от того, дотянулся ли кит до цели. Единая скорость делает ритм читаемым и сравнимым между китами.

  2. Пока ресурс один — Мана (либо его нет вовсе, как у Убийцы). Ярость откладывается. Причина: осознанный выбор простоты. Разделение «мана по времени / ярость от действий» остаётся в глоссарии как вектор, но заводить второй режим сейчас незачем — сначала нужен внятный баланс одного. Плата известна: Мечник временно теряет возможность разгонять темп ульты вложениями (решение 2026-07-26/5а) — вернётся вместе с Яростью.

  3. Хил считается от нанесённого урона: 100% себе, 150% союзнику. Причина: лечить других выгоднее, чем себя, — это и есть роль поддержки; при этом само-хил больше не запрещён, а просто слабее. Замещает решение 2026-07-26/«Пастырь не лечит себя ничем» (superseded): тот запрет вводился против неубиваемости, а её причиной была ульта с процентом от недостающего HP, а не сам факт само-лечения.

  4. Числа Пастыря: урон удара 100, темп 0.5 (раз в две секунды) → 50 урона в секунду; хил пассивкой 75 союзнику и 50 себе в секунду; активка — 100 плоского + 8% недостающего, стоимость 30 (каст раз в 6 секунд), около 30 хила в секунду. Итого союзникам ~105 в секунду — чуть ниже урона Брузера. Причина: сто процентов недостающего — не «сильный хил», а кнопка «отменить бой по этой цели». Восемь процентов сохраняют характер (свет тянется к тому, кому хуже), но исход решает не он.

  5. У эффекта появляется собственная цена очистки: сколько стаков снимает одно очищение, max(плоское, доля). Эффект без цены снимается целиком — как всё нестакающееся. Причина: мы сознательно сняли потолок стаков ради «долгий бой очень сильно окупается» (2026-07-26/4), но одна очистка стирала любое накопление целиком — ставка обесценивалась одним нажатием. Заодно это шов под «сильную очистку», снимающую больше обычной.

  6. Вклад в бой раскладывается по источникам не только для урона, но и для хила и живучести. Хил: активка / пассивка / реген / вампиризм (само-хил — отдельной графой, как самоурон). Живучесть меряется сохранённым HP — общий знаменатель для брони, щитов, хила, регена и прибавок к запасу. Причина: пока величина одна, непонятно, откуда она берётся, и чинить приходится наугад — ровно эту боль сняла разбивка урона по источникам (2026-07-26). Общий знаменатель нужен, чтобы слагаемые можно было складывать и сравнивать с уроном, а не держать три несравнимые колонки.

  7. Цена очистки — ЛЕСТНИЦА от превышения силы развеивания над тиром эффекта. Свой уровень — 5 стаков или 15%, на уровень выше — 10 или 25%, на два и больше — 20 или 50% (числа тира 1). Причина: иначе сильная очистка отличалась бы от базовой только тем, ЧТО может снять, но не тем, СКОЛЬКО уносит, — и вложение в силу развеивания не чувствовалось бы против накопительных эффектов вроде «Углей».

  8. Тиры проставлены всему ростеру дебаффов по канону (tech «Combat Model» §5.4): тир 1 — Поджог, «Угли», Метка охотника, Споровое облако, Ослабление; тир 2 — Заморозка, Ледяные оковы, стан «Решительного удара». Тир 3 пока пуст. Причина: тир стоял нулевым у всех, кроме «Углей», то есть лестница снимаемости существовала только на бумаге — любой клинз снимал что угодно.

Разнесено: stats §Ресурс, the-shepherd, property-reference (цена очистки, лестница, таблица действующих тиров).

2026-07-27 — Ристалище: площадка вне забега вместо «тест-зоны»

Контекст: разбор преимущества стороны в бою (зеркальные команды заканчивали бой со счётом 59.7% против нуля) потребовал смотреть бой глазами, а не только метриками стенда. Выяснилось, что посмотреть его негде: dev-команды живут в отдельной сцене CombatSystemsScene, а в игре любой бой достаётся только проходом карты акта. Заодно уточнили, что уже построенная «тест-зона» — не служебный костыль, а игровая фича.

Решения:

  1. «Тест-зона» переименована в «Ристалище» (TestZoneProvingGrounds). Причина: прежнее имя путалось с тестами кода, а сущность — игровая площадка гильдии, куда игрок приходит рассмотреть бойцов. Имя должно говорить о месте в мире, не о задаче разработки.
  2. Ристалище обслуживает три аудитории одной площадкой: игрока (рассмотреть бойца и предмет, столкнуть своих между собой без риска для забега), разработчика (водить dev-команды и смотреть бой вживую), агента (проверять боевую симуляцию, не заходя в петлю забега). Причина: все три хотят от неё одного — увидеть бой без обязательств, поэтому разделять её на «игровую» и «служебную» нечего. Третья роль снимает реальную цену: пока единственная дорога к бою идёт через карту акта, проверки боя случаются реже, чем нужно.
  3. Ристалище — это ВХОД в существующую площадку из меню, а не отдельный «тестовый бой» рядом с ней. Причина: иначе у серой арены, расстановки и старта боя появляется второй владелец. Ровно это уже стоило раунда багов на трёх рассинхронных флагах и лечилось сведением к одному владельцу (контроллер расстановки решает, остальные слушают).
  4. Базовый минимум: вход из главного меню, состав отряда по умолчанию из конфиг-ассета (четыре бойца), dev-команда, которая сворачивает текущее состояние штатным возвратом в меню и следом шлёт тот же интент, что кнопка. Причина: площадка уже умеет всё остальное; не хватает ровно входа вне забега, потому что она собирается из стоящего отряда, а в меню отряда нет. Состав через ассет — шов под будущий экран сборки: сменится источник данных, не поток.
  5. Отложено: экран сборки состава игроком, настройка противника, сохранение расклада. Причина: к бою глазами это не нужно, а объём даёт заметный.

Разнесено: новый канон-дом proving-grounds (50-modes-ux/), термин — в glossary, ссылка — в MOC ГДД.

2026-07-26 (ночь, 9) — баланс: классовые коридоры урона и новая модель огня The Pyre

Контекст: заход по усилению балансных инструментов упёрся в то, что мерить не с чем — стенд (SimBench) выдаёт цифры, но нормы, с которой их сравнивать, в дизайне не было. Разобрали, откуда берётся урон, выровняли ростер и переписали модель огня Мечника, чью старую механику канон отменил ещё 2026-07-15, а код продолжал держать.

Решения:

  1. Класс задаёт не только HP и скорость, но и целевой DPS автоатаки. Эталон — Брузер (120 урона в секунду). Танк 50%, Убийца 120%, РДД 100%, Поддержка 50%, Призыватель 50% от эталона. Коридор автора — ±25% от классовой цели; за его пределами нужна причина в карточке. Причина: без нормы замер не умеет сказать «плохо» — он выдаёт число, которое не с чем сравнить. Симметрично уже принятому каскаду классов (2026-07-24/1).
  2. Класс задаёт эталонный ТЕМП, а раскладка урон × скорость остаётся за персонажем. Медленный тяжёлый удар и частая тычка одинаково законны, пока произведение попадает в коридор. Эталоны темпа: Брузер и РДД 0.75, Танк 0.55, Убийца 1.0, Поддержка 0.7 атаки в секунду. Причина: темп — это характер юнита, и фиксировать оба сомножителя значит сделать всех одинаковыми внутри класса. Общий масштаб замедлен на четверть: при восьми юнитах на экране десять ударов в секунду не читаются ни глазом, ни звуком, и джус на них не срабатывает.
  3. Порядок балансной работы: сначала весь ростер на норму, потом разбор статистики. Причина: пока базы нет, каждый «выброс» — это выброс относительно ничего. После выравнивания стало видно, что перекос дают ровно вторые валюты (DoT, AoE, хил), а не автоатаки.
  4. Модель огня The Pyre — числа утверждены (сама модель принята ранее, здесь ей дана цифра): поджог 30 урона в секунду, 5 сек, обновляется, не стакается; «Угли» без потолка стаков, +1% урона огнём за стак; автоатака по горящей цели расщепляется пополам — половина Режущим, половина Огнём; «Воспламенение» — 15 урона за стак, по текущей цели автоатаки, мана 100, стоимость 60, набор 8 за попадание автоатаки с потолком 10 в секунду, без жёсткого кулдауна; разгон темпа остаётся +5% за удар до +100%. Причина: поджог перестал быть процентом от максимального HP цели — процентная часть теперь живёт в «Углях», то есть в тычках, и дублировать её в DoT незачем. Анти-танк держится не формулой, а временем: чтобы разогнаться, надо долго бить одну цель, а долго бьёшь только толстую. Отсутствие потолка стаков — осознанный выбор в пользу «долгий бой очень сильно окупается».
  5. Цель «Воспламенения» — текущая цель автоатаки, а не ближайший враг (замещает формулировку карточки). Причина: «Угли» копятся именно на той цели, которую Мечник бьёт; ближайшим может оказаться враг с пустой шкалой. 5а. Темп каста задаётся ресурсом, а не кулдауном. Жёсткого КД у «Воспламенения» нет: 10 секунд — это то, за сколько при базовых статах набирается 60 маны, то есть рекомендованный темп. Разгон темпа, снижение стоимости и рост набора его ускоряют — до 6 секунд, где упирается потолок набора (10 маны в секунду). Причина: игрок должен иметь возможность ломать рекомендованный темп своими решениями; жёсткий кулдаун такой возможности не оставляет и обесценивает вложения в ресурс.
  6. Щит «Оплот» — короткая вспышка с зарядами, а не длинное окно. Длительность 0.4 сек, два заряда с независимой перезарядкой, плоская часть 30 (была 200), доля недостающего HP 7.5% (была 15%). Поднимается только под прямой удар — автоатака или способность, тики DoT и ответка шипов его не будят. Причина: при двухсекундном щите его величина не значила ничего — сколько он поглотит, решало число прилетевших ударов, и правка размера не меняла размен один-на-один вовсе. Плоские 200 отменяли любой удар в ростере целиком, то есть были неуязвимостью, а не щитом.
  7. Пастырь Света не лечит себя ничем. Ни «Целебный свет» (цель хила — всегда другой союзник), ни «Длань жизни» (порог паники, разворачивавший ульту на кастующего, снят). Причина: свет — это то, что он отдаёт другим. Механически: ульта восстанавливает 100% недостающего HP, и на себе это давало полное исцеление каждые 6 секунд — он не умирал вовсе, переживая и потолок замера, и фокус троих.
  8. Копейщику урон вниз на 30% (он специалист по площади, а не по одиночной цели), Рейнджеру и Друиду — вниз (у Друида в первую очередь урон автоатак: он поддержка, и его валюта не тычки). Причина: после выравнивания они остались выше своих коридоров за счёт второй валюты. Сделано: Копейщик 200 → 140, Рейнджер 145 → 116, Друид 71 → 45.
  9. «Угли» живут на ЦЕЛИ, разгон темпа — на самом Мечнике. Два разгона разведены намеренно: стаки, усиливающие огонь, копятся на конкретном противнике и теряются при переключении; прибавка скорости атаки остаётся на носителе и не теряется. Причина: именно первое делает Мечника дуэлянтом — верность цели должна вознаграждаться, а измена ей стоить накопленного. Второе — его собственный ритм, к цели отношения не имеющий.
  10. Заведён тег профиля «Дуэлянт» (Duelist). Ось Playstyle: «силён в размене один-на-один и тем сильнее, чем дольше держится на одной цели». Проставлен The Pyre и The Verdict. Причина: у нас появился механически выраженный архетип, которому в словаре не было имени; без ярлыка игрок не прочитает, что смена цели обнуляет накопленное. Канон — Roster - Unit Tag Glossary.
  11. Темп каста ломается ресурсом, а рекомендованный кулдаун — ориентир (см. 5а). Обобщение: там, где кит имеет «рекомендованный темп», гейтом ставится ресурс, а не таймер. Причина: решения игрока должны иметь право улучшать заявленное число, иначе вложения в ресурс, темп и стоимость ничего не стоят.
  12. Броня: класс задаёт БЮДЖЕТ (сумма физ + маг), герой — раскладку. Танк 120, Брузер 60, Убийца 30, бэклайн 20. Формула снижения остаётся урон × K/(K + броня), K = 100. Эффективное HP (HP × (1 + броня/K)) объявляется первоклассной величиной баланса: живучесть меряется им, а не голым запасом. Причина: раскладка не меняет средний запас прочности — эффективное HP линейно по броне, значит переложенная единица ровно столько же отнимает у одной школы и даёт другой. Специализация покупает разброс, а не силу: латник крепче против стали и голее против огня. До этого броня в ростере была 2–20 (снижение 2–17%) и как ось решений фактически не существовала.
  13. Правило для ЛЮБОЙ боевой формулы (спрошено Максом как общее): формула обязана быть линейной в том, чем мы балансируем (процент снижения может иметь убывающую отдачу — бюджет не может); игроку показываются два числа — сырой стат и производное («Броня 60 (−37%)»); формула не зависит от того, чего игрок не видел при подготовке (размер входящего удара, порядок целей). Формулы вида Path of Exile (броня / (броня + 5 × урон удара)) отклонены. Причина: в автобою игрок не видит расчёта и не может отреагировать — переменная защита читается не как глубина, а как несправедливость, что бьёт прямо в столп честности.
  14. Часть статов нормируется не классом, а способом боя. Дальность — типом доставки (Ближний 1 · Древковый 3 · Дальний 8 · Осадный 12, последний пока задел); скорость снаряда — его «весом» (Лёгкий 14 · Обычный 10 · Тяжёлый 7); реген 0, эффективности 1.0, ресурс 100/0/потолок 10. Размер юнита осознанно не нормируется — вводить его как ось будем, когда появятся существа крупнее человека. Причина: привязка к классу тут была бы ложной — лук и копьё различаются доставкой, а не весовой категорией. Норма-ориентир вместо коридора: отклонение законно, но требует причины в карточке.

Находка на полях: сила навыков (AP) в игре мертва — ни одного модификатора этого стата ни в одном ассете, ни одной способности, которая от него скейлится, хотя механизм (ScalableValue) готов. Это подтверждает старую заметку из Meta - Open Forks: AP должен что-то давать каждому классу. Отдельный заход.

Разнесено: Combat - Stats (§Классы — коридор DPS и эталон темпа), Relic - The Pyre (шаги 4-5), Effect - Burn (числа), Relic - The Bulwark (щит), Relic - The Shepherd (хил).


2026-07-26 (ночь, 8) — барьеры: две формы, Стена и Купол

Контекст: разбор механики барьеров по образцу Mechabellum — не «щит как доп-HP», а объект, который ловит снаряды и площадные эффекты на подлёте. Проверка боевого ядра показала, что база под это уже стоит целиком (своя тиковая сим без Unity-физики, снаряды со swept circle-segment, АОЕ, описанный геометрией, единый ICombatContext), и цена фичи лежит не в геометрии, а в AI.

#РешениеПричинаСтатусКанон
1Барьеры вводятся, и вводятся в ДВУХ формах: Стена (дуга) и КуполОсознанное решение Макса. Формы не дублируют друг друга: стена ловит всё, что летит по траектории, купол — всё, что приходит площадью извне. Разная контр-игра: стену обходят, купол вскрывают заходом внутрь. Ответ на одну форму не даётся бесплатно ко второйacceptedCombat - Barriers
2Барьер обязан отличаться от Щита по трём осям сразу: объект в мире, перехват на траектории, возможность обойтиИначе механика вырождается в «щит по площади»: у нас уже есть ShieldComponent с поглощением в DamagePipeline, и второй буфер HP не окупит работу. Пространственное правило — вся ценность фичиacceptedCombat - Barriers §Что это
3Тела ходят сквозь барьеры; зона контроля НЕ возвращаетсяПрямое следствие 2026-07-26/ночь-1: линию фронта держит угроза, а не стена. Барьер перекрывает траектории и площади, а не проходacceptedCombat - Positioning
4Пробитие — явное свойство источника «игнорирует барьеры», а не истинный уронПривязка к школе урона сделала бы True случайным ключом от механики. Явное свойство оставляет контр-игру решением при сборке билда (аналог вольфрамовых стержней в Mechabellum)acceptedCombat - Barriers §Общие правила
5Заход идёт ПОСЛЕ позиционики, не раньшеОбе формы окупаются только там, где юниты умеют занимать слоты, заходить с фланга и выбирать угол атаки. Без этого «обойти стену» и «зайти под купол» некому — механика превратится в буфер HP и будет переписана вместе с приходом позиционикиacceptedPlanning - Barriers

Главный риск записан отдельно, потому что он не про геометрию. Барьер, невидимый для AI, — это лучник, пять секунд честно расстреливающий стену, то есть риск «AI тупит на глазах» из Блока 4, срабатывающий первым же боем. Поэтому вместе с барьерами обязательно едет блок скоринга «линия огня перекрыта», опция «бить сам барьер» и предпочтение мили к цели под куполом. Это половина всей работы, и она встраивается в тот же Filter / Score / Override, который приносит позиционика.

Инженерная гоча, найденная при разборе: ProjectileSystem.AdvanceTracking телепортирует самонаводящийся снаряд в цель, не проверяя ничего по пути. Барьер такой снаряд не поймает вообще — а трекинг у нас основной способ доставки. Ветка переучивается на сегментную проверку, регресс-тест обязателен. Детали — Planning - Barriers.

Отмечено как частично отпавшее: в Mechabellum барьер наполовину живёт тем, что блокирует глобальные карты-способности игрока. У нас заклинания Гильдмастера вырезаны, ввода в бою нет — остаются только вражеские и союзные АОЕ-абилки. Значит ценность купола прямо зависит от того, сколько площадных источников будет в ростере; это ушло в «что осталось на баланс».

Правит доки: Combat - Barriers (новый канон-дом) · Planning - Barriers (новый план реализации) · combat-system §Барьеры · Meta - Roadmap §Спроектировано, но не реализовано.


2026-07-26 (ночь, 7) — разбор Блока A: чем подпёрта глубина

Контекст: Блок A из open-forks («то, что определяет, будет ли игра ощущаться глубокой») — три развилки, копившиеся с 07-15. Сверка показала, что две из трёх за месяц закрылись другими решениями, но никто не вернулся это отметить.

#РешениеПричинаСтатусКанон
1A1 закрыт как уже решённый: дизайн реликвий стоит на «правилах, а не числах»Канон эффектов провозгласил это прямо, и карточки следуют: Pyre копит и детонирует «Угли», Verdict скрытностью защищается от агро-автоатаки танка, Bulwark ставит щит на входящий урон и урона не наносит, Storm и Tide меняют пассивкой сам паттерн автоатаки. Пассивок «+X% урона» в ростере нет ни одной — переводить нечегоacceptedeffects §Принцип, open-forks §A1
2Остаток A1 — «эффект меняет правило ЧУЖОГО эффекта» — ОТЛОЖЕН до играбельностиСейчас герои общаются через состояние цели (тег «Мокрый» → consumer). Общение через чужой эффект («твои поджоги тикают вдвое чаще») — то, на чём держит глубину The Last Flame, и то, что заставляет драфт решать при четырёх «Сосудах». Но цена — движок должен модифицировать чужие рантайм-эффекты, а судить о такой комбинаторике умозрительно нельзяdeferredopen-forks §A1
3A2: четвёртую подпорку расстановки достраиваем, начиная с ОДНОГО типа точки интересаТри подпорки Mechabellum из четырёх у нас уже стоят (агро танка + слоты, разброс скоростей по классам, AoE-бонус по кластеру). Не хватает геометрии — а на пустом прямоугольнике все точки равноценны, и расстановка рискует выродиться в «танк вперёд, лучник назад» даже при готовых трёхacceptedopen-forks §A2

Тип точки интереса вердикта пока не получил — Макс отложил выбор, четыре кандидата с разбором записаны в open-forks §A2. Рекомендация скрайба — бутылочное горлышко: оно не вводит нового измерения, а умножает уже принятые слоты и фланговый бонус (в горловине окружение невозможно), позволяет танку держать проход без отклонённой зоны контроля и в симуляции требует только навигационной преграды.

Напоминание к тому же выбору: оформить ли AoE явным рычагом против кучности — сейчас это случайное свойство «Проводимости», а не принцип, на который опираются авторы эффектов.

Ранее в том же блоке: A3 (сшить расстановку с предметами правилом соседства) снят 2026-07-15/70 — предмет может требовать союзника рядом, но это условие эффекта, а не отдельный слой.


2026-07-26 (ночь, 6) — исполнение: матрица сродств, заклинания ГМ и второй владелец команды

Контекст: два принятых решения жили только на бумаге, а код продолжал работать по отменённой модели. Это исполнение, не новый дизайн.

  • AffinityTable снята. Матрица «сродство × тип существа» реализовывала модель, отклонённую 2026-07-15/35 и подтверждённо снятую журналом «ночь-3». Из трёх её правил работало одно — «Тьма ×1.3 по Living», — и поскольку весь ростер Living, Тьма тихо несла +30% почти всегда: все балансные числа тёмных китов были посчитаны по вранью. Удалены таблица, вызов в DamagePipeline, шесть тестов и мёртвый прокси RuntimeUnit.CreatureType (жил только ради неё). Взамен один guard-тест Affinity_NeverScalesDamage_ByCreatureType: он прогоняет все сродства по всем типам существ и падает, если урон разъедется. Контентное UnitData.CreatureType и сам enum CreatureType остались — идентичность существа никуда не делась.

  • GuildmasterData._spells снято вместе со свойством Spells. Заклинания Гильдмастера вырезаны из дизайна ещё в 2026-07 (ввода игрока в бою нет), а поле пережило механику; не читал его никто, ассетов Гильдмастеров в проекте нет.

  • У «команды смотрящего» снова один владелец. Проверка последнего долга из handoff показала: аудио было чистым (AudioPresenter спрашивал ILocalPlayer.Team), а CombatPresenter держал своё сериализованное поле _localViewerTeam. Два владельца одного факта: разъедься они — и полоски здоровья покрасились бы врагу в зелёный, пока стингер объявляет победу. Поле снято, презентер получает ILocalPlayer через DI, «свой/чужой» решается единственным методом IsAllyOfViewer — от него же теперь идут подпись и тинт болванчика (сравнивались с константой 0).

Разнесено: DamagePipeline.cs · DamageRequest.cs · CombatCategories.cs (докстринг сродства переписан на «идентичность глаголом, множителей нет») · RuntimeUnit.cs · GuildmasterData.cs · DamagePipelineTests.cs · CombatPresenter.cs · Meta - Roadmap §Долги кода · боевая модель (код Assets/_Project/Scripts/Combat/) (врезка «снята», тело раздела ждёт планового переписывания). Тесты 553/553.


2026-07-26 (ночь, 5) — закрытие дрейфа ГДД↔код: заряды, Аркана, четвёртая ось

Контекст: разбор оставшихся пунктов реестра дрейфа. Все три упирались не в дизайн, а в недоведённые до конца ренеймы и в мёртвое значение — но одно решение всё же требовалось.

#РешениеПричинаСтатусКанон
1Пятая ось TagCategory.Other снята. Осей ровно четыре: Role → DamageType → Playstyle → MechanicЗначение было мёртвым (ни один из 53 ассетов тегов его не носил) и вредным: оно стояло дефолтом поля TagData._category, то есть забытая категория молча уезжала в «прочее» и вставала последней в чипах вместо того, чтобы бросаться в глаза. Тег, которому не нашлось оси, — это тег, которому не нашлось смыслаacceptedunit-tag-glossary, ContentEnums.cs
2«Изворотливость» — 2 заряда (ГДД был прав, правился ассет)Расхождение возникло из-за того, что ассет писался до вердикта по кувырку (2026-07-26/ночь-1). ГДД главнее — Dodge.asset приведён к немуacceptedThe Verdict (Assassin)
3Ренейм Elemental → Magical доведён до ассетов, заведён Arcane.assetРенейм 2026-07-25 прошёл по ГДД и коду, но остановился перед данными: ассеты, id, loc-ключи и RU-тексты держали снятый термин, а тега Арканы не было вовсе — при том что резолвер запрашивал его с того же дняacceptedunit-tag-glossary

| 4 | 20 карточек получили combat_class — выведен из содержания каждой (позиция, дальность, механики, роль в энкаунтере), а не из старого поля roles | Класс задаёт базу HP и скорости, то есть без него карточка не сводится в юнита. Автоперенос из roles был отвергнут ещё в Ф4 (у The Pyre «Мили ДД» соответствовал Брузеру, а не Убийце), поэтому разбор шёл по смыслу. Семь назначений выносились Максу как спорные (баффер во фронте, саппорт с лучом, три карточки-заготовки) — утверждены целиком, пометки сняты | accepted | 20 карточек в relics/ и enemies/ |

Отдельный случай — The Mirror: combat_class: Наследует. Копировщик берёт класс вместе с копируемой реликвией; собственного у него нет, и подставлять любой значило бы соврать про базу HP.

Разнесено: Dodge.asset · MagicalWard.asset / ArmorBreakMagical.asset (имена, id, loc-ключи, RU-тексты, файлы иконок) · новый Arcane.asset + ключ tag.arcane.name = «Аркана» · ContentEnums.cs / TagData.cs / UnitTagResolver.cs · unit-tag-glossary · 20 карточек · журнал аудита ГДД 07-26 (удалён 30.07.2026, история в git) §Дрейф. Тесты 558/558.

Арт закрыт тем же вечером: иконка Арканы — «Moebius star» (Lorc, game-icons.net, CC BY 3.0, тот же источник, что и весь набор тегов); выбрана из шести кандидатов по двум критериям — читается как арканная геометрия и держит форму в 32px, где пентаграмма и спираль слипаются. Сирота Tags/frontline.png удалена: тега под неё не было, а заводить его значило бы дать третьего владельца факту, который уже несут position и combat_class. ATTRIBUTION.txt обновлён по обоим пунктам.


2026-07-26 (ночь, 4) — форма талии акта, зоны магазина и сундука, снятие страховок

Контекст: реестр дрейфа ГДД↔код держал пункт «талия акта» — ActConfig не совпадал с обещанием ГДД (не было якоря магазина на 12, а предбоссовый привал стоял веером из трёх). Разбор упёрся не в конфиг, а в саму форму талии: Макс перевернул порядок узлов.

Решения:

#РешениеПричинаСтатусКанон
1Талия сводится в один ПРИВАЛ (этаж 7), веер из него — в три СУНДУКА (этаж 8). Порядок относительно 2026-07-20/4 перевёрнутРазвилка обязана быть выбором. Три одинаковых привала выбором не являются — узел один и тот же, отличается только положением на экране; три сундука дают разную добычу, то есть настоящее решение. Привал же самодостаточен как общая точка: это узел трат, и сводить к нему всю ширину карты осмысленноaccepted (замещает 2026-07-20/4)events-minigames §Место привалов
2Перед боссом всегда привал, и он один (этаж 13, ширина 1)Последняя точка трат перед финалом акта не может быть лотереей. Веер здесь повторял бы форму талии второй раз подряд и обесценивал её как редкое событие ритмаacceptedevents-minigames §Место привалов
3Магазин обязательным узлом акта НЕ назначается — якоря магазина перед боссом нет, он выпадает по весам зоныГарантировать нужно то, что чинит забег (траты действий на привале), а не то, что его разгоняет. Обязательный магазин перед боссом превращает золото в расписание: копи к 12-му этажу, трать там. Пусть встреча с магазином остаётся элементом маршрутаaccepted (снимает обещание из 2026-07-20/4)events-minigames §Место привалов

Продолжение того же круга — где живут магазин и сундук:

#РешениеПричинаСтатусКанон
4Магазин живёт на этажах 2–6 и 9–12. Зоны перерезаны: вход (1) · 2–4 (+магазин) · 5–6 (+элита) · 9–12Разбор таблицы спавна показал, что якоря съедали зону 5–8 целиком: магазин мог выпасть ровно на двух этажах из тринадцати, и в 60% забегов игрок не видел лавки вообще. Магазин — элемент маршрута, значит должен быть распределён по акту. Первый этаж от него свободен: акт открывается боем, а не прилавкомacceptedevents-minigames §Что где спавнится
5Сундук не имеет зонного веса НИГДЕ. Гарантирован ровно на якорном этаже 8; в прочих местах приходит только изнутри «?»Одна явная гарантия сильнее размазанной вероятности: дай сундуку вес в зонах — и якорный этаж перестанет быть событием, превратившись в «ещё один сундук, только пошире»acceptedevents-minigames §Что где спавнится
6HARD: никаких пост-правок карты после генерации. Страховка EnsureShopExists («если магазин не выпал — дорисовать») снята из кодаГарантия, спрятанная в генераторе, лжёт конфигу: в данных написано одно, на карте оказывается другое, и дизайнер правит веса, не понимая, почему они не действуют. Гарантию даёт якорь — он задан данными и виден. К тому же страховка гарантировала магазин на карте, а не на маршруте: лавка ставилась в чужую ветку, и игрок её всё равно не встречалacceptedevents-minigames, MapGenerator.cs

Разнесено: events-minigames (§Что где спавнится — новая таблица этажей; §Место привалов — текст и схема mermaid), ActConfig.asset (якоря + зоны), MapGenConfig.cs (дефолты зон и якорей), MapGenerator.cs (снята страховка), MapGeneratorTests.cs (талия перевёрнута, добавлены охраны зон магазина и якоря сундука, тесты страховки удалены — 558/558 зелёные). журнал аудита ГДД 07-26 (удалён 30.07.2026, история в git) §Дрейф — пункт закрыт. Тех-план Planning - Act Map & Run Loop не трогали: он помечен как архив замысла на 2026-07-17.


2026-07-26 (вечер) — вердикты по итогам аудита ГДД

Контекст: большой заход по актуализации всего vault (аудит 23 агентов, 239 находок; журнал работ — журнал аудита ГДД 07-26 (удалён 30.07.2026, история в git)). Часть находок упиралась не в редактуру, а в неразрешённые дизайн-развилки — они собраны списком и закрыты этим кругом.

#РешениеПричинаСтатусКанон
1Слово «Аркана» закреплено за элементом магической школы. Прежняя «система имён Арканы» для Реликвий лишается собственного термина — пишем прямо «система имён The [X]»Один термин на два несвязанных понятия нарушает правило 3. Элемент виден игроку и стоит в ряду с Огнём/Льдом/Молнией, а имя-система — внутренний жаргон авторинга, которому отдельный термин не нужен вовсе (меньше сущностей — нечему снова столкнуться)acceptedglossary, unit-relic, item, items-banners, pitch, index
2Слой 3 «Развитие гильдии» получает канон-домRun - Guild DevelopmentСлой принят 2026-07-19/3, но полтора месяца жил заглушкой «TBD»: у слоя игры должен быть адрес, иначе решения о нём оседают в питче и журнале и расходятсяacceptedguild-development, meta-progression
3Правило «Обычная реликвия = 2 навыка» снято полностью. Жёсткого числа навыков по редкости нет; редкость по-прежнему задаёт размер кита качественно (компактный / расширенный)Правило ломалось об осмысленный контент: у Bonewright пассивка-стартовый-призыв и активка-призыв — по сути одна механика в двух формах, и резать её ради счётчика вредно. Число навыков — следствие дизайна кита, а не входной лимитaccepted (снимает прежнее правило методички)unit-relic
4The Mirror: тип — Проклятая (редкость остаётся Уникальной)В поле «Тип» стояло значение оси редкости — оси перепутаны. По содержанию карточки реликвия «постепенно стирает исходную личность «Сосуда»», то есть несёт штраф носителю: это буквальное определение Проклятойacceptedthe-mirror
5Улучшения реликвий — отдельный контент-заход. Модель 6 = T1×3 + T2×3 принята 2026-07-17/1, расписана у 3 карточек из 21; дописывать остальные 108 — дизайн, а не редактураРазнести принятую модель по шаблону скрайб может, придумать 108 улучшений с тестом комбинируемости — нет. Занесено в роадмап как задача авторингаacceptedroadmap §Блок 2.6
6Пять backlog-* остаются в кластере VisionЭто банк идей подачи, питающий visual-direction и столп «Ощущение»; переезд в тех-вику оторвал бы их от столпа. Тех-детали (шейдер, пасс, стоимость на GPU) в них — справочные, канон реализации за тех-викой; оговорка добавлена в шапку каждогоacceptedпять 10-vision/backlog-*
7Папки relics/, enemies/, roster/ остаются в корне vault — канон-раскладка скилла приведена к фактуПереезд в 40-content/ ломает сотни ссылок ради стройности. Дешевле признать фактическую раскладку канонной, чем платить за симметриюacceptedскилл gdd-scribe §Структура
8Сокращение «ГД» освобождено под «геймдизайн». Роль игрока пишется словом — «Гильдмастер»«ГД» массово читается как геймдизайн (ГД-решение, ГД-документация), и мест с этим значением больше. Прежняя привязка к Гильдмастеру осталась от вырезанной боевой сущностиacceptedindex §Сокращения
9research/ явно выведен из-под правила 4 (frontmatter/статусы/EN-title не требуются, линт его не проверяет)Это архив ресёрча, а не канон: статусов готовности у него не бывает, а требование шапок породило бы работу ради архива. Исключение записано явно, чтобы не всплывало каждым аудитомacceptedскилл gdd-scribe §Карта ГДД

Разнесено: все девять — в перечисленные канон-дома в тот же заход. Заведён новый док Run - Guild Development; MOC и роадмап обновлены.


2026-07-26 (ночь, 3) — сродство = идентичность, а не резист-матрица

Контекст: аудит нашёл в коде работающую AffinityTable — множители «сродство × тип существа» (DamagePipeline), — и вопрос был вынесен как «сколько множителей в ней оставить». Макс поправил рамку: Яд / Свет / Тьма — это в первую очередь идейная часть, а не сетка резистов; существа под типы урона будут делаться потом, контентом.

Решения:

  1. Подтверждено и усилено решение 2026-07-15/35. Сродство несёт идентичность механикой — глаголом, а не коэффициентом по классу целей: Яд = DoT + негативный дебафф (2026-07-15/39), Свет = очищение + урон, часть которого лечит (/40), Тьма = большая голая мощь и ничего больше (/41). Формулировка канона прежняя и верная: «сродство должно работать против любого врага, идентичность самодостаточна, а не “повезло с типом”».
  2. AffinityTable признана преждевременной реализацией отклонённой модели и подлежит снятию. Универсальная матрица «тип → уязвимость» не добавляет идентичности — она добавляет резисты по классу целей, то есть ровно то, что 2026-07-15/35 отклонило как «ненадёжно, бинарно, состав врага не виден». Причина, всплывшая при разборе: из трёх её правил в текущем контенте работает одно — «Тьма ×1.3 по Living», потому что весь ростер Living. Тьма, которую канон описывает как «мощь и ничего больше» и балансирует редкостью, тихо получила +30% почти по всем целям. Второе правило (яд ×0 по Undead/Construct) проснётся вместе со скелетами Bonewright и обнулит ядовитый билд в узле, состав которого игрок не видит (2026-07-15/66) — прямой удар по столпу «Честность».
  3. Уязвимости и иммунитеты вернутся контентом, а не сеткой. Когда появятся существа под типы урона, «яд не берёт нежить» станет свойством конкретного врага, а не правилом для класса — это и есть «редкая специя» из 2026-07-15/35.

Правит код, не ГДД: канон-доки формулируют модель верно; расходится реализация. Снятие AffinityTable (сама таблица, вызов в DamagePipeline, четыре теста в DamagePipelineTests) — отдельный заход по коду, занесён в Meta - Roadmap и в план тех-доков.

Разнесено: stats (§Школа vs сродство — флаг заменён на вердикт), effects (§Сродства), roadmap (задача на код), реестр аудита тех-вики 07-26 (удалён 30.07.2026, история в git) §Граница с ГДД, tech/10-reference/combat-model.md §6.1 (врезка обновлена).


2026-07-26 (ночь, 2) — танк держит линию агро-автоатакой; бонус за тыл; круг вердиктов закрыт

Контекст: закрывающий круг по Позиционике — разобраны все оставшиеся пункты P1-P22.

Решения:

  1. Автоатака танка принудительно переводит фокус цели на него («агро-автоатака»). Действует на всех, кроме танков — два танка не перетягивают друг друга. Длительность 5 секунд (черновое число), затем фокус свободен. Причина: ограничение по времени заставляет танка бить повторно, чтобы удерживать линию — он работает весь бой, а не привязывает цель одним ударом навсегда.
  2. Перехват: если враг идёт мимо танка (выбрал целью союзника за его спиной), танк пытается встретить его и автоатаковать. Причина: вместе с п.1 даёт настоящую линию фронта без отклонённой зоны контроля — проход остаётся физически свободным, линию держит угроза, а не стена. Прорывающийся получает удар, агро разворачивает его на танка, прорыв срывается.
  3. Контр-игра признана по замыслу: «Скрытность» Убийцы сама по себе защищает от агро — это и есть его окно прорыва (начало боя, после убийства). Развеять скрытность и следом сагрить — валидная тактика противника, а не ошибка дизайна.
  4. Бонус за тыл — голый урон: +20% обычным юнитам, +40% фланкёрам. Вариант «снижать броню» отклонён как лишняя сложность. Причина: удвоенный бонус у фланкёра — механическая идентичность прямо в цифре, без отдельного правила.
  5. Приняты без изменений: P1-P3 (слот = угол, число слотов от размера цели, детерминированная резервация) и P14-P18 (пять правил «чтобы не бесило»).
  6. P19-P22 отложены (смыкание строя, добивание, продавливание фронта, репозиция после ульты) — по сути это не позиционика, а смежные боевые механики. Оставлены записанными.

Открытым осталось: способности и позиционика, призывы как позиционный инструмент, геометрия арены, влияние на расстановку до боя, перебивание агро двумя танками, и балансные числа.

Разнесено: Combat - Positioning (раздел «Танк: удержание линии», бонус за тыл, статусы всех пунктов) + The Verdict («Скрытность» защищает от агро) + Combat - Stats (роль Танка в таблице классов).


2026-07-26 (ночь) — вердикты по позиционике: AI-блоки, отказ от зоны контроля, кувырок Убийцы

Контекст: разбор предложений из Combat - Positioning по пунктам. Замещает два решения вечерней записи (помечены superseded там же).

Решения:

  1. Поведение — это набор переключаемых AI-блоков; класс задаёт дефолт, конкретный юнит переопределяет. Правильный вопрос про любое поведение — не «нужно ли оно», а «кому оно включено по умолчанию». Причина: снимает целый класс споров «а всем ли это подходит». Уже закрыло три частных случая: призыватель с фланкёрами, отключаемое отступление дальника, отклонённая «линия огня» как возможная уникалка одного персонажа. Ложится на существующую схему Filter/Score/Override.
  2. Слой B (зона контроля) — отклонён окончательно, проход сквозь строй свободный. Причина: возражение «без преграды обход бессмыслен» снято — обход оправдан выгодой (бонус за тыл), а не тем, что кого-то не пускают.
  3. Окружение — общая механика всех мили-классов (было: только вынужденное). Целенаправленный обход Убийцы — не отдельная механика, а AI-тактика выбора маршрута: «идти дольше, но зайти в спину и нанести больше урона». Включается, только если Убийца уже дерётся в ближнем бою и фокусит кого-то ещё. Причина: условие защищает бой один на один от вырождения в бесконечное кружение двух ботов.
  4. «Изворотливость» Убийцы получает позиционное следствие: трата заряда = кувырок + ускорение на 100% в течение 1 секунды. Направление кувырка = направление текущего намерения — от цели, если бьёт вплотную; в сторону движения, если куда-то шёл. Причина: уклонение перестаёт быть только негейтом урона и становится способом занять позицию, при этом никогда не сбивая план юнита. Детерминизм не нарушен: заряды + КД, не шанс. Отдельный сброс агро не нужен — разрыв дистанции происходит сам.
  5. Дальник: к «удержанию дистанции на подходе» добавлен ограниченный по времени побег, если милишник выбрал его целью. Причина: бэклайн медленнее всех мили-классов, так что побег заведомо проигран; ограничение по времени превращает это из глупости в читаемую панику.
  6. «Линия огня» отклонена как постоянное поведение (мелкая суета стрелков). Смежное решение: снаряды летят сквозь союзников, физической блокировки нет — вопрос закрыт полностью. Может вернуться как уникальная способность отдельного персонажа.
  7. Приняты также: поведение Поддержки (подход к раненому до каста, середина группы, укрытие за танком) и Призывателя (держится за призывами) — последнее с оговоркой «не у всех, зависит от того, кого призывает».

Разнесено: Combat - Positioning (вердикты по всем пунктам, принцип AI-блоков, новые предложения P19-P22) + карточка The Verdict (Assassin) (позиционное следствие «Изворотливости»).


2026-07-26 (вечер) — позиционика боя: слоты вокруг цели и бонус за тыл

Контекст: разбор референсов (Gladiator Guild Manager, Teamfight Manager) — бои красивые, но временами ощущаются медленными. Диагноз: дело не в скорости удара, а в плотности событий. Отсюда вышли на настоящую позиционику: «трое не должны стоять в ряд перед целью и тупо бить».

Решения:

  1. Берём в планы слой A (слоты боевого контакта по окружности цели) и слой C (бонус за фланг и тыл). Причина: слоты лечат «строй в ряд» почти без баланс-риска, а бонус за тыл даёт обходу цену — без него окружение остаётся косметикой.
  2. Слой B (зона контроля, «залипание» в ближнем бою) — рассмотрен и отложен. superseded записью «2026-07-26 (ночь)» — слой B отклонён окончательно, проход свободный.
  3. Право на обход разведено по классам: обычный мили заходит с фланга вынужденно; целенаправленно за тыл идут только фланкёры. superseded записью «2026-07-26 (ночь)» — окружение стало общей механикой всех мили, а обход Убийцы переформулирован как AI-тактика выбора маршрута.
  4. Позиционика режет общий DPS (перемещение тратит время, которое юнит не бьёт) — это свойство механики, а не баг, и его надо заложить в баланс относительно ориентира в 90 секунд.

Статус остального — proposed. Каталог поведения по классам (18 пронумерованных идей), правила «чтобы не бесило» и разрешение конфликта с кайтингом дальника вынесены в новый док на комментирование Максом — Combat - Positioning; там же сводка для вердикта и список необсуждённого (способности, снаряды, геометрия арены).

Разнесено: новый канон-дом Combat - Positioning + краткий раздел и ссылка в Combat - System.


2026-07-26 — анимация персонажей: два слоя движения, три оси переиспользования, инструмент

Контекст: Макс собрал первый костяной префаб юнита (BoneUnit_Standart) с клипом атаки и упёрся в вопросы «в чём вообще делать скелетку», «как совместить ходьбу с атакой» и «как вклинить реакцию щитом кодом, чтобы анимация её не перебила». Ресёрч инструментов + разбор реального префаба. Уточняет вектор «уходим в скелетку» (принят 2026-07-20, в ГДД не записывался).

Решения:

  1. Анимация делится на два слоя. Слой 1 — риг (клипы Animator), намеренно скучный, его работа быть дешёвым и переиспользуемым. Слой 2 — «глаголы движения» (карточный поворот в 3D, дуга выпада, отскок) кодом на корневом трансформе через LitMotion. Причина: поворот «как карточки» физически невозможен внутри 2D-скелетки, но тривиален на родительском трансформе; уникальность, вложенная в слой 2, масштабируется на весь бестиарий бесплатно и переживает смену инструмента. Следствие-правило: корень аниматор не трогает — он территория кода.
  2. Три оси переиспользования: скелет (тип существа) / набор клипов (архетип оружия) / набор спрайтов (конкретный юнит) — три независимых ассета. Имена и иерархия костей у ригов одного типа существа идентичны. Причина: цель — анимировать один раз на тип существа и оружие, а не на юнита; расхождение в одной кости обнуляет переиспользование, а ретрофит этого шва дорогой. Объём на старте — один гуманоид, 2-3 архетипа оружия.
  3. **Инструмент: остаёмся на текущей связке Transform + SpriteRenderer + Animator, 49, Spine Essential 379 за Spine Pro не за что.
  4. Смешивание анимаций — слоями Animator + AvatarMask, не кодом по костям. Ноги/корпус, руки, блок — три слоя с непересекающимися масками. Бить на ходу нужно не всем юнитам, так что слои — инструмент под часть бестиария. Причина: маски не пересекаются → слои не могут помешать друг другу.
  5. Реакция щитом = вес слоя, а не процедурный доворот кости. Поза блока рисуется руками (клип в 1-2 ключа), кодом гоняется единственный float SetLayerWeight через LitMotion. Причина: поза выглядит намеренной; работаем механикой аниматора вместо войны с ним; LateUpdate ненадёжен — если слой анимирует те же трансформы, аниматор выигрывает. Приём переиспользуется на «вздрогнул», «прицелился», «заряжает каст».
  6. Тайминг удара строится на контрасте, а не на общей скорости клипа: долгий замах с задержкой → удар в единицы кадров → удержание контакта → тяжёлый возврат. Обязательны оверлаппинг (оружие догоняет руку) и тангенсы по фазам (разгон в контакт без торможения). Причина: на первом юните удар занимал 25 кадров при плоских тангенсах и читался как вата.

Реализация отложена — тема поставлена в план, возврат позже. Разнесено в новый канон-дом Vision - Character Animation (архитектура, готчи, отвергнутые инструменты, открытые вопросы) + трек 7 и дорожная карта в Vision - Visual Direction.


2026-07-25 — модель урона: поисточниковый тип, Магическая школа, Аркана, редизайн Пастыря

Контекст: реализация тегов юнита упёрлась в то, что модель типа урона неполна и терминология «своенравничает». Всплыло при попытке вывести авто-тег DamageType: Макс заметил, что хилер вообще не бьёт тычками, а у Друида атака физическая — ядовитые только эффекты.

Решения:

  1. Тип урона задаётся ПОИСТОЧНИКОВО, а не один на юнита. Автоатака, каждая способность и каждый DoT несут свой тип; у юнита их может быть несколько. Эталон — копейщик: тычка Колющая, «Стальной вихрь» Режущий. Реализовано override-полями на AbilityData.
  2. «Стихийная» школа и броня → «Магическая». Это был наш же прошлый ренейм Magic*Elemental*; возвращаем исходный словарь, чтобы UI-зонтик тега и боевая школа звались одинаково.
  3. Добавлен элемент «Аркана» — чистая магия без стихии (гасится магической бронёй). Заведена как enum+тег; механика будет прописана позже.
  4. Яд — это сродство, а не тип урона (подтверждено карточкой яда). Убран с автоатаки Друида (осталась просто колющая); DoT спор переведён с True на Physical — правило «яд не даёт чистого урона, чип гасится бронёй по своей школе».
  5. Светлый Пастырь — редизайн (карточка). Был: автоатака лечит вместо урона. Стал: дальняя атака светом = Чистый урон (мимо брони) со сродством Свет, урон ~⅓ обычного, и лечит самого раненого союзника рядом на 100% нанесённого. Пастырь становится эталонным носителем идентичности «Света» (чистый урон + хил союзнику).
  6. Оси тега DamageType: зонтик (Physical/Magical/Pure) → конкретика (подтип/элемент) → сродство. В v1 тег собирается из статических источников; стихии из эффектов (Burn→Fire) не попадают — Combat-слой недоступен UI-слою по asmdef. Осознанный задел.

Реализация — журнал журнал рефактора модели урона (удалён 30.07.2026, история в git).

Разнесено (полный список адресатов; заведён 2026-07-26 при аудите — раньше футера не было, и это оказалось корнем сразу трёх недоразносов): Combat - Stats · Meta - Glossary · Combat - Effects · Effect - Property Reference · Effect - Burn · Effect - Stat Modifiers · Roster - Tag Reference · Roster - Unit Tag Glossary · Roster - Balance · Roster - Relic Tag Assignments · Vision - Pitch · Content - Authoring - Unit · Item - Common Items · The Shepherd · The Storm · The Paragon · The Bloom · шаблон карточки реликвии · шаблон карточки врага · Faction - Golems.


2026-07-24 — боевые классы: базовые статы от класса и 4-уровневый каскад

Контекст: подготовка к работе над тегами юнитов. Прежде тегов Макс захотел зафиксировать боевые классы как ось, задающую базовый баланс HP и скорости передвижения — чтобы числа читались с одного взгляда («все танки ≈ 3000 HP»), но при этом сохранялся живой покадровый баланс отдельных персонажей. До этого база юнита авторилась только через Override в стат-блоке реликвии поверх глобального StatsConfig (один уровень фолбэка).

Классы и стат-сетка

#РешениеПричинаСтатусКанон
1Введены боевые классы как ось юнита: Танк · Брузер · Убийца (мили-ДД) · РДД · Поддержка · Призыватель. Класс — типизированное поле юнита (не строковый тег), потому что задаёт числа (стат-профиль), а не только ярлык для UIЕдиный механический вход: класс сразу даёт читаемую базу статов и служит источником role-тега. Строковый тег хрупок для чиселacceptedstats, glossary
2База HP и скорости передвижения задаётся классом. Эталон 100% = Брузер (золотая середина): 2000 HP, MoveSpeed 3 (текущий дефолт). Остальные статы (урон, дальность, броня, размер) класс НЕ трогает — они от персоны/оружияРовно запрос Макса: «обычные значения от класса» + читаемость. Охват на старте минимальный (HP+MS), расширяем по реальной болиacceptedstats
3Мультипликаторы класса (от эталона-Брузера): Танк 150% HP / 85% MS; Брузер 100 / 100; Убийца 75% HP / 110% MS; РДД = Поддержка = Призыватель 65% HP / 75% MS. В абсолюте HP: Танк 3000 · Брузер 2000 · Убийца 1500 · бэклайн 1300Танки живучи и медленны, убийцы хрупки и быстры, бэклайн самый хрупкий и самый медленный (медленнее танка) — намеренно: бэклайн не кайтит сам, его защищает строй, позиционирование = ключacceptedstats
4Три бэклайновых класса (РДД/Поддержка/Призыватель) пока делят один стат-профиль (65/75), но остаются отдельными классами. Развести их числа позже — правка одной строки таблицыКласс несёт ещё и семантику (UI, AI-пресет, role-тег), не только два числа; 6 осмысленных ролей гибче 4 весовых категорийacceptedstats

Каскад стат-базы (4 уровня)

#РешениеПричинаСтатусКанон
5Стат-база собирается 4-уровневым каскадом: (1) StatsConfig — глобальный фолбэк → (2) классовый профиль — база от класса → (3) персона (реликвия/UnitData) — дельта героя → (4) Vessel (сосуд) — перки поверх всего. Vessel-слой в коде уже заложен (VesselData._perkModifiers, Фаза 2/4)Даёт читаемую иерархию «глобально → класс → герой → сосуд» вместо одного плоского Override-слояacceptedstats, stat-system
6Две оси сборки не смешивать. Ось базы (baseTerm): побеждает ровно один источник — последний Override сверху вниз (Класс → Персона → Vessel), поэтому Vessel-Override «всё закрывает». Ось модификаторов: Flat/Percent/PercentMult от персоны, реликвии, Vessel-перков и рантайм-баффов копятся и перемножаются поверх базы (Vessel {PercentMult} = ×множитель поверх всего)Разводит «диктовать абсолют» (Override) и «умножить поверх» (PercentMult) — обе семантики уже в формуле (base+ΣFlat)×(1+ΣPercentAdd)×Π(1+PercentMult). Фабрика скармливает группы в порядке каскада, чтобы «последний Override побеждает» отработал в пользу Vesselacceptedstats, stat-system
7Role-тег юнита авто-выводится из класса (как авто-теги из школы урона), дизайнер класс ставит один разЕдиный источник правды: и база статов, и role-ярлык в UI следуют за классом, не расходятсяaccepted (связка с грядущей системой тегов)stats, tag-reference

Правит доки: stats (новый раздел «Классы и базовый баланс» + каскад); glossary (термины классов RU|EN). Тех-флаг (ведёт tech-scribe, не здесь): каскад требует правки Stats.cs (baseTerm = Override ?? classProfile ?? StatsConfig) и порядка групп в RuntimeUnitFactory; новый enum UnitClass + классовый профиль-SO — записать в stat-system при реализации.

Оси врага: фракция-пул, вид, подвид (стат-слои)

Контекст: раскатывая классы на врагов, разобрали, из чего у врага собираются статы. Всплыла коллизия термина «фракция»: канон звал так «пакет вида» (Гоблины) с подфракциями (Северные/Степные), а по игровой модели фракция — это пул генерации волн (в «шайке» могут мешаться гоблины, волки и наёмники-бандиты). Развели оси.

#РешениеПричинаСтатусКанон
8«Фракция» переопределена: это ПУЛ генерации — набор возможных юнитов и столкновений для волн, может мешать разные виды (шайка бандитов = бандиты + гоблины-наёмники + волки). Организационная ось, в стат-сборке НЕ участвуетФракция — про то, «из кого собирается волна», а не про статы одного юнита. Прежнее «фракция = пакет вида» замещеноaccepted (замещает прежнее определение фракции)index, glossary
9Введён «Вид» — стат-скейл-слой (Гоблины, Звери, Големы): множители поверх классовой базы (Гоблины ×0.4 HP, ×1.1 скорость). То, что канон раньше звал faction в карточках. Подвид (Северные/Степные гоблины) — малые модификаторы поверх вида (бывш. subfaction)Единая шкала: «гоблин = 40% героя того же класса» вместо рандомных чисел. Вид/подвид наследуются вниз, флэт правится в одном местеacceptedstats, index, glossary
10Стат-каскад врага (5 уровней): StatsConfigКласс (база HP/MS) → Вид (скейл) → Подвид (скейл) → Юнит EnemyData (флэт). Механика — те же группы модификаторов, что классовый каскад (Override-база + перемножаемые Percent). У героя параллельно: StatsConfig → Класс → Реликвия → СосудОси ортогональны, переиспользуют готовую сборку; носитель подставляет свои слои (враг — вид/подвид, герой — сосуд). Не новая механика, а данныеacceptedstats, stat-system
11CreatureType (Живое/Зверь/Нежить) остаётся отдельной осью сродств, НЕ смешивается с Видом. Вид «Звери» и creature_type: Зверь могут совпадать по имени, но одно про скейлы/идентичность пакета, другое — про сродства (редкая специя, решено 2026-07-15)Не схлопывать разные назначения в один тег: скейл-слой ≠ гейт сродстваacceptedstats, tag-reference
12Реализуем сейчас: Класс + Вид + флэт юнита. Подвид — задел структуры (Северные/Степные пока только ГДД-draft, наполним когда войдут в игру)Не строить пустой слой раньше контента; механика подвида = тот же скейл-слой, добавится даннымиacceptedstats

Правит доки: index (фракция=пул; каталог = виды; подвиды); glossary (Фракция-пул / Вид / Подвид / Класс); stats (стат-каскад врага); tag-reference (поля species/subspecies). Долг миграции карточек — ЗАКРЫТ 2026-07-26: YAML factionspecies, subfactionsubspecies в 13 карточках врагов и 4 доках видов; тела карточек переведены на «Вид / Подвид»; папка factions/species/ (ссылки перенесены, чекер зелёный); методичка противника и шаблон карточки приведены к трём осям (Вид / Подвид / Фракция-пул). Поле faction освобождено под будущие доки фракций-пулов.

Доп-теги юнита: 4 оси для «быстрого чтения»

Контекст: система тегов «кто что умеет» на карточке юнита. Собран глоссарий unit-tag-glossary (интервью с Максом, EN-нейминг, порядок осей). Оси ложатся на код-enum TagCategory { Role, DamageType, Playstyle, Mechanic }.

#РешениеПричинаСтатусКанон
134 оси тегов, порядок показа Role → DamageType → Playstyle → Mechanic («кто → чем бьёт → зачем нужен → чем именно»). Role — авто из класса, DamageType — авто из DamageSchool/Affinity, Playstyle («на что играет») и Mechanic («что умеет») — ручныеРазвести «что умеет» и «против кого» (аналог Dota-ролей) — разные вопросы читателю; авто-оси не дублировать руками (не рассинхронятся)acceptedunit-tag-glossary
14EN — оригинал имени тега, RU в скобках (HARD EN-канон). id tag.<en_snake>Термины проекта — по-английски; консистентность с id/locacceptedunit-tag-glossary
15DamageType двухуровневый: зонтик (Physical/Magical/Pure) + конкретика… «Magical» = читаемый зонтик над стихией+сродствами (отдельной школы «магия» нет; броня — Physical + Elemental)Не плодить несуществующую «маг-школу»/«маг-броню»superseded2026-07-25/2
15аДействующая редакция: двухуровневость сохранена, но Magicalполноценная школа И броня, а не только читаемый зонтик. Элементы: Огонь / Лёд / Молния / Аркана. Брони две: Физическая и Магическая (+ Чистый мимо брони)Запрет «маг-школы» из №15 отменён решением 2026-07-25/2: UI-зонтик тега и боевая школа должны зваться одинаковоacceptedstats, unit-tag-glossary
16Составные оси (Control/AOE) — пока только зонтик, конкретику (Stun/Slow/…, AOE-damage/…) добавим позже. Antimagic/Antiphysical как «бьёт магов» отклонены в пользу Ward. Нейминг: стойкость = Elemental Ward; пробитие = Armor Break: Elementalчитать Magical Ward / Armor Break: MagicalКомпактность сейчас, задел на детализацию. Часть про Elemental superseded решением 2026-07-25/2 (ренейм Elemental → Magical): брони с именем Elemental больше нет, тег указывал бы в никудаaccepted (нейминг частично superseded)unit-tag-glossary
17Не берём в теги: Line/Beam (это форма атаки AreaShape, не ярлык), Zones (ждём готовности системы зон). Hybrid/Copycat из старого roles → в Playstyle (это стиль, не весовой класс). Disengage (контринициатор) — берём сразу как заделНе выносить в «быстрое чтение» то, что уже в данных или ещё не готово; развести класс и стильacceptedunit-tag-glossary

Правит доки: новый unit-tag-glossary (полный глоссарий, needs_review); tag-reference (ссылка на глоссарий; roles → весовой класс из UnitClass, функции переехали в Playstyle/Mechanic). Реализация (следующий шаг): TagData-ассеты домена tag.*, авто-теги Role/DamageType из данных, ручная простановка Playstyle/Mechanic реликвиям.


2026-07-20 — привал на карте акта и правило недоступных кнопок

Контекст: продолжение оверхола карты акта. Появился новый тип узла — Привал — и вместе с ним первое общее правило подачи недоступных действий в интерфейсе.

Привал (Camp)

#РешениеПричинаСтатусКанон
1Новый тип узла карты — «Привал»: отряд привозит 8 действий, каждая трата стоит 2 (то есть ровно четыре траты), варианты выбираются повторяемо, пока бюджет не кончится или отряд не уйдёт самОтличает привал от текстового события: там выбор один и он же выход, здесь узел — это маленькая экономика, а «уйти» — отдельное решениеacceptedevents-minigames
2Список трат привала (пока без эффектов): Усилиться · Получить копию реликвии · Снять негативное последствие · Нанять сосуда (или заменить старого) · Пройти мимоКаркас узла ставится раньше механик: узел уже стоит на карте и читается в ритме акта, а эффекты навешиваются по мере готовности самих системacceptedevents-minigames
3«Пройти мимо» бесплатно и доступно всегда, в том числе с пустым бюджетомУзел не должен запирать игрока: выход — это решение, а не награда за остаток действийacceptedevents-minigames
4Талия акта: широкая середина сходится в один сундук (этаж 7), из него веер в три привала (этаж 8), дальше акт снова расходится по зонам. Перед боссом — та же пара: магазин (12) и привал (13). Глубина акта 14 → 15 колонокРитмическая пауза: карта на секунду перестаёт быть выбором и становится общей точкой, а следующий шаг — осмысленной развилкой из трёх. Привал перед боссом — последняя возможность потратить действияsuperseded 2026-07-26/4 (форма талии перевёрнута, магазин-якорь снят; сама идея талии и 15 колонок в силе)events-minigames

UI-фидбэк: недоступные кнопки

#РешениеПричинаСтатусКанон
5HARD: недоступная кнопка гаснет ТЕКСТОМ, но остаётся живой — hover и нажатие отрабатывают как обычно, клик просто ничего не делает. Правило общее, распространяется на все disabled-состояния кнопок в игре, не только на привалМёртвая кнопка читается как сломанный экран: игрок не понимает, не работает ли игра. Гашения подписи достаточно, чтобы сообщить «сейчас нельзя», а сохранённый отклик подтверждает, что интерфейс жив и его понялиacceptedui-feedback

2026-07-19 — переработка концепции: роли, слои, столпы, тон, имя

Контекст: сессия по обновлению концепции после её сильного сдвига + поиск официального имени игры. Собран сводный питч-срез pitch (кластер vision), из которого решения расходятся по главам. Формулировки в питче — полнее; здесь — журнальная фиксация с причинами.

Ролевая рамка

#РешениеПричинаСтатусКанон
1Игроки = «Гильдмастеры» — совместное руководство ОДНОЙ гильдией (кооп = комитет мастеров), а не «каждый ведёт свой отряд»Сдвиг на коллективное руководство; освобождённый термин (см. №2) возвращён игрокуacceptedpitch §3, guildmaster, glossary
2Боевая сущность (стартнабор + гильдие-бонусы + стиль) переименована «Гильдмастер» → «Капитан». Берётся в забег; влияет на бой пассивно (подготовка), не на поле, без ввода в боюРазвести игрока и боевую сущность (обе прежде звались «Гильдмастер»); это и освободило слово для игрока (№1). Столп «Честность» целacceptedguildmaster, glossary, pitch §3

Слои и цель

#РешениеПричинаСтатусКанон
3Игра = три слоя: Бой / Забег / Развитие гильдии (мета между забегами: метапрогрессия + истории о забегах)Явно выделить дом-слой поверх забега. Слой 3 опирается на решения 24–31 (переносятся люди+летопись, не мощь); свой канон-файл — TBDacceptedpitch §5/§9, meta-progression
4Кампании под единым каркасом (гильдия растёт/ищет славы); Чемпионат — одна из кампаний, не единственная рамка (война, покорение вершины…)Расширяемость целей забега без переписывания рамкиacceptedpitch §1/§11, concept, lore

Столпы

#РешениеПричинаСтатусКанон
5Столп 3 переформулирован: «Сосуды — живые личности» → «Нарратив рождается сам» (забег = машина историй, Dwarf Fortress-подход; Сосуды = линза нарратива)Акцент шире привязанности к героям — на системный сторителлинг (досье, реплики, летопись, кооп-хаос). Заменяет прежнюю формулировкуaccepted (заменяет прежний столп 3)pillars, vision, pitch §4
6Добавлен столп 5: «Ощущение важнее верности пикселю» — джус (SFX/VFX/gamefeel/свет) как приоритет дизайнаПодача — основа замысла; стилизованный пиксель-арт должен ощущаться технически богатоacceptedpillars, vision, pitch §4

Тон

#РешениеПричинаСтатусКанон
7Обман ожиданий как тональная ось: игра начинается доброй забавной кооп-игрушкой и исподволь темнеет (светлое → мрачное). Порядок нерушим: сперва искренняя лёгкая рамка, потом сломЗапоминаемость, уникальность, кооп-со-переживание. Глубина мрака и судьба мета-слоя «мир-как-конструкт» — TBD (отдельная сессия)accepted (вектор); глубина TBDpitch §11, lore, open-forks

Кооп

#РешениеПричинаСтатусКанон
8Кооп = свобода и дружеский хаос: игроки могут брать чужие Реликвии, вмешиваться, прикалываться; порядок — их социальный контракт, не ограничение игры; при спорах — мини-игры-арбитры (кубик при голосовании)Свобода генерит истории (столп 3) и усиливает кооп-ДНК; порядок как выбор, а не рельсыacceptedpitch §10, Coop - Overview

Название и стор

#РешениеПричинаСтатусКанон
9Рабочее имя игры — «Happy Guildmasters». Вырезано «Little»Милота-с-двойным-дном (фанни→мрак) + называет роль игрока. «HAPPY LITTLE» — товарный знак Bob Ross Inc. (family of marks, активно защищается, бренд теперь и в играх); «Happy» одно из family выходит. Проверено чисто: Steam / домен / соцсети / ТЗ. Осталась формальная TESS-проверка человекомaccepted (рабочее)pitch §заголовок/§13
10Store-позиционирование: имя держим чистым; жанр — в short description (вариант B) и тегах (ядро: Auto Battler / Roguelike / Co-op)Практика Steam: жанр несут теги и short description, а не подзаголовок в имени (реф: Peglin)acceptedpitch §13

Правит доки: pitch (новый сводный срез, кластер vision); разнос — guildmaster (сущность→Капитан, Гильдмастер=игрок), glossary (Капитан; переопределение Гильдмастера), pillars (столп 3 + новый 5), vision/concept (рамка, слои, кампании, тон), lore (кампании + обман ожиданий), meta-progression (связь со Слоем 3), open-forks («мир-как-конструкт»/«шёпот толпы» — кандидаты в носители тон-разворота).


2026-07-17 — модель улучшений реликвий

Контекст: разбор существующих наборов улучшений (Шаг 6 карточек) на честность и комбинируемость. Оформлена методичка Улучшения реликвий и папка методичек авторинга контента.

Модель улучшений

#РешениеПричинаСтатусКанон
1Модель улучшений реликвии: 6 = Tier 1 ×3 + Tier 2 ×3, спроектированы под комбинирование (свободный набор), а НЕ «выбрать 1 путь из 3». Направления игроку не называют и не запираютБольше агентности и реиграбельности вглубь: игрок комбинирует сам, «направления» — интенция дизайнера, не рельсы (Принцип 1: выбор даёт направление, не готовую силу)acceptedrelic-upgrades
2Одиночка-улучшение легитимна — не обязана иметь пару seed→payoff. Одиночка = намеренный уник под специфику / смену роли / рычаг балансаНе всякая идея раскладывается на пару; смена роли («меняет всё», напр. мили→дальник) осознанно уводит реликвию из ядра — это фича, а не сиротаacceptedrelic-upgrades
3Тест комбинируемости — не тянуть реликвию в случайно взаимоисключающие режимы (кроме осознанной смены роли одиночкой). Каждое улучшение видно в бою (не только цифра)Комбинируемость — свойство дизайна, отдельное от баланса копий; чистый «+X%» невидим в автобою (Принцип 6 — менеджмент должен чувствоваться)acceptedrelic-upgrades

Разносы в карточки

#РешениеПричинаСтатусКанон
4Bonewright «Марш мёртвых» переопределён: +3% урона союзникам за каждого павшего союзного юнита; +10%, если павший — носитель Реликвии (Сосуд, не скелет; сам Некромант не в счёт)Тематичнее (некромантия питается смертью, не толпой живых) + снимает баланс-флаг взрывного стака от числа живых скелетовsuperseded → №6the-bonewright
5Pyre получает ресурс мана; «Воспламенение» — активный навык (каст за ману), добавлен AI-блок D (условие каста)«Воспламенение» — активка (решение Макса); чинит мёртвый ману-текст в улучшении «Легендарное Воспламенение» (T2.6) на прежде безманном юнитеacceptedthe-pyre
6Bonewright «Марш мёртвых» (финал): +3% урона союзникам за каждое союзное существо типа Нежить (скелеты; сам Некромант — Живое, не в счёт). Заменяет №4; вариант «за павших» сохранён как parked-идея в карточкеТема — сбор пачки нежити (синергия саммон-билда и союзных реликвий-нежить), а не учёт павших. №4 был моим неверным прочтением реплики Макса. Тип Нежить уже канон в tag-referenceacceptedthe-bonewright

Правит доки: новые методичка и индекс авторинга; карточки Bonewright (+ creature_type: Живое, parked-идея) и Pyre; relics-overview (§Прогрессия — ссылка на методичку). Тех-задел «блочная модель AI под улучшения» записан в [[tech/40-planning/roadmap|Planning

  • Roadmap §Открытые решения]] (post-festival).

Модель авторинга эффектов

Контекст: методичка эффектов и разбивка пула на страницы (сверено с индустрией — StS держит простые статусы списком, PoE документирует крупные ailments детально). Оформлены методичка, шаблон и прототип-карточки.

#РешениеПричинаСтатусКанон
7Эффекты в доках расслаиваются: тяжёлые/уникальные — отдельные карточки, простые — сборники (стат-моды, CC-примитивы, комбо-правила, теги-состояния). Критерий карточки: уникальное правило / несколько под-механик / комбо-хукПул разнокалиберный; StS/PoE делят так же. Не плодим тощие страницыacceptedeffect
8Тех-поля эффекта — это ГД-инфа (класс, полярность, теги, стак-правило, тир клинза, тип компонентов), прописываются явно в карточкеЭффект ими определяется; для ГД это дизайн-параметр, не реализация (реш. Макса)acceptedeffect
9Producer/consumer НЕ ведём в ГД-доках — выводится движком (накладыватель = у кого компонент; потребитель = reactive на тег)Ручной реестр носителей рассинхронится и грузит поддержку; движок знает точнее (реш. Макса)acceptedeffect
10Формат карточки эффекта — свойства-блок в теле + проза, без шагов и без Obsidian Bases. Классификация (класс/полярность/теги/стакинг/снятие/школа) — читаемым блоком вверху тела со ссылками на справочник свойств property-reference (аналог ai-settings-model); frontmatter минимальный (title/order/status), порядок в папке — через order. Числа-ориентиры в тексте, финальный баланс — в Unity. Имя по EN-канону, id в ассете. Общий glossary дополнен боевыми терминамиBases неудобен и не используется (реш. Макса); свойства-блок читается и кликается; single-source значений в справочнике; порядок — по order (скилл)acceptedeffect

Правит доки: методичка эффектов + шаблон template-effect-card + справочник свойств property-reference; каталог авторинга; общий глоссарий (боевые термины). Пул распилен — 12 карточек (poison / burn / bleed / sleep / charm / frenzy / displace / shield / heal / cleanse / stealth / mark) + 5 сборников (cc-primitives / stat-modifiers / triggers / combo-rules / state-tags); effects → индекс-MOC (status: living).

Методичка предметов + распил items/banners

Контекст: методичка авторинга Vessel-предметов и разбивка каталога. Знамёна (Party) Макс пересматривает — методичка их не покрывает.

#РешениеПричинаСтатусКанон
11Методичка предметов — только Vessel-скоуп. Предмет = навесное поверх Реликвии (3 слота); формат как карточки эффектов (свойства-блок + проза, карточка/сборник). Знамёна (Party) — отдельно, в пересмотреПредметы разнокалиберны как эффекты; единый стиль карточек контента; Знамёна Макс перекроитaccepteditem
12Теги предмета: Усиливающий / Пассивный / Активный / Зачаровывающий (не жёсткие классы — предмет несёт несколько). «Зачаровывающий» вместо «Уникальный» — снять коллизию с редкостью «Уникальная»Теги — гибкие оси описания; коллизия имён устранена (реш. Макса по неймингу)accepteditem
13Триггер-условие — ключевое свойство активного предмета (авто-триггер, не клик; раз/бой). Предмет ссылается на эффекты/статы, не переописываетБой автономен (№1); предмет = слот + триггер + носитель, не дубль эффектаaccepteditem

Правит доки: методичка item; распил — предметы в items/ (карточка fey-cloak + сборник common-items), Знамёна в banners (в пересмотре), items-banners → обзор-MOC; каталог авторинга.


2026-07-16 — дизайн-столпы и vision

Контекст: заведение «ростовых» артефактов ГД под контур скилла gdd-scribe — явные дизайн-столпы и vision-одностраничник, вытянутые из ранее принятых решений.

Видение

#РешениеПричинаСтатусКанон
1Приняты 4 дизайн-столпа: Честность · Глубина · «Сосуды» — живые личности · Гильдия — домНужен явный фильтр фич и общий язык о сути игрыsuperseded2026-07-19/5-6: столп 3 переформулирован в «Нарратив рождается сам», добавлен столп 5 «Ощущение важнее верности пикселю». Столпов пятьpillars
2«Читаемый автобой без микро» — формат/медиум, не столпЧитаемость обслуживает столп «Честность»; отсутствие микро — жанровый выбор, а не тест на принадлежность фичacceptedvision

2026-07-15 — сессия «скилл, рандом и глубина в PVE-автобаттлере»

Контекст: разбор страха «автобаттлер = мало скилла, много рандома, ощущается нечестно». Проведён ресерч 14 PVE-автобаттлеров (00. Сводка и выводы) и ресерч теории рандома (randomness-appendix).

Статусы этой сессии

Таблицы 2026-07-15 писались до введения колонок «Статус» и «Канон». Все решения сессии (1–72) — accepted, кроме явно помеченных superseded внутри строк. Нумерация сквозная по всей сессии, ссылаться — как 2026-07-15/№.

Бой

#РешениеПричина
1Бой остаётся полностью автономным. Ввода игрока во время боя нет — ни микро, ни «полумикро»Ни одна из 14 разобранных игр не провалилась из-за отсутствия микро. Три команды с той же жалобой («нет глубины») ответили предбоевыми рычагами, а не микроконтролем. Legionbound имеет спеллы и перестановку в бою — и всё равно получил «alt tab simulator»: кнопки в бою сами по себе агентности не создают
2Заклинания Гильдмастера вырезаны (в легаси)Механика разваливается при оптимизации: в Mage and Monsters игроки на ускорении сами перестают кастовать и просят автокаст; автор за 2.5 года не усилил её, а ослабил. В коопе — «один кастует, трое смотрят»
3Умный и читаемый AI — приоритет уровня gamefeel и красоты боя, а не полировкаВ игре без контроля ошибка AI переживается не как своя ошибка, а как кража победы — и починить её игроку нечем (главная жалоба ветеранов Gladiator Guild Manager). Это основа ГД-баланса
4Перезапуск боя — тот же самый бой. Те же враги, та же расстановка, те же эффекты; меняется только подготовка игрока. Перезапуск платныйИначе ломается петля обучения: игрок не отличит «моя перестановка сработала» от «повезло с другим раскладом», и любое поражение спишется на рандом

Многофазовые сражения (новое, 2026-07-15)

#РешениеПричина
5Многофазовые сражения — вводим. Один энкаунтер = несколько последовательных битвДаёт драматургию и плотность решений. Между фазами есть окно подготовки — это законный способ вернуть решения внутрь сражения, не ломая автономность боя, детерминизм и кооп
6Только для элит, боссов и ивентов. Обычный бой на карте — всегда одна фазаУникальный формат должен быть событием. В каждом третьем бою он станет рутиной
7Урон между фазами НЕ переносится. ЖелезноРешение Макса
8Награда за фазу может быть не предметом, а снижением сложности следующей фазыПревращает бой в экономику внутри боя: рискнуть сейчас, чтобы стало легче потом
9Провал фазы — это провал фазы. Он наказывается и может привести к поражению в дальнейшемУсловие должно чего-то стоить, иначе оно декоративно
10При провале условия фазы игра предлагает переиграть. Штрафы — как при обычном перезапуске после поражения (или чуть мягче)Игрок не остаётся в тупике, но второй шанс не бесплатен
11Перезапуск многофазного боя — на выбор игрока: с текущей фазы или с начала бояГибкость; выбор сам по себе является решением
12Текстовые ивенты между фазами боя — можно и нужно«Мегахайп» и уникально: ни у одной из 14 разобранных игр такого нет. Даёт нарратив прямо посреди сражения

Цели боя (типы битв)

#РешениеПричина
13Уникальные цели боя — только в элитках, боссах и ивентах. Обычный бой = всегда «победить»Уникальная цель должна быть событием. Обычные бои варьируются испытаниями, а не целями
14Нужна третья сторона в бою (союзники) И режим «все против всех»Резко увеличивает разнообразие задач; реализация не запредельная
15Провал уникальной цели = победа без бонусов или со штрафами (последствия: «герои плохо себя чувствуют, что не спасли мирных»). Номинально это победа, забег от этого не проигрываетсяУникальная цель — это сделка, а не ловушка. У боссов расклад может быть иным
16Уникальное событие → уникальная награда (не «больше золота», а другой класс награды)Текстовые ивенты и особые бои должны быть запоминающимися; игрок может и не выбрать такой бой — значит выбор должен окупаться

Мета-прогрессия и экономика

#РешениеПричина
17Мета-прогрессия между забегами — будет 100%Её снятие уронило Mage and Monsters 2 с 89% до 83% отзывов. Требует отдельного ресерча
18Рероллы и баны реликвий/предметов — будут (в мета-прогрессии, по мере роста контента)Контроль рандома игроком — главный рычаг против ощущения «решает рандом». Покрывает идею Seal из Time Walker
19Объём менеджмента — оптимален. Не резать и сильно не добавлятьСлоёв уже больше, чем у разобранных игр. Главное — чтобы менеджмент чувствовался, а не был для галочки

Режимы

#РешениеПричина
20Режим пазлов/испытаний (детерминированные бои-головоломки) — будетПрямой ответ на «где скилл в PVE без оппонента». Despot’s Game выпустил ровно такой DLC. У нас уже есть детерминизм и BattlePresetData(Fixed) — стоит почти ничего
21Ежедневные испытания (как в Slay the Spire) — будутДёшево, добавляет разнообразия. Не главный акцент

Информация и читаемость

#РешениеПричина
22На узле карты видна только фракция противников и сложность боя. Точный состав врага — нет. Уточнено 2026-07-15/66: на узле — только сложность, фракция приходит тултипом при наведенииПолное превью врага → подгонка контрпика вместо плана. (Оговорка: Legion TD 2 фиксирует волны полностью и продаёт это как фичу)
23Пресеты формаций — делаемРучная расстановка каждый бой = массовая жалоба на душноту (вплоть до туннельного синдрома в отзывах Gladiator Guild Manager). У нас расстановка свободная — цена ручного труда ещё выше

2026-07-15 (вечер) — структурная рамка гильдии (Блок 0)

Контекст: разбор развилки «основной геймплей — забег или развитие гильдии» (Meta - Roadmap Блок 0). Выбран промежуточный вариант: гильдия — дом и хаб, но БЕЗ силовой меты в духе Darkest Dungeon / XCOM.

#РешениеПричина
24Гильдия = дом и хаб прокачки; забег = ядро и единственный «серьёзный» режим. Прочие активности (испытания, пазлы, дейлики, новые сложности) — способ наградить уникальностью через мету, а НЕ конкурирующие режимы. Внимание игрока не растягиваем на другие режимыМодель Hades: богатый дом поднимает рогалик, не понижая забег до соседа мини-игр. «Забег — одна из активностей» — слабая версия, размывает фокус
25Между забегами переносятся только ЛЮДИ и их летопись. Мощь/уровни НЕ переносятся (не Darkest Dungeon, не XCOM)Сохраняет баланс забег-к-забегу и принцип «дефицит = глубина» (см. Принцип 3). Даёт эмоциональную преемственность без силовой инфляции
26Ростер = прегены (готовые герои, открываются метой, берутся как «Сосуд») + «Сосуды», созданные игроком (косметика/имя/досье; механика по-прежнему из Реликвии и драфт-перков)Прегены дают кураторскую уникальность и цель для меты; игрок-Сосуды — привязанность. Механику игрок НЕ задаёт (иначе имба + реоткрытие баланса)
27Прогрессивный ревил прегена: играя им, открываешь его уникальную Судьбу + новые перки. (Уточнено 2026-07-27/17: Судьба стала квестом внутри забега, поэтому ревил раскрывает перки и досье — сам принцип «играя, открываешь опции» в силе.) Открытие = новые ОПЦИИ (Судьба доступна к выбору, перки входят в драфт-пул), НЕ флэт-бафф к базе. Гейт — веха с героем, не обязательная победаВовлечение (причина играть разными) без силовой меты. «Прокачанный герой сильнее свежего» = мягкая силовая прогрессия между забегами, которую решение 25 отвергает
28Уникальность прегена ложится на существующую Судьбу (+ перки), НЕ на новый слой и НЕ на раздутый китsuperseded 2026-07-27/16: Судьба уехала в забег как квест (2026-07-27/17) и уникальность нести больше не может; теперь она на авторских перках и написанном досье. Запрет на новый слой и раздутый кит остаётся в силеДержим шов «Сосуд пустой, кит в Реликвии». Киточный «уник-трейт» обесценил бы Реликвию как носитель кита
29Последствия — СТРОГО механика в границах забега. Бафф/дебафф на весь забег (от мелкой радости до вывихнутой ноги и тяжёлого проклятия). Снятие: часть за деньги (узел «Лечение»), часть проходит через N событий. В конце забега испаряются без следа. Героями НЕ запоминаются, в летопись НЕ пишутсяИначе Последствия протекут между забегами → возврат в силовую мету через заднюю дверь. Разделение чистое: болячка — расходник забега, память — отдельно
30Летопись «Сосуда» кормится боевыми ПОДВИГАМИ, не Последствиями. Триггеры: трипл-килл, личный рекорд по стату (щит/хил/урон), победа вопреки невзгодам. Запись = подвиг + конкретное число + «кем был тогда» (роль/Реликвия). Барки цитируют число, но триггер «памятного» — относительная значимость (рекорд / редкий порог), не абсолютСистемный сторителлинг («МОЯ история», как в RimWorld / Battle Brothers): реальное число + реальная значимость цепляет. Число без значимости = хвастовство ерундой (при скейле ×10 абсолют обманчив)
31Мета-открытия РАСШИРЯЮТ пул вширь (новые стили, паритет по силе со стартовыми), НЕ поднимают потолок мощиИначе анлок = обязательный грайнд, новичок слаб — анти-паттерн «мета раздаёт мощь» и нарушение доктрины честности (GDD-13)

Правит доки: Run - Injuries & Mettle (граница конца забега, Последствия не кормят нарратив), Run - Procedural Lore (летопись = подвиги; досье НЕ отражает Последствия), Meta - Glossary (термины «Летопись», «Прегены»). Остаток (валюта анлока, темп открытий, дерево прегенов) — в Meta - Roadmap, Блок 1 (мета-прогрессия).


2026-07-15 (вечер) — система эффектов, каталог

Контекст: проработка «где живёт глубина» → система эффектов как база для дизайна героев. Оформлен каталог effects.

#РешениеПричина
32Принцип эффектов: эффект = глагол, синергия = producer → consumer. У каждого статуса есть накладыватели и потребители; герой определяется стороной статусаЯдро глубины драфта и интеграции героев. Урон-число вторично, идентичность несёт статус
33Кровотечение (Bleed) — новый статус: физический DoT под физической бронёйДаёт физ-билдам свой путь «урона во времени»; контрится бронёй. Близнец яда на другой оси
34Лёд — НЕ новый эффект. Накладывает обычные Замедление/Обездвиживание/Оглушение с источником-тегом «лёд» (для интеграций ледяных героев)Не плодим примитивы; тег достаточно для синергий
35Тип существа как ГЛАВНЫЙ гейт сродств — отклонён (ненадёжно, бинарно, состав врага не виден). Остаётся редкой специей (отдельный враг устойчив/уязвим)Сродство должно работать против любого врага; идентичность самодостаточна, а не «повезло с типом»
36Добавлены CC: Сон (стан, спадает при уроне), Очарование (временно за другую команду), Ярость (бьёт ближайшего любой команды)Расширяют палитру контроля; читаемы
37Слепота (промах каждую X-ю атаку) и Меткость (крит + 100%-хит каждую X-ю) — детерминированно, не шансом. Меткость = билд на урон И контра слепотеДержит детерминизм боя; «крит/промах» без рандома
38Стаки и длительность сосуществуют — не конфликт. Длительность стака крутят «эффективности», число стаков — независимая осьСнят ложный вопрос

Идентичность сродств (подтверждено 2026-07-15)

#РешениеПричина
39Яд = ВСЕГДА DoT + негативный дебафф (анти-хил / −дальность / −атака / …). Акцент варьируется по герою (DoT / детонация-на-пороге / ослабление), но связка постоянна«Швейцарский нож порчи»: DoT — константа идентичности, дебафф — переменная. Сюда сворачивается grievous-wounds
40Свет = очищение (снятие эффектов: срыв баффов врага / чистка своих) + добротный урон, часть которого лечит союзникаНаступательный саппорт + анти-бафф
41Тьма = большой чистый урон и ничего больше. Намеренная подрывка «у каждого элемента глагол»: особенность в отсутствии особенностей. Простой, мощный, желанныйЛомаем шаблон осознанно; вожделенный «нюк без условий». Баланс — редкость + одномерность (мощь ценой утилиты = выбор, не апгрейд)
42Свет и Тьма — самые редкие сродства (яд доступнее)Мощь/простота Тьмы и утилита Света уравновешены редкостью
43У яда нет своей брони: школу DoT задаёт конкретный яд (физ/стих, редко True). Яд — статус-форма «DoT+дебафф», не отдельный канал урона. Контра — очистка (+ броня по школе DoT)Яд не должен быть «чистым уроном»; переменная школа = синергия-хук (физ-яд ↔ shred, стих-яд ↔ проникновение), не бага
44Свет и Тьма — оба бьют True (мимо брони), потому оба самые редкие. Свет вкладывает «чистоту» в очищение + хил, Тьма — в мощь урона (условия/комбо вторичны). Яд — по обычной школе (гасится бронёй)Армор-байпас = премиум, потому у двух самых редких сродств; массовый яд остаётся гасимым бронёй
45Зоны (наземные стойкие эффекты) — вводим. Стойкие области на арене (от способностей или самой арены): юнит внутри получает эффект/тег зоны (горит / мёрзнет / травится / электризуется / хил / усиление). Даёт расстановке и позиционированию ещё один рычаг. Детали (форма, стойкость, комбо зон) — TBD, проектируется вместе с кросс-элементамиКросс-эффекты + читаемая пространственная глубина без грид-симуляции поверхностей DOS2

Теги-состояния и первые комбо (2026-07-15)

#РешениеПричина
46Комбо строятся на тегах-состояниях (Мокрый / Наэлектризованный / Подожжённый / Обмороженный) — маркер «юнит сейчас/недавно под стихией». Наэлектризованный = получил молнию за 2–3 сек; Подожжённый = под DoT огня; Обмороженный = под CC льда; Мокрый = под состоянием «мокрый»Простые состояния-флаги — «валюта комбинаций»; консюмер проверяет тег и даёт бонус
47Раскол: физ-удар, снявший ≥15% макс HP цели, по замороженной → доп. 15% макс HP чистым (True) + снимает заморозку; не чаще раза в 5 сек на цельГейт «15% одной атакой» = сам балансир; по жирному почти недостижимо
48Мокрый = +25% урона от молнии. Огонь снимает Мокрый и Обмороженный (сам поджог в этот удар не накладывается)Простые читаемые взаимодействия; огонь = анти-контрслой
49Босс = комбинация юнитов, а не один HP-мешок%maxHP-эффекты естественно ограничены (по компоненту); AoE-комбо по кластеру, наоборот, эффективны

Рефайны эффектов и комбо (2026-07-15)

#РешениеПричина
50Поджог = 5-сек DoT, обновляется (сам DoT не стакается), стабильный X. Отдельный эффект «Угли»: каждый урон огнём +1 стак, +1% урона огнём/стак; длится 5с, новый уголёк обновляет все стаки строго до 5с и сбрасывает ускорение; без подпитки сходят по одному с ускорением (до 1 стак/0.25с), мокрый ×2. Детонация читает число «Углей» и сбрасывает. Мечник: атаки не накладывают посторонний DoT, но по горящему бьют +половину огнём (поджигают, если не горит); детонирует, когда взрыв добивает (опц. паника при низком HP — потом)Детонация от счётчика комбится чище стак-DoT; ускоряющийся сход тематичен и создаёт давление темпа; AI-правило простое (взрыв на добив)
51Наэлектризованный: удар молнии по нему → 15% урона рикошетит в ближайшего врага; рикошет не электризует (без бесконечной цепи)Читаемое распространение молнии без цепной лавины; заменяет прежний вариант-множитель
52Сон: пробуждающий удар ×2 (сон спадает при уроне)Награда за точечное пробуждение, а не пачкой
53Очарование: юнит по коду полностью союзен новой стороне на время и уносит свои баффыПростая кодовая реализация (смена команды); баффы уходят с ним — риск-награда «кого чармить»

Следующий заход: расширить комбо-матрицу на сродства (яд/свет/тьма) и CC. Визуал молнии (снаряд-молния) — к реализации. Идеи набросаны (в чате), отбор — за Максом.


2026-07-15 (вечер) — предметы и Знамёна

Контекст: первый дизайн-проход по контенту предметов (Vessel-скоуп) и Знамён (Party-скоуп). Оформлен каталог items-banners. Систему ItemData(Scope) под это заложили ранее — теперь наполняем дизайном.

#РешениеПричина
54Предметов на «Сосуд» — 3, не 4 (GameConfig.VesselItemSlots = 3)Три достаточно; четыре размывают дефицит выбора
55Активки предметов — авто-триггеры, не ручной клик (срабатывают по событию: HP < порога, не хватает маны на каст, …)Бой автономен (реш. №1). Ручная активка вернула бы вырезанный микроконтроль. Единственная возможная форма микро (Manual Action Charges) — отдельно запаркована и к предметам не относится
56«Зелья» — перезаряжаемые каждый бой слоты, не одноразовые расходники StS. Слово «зелье» = флавор, механика = триггер-предмет с кулдауном раз/бойЕдиная модель экипировки; одноразовые consumable — отдельная механика, не вводим
57Руны стихий (Холод/Пламя/Молния) = «зачарование»: меняют школу урона + навешивают канонический глагол стихии (Холод→Замедление+тег «лёд»; Пламя→Поджог+Угли; Молния→цепь/мультихит+Наэлектризованный/рикошет 15%). Тумблер «весь урон / только автоатаки» — dev, финал по тестам (ориентир — весь исходящий)Ценность не в смене типа (тип не гейт, реш. №35), а в том, что «Сосуд» становится производителем стихийного статуса и заводит комбо (Раскол/Детонация/Проводимость, реш. 46–51)
58Инвиз и Маскировка — разведены в каталоге эффектов. Инвиз = полная нецелимость (атака снимает); Маскировка = нецелимость для всех, кроме юнитов в ближнем радиусеПолный Инвиз уже был (Убийца); Маскировка — новый частый мягкий вариант скрытности
59Плащ Фей (Уникальный): при первом падении HP до 20% — Инвиз 3 сек; в Инвизе хилит (% макс HP/сек) и отбегает, не атакуя (атака сняла бы Инвиз) — режим бегства через FleeSteeringСпасательный предмет с внятным поведением; строится на существующих Инвизе и flee-стиринге
60Проклятое Знамя даёт +5% УРОНА за последствие, не +10% HPHP-версия толкала фармить страдания и ломала роль последствий как наказания; урон менее ломок, держит архетип «страдание = сила»
61Сапоги-Скороходы: +30% скорости, не +50%+50% ломает pursuit-gate и кайт-стиринг (память pursuit-attack-gate)
62Знамя Предсказаний — в паркинг (не берём сейчас)Бой детерминирован, ретрай = тот же бой → ценность предсказания размыта; «врёт 25%» рискует фрустрацией; требует headless-симуляции. Условия возврата — в items-banners §Паркинг
63Две активные ячейки Знамён — принято как фича. Связка Проклятое+Летящее (оба кладут последствия) = осознанный архетип, не эксплойт; следим на балансеАрхетип «страдание = сила» желанен; при доминировании — взаимоисключение/кап
64Рабочий русский термин Party-предметов — «Знамя» (закрывает открытый вопрос «Знамя vs Талисман»). Отдельного тира редкости «Редкий» нет: «редкий» = УникальнаяУстойчивый выбор Макса; консистентность шкалы редкости с relics-overview

Флаги на баланс/реализацию: фикс-числа → проценты/скейл (хил Плаща в % макс HP; проверить +30 маны, +1 голда/сек, 50 голды); форма рампа урона Золотого Знамени (линейный vs кривая vs кап); тумблер рун. При создании ItemData-ассетов — loc-ключи сразу, RU-only; id item.* / banner.*.

Правит доки: Combat - Effects (Инвиз/Маскировка разведены), новый Content - Items & Banners, GameConfig (VesselItemSlots=3), Meta - Index.


2026-07-15 (вечер) — петля забега: перезапуск, инфо о враге, испытания

Контекст: проход по открытым вопросам Блока 2 роадмапа (цена перезапуска, показ врага, испытания, жадность на карте, отложенные темы).

#РешениеПричина
65Перезапуск боя — пул 2 на АКТ (не на бой). Каждый перезапуск тратит попытку; в начале акта пул сбрасывается до 2 (не копится). Поражение при пустом пуле = конец забега. Число — в GameConfigЗаменяет прежнее «2 ретрая на каждый бой» (почти бесплатно). Дефицит наказывает без «спирали смерти»: игрока не ослабляет, но создаёт решение — приберечь на элитку/босса. Закрывает выбор цены из Блока 2 (золото/травма/сложность отклонены как рискующие спиралью)
66Показ врага на узле — только сложность (обычный / элитка); фракция — в тултипе при наведении. Точный состав — нетУточняет реш. №22. Сложность — мгновенный ориентир маршрута, фракция — по запросу; состав скрыт, чтобы не подгонять контрпик
67Испытание = квест игроку, НЕ модификатор боя. Бой (враги/арена/статы) не меняется. Два рода: ограничение состава («3 хила», «только ближники») и целевое условие («закончить за 20 сек»). Провал = без награды, не поражениеДержит принцип «испытание меняет правила игроку, а не крутит статы врагам». Согласуется с №13 (обычные бои варьируются испытаниями) и с ролью испытаний как рычага свапа (GDD-12)
68Испытание раскрывается при заходе в стадию размещения (до старта боя) — игрок успевает подстроить состав/расстановку и выполнить к концу бояЗакрывает открытый вопрос «когда узнаёт (A на карте / B на входе)» — вариант B. Раньше стадии размещения смысла нет (состав-квесты надо видеть до расстановки)
69Цена жадности на карте (лишний узел усиливает босса) — ОТКЛОНЕНО. Карта — как в Slay the SpireЖадность уже саморегулируется риском самих узлов; доп. штраф за посещение — лишний слой
70Соседство как отдельная механика — снято. Предметы могут зависеть от чего угодно, в т.ч. «работает, если рядом союзник» — но это условие эффекта предмета, а не отдельная система «расстановка↔предметы»Не плодим систему там, где хватает выразительности эффектов предмета (GDD-16). Backpack-подобное «соседство» доступно как одно из условий, без нового слоя
71Подпорки позиционирования (точки интереса на арене, разброс скоростей/AoE как рычаг расстановки) — приняты в план, отложены надолгоЦенно для глубины расстановки, но не в ближайших фазах
72Движущаяся мета (межактовые сдвиги правил — школы/сродства/глобальные моды) — принята в план, отложена надолгоЛекарство от «мета устаканилась» (Teamfight Manager); не сейчас

Реализационный долг: перезапуск сейчас в коде — счётчик на КАЖДЫЙ бой (BattleFlow DefaultMaxRetries=2). Переезд под реш. №65: пул уровня акта в RunState, число в GameConfig.

Правит доки: Combat - System (§Перезапуск), Run - Meta Progression (§Испытания — природа + тайминг), Meta - Roadmap (Блок 2 — решённое убрано, отложенное перенесено в Блок 3).


Ранее (до 2026-07-15) — инвентаризация канона

Сведено из всей документации 2026-07-15. Здесь — суть; первоисточник указан. Решения этой сессии — выше.

Бой

  • Бой полностью автономен, ввода игрока в бою нет. GDD-3 §Принцип, GDD-1, GDD-13/14.
  • Заклинания ГД и любые способности «вне юнитов» вырезаны (2026-07). Вместе с ними — слоты ГД, передача управления, мини-игра выбора ГД, роль «Арканист». GDD-4, GDD-0.5, GDD-0.2, TECH-6 §1.
  • ГД не на поле и не участвует в бою; = стартовый набор + гильдие-широкие моды + внебоевые правила. GDD-4, TECH-6 §1.
  • Детерминированная симуляция, фикс. тик 30 Гц, без Unity-физики. GDD-3 §Тех, TECH-3, TECH-13 §3.4.
  • Нулевой выходной рандом: нет крита/уклонения/промаха. Механика, вносящая случайность после «в бой», отклоняется по умолчанию. GDD-13 §2, GDD-8 §Принципы, TECH-6 §6.
  • Поле боя — непрерывное 2D (не клеточное). GDD-3, TECH-6.
  • Пауза = средство просмотра, не боевая механика (Space). GDD-3, GDD-11, TECH-11.
  • Перезапуск боя — до 2 раз на каждый бой, цена TBDsuperseded решением 2026-07-15/65: пул 2 перезапуска на АКТ, сбрасывается в начале акта, не копится; поражение при пустом пуле = конец забега. Бой при перезапуске тот же самый (саб-сид = runSeed + индекс_боя, без номера попытки) — эта часть в силе.
  • AI = Filter / Score / Override, настраивается вне боя, тик AI ~10 Гц. GDD-3, TECH-6 §2, TECH-13.
  • Модель урона: школы (гасятся бронёй: Физ + Стихия + True) vs сродства (Яд/Свет/Тьма — каждое самодостаточно, НЕ по типу существа). Свет/Тьма = True (мимо брони); Яд = DoT+дебафф по школе своего яда (гасится бронёй). «Разум» вырезан. Броня — процентная K/(K+armor). GDD-8, GDD-15 (решения 35/43/44), TECH-6 §6.
  • Тип существа — редкая специя (НЕ главный гейт сродства; решение 35), отдельно от фракции. GDD-8, GDD-15.
  • Эффективности эффектов меняют ТОЛЬКО длительность, не силу. GDD-3, GDD-8, TECH-6 §5.2.
  • Единая модель эффектов (контейнер + [SerializeReference] IEffectComponent[], скейл через ScalableValue). TECH-6 §5.
  • Контроль без diminishing returns; три ответа — снять/сократить/не пустить. TECH-6 §5.3, §5.6.
  • Диспел многоуровневый; смещение = эффект Unremovable (knock-up не режется tenacity). TECH-6 §5.4, §10.
  • 30 числовых статов, база от Реликвии поверх StatsConfig; операции Flat / PercentAdd / PercentMult. GDD-8, TECH-6 §3.
  • Типы боёв: Обычный / Элитный / Финал акта (гильдия-финалист). GDD-3, GDD-1.

Реликвии и юниты

  • Идентичность «Сосуд + Реликвия» = «пилот + чемпион». Ровно 1 Реликвия на «Сосуда» в бою. GDD-5, TECH-6 §1.
  • Редкость = размер кита, не множитель статов: Треш / Обычная / Уникальная. Прежняя Common/Rare/Epic отменена 2026-07-13. GDD-5, TECH-6 §1, GDD-12.
  • Тип Реликвии (отдельная ось): Стандартная 85% / Проклятая 10% / Божественная 5% (Divine только из ивентов; «Стандартная» переименована из «Обычная» 2026-07-15, чтобы развести с осью редкости). GDD-5, GDD-0.4.
  • «Сосуд» = Судьба (1, из открытых достижениями) + перк «+» (1 из 3) + перк «−» (1 из 3). GDD-5.
  • Режим «Истинный герой»: рандом только перков за доп. награду; Судьба всегда вручную. GDD-5, GDD-6.
  • Визуал цельный на Реликвию, не модульный («Сосуд» на поле — только UI-портрет). TECH-6 §4.superseded решением 2026-08-01/15: визуал юнита модульный — голова-Сосуд постоянный якорь личности (виден на поле), тело/оружие/размер меняет Реликвия; лицо = детерминированный face-DTO (2026-08-01/16). «Пилот + чемпион» цел.
  • Анимация — Unity Animation; маркеры контакта = AnimationEvent-данные, бейк в тики, fireEvents=false. TECH-6 §4, TECH-13 §3.1.
  • Иерархия данных UnitData → RelicData / EnemyData. TECH-13 §3.1.
  • Право на Extended-зону — флаг RelicData.CanUseExtendedDeployment. TECH-10 §3.
  • Ресурс привязан к Реликвии (Нет / Мана / Ярость / …). TECH-6 §1, GDD-8.

Мета-прогрессия и экономика

  • Реворд-ramp: Обычный 1из3 / 10% уник; Элита 1из3 ×2 / 20%; Босс 1из3 (×2-3 TBD) / 100%. GDD-12.
  • Левел реликвий по копиям (общий ресурс на 4 «Сосудов», дубль → прогресс, не слот; пул 3+3, берём 4 из 6). GDD-12.
  • Статы вторичны — качаем ради трейт-развилки. GDD-12.
  • Испытания — главный экономический рычаг свапа (на команду, 1 на бой, реролл за деньги с возвратом 30%). GDD-12.
  • Анти-монопак = экономика сложности, не запрет. GDD-12.
  • Натяжение «вглубь vs вширь» на трёх уровнях. GDD-12.
  • Три оси хардкора разведены (Сложность / Хардкорность / Скилл / Дисперсия). GDD-13 §1.
  • Дисперсию режем, шанс — нет; защита от невезения обязательна (класс PRD/pity, не жёсткий счётчик). GDD-13 §4.5.
  • Мета между забегами не урезается; рероллы и баны пула — будут. GDD-14, GDD-5.

Карта и забег

  • Структура карты — Slay the Spire, генерится из сида на старте акта. GDD-7, TECH-7 §8.
  • На узле видно фракцию + сложность; состав врага — нет. GDD-7, GDD-13 §4.1, TECH-7 §8.
  • Пять правил честности (инфо до решения / разбор после / читаемость / перезапуск=отладка / режем дисперсию). GDD-13 §4.
  • Скилловость измеряется (Returns to Skill на детерминизме). GDD-13 §6.
  • Флоу: макро (async UniTask) и микро-бой (fixed-tick) не смешивать; ивенты — IEventFlow без central switch. TECH-7 §1-3.
  • RunState (durable, по строковым id) vs RuntimeUnit (эфемерный). Автосейв на 3 переходах. TECH-7 §4-5.
  • Сцены: Persistent Core + аддитивные Map/Battle; карта в бою = read-only оверлей. TECH-7 §9.
  • Типы узлов: Бой / Магазин / Тренировка / Лечение / Турнирное / Риск / мини-игры (Guildmaster.MiniGames, добровольные пропускаемы). GDD-7, TECH-7 §7.

Травмы и Закалка

  • Injury ↔ Mettle — две полярности одной оси на «Сосуде» в RunState, сброс между забегами; механика = слоистые стат-моды (source="injury"/"mettle"), детерминизм боя не трогает. GDD-9.
  • Травма: от поражения / финиша ниже порога HP / спец-механик; снимается только в «Лечении» за золото; потолок → выбытие. GDD-9.
  • Закалка: только за клатч, лечением не снимается, держится весь забег. GDD-9.
  • Данные — единый ConsequenceData (Polarity: Injury/Mettle). TECH-13 §3.2.

Процедурный лор «Сосудов»

  • Досье = презентационный слой из сида (Мечта/Характер/История/Тайна), НЕ система механик; mad-libs + грамматика, хранение = сид + id + индексы. GDD-10, TECH-13 §3.3.
  • Явно НЕ делаем: LLM-генерация, ветвящийся нарратив, диалоги, отношения между «Сосудами». GDD-10.

Кооп

  • Гильдия всегда 4 «Сосуда»; игроков 1-4; хост распределяет, распределение меняется в любой момент. GDD-6, GDD-12.
  • Вся агентность игроков — в подготовке; ГД — общий выбор, не боевая роль. GDD-6.
  • Кооп = структурная замена живому оппоненту (ниша пустая). GDD-14 §4.9.
  • Сеть host-authoritative (lockstep отклонён); дисконнект — «Сосуды» дерутся по AI; автопауза + отсчёт «3-2-1». TECH-7 §10.

Контент / данные

  • Три слоя: Авторинг (SO) → Симуляция (POCO, бейк) → Персистентность (DTO+JSON/ES3). Ссылки только по строковому id; SO не мутируется в рантайме. TECH-13 §1.
  • Запреты: Odin Serializer; AnimationCurve.Evaluate в тике; мутация конфиг-SO; нарушение [MovedFrom]. TECH-13 §1.
  • id формата domain.name, стабильный, не переименовывается после релиза. TECH-13 §2.
  • Производные ключи — конвенция ({id}.name и т.д.), не поля. TECH-13 §2.4.
  • GuildmasterData.Spells убрано (2026-07). TECH-13 §3.2.
  • Локализация — Unity Localization EN+RU, ключи из id; заполнять RU, прочие локали прочерк. TECH-13 §6.
  • Аудио — только за IAudioService, резолв через AudioCatalog. TECH-13 §7.
  • Валидация — EditMode-тесты в CI (Odin Validator не покупаем). TECH-13 §8.
  • Конфиги: бейк на старте боя; live-тюнинг = tainted-фича. TECH-13 §4.
  • Addressables только как плумбинг Localization, геймплейный контент — прямые ссылки через IContentDatabase. TECH-13 §5.

Арена и расстановка

  • Геометрия = данные симуляции, не коллайдеры; бейк ArenaLayoutData на старте боя. TECH-10 §2-3.
  • prefab-per-arena через Addressables. TECH-10 §4.
  • Зоны Normal (всем) + Extended (по праву чемпиона); свободное размещение, валидация в DeploymentService. TECH-10 §3, §6.

Ввод и камера

  • Весь ввод за IInputService; карты действий строятся в коде, не .inputactions. TECH-11 §2-3.
  • Камера — Cinemachine 3, режимы Action/Overview/Dev, кламп из данных арены. TECH-11 §5.
  • Dev-камера в билде за флагом DevAccess. TECH-11 §6.
  • Раскладка: пан WASD+стрелки, зум колесо, Tab цикл вида, Space пауза; dev — F5/R + консоль QFSW. GDD-11, TECH-11.

Сеттинг / сид

  • Сеттинг: гильдия готовится к Великому Чемпионату; «Сосуды» — люди, несущие Реликвии павших героев. GDD-2.
  • Весь рандом через seeded IRngService (не UnityEngine.Random); забег детерминирован сидом; ввод/шаринг сида — фича. TECH-3.

Противоречия и рассинхроны в документации (на 2026-07-15)

Найдено инвентаризацией и ultracode-аудитом (../../../audits/2026-07-15/summary.md). Прогон правок аудита — 2026-07-15.

  1. [ИСПРАВЛЕНО] Глоссарий 0.4 писал про ГД «применяет заклинания» — противоречило вырезанным заклинаниям. Поправлено 2026-07-15.
  2. [ИСПРАВЛЕНО] Термин «Перк» → EN Trait. GDD-5 теперь указывает TraitData (не PerkModifiers); «Перк» оставлен только как RU-термин. Аудит §3.1.
  3. [ИСПРАВЛЕНО] «Обычная» — два значения. Решение Макса 2026-07-15: ось типа переименована в Стандартная / Проклятая / Божественная; «Обычная» осталась только за осью редкости. Прогнано по GDD-5, GDD-0.4, телам карточек. Код RelicRarity — п.4 ниже (сверка HEAD). Аудит §3.2.
  4. [ИСПРАВЛЕНО] RelicRarity как одна перегруженная ось больше не существует: сверка с HEAD 2026-07-30 показала готовый split — ContentEnums.cs держит KitPower (Common/Cursed/Divine) и DropRarity (Trash/Common/Unique) ортогонально, каждый со своим докстрингом «это НЕ шанс выпадения» / «ортогональна KitPower», цены по KitPower — в GameConfig. Требование «сверить с HEAD» простояло непроверенным до 2026-07-30 и всё это время числило заблокированным ramp наград, который уже работал.
  5. [ИСПРАВЛЕНО] Имя финального боя разведено: уровень сложности узла = «босс» (GDD-7/13), сущность боя = «гильдия-финалист» (лор, GDD-1/2/3), закреплено в глоссарии 0.4. Аудит §3.3.
  6. [ИСПРАВЛЕНО] Статус пунктов про состав врага: решение 22 (состав скрыт) помечено «решено» в GDD-0.6/14; момент раскрытия испытания оставлен единственной открытой развилкой (GDD-0.2). Аудит §5.7.

Также этим аудитом: разведён яд-vs-броня (§1.1), убран отменённый гейт «тип существа → сродство» из GDD-8/Справочника и из инвентаризации выше (§1.2), мигрирована легаси-таксономия урона Вода/Ветер/Земля/Разум (§1.4), починены каталоги-ссылки и порча карточек (§5.1-5.2). Осталось код-зависимое: модель огня The Pyre (§1.3), чистка _spells (§4.3).


Принципы (не размениваются без явного пересмотра)

  1. Рандом даёт выбор и направление — никогда готовую силу. (Mechabellum: «I wanna outsmart and outplay, not gamba».)
  2. Решения вне боя обязаны быть видны в бою. Если «Сосуд» с профилем «держи дистанцию» лезет в свалку — весь слой подготовки обесценен за один бой (провал Time Walker).
  3. Дефицит и есть глубина. Лимит 4 «Сосудов» и вместимость коллекции не смягчать (Legionbound умер от изобилия).
  4. Читаемость — функция, а не полировка.
  5. Плотность решений важнее длины забега. Никакого «непроигрываемого первого часа» (провал Dwarves).
  6. Менеджмент должен чувствоваться. Слой, который не меняет исход заметно, лучше убрать, чем оставить для галочки.
  7. Испытания меняют правила, а не крутят статы. Иначе «каждая партия одинакова» при любом объёме контента (провал There Are No Orcs).