1
0
Fork 0
mirror of https://github.com/notwa/mm synced 2024-10-31 17:14:36 -07:00
mm/notes.md

96 lines
3.5 KiB
Markdown

# Miscellaneous notes on Majora's Mask
for brevity, all addresses written here are given for the original US version.
refer to the spreadsheets or Lua tables for their equivalent in other versions.
## save files
save contents are mostly documented by [the save file binary templates.][savebt]
[savebt]: //github.com/EntranceJew/zelda-binary-templates/tree/master/filetypes/Save
*note: the following text is specific to MM; OoT is slightly different.*
in the versions of the game with owl saves,
regular saves are 0x100C in size, and owl saves are 0x3CA0.
owls use the extra space primarily to store the pictograph picture.
the game checks a checksum, and for the text "ZELDA3".
each slot has one backup copy of itself, though they don't seem to be used?
if a slot is corrupted, it will show up as empty in the menu.
the checksum is a 16-bit sum of all bytes up to that point, allowing overflows.
i've written [a checksum-fixing program][chksum] in Python for Bizhawk savefiles.
i've also written an [010][010] Editor [script][chksum2]
and its [OoT variant][chksumOoT]
for properly formed save files, such as those made by nemu64.
owl saves always have 0x24 added to their checksum for some reason.
[chksum]: /chksum.py
[chksum2]: //github.com/EntranceJew/zelda-binary-templates/blob/master/scripts/FixSaveMM.1sc
[chksumOoT]: //github.com/EntranceJew/zelda-binary-templates/blob/master/scripts/FixSaveOoT.1sc
[010]: http://www.sweetscape.com/010editor/
bizhawk save files, at the time of writing, have the first file offset to 0x20800.
also, their byte order is wrong.
here's my usual process (in bash) for hacking on save files:
```
alias revend='objcopy -I binary -O binary --reverse-bytes=4'
s="Legend of Zelda, The - Majora's Mask (USA).SaveRAM"
x=mm-save.xxd
revend "$s"
xxd "$s" > $x
$EDITOR $x
xxd -r $x > "$s"
./chksum.py $s
revend "$s"
```
## MM Save Files
because no one likes first cycle.
sometime i'll bother checking what the bombers/lottery codes are for these.
* [Bizhawk US 1.0 race file](//eaguru.guru/t/MM%20US%20Race%20File%20for%20Bizhawk.zip )
* [mupen64plus US 1.0 race file](//eaguru.guru/t/Legend%20of%20Zelda%2C%20The%20-%20Majora%27s%20Mask%20%28U%29%20%5B%21%5D.zip)
you can make your own by using [the provided setup race file script.][racelua]
simply run the script and play Song of Time after South Clock Town has loaded.
using this script will also set the bombers code to 12345,
set the daily lottery numbers to 123, 456, 789,
and set the Oceanside Spider House puzzle solution to
Red, Blue, Red, Blue, Red, Blue.
[racelua]: /Lua/setup%20race%20file.lua
## bitfields
### scene flags
two regions of 0x960 bytes are allocated for all the scene flags in the game.
the first at `801EFAE0` is loaded from save files,
the second at `801F35D8` is used for in-game changes.
basically, edit the first for save hacking, and the second for in-game hacking.
each scene in the game uses 0x14 bytes of scene flags.
this implies there's 0x78 possible scenes: 0x78\*0x14 = 0x960.
the current scene's flags are always copied into the same place in memory.
they appear in a different order than in save files, however.
(four bytes each)
`803E8978` corresponds to offset 0x04 in the save file.
`803E897C` corresponds to offset 0x08.
`803E8988` corresponds to offset 0x00.
`803E898C` corresponds to offset 0x0C.
`803E8994` corresponds to offset 0x10.
### Link's status
here's [an incomplete document on some of Link's bitfields][linkfields] for JP 1.0.
[linkfields]: /mm-bitflags.txt