Game Mode के नियमसेट लिखना
नियमसेट Game Mode को बताता है कि टेबलटॉप सिस्टम कैसे चलता है: चेक में कौन से डाइस रोल होते हैं, कैरेक्टर शीट पर क्या होता है, कौन से संसाधन खर्च होते हैं और आराम क्या लौटाता है। अपना सिस्टम Game Mode में लाने और उसे साझा करने के लिए नियमसेट लिखें। किसी और के बनाए नियमसेट से खेलने के लिए नियमसेट के साथ खेलना देखें।
नियमसेट एक JSON फ़ाइल है। यह डेटा है, कोड नहीं, इसलिए इसमें कुछ नहीं चलता और इसे इंपोर्ट करने से आपके कंप्यूटर को कोई नुकसान नहीं हो सकता। किसी और की फ़ाइल इंपोर्ट करने से पहले उसका Game Master टेक्स्ट पढ़ें, क्योंकि नियमसेट इस्तेमाल करने वाले हर गेम में वह टेक्स्ट मॉडल को भेजा जाता है।
नियमसेट शुरू करें
- अपने सिस्टम के रोल करने के तरीके से मेल खाती उदाहरण फ़ाइल कॉपी करें:
ember-roads.jsonतीन स्टैट वाला छोटा 2d6 सिस्टम है। यह दिखाता है कि फ़ॉर्मैट d20 या छह एबिलिटी मानकर नहीं चलता।gravewatch.jsonतीन रेटिंग और छह पेशों वाला, दस फलक वाले डाइस का छोटा पूल है।- आधिकारिक 5e (SRD 5.1) पैकेज, पूरे आकार का उदाहरण। Agent Organizer इसी के
ruleset.jsonऔरcatalogs/इंस्टॉल करता है।
idबदलकर अपना रखें। ID में छोटे अक्षर, अंक और अकेले हाइफ़न होते हैं, जैसेember-roads।- अपनी कॉपी Notepad या VS Code जैसे टेक्स्ट एडिटर में खोलें, और उसे ऐसे नाम से सेव करें जो
.jsonपर खत्म हो। सबसे पहलेnameबदलें, फिरsheetमें एबिलिटी के नाम, फिरrestsऔरgmटेक्स्ट। फ़ाइल के भाग में हर कुंजी दी गई है, और रेफ़रेंस पेज में उन्हें समझाने वाले पेजों के लिंक हैं। - इसे इंपोर्ट करें (अपना नियमसेट आज़माएँ देखें)। कुछ भी सेव करने से पहले इंपोर्ट पूरी फ़ाइल जाँचता है और लाइन-दर-लाइन बताता है कि क्या गलत है।
- नया गेम बनाएँ (Game Mode: शुरुआत देखें), Rules (नियम) में अपना नियमसेट चुनें और कुछ चेक खेलें।
अगर यह काम न करे, तो समस्या-समाधान देखें।
टाइप करते समय एडिटर से मदद पाने के लिए फ़ाइल की बाहरी ब्रेसेज़ के अंदर पहली लाइन के रूप में यह जोड़ें। यह एडिटर को JSON Schema की ओर ले जाता है:
"$schema": "https://raw.githubusercontent.com/Pasta-Devs/Marinara-Engine/staging/docs/extending/ruleset.schema.json",स्कीमा गलत लिखी कुंजियाँ और गलत टाइप पकड़ता है। वह यह नहीं जाँच सकता कि नाम मौजूद चीज़ों की ओर इशारा करते हैं, जैसे स्किल में बताई गई एबिलिटी। यह जाँच इंपोर्ट करता है। अपने लिए नोट छोड़ने के लिए किसी भी ऑब्जेक्ट में "$comment": "..." लाइन जोड़ सकते हैं। Engine उसे अनदेखा करता है।
नियमसेट क्या कर सकता है और क्या नहीं
नियमसेट ऐसी यांत्रिकी के खाली हिस्से भरता है जिसे Engine पहले से जानता है। Engine चेक हल करने के पाँच तरीके जानता है, और आपकी फ़ाइल resolution.kind से उनमें से एक चुनती है:
dice-sum: कुछ डाइस रोल करें, शीट की संख्याएँ जोड़ें और कठिनाई तक पहुँचें या उससे आगे जाएँ। इसमें d20 सिस्टम, 2d6 में स्टैट जोड़ने वाले सिस्टम और कई दूसरे सिस्टम आते हैं।dice-pool: कैरेक्टर की अपनी संख्या जितने डाइस फेंकें और लक्ष्य तक पहुँचने वाले डाइस गिनें। इसमें वे सिस्टम आते हैं जिनमें रेटिंग बोनस के बजाय मुट्ठी भर डाइस होती है।dice-highest: पूल फेंकें और उसका सबसे ऊँचा डाइस पढ़ें, या सबसे ऊँचे कुछ डाइस जोड़ें। इसमें Blades in the Dark और Trophy Dark आते हैं।roll-against: शीट की संख्या के बराबर या उससे नीचे (या ऊपर) रोल करें। इसमें प्रतिशत वाली स्किल और GURPS के चेक आते हैं।symbol-pool: नैरेटिव डाइस बनाएँ और अपग्रेड करें, फिर विरोधी प्रतीक रद्द करें। इसमें Genesys के चेक आते हैं, और Capability API 1.382 से उसकी लड़ाइयाँ भी।
पाँचों का पूरा ब्योरा हल करने के प्रकार में है।
जो यांत्रिकी इन रूपों में नहीं आती, जैसे एक-दूसरे के विरुद्ध पूल, वह नियमसेट फ़ाइल में नहीं लिखी जा सकती। उसके लिए Engine के अंदर हल करने का नया प्रकार चाहिए, जो टेस्ट के साथ कोड कंट्रिब्यूशन है। आपके सिस्टम को ऐसा प्रकार चाहिए तो Engine रिपॉज़िटरी में फ़ीचर रिक्वेस्ट खोलें और कुछ पूरे हल किए हुए रोल से यांत्रिकी समझाएँ। यही रोल टेस्ट बनते हैं।
Game Mode लड़ाई को या तो Marinara के अपने युद्ध सिस्टम से हल करता है या आपके नियमसेट के नियमों से। वैकल्पिक battle ब्लॉक आपकी कैरेक्टर शीट की संख्याएँ Marinara के युद्ध सिस्टम को देता है: लड़ाइयाँ देखें। वैकल्पिक combat ब्लॉक बताता है कि नियमसेट खुद लड़ाई कैसे हल करता है: युद्ध देखें। गेम की Combat Preference (लड़ाई की पसंद) Classic प्रस्तुति चुनती है या, नियमसेट में दूरी तय हो तो, Tactical युद्धक्षेत्र। नियमसेट combat.styles से तय कर सकता है कि उसके गेम इनमें से कौन से तरीके इस्तेमाल करें (गेम किन तरीकों से खेला जा सकता है देखें)।
फ़ाइल के भाग
| कुंजी | इसमें क्या है |
schemaVersion | हमेशा 1। |
id, version | Engine के लिए आपके नियमसेट का नाम, और हर बदलाव प्रकाशित करते समय बढ़ाया जाने वाला पूर्णांक। |
name | सेटअप विज़ार्ड में खिलाड़ियों को दिखने वाला नाम। |
edition | वैकल्पिक। यह कौन सा संस्करण या ड्राफ़्ट है, इसकी एक लाइन। |
license | वैकल्पिक। SPDX ID और आपके स्रोत के लिए ज़रूरी श्रेय टेक्स्ट। |
coverage | नियमसेट क्या सँभालता है, और सेटअप विज़ार्ड में दिखने वाला एक लाइन का सारांश। |
resolution | चेक या सेव कैसे रोल होता है। |
sheet | कैरेक्टर शीट की सारी चीज़ें। |
rests | हर तरह का आराम क्या लौटाता और क्या साफ़ करता है। |
gm | Game Master मॉडल को दिया जाने वाला टेक्स्ट, और हर कैरेक्टर के लिए उसे दिखने वाले शीट मान। |
catalogs | वैकल्पिक। शीट एडिटर की तैयार एंट्री, ताकि खिलाड़ी लंबी सूचियाँ हाथ से न लिखें। |
items | वैकल्पिक। वे शब्द जिनमें आपके आइटम लिखे जाते हैं: श्रेणियाँ, दुर्लभता, स्टैट, स्लॉट, पैसे। |
battle | वैकल्पिक। बैटल शीट से क्या पढ़ सकती है और बाद में क्या वापस लिखती है। |
combat | वैकल्पिक। आपके अपने नियमों से लड़ाई कैसे हल होती है, और फिर बैटल स्क्रीन क्या चलाती है। |
layers | वैकल्पिक। आपके नियमसेट के रूपांतर, जिन्हें खिलाड़ी गेम बनाते समय चालू करता है। |
फ़ाइल अधिकतम 512 KB हो सकती है (Capability API 1.340 से पहले 256 KB)। प्रॉम्प्ट में पहुँचने वाले टेक्स्ट (नाम, लेबल, Game Master टेक्स्ट) में लाइन ब्रेक, वर्ग ब्रैकेट या दोहरे कर्ली ब्रेसेज़ नहीं हो सकते।
शीट के अंदर के ID (एबिलिटी, स्किल, फ़ील्ड, पूल वगैरह) अक्षर से शुरू होते हैं और उनमें छोटे अक्षर, अंक और अंडरस्कोर होते हैं, जैसे grit_max।
रेफ़रेंस पेज
इस पेज में नियमसेट शुरू करना, आज़माना और साझा करना बताया गया है। बाकी पेज एक-एक विषय पर हैं:
- नियमसेट के चेक: हल करने के पाँच प्रकार, नतीजे के बैंड, अपने अलग तरीके से रोल होने वाले चेक, और रोल बदलने वाले खर्च या चार्म।
- नियमसेट की शीट: एबिलिटी, स्किल, फ़ील्ड और सूचियाँ, लाइव स्टेट, घाव ट्रैक, पेनल्टी, आराम, Game Master टेक्स्ट, पार्टी की शीट और प्रोग्रेस क्लॉक।
- नियमसेट के कैटलॉग: वे तैयार एंट्री जो शीट एडिटर पिकर में देता है।
- नियमसेट की एंट्री की यांत्रिकी: कैटलॉग एंट्री का
mechanicsब्लॉक, जिसे चेक, आराम और लड़ाइयाँ पढ़ते हैं। - नियमसेट का कैरेक्टर बिल्डर: नस्ल और क्लास से लेकर स्कोर, दक्षताओं, स्पेल और सामान तक, चरणों में कैरेक्टर बनाना।
- नियमसेट के आइटम: श्रेणियाँ, हथियार, कवच, गोला-बारूद, लूट, पैसे, शुरुआती सामान और बाज़ार।
- नियमसेट की लड़ाई:
battleब्लॉक औरcombatब्लॉक, जीव-संग्रह, बोर्ड, रिएक्शन और मुकाबलों के साथ। - नियमसेट की लेयर, अनुवाद और माइग्रेशन: वे रूपांतर जिन्हें खिलाड़ी किसी एक गेम के लिए चालू करता है, अनुवाद, और शीट बदलने पर मानों को नए ID में ले जाना।
अपना नियमसेट आज़माएँ
शुरू करने से पहले Settings → Advanced → Danger Zone (सेटिंग्स → एडवांस्ड → डेंजर ज़ोन) में Allow custom Agent imports (कस्टम एजेंट इंपोर्ट की इजाज़त दें) चालू करें। इंपोर्ट किए गए नियमसेट वही सुरक्षा स्विच इस्तेमाल करते हैं जो इंपोर्ट किए गए एजेंट, इसलिए जब तक आप इसे चालू न करें, यह बंद रहता है। इंपोर्ट के लिए localhost एक्सेस या एडमिन सीक्रेट भी चाहिए, जो Settings → Advanced → Admin Access (सेटिंग्स → एडवांस्ड → एडमिन एक्सेस) में डाला जाता है।
- Agents (एजेंट) पैनल खोलें और Import agents (एजेंट इंपोर्ट करें) बटन चुनें (पैनल के ऊपर बटनों की पंक्ति में डाउनलोड आइकन)।
- Game Mode ruleset (Game Mode नियमसेट) चुनें और अपनी JSON फ़ाइल चुनें, या
.ruleset.jsonपर खत्म होने वाली नियमसेट पैकेज फ़ाइल (अपना नियमसेट साझा करना देखें)। - समीक्षा पढ़ें। इसमें नाम, वर्ज़न, लाइसेंस, नियमसेट क्या सँभालता है और Game Master टेक्स्ट दिखता है। Import (इंपोर्ट करें) चुनें।
आपका नियमसेट पैनल के Rules भाग में और नए गेम के सेटअप विज़ार्ड के Rules विकल्प में दिखता है। फ़ाइल से इंपोर्ट किया गया नियमसेट local/<your id> के रूप में रखा जाता है, इसलिए उसे कभी किसी आधिकारिक नियमसेट या किसी और के नियमसेट से गलत नहीं समझा जाता।
पहले इंपोर्ट किया नियमसेट बदलें
इंपोर्ट किया गया वर्ज़न कभी दोबारा नहीं लिखा जाता। अगर आप बदली हुई फ़ाइल उसी version के साथ इंपोर्ट करें, तो इंपोर्ट अस्वीकार होता है और आपसे नंबर बढ़ाने को कहता है। गेम ठीक उसी वर्ज़न से जुड़ा होता है जिस पर वह बना था, इसलिए चलते हुए अभियान का गणित कभी नहीं बदलता।
ड्राफ़्ट करते समय चक्र यह है: एडिट करें, version बढ़ाएँ, इंपोर्ट करें, नया गेम शुरू करें। पुराने वर्ज़न नए के साथ इंस्टॉल रहते हैं, जब तक आप Rules भाग से नियमसेट हटा न दें। जिस नियमसेट को कोई गेम अब भी इस्तेमाल करता है, उसे हटाने पर वह गेम तब तक बताता है कि उसका नियमसेट गायब है जब तक आप उसे फिर इंपोर्ट न करें।
अगर आप शीट का आकार बदलते हैं (चीज़ें जोड़ते, हटाते या उनके नाम बदलते हैं), तो sheet.version भी बढ़ाएँ। मौजूदा शीट उदारता से पढ़ी जाती हैं: जो मान नई शीट नहीं जानती वे रखे जाते हैं, और गायब मान अपने डिफ़ॉल्ट लेते हैं।
अपना नियमसेट साझा करना
साझा करने के पाँच तरीके हैं।
फ़ाइल के रूप में
JSON फ़ाइल किसी दोस्त को भेजें। वे उसे वैसे ही इंपोर्ट करते हैं जैसे आपने किया।
पैकेज फ़ाइल के रूप में
एक फ़ाइल के लिए बहुत बड़ा नियमसेट, जिसके कैटलॉग अपनी अलग फ़ाइलों में हैं, <name>.ruleset.json नाम की एक सादी JSON फ़ाइल के रूप में जाता है। इसमें पैकेज का मैनिफ़ेस्ट और नियमसेट के दस्तावेज़ होते हैं, हर एक base64 में सेव होता है (फ़ाइल को सादे टेक्स्ट के रूप में लिखने का एक तरीका):
{
"format": "marinara-ruleset",
"version": 1,
"manifest": { "kind": ["ruleset"], "…": "the package manifest" },
"files": {
"ruleset.json": "<base64>",
"catalogs/spells.json": "<base64>"
}
}मैनिफ़ेस्ट ruleset.json और हर catalogs/<id>.json को contributions.assets.paths में और files में सूचीबद्ध करता है, हर एक के आकार और sha256 (फ़ाइल का फ़िंगरप्रिंट) के साथ। Pixelforge जैसा नियमसेट एडिटर इसे बनाता है। Import agents → Game Mode ruleset फ़ाइल लेता है और वही समीक्षा दिखाता है जो नियमसेट फ़ाइल के लिए, हर कैटलॉग और उसकी एंट्री की संख्या के साथ।
फ़ाइल को डेटा के रूप में पढ़ा जाता है और कभी पैकेज के रूप में इंस्टॉल नहीं किया जाता। इसमें कुछ भी कंप्रेस नहीं होता, इसलिए इसमें कभी इसके अपने आकार से ज़्यादा डेटा नहीं होता। सीमाएँ:
- इसे नियमसेट फ़ाइल की तरह
local/<its id>के रूप में रखा जाता है। - यह अधिकतम 132 MB की होती है, जिसमें 2 MB की अधिकतम 12 कैटलॉग फ़ाइलें और 8 MB के अधिकतम 40 अनुवाद हो सकते हैं (नीचे देखें)।
- वर्ज़न उसका नियमसेट और उसके कैटलॉग साथ मिलकर है, इसलिए बदले कैटलॉग के लिए भी ऊँचा
versionचाहिए। - नियमसेट पैकेज zip के रूप में स्वीकार नहीं होते।
इसे वजह बताकर अस्वीकार किया जाता है, अगर:
- इसमें कोई और कुंजी या कोई और फ़ाइल हो, या ऐसा दस्तावेज़ हो जो सख्त base64 या UTF-8 टेक्स्ट न हो
- इसका मैनिफ़ेस्ट नियमसेट की ज़रूरत से ज़्यादा माँगे (कोई कोड, परमिशन या दूसरे कंट्रिब्यूशन)
- कोई फ़ाइल वह न हो जो मैनिफ़ेस्ट सूचीबद्ध करता है
- कोई
$comment2,000 अक्षरों से लंबा हो, या$schemaEngine के अपने स्कीमा के अलावा कुछ और बताए - नियमसेट या कोई कैटलॉग पढ़ा न जा सके
आधिकारिक एजेंट कैटलॉग से
कैटलॉग में प्रकाशित नियमसेट ठीक इसी रूप की नियमसेट पैकेज फ़ाइल है, <id>.ruleset.json, कभी पैकेज zip नहीं। उसका मैनिफ़ेस्ट Capability API 1.374 या नया घोषित करता है, ताकि पुराने Engine को वह कभी न दिया जाए। Engine उसे उसी रीडर और उन्हीं जाँचों से पढ़ता है जिनसे वह आपकी इंपोर्ट की पैकेज फ़ाइल पढ़ता है, उसे कैटलॉग में दिए मैनिफ़ेस्ट से मिलाता है, और किसी भी कैटलॉग पैकेज की तरह इंस्टॉल करता है। जिस कैटलॉग नियमसेट की फ़ाइल zip है उसे कुछ भी डाउनलोड करने से पहले अस्वीकार किया जाता है; पहले से इंस्टॉल नियमसेट काम करते रहते हैं।
GitHub रिपॉज़िटरी से
अगर आप अपना काम सार्वजनिक GitHub रिपॉज़िटरी में रखते हैं, तो हर नियमसेट को रिपॉज़िटरी के सबसे ऊपर rulesets फ़ोल्डर में रखें, हर नियमसेट की एक फ़ाइल:
your-repository/
agents.json (optional, only if you also share agents)
rulesets/
ember-roads.json
another-system.jsonयूज़र आपकी रिपॉज़िटरी एक बार जोड़ते हैं, उसमें क्या है इसकी समीक्षा करते हैं, और नए वर्ज़न पाने के लिए बाद में सिंक करते हैं। कस्टम रिपॉज़िटरी सूची एक एडवांस्ड सुविधा है। सर्वर चलाने वाला व्यक्ति इसे ENABLE_CUSTOM_AGENT_REPOS=true से चालू करता है, फिर Agents → Agent Organizer → Custom Sources (एजेंट → एजेंट ऑर्गनाइज़र → कस्टम सोर्स) खोलता है। रिपॉज़िटरी के नियमसेट रिपॉज़िटरी के मालिक के नाम के नीचे रखे जाते हैं, जैसे alice/ember-roads, इसलिए दो लेखक बिना टकराव के v20 नाम का नियमसेट प्रकाशित कर सकते हैं।
दो सीमाएँ लागू होती हैं। रिपॉज़िटरी में सीधे rulesets के अंदर अधिकतम 32 JSON फ़ाइलें हो सकती हैं, और इससे ज़्यादा वाली रिपॉज़िटरी अस्वीकार होती है। local नाम का अकाउंट नियमसेट प्रकाशित नहीं कर सकता, क्योंकि local/ फ़ाइल से इंपोर्ट किए गए नियमसेट के लिए रखा गया है।
आधिकारिक कैटलॉग में
साफ़ लाइसेंस वाला, बड़े पैमाने पर खेला जाने वाला सिस्टम Agent Organizer के ज़रिए सबको दिया जा सकता है। इसका प्रस्ताव रखने के लिए Marinara-Agents रिपॉज़िटरी में पुल रिक्वेस्ट खोलें। लेआउट के लिए वहाँ का ruleset-5e-2014 पैकेज देखें।
लाइसेंसिंग
सिर्फ़ वही नियम-टेक्स्ट प्रकाशित करें जिसे साझा करने का आपको अधिकार है। कई सिस्टम खुले लाइसेंस के तहत संदर्भ दस्तावेज़ प्रकाशित करते हैं, और आप उसी दस्तावेज़ से कॉपी कर सकते हैं। लाइसेंस ID (SPDX ID, यानी CC-BY-4.0 जैसा छोटा मानक नाम) और लाइसेंस का माँगा श्रेय टेक्स्ट license के अंदर रखें। जो नियम-पुस्तकें खुले लाइसेंस में नहीं हैं, उनसे टेक्स्ट कॉपी न करें। नियमसेट को ज़्यादातर नाम और संख्याएँ चाहिए। Game Master टेक्स्ट अपने शब्दों में लिखें।
समस्या-समाधान
- इंपोर्ट कहता है कि कोई नाम मौजूद नहीं है। फ़ाइल की कोई चीज़ ऐसे ID की ओर इशारा करती है जो घोषित नहीं है, जैसे कोई स्किल ऐसी एबिलिटी का नाम देती है जिसे आपने हटा दिया। संदेश उस लाइन का पाथ बताता है।
- इंपोर्ट कहता है कि कोई वर्ज़न अलग सामग्री के साथ पहले से इंस्टॉल है।
versionबढ़ाएँ और फिर इंपोर्ट करें। - मेरा नियमसेट सेटअप विज़ार्ड में नहीं है। देखें कि Allow custom Agent imports चालू है। इसके बंद रहते इंपोर्ट किए नियमसेट नए गेम से बाहर रहते हैं, और जो गेम पहले से इन्हें इस्तेमाल करते हैं, वे चलते रहते हैं।
- गेम कहता है कि उसका नियमसेट गायब है। गेम जिस वर्ज़न पर बना था, वह इंस्टॉल नहीं है। फ़ाइल का वह वर्ज़न फिर इंपोर्ट करें।