1
Fork 0

Add fork-specific stuff to README

This commit is contained in:
Joshua Goins 2022-10-03 22:33:36 -04:00
parent 4bd1628486
commit 75e1812e79

View file

@ -1,51 +1,32 @@
# Super Mario 64 Port # Super Mario 64 Port
- This repo contains a full decompilation of Super Mario 64 (J), (U), (E), and (SH). This is my personal fork of [sm64-port](https://github.com/sm64-port/sm64-port). Why? Because it's fun! I'm simply
- Naming and documentation of the source code and data structures are in progress. building on the great work already done by other people, so please see the credits below.
- Beyond Nintendo 64, it can also target Linux and Windows natively.
This repo does not include all assets necessary for compiling the game. This repository does not include all assets necessary for compiling the game.
A prior copy of the game is required to extract the assets. A prior copy of the game is required to extract the assets.
## Building native executables ## Differences from sm64-port
### Linux Since I'm primarily a Linux user, I'm prioritizing Linux usage above everything else. I have already fixed a bunch of
Linux-specific bugs that I encountered (vsync timer issues, pulseaudio sync issues, and more). Stuff that does not
relate to this goal is bound to be removed or unmaintained (Windows support, native N64 support, etc.), and there are
better forks if you're looking for support of that stuff.
## Building
1. Install prerequisites (Ubuntu): `sudo apt install -y git build-essential pkg-config libusb-1.0-0-dev libsdl2-dev`. 1. Install prerequisites (Ubuntu): `sudo apt install -y git build-essential pkg-config libusb-1.0-0-dev libsdl2-dev`.
2. Clone the repo: `git clone https://github.com/sm64-port/sm64-port.git`, which will create a directory `sm64-port` and then **enter** it `cd sm64-port`. 2. Clone the repo: `git clone https://github.com/sm64-port/sm64-port.git`, which will create a directory `sm64-port` and
3. Place a Super Mario 64 ROM called `baserom.<VERSION>.z64` into the repository's root directory for asset extraction, where `VERSION` can be `us`, `jp`, or `eu`. then **enter** it `cd sm64-port`.
4. Run `make` to build. Qualify the version through `make VERSION=<VERSION>`. Add `-j4` to improve build speed (hardware dependent based on the amount of CPU cores available). 3. Place a Super Mario 64 ROM called `baserom.<VERSION>.z64` into the repository's root directory for asset extraction,
where `VERSION` can be `us`, `jp`, or `eu`.
4. Run `make` to build. Qualify the version through `make VERSION=<VERSION>`. Add `-j4` to improve build speed (hardware
dependent based on the amount of CPU cores available).
5. The executable binary will be located at `build/<VERSION>_pc/sm64.<VERSION>.f3dex2e`. 5. The executable binary will be located at `build/<VERSION>_pc/sm64.<VERSION>.f3dex2e`.
### Windows
1. Install and update MSYS2, following all the directions listed on https://www.msys2.org/.
2. From the start menu, launch MSYS2 MinGW and install required packages depending on your machine (do **NOT** launch "MSYS2 MSYS"):
* 64-bit: Launch "MSYS2 MinGW 64-bit" and install: `pacman -S git make python3 mingw-w64-x86_64-gcc`
* 32-bit (will also work on 64-bit machines): Launch "MSYS2 MinGW 32-bit" and install: `pacman -S git make python3 mingw-w64-i686-gcc`
* Do **NOT** by mistake install the package called simply `gcc`.
3. The MSYS2 terminal has a _current working directory_ that initially is `C:\msys64\home\<username>` (home directory). At the prompt, you will see the current working directory in yellow. `~` is an alias for the home directory. You can change the current working directory to `My Documents` by entering `cd /c/Users/<username>/Documents`.
4. Clone the repo: `git clone https://github.com/sm64-port/sm64-port.git`, which will create a directory `sm64-port` and then **enter** it `cd sm64-port`.
5. Place a *Super Mario 64* ROM called `baserom.<VERSION>.z64` into the repository's root directory for asset extraction, where `VERSION` can be `us`, `jp`, or `eu`.
6. Run `make` to build. Qualify the version through `make VERSION=<VERSION>`. Add `-j4` to improve build speed (hardware dependent based on the amount of CPU cores available).
7. The executable binary will be located at `build/<VERSION>_pc/sm64.<VERSION>.f3dex2e.exe` inside the repository.
#### Troubleshooting
1. If you get `make: gcc: command not found` or `make: gcc: No such file or directory` although the packages did successfully install, you probably launched the wrong MSYS2. Read the instructions again. The terminal prompt should contain "MINGW32" or "MINGW64" in purple text, and **NOT** "MSYS".
2. If you get `Failed to open baserom.us.z64!` you failed to place the baserom in the repository. You can write `ls` to list the files in the current working directory. If you are in the `sm64-port` directory, make sure you see it here.
3. If you get `make: *** No targets specified and no makefile found. Stop.`, you are not in the correct directory. Make sure the yellow text in the terminal ends with `sm64-port`. Use `cd <dir>` to enter the correct directory. If you write `ls` you should see all the project files, including `Makefile` if everything is correct.
4. If you get any error, be sure MSYS2 packages are up to date by executing `pacman -Syu` and `pacman -Su`. If the MSYS2 window closes immediately after opening it, restart your computer.
5. When you execute `gcc -v`, be sure you see `Target: i686-w64-mingw32` or `Target: x86_64-w64-mingw32`. If you see `Target: x86_64-pc-msys`, you either opened the wrong MSYS start menu entry or installed the incorrect gcc package.
6. When switching between building for other platforms, run `make -C tools clean` first to allow for the tools to recompile on the new platform. This also helps when switching between shells like WSL and MSYS2.
### Debugging ### Debugging
The code can be debugged using `gdb`. On Linux install the `gdb` package and execute `gdb <executable>`. On MSYS2 install by executing `pacman -S winpty gdb` and execute `winpty gdb <executable>`. The `winpty` program makes sure the keyboard works correctly in the terminal. Also consider changing the `-mwindows` compile flag to `-mconsole` to be able to see stdout/stderr as well as be able to press Ctrl+C to interrupt the program. In the Makefile, make sure you compile the sources using `-g` rather than `-O2` to include debugging symbols. See any online tutorial for how to use gdb. The code can be debugged using `gdb` or `lldb`. By default, the Makefile should produce debug symbols.
## ROM building
It is possible to build N64 ROMs as well with this repository. See https://github.com/n64decomp/sm64 for instructions.
## Project Structure ## Project Structure
@ -80,9 +61,11 @@ It is possible to build N64 ROMs as well with this repository. See https://githu
## Contributing ## Contributing
Pull requests are welcome. For major changes, please open an issue first to
discuss what you would like to change.
Run `clang-format` on your code to ensure it meets the project's coding standards. Run `clang-format` on your code to ensure it meets the project's coding standards.
Official Discord: https://discord.gg/7bcNTPK ## Credits
- sm64-port team (https://github.com/sm64-port/sm64-port) for the original port
- n64 decomp team (https://github.com/n64decomp/sm64) for decompiling the game
- Emill, MaikelChan for the original Nintendo 64 renderer
- And everyone who has contributed! :-)