
Як влаштований Nexus
Плоска складність
Класичний підхід до ігор будується навколо жорстких систем: кожна механіка - окремий код, кожен зв'язок між механіками - ще один код. Навіть пісочниці лишаються набором окремих систем. Різноманітність зростає, але архітектура не змінюється - і складність розробки зростає разом з нею.
Nexus влаштований інакше. Базові елементи гри - атоми, з яких будується все інше. Додавання нових механік не збільшує архітектурну складність.
Мільйони елементів, але архітектура від цього не ускладнюється. Система масштабується - до механік, правил і світів будь-якої складності.
Семантична мережа
Nexus зберігає дані як триплети (факти) - прості твердження формату "суб'єкт → предикат → об'єкт". В одному форматі описуються і факти про світ, і правила механік:
- Яблуко → є → їстівним (факт про світ)
- Олень → є → травоїдним (факт про світ)
- Удар → завдає шкоди → 6 (правило механіки)
- Отрута → ігнорує броню → так (модифікація правила)
- Трава → росте → при вологості вище певного рівня (факт про світ)
- Синдикат → контролює → район міста (факт про світ)
Дані і правила записуються в одному форматі, в одному графі. Через триплети описується все: об'єкти, властивості, стани, відносини, дії, технології, магія. Це головна відмінність від класичних підходів, де дані і логіка живуть окремо.
Світ стоїть на великій кількості фактів: тварини, технології, предмети, споруди, історичні події - від загальних принципів до конкретних деталей.
Інтерпретатор
Інтерпретатор обробляє триплети і виводить наслідки з фактів:
- Яблуко → є → фруктом
- Людина → може їсти → фрукти
- Висновок: людина може їсти яблука
Висновок будується зіставленням фактів. Ланцюжки можуть бути довгими. Ось приклад складніший:
- Гоблін → є → істотою
- Істота → має → здоров'я
- Висновок: у гобліна є здоров'я
- Удар → завдає → шкоди
- Шкода → знижує → здоров'я
- Висновок: удар може зашкодити гоблінові
Додали отруту з предикатом шкоди - вона автоматично діє на всіх, у кого є здоров'я.
Інтерпретатор працює з формалізованими запитами, не з природною мовою.
Граф знань
Об'єкти і властивості світу потрібно описувати гнучко, без хардкоду.
В основі - сутності: персонажі, предмети, тварини, організації, кораблі, рослини. До кожної сутності прив'язуються факти через предикати.
Кожен предикат виражає один зв'язок або одну властивість:
- "Є" (класифікація: гоблін → істота)
- "Має" (володіння: у істоти є здоров'я)
- "Шкода" (вплив: удар завдає 6)
- "Вартість" (витрата: удар коштує 3 мани)
- "Поглинання" (захист: щит блокує 5)
- "Ставлення" (зв'язок: гоблін ненавидить людей)
Удар має предикат Шкода = 6. Щит має предикат Поглинання = 5. Рушій виводить: 6 - 5 = 1 проходить у здоров'я. Одна механіка для будь-якого джерела шкоди і будь-якого захисту - меч, отрута, вогонь, заклинання.
Властивості утворюють мережу, де кожна ланка - один факт. Правила і взаємодії живуть як дані, а не зашиті в код.
Для продуктивності використовуються кешування, індекси та адаптивна деталізація (LOD).
Правила як патерни
Дані і логіка - ще не гра. Для геймплею потрібен шар правил. У класичній розробці правила - це код: кожна механіка написана програмістом. У Nexus правила описуються тими ж триплетами, що й дані.
В основі - універсальні патерни, спільні для всіх жанрів. Вплив: меч завдає шкоди здоров'ю, іржа - міцності, інфляція - купівельній спроможності. Витрата: удар коштує мани, споруда - деревини, подорож - палива. Поглинання: щит блокує шкоду, контраргумент - звинувачення, страховка - збиток.
Дизайнер описує що відбувається, а не як. "Удар завдає 6 шкоди" - один триплет. Рушій сам визначає: шкода проходить через поглинання, залишок іде у здоров'я. Формула не пишеться для кожної дії - вона випливає з патерну.
Патерни вільно поєднуються. Карткова гра використовує вплив і поглинання. Стратегія - витрату і накопичення. RPG - поєднує все разом.
Нова гра - це нові сутності і нові комбінації патернів.
Агенти
Сутність може бути описана як агент - з власним станом і правилами поведінки. Це опціональна властивість. Ворог у картковій грі сам обирає дію. Дикуни у стратегії атакують, коли умови дозволяють. Торговець у RPG переміщується між містами. Агент:
- Сприймає світ у межах своїх знань
- Оцінює доступні дії
- Приймає рішення, спираючись на цілі та правила світу
Агент описується тими ж триплетами, що й усе інше. Коваль знає кувати (факт), потрібна руда (факт), руда у шахті (факт). З цих фактів інтерпретатор виводить дію: іти до шахти, здобути руду. Шахту затопило - коваль не може здобути руду - шукає торговця - купує. Поведінка виникла з ланцюжка фактів.
Масштаб без втрати логіки
У глибокій симуляції світ може містити величезну кількість процесів: від міграції тварин і зростання міст до динаміки зоряних систем. Перераховувати все неможливо і непотрібно - гравець завжди сприймає світ суб'єктивно і в обмеженому обсязі.
Світ організований як карта з гексів. Кожен гекс зберігає властивості свого масштабу: на планетарному рівні - клімат і ресурси, на регіональному - міста і дороги. Клік по гексу розкриває наступний рівень - всередині нього нова карта з детальнішими властивостями. Алгоритм єдиний на всіх рівнях - від зоряної системи до окремої будівлі.
Час і простір
Для тривалих періодів система може використовувати статистичні моделі замість покрокового розрахунку. Можна переміщуватися у часі, не симулюючи кожен момент. Наприклад, за тисячу років ліс може вирости або зникнути, ріка - змінити русло, поселення - розростися або бути покинутим. Тенденції та зв'язки зберігаються.
Масштабування простору визначає рівень сутностей і процесів. При великому масштабі - клімат, міграції, політика. При локальному - окремі сутності та їхні властивості. Логіка причинно-наслідкових зв'язків єдина на всіх рівнях.
Абстракції вміщують світ будь-якого масштабу: село, планету, галактику. Деталі з'являються, коли стають значущими. Решта описується у спрощеному вигляді, але зі збереженням зв'язків.
Гравець може заглиблюватися в устрій світу, вивчаючи сутності і переходячи за їхніми властивостями - подібно до навігації по довідковій системі.
Матеріалізація світу
Світ будується в міру дослідження. Поки гравець не відвідав локацію, вона існує як дані і правила. Об'єкти з'являються у момент взаємодії, а не зберігаються заздалегідь.
Поза межами спостереження події визначає ймовірність, а не повна симуляція. Світ виглядає цілісним, хоча деталі створюються на запит.
Після взаємодії з локацією її стан зберігається і більше не перераховується.
На довгих відрізках часу працюють статистичні тенденції. Через тисячу років після початку система вирішує за ймовірністю: які види виживуть, як зміниться клімат, де з'являться поселення.
Гра по мережі
Мережева гра працює на тому ж принципі. Сервер зберігає дані, правила і те, що гравці вже виявили.
Якщо кілька гравців в одній області - сервер збирає спільний стан і синхронізує його між ними.
Поза областю гри світ залишається потенційним - правила і тенденції, без деталей.
Базова мережева архітектура вже працює: кожен гравець отримує ізольовану сесію, до якої інші можуть приєднатися за кодом. Дії синхронізуються у реальному часі.
Архітектура як мова
Дані, правила, інтерфейс і поведінка агентів - один формат. Сутності не знають одна про одну, зв'язки виникають автоматично через спільні предикати.
Як це працює на практиці? Ліс - це сутність з фактами: має деревину, є укриттям, горючий. Сокира має предикат Рубка. Рубка діє на деревину. Вогонь діє на горюче. Засуха підвищує горючість. Кожен факт - один рядок. Ліс не знає про сокири, сокира не знає про ліс. Зв'язок виникає автоматично через спільні предикати. Додали лазерний різак з предикатом Рубка - він працює проти лісу. Додали планетарне бомбардування з предикатом Вогонь - ліс горить.
Якщо ігрову ситуацію можна описати словами - вона працює у Nexus.
