5 марта 2026 г. · Михаил Васильев

Nexus Devlog: прототип движка

Смотреть на VK

Полтора месяца назад я выложил на сайте планы студии - про движок Nexus: что это такое и какие проекты мы будем на нём делать, вплоть до стратегий и продолжений египетской серии. Там же была дорожная карта. Движок сложный, и чтобы снизить риски, я хотел собирать его постепенно. Но игроки в комментариях сказали прямо: собрать такое невозможно. Поэтому я решил начать с прототипа - показать, что собрать такой движок всё-таки можно. Его и покажу.

Меню прототипа: движок предлагает выбрать одну из четырёх симуляций - Stone Age, Slay the Spire, генератор звёздных систем и Oregon Trail

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

Сейчас на нём крутятся четыре симуляции. Первая - Stone Age, самая первая игра студии, 2013 года. Остальные три сделаны по чужим проектам. Копировать или выпускать их я не собираюсь, они здесь только чтобы показать, что на одном движке могут работать совершенно разные игровые механики.

Stone Age

Stone Age воспроизведена на движке целиком. Те же характеристики, годы и ходы, население, земли. Рабочих отправляешь в лес, они добывают еду, население растёт, появляются технологии - их исследуешь, открываешь постройки и дерево эволюции, от австралопитека к человеку умелому и дальше. События, концовка - всё из оригинала на месте.

Консоль прототипа: Stone Age - характеристики племени, земли, меню технологий и эволюции

Slay the Spire

Дальше - Slay the Spire, отличный карточный рогалик, кто-то наверняка играл. На движке только бой: у игрока карты, энергия и здоровье, у врага своё намерение. Strike (Удар) бьёт, Defend (Защита) ставит блок. Тратишь энергию, заканчиваешь ход, и так по очереди, пока кто-то не победит.

Та же консоль с Slay the Spire - здоровье, энергия, намерение врага и карты в руке

GURPS

Третья симуляция - GURPS, настольная система, довольно сложная. Из неё я взял только один модуль, генератор звёздных систем. Любопытно, что сам этот модуль - вообще не игра, а сложный генератор. Он собрал систему с одной звездой и кучей свойств: десять орбит, на них разные миры. Первый, маленький каменный, похож на Меркурий - со своей массой, давлением атмосферы и прочим. Всего в этой симуляции больше шести тысяч фактов. Это хороший стресс-тест: видно, сколько данных движок тянет.

Сгенерированная звёздная система в модуле GURPS - звезда, орбиты и свойства первого мира

Oregon Trail

Четвёртая - Oregon Trail, классика 1971 года и одна из самых ранних компьютерных игр. Это путь переселенцев через Америку на повозках: перед дорогой закупаешь припасы - быков, еду, патроны, одежду, - а дальше охотишься, распределяешь паёк и разбираешься с событиями. На нас вот напали. И так до конца маршрута.

Oregon Trail в той же консоли: припасы - еда, патроны, одежда, деньги - и выбор действий при встрече с всадниками

Все четыре игры работают на одном движке, и ни для одной не пришлось писать код.

Правка на лету

Но движок не только запускает эти игры - их можно менять прямо на ходу, не трогая код. Возьмём Slay the Spire.

Стартовый ход Slay the Spire на движке: здоровье, энергия, враг и пять карт в руке - урон Strike пока 6

Поменяю урон карты Strike (Удар), поставлю 100:

/set Strike.CalcDamage Value 100

Свойство сразу изменилось у обеих таких карт, потому что класс у них общий.

В руке две карты Strike, и у обеих теперь урон 100 - свойство изменилось сразу у всех карт этого класса

А можно добавить и совсем новую карту, Fireball (Огненный шар):

/add Fireball Is DirectDamage
/set Fireball.CostEnergy Value 2
/add Fireball Has CalcDamage
/set Fireball.CalcDamage Value 20
/add Fireball Has ApplyDamage
/add Fireball.ExecutionEffects Has CostEnergy
/add Fireball.ExecutionEffects Has CalcDamage
/add Fireball.ExecutionEffects Has ApplyDamage

Её не было, а теперь она в игре - лежит в руке, разыгрывается, наносит 20 урона и уходит в сброс, как обычная:

После правок: обе карты Strike теперь по 100 урона, а в руке появилась новая карта Fireball на 20 урона

Можно поменять и сами правила, одной командой. Уберу правило, по которому сыгранные карты уходят в сброс.

/remove PlayCard Has MovePlayedCard

Теперь они остаются в руке. Сыграл Defend (Защита): блок повесился, энергия потратилась, а карта осталась.

После смены правила: Defend сыгран - энергия 0/3, блок 5, - но все сыгранные карты остались в руке, помечены [X]

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

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

/set Player.Gold Value 100
/add CostGold Output Owner.Gold
/add CostGold Math.Subtract.Apply true

Появляется характеристика, которой только что не было, - золото, и сразу целая сотня.

В строке состояния появилось золото - сразу сто, характеристики, которой в игре только что не было

На этом золоте можно сделать и новое действие - Bribe (Подкуп). Оно тратит не энергию, а золото:

/add Bribe Is DirectDamage
/set Bribe.CostEnergy Value 0
/set Bribe.CostGold Value 30
/add Bribe Has CalcDamage
/set Bribe.CalcDamage Value 15
/add Bribe Has ApplyDamage
/add Bribe Has CostGold
/add Bribe.ExecutionEffects Has CostGold
/add Bribe.ExecutionEffects Has CalcDamage
/add Bribe.ExecutionEffects Has ApplyDamage
/create Bribe Player.Hand

Bribe (Подкуп) стоит тридцать золота и наносит пятнадцать урона - и сразу работает.

В руке появилось новое действие, Bribe: ноль энергии, тридцать золота и пятнадцать урона

Может показаться, что это читы и что набирать такие команды неудобно. Но это не читы. Это правка логических фактов и данных, на которых держится вся игра - её объектов, свойств и механик. По сути это язык, на котором игра написана.

Учить этот язык необязательно. Можно попросить ИИ перевести обычную фразу в команды, которые понимает Nexus. Например:

give 999 gold

В переводе это просто «Добавь 999 золота».

Запрос к ИИ обычными словами - «give 999 gold». Движок сам подберёт нужную команду и выполнит её

ИИ думает, находит нужную команду и выполняет, и у нас 999 золота.

Можно сказать иначе, «золото 100» - тоже сработает. «Сделай меня богом» - ИИ выдаёт неуязвимость. Закончить ход, ударить, вылечиться - всё это можно сделать словами, движок понимает. И ничего из этого не заскриптовано, всё работает по-настоящему.

Планы

Команды я хочу упростить. Сейчас, чтобы создать тот же Fireball (Огненный шар), нужно около восьми команд, а думаю свести к трём-четырём. А в следующем ролике постараюсь показать что-то более наглядное - 2D-рендер.

Подробнее про движок и планы - в разделе Nexus.

Оговорка: Stone Age - игра студии. Slay the Spire, GURPS и Oregon Trail принадлежат их правообладателям и показаны только как демонстрация движка - эти сборки нигде не распространяются.