يقوم ببناء الرومات التالية:
sha1: 8a20a5c83d6ceb0f0506cfc9fa20d8f438cafe51
sha1: 9bef1128717f958171a4afac3ed78ee2bb4e86ce
sha1: 4ac5721683d0e0b6bbb561b58a71740845dceea9
sha1: 3f319ae697533a255a1003d09202379d78d5a2e0
sha1: 2e1db2780985a1f068077dc0444b685f39cd90ec
لا يتضمن هذا الريبو جميع الأصول اللازمة لتجميع ROM. مطلوب نسخة مسبقة من اللعبة لاستخراج الأصول.
sudo apt install -y binutils-mips-linux-gnu build-essential git pkgconf python3
git clone https://github.com/n64decomp/sm64.git
baserom.<VERSION>.z64
في مجلد المشروع لاستخراج الأصول، حيث يمكن أن يكون VERSION
jp
أو us
أو eu
أو sh
أو cn
.make
للبناء. حدد الإصدار من خلال make VERSION=<VERSION>
. أضف -j4
لتحسين سرعة البناء (يعتمد على الأجهزة).تأكد من أن طول مسار الريبو لا يتجاوز 255 حرفًا. تؤدي أسماء المسارات الطويلة إلى أخطاء في البناء.
قم بتثبيت WSL والتوزيع الذي تختاره باتباع دليل تثبيت نظام Windows الفرعي لنظام Linux لنظام التشغيل Windows 10. نوصي بتوزيعات Debian أو Ubuntu 18.04 Linux ضمن WSL. ملحوظة: WSL1 لا يدعم حاليًا Ubuntu 20.04.
بعد ذلك، قم باستنساخ SM64 repo من داخل Linux Shell: git clone https://github.com/n64decomp/sm64.git
ثم تابع اتباع الإرشادات الواردة في قسم تثبيت Linux أدناه.
هناك 3 خطوات لإعداد بناء العمل.
يحتوي نظام البناء على متطلبات الحزمة التالية:
يتم توفير تعليمات تثبيت التبعية لتوزيعات Linux الشائعة أدناه:
لتثبيت تبعيات البناء:
sudo apt install -y binutils-mips-linux-gnu build-essential git pkgconf python3
لتثبيت تبعيات البناء:
sudo pacman -S base-devel python
قم بتثبيت حزم AUR التالية:
يجب أن تحتوي معظم توزيعات Linux الحديثة على حزم مكافئة للحزمتين الأخريين المذكورتين أعلاه. قد تضطر إلى استخدام إصدار مختلف من GNU binutils. فيما يلي قائمة بتوزيعات binutils المتوافقة تمامًا مع الدعم في ملف makefile، وأمثلة على التوزيعات التي توفرها:
mips64-elf-
(قوس AUR)mips-linux-gnu-
(Ubuntu والتوزيعات الأخرى المستندة إلى Debian)mips64-linux-gnu-
(RHEL/CentOS/Fedora)يمكنك أيضًا استخدام Docker للتعامل مع تثبيت الصورة بأقل قدر من التبعيات.
لكل إصدار (jp/us/eu/sh/cn) تريد إنشاء ROM له، ضع ROM موجود في ./baserom.<VERSION>.z64
لاستخراج الأصول.
قم بتشغيل make
لإنشاء ROM (الإعداد الافتراضي هو VERSION=us
). أمثلة أخرى:
make VERSION=jp -j4 # build (J) version instead with 4 jobs
make VERSION=eu COMPARE=0 # build (EU) version but do not compare ROM hashes
يمكن العثور على القطع الأثرية الناتجة في دليل build
.
القائمة الكاملة للمتغيرات القابلة للتكوين مدرجة أدناه، مع كون الافتراضي هو الأول المدرج:
VERSION
: jp
، us
، eu
، sh
، cn
GRUCODE
: f3d_old
، f3d_new
، f3dex
، f3dex2
، f3dzex
COMPARE
: 1
(قارن تجزئة ROM)، 0
(لا تقارن تجزئة ROM)NON_MATCHING
: استخدم تطبيقات C المكافئة وظيفيًا لغير المطابقات. سيتم أيضًا تجنب حالات السلوك غير المحدد.CROSS
: بادئة أداة التحويل البرمجي المتقاطع (مثال: mips64-elf-
).مع نظام التشغيل macOS، يمكنك إما استخدام Homebrew أو Docker.
قم بتثبيت Homebrew والتبعيات التالية:
brew update
brew install coreutils make pkg-config tehzz/n64-dev/mips64-elf-binutils
لكل إصدار (jp/us/eu/sh/cn) تريد إنشاء ROM له، ضع ROM موجود في ./baserom.<VERSION>.z64
لاستخراج الأصول.
استخدم إصدار GNU الخاص بـ Homebrew لأن الإصدار المضمن في نظام التشغيل macOS قديم جدًا.
gmake VERSION=jp -j4 # build (J) version instead with 4 jobs
بعد تثبيت Docker وتشغيله، قم بإنشاء صورة عامل الإرساء. هذا يجب أن يتم مرة واحدة فقط.
docker build -t sm64 .
للبناء، قم بتثبيت نظام الملفات المحلي في حاوية Docker وقم ببناء ROM باستخدام docker run sm64 make
.
docker run --rm --mount type=bind,source="$(pwd)",destination=/sm64 sm64 make VERSION=us -j4
بالنسبة لمضيف Linux، يحتاج Docker إلى توجيه المستخدم الذي يجب أن يمتلك ملفات الإخراج:
docker run --rm --mount type=bind,source="$(pwd)",destination=/sm64 --user $UID:$GID sm64 make VERSION=us -j4
يمكن العثور على القطع الأثرية الناتجة في دليل build
.
sm64
├── actors: object behaviors, geo layout, and display lists
├── asm: handwritten assembly code, rom header
│ └── non_matchings: asm for non-matching sections
├── assets: animation and demo data
│ ├── anims: animation data
│ └── demos: demo data
├── bin: C files for ordering display lists and textures
├── build: output directory
├── data: behavior scripts, misc. data
├── doxygen: documentation infrastructure
├── enhancements: example source modifications
├── include: header files
├── levels: level scripts, geo layout, and display lists
├── lib: SDK library code
├── rsp: audio and Fast3D RSP assembly code
├── sound: sequences, sound samples, and sound banks
├── src: C source code for game
│ ├── audio: audio code
│ ├── buffers: stacks, heaps, and task buffers
│ ├── engine: script processing engines and utils
│ ├── game: behaviors and rest of game source
│ ├── goddard: Mario intro screen
│ └── menu: title screen and file, act, and debug level selection menus
├── text: dialog, level names, act names
├── textures: skybox and generic texture data
└── tools: build tools
طلبات السحب هي موضع ترحيب. لإجراء تغييرات كبيرة، يرجى فتح مشكلة أولاً لمناقشة ما تريد تغييره.
قم بتشغيل clang-format
على التعليمات البرمجية الخاصة بك للتأكد من أنها تلبي معايير الترميز الخاصة بالمشروع.
الديسكورد الرسمي: discord.gg/DuYH3Fh