ییفینگ وانگ (Doodlestrike)، مُدِر و توسعه‌دهنده، با پروژه OpenStrike یک جایزۀ فنی شگفت‌انگیز را محقق کرده است: اجرای یک کلونِ Counter-Strike روی کنسول قدیمی Sony PSP با نرخ فریم ثابت ۶۰ فریم در ثانیه. این دستاورد تنها یک پورت ساده نیست؛ وانگ برای این منظور موتور سه‌بعدی Pocket3D را با زبان Rust و موتور جاوااسکریپت PocketJS از صفر نوشته است.

معماری فنی: فراتر از یک موتور رندرینگ ساده

پروژه OpenStrike صرفاً "بارگذاری نقشه" نیست. وانگ معماری سرور/کلاینت/رویداد (Event-driven) پیاده‌سازی کرده که مدیریت رویدادها (مانند شلیک) را از هسته رندرینگ جدا می‌کند. این جداسازی از افت‌های ناگهانی فریم (FPS dips) جلوگیری می‌کند و بازی را حتی در حالت آفلاین قابل تست می‌سازد. هر دو موتور Pocket3D و PocketJS عمومی (Generic) هستند و OpenStrike تنها اولین "محصول"ی است که روی آن‌ها ساخته شده است.

نمای بازی OpenStrike در حال اجرا روی PSP

بهینه‌سازی‌های گرافیکی: خزش نور (Lightmap Baking) و BSP کلاسیک

برای دستیابی به ۶۰ فریم در ثانیه در تفکیک بومی PSP (۴۸۰×۲۷۲)، وانگ از تکنیک پیش‌پردازش دارایی‌ها برای خبز مستقیم نورنمایه‌ها (Lightmaps) در رنگ‌های رأس (Vertex Colors) استفاده کرده است. این کار محاسبه‌های زمان واقعی یا در حین بارگذاری را حذف می‌کند. جالب‌تر از آن، انتخاب روش رندرینگ قدیمی BSP (Binary Space Partitioning) برای컬ینگ (Culling) مناطق نامرئی به جای الگوریتم‌های مدرن، اثبات می‌کند که گاهی «اگر خراب نیست، تعمیر نکن» بهترین فلسفه مهندسی است.

پشتیبانی از PS Vita و دسکتاپ

بازی به طور بومی روی PS Vita نیز اجرا می‌شود با تفکیک موثر ۴ برابر (۹۶۰×۵۴۴) بدون هیچ‌گونه آپ‌اسکیلینگ (Upscaling) در رندرینگ سه‌بعدی یا دارایی‌های دو‌بعدی. پروژه همچنین به عنوان یک بازی دسکتاپ استاندارد و روی امولاتور محبوب PPSSPP قابل اجراست.

مقایسه اجرا روی PSP و PS Vita

وضعیت فعلی و قابلیت ماژولاریت (Moddability)

  • حالت بازی: مسابقات حذف (Elimination) با بات‌ها کاملاً قابل بازی است.
  • منوی خرید: سیستم خرید سلاح (Buy Menu) هنوز پیاده‌سازی نشده است.
  • نقشه‌ها: هشت نقشه اصلی Counter-Strike تست و تایید شده‌اند.
  • ماژولاریت: کدبه‌گونه‌ای نوشته شده که مُدِرها بتوانند به راحتی نقشه، سلاح یا حالت بازی جدید بسازند.

برای اجرای پروژه، کاربر باید کپی قانونی خود از داده‌های دارایی (Assets) Counter-Strike را فراهم کند، مشابه روش استفاده از فایل‌های WAD اصلی در پورت‌های Doom.

نمای کنسول PSP در حال اجرا بازی OpenStrike

چرا این پروژه مهم است؟

OpenStrike نه تنها یک نوستالژی است، بلکه یک مدرسه عملی برنامه‌نویسی سیستم‌ها (Systems Programming) روی سخت‌افزار محدود است. استفاده از Rust برای اطمینان از ایمنی حافظه (Memory Safety) بدون گاربیج کالکتور، جداسازی معماری رویدادها، و بهینه‌سازی‌های گرافیکی سطح پایین، الگوی بسیار خوبی برای توسعه‌دهندگان امبدد (Embedded) و کنسول‌های قدیمی ارائه می‌دهد. مخزن GitHub پروژه باز است و الوثیقۀ فنی برای علاقه‌مندان.

نمای کد منبع Pocket3D به زبان Rust