Акт 1: лестница боёв
Что игрок встречает на маршруте первого акта: сколько боёв, из кого они собраны и чего каждый от него требует. Заведено 2026-08-21 после первого прогона бенча забега, показавшего, что акт не убивает никого (
docs/balance-issues.mdBAL-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. У
EncounterData—MinFloor/MaxFloor(обе границы включительно, ноль сверху = без предела, оба нуля = где угодно), у пресета —FitsFloor, уNodeResolver.PickBattlePreset— второй фильтр рядом с тиром. Отступает он по одной оси за раз и обе потери называет вслух: этаж — ограничение мягкое, тир — жёсткое. Тест —EncounterFloorRangeTests. Осталось проставить диапазоны в самих ассетах.
Что бой должен спрашивать
Норма (решение Макса 2026-08-21): смертность приходит от попытки выполнить квест, а не от фона. Рядовой бой при правильной расстановке смертей не даёт — но при неправильной обязан давать. Поэтому в таблицах ниже у каждого боя назван запрос: чего он требует от отряда. Бой без запроса — это налог, а не сложность.
Виды идут вперемешку по всему акту (решение Макса 2026-08-21): гоблины и бандиты вместе, звери и нежить примесью. Тултип узла показывает Вид, и выбор маршрута становится решением («к гоблинам или в обход к разбойникам»).
Рядовые ранние (8-10 очков)
| Бой | Вид | Состав | Очки | Тел | Запрос |
|---|---|---|---|---|---|
| Гоблинский дозор | Гоблины | Грунт ×2, Головорез ×1, Лучник ×2 | 8 | 5 | нет — знакомит с расстановкой |
| Волчья стая | Звери | Волк стаи ×8 | 8 | 8 | удержание строя: много быстрых тел |
| Застава бандитов | Бандиты | Щитоносец ×1, Бугай ×1, Убийца ×1 | 8 | 3 | пробить броню: мало тел, но толстых |
| Костяной патруль | Нежить | Скелет-мечник ×8 | 8 | 8 | площадь: одинаковые слабые со всех сторон |
| Гоблинская линия | Гоблины | Воин ×1, Лучник ×2, Грунт ×2 | 9 | 5 | дистанция: стрелки за спиной танка |
| Ловушка на тракте | Бандиты | Дуэлянт ×2, Ядолук ×1 | 9 | 3 | размен: яд наказывает затяжной бой |
Рядовые поздние (12-14 очков)
| Бой | Вид | Состав | Очки | Тел | Запрос |
|---|---|---|---|---|---|
| Гоблинский отряд | Гоблины | Воин ×1, Грунт ×3, Лучник ×2, Головорез ×1 | 12 | 7 | полный строй противника |
| Шайка с шаманом | Гоблины | Шаман ×1, Воин ×1, Грунт ×3, Головорез ×1 | 13 | 6 | достать тыл: шаман держит своих |
| Бандитский налёт | Бандиты | Щитоносец ×2, Бугай ×1, Ядолук ×1 | 12 | 4 | пробить броню, пока капает яд |
| Ядовитая засада | Бандиты | Ядолук ×2, Убийца ×2, Дуэлянт ×1 | 13 | 5 | защита тыла: убийцы идут за дальниками |
| Каменная стража | Прочие | Земляной голем ×3, Скелет-мечник ×4 | 13 | 7 | стена HP: длинный бой без права на простой |
| Волчьи наездники | Гоблины | Волчий наездник ×2, Волк стаи ×3 | 13 | 5 | скорость: врываются в тыл до сближения |
Элитные (18-20 очков)
| Бой | Вид | Состав | Очки | Тел | Запрос |
|---|---|---|---|---|---|
| Гоблинский командир | Гоблины | Командир ×1, Воин ×2, Грунт ×3, Лучник ×2 | 18 | 8 | плотный урон в окно: командир держит толпу |
| Круг шаманов | Гоблины | Шаман ×2, Шут ×1, Воин ×2 | 19 | 5 | дальний тыл: два хилера за стеной |
| Чернокнижник и щиты | Бандиты | Чернокнижник ×1, Щитоносец ×3, Ядолук ×2 | 20 | 6 | броня плюс контроль одновременно |
| Насмешники | Гоблины | Насмешник ×2, Шут ×1, Волчий наездник ×1, Грунт ×2, Головорез ×1 | 18 | 7 | контроль: наказывают за потерю строя |
Босс (28 очков)
Полный сценарий гоблинского босса — Гоблинская Банда, и он ждёт движка: ему нужны зоны размещения с квотой, кольцевая расстановка, стены и массовое отбрасывание. Ничего этого в симуляции нет.
Поэтому акт 1 получает временного босса одним боем, чтобы узел перестал закрываться элиткой:
| Бой | Вид | Состав | Очки | Тел |
|---|---|---|---|---|
| Банда: Крутой чел | Гоблины | Командир ×1, Шаман ×2, Волчий наездник ×1, Воин ×2, Грунт ×2 | 28 | 8 |
Это заглушка, а не дизайн: настоящий босс — три сюжетно связанных боя по каркасу Стадий (Боссы фракций). Заглушка живёт до тех пор, пока движок не научится тому, что просит карточка, и её замена запланирована, а не забыта.
Что стало со старыми боями (сделано 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 бои-«загадки» с одним сильным врагом (сейчас минимум три тела) — не обсуждалось.