(आप "बंदर पैचिंग" या "डक पंचिंग" शब्द के बारे में जानना चाह सकते हैं यदि विनम्र मानसिक छवि के अलावा और कुछ भी नहीं है।)
एक तरफ: यदि आपका लक्ष्य "व्यवहार" परिवर्तनों के लिए पुनरावृति समय को कम कर रहा है, तो कुछ दृष्टिकोणों की कोशिश करें जो आपको वहां सबसे अधिक मिलते हैं, और भविष्य में इसे और अधिक सक्षम करने के लिए अच्छी तरह से संयोजित करें।
(यह थोड़ा स्पर्श पर निकल जाएगा, लेकिन मैं वादा करता हूं कि यह वापस आ जाएगा!)
- डेटा के साथ शुरू करें , और छोटे से शुरू करें: सीमाओं ("स्तर" या जैसे) पर फिर से लोड करें , फिर फ़ाइल परिवर्तन सूचनाएं प्राप्त करने के लिए ओएस कार्यक्षमता का उपयोग करने के लिए अपना काम करें या बस नियमित रूप से सर्वेक्षण करें ।
- (बोनस अंक और कम लोड समय के लिए (पुन: पुनरावृत्ति समय घटाकर) डेटा बेकिंग में देखें ।)
- स्क्रिप्ट डेटा हैं , और आपको व्यवहार को पुनरावृत्त करने की अनुमति देते हैं। यदि आप एक स्क्रिप्टिंग भाषा का उपयोग करते हैं, तो आपके पास अब उन लिपियों को पुन: लोड, संकलित या संकलित करने की सूचनाएं / क्षमता है। आप अपने दुभाषिया को इन-गेम कंसोल, एक नेटवर्क सॉकेट, या बढ़े हुए रनटाइम लचीलेपन के लिए पसंद कर सकते हैं।
- कोड डेटा भी हो सकता है : आपका कंपाइलर ओवरले , शेयर्ड लाइब्रेरी, डीएलएल, या लाइक का समर्थन कर सकता है । इसलिए अब आप ओवरले या DLL को फिर से लोड करने और फिर से लोड करने के लिए "सुरक्षित" समय चुन सकते हैं, चाहे मैनुअल हो या स्वचालित। अन्य उत्तर यहां विस्तार से हैं। ध्यान दें कि इसके कुछ वेरिएंट क्रिप्टोग्राफ़िक हस्ताक्षर नसबंदी, एनएक्स (नो- एक्ज़ीक्यूट ) बिट या किसी अन्य सुरक्षा तंत्र के साथ गड़बड़ कर सकते हैं ।
- एक गहरी, संस्करणबद्ध सेव / लोड सिस्टम पर विचार करें । यदि आप कोड परिवर्तन की स्थिति में भी अपने राज्य को मजबूती से बचा सकते हैं और पुनर्स्थापित कर सकते हैं, तो आप अपने खेल को बंद कर सकते हैं और ठीक उसी बिंदु पर नए तर्क के साथ इसे पुनः आरंभ कर सकते हैं। इजीयर ने किया की तुलना में, लेकिन यह करने योग्य है, और यह निर्देश बदलने के लिए पोकिंग मेमोरी की तुलना में स्पष्ट रूप से आसान और अधिक पोर्टेबल है।
- अपने खेल की संरचना और नियतत्व के आधार पर आप रिकॉर्डिंग और प्लेबैक करने में सक्षम हो सकते हैं । यदि वह रिकॉर्डिंग सिर्फ "गेम कमांड्स" पर है (कार्ड गेम के बारे में सोचें, उदाहरण के लिए), तो आप अपने द्वारा दिए गए सभी रेंडरिंग कोड को बदल सकते हैं और अपने बदलावों को देखने के लिए रिकॉर्डिंग को फिर से कर सकते हैं। कुछ खेलों के लिए यह कुछ शुरुआती मापदंडों (जैसे एक यादृच्छिक बीज) और फिर उपयोगकर्ता क्रियाओं को रिकॉर्ड करने के रूप में "आसान" है। कुछ के लिए यह बहुत अधिक जटिल है।
- संकलन समय कम करने के प्रयास करें । पूर्वोक्त सेव / लोड या रिकॉर्ड / प्लेबैक सिस्टम के साथ, या ओवरले या DLL के साथ संयोजन में, यह किसी भी अन्य चीज़ से अधिक आपके टर्नअराउंड को कम कर सकता है।
यदि आप डेटा या कोड को पुनः लोड करने के सभी तरीके प्राप्त नहीं करते हैं, तो भी इनमें से कई बिंदु लाभदायक हैं।
उपाख्यानों का समर्थन:
एक बड़े पीसी आरटीएस (~ 120 व्यक्ति टीम, ज्यादातर सी ++) पर, एक अविश्वसनीय रूप से गहरी राज्य बचत प्रणाली थी, जिसका उपयोग कम से कम तीन उद्देश्यों के लिए किया गया था:
- एक "उथले" सेव को डिस्क को नहीं बल्कि सीआरसी इंजन को खिलाया गया ताकि यह सुनिश्चित किया जा सके कि मल्टीप्लेयर गेम लॉक-स्टेप सिमुलेशन एक सीआरसी में हर 10-30 फ्रेम में रहे; यह सुनिश्चित किया गया कि कोई भी धोखा नहीं दे रहा है और बाद में कुछ फ्रेम में डेसिंक कीड़े को पकड़ लिया
- यदि और जब मल्टीप्लेयर डेसिंक बग होता है, तो प्रत्येक फ्रेम में एक अतिरिक्त-गहरी बचत की जाती है, और फिर से सीआरसी इंजन को खिलाया जाता है, लेकिन इस बार सीआरसी इंजन कई सीआरसी उत्पन्न करेगा, प्रत्येक बाइट्स के छोटे बैचों के लिए। इस तरीके से, यह आपको बता सकता है कि राज्य के किस हिस्से ने अंतिम फ्रेम के भीतर विचलन करना शुरू कर दिया था। हमने इसका उपयोग करते हुए एएमडी और इंटेल प्रोसेसर के बीच एक बुरा "डिफ़ॉल्ट फ्लोटिंग पॉइंट मोड" अंतर पकड़ा।
- एक सामान्य गहराई बचाने के लिए नहीं बचा सकता है उदाहरण के लिए एनीमेशन की सटीक फ्रेम जो आपकी इकाई खेल रही थी, लेकिन यह आपकी सभी इकाइयों की स्थिति, स्वास्थ्य आदि को प्राप्त करेगा, जो आपको गेमप्ले के दौरान किसी भी समय बचाने और फिर से शुरू करने की अनुमति देगा।
मैं डीएस के लिए एक C ++ और Lua कार्ड खेल पर नियतात्मक रिकॉर्ड / प्लेबैक का उपयोग किया है। हमने एआई (सी ++ ओर) के लिए डिज़ाइन किए गए एपीआई में हुक किया और उपयोगकर्ता और एआई कार्यों के सभी रिकॉर्ड किए। हमने इस कार्यक्षमता का उपयोग खेल में (खिलाड़ी के लिए एक रिप्ले प्रदान करने के लिए) किया है, लेकिन मुद्दों का निदान करने के लिए भी: जब कोई दुर्घटना या विषम व्यवहार होता था, तो हमें बस इतना करना होता था कि हम सेव फाइल प्राप्त करें और इसे डिबग बिल्ड में वापस चलाएं।
मैंने भी कुछ समय के बाद ओवरले का उपयोग किया है, और हमने इसे अपने "स्वचालित रूप से इस निर्देशिका को मकड़ी के साथ जोड़ा और नई सामग्री को हैंडहेल्ड" सिस्टम पर अपलोड किया। हमें बस इतना करना होगा कि cutscene / level / जो कुछ भी है उसे छोड़ दें और न केवल नया डेटा (sprites, level Layout, etc) लोड होगा बल्कि ओवरले में कोई नया कोड भी लोड करेगा। दुर्भाग्य से यह कॉपी प्रोटेक्शन और एंटी-हैकिंग मैकेनिज्म के कारण अधिक हालिया हैंडहेल्ड के साथ बहुत कठिन हो रहा है जो विशेष रूप से कोड का इलाज करते हैं। हम इसे अभी भी लुआ स्क्रिप्ट के लिए करते हैं।
अंतिम लेकिन कम से कम: आप (और मेरे पास, विभिन्न बहुत छोटी विशिष्ट परिस्थितियों में) सीधे निर्देश opcodes पैच द्वारा बतख के एक छोटे से छिद्रण कर सकते हैं। यह सबसे अच्छा काम करता है यदि आप एक निश्चित प्लेटफ़ॉर्म और कंपाइलर पर हैं, हालांकि, और क्योंकि यह लगभग अप्राप्य है, बहुत बग-प्रवण है, और जो आप जल्दी से पूरा कर सकते हैं, उसमें सीमित है, मैं ज्यादातर इसे डीबग करते समय री-रूट कोड का उपयोग करता हूं। यह करता है आप जल्दी में अपने अनुदेश सेट वास्तुकला के बारे में बहुत की एक नरक है, हालांकि सिखाना।