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

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

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

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

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

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

Поменяю урон карты Strike (Удар), поставлю 100:
/set Strike.CalcDamage Value 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 урона и уходит в сброс, как обычная:

Можно поменять и сами правила, одной командой. Уберу правило, по которому сыгранные карты уходят в сброс.
/remove PlayCard Has MovePlayedCardТеперь они остаются в руке. Сыграл Defend (Защита): блок повесился, энергия потратилась, а карта осталась.
![После смены правила: Defend сыгран - энергия 0/3, блок 5, - но все сыгранные карты остались в руке, помечены [X]](/_next/image?url=%2Fvblog1_slayrule.jpg&w=3840&q=75)
В обычной игре, написанной на языке программирования, для этого пришлось бы лезть в код и пересобирать проект. Здесь это не нужно.
Так же в игру добавляется и то, чего в ней раньше не было вовсе. Например, золото - заведу его и опишу, как оно тратится:
/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.HandBribe (Подкуп) стоит тридцать золота и наносит пятнадцать урона - и сразу работает.

Может показаться, что это читы и что набирать такие команды неудобно. Но это не читы. Это правка логических фактов и данных, на которых держится вся игра - её объектов, свойств и механик. По сути это язык, на котором игра написана.
Учить этот язык необязательно. Можно попросить ИИ перевести обычную фразу в команды, которые понимает Nexus. Например:
give 999 goldВ переводе это просто «Добавь 999 золота».

ИИ думает, находит нужную команду и выполняет, и у нас 999 золота.
Можно сказать иначе, «золото 100» - тоже сработает. «Сделай меня богом» - ИИ выдаёт неуязвимость. Закончить ход, ударить, вылечиться - всё это можно сделать словами, движок понимает. И ничего из этого не заскриптовано, всё работает по-настоящему.
Планы
Команды я хочу упростить. Сейчас, чтобы создать тот же Fireball (Огненный шар), нужно около восьми команд, а думаю свести к трём-четырём. А в следующем ролике постараюсь показать что-то более наглядное - 2D-рендер.
Подробнее про движок и планы - в разделе Nexus.
Оговорка: Stone Age - игра студии. Slay the Spire, GURPS и Oregon Trail принадлежат их правообладателям и показаны только как демонстрация движка - эти сборки нигде не распространяются.
