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

Дерево навыков: как три ветки превращают прокачку в стратегию

Список бонусов к урону который растёт с каждым уровнем — это не дерево навыков. Это таблица умножения с косметикой. Настоящее дерево навыков заставляет игрока принимать решения которые нельзя отменить просто накопив ресурсов. Разберём как устроена система навыков в Last Wall — с точки зрения дизайна и с точки зрения кода. Дерево навыков разделено на три ветки, и каждая отвечает на другой вопрос. Сила — как убивать врагов быстрее. Урон, скорость атаки, критические удары. Ветка для тех кто хочет чтобы волны заканчивались раньше чем успевают дойти до стены. Защита — как выживать дольше. HP стены, дополнительные слоты для юнитов, активный навык лечения. Ветка для тех кто предпочитает держать оборону и наращивать армию. Экономика — как накапливать быстрее. Золото с врагов, XP за убийства, скидки на найм, оффлайн-доход. Ветка которая не помогает в конкретном бою — но делает каждое следующее прохождение мощнее. Правильной ветки нет. Игрок вложивший всё в Силу и игрок вложивший всё в Экономик
Оглавление

Список бонусов к урону который растёт с каждым уровнем — это не дерево навыков. Это таблица умножения с косметикой. Настоящее дерево навыков заставляет игрока принимать решения которые нельзя отменить просто накопив ресурсов. Разберём как устроена система навыков в Last Wall — с точки зрения дизайна и с точки зрения кода.

Три ветки — три разных игрока

Дерево навыков разделено на три ветки, и каждая отвечает на другой вопрос.

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

Защита — как выживать дольше. HP стены, дополнительные слоты для юнитов, активный навык лечения. Ветка для тех кто предпочитает держать оборону и наращивать армию.

Экономика — как накапливать быстрее. Золото с врагов, XP за убийства, скидки на найм, оффлайн-доход. Ветка которая не помогает в конкретном бою — но делает каждое следующее прохождение мощнее.

Правильной ветки нет. Игрок вложивший всё в Силу и игрок вложивший всё в Экономику дойдут до той же волны — просто по-разному. Это и есть стратегия.

Очки навыков тратятся из XP и сбрасываются при Prestige. Это означает что каждое новое прохождение — это новое решение о распределении. Один раз попробовал агрессивную Силу — в следующий раз можно попробовать экономический путь.

Пресреквизиты: глубина без перегрузки

Не все навыки доступны сразу. Часть из них требует сначала прокачать другой навык в этой же ветке.

В ветке Защиты нельзя открыть «Дополнительные слоты» пока не куплена «Укреплённая стена». Нельзя получить «Боевой клич» пока нет «Дополнительных слотов». Это цепочка из трёх шагов — и каждый шаг это осознанное вложение.

Зачем такая структура? Без пресреквизитов игрок покупает самый сильный навык сразу и забывает об остальных. С пресреквизитами путь к мощному навыку — это история из нескольких решений.

Пресреквизит — это не барьер. Это способ сказать игроку: чтобы получить это, тебе нужно сначала по-настоящему вложиться в эту стратегию.

Активные навыки: Q, W, E

Три навыка в дереве — не пассивные бонусы а действия с кулдауном. Они привязаны к клавишам и требуют момента чтобы применить их правильно.

  • Огненный шквал Q — AoE урон всем врагам на экране. Кулдаун 60 секунд. Лучший момент — начало волны с боссом
  • Боевой клич W — плюс 50% к атаке всех юнитов на 10 секунд. Кулдаун 90 секунд. Лучший момент — когда враги сконцентрированы в одной точке
  • Экстренное лечение E — восстанавливает 20% HP стены. Кулдаун 120 секунд. Лучший момент — очевидно когда стена уже мигает красным

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

Как это устроено в коде

Всё дерево навыков живёт в одном файле — skills.config.ts. Каждый навык описан как объект с фиксированным набором полей: ветка, максимальный уровень, стоимость, пресреквизиты и самое важное — функция эффекта.

Эффект как чистая функция

Каждый навык не меняет никакие глобальные переменные. Он просто возвращает словарь: какой стат и на сколько умножить.

effect: (level) => ({
atk_multiplier: 1 + level * 0.05
})

«Острые клинки» на уровне 6 возвращают множитель 1.30 — плюс 30% к урону. Это всё что делает навык. Никаких побочных эффектов, никакого глобального состояния.

Когда CombatSystem считает урон удара — он вызывает getBonus("atk_multiplier"). Эта функция проходит по всем купленным навыкам, перемножает их эффекты и возвращает итоговый множитель. Один вызов — актуальный бонус от всего дерева.

Почему это удобно

Добавить новый навык — это одна запись в конфиге. Не нужно трогать CombatSystem, не нужно менять логику расчёта урона. Система автоматически подхватит новый эффект при следующем вызове getBonus.

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

Кулдауны активных навыков

Активные навыки хранятся в отдельном Zustand-сторе — useActiveSkillStore. Там три таймера, которые обновляются на каждом тике игрового цикла. Кнопка навыка визуально показывает оставшееся время — круговой прогресс-бар поверх иконки. Нажатие клавиши Q, W или E — это просто проверка: таймер на нуле? Если да — применяем эффект и запускаем кулдаун заново.

Что в итоге

Дерево навыков работает когда каждая ветка — это отдельный стиль игры, а не просто набор бонусов. Пресреквизиты создают глубину без перегрузки. Активные навыки добавляют тактический слой. А чистые функции эффектов означают что вся эта сложность — просто один файл конфига который легко расширять.

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

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