มันสร้าง ROM ต่อไปนี้:
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
เพื่อปรับปรุงความเร็วในการสร้าง (ขึ้นอยู่กับฮาร์ดแวร์)ตรวจสอบให้แน่ใจว่าความยาวเส้นทาง repo ไม่เกิน 255 อักขระ ชื่อพาธที่ยาวทำให้เกิดข้อผิดพลาดในการสร้าง
ติดตั้ง WSL และ distro ที่คุณเลือกตามคู่มือการติดตั้ง Windows Subsystem for Linux สำหรับ Windows 10 เราขอแนะนำ Debian หรือ Ubuntu 18.04 Linux distribution ภายใต้ WSL หมายเหตุ: ปัจจุบัน WSL1 ไม่รองรับ Ubuntu 20.04
ถัดไป โคลน repo SM64 จากภายในเชลล์ Linux: git clone https://github.com/n64decomp/sm64.git
จากนั้นทำตามคำแนะนำในส่วนการติดตั้ง Linux ด้านล่าง
มี 3 ขั้นตอนในการตั้งค่าบิลด์ที่ใช้งานได้
ระบบ build มีข้อกำหนดแพ็คเกจดังต่อไปนี้:
คำแนะนำในการติดตั้งการพึ่งพาสำหรับ distros 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 และตัวอย่างของ distros ที่เสนอให้:
mips64-elf-
(Arch AUR)mips-linux-gnu-
(Ubuntu และ distros ที่ใช้ 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