VERA20k

Red Alert 2 Yuri's Revenge — rebuilt from scratch in Rust

View the Project on GitHub YuriPlanet/vera20k

VERA20k

Svenska · 简体中文 · Deutsch · العربية · Русский · ไทย · Türkçe · English

لعبة Red Alert 2: Yuri’s Revenge — أُعيد بناؤها من الصفر بلغة Rust.

هذه خريطة مختصرة للكود. إذا تعارضت مع الكود، فالكود هو المرجع. يوضح تعليق //! في بداية كل وحدة ما تفعله الوحدة وما يمكنها الاعتماد عليه.

الكود

  • sim/ — كل حالة اللعبة ومنطق اللعب الحتمي.
  • render/ — محرك العرض المبني على wgpu.
  • app/ — النافذة والإدخال والتحميل والحفظ، ويربط sim وrender وui وaudio وnet معًا.
  • ui/ — القوائم ومربعات الحوار وشاشات اللعب والشريط الجانبي.
  • audio/ — المؤثرات الصوتية والموسيقى.
  • net/ — نظام lockstep الحتمي. لا توجد طبقة نقل عبر الشبكة بعد.
  • rules/ — ملفات INI الخاصة باللعبة الأصلية وطبقاتها.
  • map/ — الخرائط والبيئات (theaters) والتضاريس والمحفزات ومولّد الخرائط العشوائية.
  • assets/ — محللات لتنسيقات ملفات اللعبة الأصلية (.mix و.shp و.vxl و.pal وفيديو Bink وغيرها).
  • util/ وasset_tools/ وbin/ — أدوات مساعدة مشتركة وأدوات لفحص الموارد وبرامج إضافية.

كيف تتكامل الأجزاء

توجد كل حالة اللعبة القابلة للتغيير في بنية واحدة هي Simulation (src/sim/world/mod.rs). وتشغّل SimRuntime::advance_frame() إطارًا واحدًا بترتيب الإطارات في اللعبة الأصلية.

يحوّل التطبيق مدخلات اللاعب إلى أوامر للمحاكاة. وبعد كل إطار يسلّم الحالة الجديدة إلى محرك العرض ويشغّل الأصوات التي أنتجها ذلك الإطار. يقرأ العرض حالة المحاكاة فقط، ولا تعتمد sim/ أبدًا على render/ أو ui/ أو audio/ أو net/.

الحتمية

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

  • تفضّل رياضيات المحاكاة نوع الفاصلة الثابتة SimFixed على الأعداد ذات الفاصلة العائمة.
  • تقابل ثلاثة تدفقات للأرقام العشوائية المولدات الثلاثة في اللعبة الأصلية. السحب من التدفق الخطأ يغيّر كل سحب لاحق.
  • تأخذ الكائنات أدوارها بترتيب الكائنات النشطة في اللعبة الأصلية.

ينتهي كل إطار بتجزئة (hash) للحالة سيعتمد عليها اللعب متعدد اللاعبين بنظام lockstep.