रिवर्स इंजीनियरिंग सीज़र III (भाग 2, एक शहर खींचना)

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





यदि आप जानते हैं कि एक टाइल क्या है, तो आप अगले अनुभाग को छोड़ सकते हैं।
टाइल्स
एक टाइल एक निश्चित आकार की एक तस्वीर है, जो गठित की जाती है ताकि अन्य टाइलों के बगल में आकर, आपको "सीम" के बिना एक ठोस छवि मिल सके। यहाँ सीज़र III से घास की बनावट का एक उदाहरण दिया गया है



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



आपने शायद गौर किया कि प्रस्तुत चित्र चौकोर नहीं, बल्कि हीरे के आकार के हैं। यह छवि को वॉल्यूम (गहराई) की भावना देने के लिए किया जाता है। इस तरह की एक टाइल दर्शकों को एक कोण पर मुड़ती है और, जैसा कि यह था, गहरा जा रहा है, दो-आयामी तस्वीर ने एक तीसरा आयाम हासिल कर लिया है। वॉल्यूम प्रभाव बनाने के लिए, चौड़ाई आधे से कम लंबाई होनी चाहिए। सीज़र III गेम में टाइल का आधार 58x30 पिक्सेल है, यह गेम इंजन द्वारा उपयोग किया जाने वाला न्यूनतम टाइल आकार है। रीमेक विकास के पहले चरणों में, हमें एक अप्रिय प्रभाव मिला, खेल में बनावट पारदर्शिता के बिना बनाई गई थी और अतिरिक्त प्रसंस्करण के बिना उन्हें स्क्रीन पर प्रदर्शित करने के परिणामस्वरूप निम्नलिखित परिणाम हुए।



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

नक्शा
एक नक्शा एक सरणी है जो एक परत और उनके मापदंडों पर टाइल की स्थिति निर्धारित करता है। सबसे सरल मामले में, नक्शा एक एमएक्सएन मैट्रिक्स है, जहां इसके प्रत्येक तत्व में सशर्त "टाइल पैलेट" से एक पहचानकर्ता (संख्या, संख्या) शामिल है। टाइलों में आवश्यक रूप से अनुक्रमिक क्रम संख्या नहीं होती है, टाइल संख्याओं को कई अंतराल और नामित स्थानों में विभाजित किया जाता है। इसलिए, उदाहरण के लिए, भूमि की टाइलें, पेड़, पानी, दोष और घास, लैंड 1a_00001 से लैंड 1 ए / 00303 तक के सूचकांक हैं। सीज़र III में, 30x30 से 160x160 टाइल के आकार के वर्ग कार्ड की अनुमति है। टाइल मानचित्र पर स्थित है ताकि इसकी ऊपरी सीमा "उत्तर" हो।



स्क्रीन पर टाइलें खींचने के लिए, आपको इसकी दूरी पर विचार करने की आवश्यकता है, यदि आप बस टाइल को उस क्रम में खींचते हैं, जो वे नक्शे पर रखी गई हैं, तो आप अबरकदाबरा प्राप्त करेंगे, क्योंकि कुछ टाइलें गलत समय पर खींची गई थीं।



आपको किस क्रम में टाइल खींचने की आवश्यकता है, निम्न छवि दिखाती है।



1. पहला आंकड़ा एक गहराई प्रभाव बनाने के लिए 2 डी मानचित्र पर टाइल खींचने का क्रम दिखाता है।
2. दूसरा आंकड़ा 2.5 डी मानचित्र पर टाइल खींचने का क्रम दिखाता है, यह देखते हुए कि टाइल जितनी ऊंची है, पहले इसे खींचा जाना चाहिए।



यह छवि सही क्रम में तैयार की गई निम्नलिखित टाइलों से बनाई गई है।



सामान्य तौर पर, प्रतिपादन के लिए टाइल सूचकांक बनाने के लिए कोड निम्नानुसार होगा:

नज़र
//   ""  tilemap map; //  tilearray tiles; //  for( j=0; y < map_size; j++ ) { for( t=0; t <= j; t++ ) { tiles.append( map[ t , map_size - 1 - ( j - t ) ]; } } //   ""  for( i=1; i < map_size; i++ ) { for( int t=0; t < map_size-i; t++ ) { tiles.append( map[ i + t, t ] ); } } 


शहर की ड्राइंग
अतिरिक्त शर्तें जो शहर प्रदान करते समय उत्पन्न होती हैं।
1. नक्शे पर न केवल भूमि, घास, इमारतों की स्थिर टाइलें स्थित हैं, बल्कि चलती हुई वस्तुएं (लोग, जानवर, एनीमेशन) भी हैं
2. ऐसी वस्तुएं हैं जिनके माध्यम से आप जा सकते हैं (मेहराब, द्वार, खलिहान)
3. टाइल्स और वस्तुओं का अतिरिक्त एनीमेशन
4. गैर-स्क्वायर ऑब्जेक्ट

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

+ =

3. एनीमेशन मुख्य छवि के आयामों से परे जा सकता है, यहां ऐसी विशेषता को ध्यान में रखना आवश्यक है कि यह (एनीमेशन) ऊपर और दाईं ओर जा सकता है, लेकिन नीचे और बाईं ओर नहीं, अन्यथा यह निम्नलिखित टाइलों द्वारा अवरुद्ध हो जाएगा।
4. अधिकांश खेल वर्ग वस्तुओं का उपयोग करते हैं, लेकिन विस्तारित एल्गोरिदम को सरल बनाने के लिए भी विस्तारित होते हैं, उन्हें छोटे (चौकोर) भागों में पीटा जाता है, उदाहरण के लिए, एक हिप्पोड्रोम।

= + +

कैसे आकर्षित करें
1. पहली पास के लिए, "फ्लैट" टाइलें और उन पर चलती वस्तुओं को खींचा जाता है
2. दूसरे पास के लिए, टाइलें खींची जाती हैं, जिनमें से चित्र टाइल के आधार से परे जा सकते हैं
3. टाइल्स के लिए एक अतिरिक्त एनीमेशन तैयार किया गया है जिसमें यह झंडा है।
संभावित प्रश्नों का अनुमान लगाना। यह एल्गोरिथ्म मूल गेम से बहाल किया गया था, जहां तक ​​मैं इसे समझ सकता था, शायद बाद के संस्करणों में इसे बदल दिया जाएगा। एक प्रतिपादन चक्र के आयोजन के लिए सुझावों का स्वागत है।

सीज़र III गेम कार्ड प्रारूप
पहले पांच डेटा ब्लॉक सीधे उन वस्तुओं से संबंधित हैं जो शहर में * .map फ़ाइल में प्रदर्शित किए जाएंगे। हम फ़ाइल की शुरुआत से पढ़ते हैं, हम बिना अंतराल के एक के बाद एक डेटा पढ़ते हैं।

शॉर्ट टाइल_ड [26244] - इसमें तत्वों के पहचानकर्ता होते हैं, प्रत्येक पहचानकर्ता इसकी बनावट से मेल खाता है। उदाहरण के लिए, पहचानकर्ता समूह 246-548 बनावट से संबंधित है land1a_00001-land1a_00303, ये पृथ्वी, पेड़, आदि के बनावट हैं, जो ऊपर वर्णित थे।
बाइट एज_डाटा [26244] - सरणी में ऑब्जेक्ट के आकार के बारे में जानकारी होती है, जिसके लिए टाइल टाइल ग्रिड में बनावट का चयन किया जाता है।
लघु इलाके_इन्फो [26244] - सरणी में एक विशिष्ट टाइल, पृथ्वी, पानी, सड़क, दीवार आदि के लिए सतह की विशेषताएं हैं ( इन झंडों पर पूरी जानकारी )
बाइट मिनिमैप_इंफो [26244] - एक न्यूनतम निर्माण के लिए बुनियादी जानकारी, खेल के दौरान कुछ गणनाओं में भी शामिल है, "यादृच्छिक संख्याओं" के एक प्रकार के सरणी के रूप में कार्य करना।
बाइट ऊंचाई_इन्फो [26244] - यह सरणी सतह के ऊपर की टाइल की ऊँचाई का वर्णन करती है, 0 - जमीन के लिए, 1 - 15 पिक्सेल, 2 - 30 पिक्सेल, आदि।

व्यावहारिक अनुप्रयोग
आप सीज़र III और रीमेक की प्रगति के बारे में अधिक जानकारी bitbucket.org पर हमारी विकि पर पा सकते हैं।
लेख लिखने और प्रदान की गई सामग्री में मदद के लिए बियांका वैन शायक का विशेष धन्यवाद।

और अंत में, एक छोटा सा परीक्षण स्क्रीनशॉट, Etruscan लांसर्स फव्वारे के शहर में बढ़ रहे हैं:

Source: https://habr.com/ru/post/In222943/


All Articles