
Cum funcționează Nexus
Complexitate plată
Abordarea clasică a jocurilor se construiește în jurul sistemelor rigide: fiecare mecanică - cod separat, fiecare legătură între mecanici - încă un cod. Chiar și sandbox-urile rămân un set de sisteme separate. Diversitatea crește, dar arhitectura nu se schimbă - și complexitatea dezvoltării crește odată cu ea.
Nexus funcționează altfel. Elementele de bază ale jocului - atomi din care se construiește totul. Adăugarea de noi mecanici nu crește complexitatea arhitecturală.
Milioane de elemente, dar arhitectura nu devine mai complexă din această cauză. Sistemul se scalează - la mecanici, reguli și lumi de orice complexitate.
Rețea semantică
Nexus stochează datele ca triplete (fapte) - afirmații simple în formatul "subiect → predicat → obiect". Într-un singur format se descriu atât faptele despre lume, cât și regulile mecanicilor:
- Măr → este → comestibil (fapt despre lume)
- Cerb → este → ierbivor (fapt despre lume)
- Lovitură → provoacă daune → 6 (regulă de mecanică)
- Otravă → ignoră armura → da (modificare de regulă)
- Iarbă → crește → la umiditate peste un anumit nivel (fapt despre lume)
- Sindicat → controlează → cartierul orașului (fapt despre lume)
Datele și regulile se înregistrează în același format, în același graf. Prin triplete se descrie totul: obiecte, proprietăți, stări, relații, acțiuni, tehnologii, magie. Aceasta e diferența principală față de abordările clasice, unde datele și logica trăiesc separat.
Lumea se bazează pe un număr mare de fapte: animale, tehnologii, obiecte, construcții, evenimente istorice - de la principii generale la detalii concrete.
Interpretorul
Interpretorul procesează tripletele și deduce consecințe din fapte:
- Măr → este → fruct
- Om → poate mânca → fructe
- Concluzie: omul poate mânca mere
Concluzia se construiește prin compararea faptelor. Lanțurile pot fi lungi. Iată un exemplu mai complex:
- Goblin → este → creatură
- Creatură → are → sănătate
- Concluzie: goblinul are sănătate
- Lovitură → provoacă → daune
- Daune → reduc → sănătatea
- Concluzie: lovitura poate răni goblinul
Am adăugat otravă cu predicat de daune - ea funcționează automat împotriva tuturor celor care au sănătate.
Interpretorul lucrează cu cereri formalizate, nu cu limbaj natural.
Graful de cunoștințe
Obiectele și proprietățile lumii trebuie descrise flexibil, fără hardcodare.
La bază - entitățile: personaje, obiecte, animale, organizații, nave, plante. La fiecare entitate se atașează fapte prin predicate.
Fiecare predicat exprimă o legătură sau o proprietate:
- "Este" (clasificare: goblin → creatură)
- "Are" (posesiune: creatura are sănătate)
- "Daune" (impact: lovitura provoacă 6)
- "Cost" (consum: lovitura costă 3 mana)
- "Absorbție" (apărare: scutul blochează 5)
- "Relație" (legătură: goblinul urăște oamenii)
Lovitura are predicatul Daune = 6. Scutul are predicatul Absorbție = 5. Motorul deduce: 6 - 5 = 1 trece în sănătate. O singură mecanică pentru orice sursă de daune și orice apărare - sabie, otravă, foc, vrajă.
Proprietățile formează o rețea, unde fiecare verigă e un fapt. Regulile și interacțiunile trăiesc ca date, nu sunt fixate în cod.
Pentru performanță se folosesc cache, indecși și detalierea adaptivă (LOD).
Reguli ca tipare
Datele și logica - nu sunt încă un joc. Pentru gameplay e nevoie de un strat de reguli. În dezvoltarea clasică, regulile sunt cod: fiecare mecanică e scrisă de un programator. În Nexus, regulile se descriu cu aceleași triplete ca și datele.
La bază - tipare universale, comune tuturor genurilor. Impact: sabia provoacă daune sănătății, rugina - rezistenței, inflația - puterii de cumpărare. Consum: lovitura costă mana, construcția - lemn, călătoria - combustibil. Absorbție: scutul blochează daunele, contraargumentul - acuzația, asigurarea - pierderea.
Designerul descrie ce se întâmplă, nu cum. "Lovitura provoacă 6 daune" - un singur triplet. Motorul determină singur: daunele trec prin absorbție, restul se aplică sănătății. Formula nu se scrie pentru fiecare acțiune - ea rezultă din tipar.
Tiparele se combină liber. Jocul de cărți folosește impact și absorbție. Strategia - consum și acumulare. RPG - le combină pe toate.
Un joc nou - înseamnă entități noi și combinații noi de tipare.
Agenți
O entitate poate fi descrisă ca agent - cu propria stare și reguli de comportament. Aceasta e o proprietate opțională. Inamicul din jocul de cărți alege singur acțiunea. Barbarii din strategie atacă când condițiile permit. Negustorul din RPG se deplasează între orașe. Agentul:
- Percepe lumea în limitele cunoștințelor sale
- Evaluează acțiunile disponibile
- Ia decizii bazându-se pe scopuri și regulile lumii
Agentul e descris cu aceleași triplete ca totul altceva. Fierarul știe să forjeze (fapt), are nevoie de minereu (fapt), minereu e în mină (fapt). Din aceste fapte interpretorul deduce acțiunea: merge la mină, extrage minereu. Mina s-a inundat - fierarul nu poate extrage minereu - caută un negustor - cumpără. Comportamentul a apărut din lanțul de fapte.
Scară fără pierderea logicii
Într-o simulare profundă, lumea poate conține un număr enorm de procese: de la migrația animalelor și creșterea orașelor la dinamica sistemelor stelare. A recalcula totul e imposibil și inutil - jucătorul percepe întotdeauna lumea subiectiv și în volum limitat.
Lumea e organizată ca o hartă din hexuri. Fiecare hex stochează proprietățile scării sale: la nivel planetar - climă și resurse, la nivel regional - orașe și drumuri. Clic pe hex deschide nivelul următor - înăuntru o nouă hartă cu proprietăți mai detaliate. Algoritmul e același la toate nivelurile - de la sistemul stelar la clădirea individuală.
Timp și spațiu
Pentru perioade lungi, sistemul poate folosi modele statistice în loc de calcul pas cu pas. Poți călători în timp fără a simula fiecare moment. De exemplu, în o mie de ani o pădure poate crește sau dispărea, un râu - să-și schimbe cursul, o așezare - să se extindă sau să fie abandonată. Tendințele și legăturile se păstrează.
Scalarea spațiului determină nivelul entităților și proceselor. La scară mare - climă, migrații, politică. La nivel local - entități individuale și proprietățile lor. Logica legăturilor cauză-efect e aceeași la toate nivelurile.
Abstracțiile cuprind o lume de orice scară: sat, planetă, galaxie. Detaliile apar când devin semnificative. Restul se descrie simplificat, dar cu păstrarea legăturilor.
Jucătorul poate aprofunda în structura lumii, studiind entitățile și navigând prin proprietățile lor - similar cu navigarea printr-un sistem de referință.
Materializarea lumii
Lumea se construiește pe măsură ce e explorată. Până când jucătorul nu a vizitat o locație, ea există doar ca date și reguli. Obiectele apar în momentul interacțiunii, nu sunt stocate dinainte.
Dincolo de observare, evenimentele le determină probabilitatea, nu simularea completă. Lumea pare integrală, deși detaliile se creează la cerere.
După interacțiunea cu o locație, starea ei se salvează și nu mai e recalculată.
Pe intervale lungi de timp funcționează tendințe statistice. După o mie de ani de la început, sistemul decide pe bază de probabilitate: ce specii supraviețuiesc, cum se schimbă clima, unde apar așezări.
Joc în rețea
Jocul în rețea funcționează pe același principiu. Serverul stochează datele, regulile și ceea ce jucătorii au descoperit deja.
Dacă mai mulți jucători sunt în aceeași zonă - serverul colectează starea comună și o sincronizează între ei.
În afara zonei de joc, lumea rămâne potențială - reguli și tendințe, fără detalii.
Arhitectura de bază a rețelei funcționează deja: fiecare jucător primește o sesiune izolată, la care alții se pot alătura prin cod. Acțiunile se sincronizează în timp real.
Arhitectura ca limbaj
Date, reguli, interfață și comportamentul agenților - un singur format. Entitățile nu se cunosc între ele, legăturile apar automat prin predicate comune.
Cum funcționează în practică? Pădurea e o entitate cu fapte: are lemn, e adăpost, e inflamabilă. Toporul are predicatul Tăiere. Tăierea acționează asupra lemnului. Focul acționează asupra inflamabilului. Seceta crește inflamabilitatea. Fiecare fapt - o linie. Pădurea nu știe de topoare, toporul nu știe de pădure. Legătura apare automat prin predicate comune. Am adăugat un tăietor laser cu predicatul Tăiere - funcționează asupra pădurii. Am adăugat bombardament planetar cu predicatul Foc - pădurea arde.
Dacă o situație de joc poate fi descrisă în cuvinte - ea funcționează în Nexus.
