(RPGs) ड्रॉप टेबल डिजाइन


18

मुझे लगता है कि यह सवाल MMO और डियाब्लो जैसे खेलों से अधिक खेल से संबंधित है।

ड्रॉप टेबल को लागू करने के लिए सामान्य डिजाइन क्या हैं, जहां एक राक्षस प्रतिशत के आधार पर विभिन्न प्रकार की वस्तुओं को गिरा सकता है? मुझे लगता है कि आइटम प्रकारों के लिए 'प्रतिशत वेटेज' का एक शब्दकोश होना सबसे सरल तरीका है, लेकिन अगर हम नए आइटम प्रकारों को पेश करना चाहते हैं, तो इसका विस्तार करना मुश्किल है (उदाहरण के लिए, जब डी 2 विस्तार में रन और नए वर्ग आइटम शामिल हैं)


4
नए आइटम जोड़ते समय प्रतिशत शब्दकोशों को बढ़ाना कठिन क्यों है? मेरा मतलब है कि अगर आपको 100% की राशि बनाने के लिए सभी प्रतिशत होने की आवश्यकता नहीं है (और यह केवल एक मामला है यदि आप चाहते हैं कि एक राक्षस हमेशा एकल आइटम को छोड़ दे, जो मेरे लिए बहुत अजीब है), मुझे नहीं दिखता है मुसीबत।
n0rd

1
Orc => {'dagger', 'तलवार' 'armor'} कहें, और मेरे पास एक नया आइटम प्रकार है, Rune कहें; मुझे सीधे प्रत्येक राक्षस प्रकार से जुड़े सभी शब्दकोशों को अपडेट करना होगा। बेशक, यह कुछ भी नहीं है अप्रत्यक्ष की एक और परत हल नहीं कर सकती है। तो सवाल यह है कि यह परत कैसी दिखती है?
एक्सट्रैकन

मुझे यकीन नहीं है कि आपको क्यों लगता है कि शब्दकोश को अपडेट करना कठिन है। पायथन में, नए मूल्यों के साथ एक शब्दकोश का विस्तार करना एक एकल विधि के साथ किया जाता है, उदाहरण के लिए। क्या आप स्पष्ट कर सकते हैं कि आपको लगता है कि कठिनाई कहाँ है?
काइलोटन

2
एक्सट्रैकन, यदि आप नीचे मेरे उत्तर पर एक नज़र डालते हैं, तो आपके "अप्रत्यक्ष की एक और परत" प्रश्न का उत्तर है। एक सपाट तालिका के रूप में बूंदों का इलाज करने के बजाय, आप उन्हें नेस्टेड अभिव्यक्तियों से बना सकते हैं। यदि आप नामित मैक्रोज़ (यानी फ़ंक्शंस) की अनुमति देते हैं, तो आप विभिन्न संस्थाओं में एक ड्रॉप टेबल का हिस्सा फिर से उपयोग कर सकते हैं।
उदार

2
आप खेल के विकास के 'कैच' पर लड़खड़ा गए हैं। ज़रूर, आप दो दिनों में एक खेल बना सकते हैं, लेकिन फिर सामग्री जोड़ने के पांच साल आते हैं। और सामग्री जोड़ना पीस रहा है। पीस।
Tor Valamo 12

जवाबों:


22

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

एक साधारण बूंद की तरह दिखता है:

1-10 copper coin

यह सिर्फ 1 और 10 के बीच तांबे के सिक्कों की एक यादृच्छिक संख्या को गिराने के लिए कहता है। जब आप शाखाएं जोड़ते हैं तो चीजें अधिक लचीली हो जाती हैं:

one of
    turquoise stone (50%)
    onyx stone (25%)
    malachite stone (15%)
    jade stone (10%)

एक "एक" दी गई संभावनाओं के आधार पर अपनी एक बाल शाखा का चयन करता है और फिर उसका मूल्यांकन करता है। एक से अधिक आइटम गिर सकते हैं:

any of
    turquoise stone (50%)
    onyx stone (25%)
    malachite stone (15%)
    jade stone (10%)

यह सभी सबब्रांचों का मूल्यांकन करेगा और उन्हें गिरा देगा यदि उनकी संभावना के खिलाफ एक रोल पास हो जाता है। कालकोठरी और खिलाड़ी के स्तर के आधार पर एक आइटम का चयन करने के लिए कुछ अन्य शाखाएं भी हैं।

क्योंकि ये जटिल हो सकते हैं, यह आपको नामित मैक्रोज़ को परिभाषित करने की भी अनुमति देता है, अनिवार्य रूप से ऐसे कार्य जो एक शाखा अभिव्यक्ति का विस्तार करते हैं और कई बूंदों में पुन: उपयोग किया जा सकता है। इस तरह अगर, उदाहरण के लिए, सभी बौने एक ही तरह की लूट को छोड़ देते हैं, तो आप उसके लिए एक एकल मैक्रो बना सकते हैं और इसका उपयोग उन सभी प्रकार के राक्षस के बजाय भारी ड्रॉप टेबल को कॉपी और पेस्ट करने में कर सकते हैं।

एक राक्षस की बूंद का एक उदाहरण :

:: ancient dragon
    glyph   = D
    groups  = dragon
    drops
        (coins)
        2-3(1:8) one of
            (any-weapon)
            (any-armor)

इधर, (coins), (any-weapon), और (any-armor)सभी मैक्रो कॉल कर रहे हैं:

(any-armor)
    one of
        (shield)
        (helm)
        (boots)
        (gloves)
        (cloak)
        (robe)
        (soft-armor)
        (hard-armor)

जो बदले में चीजों को कॉल करता है जैसे:

(cloak)
    one near level
        cloak (10)
        velvet cloak (20)
        fur-lined cloak (50)

आप वास्तविक प्रोग्रामिंग भाषा की तरह मनमाने ढंग से गहराई से भावों को छोड़ सकते हैं। यह आपको एक सरल तालिका-आधारित दृष्टिकोण प्रदान करने वाली कंपोज़िबिलिटी देता है।

सभी डेटा-चालित प्रणालियों की तरह, आप अभेद्य रूप से जटिल बूंदों का निर्माण करके खुद को अभिभूत कर सकते हैं, लेकिन यह मेरे लक्ष्यों को पूरा करता है:

  1. कोड के बाहर क्या चीजें पूरी तरह से गिरा दी जाती हैं यह निर्दिष्ट करने में सक्षम हो।
  2. कोड में कोर सिस्टम को लागू करने के लिए सरल।
  3. धुन बनाने में सक्षम रहें कि कौन से विशिष्ट राक्षस ड्रॉप करें ताकि खिलाड़ी लक्ष्य-उन्मुख अन्वेषण कर सके। ("मुझे हार की जरूरत है। मैं बौनों की तलाश करूंगा क्योंकि वे उन्हें छोड़ देते हैं।"

C # कोड जो इसे लागू करता है वह यहां है


यह एक कार्यान्वयन है जिसे मैंने पहले नहीं देखा है। धन्यवाद!
एक्सट्राकुन

12

स्टेंडल में हमारी लूट की मेजें हैं। प्रत्येक प्रविष्टि में आइटम का नाम, एक न्यूनतम और अधिकतम मात्रा और संभावना है। आंतरिक संरचना बहुत कुछ वैसी ही है जैसा कि हम प्राणी के वेबपेज पर प्रदर्शित करते हैं

हमारे लिए यह महत्वपूर्ण है कि गेम डिज़ाइनर जिन्हें दुनिया का बड़ा ज्ञान है वे इस तरह की चीजों को परिभाषित कर सकते हैं। यही है, प्रोग्राम कोड स्तर पर जटिल तर्क को समझने के बिना। इसलिए हमारे पास प्रोग्राम कोड में प्राणियों और वस्तुओं की परिभाषा नहीं है, लेकिन उन्हें .xml फ़ाइलों जैसे elves.xml या club.xml में स्थानांतरित कर दिया गया है । हमारे पास उनके लिए एक gui editor है, लेकिन अधिकांश गेम डिज़ाइनर .xml फ़ाइल को सीधे संशोधित करते हैं।

प्राणियों और वस्तुओं को आसानी से विस्तार योग्य बनाने के लिए, हम एक बिल्डिंग ब्लॉक सिस्टम का उपयोग करते हैं: "एल्फ" या "आर्चर एल्फ" के लिए कोई प्रोग्राम क्लास नहीं है। लेकिन व्यवहार संबंधी कई वर्ग हैं जैसे "कायर", "गश्त", "आक्रामक", "आर्चर", "मरहम लगाने वाले"। डिजाइनर परिभाषित कर सकते हैं कि नए जीव प्रोग्राम कोड लिखे बिना उन व्यवहारों का चयन कर सकते हैं: उदाहरण के लिए "आर्चर एल्फ" बनाने के लिए एक धनुष के साथ एक योगिनी को आकर्षित करें और इसे "आक्रामक", "आर्चर" के रूप में परिभाषित करें। फिर स्तर और समान विशेषताओं को परिभाषित करें और लूट टेबल पर कुछ एल्विश आइटम जोड़ें।

आइटम के लिए हमारे पास एक समान दृष्टिकोण है, लेकिन यह वर्तमान में एक व्यवहार तक सीमित है: एक डिजाइनर एक नया आइटम जोड़ सकता है और एक व्यवहार को परिभाषित कर सकता है जैसे कि "उपभोज्य इटेम", "कीइटेम" या "अटैक इटेम", "स्पेल", "स्क्रॉल" बिना कार्यक्रम तर्क करने के लिए।


8

डी एंड डी टेबलटॉप गेमिंग में लूट के प्रकार की अवधारणा है। अधिकांश राक्षस एक या एक से अधिक तालिकाओं से गिर जाएंगे और ये तालिकाएं आपके विस्तार में अपडेट होंगी। राक्षस अभी भी "65% सामान्य, 10% रत्न, 15% कला, 10% उपकरण" छोड़ देंगे, लेकिन आप इन तालिकाओं में से प्रत्येक में क्या अपडेट करेंगे।

उदाहरण के लिए रत्न में यादृच्छिक श्रेणी वाले स्लॉट होते हैं जो "1 रत्न (25%) 2 रत्न (50%) 5 रत्न (75%) 100 रत्न" देते हैं। और जब आप विशेष रनवे रत्नों को जोड़ना चाहते हैं, तो तालिका को "1 रत्न (25%) 2 रत्नों (50%) 5 रत्नों (75%) 100 रत्नों (95%) 1 रेंडम" में अपडेट करें।

लेकिन, दूसरी ओर, यदि आप पहले से ही वेटिंग प्राप्त कर चुके हैं, तो अपने विस्तार में सभी राक्षस तालिकाओं को अपडेट क्यों न करें? निश्चित रूप से टेबल्स और मेश की तुलना में इस तरह के टेबल छोटे पेलोड हैं। इसके अलावा, आपको प्रतिशत को 100 तक रखने की आवश्यकता नहीं है, यह केवल एक धारणा है जिसे आपने शुरू किया था और आप अपने यादृच्छिक मूल्य को उत्पन्न करने से पहले वास्तविक कुल मिलान कर सकते हैं। यदि वज़न 120 तक बढ़ जाता है, तो बस 1-100 के बजाय 1-120 से एक मान उत्पन्न करें।


3

सतह पर यह "भारित यादृच्छिक चयन" समस्या के समान लगता है।

यादृच्छिक घटनाओं का निर्धारण करने के लिए एल्गोरिदम

प्रत्येक घटना के लिए सापेक्ष संभावनाओं को आवंटित करें, उन्हें जोड़ दें, फिर उस सीमा के भीतर एक यादृच्छिक संख्या चुनें जो यह तय करना है कि आपको कौन सी घटना चाहिए।

यहां तक ​​कि अगर आप प्रतिशत का उपयोग करना पसंद करते हैं - जो कि एक ही प्रणाली है, तो बस 100 तक बढ़ाया जाता है - आप सामान जोड़ने के लिए कितना मुश्किल है, इसे कम कर रहे हैं। यदि आपके पास 100% है और फिर एक विस्तार में 20% जोड़ते हैं, तो बस (120/100) द्वारा सभी मूल्यों को विभाजित करें और आप कुल 100% तक वापस आ जाएंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.