Nexus इंजन की वास्तुकला

Nexus कैसे बना है

समतल जटिलता

गेम के प्रति पारंपरिक दृष्टिकोण कठोर सिस्टम पर बना है: हर मैकेनिक - अलग कोड, मैकेनिक्स के बीच हर संबंध - एक और कोड। सैंडबॉक्स भी अलग-अलग सिस्टम का संग्रह बने रहते हैं। विविधता बढ़ती है, लेकिन वास्तुकला नहीं बदलती - और डेवलपमेंट की जटिलता भी बढ़ती जाती है।

Nexus अलग तरह से बना है। गेम के बुनियादी तत्व - परमाणु हैं, जिनसे बाक़ी सब बनता है। नई मैकेनिक्स जोड़ने से वास्तुकला की जटिलता नहीं बढ़ती।

लाखों तत्व, लेकिन वास्तुकला इससे जटिल नहीं होती। सिस्टम स्केल करता है - किसी भी जटिलता की मैकेनिक्स, नियमों और दुनिया तक।

सिमैंटिक नेटवर्क

Nexus डेटा को ट्रिपलेट्स (तथ्यों) के रूप में रखता है - "विषय → विधेय → वस्तु" प्रारूप के सरल कथन। एक ही प्रारूप में दुनिया के तथ्य और मैकेनिक्स के नियम दोनों वर्णित होते हैं:

  • सेब → है → खाने योग्य (दुनिया का तथ्य)
  • हिरण → है → शाकाहारी (दुनिया का तथ्य)
  • प्रहार → नुक़सान पहुँचाता है → 6 (मैकेनिक का नियम)
  • ज़हर → कवच नज़रअंदाज़ करता है → हाँ (नियम का संशोधन)
  • घास → उगती है → एक निश्चित स्तर से अधिक नमी पर (दुनिया का तथ्य)
  • सिंडिकेट → नियंत्रित करता है → शहर का ज़िला (दुनिया का तथ्य)

डेटा और नियम एक ही प्रारूप में, एक ही ग्राफ़ में लिखे जाते हैं। ट्रिपलेट्स से सब कुछ वर्णित होता है: वस्तुएँ, गुण, अवस्थाएँ, संबंध, कार्य, प्रौद्योगिकियाँ, जादू। यह पारंपरिक दृष्टिकोणों से मुख्य अंतर है, जहाँ डेटा और लॉजिक अलग-अलग रहते हैं।

दुनिया बड़ी मात्रा में तथ्यों पर टिकी है: जानवर, प्रौद्योगिकियाँ, वस्तुएँ, इमारतें, ऐतिहासिक घटनाएँ - सामान्य सिद्धांतों से लेकर विशिष्ट विवरणों तक।

इंटरप्रेटर

इंटरप्रेटर ट्रिपलेट्स प्रोसेस करता है और तथ्यों से निष्कर्ष निकालता है:

  • सेब → है → फल
  • इंसान → खा सकता है → फल
  • निष्कर्ष: इंसान सेब खा सकता है

निष्कर्ष तथ्यों के मिलान से बनता है। श्रृंखलाएँ लंबी हो सकती हैं। एक थोड़ा जटिल उदाहरण:

  • गॉब्लिन → है → प्राणी
  • प्राणी → के पास है → स्वास्थ्य
  • निष्कर्ष: गॉब्लिन के पास स्वास्थ्य है
  • प्रहार → पहुँचाता है → नुक़सान
  • नुक़सान → घटाता है → स्वास्थ्य
  • निष्कर्ष: प्रहार गॉब्लिन को हानि पहुँचा सकता है

नुक़सान के विधेय के साथ ज़हर जोड़ा - वह स्वचालित रूप से हर उस इकाई पर काम करता है जिसके पास स्वास्थ्य है।

इंटरप्रेटर औपचारिक अनुरोधों के साथ काम करता है, प्राकृतिक भाषा से नहीं।

ज्ञान ग्राफ़

दुनिया की वस्तुओं और गुणों को हार्डकोड के बिना, लचीले ढंग से वर्णित करना ज़रूरी है।

आधार में इकाइयाँ हैं: चरित्र, वस्तुएँ, जानवर, संगठन, जहाज़, पौधे। हर इकाई से विधेयों के ज़रिए तथ्य जुड़ते हैं।

हर विधेय एक संबंध या एक गुण व्यक्त करता है:

  • "है" (वर्गीकरण: गॉब्लिन → प्राणी)
  • "के पास है" (स्वामित्व: प्राणी के पास स्वास्थ्य है)
  • "नुक़सान" (प्रभाव: प्रहार 6 पहुँचाता है)
  • "लागत" (ख़र्च: प्रहार की लागत 3 माना)
  • "अवशोषण" (रक्षा: ढाल 5 रोकती है)
  • "संबंध" (रिश्ता: गॉब्लिन इंसानों से नफ़रत करता है)

प्रहार में नुक़सान विधेय = 6। ढाल में अवशोषण विधेय = 5। इंजन निष्कर्ष निकालता है: 6 - 5 = 1 स्वास्थ्य में जाता है। नुक़सान के किसी भी स्रोत और किसी भी रक्षा के लिए एक ही मैकेनिक - तलवार, ज़हर, आग, जादू।

गुण एक नेटवर्क बनाते हैं, जहाँ हर कड़ी एक तथ्य है। नियम और इंटरैक्शन डेटा के रूप में रहते हैं, कोड में हार्डकोड नहीं।

प्रदर्शन के लिए कैशिंग, इंडेक्स और अनुकूली विस्तार (LOD) का उपयोग होता है।

पैटर्न के रूप में नियम

डेटा और लॉजिक - अभी गेम नहीं। गेमप्ले के लिए नियमों की परत चाहिए। पारंपरिक डेवलपमेंट में नियम कोड हैं: हर मैकेनिक प्रोग्रामर द्वारा लिखी जाती है। Nexus में नियम उन्हीं ट्रिपलेट्स से वर्णित होते हैं जो डेटा के लिए हैं।

आधार में सार्वभौमिक पैटर्न हैं, सभी शैलियों के लिए सामान्य। प्रभाव: तलवार स्वास्थ्य को नुक़सान पहुँचाती है, जंग टिकाऊपन को, मुद्रास्फीति क्रय शक्ति को। ख़र्च: प्रहार में माना लगता है, निर्माण में लकड़ी, यात्रा में ईंधन। अवशोषण: ढाल नुक़सान रोकती है, प्रतिवाद आरोप रोकता है, बीमा नुक़सान रोकता है।

डिज़ाइनर बताता है क्या होता है, कैसे नहीं। "प्रहार 6 नुक़सान पहुँचाता है" - एक ट्रिपलेट। इंजन ख़ुद तय करता है: नुक़सान अवशोषण से गुज़रता है, बाक़ी स्वास्थ्य में जाता है। हर कार्य के लिए अलग फ़ॉर्मूला नहीं लिखा जाता - वह पैटर्न से निकलता है।

पैटर्न स्वतंत्र रूप से मिलाए जा सकते हैं। कार्ड गेम प्रभाव और अवशोषण इस्तेमाल करता है। रणनीति - ख़र्च और संचय। RPG - सब कुछ मिलाता है।

नया गेम - नई इकाइयाँ और पैटर्न के नए संयोजन।

एजेंट

इकाई को एजेंट के रूप में वर्णित किया जा सकता है - अपनी स्थिति और व्यवहार के नियमों के साथ। यह वैकल्पिक गुण है। कार्ड गेम में दुश्मन ख़ुद कार्रवाई चुनता है। रणनीति में बर्बर हमला करते हैं जब स्थितियाँ अनुमति देती हैं। RPG में व्यापारी शहरों के बीच चलता है। एजेंट:

  • अपने ज्ञान की सीमा में दुनिया को समझता है
  • उपलब्ध कार्यों का मूल्यांकन करता है
  • लक्ष्यों और दुनिया के नियमों के आधार पर निर्णय लेता है

एजेंट उन्हीं ट्रिपलेट्स से वर्णित होता है जो बाक़ी सब के लिए हैं। लोहार जानता है ढलाई करना (तथ्य), अयस्क चाहिए (तथ्य), अयस्क खदान में है (तथ्य)। इन तथ्यों से इंटरप्रेटर कार्रवाई निकालता है: खदान जाओ, अयस्क निकालो। खदान डूब गई - लोहार अयस्क नहीं निकाल सकता - व्यापारी ढूँढता है - ख़रीदता है। व्यवहार तथ्यों की श्रृंखला से पैदा हुआ।

तर्क खोए बिना पैमाना

गहरे सिमुलेशन में दुनिया में बहुत बड़ी संख्या में प्रक्रियाएँ हो सकती हैं: जानवरों के प्रवास और शहरों के विकास से लेकर तारा प्रणालियों की गतिकी तक। सब कुछ दोबारा गणना करना असंभव और अनावश्यक है - खिलाड़ी हमेशा दुनिया को व्यक्तिपरक रूप से और सीमित मात्रा में अनुभव करता है।

दुनिया हेक्स से बने नक़्शे के रूप में व्यवस्थित है। हर हेक्स अपने पैमाने के गुण रखता है: ग्रहीय स्तर पर - जलवायु और संसाधन, क्षेत्रीय स्तर पर - शहर और सड़कें। हेक्स पर क्लिक करने से अगला स्तर खुलता है - उसके अंदर अधिक विस्तृत गुणों वाला नया नक़्शा। एल्गोरिथम सभी स्तरों पर समान है - तारा प्रणाली से लेकर अलग इमारत तक।

समय और स्थान

लंबी अवधियों के लिए सिस्टम चरणबद्ध गणना की जगह सांख्यिकीय मॉडल इस्तेमाल कर सकता है। हर क्षण का सिमुलेशन किए बिना समय में आगे बढ़ा जा सकता है। उदाहरण, हज़ार वर्षों में जंगल बढ़ सकता है या ग़ायब हो सकता है, नदी रास्ता बदल सकती है, बस्ती फैल या उजड़ सकती है। प्रवृत्तियाँ और संबंध बने रहते हैं।

स्थान का पैमाना इकाइयों और प्रक्रियाओं का स्तर तय करता है। बड़े पैमाने पर - जलवायु, प्रवास, राजनीति। स्थानीय पर - अलग-अलग इकाइयाँ और उनके गुण। कारण-प्रभाव संबंधों का तर्क सभी स्तरों पर एक ही है।

अमूर्तन किसी भी पैमाने की दुनिया समेट सकते हैं: गाँव, ग्रह, आकाशगंगा। विवरण तब प्रकट होते हैं जब वे महत्वपूर्ण हो जाते हैं। बाक़ी सरलीकृत रूप में वर्णित होता है, लेकिन संबंध बनाए रखते हुए।

खिलाड़ी दुनिया की संरचना में गहराई से जा सकता है, इकाइयों का अध्ययन करते हुए और उनके गुणों के माध्यम से आगे बढ़ते हुए - जैसे एक संदर्भ प्रणाली में नेविगेशन।

दुनिया का साकार होना

दुनिया खोज के साथ-साथ बनती है। जब तक खिलाड़ी ने स्थान नहीं देखा, वह डेटा और नियमों के रूप में मौजूद है। वस्तुएँ बातचीत के क्षण में प्रकट होती हैं, पहले से संग्रहित नहीं।

अवलोकन के बाहर घटनाएँ संभावना से तय होती हैं, पूर्ण सिमुलेशन से नहीं। दुनिया अखंड दिखती है, हालाँकि विवरण माँग पर बनते हैं।

स्थान के साथ बातचीत के बाद उसकी स्थिति सुरक्षित हो जाती है और दोबारा गणना नहीं होती।

लंबे समय के अंतराल पर सांख्यिकीय प्रवृत्तियाँ काम करती हैं। शुरुआत के हज़ार साल बाद सिस्टम संभावना से तय करता है: कौन सी प्रजातियाँ बचेंगी, जलवायु कैसे बदलेगी, बस्तियाँ कहाँ बनेंगी।

नेटवर्क गेम

नेटवर्क गेम उसी सिद्धांत पर काम करता है। सर्वर डेटा, नियम और खिलाड़ियों द्वारा खोजी गई चीज़ें रखता है।

अगर कई खिलाड़ी एक क्षेत्र में हैं - सर्वर सामान्य स्थिति बनाता है और उन्हें सिंक्रोनाइज़ करता है।

खेल क्षेत्र के बाहर दुनिया संभावित बनी रहती है - नियम और प्रवृत्तियाँ, बिना विवरण।

बुनियादी नेटवर्क वास्तुकला पहले से काम कर रही है: हर खिलाड़ी को अलग सत्र मिलता है, जिसमें दूसरे कोड से जुड़ सकते हैं। कार्रवाइयाँ रियल टाइम में सिंक्रोनाइज़ होती हैं।

भाषा के रूप में वास्तुकला

डेटा, नियम, इंटरफ़ेस और एजेंटों का व्यवहार - एक प्रारूप। इकाइयाँ एक-दूसरे के बारे में नहीं जानतीं, संबंध स्वचालित रूप से साझा विधेयों के ज़रिए बनते हैं।

यह व्यवहार में कैसे काम करता है? जंगल एक इकाई है तथ्यों के साथ: लकड़ी है, आश्रय है, ज्वलनशील है। कुल्हाड़ी में कटाई विधेय है। कटाई लकड़ी पर काम करती है। आग ज्वलनशील पर काम करती है। सूखा ज्वलनशीलता बढ़ाता है। हर तथ्य एक पंक्ति है। जंगल को कुल्हाड़ियों के बारे में पता नहीं, कुल्हाड़ी को जंगल के बारे में पता नहीं। संबंध स्वचालित रूप से साझा विधेयों से बनता है। कटाई विधेय वाला लेज़र कटर जोड़ा - वह जंगल पर काम करता है। आग विधेय वाली ग्रहीय बमबारी जोड़ी - जंगल जलता है।

अगर गेम की स्थिति शब्दों में वर्णित की जा सकती है - वह Nexus में काम करती है।