Добавить в корзинуПозвонить
Найти в Дзене
Дмитрий Брунько

Волны и враги: как нарастающая сложность держит игру в напряжении

Каждая следующая волна должна быть чуть страшнее предыдущей — но не настолько, чтобы игрок сдался. Это хрупкий баланс. Разберём как он достигается через дизайн и что происходит под капотом когда очередная волна врагов движется к вашей стене. Враг в инкрементальной игре — это не просто препятствие. Это измеритель прогресса. Если волна проходится легко — значит прокачка работает. Если с трудом — значит пора думать о стратегии. Для этого нужны враги с разными ролями. В Last Wall их четыре типа: Каждый новый тип врага — это не просто более высокие цифры. Это новый вопрос к игроку: ты уже знаешь как с этим справляться? Дикари появляются с первой волны. Берсерк — с пятой. Шаман — с пятнадцатой. Игрок успевает освоиться с каждым типом прежде чем появится следующий. Сложность не придумывается интуитивно — она считается. У каждого врага есть базовые параметры, которые умножаются на номер волны по простым формулам. HP врага растёт на 12% за волну: hp(волна) = базовый HP × (1 + волна × 0.12) Уро
Оглавление

Каждая следующая волна должна быть чуть страшнее предыдущей — но не настолько, чтобы игрок сдался. Это хрупкий баланс. Разберём как он достигается через дизайн и что происходит под капотом когда очередная волна врагов движется к вашей стене.

Враг как инструмент напряжения

Враг в инкрементальной игре — это не просто препятствие. Это измеритель прогресса. Если волна проходится легко — значит прокачка работает. Если с трудом — значит пора думать о стратегии.

Для этого нужны враги с разными ролями. В Last Wall их четыре типа:

  • Дикарь — быстрый, слабый, идёт толпой. Создаёт ощущение давления числом
  • Берсерк — ускоряется ниже 30% HP. Наказывает за то что не добиваешь
  • Шаман — лечит союзников рядом. Требует менять приоритет целей
  • Босс — каждые 10 волн, уникальные способности. Момент настоящего испытания
Каждый новый тип врага — это не просто более высокие цифры. Это новый вопрос к игроку: ты уже знаешь как с этим справляться?

Дикари появляются с первой волны. Берсерк — с пятой. Шаман — с пятнадцатой. Игрок успевает освоиться с каждым типом прежде чем появится следующий.

Как растёт сложность: формулы

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

HP врага растёт на 12% за волну:

hp(волна) = базовый HP × (1 + волна × 0.12)

Урон растёт медленнее — 8% за волну. Игрок должен успевать наращивать защиту быстрее чем растёт угроза:

урон(волна) = базовый урон × (1 + волна × 0.08)

Количество врагов увеличивается каждые пять волн:

количество = базовое + целая часть (волна / 5)

Почему именно 12% и 8%, а не 10% и 10%? Потому что HP растёт быстрее — это заставляет инвестировать в урон, а не только в защиту стены. Небольшая асимметрия создаёт стратегический выбор.

Модификаторы

Начиная с волны 25 к врагам добавляются модификаторы — дополнительный слой сложности поверх базового скалирования:

  • Волна 25+ — бронированный: −30% получаемого урона
  • Волна 50+ — ядовитый: постоянный урон по стене за каждого выжившего
  • Волна 75+ — ускоренный: ×1.5 к скорости движения

Каждый модификатор требует пересмотра состава отряда. Бронированный делает Мага с AoE важнее одиночного урона. Ядовитый превращает скорость убийства в приоритет. Ускоренный делает пехотинцев-танков критически важными.

Как это работает в коде

Каждую волну WaveManager строит очередь спавна — список врагов с задержкой между появлениями. Не все враги появляются одновременно: между каждым спавном пауза 0.8 секунды. Это создаёт ритм и даёт игроку время реагировать.

На каждом тике игрового цикла WaveManager делает три вещи:

  1. Двигает всех живых врагов к стене на скорость × delta пикселей
  2. Проверяет: достиг ли кто-то стены — если да, наносит урон и удаляет врага
  3. Проверяет: пуста ли волна — если да, запускает таймер паузы перед следующей

Rage-механика Берсерка

Берсерк ускоряется когда его HP падает ниже 30%. Это одна строка проверки в движении:

итоговая скорость = базовая скорость × (HP < 30% ? 1.6 : 1.0)

Простая механика — но она полностью меняет тактику. Игрок учится не оставлять Берсерков в живых с низким HP.

Пауза между волнами

После того как последний враг убит или достиг стены, WaveManager запускает таймер — 5 секунд. Это время на то чтобы купить юнитов, прокачать навык, принять решение. Не слишком много — давление не спадает совсем. Не слишком мало — игрок не чувствует себя в ловушке.

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

Что в итоге

Нарастающая сложность работает когда она честная: игрок понимает почему стало труднее и знает что именно нужно изменить. Формулы дают предсказуемый рост, новые типы врагов задают новые вопросы, модификаторы заставляют пересматривать стратегию.

В следующей статье — экономика: как три ресурса создают выбор, почему числа в инкрементальных играх растут до 1e+308 и как это вообще считается без потери точности.

#gamedev, #инди-игры, #разработка игр, #геймдизайн, #javascript