![Dinosaur Planet Decompilation](docs/banner.png)
[![](https://img.shields.io/badge/Discord-Dinosaur%20Planet%20Community-5865F2?logo=discord)](https://discord.gg/H6WGkznZBc)
![](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2FFrancessco121%2Fdino-status%2Fgh-pages%2Ftotal.shield.json)
![](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2FFrancessco121%2Fdino-status%2Fgh-pages%2Fcore.shield.json)
![](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2FFrancessco121%2Fdino-status%2Fgh-pages%2Fdlls.shield.json)
A WIP decompilation of Dinosaur Planet for the Nintendo 64, as released by Forest of Illusion on Feb. 20, 2021.
**Note**: To use this repository, you must already have a ROM for the game.
```diff
- WARNING! -
This codebase is in an early research/development phase and the ROM this repository
builds is not 'shiftable', so cannot be used yet as a source code base for general changes.
```
## Development
### Prerequisites
**Operating system**
- Linux (Debian / Ubuntu)
- Windows 10/11 WSL (Ubuntu)
- **Note**: The repository must be cloned with Unix line endings!
- It is highly recommended to clone this repository to the WSL Linux partition. Builds are considerably slower when done on a Windows partition.
- Other systems may work, see `packages.txt` for the list of required APT packages
**APT packages**
`sudo apt install -y $(cat packages.txt)`
**Python 3 packages**
`pip3 install -r requirements.txt`
> Note: This repository uses Git submodules. Don't forget to update them with `./dino.py submodules` or `git submodule update --recursive` after pulling changes to a submodule ref.
### Setup
1. Place an unmodified Dinosaur Planet ROM into the root of the repository as `baserom.z64` (MD5: `49f7bb346ade39d1915c22e090ffd748`).
2. Set up tools and extract the ROM:
- `./dino.py setup`
3. Build the ROM:
- `./dino.py build`
### Rebuilding
1. If any symbols or the splat config were changed, re-extract the ROM and rebuild the linker script:
- `./dino.py extract`
2. If any source files were added, removed, or renamed, re-configure the build script:
- `./dino.py configure`
2. Rebuild the ROM:
- `./dino.py build`
### Documentation
Please see the [docs](./docs) directory for project documentation such as:
- [an overview of the project](./docs/Overview.md)
- [a break-down of the ROM extraction and build system](./docs/Recompilation.md)
- [an introductory guide to decomp](./docs/Guide.md)
- and more!
### Tools
The repository comes with a bunch of tools for decompilation and managing the repository:
- `dino.py` - An all in one script for working with the repository. Some of the common commands:
- `build` - Builds the ROM and verifies that it matches.
- `configure` - Re-configures the build script.
- `extract` - Splits the ROM and unpacks DLLs.
- `clean` - Removes all extracted files, build artifacts, and build scripts for a fresh state.
- `diff` - Diff a function/address between the base and re-built ROM.
- `context` - Create a context file that can be used for mips2c/decomp.me.
- `tools/first-diff.py` - Find the first N differences between the base and re-built ROM.
- `tools/first_bin_diff.py` - Find the first N differences between two binary files.
- `tools/dlldump.py` - Dump headers, relocation tables, and assembly from a Dinosaur Planet DLL.
### Docker
If you prefer to develop inside of a Docker container instead of installing everything in your local environment, use the provided Dockerfile in the root of the repository.
Example usage:
```bash
# Create image
docker build -t dpdecomp --build-arg login=$USER --build-arg uid=$UID .
# Enter a bash prompt
docker run --rm -it -v $(pwd):/dino dpdecomp bash
# Run a one-off command
docker run --rm -it -v $(pwd):/dino dpdecomp dino build
```
## Contributing
Pull requests are welcome! Please see our [contribution guide](./CONTRIBUTING.md) for more information on how this project works and how to contribute.
If you're interested in contributing, please also consider joining us on Discord over at the [Dinosaur Planet Community server](https://discord.gg/H6WGkznZBc) in the `#decompilation` channel!