Decompilation of The Legend of Zelda: Majora's Mask
Go to file
TrulyNaN 53fc438d81
Merge z_bg_kin2 bombwall (#840)
* test commit

* undoing test commit

* making sure this is the right repo

* removing test file

* init for OSH bombable wall started. put back Actor* in function declarations.

* BgKin2Bombwall_Init is matching.

* started z_bg_kin2_bombwall destroy function. One mismatch right now.

* BgKin2Bombwall_Destroy matches.

* BgKin2Bombwall_Draw matches.

* Fixed BgKin2Bombwall_Init

* BgKin2Bombwall_Init and BgKin2Bombwall_Destroy both match. Fixed s32 array in struct.

* BgKin2Bombwall_Draw and BgKin2Bombwall_Update match.

* Only func_80B6E020 and func_80B6E090 left to match in ovl_Bg_Kin2_Bombwall.

* func_80B6E020 from ovl_Bg_Kin2_Bombwall matches.

* Went from 8925 to about 5-6k diff score for func_80B6E090 in ovl_Bg_Kin2_Bombwall

* Took func_80B6E090 from about 5300 diff score to about 4300 diff score in ovl_Bg_Kin2_Bombwall.

* Diff score for ovl_Bg_Kin2_Bombwall func_80B6E090 went from 4k ish to 3277

* Diff score for ovl_Bg_Kin2_Bombwall func_80B6E090 went from 3277 to 2262.

* Diff score for ovl_Bg_Kin2_Bombwall func_80B6E090 went from 2262 to 1589.

* only slight progress on ovl_Bg_Kinw_Bombwall's func_80B6E090

* Got to 1473 diff score on ovl_Bg_Kinw_Bombwall's func_80B6E090

* Put in the changes made by EllipticEllipsis and hensldm for ovl_Bg_Kin2_Bombwall's func_8066E090.

* renamed some symbols. Fake symbol removal makes nonzero diff, but rom OK's after make.

* moving declarations around, ordering.

* One.word.away. from importing data in ovl_Bg_Kin2_Bombwall.

* ovl_Bg_Kin2_Bombwall data imported. Matching.

* Edited spec for reloc of ovl_Bg_Kin2_Bombwall.

* Removed extra comments for ovl_Bg_Kin2_Bombwall.

* unpushed stuff. dunno.

* forgot to save z_bg_kin2_bombwall.c

* need to commit before make-ing in master.

* Ported z_bg_kin2_bombwall's code. Data next.

* Imported data for merging z_bg_kin2_bombwall. Yes, I yelled when it OK'd.

* Added comments to remember what does what in z_bg_kin2_bombwall.

* Some comments in z_bg_kin2_bombwall.c and function names ideas.

* Added comments for function name ideas. Cleaned up temps in z_bg_kin2_bombwall except in func_80B6E090.

* Renamed most functions and some variables in z_bg_kin2_bombwall.

* Made a name suggestion for func_80B6E020 after testing in game.

* Ran format.sh.

* Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c

1 and 0 replaced by true and false in func_80B6E020.

Co-authored-by: Isghj <42048411+isghj5@users.noreply.github.com>

* Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c

Bending to the x-- supremacy.

Co-authored-by: Isghj <42048411+isghj5@users.noreply.github.com>

* PR fixes (not done yet) including more consistent use of THIS, removing arg0 and arg1 variable names, standardizing params for z_bg_kin2_bombwall, turning some if-return to if-else, removing unnecessary casts.

* Applied isghj5's and EllipticEllipsis' suggestions except for the object file in z_bg_kin2_bombwall. Object file next.

* Screwd up formatting.

* Thinking of playing with object_kin2_obj.

* Documented most of object_kin2_obj based on bombwall, fence and shelf actors.

* Had forgotten an arg1 in z_bg_kin2_bombwall.c

* Replaced a float by its fractional representation. I need to learn float magic.

* Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.h

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* Applied more formatting and naming remarks from PR about the C file. Assets and object stuff next.

* Display lists and collision header in z_bg_kin2_bombwall.c renamed after their descriptive names in the object's XML file. Name for Ocean Spider House drawers chests left to change.

* Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>

* One extra line in an if, collision naming convention applied and renamed Ocean Spider House nightstands to drawers chests.

* Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c

Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>

* Changed drawers chest to chest of drawers in object_kin2_obj and z_bg_kin2_shelf.

* Removed some unnecessary comment.

* Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* Fixed BgKin2Bombwall_SpawnEffects after the Rand_Next() type update.

* Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c

Rand_Next() update.

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c

Rand_Next() update.

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

* Adding Co-authors
Co-authored-by EllipticEllipsis 73679967+EllipticEllipsis@users.noreply.github.com
Co-authored-by Derek-Hensley hensley.derek58@gmail.com
Co-authored-by Maide eeeedddccc@hotmail.co.uk
Co-authored-by Tom-Overton tom.overton@outlook.com
Co-authored-by Fig02 fig02srl@gmail.com
Co-authored-by Parker-Burnett burnettparker@gmail.com
Co-authored-by isghj5 isghj5@gmail.com

* Adding Co-authors
Co-authored-by EllipticEllipsis 73679967+EllipticEllipsis@users.noreply.github.com
Co-authored-by Derek-Hensley hensley.derek58@gmail.com
Co-authored-by Maide eeeedddccc@hotmail.co.uk
Co-authored-by Tom-Overton tom.overton@outlook.com
Co-authored-by Fig02 fig02srl@gmail.com
Co-authored-by Parker-Burnett burnettparker@gmail.com
Co-authored-by isghj5 isghj5@gmail.com

* Adding Co-authors
Co-authored-by EllipticEllipsis 73679967+EllipticEllipsis@users.noreply.github.com
Co-authored-by Derek-Hensley hensley.derek58@gmail.com
Co-authored-by Maide eeeedddccc@hotmail.co.uk
Co-authored-by Tom-Overton tom.overton@outlook.com
Co-authored-by Fig02 fig02srl@gmail.com
Co-authored-by Parker-Burnett burnettparker@gmail.com
Co-authored-by isghj5 isghj5@gmail.com

* Adding Co-authors
Co-authored-by EllipticEllipsis 73679967+EllipticEllipsis@users.noreply.github.com
Co-authored-by Derek-Hensley hensley.derek58@gmail.com
Co-authored-by Maide eeeedddccc@hotmail.co.uk
Co-authored-by Tom-Overton tom.overton@outlook.com
Co-authored-by Fig02 fig02srl@gmail.com
Co-authored-by Parker-Burnett burnettparker@gmail.com
Co-authored-by isghj5 isghj5@gmail.com

* Adding Co-authors

Co-authored-by EllipticEllipsis 73679967+EllipticEllipsis@users.noreply.github.com
Co-authored-by Derek-Hensley hensley.derek58@gmail.com
Co-authored-by Maide eeeedddccc@hotmail.co.uk
Co-authored-by Tom-Overton tom.overton@outlook.com
Co-authored-by Fig02 fig02srl@gmail.com
Co-authored-by Parker-Burnett burnettparker@gmail.com
Co-authored-by isghj5 isghj5@gmail.com

* Adding Co-authors

Co-authored-by: EllipticEllipsis 73679967+EllipticEllipsis@users.noreply.github.com
Co-authored-by: Derek-Hensley hensley.derek58@gmail.com
Co-authored-by: Maide eeeedddccc@hotmail.co.uk
Co-authored-by: Tom-Overton tom.overton@outlook.com
Co-authored-by: Fig02 fig02srl@gmail.com
Co-authored-by: Parker-Burnett burnettparker@gmail.com
Co-authored-by: isghj5 isghj5@gmail.com

* Adding Co-authors

Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com>
Co-authored-by: Derek-Hensley <hensley.derek58@gmail.com>
Co-authored-by: Maide <eeeedddccc@hotmail.co.uk>
Co-authored-by: Tom-Overton <tom.overton@outlook.com>
Co-authored-by: Fig02 <fig02srl@gmail.com>
Co-authored-by: Parker-Burnett <burnettparker@gmail.com>
Co-authored-by: isghj5 <isghj5@gmail.com>

* Update src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c

Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>

Co-authored-by: Isghj <42048411+isghj5@users.noreply.github.com>
Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>
Co-authored-by: Derek Hensley <hensley.derek58@gmail.com>
Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com>
Co-authored-by: Maide <eeeedddccc@hotmail.co.uk>
Co-authored-by: Tom-Overton <tom.overton@outlook.com>
Co-authored-by: Fig02 <fig02srl@gmail.com>
Co-authored-by: Parker-Burnett <burnettparker@gmail.com>
Co-authored-by: isghj5 <isghj5@gmail.com>
2022-06-20 20:57:09 +01:00
assets Merge z_bg_kin2 bombwall (#840) 2022-06-20 20:57:09 +01:00
docs Code_800E8EA0 Docs (#832) 2022-06-20 01:16:30 +01:00
include z_obj_tsubo OK (#784) 2022-06-20 20:44:12 +01:00
src Merge z_bg_kin2 bombwall (#840) 2022-06-20 20:57:09 +01:00
tools Merge z_bg_kin2 bombwall (#840) 2022-06-20 20:57:09 +01:00
.clang-format Adds clang-format script to MM 2020-07-24 19:57:54 -04:00
.clang-tidy Adds clang-format script to MM 2020-07-24 19:57:54 -04:00
.gitattributes Fixes IDO recomp and allows git to detect binary files. (#50) 2021-02-25 18:21:51 -05:00
.gitignore Makefile Changes (#727) 2022-05-25 22:15:28 -04:00
CONTRIBUTING.md Contributing docs refresh (#793) 2022-05-25 22:06:21 -04:00
Jenkinsfile Makefile Changes (#727) 2022-05-25 22:15:28 -04:00
Makefile Makefile Changes (#727) 2022-05-25 22:15:28 -04:00
README.md Contributing docs refresh (#793) 2022-05-25 22:06:21 -04:00
checksum.md5 QOL addtions to the readme (#104) 2021-05-18 18:39:08 -04:00
checksum_uncompressed.md5 Overhaul the build system (#234) 2021-08-03 23:21:31 -04:00
diff.py `diff.py` symlink and `graphovl.py` (#151) 2021-05-18 22:21:14 -04:00
diff_settings.py ABI FPR names (#767) 2022-03-31 18:22:19 +01:00
extract_assets.py Building on Macs (#513) 2021-12-28 01:07:41 +00:00
first_diff.py Overhaul the build system (#234) 2021-08-03 23:21:31 -04:00
fixle.sh Update tools (#16) 2020-09-13 21:09:13 -04:00
format.sh Building on Macs (#513) 2021-12-28 01:07:41 +00:00
requirements.txt Updates progress.py to use the git module for outputting commit hash 2021-03-10 22:28:06 -05:00
spec Merge z_bg_kin2 bombwall (#840) 2022-06-20 20:57:09 +01:00
sym_info.py Two minor fixes (#287) 2021-09-21 18:09:14 -04:00
undefined_syms.txt BgIkanaDharma (punchable pillar segments in STT) OK (#851) 2022-06-20 00:38:51 +01:00

README.md

Legend of Zelda: Majora's Mask (US) 1.0

Build Status Decompilation Progress Contributors Discord Channel

- WARNING! -

This repository is a work in progress, and while it can be used to make certain changes, it's 
still constantly evolving. If you wish to use it for modding purposes in its current state,
please be aware that the codebase could drastically change at any time. Also note that some
parts of the ROM may not be 'shiftable' yet, so modifying them could currently be difficult.

This is a WIP decompilation of The Legend of Zelda: Majora's Mask. The purpose of the project is to recreate a source code base for the game from scratch, using information found inside the game along with static and/or dynamic analysis. It is not, and will not, produce a PC port. For frequently asked questions, you can visit our website, and for more information you can get in touch with the team on our Discord server.

The only version currently supported is N64 US, but we intend to eventually support every retail version of the original game (i.e. not versions of MM3D, which is a totally different game).

It currently builds the following ROM:

  • mm.us.rev1.rom.z64 md5: 2a0a8acb61538235bc1094d297fb6556

This repo does not include any assets or assembly code necessary for compiling the ROM. A prior copy of the game is required to extract the required assets.

Please refer to the following for more information:

Installation

Windows

For Windows 10, install WSL and a distribution by following this Windows Subsystem for Linux Installation Guide. We recommend using Debian or Ubuntu 20.04 Linux distributions.

MacOS

Preparation is covered in a separate document.

Linux (Native or under WSL / VM)

1. Install build dependencies

The build process has the following package requirements:

  • make
  • git
  • build-essential
  • binutils-mips-linux-gnu
  • python3
  • pip3
  • libpng-dev

Under Debian / Ubuntu (which we recommend using), you can install them with the following commands:

sudo apt update
sudo apt install make git build-essential binutils-mips-linux-gnu python3 python3-pip libpng-dev

2. Clone the repository

Create your own fork of the repository at https://github.com/zeldaret/mm. Then clone your fork where you wish to have the project, with the command:

git clone https://github.com/<YOUR_USERNAME>/mm.git

This will copy the GitHub repository contents into a new folder in the current directory called mm. Change into this directory before doing anything else:

cd mm

3. Install python dependencies

The build process has a few python packages required that are located in requirements.txt.

To install them simply run in a terminal:

python3 -m pip install -r requirements.txt

4. Prepare a base ROM

Copy your ROM to inside the root of this new project directory, and rename the file of the baserom to reflect the version of ROM you are using. ex: baserom.mm.us.rev1.z64

5. Make and Build the ROM

To start the extraction/build process, run the following command:

make init

This will extract all the individual files in the ROM into a newly created baserom folder, as well as decompress the compressed files in a newly created decomp folder. This will create the build folders as well as a new folder with the ASM as well as containing the disassemblies of nearly all the files containing code.

This make target will also build the ROM. If all goes well, a new ROM called "mm.us.rev1.rom.z64" should be built and the following text should be printed:

mm.us.rev1.rom.z64: OK

If you instead see the following:

mm.us.rev1.rom.z64: FAILED
md5sum: WARNING: 1 computed checksum did NOT match

This means that something is wrong with the ROM's contents. Either the baserom files are incorrect due to a bad ROM, or some of the code is not matching.

Running make init will also make the ./expected directory and copy all of the files there, which will be useful when running the diff script. The diff script is useful in decompiling functions and can be ran with this command: ./tools/asm-differ/diff.py -wmo3 <insert_function_here>

Note: to speed up the build, you can pass -jN to make setup and make, where N is the number of threads to use in the build, e.g. make -j4. The generally-accepted wisdom is to use the number of virtual cores your computer has, which is the output of nproc (which should be installed as part of coreutils). The disadvantage that the ordering of the terminal output is scrambled, so for debugging it is best to stick to one thread (i.e. not pass -jN). (-j also exists, which uses unlimited jobs, but is generally slower.)

Contributing

All contributions are welcome. This is a group effort, and even small contributions can make a difference. Some work also doesn't require much knowledge to get started.

Please note that is is our strict policy that Anyone who wishes to contribute to the OOT or MM projects must not have accessed leaked source code at any point in time for Nintendo 64 SDK, iQue player SDK, libultra, Ocarina of Time, Majora's Mask, Animal Crossing/Animal Forest, or any other game that shares the same game engine or significant portions of code to a Zelda 64 game or any other console similar to the Nintendo 64.

Most discussions happen on our Discord Server, where you are welcome to ask if you need help getting started, or if you have any questions regarding this project or ZeldaRET's other decompilation projects.

For more information on getting started, see our Contributing Guide, Style Guide and our Code Review Guidelines to see what code quality guidelines we follow.