Construye las siguientes ROM:
sha1: 8a20a5c83d6ceb0f0506cfc9fa20d8f438cafe51
sha1: 9bef1128717f958171a4afac3ed78ee2bb4e86ce
sha1: 4ac5721683d0e0b6bbb561b58a71740845dceea9
sha1: 3f319ae697533a255a1003d09202379d78d5a2e0
sha1: 2e1db2780985a1f068077dc0444b685f39cd90ec
Este repositorio no incluye todos los activos necesarios para compilar las ROM. Se requiere una copia previa del juego para extraer los activos.
sudo apt install -y binutils-mips-linux-gnu build-essential git pkgconf python3
git clone https://github.com/n64decomp/sm64.git
baserom.<VERSION>.z64
en la carpeta del proyecto para la extracción de activos, donde VERSION
puede ser jp
, us
, eu
, sh
o cn
.make
para construir. Especifique la versión mediante make VERSION=<VERSION>
. Agregue -j4
para mejorar la velocidad de compilación (depende del hardware).Asegúrese de que la longitud de la ruta del repositorio no supere los 255 caracteres. Los nombres de ruta largos provocan errores de compilación.
Instale WSL y una distribución de su elección siguiendo la Guía de instalación del Subsistema de Windows para Linux para Windows 10. Recomendamos las distribuciones de Linux Debian o Ubuntu 18.04 en WSL. Nota: WSL1 actualmente no es compatible con Ubuntu 20.04.
A continuación, clone el repositorio SM64 desde el shell de Linux: git clone https://github.com/n64decomp/sm64.git
Luego continúe siguiendo las instrucciones en la sección de instalación de Linux a continuación.
Hay 3 pasos para configurar una compilación funcional.
El sistema de compilación tiene los siguientes requisitos de paquete:
A continuación se proporcionan instrucciones de instalación de dependencias para distribuciones comunes de Linux:
Para instalar dependencias de compilación:
sudo apt install -y binutils-mips-linux-gnu build-essential git pkgconf python3
Para instalar dependencias de compilación:
sudo pacman -S base-devel python
Instale los siguientes paquetes AUR:
La mayoría de las distribuciones de Linux modernas deberían tener paquetes equivalentes a los otros dos enumerados anteriormente. Es posible que tengas que utilizar una versión diferente de GNU binutils. A continuación se enumeran distribuciones de binutils totalmente compatibles con soporte en el archivo MAKE y ejemplos de distribuciones que las ofrecen:
mips64-elf-
(Arco AUR)mips-linux-gnu-
(Ubuntu y otras distribuciones basadas en Debian)mips64-linux-gnu-
(RHEL/CentOS/Fedora)También puede utilizar Docker para gestionar la instalación de una imagen con dependencias mínimas.
Para cada versión (jp/us/eu/sh/cn) para la que desee crear una ROM, coloque una ROM existente en ./baserom.<VERSION>.z64
para la extracción de activos.
Ejecute make
para compilar la ROM (el valor predeterminado es VERSION=us
). Otros ejemplos:
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
Los artefactos resultantes se pueden encontrar en el directorio build
.
La lista completa de variables configurables se enumera a continuación, siendo la predeterminada la primera en la lista:
VERSION
: jp
, us
, eu
, sh
, cn
GRUCODE
: f3d_old
, f3d_new
, f3dex
, f3dex2
, f3dzex
COMPARE
: 1
(comparar hash de ROM), 0
(no comparar hash de ROM)NON_MATCHING
: utilice implementaciones de C funcionalmente equivalentes para no coincidencias. También evitará casos de comportamiento indefinido.CROSS
: Prefijo de herramienta de compilación cruzada (Ejemplo: mips64-elf-
).Con macOS, puedes usar Homebrew o Docker.
Instale Homebrew y las siguientes dependencias:
brew update
brew install coreutils make pkg-config tehzz/n64-dev/mips64-elf-binutils
Para cada versión (jp/us/eu/sh/cn) para la que desee crear una ROM, coloque una ROM existente en ./baserom.<VERSION>.z64
para la extracción de activos.
Utilice la marca GNU de Homebrew porque la versión incluida con macOS es demasiado antigua.
gmake VERSION=jp -j4 # build (J) version instead with 4 jobs
Después de instalar e iniciar Docker, cree la imagen de Docker. Esto sólo debe hacerse una vez.
docker build -t sm64 .
Para compilar, monte el sistema de archivos local en el contenedor Docker y cree la ROM con docker run sm64 make
.
docker run --rm --mount type=bind,source="$(pwd)",destination=/sm64 sm64 make VERSION=us -j4
Para un host Linux, se debe indicar a Docker qué usuario debe poseer los archivos de salida:
docker run --rm --mount type=bind,source="$(pwd)",destination=/sm64 --user $UID:$GID sm64 make VERSION=us -j4
Los artefactos resultantes se pueden encontrar en el directorio 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
Las solicitudes de extracción son bienvenidas. Para cambios importantes, primero abra un problema para discutir lo que le gustaría cambiar.
Ejecute clang-format
en su código para asegurarse de que cumpla con los estándares de codificación del proyecto.
Discordia oficial: discord.gg/DuYH3Fh