mirror of
https://github.com/zeldaret/oot.git
synced 2024-11-10 19:20:13 +00:00
Various README updates (#671)
* Update README * Add shields.io badges in the README * Add a mention about shiftability in README * Fix shield json command in JenkinsFile * Improve progress badge formatting Now it should show the percentage as 51.2% instead of 51.17%, and 100% instead of 100.00%
This commit is contained in:
parent
ec31611c0e
commit
f95a5aec68
3 changed files with 72 additions and 36 deletions
5
Jenkinsfile
vendored
5
Jenkinsfile
vendored
|
@ -37,8 +37,9 @@ pipeline {
|
||||||
branch 'master'
|
branch 'master'
|
||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
sh 'python3 progress.py -c >> /var/www/html/reports/progress.csv'
|
sh 'python3 progress.py csv >> /var/www/html/reports/progress.csv'
|
||||||
sh 'python3 progress.py -mc >> /var/www/html/reports/progress_matching.csv'
|
sh 'python3 progress.py csv -m >> /var/www/html/reports/progress_matching.csv'
|
||||||
|
sh 'python3 progress.py shield-json > /var/www/html/reports/progress_shield.json'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
85
README.md
85
README.md
|
@ -1,11 +1,26 @@
|
||||||
# The Legend of Zelda: Ocarina of Time
|
# The Legend of Zelda: Ocarina of Time
|
||||||
|
|
||||||
|
[![Build Status][jenkins-badge]][jenkins] [![Decompilation Progress][progress-badge]][progress] [![Contributors][contributors-badge]][contributors] [![Discord Channel][discord-badge]][discord]
|
||||||
|
|
||||||
|
[jenkins]: https://jenkins.zelda64.dev/job/OOT/job/master
|
||||||
|
[jenkins-badge]: https://img.shields.io/jenkins/build?jobUrl=https%3A%2F%2Fjenkins.zelda64.dev%2Fjob%2FOOT%2Fjob%2Fmaster
|
||||||
|
|
||||||
|
[progress]: https://zelda64.dev/progress.html
|
||||||
|
[progress-badge]: https://img.shields.io/endpoint?url=https://zelda64.dev/reports/progress_shield.json
|
||||||
|
|
||||||
|
[contributors]: https://github.com/zeldaret/oot/graphs/contributors
|
||||||
|
[contributors-badge]: https://img.shields.io/github/contributors/zeldaret/oot
|
||||||
|
|
||||||
|
[discord]: https://discord.zelda64.dev
|
||||||
|
[discord-badge]: https://img.shields.io/discord/688807550715560050?color=%237289DA&logo=discord&logoColor=%23FFFFFF
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
- WARNING! -
|
- WARNING! -
|
||||||
|
|
||||||
The ROM this repository builds cannot be 'shifted', primarily due to some hardcoded pointers which have yet
|
This repository is a work in progress, and while it can be used to make certain changes, it's still
|
||||||
to be dumped. Thus this repository is currently in an experimental and research phase and cannot yet be used
|
constantly evolving. If you use it for modding purposes in its current state, please be aware that
|
||||||
traditionally as a source code base for general changes.
|
the codebase can drastically change at any time. Also note that some parts of the ROM may not be
|
||||||
|
'shiftable' yet, so modifying them could be difficult at this point.
|
||||||
```
|
```
|
||||||
|
|
||||||
This is a WIP decompilation of The Legend of Zelda: Ocarina of Time.
|
This is a WIP decompilation of The Legend of Zelda: Ocarina of Time.
|
||||||
|
@ -16,12 +31,11 @@ It builds the following ROM:
|
||||||
|
|
||||||
* zelda_ocarina_mq_dbg.z64 `md5: f0b7f35375f9cc8ca1b2d59d78e35405`
|
* zelda_ocarina_mq_dbg.z64 `md5: f0b7f35375f9cc8ca1b2d59d78e35405`
|
||||||
|
|
||||||
**Note:** This repository does not include any of the assets necessary to build the ROM.
|
**Note: This repository does not include any of the assets necessary to build the ROM. A prior copy of the game is required to extract the needed assets.**
|
||||||
A prior copy of the game is required to extract the needed assets.
|
|
||||||
|
|
||||||
Website: <https://zelda64.dev/>
|
**Website:** <https://zelda64.dev>
|
||||||
|
|
||||||
Discord: <https://discord.zelda64.dev>
|
**Discord:** <https://discord.zelda64.dev>
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
@ -31,32 +45,19 @@ For Windows 10, install WSL and a distribution by following this
|
||||||
[Windows Subsystem for Linux Installation Guide](https://docs.microsoft.com/en-us/windows/wsl/install-win10).
|
[Windows Subsystem for Linux Installation Guide](https://docs.microsoft.com/en-us/windows/wsl/install-win10).
|
||||||
We recommend using Debian or Ubuntu 18.04 Linux distributions.
|
We recommend using Debian or Ubuntu 18.04 Linux distributions.
|
||||||
|
|
||||||
For older versions of Windows, install a Linux VM or refer to either [Docker](#Docker) or [Cygwin](#Cygwin) instructions.
|
For older versions of Windows, install a Linux VM or refer to either [Cygwin](#Cygwin) or [Docker](#Docker) instructions.
|
||||||
|
|
||||||
### Cygwin
|
|
||||||
|
|
||||||
If you want to use Cygwin, you will need to:
|
|
||||||
- Download and install [Git Bash](https://git-scm.com/download/win).
|
|
||||||
- Download and install [Cygwin](https://cygwin.com).
|
|
||||||
- [Build and install mips-linux-binutils](docs/BUILDING_BINUTILS_CYGWIN.md).
|
|
||||||
|
|
||||||
Once mips-linux-binutils is installed you will need to install the following packages using Cygwin's installer:
|
|
||||||
- python3
|
|
||||||
- libiconv
|
|
||||||
- dos2unix
|
|
||||||
|
|
||||||
Now before you try to build anything, if you cloned the repository in windows you will need fix the file line endings:
|
|
||||||
```bash
|
|
||||||
dos2unix fixle.sh
|
|
||||||
./fixle.sh
|
|
||||||
```
|
|
||||||
|
|
||||||
### macOS
|
### macOS
|
||||||
|
|
||||||
For macOS, use homebrew to install the following dependencies:
|
For macOS, use homebrew to install the following dependencies:
|
||||||
|
|
||||||
* coreutils
|
* coreutils
|
||||||
* make
|
* make
|
||||||
* python3
|
* python3
|
||||||
|
* md5sha1sum
|
||||||
|
|
||||||
|
You can install them with the following commands:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
brew update
|
brew update
|
||||||
brew install coreutils make python3 md5sha1sum
|
brew install coreutils make python3 md5sha1sum
|
||||||
|
@ -66,7 +67,8 @@ You'll also need to [build and install mips-linux-binutils](docs/BUILDING_BINUTI
|
||||||
|
|
||||||
Going forward in this guide, please use `gmake` whenever you encounter a `make` command.
|
Going forward in this guide, please use `gmake` whenever you encounter a `make` command.
|
||||||
The `make` that comes with MacOS behaves differently than GNU make and is incompatible with this project.
|
The `make` that comes with MacOS behaves differently than GNU make and is incompatible with this project.
|
||||||
You should now be able to continue onto step 3.
|
|
||||||
|
You should now be able to continue from step 3 of the Linux instructions.
|
||||||
|
|
||||||
### Linux (Native or under WSL / VM)
|
### Linux (Native or under WSL / VM)
|
||||||
|
|
||||||
|
@ -89,7 +91,7 @@ sudo apt-get install git build-essential binutils-mips-linux-gnu python3
|
||||||
#### 2. Download and set up qemu-irix (optional)
|
#### 2. Download and set up qemu-irix (optional)
|
||||||
|
|
||||||
Note: We are currently testing a recompiled version of the compiler that does not require qemu-irix.
|
Note: We are currently testing a recompiled version of the compiler that does not require qemu-irix.
|
||||||
This step allows you to build with qemu-irix and the original compiler by adding `ORIG_COMPILER=1` to the `make` command in step 6, for example if you experience issues with the recompiled version.
|
This step is optional and allows you to build with qemu-irix and the original compiler by adding `ORIG_COMPILER=1` to the `make` command in step 6, for example if you experience issues with the recompiled version.
|
||||||
|
|
||||||
Download qemu-irix from the Releases section in the repository. Place it at a location of your choosing.
|
Download qemu-irix from the Releases section in the repository. Place it at a location of your choosing.
|
||||||
|
|
||||||
|
@ -149,13 +151,36 @@ md5sum: WARNING: 1 computed checksum did NOT match
|
||||||
|
|
||||||
This means that the built ROM isn't the same as the base one, so something went wrong or some part of the code doesn't match.
|
This means that the built ROM isn't the same as the base one, so something went wrong or some part of the code doesn't match.
|
||||||
|
|
||||||
|
### Cygwin
|
||||||
|
|
||||||
|
If you want to use Cygwin, you will need to:
|
||||||
|
|
||||||
|
* Download and install [Git Bash](https://git-scm.com/download/win).
|
||||||
|
* Download and install [Cygwin](https://cygwin.com).
|
||||||
|
* [Build and install mips-linux-binutils](docs/BUILDING_BINUTILS_CYGWIN.md).
|
||||||
|
|
||||||
|
Once mips-linux-binutils is installed you will need to install the following packages using Cygwin's installer:
|
||||||
|
|
||||||
|
* libiconv
|
||||||
|
* dos2unix
|
||||||
|
* python3
|
||||||
|
|
||||||
|
Then you can continue from step 3 of the Linux instructions.
|
||||||
|
|
||||||
|
Note that, before building anything, you will need to run the following commands to fix line endings:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dos2unix fixle.sh
|
||||||
|
./fixle.sh
|
||||||
|
```
|
||||||
|
|
||||||
### Docker
|
### Docker
|
||||||
|
|
||||||
#### 1. Setup requirements
|
#### 1. Setup requirements
|
||||||
|
|
||||||
To use Docker, you'll need either Docker Desktop or Docker Toolbox installed and setup based on your system.
|
To use Docker, you'll need either Docker Desktop or Docker Toolbox installed and setup based on your system.
|
||||||
|
|
||||||
You'll also need to prepare a local version of the project with a copied base ROM (see Step 4 and 5 of the Linux instructions).
|
You'll also need to prepare a local version of the project with a copied base ROM (see steps 3 and 4 of the Linux instructions).
|
||||||
|
|
||||||
#### 2. Create the docker image
|
#### 2. Create the docker image
|
||||||
|
|
||||||
|
@ -175,7 +200,7 @@ docker run -it --rm --mount type=bind,source="$(pwd)",destination=/oot oot /bin/
|
||||||
|
|
||||||
#### 4. Setup and Build the ROM
|
#### 4. Setup and Build the ROM
|
||||||
|
|
||||||
Once inside the container, you can follow Step 6 and 7 of the Linux instructions to setup and build the ROM, or run any other command you need.
|
Once inside the container, you can follow steps 5 and 6 of the Linux instructions to setup and build the ROM, or run any other command you need.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
|
|
18
progress.py
18
progress.py
|
@ -1,16 +1,16 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import json
|
||||||
import csv
|
import csv
|
||||||
import git
|
import git
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description="Computes current progress throughout the whole project.")
|
parser = argparse.ArgumentParser(description="Computes current progress throughout the whole project.")
|
||||||
|
parser.add_argument("format", nargs="?", default="text", choices=["text", "csv", "shield-json"])
|
||||||
parser.add_argument("-m", "--matching", dest='matching', action='store_true',
|
parser.add_argument("-m", "--matching", dest='matching', action='store_true',
|
||||||
help="Output matching progress instead of decompilation progress")
|
help="Output matching progress instead of decompilation progress")
|
||||||
parser.add_argument("-c", "--csv", dest="csv", action="store_true",
|
|
||||||
help="Output results in CSV format")
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
NON_MATCHING_PATTERN = r"#ifdef\s+NON_MATCHING.*?#pragma\s+GLOBAL_ASM\s*\(\s*\"(.*?)\"\s*\).*?#endif"
|
NON_MATCHING_PATTERN = r"#ifdef\s+NON_MATCHING.*?#pragma\s+GLOBAL_ASM\s*\(\s*\"(.*?)\"\s*\).*?#endif"
|
||||||
|
@ -114,14 +114,22 @@ ovlPct = 100 * ovl / ovlSize
|
||||||
compiled_bytes = total
|
compiled_bytes = total
|
||||||
bytesPerHeartPiece = compiled_bytes / 80
|
bytesPerHeartPiece = compiled_bytes / 80
|
||||||
|
|
||||||
if args.csv:
|
if args.format == 'csv':
|
||||||
version = 1
|
version = 1
|
||||||
git_object = git.Repo().head.object
|
git_object = git.Repo().head.object
|
||||||
timestamp = str(git_object.committed_date)
|
timestamp = str(git_object.committed_date)
|
||||||
git_hash = git_object.hexsha
|
git_hash = git_object.hexsha
|
||||||
csv_list = [str(version), timestamp, git_hash, str(code), str(codeSize), str(boot), str(bootSize), str(ovl), str(ovlSize), str(src), str(asm), str(len(nonMatchingFunctions))]
|
csv_list = [str(version), timestamp, git_hash, str(code), str(codeSize), str(boot), str(bootSize), str(ovl), str(ovlSize), str(src), str(asm), str(len(nonMatchingFunctions))]
|
||||||
print(",".join(csv_list))
|
print(",".join(csv_list))
|
||||||
else:
|
elif args.format == 'shield-json':
|
||||||
|
# https://shields.io/endpoint
|
||||||
|
print(json.dumps({
|
||||||
|
"schemaVersion": 1,
|
||||||
|
"label": "progress",
|
||||||
|
"message": f"{srcPct:.3g}%",
|
||||||
|
"color": 'yellow',
|
||||||
|
}))
|
||||||
|
elif args.format == 'text':
|
||||||
adjective = "decompiled" if not args.matching else "matched"
|
adjective = "decompiled" if not args.matching else "matched"
|
||||||
|
|
||||||
print(str(total) + " total bytes of decompilable code\n")
|
print(str(total) + " total bytes of decompilable code\n")
|
||||||
|
@ -138,3 +146,5 @@ else:
|
||||||
print("You have " + str(heartPieces) + "/80 heart pieces and " + str(rupees) + " rupee(s).\n")
|
print("You have " + str(heartPieces) + "/80 heart pieces and " + str(rupees) + " rupee(s).\n")
|
||||||
else:
|
else:
|
||||||
print("You have " + str(heartPieces) + "/80 heart pieces.\n")
|
print("You have " + str(heartPieces) + "/80 heart pieces.\n")
|
||||||
|
else:
|
||||||
|
print("Unknown format argument: " + args.format)
|
||||||
|
|
Loading…
Reference in a new issue