مهندسی معکوس و بررسی کدهای داخلی بازی کلاسیک Fast Food Tycoon 2 با کمک هوش مصنوعی — Decompiling Fast Food Tycoon 2: Drawing the World
خلاصه
این مقاله به بررسی روند مهندسی معکوس بازی قدیمی و ایزومتریک Fast Food Tycoon 2 با استفاده از ابزار Ghidra و ایجنت هوش مصنوعی میپردازد. نویسنده جزئیات فنی جذابی از رندرینگ گرافیکی، سیستم نورپردازی، مدیریت انیمیشنها و الگوریتم امتیازدهی به پیتزاها را در کدهای این بازی کشف و تحلیل کرده است.
مقدمه و زمینه
بازی Fast Food Tycoon 2 (که در اروپا با نام Pizza Connection 2 شناخته میشود) یک بازی شبیهسازی کسبوکار محصول سال ۲۰۰۱ است که در آن بازیکنان امپراتوری پیتزای خود را در یک شهر ایزومتریک مدیریت میکنند. یکی از توسعهدهندگان وب و علاقهمندان به بازیهای قدیمی، تصمیم گرفته است با راهاندازی یک حلقه مبتنی بر ایجنت هوش مصنوعی و ابزار Ghidra، این بازی را مهندسی معکوس کند. هدف این پروژه، بررسی کدهای کامپایلشده و سر درآوردن از منطق داخلی بازی است که سالها برای نویسنده به عنوان یک معما باقی مانده بود.
استخراج و تحلیل کدها
فایل اجرایی بازی شامل بیش از ۴ هزار تابع است که به کمک ابزار Ghidra به حدود ۹.۵ مگابایت متن شبیه به زبان C تبدیل شدند. برای جلوگیری از سردرگمی در میان این حجم از کد، تمام دادهها به پایگاهداده SQLite منتقل شدند و اسکریپتهای سادهای برای جستجوی توابع، متغیرها و ارجاعات رشتهای نوشته شد. با استفاده از تابع ReadProcessMemory در ویندوز، ایجنت هوش مصنوعی توانست وضعیت حافظه بازی را با تصاویر روی صفحه مطابقت دهد و آدرس مموری مربوط به متغیرهایی مثل پول نقد یا موقعیت دوربین را پیدا کند. همچنین با پچ کردن هندلر پیامهای ویندوز، امکان ارسال دستورات به ترد رابط کاربری بازی فراهم شد.
مکانیسمهای رندرینگ و گرافیک
برخلاف بازیهای سهبعدی مدرن، دنیای این بازی یک نقاشی دو بعدی به همراه صدها اسپرایت است. سیستم رندرینگ بازی از تکنیکهای جالبی بهره میبرد:
- منطقه کثیف (Dirty Regions): رندرور تنها بخشهایی از صفحه را که تغییر کردهاند (مثل حرکت یک عابر پیاده یا جابجایی دوربین) بازسازی میکند و نیازی به رندر کردن کل تصویر در هر فریم نیست.
- لایهبندی و پنهانسازی: برای اینکه کاراکترهایی که پشت موانع قرار دارند قابل تشخیص باشند، ابتدا شکل آنها با مقادیر موقت پیکسلی علامتگذاری میشود و در مراحل بعدی رندر، با خطوط راهنما به نمایش درمیآیند.
- رنگ و نور جداگانه: پیکسلها در بافر حافظه، مقدار رنگ ۱۶ بیتی و بایت نورپردازی را جدا از هم نگه میدارند و در آخرین مرحله ترکیب میشوند.
نورپردازی و چرخه شبانهروز
سیستم نورپردازی بازی از یک جدول ۲۵ ساعته برای تعیین میزان روشنایی محیط پیروی میکند. چراغها و لامپهای شهر با استفاده از شناسه شیء (Object ID) خود آستانههای متفاوتی برای روشن شدن دارند تا در گروههای کوچک به مرور روشن شوند. مناطق داخلی شعبهها و پنجرهها نیز دارای ماسکهای نوری خاصی هستند که باعث میشود روشنایی پنلها و پنجرهها حتی در تاریکی شب هم حفظ شود.
هوش مصنوعی و رفتار شهروندان
انیمیشنهای بازی پیشرندر شدهاند و در فایلهای .ani قرار دارند. گرههای از پیش تعریفشدهای روی نقشه برای مسیر عابران و خودروها وجود دارد. رفتار شهروندان نیز بر اساس برنامههای روزانه از پیش تعیینشده شکل میگیرد؛ مثلاً گاتها تا ساعت ۹ صبح در خانه میمانند یا دانشجویان تمایل زیادی به حضور در پابها دارند.
یکی از جذابترین کشفیات این پروژه، پی بردن به الگوریتم امتیازدهی به پیتزاها است. بازی صفحه پیتزا را به ۲۴ منطقه تقسیم میکند تا یکنواختی پخش تاپینگها، تقارن مواد اولیه و سازگاری طعمها را بررسی کند. حتی یک سیستم بررسی سرقت ادبی (Plagiarism Check) نیز وجود دارد که مانع از کپی کردن ساده دستور پخت رقبا میشود.
چرا این بررسی برای مهندسان اهمیت دارد؟
این پروژه نشان میدهد که چگونه میتوان با ترکیب ابزارهای سنتی مهندسی معکوس مانند Ghidra با مدلهای زبانی و ایجنتهای هوش مصنوعی، رازهای نهفته در نرمافزارهای قدیمی را کشف کرد. کاربران ردیت و هکرنیوز نیز از این نکته استقبال کردهاند که بازیهای قدیمی با وجود محدودیتهای سختافزاری آن دوران، چه معماریهای هوشمندانهای برای بهینهسازی رندرینگ و شبیهسازی رفتار ایجنتها به کار میگبردند.
این مطلب بهصورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل