majora's mask scripts, and some ocarina stuff too
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Connor Olding f09d6a162b support filenames in new debug rom 3 months ago
Lua preliminary support for OoT (E) Debug ROM (non-MQ) 3 months ago
asm fix asm syntax errors (#1) 1 year ago
dump a dump folder for (gasp) dumps 4 years ago
img describe how to use the Lua and asm stuff 3 years ago
.gitattributes fill in the blanks 4 years ago
.gitignore ignore z64crc binary 3 years ago update info on calculating exits 2 years ago rewrite functions in pyrex for performance 5 years ago
Yaz0_fast.pyx use proper fixed width types 3 years ago specifically use python 3 4 years ago bad commit messages incorporated 2 years ago update text dumping with unused name commands 3 years ago
fn O US10.txt fill in the blanks 4 years ago fix extraction of Doubutsu no Mori files 2 years ago
mm-bitflags.txt EOL 3 years ago rewrite functions in pyrex for performance 5 years ago
n64_fast.pyx use proper fixed width types 3 years ago split old notes to new file 2 years ago use debug ROM filenames, less verbose 5 years ago
z64crc.c fix and rewrite CRC routine 1 year ago support filenames in new debug rom 3 months ago
z64yaz0.c reformat C files 2 years ago make yaz0 interface more portable 1 year ago

Zelda 64 Resources

i like to muck around in the memory of these games.

those who are more interested in the ROM may find the binary template repo more resourceful.

there is also a great deal of general documentation and notes on the wikis hosted at CloudModding.

Lua Scripts

this repo contains a ton of Lua scripts written for version 2.2.2 of Bizhawk. all the scripts you’ll want to use are in the root Lua directory, and their dependencies are in further subdirectories. that means, if you want to use a script, you must preserve the directory structure. you cannot, say, extract one file from this repo’s archive and expect it to work.

a summary of each script is available in the Lua file, and another for the library files that the scripts use.

of these, you probably came for cheat menu.lua. this script will bind your L button to open an on-screen menu allowing you to control many aspects of the game.

cheat menu.lua in action

of immediate interest are the classic levitation and run-fast cheats, but also the menu of warps to any area and any entrance in the game. you can also change your Z-Targeting method to Hold in the 2nd page of the Progress menu, in case you forgot to change it in-game.

Assembly Hacks

i have written a handful of ROM and RAM hacks for Majora’s Mask and Ocarina of Time. these have all been written in the custom assembler syntax of lips, a MIPS assembler written in Lua. lips is included in this repository; you do not need to acquire it separately.

you only need to run Lua/inject.lua in Bizhawk to run the RAM hacks — that is, modifications that act directly on the game’s RAM while it runs; not modifying the ROM.

for the ROM hacks, you will need to set up a lot more. you will need:

  • bash 4.3 to run the shell scripts responsible for automatically running all the following software.

  • Python 3.4 to run the scripts responsible for splitting the ROM into files, and merging those files into a single ROM again.

  • LuaJIT 2.0 to run the lips assembler responsible for turning the assembly files into executable binary code. you might manage to use the Lua 5.1 interpreter, but this is not strictly supported.

  • gcc 4.9 or clang 3.6 to compile the programs responsible for (de)compressing the Yaz archive files, and for computing checksums.

the versions listed above are rough estimates, and newer versions of software are likely to work fine.

if you’re on Windows, and you’re not afraid of the (*nix) console, you can set up msys2 to install binaries of bash, python, and gcc. then all that’s left is to compile LuaJIT yourself, or you can grab a 64-bit binary built by myself.

last, but not least, you will need the appropriate ROM for the ROM hack. you will probably need to change the hard-coded paths to the ROMs. (note to self: change scripts to take the required ROM as their first argument)

finally, you just run the appropriate shell scripts for the ROM hacks you want to produce. for example:

$ cd asm
$ ./mm-bq
00-07-31 17:04:16
uncompressed 0031 V00B3C000
ratio: 59%
compressed 0031 V00B3C000
ratio: 59%
compressed 1552 V02EE7040
ratio: 1%
bootcode: 6105
crcs: 5CF5359C A893E696


to compile the C programs, you might need to pass -std=gnu11. basically:

gcc -std=gnu11 -Wall -Ofast z64yaz0.c -o z64yaz0
gcc -std=gnu11 -Wall -Ofast z64crc.c -o z64crc

in the future, it’d be nice to only depend on LuaJIT to build ROMs.

cygwin’s newline mangling will be the death of me.


some sheets have been put together to dump data in. some of them can be used to predict the result of glitches.