Акт 1: лестница боёв

Что игрок встречает на маршруте первого акта: сколько боёв, из кого они собраны и чего каждый от него требует. Заведено 2026-08-21 после первого прогона бенча забега, показавшего, что акт не убивает никого (docs/balance-issues.md BAL-028): пяти гоблинских боёв на весь акт не хватало ни на сложность, ни на разнообразие.

Карта и веса узлов — Run - Events & Minigames. Раны, которые эти бои должны начать выдавать, — Run - Injuries & Mettle.


Валюта сложности — очки угрозы

Бюджет боя считается в ThreatPoints, которые уже проставлены у каждого врага. Ростер акта 1 в этих очках:

ОчковКто
1Грунт, Волк стаи, Скелет-мечник
2Головорез, Гоблин-лучник, Бандит-убийца
3Гоблин-воин, Шут, Насмешник, Бугай, Дуэлянт, Щитоносец, Ядолук, Земляной голем
5Гоблин-командир, Шаман, Волчий наездник, Чернокнижник

Ступени бюджета (решение Макса 2026-08-21, числа proposed до замера):

СтупеньБюджетГде встречается
Рядовой ранний8-10этажи 1-4
Рядовой поздний12-14этажи 5-12
Элитный18-20этажи 5-6 и 9-12
Босс28этаж 14

Ориентир прежних боёв: рядовой стоил 3-7 очков, элитный — 12. Против четырёх полноценных китов это спарринг; отсюда и нулевая смертность в замере.

Ступень задаёт ДИАПАЗОН ЭТАЖЕЙ, а не тир (решено 2026-08-21)

EncounterTier знает только Common / Elite / Finalist, поэтому сам по себе он позволил бы бою на 14 очков выпасть на первом этаже. Решение: у EncounterData заводится диапазон этажей, и пул узла фильтруется по нему.

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

Отвергнуто: дописывать ступени в EncounterTier (дешевле кодом, но смешивает две оси) и не различать вовсе, отдав рост долям элит (0% на этажах 1-4 → 30% на 9-12 — лестница получилась бы ступенчатой, а не плавной).

Код есть с 2026-08-21. У EncounterDataMinFloor / MaxFloor (обе границы включительно, ноль сверху = без предела, оба нуля = где угодно), у пресета — FitsFloor, у NodeResolver.PickBattlePreset — второй фильтр рядом с тиром. Отступает он по одной оси за раз и обе потери называет вслух: этаж — ограничение мягкое, тир — жёсткое. Тест — EncounterFloorRangeTests. Осталось проставить диапазоны в самих ассетах.


Что бой должен спрашивать

Норма (решение Макса 2026-08-21): смертность приходит от попытки выполнить квест, а не от фона. Рядовой бой при правильной расстановке смертей не даёт — но при неправильной обязан давать. Поэтому в таблицах ниже у каждого боя назван запрос: чего он требует от отряда. Бой без запроса — это налог, а не сложность.

Виды идут вперемешку по всему акту (решение Макса 2026-08-21): гоблины и бандиты вместе, звери и нежить примесью. Тултип узла показывает Вид, и выбор маршрута становится решением («к гоблинам или в обход к разбойникам»).


Рядовые ранние (8-10 очков)

БойВидСоставОчкиТелЗапрос
Гоблинский дозорГоблиныГрунт ×2, Головорез ×1, Лучник ×285нет — знакомит с расстановкой
Волчья стаяЗвериВолк стаи ×888удержание строя: много быстрых тел
Застава бандитовБандитыЩитоносец ×1, Бугай ×1, Убийца ×183пробить броню: мало тел, но толстых
Костяной патрульНежитьСкелет-мечник ×888площадь: одинаковые слабые со всех сторон
Гоблинская линияГоблиныВоин ×1, Лучник ×2, Грунт ×295дистанция: стрелки за спиной танка
Ловушка на трактеБандитыДуэлянт ×2, Ядолук ×193размен: яд наказывает затяжной бой

Рядовые поздние (12-14 очков)

БойВидСоставОчкиТелЗапрос
Гоблинский отрядГоблиныВоин ×1, Грунт ×3, Лучник ×2, Головорез ×1127полный строй противника
Шайка с шаманомГоблиныШаман ×1, Воин ×1, Грунт ×3, Головорез ×1136достать тыл: шаман держит своих
Бандитский налётБандитыЩитоносец ×2, Бугай ×1, Ядолук ×1124пробить броню, пока капает яд
Ядовитая засадаБандитыЯдолук ×2, Убийца ×2, Дуэлянт ×1135защита тыла: убийцы идут за дальниками
Каменная стражаПрочиеЗемляной голем ×3, Скелет-мечник ×4137стена HP: длинный бой без права на простой
Волчьи наездникиГоблиныВолчий наездник ×2, Волк стаи ×3135скорость: врываются в тыл до сближения

Элитные (18-20 очков)

БойВидСоставОчкиТелЗапрос
Гоблинский командирГоблиныКомандир ×1, Воин ×2, Грунт ×3, Лучник ×2188плотный урон в окно: командир держит толпу
Круг шамановГоблиныШаман ×2, Шут ×1, Воин ×2195дальний тыл: два хилера за стеной
Чернокнижник и щитыБандитыЧернокнижник ×1, Щитоносец ×3, Ядолук ×2206броня плюс контроль одновременно
НасмешникиГоблиныНасмешник ×2, Шут ×1, Волчий наездник ×1, Грунт ×2, Головорез ×1187контроль: наказывают за потерю строя

Босс (28 очков)

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

Поэтому акт 1 получает временного босса одним боем, чтобы узел перестал закрываться элиткой:

БойВидСоставОчкиТел
Банда: Крутой челГоблиныКомандир ×1, Шаман ×2, Волчий наездник ×1, Воин ×2, Грунт ×2288

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


Что стало со старыми боями (сделано 2026-08-21)

Пять гоблинских энкаунтеров (GoblinScouts, GoblinAmbush, GoblinWarband, GoblinSkirmishLine, GoblinRaid) удалены. Десять дев-пресетов, что на них ссылались, переехали на три новых спарринга — SparringGoblins (3 очка), SparringWarband (7), SparringRaid (12).

Спарринги заведены тира Special, и это чинит дефект, а не просто заменяет ссылку. Дев-пресеты сидели на Common-энкаунтерах, а пул боевого узла отбирается по тиру — то есть проверочные бои для китов выпадали на карте забега наравне с контентом акта. Special из пула карты не берётся, как и у дамми.

Дамми-энкаунтеры не тронуты (DummyPair, DummyTrio, DummyScatter): тот же Special, на карте не спавнятся, это инструмент дев-боёв, а не контент акта.

У каждого боя акта есть свой BattlePresetData в BattlePresets/Act1/ — узел карты выбирает пресет, а не энкаунтер. Ростер в них пустой намеренно: в забеге отряд приезжает из гильдии.

Открытые вопросы

  • Позиции проставлены по правилу ролей, а не выверены игрой (2026-08-21): фронт x=4.5, убийцы на флангах x=5.5, y=±3.2, стрелки x=7, поддержка x=7.8; несколько пакетов одного ряда расходятся по y с шагом 2.2. Числа взяты по образцу прежних боёв. Расстановка врагов решает не меньше состава, поэтому это первый кандидат на правку глазами в редакторе.
  • Диапазоны этажей в ассетах пустыепроставлены 2026-08-21: ранние 1-4, поздние 5-12, элитные 5-12, босс с 14-го без верхнего предела (длина акта ещё может измениться).
  • Цель — цена рядового боя около 25-30% HP отрядаориентир снят 2026-08-21. Замер дал 43-55%, и решение Макса: бои остаются дорогими, пересматривается само число нормы (journal-adr §2026-08-21 (8)). Новое число не назначено: оно выводится из того, сколько боёв подряд отряд должен держать между передышками.
  • Нужны ли акту 1 бои-«загадки» с одним сильным врагом (сейчас минимум три тела) — не обсуждалось.