كيف تهدف الحلقة إلى اللاعب
يطلب هجوم إيلي حلقة موجهة بعدد أولي قدره 16. مساعد واحد يحسب اتجاه كل رصاصة. يمكن أن تواجه الحلقة نفسها اتجاها ثابتا أو تتجه نحو اللاعب.
استخدام REA لمعرفة كيف TH04 يخلق حلقة من الرصاص ويهدف إلى لاعب. شرح الحساب وإظهار التعليمات البرمجية.
مثال موجه ، مع الخروج الأصلي القابل للتنفيذ وإعادة الإعمار متاح محليا.
TH04 يخزن دورة كاملة في اتجاه عقارب الساعة في 256 وحدة زاوية. مقابل 16 رصاصة ، يضيف كل فهرس 16 وحدة: 0, 16, 32, …, 240. تؤدي إضافة اتجاه اللاعب إلى تدوير تلك المواضع معا.
قالب إطلاق النار في المصدر المسترد
bullet_template.angle = 0;
bullet_template.group = BG_RING_AIMED;
bullet_template.count = 16;
bullet_template_tune();
تحدد هذه الخطوط النمط قبل ضبط الصعوبة والأداء. اقرأ مصدر الهجوم.
ماذا REA المرتجعات
نحن نفحص bullet_velocity_and_angle_set()، الوظيفة التي تحدد سرعة وزاوية كل رصاصة. REA إرجاع تعليماته ، بسيودوكود والمراجع. ثلاثة أجزاء من هذه النتيجة تشرح النمط.
-
تحقق من صورة دوس قبل قراءة رمزها
وكيل → REAopen_binary {"path": "MAIN.EXE"} inspect_native_load_image {}REA agent وكيل * الحقول المحددةstatus: "verified" format: "dos-mz" load_segment: 4096 header_bytes: 6144 module_bytes: 150114يربط الشيك الكود المحمل وسجلات النقل إلى الملف القابل للتنفيذ المرفق. يتم تقصير المسار أعلاه للعرض.
-
قراءة الحلبة ضرب وتقسيم
وكيل → REA ·analyze_function{"procedure": "0x2cfc8"}REA - وكيل * مقتطفات التعليمات0x2d0eb: MOV AX, SI 0x2d0ed: SHL AX, 0x8 0x2d0f0: MOV DL, byte ptr [0x53af] 0x2d0f9: IDIV BXSIيحمل مؤشر رصاصة. يضربها التحول في 256 ، ثم يستخدم القسمة العد المقروء منDS:53AF. أسماء المصدر المحتفظ بها هذا الحقلbullet_template.count. يظهر التسلسل الكامل أدناه. -
ابحث عن المكان الذي يتحول فيه النمط نحو المشغل
نفس النتيجة وظيفة * تهدف مقتطفات0x2d190: SUB AX, word ptr [0x53a6] 0x2d198: SUB AX, word ptr [0x53a4] 0x2d19d: CALLF 0x1000:1da8 0x2d1a2: ADD word ptr [BP + -0x2], AXالمقابلة الحفاظ ج Cgroup_angle_offset += iatan2( player_pos.cur.y - bullet_template.origin.y, player_pos.cur.x - bullet_template.origin.x );المعاملات تعليمات فضح اثنين من الاختلافات تنسيق ومساعد الاتجاه. تضاف قيمة الإرجاع إلى زاوية الحلقة النسبية. أسماء المصدر تجعل هذه العناوين قابلة للقراءة; REA يتيح للوكيل التحقق من العمليات الأصلية خلفهم.
من التجميع إلى القراءة ج C
حدد خطوة لمطابقة التعليمات الأصلية مع حساب الزاوية. يتبع هذا الملخص مسار الحلقة المستهدفة ؛ يعالج المصدر الكامل أيضا فروق الأسعار والمداخن والأنماط العشوائية.
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.
02 * الفضاء الاتجاهات حول بدوره الكامل. SHL AX,8 يتضاعف بنسبة 256. العد هو صفر-ممتد إلى كلمة ، ثم IDIV يقسم المنتج على هذا العدد. بالنسبة للعد 16 ، يتقدم كل فهرس بـ 16 وحدة زاوية.
03 * إضافة اتجاه لاعب. يشكل الطرحان إحداثيات أصل اللاعب ناقص. مساعد الاتجاه يعود زاوية في AX؛ مضيفا أنه يحول الحلقة بأكملها نحو اللاعب.
04 * إضافة دوران النمط. ADD AL,[0x53ad] يضيف زاوية القالب. قالب إيلي الأولي يضبطه على الصفر ؛ يمكن للأنماط الأخرى استخدام نفس المساعد مع الدوران.
05 * حافظ على الزاوية النهائية في بايت واحد. يكتب المتجر AL إلى حقل تفرخ الزاوية. القيم التفاف بعد 255 ، تماما كما يفعل يلقي بايت غير موقعة. يحول المصدر المحيط أيضا هذه الزاوية والسرعة إلى سرعة.
يختار التجميع فرع الحلقة المستهدفة وحساب الهدف والمخزن النهائي. ج above أعلاه هو ملخص مقروء. تنطبق عمليات التحقق من المترجم أدناه على المصدر المحفوظ في المشروع المرتبط.
قراءة حلقة الحفاظ ومصدر الهدف
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 والتجميع. ما وراء جيل رصاصة ، ويغطي المصدر مراحل ، ورؤساء ، وتقديم ، والمدخلات ، والقوائم ، والنهايات والتعامل مع النتيجة.
- مصدر توليد الرصاصالمساعد الكامل وأنواع الأنماط الأخرى وضبط القالب.
- دوس بناء وتشغيل دليلبناء المصدر واختباره في المشروع PC-98 سير عمل المحاكي.
- حالة المشروع الحاليةالتحقق من دوس ومنفذ إكس 64 الأصلي المنفصل.