Majora Mask 3D Project Restoration 3DS

From GameBrew
Revision as of 01:57, 15 January 2022 by HydeWing (talk | contribs)
Majora Mask 3D Project Restoration
File:Majoras-mask.jpg
General
Authorleoetlino
TypeGame Hacks
Version1.5.9
LicenseMixed
Last Updated2022/01/03
Links
Download
Website
Source


A Majora's Mask 3D patch that restores some mechanics from the original Majora's Mask and fixes some issues to make the game even more enjoyable.

Note: Some features make use of the new ZL/ZR buttons, so playing on a New 3DS/2DS or Citra is recommended for a better experience.

Changes

  • Zora Fast Swim: Swim gracefully as a Zora without having to use magic
  • Fast swim is now the default way of swimming and no longer requires magic.
  • Slow swim is still available. Press Up/Down on the D-Pad to toggle between fast swim and slow swim. You can also hold ZL to slow swim.
  • Fixed Deku Hopping: Hop on water as fast as in MM
  • Deku Link's walk acceleration value was nerfed in MM3D (2.0 -> 0.6). As a possibly unintended consequence, this made hopping on lilypads very slow compared to the original even if you spin at the optimal time.
  • Fast Transform: Transform without having to equip items for a more streamlined gameplay
  • Three of the four D-Pad buttons are now used to fast transform (Left: Zora, Up: Goron, Down: Deku)
  • This frees up as many as 3 buttons!
  • More Fluid Bomber's Notebook: Less annoyingly slow popups and transitions
  • The Bomber's Notebook screen now updates instantly when it's opened instead of waiting for 1.8 seconds just before starting the "new" text animation (!), followed by another 1.18s pause and another 1.56s delay until the main text box appears (!!).
  • Song of Time Saving: The Song of Time now optionally saves the game. Players will be greeted with the iconic Dawn of the First Day screen after loading a Song of Time save, just like in the original game.
  • More Effective Inverted Song of Time: Slow time to 1/3 speed (as in the original)
  • Makes some glitchless challenge runs possible again.
  • Gives the player more time in a three-day cycle.
  • Improved Bosses:
  • Removes the eyeballs from Odolwa, Goht and Gyorg.
  • Balances Odolwa's AI and attacks to improve gameplay.
  • Fixes a game bug that caused Odolwa to be invulnerable to attacks and block excessively.
  • Improved Twinmold: Less tedious, less confusing
  • Reduced the number of cycles to make it less repetitive.
  • Red Twinmold no longer resets its hit counter every time it burrows back into the sand. As a result, the battle is much less confusing for new players.
  • Restored Ice Arrows: Ice arrows that work in more locations
  • Ice arrows now work everywhere in Great Bay Temple, not just in Gyorg's room. This gives the player the freedom to experiment with ice arrows. Ice arrows also work in several other areas, just like in the original game.
  • Removed the sparkling water effects as they were an insult to the player's intelligence.
  • Fast Arrow Switching: Press ZL to quickly switch between arrow types (Normal/Fire/Ice/Light).
  • Dedicated Physical Buttons for more convenient access to items and menus
  • Open the Items menu by pressing START.
  • The Bomber's Notebook is now mapped to SELECT.
  • Ocarina of Time: ZR+A
  • Pictograph Box: ZL
  • I: ZR+X
  • II: ZR+Y
  • It is now possible to assign items to I and II with a single press.
  • The Gears and Map menu can be opened with ZR+Start / ZR+Select respectively.
  • For the ocarina screen, it is possible to switch between the instrument screen and the song list with Start/Select.
  • Those are obviously optional and are primarily meant for Citra users.
  • Other minor adjustments to improve the player's experience:
  • Adjusted the speed of Stone Tower blocks for a more pleasant climbing experience.
  • The moving platforms in Deku Palace and Woodfall Temple now actually always move.
  • The Bombers will no longer distract the player from a particular cutscene.
  • The new Sheikah hint stone will also no longer distract the player during an important cutscene in the Clock Tower.
  • Captain Keeta now walks as fast as in the original game, which restores the challenge of the chasing mini-game.
  • Link no longer plays the Elegy of Emptiness a second time after it's been played once. This makes Stone Tower a lot less tedious, considering it needs to be played 10+ times to beat Stone Tower Temple normally.
  • For similar reasons, the Song of Soaring is only repeated once during a play session.
  • Owl statues can now be activated by striking them with a sword.
  • It is possible to control Goron Link rolling just like in the Nintendo 64 version: hold A and move to roll, release A to stop. The classic control scheme co-exists with the new one.
  • Free camera mode can now be used more often, notably when targeting, talking or playing the ocarina.
  • Link can now leave the Swordman's School during training if necessary to avoid wasting time.
  • Fixed a game bug that caused the "heart container get" sound not to play after getting four heart pieces.
  • Fixed a game bug that prevented the player from leaving free camera mode by targeting when Zora swimming or Goron rolling.
  • Fixed a possible softlock during the Twinmold boss intro.

Changelog

v1.5.9'

Project Restoration v1.5.9 was released on 02/01/2022. To install or update Project Restoration, follow the instructions here.

Users of the HD HUD mod should set up the patch and custom textures again: some HD textures weren't loaded because of a packaging mistake and A and B button text could show up blurry.

Changes since 1.5.8:

  • Several tweaks to the Elegy of Emptiness and Stone Tower were made to improve the user experience.
    • The statue is now spawned faster and it is now impossible to step off floor switches before the statue has materialised.
    • Stone Tower blocks now move at a less dizzying speed.
  • ISG (Infinite Sword Glitch) was reimplemented.
  • The console sound setting is now honoured; the game no longer forces surround mode.
  • Fixed a softlock that could occur if an owl statue is hit immediately after playing the ocarina (#167).
  • Fixed Link being able to transform into Goron Link while carrying Mystery or Moldy Milk.
  • Fixed a rare, random crash that could occur if ZR was held during transitions.
  • Fixed quick arrow swapping quirks when L targeting.

Project Restoration v1.5.8 was released on 25/04/2020.

Changes since 1.5.7:

  • Fixed a possible softlock in the Bomber's Notebook.

Changes since 1.5.6:

  • Fixed a softlock when fighting Gyorg during phase 2. (Thanks to Zelda Informer for the bug report!)
  • Fixed yet another softlock when fighting Gyorg during phase 2. (Yes, Grezzo's Gyorg is buggy.)

Project Restoration v1.5.6 was released on 05/04/2020.

Changes since 1.5.5:

  • For consistency reasons, Red Twinmold now always requires 2 damage cycles.
  • Fixed a possible softlock when fighting Gyorg during phase 1.
  • Fixed a very rare crash when fighting Gyorg during phase 2.
  • The Elegy of Emptiness statue spawn mini-cutscene is now automatically skipped to further streamline gameplay in Stone Tower.
  • Re-added Mask Storage. It had been accidentally removed when fast transform was added. Fast transform can now also be stored. Also re-added Ocarina Dive for testing purposes.
  • Controls:
    • The Items screen is now opened with SELECT and the Bomber's Notebook with START for consistency with existing dialogue messages in the game.
    • The Ocarina can now be used by pressing D-Pad Right (when Tatl is not trying to get the player's attention). The current shortcut (ZR+A) and the on-screen button still work.
    • In Zora form, it is now more convenient to switch between fast swim and slow swim: use the D-Pad Up/Down or ZL (new). Hold ZR to slow down (this was previously done with ZL).
    • Additional button controls for the Bomber's Notebook:
      • Switch between the Schedule (timeline) view and the Events view with Y.
      • Set or delete an alarm with X.
      • Open the map with SELECT.

Setup

Project Restoration works on both the 3DS console (both eShop and game card) and on the Citra emulator.

First, determine which version of the game you have. Because Project Restoration works by patching game code and injecting new code, and because Grezzo has released three different versions of the game executable, it is essential that you figure out which version you have in order to use the appropriate Project Restoration patch for your situation.

  • If you have MM3D 1.0 (eShop or game card), you likely have v100 (FYI: v100 is the real, internal version number).
  • If you have MM3D 1.1 on a game card and it came with 1.1 preinstalled, you likely have v110.
  • If you have MM3D 1.1 (eShop or 1.0 game card), then you likely have v101. However for the rest of the instructions you should first try the v100 patch. Only try v101 if v100 doesn't work.

Using the incorrect patch will cause the console or Citra to abort and crash. If this happens, try the other two patches (after removing any file you copied to your SD/Citra folders while following this guide).

Now, download the latest release of Project Restoration (not source code!) and open the 7z archive. Open the v100/v101/v110 folder in the archive and leave it open for the rest of the instructions.

Second, determine your game's title ID. Because the 3DS is a region-locked console, several versions of the game were released for different regions. Each of them has its own title ID.

  • For the European release: 0004000000125600
  • For the American release: 0004000000125500
  • For the Japanese release: 00040000000D6E00

Keep both the version number and the title ID in mind, then follow the instructions for your platform (console or Citra) below.

Please note that:

  • If the patch is applied successfully, a sound effect will be played right before the title screen, even before the spinning mask appears.
  • In order to use the new ZL/ZR buttons, the Circle Pad Pro must be enabled in MM3D's options, even if you are playing on a New 3DS.
  • This project only directly supports v100. All other versions of MM3D will be temporarily and automatically downgraded to 1.0 (v100) to ensure the code patches work.

Console

  • If you are a first time Luma3DS user, follow this guide.
  • Download my version of Luma3DS* and put the boot.firm file at the root of your SD card.
  • [Only if you have ever copied boot.firm to your NAND] Also copy the new boot.firm to your NAND using a tool like godmode9.
  • Enable game patching in Luma's menu.
  • Create the /luma/titles/TITLE_ID/ directory/folder on your SD card (if it doesn't already exist). Obviously, please replace TITLE_ID with the actual title ID.
  • Copy code.bps to that directory.
  • (If you want faster aiming, copy code_faster_aim.bps instead and rename the patch to code.bps.)
  • Copy exheader_legacy.bin to that directory and rename the file to exheader.bin.

The relevant files on your SD card should look like this at the end:

  • SD card root
  • boot.firm
  • [Folder] luma
  • [Folder] titles
  • [Folder] (the Title ID you determined earlier)
  • code.bps
  • exheader.bin
  • Why is a fork necessary? As of Jan 2020, the latest Luma3DS has a critical bug in the loader code and missing support for BPS patching. Both issues are fixed in the fork, and a fix for the former has been upstreamed. A pull request for BPS patch support has been submitted but not yet merged.

Citra

Note: Canary 1529+ is required until my pull request for BPS patch support is merged.

  • Open the folder containing your game file (3ds/cia/app).
  • Assuming your game file is called GAME_FILE.extension (full name including the file extension), create a directory/folder with the path GAME_FILE.extension.exefsdir (if it doesn't already exist).
  • Copy code.bps to that directory.
  • If you want faster aiming, copy code_faster_aim.bps instead and rename the patch to code.bps.
  • Copy exheader.bin to the folder containing your game file, then rename it to GAME_FILE.extension.exheader. It is very important that you keep your game ROM's file extension, and also add '.exheader' at the end!

Example: If your game is at /home/leo/games/3ds/zelda_mm.3ds, then:

  • create /home/leo/games/3ds/zelda_mm.3ds.exefsdir
  • copy code.bps to /home/leo/games/3ds/zelda_mm.3ds.exefsdir/code.bps
  • copy exheader.bin and place the file in /home/leo/games/3ds/, calling it zelda_mm.3ds.exheader (note the double extension!)

IMPORTANT: Read the instructions carefully again. It is all too common for people to make a mistake with file names.

  • Example: If your game file is called 00000000.app, the exefsdir folder and the exheader must be called 00000000.app.exefsdir and 00000000.app.exheader respectively.
  • Example: If your game file is called zelda_mm3d.cia, the exefsdir folder and the exheader must be called zelda_mm3d.cia.exefsdir and zelda_mm3d.cia.exheader respectively.

The directory which contains your game file should look like this at the end:

  • [Folder] Containing directory
  • yourgamefilenamehere.3ds
  • yourgamefilenamehere.3ds.exheader
  • [Folder] yourgamefilenamehere.3ds.exefsdir
  • code.bps

Troubleshooting

My 3DS or Citra crashes

Delete any file you copied while following this guide and follow the instructions carefully again.

In particular, if you are playing on a 3DS, make sure that you have renamed exheader_legacy.bin to exheader.bin.

If you are absolutely sure you have followed the instructions correctly, try all three patch variants (v100/v101/v110) until one of them works.

The patch isn't applied

Make sure that you put the patch files (code.bps and exheader.bin) into the right folder. Ensure that you are using the correct title ID for your game.

If you are playing on a 3DS console, check whether game patching is enabled.

Frequently Asked Questions

Is such a patch available for Ocarina of Time 3D?

As of March 2020, no. While I am interested in making a QoL patch for OoT3D, unfortunately I have no time to work on such a project at the moment. But unlike its sequel, OoT3D does not urgently need a Project Restoration-style mod anyway :)

Hero mode?

Currently, I have no time to work on hero mode either. And hero mode is somewhat out of the scope of this project anyway.

Restored lighting? The bright colours ruin the atmosphere!

Project Restoration attempts to fix what regressed in MM3D by restoring original mechanics and adding QoL improvements. I do not consider the graphical changes a regression. Even colourful games can be dark, and I'd argue that in Majora's Mask the unique atmosphere mostly comes from the stunning storytelling and narrative.

How do I update Project Restoration?

Simply follow the setup instructions again.

For 3DS console users, you do not need to set up Luma3DS from scratch again.

How was this made?

By reverse engineering the game to understand how it works (at least partially). No, I don't work at Grezzo! For more details, you're encouraged to look at the source code.

Rationale

Zora swim

In MM3D, swimming is a bit slower. It is possible to fast swim; however it now requires and consumes magic at a fast rate. Chateau Romani isn't a satisfactory workaround: it only becomes available after a bunch of quests and requires wasting most of the First Day, and even then it's still impossible to get rid of the constant buzzing sound that comes from using the barrier.

Besides, why would Zora Link need magic to swim like a Zora?

Inverted Song of Time potency

The ISoT nerf might have been another unintended change.

The in-game time is updated by adding a speed value and another value I'll call the extra speed to the time variable every frame. In MM, the time speed is usually 3 (units/frame) and the ISoT sets the extra speed to -2, resulting in a +1 effective speed (which means 1/3 speed). Because the time is updated every frame, in MM3D, the developers reduced the speed to 2 to compensate for the increased framerate. The ISoT was updated to set the speed to -1 instead of -2. However, that only gives players 1/2 speed.

I couldn't see any good reason to keep this change, so I reverted it.

Twinmold

The new Twinmold battle drags on for way too long. Spinning the main stick makes it faster, but that's not an obvious mechanic. Even with that trick, killing Red Twinmold still takes 3 long identical cycles!

Another issue is the addition of a hidden hit counter. 10 hits are required to stun Red or Blue Twinmold. This would have been acceptable if it weren't for the fact that Red Twinmold regularly burrows back into sand during phase 2 and the hit counter is silently reset every time that happens.

This makes for a confusing experience the first time the player fights Twinmold, as there is nothing in the game that indicates that the hit counter resets every time, and it's still frustrating on subsequent playthroughs.

About the project

Project Restoration was born out of frustration with some of the changes in the remaster (regarding Zora Link in particular), with the realisation that I might be able to have my cake and eat it too, and get the best out of the original and MM3D's massively improved graphics and small quality of life improvements.

I personally consider the project to be pretty much complete. The game is playable with no game-breaking issues, has been 100% completed several times by myself and others (now that the project is more than two months old!) and I have fixed everything I have most wanted to fix, so I probably will not be working on it very actively anymore. Future versions of Project Restoration will most likely only be bug fix releases, which may occasionally bring small new improvements.

Project structure

  • source/ Project Restoration's source code.
  • build/: build outputs.
  • common/: small utilities.
  • game/: implementation for the known parts of Majora's Mask 3D. Contains headers and some reimplementation of game functions.
  • rst/: Project Restoration code.
  • v100/, v101/ and v110/: Version-specific data.
  • hooks.hks: configuration for patches and hooks (for Magikoopa).
  • Version.cmake: defines for Project Restoration code.
  • loader/: Code loader (from Magikoopa).

Sometimes you will find Project Restoration extensions and new code under source/game. Those extensions will always be clearly labelled as such.

Build instructions

  • Put the original code.bin and exheader.bin in v100, v101 and v110.
  • Run make_release.sh. You need git and Magikoopa in your PATH. Currently, a fork is required.
  • Generated code patches (code.bps) and patched exheaders can be found in release/.

PRs and help are welcome!

Advertising: