
BattleTech: The Crescent Hawk's Inception रिवर्स इंजीनियरिंग
BattleTech: The Crescent Hawk's Inception (1988, MS-DOS; Infocom द्वारा प्रकाशित, इंजन Westwood Associates द्वारा) का रिवर्स इंजीनियरिंग — और इसका एक प्रगतिरत Godot 4 / C# पुनर्निर्माण।
इस रेपो में किसी भी अन्य बात पर भरोसा करने से पहले यह अनुभाग पढ़ें। यह प्रोजेक्ट दो प्रयास हैं जिनकी परिपक्वता बहुत भिन्न है, और दस्तावेज़ों में अन्यत्र "phase" शब्द का अर्थ लिखा गया कोड है, न कि सिद्ध व्यवहार।
यह प्रोजेक्ट एक साथ दो आर्टिफैक्ट उत्पन्न करता है, और दूसरा पहले पर आधारित है:
(1) प्रलेखित रिवर्स इंजीनियरिंग। reko/ डीकंपाइलेशन, docs/ विशिष्टताएँ, BattleTech-विशिष्ट MCP टूल्स के साथ Spice86 एमुलेटर, और Python टूलिंग। यह वास्तविक RE कार्य है: फ़ाइल फ़ॉर्मेट, कहानी का पाठ, मेमोरी मैप, और इंजन लॉजिक का एक बड़ा हिस्सा प्रलेखित है और डीकंपाइलर आउटपुट तथा लाइव एमुलेटर ट्रेस के विरुद्ध क्रॉस-चेक किया गया है। यह अपने आप में एक डिलिवरेबल है, और यह (2) के लिए विशिष्टता भी है।
(2) पुनर्निर्माण (BattleTechCHI/). एक Godot 4 C# प्रोग्राम जो (1) से व्युत्पन्न होता है: यह मूल डेटा फ़ाइलें (.BLD, .MTP, .ANM, GAME* सेव) पढ़ता है और इंजन व्यवहार को (1) द्वारा प्रलेखित अनुसार पुनः कार्यान्वित करता है। यह डेटा-निष्ठ है, व्यवहार-निष्ठ नहीं, और मूल के विरुद्ध कभी एंड-टू-एंड मान्य नहीं किया गया।
वे समानांतर में चलते हैं, लेकिन निर्भरता की दिशा निश्चित है:
(2) उतना ही निष्ठ हो सकता है जितना (1) पूर्ण और सत्यापित है। जहाँ (1) अनुमानित या खुला कहता है, वहाँ (2) एक अनुमान है।
इसीलिए रोडमैप RE अंतरालों को बंद करने (Track 1) और (2) के एमुलेटर के विरुद्ध विभेदक सत्यापन (Track 3) को फ़ीचर कार्य से पहले रखता है। एक पुनर्निर्माण उतना ही अच्छा होता है जितना उसका आधार बनने वाला रिवर्स इंजीनियरिंग।
यदि आप बिट-सटीक पोर्ट की तलाश में हैं, तो वह अभी मौजूद नहीं है। यदि आप टूल-सहायित RE वातावरण के साथ-साथ मूल एसेट्स पर चलने वाले डेटा-संचालित पुनर्निर्माण की तलाश में हैं, तो यही यहाँ है।
संकेत: ✅ सत्य / पूर्ण · ⚠️ आंशिक, अनुमानित, या मौन अंतरालों के साथ · ❓ अज्ञात / असत्यापित · ❌ अनुपस्थित
| सिस्टम | रनटाइम पर मूल फ़ाइलें पढ़ता है | व्यवहार मूल से मेल खाता है | सत्यापन |
|---|---|---|---|
| BLD डिक्रिप्ट + सिफर टेक्स्ट | ✅ BldLoader.cs | ✅ (टेक्स्ट) | ✅ राउंड-ट्रिप BLD↔JSON बाइट-समान (tools/bld) |
| BLD ऑपकोड इंटरप्रेटर (28 स्लॉट 0xE4–0xFF) | ✅ | ⚠️ आंशिक | ❓ कभी एंड-टू-एंड नहीं खेला गया; ऑपरेंड आकार निश्चित (EB/EC/F6/F7); सभी स्लॉट संभाले गए (कोई मौन ड्रॉप नहीं) |
Fn1CD3 डिस्पैच (47 केस) | ✅ | ⚠️ आंशिक | ❓ डीकंप से कार्यान्वित; कई केस अनुमान हैं |
| MTP मैप हेडर/टाइल्स | ✅ MapLoader.cs / LocalMapView.cs | ✅ (संरचना) | ⚠️ लेआउट डिकोड किया गया, फ़्रेम-दर-फ़्रेम डिफ़ नहीं किया गया |
| ANM एनिमेशन (XOR-डेल्टा RLE) | ✅ रनटाइम, PNG फ़ॉलबैक | ⚠️ | ❓; रेपो में कोई ANM स्प्राइटशीट नहीं (Assets/Animations/ खाली) |
| ICN/CMP टाइल्स | ❌ (पूर्व-रूपांतरित) | — | TileManager BMP लोड करता है; Assets/Tilesets/ खाली |
सेव फ़ाइलें GAME1–6 (4096 B) | ✅ पार्सर SaveManager.cs | ❓ | ❌ राउंड-ट्रिप मूल सेव के विरुद्ध नहीं सत्यापित |
कहानी स्थिति (b0057, props) | ✅ (पढ़ता है) | ❓ अर्थ अनुमानित | ❓ खेल में अर्थ की पुष्टि नहीं हुई |
| कॉम्बैट (टू-हिट, डैमेज, AI, हीट, अमो, फ़ॉग) | — (स्वयं का लॉजिक) | ❌ अनुमानित | ❌ RNG/फ़ॉर्मूले मूल के विरुद्ध कभी डिफ़ नहीं किए गए |
| व्यूपोर्ट / स्क्रीन लेआउट | — | ⚠️ अनुमानित | ❓ कोई विहित व्यूपोर्ट स्ट्रक्चर नहीं मिला |
| ध्वनि / संगीत | ❌ | ❌ | ❌ फ़ॉर्मेट अनडिकोडेड |
| मैप→BLD ट्रिगर मैपिंग | ⚠️ आंशिक | ❓ | टाइल-प्रॉपर्टी टेबल + [0x5460]:0x4602 अनुवाद डिकोड नहीं हुआ |
.BLD स्क्रिप्ट लोड और डिक्रिप्ट करें और उनकी व्याख्या करें (संवाद, मेन्यू, दुकानें, कई डिस्पैच केस) — अकार्यान्वित ऑपकोड्स पर मौन अंतरालों के साथ।.MTP मैप्स पार्स करें, और वास्तविक 4096-बाइट सेव लेआउट पढ़ें/लिखें।| क्षेत्र | स्थिति | विहित दस्तावेज़ |
|---|---|---|
| BLD फ़ॉर्मेट, सिफर, ऑपकोड्स | 🟢 ठोस | docs/formats/bld-bytecode.md |
| कहानी का पाठ (सभी 26 BLD) | 🟢 निकाला गया | docs/story/STORY_TEXT.txt |
| मेमोरी मैप (100+ पते, सेगमेंट) | 🟢 ठोस | docs/formats/memory-map.md |
| वर्ल्ड मैप / लोकल मैप्स | 🟢 ठोस | docs/world-map.md |
| कॉम्बैट मॉडल | 🟡 ~90%, कुछ अनुमानित | docs/combat-system.md |
| अर्थव्यवस्था / दुकानें / स्टॉक | 🟡 UI प्रवाह अब लाइव देखा गया | docs/story/story-system.md |
| ANM फ़ॉर्मेट | 🟢 प्रलेखित | docs/formats/anm-format.md |
| व्यूपोर्ट एब्स्ट्रैक्शन | 🔴 अपूर्ण | docs/engine/viewport.md |
| ध्वनि | 🔴 0% | — |
ये वास्तविक अवरोधक हैं; §6 का रोडमैप इन पर निर्भर है।
docs/combat-system.md)19EF / 1000 में कॉम्बैट/मूवमेंट कोड Reko आउटपुट से गायब है; उन रूटीन्स को पुनः प्राप्त करना होगा। (docs/UNVERIFIED_DISCOVERIES.md §7)b0057 (0/1/2) और पड़ोसी b0055/b0056/b0058 अनुमानित हैं; प्रॉपर्टी ID 0x1C–0x23 अनमैप्ड। (§5)0x32C6) + अनुवाद टेबल ([0x5460]:0x4602) डिकोड नहीं हुई; प्रवेश द्वार वर्तमान में मैप को हाथ से चलाकर खोजे जाते हैं (स्टार्ट मैप पर Citadel (34,10), ComStar (51,10))। (docs/context.md)0x246C कॉन्फ़िग स्ट्रक्चर केवल आंशिक रूप से मैप्ड है; push/pop अर्थ अज्ञात। (docs/engine/viewport.md)0x32C6 पढ़ती है। (§2)GAME* लोड→सेव→तुलना नहीं की गई।docs/story/story-system.md)BldInterpreter.cs डिफ़ॉल्ट शाखा)2A02 बनाम अन्यत्र)। (§1)केवल एक्ज़ीक्यूटेबल से RE की सीमाएँ हैं (कंपाइलर-अनुकूलित कोड, अनुपस्थित सेगमेंट, अनुमानित अर्थ)। यह समझने के लिए कि गेम में वास्तव में क्या है, हम कई प्रकार के स्रोतों को क्रॉस-चेक करते हैं — कोई भी बाइनरी को प्रतिस्थापित नहीं कर सकता, लेकिन मिलकर वे आशय स्पष्ट करते हैं और अंतराल भरते हैं: