
معركة التكنولوجيا: بداية صقر الهلال الهندسة العكسية
هندسة عكسية لـ BattleTech: The Crescent Hawk's Inception (1988، MS-DOS؛ نُشرت بواسطة Infocom، المحرك من Westwood Associates) — وإعادة إنشاء Godot 4 / C# قيد التقدم لها.
اقرأ هذا القسم قبل الوثوق بأي شيء آخر في هذا المستودع. المشروع عبارة عن جهدين بمستويين مختلفين جدًا من النضج، وكلمة "phase" في أي مكان آخر في الوثائق تعني الكود المكتوب، وليس السلوك المُثبت.
ينتج هذا المشروع قطعتين في الوقت نفسه، والثانية تستند على الأولى:
(1) الهندسة العكسية الموثّقة. تفكيك reko/، ومواصفات docs/، ومحاكي
Spice86 مع أدوات MCP الخاصة بـ BattleTech، وأدوات Python. هذا هو عمل الهندسة العكسية الحقيقي:
صيغ الملفات، ونص القصة، وخريطة الذاكرة، وجزء كبير من منطق المحرك موثّق ومُتحقَّق منه
مقابل مخرجات المفكّك وآثار المحاكي الحية. وهو مُخرَج بحد ذاته، وهو أيضًا
المواصفة لـ (2).
(2) إعادة الإنشاء (BattleTechCHI/). برنامج Godot 4 C# يُشتق من (1): يقرأ
ملفات البيانات الأصلية (.BLD، .MTP، .ANM، حفظات GAME*) ويعيد تنفيذ سلوك المحرك
كما هو موثّق في (1). إنه مخلص للبيانات، وليس مخلصًا للسلوك، ولم يُتحقق منه
من البداية إلى النهاية مقابل الأصل.
يعملان بالتوازي، لكن اتجاه الاعتماد ثابت:
(2) لا يمكن أن يكون مخلصًا إلا بقدر اكتمال (1) والتحقق منه. حيث تقول (1) مُستنتَج أو مفتوح، فإن (2) تخمين.
لهذا السبب تضع خارطة الطريق سدّ فجوات الهندسة العكسية (المسار 1) والتحقق التفاضلي لـ (2) مقابل المحاكي (المسار 3) قبل العمل على الميزات. إعادة الإنشاء لا تكون جيدة إلا بقدر جودة الهندسة العكسية التي تستند عليها.
إذا كنت تبحث عن نقل مطابق بالبايت، فهو غير موجود بعد. إذا كنت تبحث عن بيئة هندسة عكسية بمساعدة الأدوات بالإضافة إلى إعادة بناء مدفوعة بالبيانات تعمل على الأصول الأصلية، فهذا ما هو موجود هنا.
المفتاح: ✅ صحيح / منجز · ⚠️ جزئي، تقريبي، أو بفجوات صامتة · ❓ غير معروف / غير مُتحقق منه · ❌ غائب
| النظام | يقرأ الملفات الأصلية وقت التشغيل | السلوك يطابق الأصل | التحقق |
|---|---|---|---|
| فك تشفير BLD + النص المشفّر | ✅ BldLoader.cs | ✅ (النص) | ✅ ذهاب وإياب BLD↔JSON مطابق بالبايت (tools/bld) |
| مفسّر أكواد BLD (28 خانة 0xE4–0xFF) | ✅ | ⚠️ جزئي | ❓ لم يُلعب من البداية إلى النهاية؛ أحجام المعاملات ثابتة (EB/EC/F6/F7)؛ كل الخانات مُعالَجة (لا إسقاط صامت) |
إرسال Fn1CD3 (47 حالة) | ✅ | ⚠️ جزئي | ❓ مُنفَّذ من التفكيك؛ عدة حالات تقريبية |
| ترويسة/بلاطات خريطة MTP | ✅ MapLoader.cs / LocalMapView.cs | ✅ (البنية) | ⚠️ التخطيط مفكوك، لم يُقارَن إطارًا بإطار |
| رسوم ANM المتحركة (XOR-delta RLE) | ✅ وقت التشغيل، مع بديل PNG | ⚠️ | ❓؛ المستودع لا يحتوي على أوراق رسوم ANM (Assets/Animations/ فارغ) |
| بلاطات ICN/CMP | ❌ (محوّلة مسبقًا) | — | TileManager يحمّل BMP؛ Assets/Tilesets/ فارغ |
ملفات الحفظ GAME1–6 (4096 بايت) | ✅ محلّل SaveManager.cs | ❓ | ❌ ذهاب وإياب غير مُتحقق منه مقابل حفظات أصلية |
حالة القصة (b0057، الخصائص) | ✅ (قراءة) | ❓ المعنى مُستنتَج | ❓ الدلالات غير مؤكدة أثناء اللعب |
| القتال (الإصابة، الضرر، الذكاء الاصطناعي، الحرارة، الذخيرة، الضباب) | — (منطق خاص) | ❌ تقريبي | ❌ 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 |
| الاقتصاد / المتاجر / المخزون | 🟡 تدفق الواجهة مُلاحَظ الآن مباشرة | 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 مُستنتَجة؛
معرّفات الخصائص 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)الهندسة العكسية من الملف التنفيذي وحده لها حدود (كود محسّن بواسطة المترجم، مقاطع غائبة، دلالات مُستنتَجة). لفهم ما هو فعلاً في اللعبة نتحقق من عدة أنواع من المصادر — لا يمكن لأي منها أن يحل محل الملف التنفيذي، لكنها معًا توضح النية وتسدّ الفجوات:
docs/walkthrough/bt-walkthrough-1..3.md (التنقل
وتسلسل الأحداث).bt_* تعطي حالة
السجلات/الذاكرة وقت التشغيل بدقة للمقارنة معها.