Architektura silnika Nexus

Jak działa Nexus

Płaska złożoność

Klasyczne podejście do gier opiera się na sztywnych systemach: każda mechanika to osobny kod, każde powiązanie między mechanikami to kolejny kod. Nawet sandboxy pozostają zestawem osobnych systemów. Różnorodność rośnie, ale architektura się nie zmienia - i złożoność produkcji rośnie razem z nią.

Nexus działa inaczej. Podstawowe elementy gry to atomy, z których buduje się wszystko. Dodawanie nowych mechanik nie zwiększa architekturalnej złożoności.

Miliony elementów, ale architektura się od tego nie komplikuje. System skaluje się - do mechanik, reguł i światów o dowolnej złożoności.

Sieć semantyczna

Nexus przechowuje dane jako trójki (fakty) - proste stwierdzenia w formacie "podmiot → predykat → obiekt". W jednym formacie opisywane są zarówno fakty o świecie, jak i reguły mechanik:

  • Jabłko → jest → jadalne (fakt o świecie)
  • Jeleń → jest → roślinożercą (fakt o świecie)
  • Cios → zadaje obrażenia → 6 (reguła mechaniki)
  • Trucizna → ignoruje pancerz → tak (modyfikacja reguły)
  • Trawa → rośnie → przy wilgotności powyżej określonego poziomu (fakt o świecie)
  • Syndykat → kontroluje → dzielnicę miasta (fakt o świecie)

Dane i reguły zapisywane są w jednym formacie, w jednym grafie. Przez trójki opisuje się wszystko: obiekty, właściwości, stany, relacje, działania, technologie, magię. To główna różnica w stosunku do klasycznych podejść, gdzie dane i logika żyją oddzielnie.

Świat opiera się na dużej liczbie faktów: zwierzęta, technologie, przedmioty, budynki, wydarzenia historyczne - od ogólnych zasad po konkretne detale.

Interpreter

Interpreter przetwarza trójki i wyprowadza wnioski z faktów:

  • Jabłko → jest → owocem
  • Człowiek → może jeść → owoce
  • Wniosek: człowiek może jeść jabłka

Wnioskowanie opiera się na zestawianiu faktów. Łańcuchy mogą być długie. Oto trochę bardziej złożony przykład:

  • Goblin → jest → istotą
  • Istota → posiada → zdrowie
  • Wniosek: goblin posiada zdrowie
  • Cios → zadaje → obrażenia
  • Obrażenia → obniżają → zdrowie
  • Wniosek: cios może zranić goblina

Dodaliśmy truciznę z predykatem obrażeń - automatycznie działa na wszystko, co ma zdrowie.

Interpreter pracuje z formalnymi zapytaniami, nie z językiem naturalnym.

Graf wiedzy

Obiekty i właściwości świata trzeba opisywać elastycznie, bez hardkodu.

U podstaw leżą byty: postacie, przedmioty, zwierzęta, organizacje, statki, rośliny. Do każdego bytu przypisywane są fakty przez predykaty.

Każdy predykat wyraża jedno powiązanie lub jedną właściwość:

  • "Jest" (klasyfikacja: goblin → istota)
  • "Posiada" (posiadanie: istota ma zdrowie)
  • "Obrażenia" (oddziaływanie: cios zadaje 6)
  • "Koszt" (wydatek: cios kosztuje 3 many)
  • "Pochłanianie" (obrona: tarcza blokuje 5)
  • "Relacja" (powiązanie: goblin nienawidzi ludzi)

Cios ma predykat Obrażenia = 6. Tarcza ma predykat Pochłanianie = 5. Silnik wnioskuje: 6 - 5 = 1 trafia w zdrowie. Jedna mechanika dla dowolnego źródła obrażeń i dowolnej obrony - miecz, trucizna, ogień, zaklęcie.

Właściwości tworzą sieć, w której każde ogniwo to jeden fakt. Reguły i interakcje żyją jako dane, a nie są wbudowane w kod.

Dla wydajności stosowane są cache, indeksy i adaptacyjna szczegółowość (LOD).

Reguły jako wzorce

Dane i logika to jeszcze nie gra. Do rozgrywki potrzebna jest warstwa reguł. W klasycznej produkcji reguły to kod: każda mechanika napisana przez programistę. W Nexus reguły opisywane są tymi samymi trójkami co dane.

U podstaw leżą uniwersalne wzorce, wspólne dla wszystkich gatunków. Oddziaływanie: miecz zadaje obrażenia zdrowiu, rdza - wytrzymałości, inflacja - sile nabywczej. Wydatek: cios kosztuje manę, budowa - drewno, podróż - paliwo. Pochłanianie: tarcza blokuje obrażenia, kontrargument - oskarżenie, ubezpieczenie - stratę.

Projektant opisuje co się dzieje, a nie jak. "Cios zadaje 6 obrażeń" - jedna trójka. Silnik sam ustala: obrażenia przechodzą przez pochłanianie, reszta trafia w zdrowie. Formuła nie jest pisana dla każdego działania - wynika ze wzorca.

Wzorce swobodnie się łączą. Gra karciana używa oddziaływania i pochłaniania. Strategia - wydatku i gromadzenia. RPG - łączy wszystko razem.

Nowa gra to nowe byty i nowe kombinacje wzorców.

Agenci

Byt może być opisany jako agent - z własnym stanem i regułami zachowania. To opcjonalna właściwość. Wróg w grze karcianej sam wybiera działanie. Dzicy w strategii atakują, gdy warunki na to pozwalają. Kupiec w RPG przemieszcza się między miastami. Agent:

  • Postrzega świat w granicach swojej wiedzy
  • Ocenia dostępne działania
  • Podejmuje decyzje, opierając się na celach i regułach świata

Agent opisywany jest tymi samymi trójkami co wszystko inne. Kowal umie kuć (fakt), potrzebna ruda (fakt), ruda jest w kopalni (fakt). Z tych faktów interpreter wyprowadza działanie: iść do kopalni, wydobyć rudę. Kopalnię zalało - kowal nie może wydobyć rudy - szuka kupca - kupuje. Zachowanie powstało z łańcucha faktów.

Skala bez utraty logiki

W głębokiej symulacji świat może zawierać ogromną liczbę procesów: od migracji zwierząt i rozwoju miast po dynamikę układów gwiezdnych. Przeliczanie wszystkiego jest niemożliwe i niepotrzebne - gracz zawsze postrzega świat subiektywnie i w ograniczonym zakresie.

Świat zorganizowany jest jako mapa z heksów. Każdy heks przechowuje właściwości swojej skali: na poziomie planetarnym - klimat i zasoby, na regionalnym - miasta i drogi. Kliknięcie w heks odsłania następny poziom - wewnątrz niego nowa mapa z bardziej szczegółowymi właściwościami. Algorytm jest ten sam na wszystkich poziomach - od układu gwiezdnego po pojedynczy budynek.

Czas i przestrzeń

Dla długich okresów system może stosować modele statystyczne zamiast obliczeń krokowych. Można przemieszczać się w czasie bez symulowania każdego momentu. Na przykład w ciągu tysiąca lat las może wyrosnąć lub zniknąć, rzeka - zmienić koryto, osada - rozrosnąć się lub zostać porzucona. Tendencje i powiązania zostają zachowane.

Skalowanie przestrzeni określa poziom bytów i procesów. Przy dużej skali - klimat, migracje, polityka. Przy lokalnej - poszczególne byty i ich właściwości. Logika przyczynowo-skutkowa jest jednolita na wszystkich poziomach.

Abstrakcje pomieszczą świat dowolnej skali: wioskę, planetę, galaktykę. Szczegóły pojawiają się, gdy stają się istotne. Reszta opisywana jest w uproszczonej formie, ale z zachowaniem powiązań.

Gracz może zagłębiać się w budowę świata, badając byty i przechodząc po ich właściwościach - podobnie jak nawigacja w systemie encyklopedycznym.

Materializacja świata

Świat budowany jest w miarę eksploracji. Dopóki gracz nie odwiedził lokacji, istnieje ona jako dane i reguły. Obiekty pojawiają się w momencie interakcji, a nie są przechowywane z góry.

Poza zasięgiem obserwacji wydarzenia określa prawdopodobieństwo, a nie pełna symulacja. Świat wygląda na spójny, choć szczegóły tworzone są na żądanie.

Po interakcji z lokacją jej stan jest zapisywany i nie jest już przeliczany.

Na długich odcinkach czasu działają tendencje statystyczne. Po tysiącu lat od początku system rozstrzyga na podstawie prawdopodobieństwa: jakie gatunki przetrwają, jak zmieni się klimat, gdzie powstaną osady.

Gra sieciowa

Gra sieciowa działa na tej samej zasadzie. Serwer przechowuje dane, reguły i to, co gracze już odkryli.

Jeśli kilku graczy znajduje się w tym samym obszarze - serwer buduje wspólny stan i synchronizuje go między nimi.

Poza obszarem gry świat pozostaje potencjalny - reguły i tendencje, bez detali.

Podstawowa architektura sieciowa już działa: każdy gracz otrzymuje izolowaną sesję, do której inni mogą dołączyć za pomocą kodu. Działania synchronizowane są w czasie rzeczywistym.

Architektura jako język

Dane, reguły, interfejs i zachowanie agentów - jeden format. Byty nie wiedzą o sobie nawzajem, powiązania powstają automatycznie przez wspólne predykaty.

Jak to działa w praktyce? Las to byt z faktami: ma drewno, jest schronieniem, jest palny. Topór ma predykat Rąbanie. Rąbanie działa na drewno. Ogień działa na palne. Susza zwiększa palność. Każdy fakt to jeden wiersz. Las nie wie o toporach, topór nie wie o lesie. Powiązanie powstaje automatycznie przez wspólne predykaty. Dodaliśmy laserowy palnik z predykatem Rąbanie - działa na las. Dodaliśmy bombardowanie orbitalne z predykatem Ogień - las płonie.

Jeśli sytuację w grze można opisać słowami - działa ona w Nexus.