Ele constrói as seguintes ROMs:
sha1: 8a20a5c83d6ceb0f0506cfc9fa20d8f438cafe51
sha1: 9bef1128717f958171a4afac3ed78ee2bb4e86ce
sha1: 4ac5721683d0e0b6bbb561b58a71740845dceea9
sha1: 3f319ae697533a255a1003d09202379d78d5a2e0
sha1: 2e1db2780985a1f068077dc0444b685f39cd90ec
Este repositório não inclui todos os ativos necessários para compilar as ROMs. É necessária uma cópia prévia do jogo para extrair os ativos.
sudo apt install -y binutils-mips-linux-gnu build-essential git pkgconf python3
git clone https://github.com/n64decomp/sm64.git
baserom.<VERSION>.z64
na pasta do projeto para extração de ativos, onde VERSION
pode ser jp
, us
, eu
, sh
ou cn
.make
para construir. Especifique a versão por meio de make VERSION=<VERSION>
. Adicione -j4
para melhorar a velocidade de construção (dependente de hardware).Certifique-se de que o comprimento do caminho do repositório não exceda 255 caracteres. Nomes de caminhos longos resultam em erros de construção.
Instale o WSL e uma distribuição de sua escolha seguindo o Guia de instalação do subsistema Windows para Linux para Windows 10. Recomendamos distribuições Linux Debian ou Ubuntu 18.04 em WSL. Nota: WSL1 atualmente não oferece suporte ao Ubuntu 20.04.
Em seguida, clone o repositório SM64 de dentro do shell do Linux: git clone https://github.com/n64decomp/sm64.git
Em seguida, continue seguindo as instruções na seção de instalação do Linux abaixo.
Existem 3 etapas para configurar uma compilação funcional.
O sistema de compilação possui os seguintes requisitos de pacote:
As instruções de instalação de dependência para distribuições Linux comuns são fornecidas abaixo:
Para instalar dependências de compilação:
sudo apt install -y binutils-mips-linux-gnu build-essential git pkgconf python3
Para instalar dependências de compilação:
sudo pacman -S base-devel python
Instale os seguintes pacotes AUR:
A maioria das distribuições Linux modernas devem ter pacotes equivalentes aos outros dois listados acima. Talvez seja necessário usar uma versão diferente do GNU binutils. Listadas abaixo estão distribuições binutils totalmente compatíveis com suporte no makefile e exemplos de distros que as oferecem:
mips64-elf-
(Arco AUR)mips-linux-gnu-
(Ubuntu e outras distros baseadas em Debian)mips64-linux-gnu-
(RHEL/CentOS/Fedora)Você também pode usar o Docker para instalar uma imagem com dependências mínimas.
Para cada versão (jp/us/eu/sh/cn) para a qual você deseja construir uma ROM, coloque uma ROM existente em ./baserom.<VERSION>.z64
para extração de ativos.
Execute make
para construir a ROM (o padrão é VERSION=us
). Outros exemplos:
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
Os artefatos resultantes podem ser encontrados no diretório build
.
A lista completa de variáveis configuráveis está listada abaixo, sendo o padrão o primeiro listado:
VERSION
: jp
, us
, eu
, sh
, cn
GRUCODE
: f3d_old
, f3d_new
, f3dex
, f3dex2
, f3dzex
COMPARE
: 1
(comparar hash de ROM), 0
(não comparar hash de ROM)NON_MATCHING
: Use implementações C funcionalmente equivalentes para não correspondências. Também evitará casos de comportamento indefinido.CROSS
: Prefixo da ferramenta de compilador cruzado (Exemplo: mips64-elf-
).Com o macOS, você pode usar Homebrew ou Docker.
Instale o Homebrew e as seguintes dependências:
brew update
brew install coreutils make pkg-config tehzz/n64-dev/mips64-elf-binutils
Para cada versão (jp/us/eu/sh/cn) para a qual você deseja construir uma ROM, coloque uma ROM existente em ./baserom.<VERSION>.z64
para extração de ativos.
Use o GNU make do Homebrew porque a versão incluída no macOS é muito antiga.
gmake VERSION=jp -j4 # build (J) version instead with 4 jobs
Após instalar e iniciar o Docker, crie a imagem do Docker. Isso só precisa ser feito uma vez.
docker build -t sm64 .
Para construir, monte o sistema de arquivos local no contêiner Docker e construa a ROM com docker run sm64 make
.
docker run --rm --mount type=bind,source="$(pwd)",destination=/sm64 sm64 make VERSION=us -j4
Para um host Linux, o Docker precisa ser instruído sobre qual usuário deve possuir os arquivos de saída:
docker run --rm --mount type=bind,source="$(pwd)",destination=/sm64 --user $UID:$GID sm64 make VERSION=us -j4
Os artefatos resultantes podem ser encontrados no diretório 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
Solicitações pull são bem-vindas. Para mudanças importantes, abra primeiro uma edição para discutir o que você gostaria de mudar.
Execute clang-format
no seu código para garantir que ele atenda aos padrões de codificação do projeto.
Discord oficial: discord.gg/DuYH3Fh