دراسة حالة * توهو 4: قصة لوتس لاند

إعادة البناء TH04في
أنماط رصاصة.

تبدأ حلقة من الرصاص بحساب زاوية قصير. استخدام REA لتفقد وظيفة دوس الأصلية ، ثم اتبع تعليماتها في قراءة ج++.

PC-98 * 16 بت دوس * ج assembly والتجمع

عرض TH04 إعادة الإعمار

من التعليمات الأصلية إلى المصدر المحدد

  1. 01 * اللعبة الأصليةالرئيسية.إكسال PC-98 قابل للتنفيذ ومساعد زاوية الرصاصة.
  2. 02 * فحص مع REAتعليمات + المراجعتحقق من رمز دوس تحميل وقراءة حساب زاوية من الملف القابل للتنفيذ.
  3. 03 * قراءة ج Cالفضاء-الهدف-تدويرقم بتوصيل كل عملية بإعادة الإعمار التي تمت صيانتها.
  4. 04 * تحقق من المصدر2,139 بايت مطابقةتغطي فحوصات المترجم المسجلة رمز إنشاء التعداد النقطي الذي يحتوي على هذا المساعد.
REA إرجاع الرمز الأصلي وأدلة تحليله. ال TH04 يوفر المشروع شيكات المصدر والمترجم التي تم صيانتها.

كيف تهدف الحلقة إلى اللاعب

يطلب هجوم إيلي حلقة موجهة بعدد أولي قدره 16. مساعد واحد يحسب اتجاه كل رصاصة. يمكن أن تواجه الحلقة نفسها اتجاها ثابتا أو تتجه نحو اللاعب.

مساعدك البرمجي

استخدام REA لمعرفة كيف TH04 يخلق حلقة من الرصاص ويهدف إلى لاعب. شرح الحساب وإظهار التعليمات البرمجية.

مثال موجه ، مع الخروج الأصلي القابل للتنفيذ وإعادة الإعمار متاح محليا.

TH04 يخزن دورة كاملة في اتجاه عقارب الساعة في 256 وحدة زاوية. مقابل 16 رصاصة ، يضيف كل فهرس 16 وحدة: 0, 16, 32, …, 240. تؤدي إضافة اتجاه اللاعب إلى تدوير تلك المواضع معا.

اثنين من الرسوم البيانية من حلقة 16 رصاصة. تبدأ الحلقة الثابتة بزاوية صفر. إضافة اتجاه لاعب 40 تدور كل اتجاه بنفس المقدار; النقاط الأولى المميزة تجاه اللاعب. كلاهما يحتفظ بمسافة 16 وحدة زاوية ، أو 22.5 درجة.
رسم توضيحي للرياضيات الزاوية المستردة للعد 16 واتجاه اللاعب 40 ودوران القالب 0. الشكل المفتوح

قالب إطلاق النار في المصدر المسترد

هجوم حلقة اللي · مقتطفات المصدر
bullet_template.angle = 0;
bullet_template.group = BG_RING_AIMED;
bullet_template.count = 16;
bullet_template_tune();

تحدد هذه الخطوط النمط قبل ضبط الصعوبة والأداء. اقرأ مصدر الهجوم.

ماذا REA المرتجعات

نحن نفحص bullet_velocity_and_angle_set()، الوظيفة التي تحدد سرعة وزاوية كل رصاصة. REA إرجاع تعليماته ، بسيودوكود والمراجع. ثلاثة أجزاء من هذه النتيجة تشرح النمط.

  1. تحقق من صورة دوس قبل قراءة رمزها

    وكيل → REA
    open_binary
    {"path": "MAIN.EXE"}
    
    inspect_native_load_image
    {}
    REA agent وكيل * الحقول المحددة
    status: "verified"
    format: "dos-mz"
    load_segment: 4096
    header_bytes: 6144
    module_bytes: 150114

    يربط الشيك الكود المحمل وسجلات النقل إلى الملف القابل للتنفيذ المرفق. يتم تقصير المسار أعلاه للعرض.

  2. قراءة الحلبة ضرب وتقسيم

    وكيل → REA · analyze_function
    {"procedure": "0x2cfc8"}
    REA - وكيل * مقتطفات التعليمات
    0x2d0eb: MOV AX, SI
    0x2d0ed: SHL AX, 0x8
    0x2d0f0: MOV DL, byte ptr [0x53af]
    0x2d0f9: IDIV BX

    SI يحمل مؤشر رصاصة. يضربها التحول في 256 ، ثم يستخدم القسمة العد المقروء من DS:53AF. أسماء المصدر المحتفظ بها هذا الحقل bullet_template.count. يظهر التسلسل الكامل أدناه.

  3. ابحث عن المكان الذي يتحول فيه النمط نحو المشغل

    نفس النتيجة وظيفة * تهدف مقتطفات
    0x2d190: SUB AX, word ptr [0x53a6]
    0x2d198: SUB AX, word ptr [0x53a4]
    0x2d19d: CALLF 0x1000:1da8
    0x2d1a2: ADD word ptr [BP + -0x2], AX
    المقابلة الحفاظ ج C
    group_angle_offset += iatan2(
      player_pos.cur.y - bullet_template.origin.y,
      player_pos.cur.x - bullet_template.origin.x
    );

    المعاملات تعليمات فضح اثنين من الاختلافات تنسيق ومساعد الاتجاه. تضاف قيمة الإرجاع إلى زاوية الحلقة النسبية. أسماء المصدر تجعل هذه العناوين قابلة للقراءة; REA يتيح للوكيل التحقق من العمليات الأصلية خلفهم.

من التجميع إلى القراءة ج C

حدد خطوة لمطابقة التعليمات الأصلية مع حساب الزاوية. يتبع هذا الملخص مسار الحلقة المستهدفة ؛ يعالج المصدر الكامل أيضا فروق الأسعار والمداخن والأنماط العشوائية.

REA * تعليمات 16 بت الأصلية
0x2cfcf: MOV SI, word ptr [BP + 0x4]
0x2d0eb: MOV AX, SI
0x2d0ed: SHL AX, 0x8
0x2d0f0: MOV DL, byte ptr [0x53af]
0x2d0f4: MOV DH, 0x0
0x2d0f6: PUSH DX
0x2d0f7: CWD
0x2d0f8: POP BX
0x2d0f9: IDIV BX
0x2d0fb: MOV word ptr [BP + -0x2], AX
0x2d18d: MOV AX, [0x4650]
0x2d190: SUB AX, word ptr [0x53a6]
0x2d194: PUSH AX
0x2d195: MOV AX, [0x464e]
0x2d198: SUB AX, word ptr [0x53a4]
0x2d19c: PUSH AX
0x2d19d: CALLF 0x1000:1da8
0x2d1a2: ADD word ptr [BP + -0x2], AX
0x2d1b9: MOV AL, byte ptr [BP + -0x2]
0x2d1bc: ADD AL, byte ptr [0x53ad]
0x2d1c0: MOV [0xbcc8], AL
قراءة ج · * تهدف حلقة ملخص
unsigned char aimed_ring_angle(
    int index, int count,
    int player_direction,
    unsigned char rotation)
{
    int angle = index;
    angle = (angle * 256) / count;
    angle += player_direction;
    angle += rotation;
    return (unsigned char)angle;
}

01 * قراءة مؤشر رصاصة. يتم تحميل وسيطة المكدس في SI. في حلقة مكونة من 16 رصاصة ، يمتد فهرس الأعضاء هذا من 0 إلى 15.

يختار التجميع فرع الحلقة المستهدفة وحساب الهدف والمخزن النهائي. ج above أعلاه هو ملخص مقروء. تنطبق عمليات التحقق من المترجم أدناه على المصدر المحفوظ في المشروع المرتبط.

قراءة حلقة الحفاظ ومصدر الهدف
حلقة ماكرو · TH04 فرع ، مقتطفات
angle_offset = (i * BULLET_ANGLE_FULL_TURN) / count;
if (i >= (count - 1)) {
    group_complete = true;
}
goto aim_or_no_aim;
الزاوية والسرعة * مقتطفات المصدر
aim:
    group_angle_offset += iatan2(
        (player_pos.cur.y - bullet_template.origin.y),
        (player_pos.cur.x - bullet_template.origin.x)
    );

no_aim:
    vector2_near(
        bullet_template.velocity,
        (group_angle_offset + bullet_template.angle),
        speed
    );
    bullet_spawn_angle = (group_angle_offset + bullet_template.angle);

حلقة ماكرو · الهدف ومصدر السرعة · تمثيل الزاوية

التحقق من المصدر الذي تم صيانته

ال TH04 تقوم الشيكات المسجلة للمشروع بتجميع رمز إنشاء الرصاص ، بما في ذلك هذا المساعد ، مع سلسلة أدوات توربو سي J 4.0 ي.

2,139 بايت مطابقة

يتطابق رمز إنشاء التعداد النقطي المجمع مع قسم 2139 بايت من الملف التنفيذي الأصلي.

اثنين نظيفة يبني

اثنين من يبني منفصلة تنتج نفس بايت مطابقة. تتطابق تجزئات الإدخال المسجلة مع المصدر المحفوظ الموضح هنا.

تم تسجيله في 3 أكتوبر 2026. قراءة الشيكات مترجم.

تحديد الهدف ونطاق التحليل
الهدف الأصلي MAIN.EXE, 156 ، 258 بايت ، دوس ميجا هرتز
دخول المساعد 0x2cfc8 في REAالصورة المحملة
إزاحة الملف الأصلي 0x1e7c8، عاد من قبل address_to_file_offset
فحص الكود المسجل REA 4.1.0 * 7 أكتوبر 2026

تغطي شيكات المترجم قسم الرمز النقطي الكامل ، بما في ذلك هذا المساعد. كما أنها تقارن مساهمة الخريطة وإعادة التوطين المتداخلة.

REA تم التحقق من صورة تحميل دوس الثابتة في مقطع التحميل 0x1000. تصف عناوينها صورة التحليل هذه. تقارير نتيجة وظيفة 503 بايت الجسم في نطاقين عبر فترة 517 بايت ؛ التعليمات المحددة أعلاه تكمن في تلك النطاقات المبلغ عنها.

أسماء المصدر والشيكات مترجم تأتي من TH04 نقطة تفتيش 0d72e980. استخدمت ملاحظات إعادة الإعمار السابقة نصوص التحليل الخاصة بالمشروع; تضيف هذه الصفحة جديدة REA التفتيش على نفس الهدف الأصلي. يتم تثبيت هوية اللعبة الموردة من خلال بيان المستودع الخاص بها ، مع استمرار فتح مصدر التفريغ الأصلي المستقل.

يوضح الشكل حساب الزاوية. ضوابط اللعبة الكاملة والتوقيت و PC-98 سلوك الأجهزة لديها الشيكات وقت التشغيل منفصلة في مشروع إعادة الإعمار.

كامل TH04 إعادة الإعمار

يقوم المشروع ببناء منتجات دوس الأربعة للعبة من صيانة ج assembly والتجميع. ما وراء جيل رصاصة ، ويغطي المصدر مراحل ، ورؤساء ، وتقديم ، والمدخلات ، والقوائم ، والنهايات والتعامل مع النتيجة.

استكشاف TH04 مستودع

أعلى