Project64: Difference between revisions

From OoT Randomizer Wiki
mNo edit summary
No edit summary
(20 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<span style="font-size:x-small">'''Originally written by Tyrus'''</span>
<span style="font-size:x-small">'''Originally written by Tyrus'''</span>


=== '''''This guide targets Project64 v2.x which is not suitable for SRL racing!''''' ===
Project64 is no doubt the most popular N64 emulator available. '''<span style="color:red">As racing is a large focus for the community you have to take stock of the rules of the racing websites which prohibit Project64 2.0 and higher.</span>''' Randomizer staff will support Project 64 '''v2.4.0-1161-g18d1867''' which was released on May 5, 2020 and versions newer than it. We will not directly support any previous version, including 2.3.2 which is the latest stable release. Make sure you download one of the nightly builds if you wish to use Project64 for the randomizer.


Project64 is no doubt the most popular N64 emulator available. While you may think that this means it is the best emulator to use for Ocarina of Time Item Randomizer, you would unfortunately be mistaken. As racing is a large focus for the community you have to take stock of the rules of the racing websites which prohibit Project64 2.0 and higher, and don't allow cheats to be used which are necessary with Project64 to keep pausing the game from taking a long time.
[https://www.pj64-emu.com/nightly-builds Download Project64 nightly build] '''v2.4.0-1161-g18d1867''' release on May 5, 2020 or newer. '''Make sure you download the ZIP. The installer can cause issues.'''


If you're thinking "I don't race anyway, so I don't have to worry," unfortunately you are incorrect once more. Project64 has quite a few issues that are either game-breaking, or annoying to deal with. First, Project64 targets emulation speed over emulation accuracy which means it will take shortcuts when reading the game code and make assumptions. Some of these assumptions are no longer valid for the code randomizer uses instead and so will behave incorrectly, and even go as far as to crash. It is for these reasons that Ocarina of Time Item Randomizer support and staff do not recommend using Project64 and refuse to support it outside of exceptional cases.
You can dismiss the nag screen without waiting 30 seconds by pressing the <kbd>Esc</kbd> key.


The following settings for Project64 2.0+ seem to mitigate these issue as much as possible, but we do not guarantee you won't still run into issues. Issues with Project64 are not considered actual bugs for the randomizer and the developers are unlikely to try and fix these issues as many of them are unlikely to even be fixable without modification to Project64. All that being said, if you are using Project64 '''''You will have to complete [https://wiki.ootrandomizer.com/index.php?title=Project64#Unhandled_Exception_Error_.26_Crash_Mitigation both] of [https://wiki.ootrandomizer.com/index.php?title=Project64#Pause_Framebuffer_Emulation_Speed_Cheat these] steps for each and every newly randomized ROM you use!'''''
== Enable Protect Memory ==


[https://www.pj64-emu.com/ Download Project64]
Launch Project64, and in the menu bar navigate to <kbd><samp>Options</samp> ⇒ <samp>Settings...</samp></kbd> or press <kbd><kbd>Ctrl</kbd>+<kbd>T</kbd></kbd> to open the Settings menu.


To get rid of the donate box that you have to wait 30 seconds for, click ‘Enter notification code’ and type “thank you from project64”.
In the Settings menu expand the <samp>Options</samp> list on the left and look for a <samp>Defaults</samp> section, if <samp>Defaults</samp> isn't displayed on the left than click <samp>Options</samp> and untick <samp>Hide advanced settings</samp>. Now click <samp>Defaults</samp> on the left and then tick <samp>Protect memory</samp> on the right to enable it by default. This is required for Ocarina of Time to work correctly in Project64, but is not automatically used for Randomizer.


=== Enable Cheats ===
== Enable Unique Game Save Directory ==


Open the ROM. You will get this error message:
By default, Project64 uses the same save for any rom of the same game, which means that it will re-use any earlier OoT or randomizer saves you have when starting a new seed. This can cause a number of issues, including game crashes. To fix this, go to <kbd><samp>Options</samp> ⇒ <samp>Settings...</samp></kbd> and under <samp>Options</samp> find the <samp>Advanced</samp> section. If <samp>Advanced</samp> isn't displayed on the left than click <samp>Options</samp> and untick <samp>Hide advanced settings</samp>. In here, tick <samp>Unique Game Save Directory</samp>. This will make sure every seed gets it's own game save folder.


[[File:PJ64 1.png]]
== Configure Controller ==
First, take a look at the [[Controller Setup]] guide. Ensure your controller is calibrated, and if you are using one of the controllers with additional setups steps in that guide make sure you follow them.


Click 'OK' and another error message will pop up:
In the menu bar navigate to <kbd><samp>Options</samp> ⇒ <samp>Configure controller plugin...</samp></kbd> This is where you setup your controller binds.<sup>1</sup> The buttons on the left of a box refer to the button on an N64 controller and the box next to it displays which button on a controller is currently set for using it.


[[File:PJ64 2.png]]
If you are using an Xbox controller, or any controller that is an XInput device, ensure you check <samp>XInput</samp> at the top. This will change the bind menu to be more appropriate for your device.<sup>2</sup> The <samp>XControl</samp> column is the button on your controller, and the <samp>N64</samp> column is the button on the N64 controller you want it to use.


Click 'OK' once more, and then press <code>Ctrl + T</code> The following menu will appear:
For other controllers and keyboard users, ensure <samp>XInput</samp> does not have a check by it. Click on the button for the control you want to bind a button to and the menu will wait for you to press a button on the controller or a key on your keyboard to use for the button. ''You may need to change these again if you switch controllers''.


[[File:PJ64 3.png]]
If you use a keyboard, you will also want to increase the <kbd><samp>Analog Stick</samp> ⇒ <samp>Range</samp></kbd> to <kbd>100%</kbd>.


Untick 'Hide advanced settings' Then click on the 'Advanced' menu that just showed up.
<gallery>
 
File:PJ64 11.png|1. N-Rage Input configuration menu
[[File:PJ64 4.png]]
File:PJ64 10.png|2. XInput binds enabled
 
</gallery>
Tick 'Remember selected cheats' because PJ64 needs gameshark cheat codes to emulate the pause framebuffer quicker if you are not using the GLideN64 plugin. If you can use the GLideN64 plugin, use a different emulator that is actually supported.
 
=== Unhandled Exception Error & Crash Mitigation ===
 
Click 'Config: THE LEGEND OF ZELDA' as seen in the image below. If it’s not there, load up the ROM and look again (Press Ctrl + T after dismissing the 2 error messages).
 
Where it says 'Memory size' go ahead and change that to 8 MB, deselect '32bit Engine' and then click 'apply' and 'OK'.
 
[[File:PJ64 5.png]]
 
Now click the + next to "config: THE LEGEND OF ZELDA" and then click "Recompiler" (as seen in the image below)
 
Deselect 'Cache', 'PI DMA', 'Start changed' and 'TLB unmapping'. Select 'Protect memory' and then click 'apply' and 'OK'.
 
[[File:PJ64 Setup Step 3.png]]
 
=== Pause Framebuffer Emulation Speed Cheat ===
 
[[File:PJ64 6.png]]
 
Press <code>Ctrl + C</code> and then click on the bar on the right of this window. In the box below 'Code: <address>' paste: <code>801DA5CB 0002</code> And name it something like 'subscreen delay fix' (The name doesn't matter)
 
[[File:PJ64 7.png]]
 
Then click 'Add cheat' and it should appear on the left. Tick the cheat, then close out of that menu.
 
[[File:PJ64 8.png]]
 
=== Change Graphics Plugin (Optional but recommended) ===
 
Press <code>Ctrl + T</code> and click 'Plugins' and change the Video (graphics) plugin to 'Glide64 for PJ64'. Click 'Apply' and then 'OK'.
 
[[File:PJ64 9.gif]]
 
=== Restart Project64 ===
 
Once you have completed these steps, restart Project64 and open up your ROM.
 
=== Configure Controller ===
 
Click ‘Options’ and ‘Configure controller plugin’
 
[[File:PJ64 11.png]]
 
Here is where you setup your controller binds.
 
For xbox controller users:
* In ‘Controller Pak’, untick ‘RawData’, and in the drop down menu, select ‘MemPak’.
* Tick ‘XInput’, and your binds menu will look like this: The ‘XControls’ correspond to the buttons on your controller, and ‘N64’ is what they will be bound to in-game.
 
[[File:PJ64 10.png]]
 
For keyboard users I recommend setting Analogue stick range to 100%, and in ‘Devices’, set ‘Gamepad Deadzone’ to 5%. These settings will make it easier to aim.
 
For users of any other controller my only recommendation is to check out the multitude of other guides on the Internet.
 
If you want to use a mouse, for some reason, tick 'N64 Mouse'.
 
ADDITIONAL HOTKEYS:
* Toggle limit fps (fast forward): f4
* Toggle pause: f2
* Save State: f5
* Load State: f7
 
== Required: Managing your Save data! ==
 
=== Old versions of Project64 ===
 
Old versions of Project64 use the same '.sra' file for all OoT ROMS, regardless of if they're randomised or not. If you've loaded a vanilla ROM before loading a randomized ROM, then you must first delete 'THE LEGEND OF ZELDA.sra' in 'C:\Program FIles\Project64\Save'. ''Failure to do so will result in numerous gameplay bugs''.
 
If you do not load a vanilla ROM before loading a randomized ROM, you can just delete the save files in-game.
 
=== Project64 v2.3.2 ===
 
[[File:Project64 Save File Management.png|RTENOTITLE]]
 
Tick 'Unique game save directory' to avoid having to mess with the Save Files stored on your computer's HDD when switching to another Ocarina of Time ROM.
 
== Need additional assistance? ==
 
If you have any further issues, seek additional assistance on the [https://discord.gg/ootrandomizer: Discord server]. Keep in mind Project64 is not a supported emulator and you likely won't get as much, nor as quality help as you would if you were using one of the supported emulators.

Revision as of 15:08, 9 September 2020

Originally written by Tyrus

Project64 is no doubt the most popular N64 emulator available. As racing is a large focus for the community you have to take stock of the rules of the racing websites which prohibit Project64 2.0 and higher. Randomizer staff will support Project 64 v2.4.0-1161-g18d1867 which was released on May 5, 2020 and versions newer than it. We will not directly support any previous version, including 2.3.2 which is the latest stable release. Make sure you download one of the nightly builds if you wish to use Project64 for the randomizer.

Download Project64 nightly build v2.4.0-1161-g18d1867 release on May 5, 2020 or newer. Make sure you download the ZIP. The installer can cause issues.

You can dismiss the nag screen without waiting 30 seconds by pressing the Esc key.

Enable Protect Memory

Launch Project64, and in the menu bar navigate to OptionsSettings... or press Ctrl+T to open the Settings menu.

In the Settings menu expand the Options list on the left and look for a Defaults section, if Defaults isn't displayed on the left than click Options and untick Hide advanced settings. Now click Defaults on the left and then tick Protect memory on the right to enable it by default. This is required for Ocarina of Time to work correctly in Project64, but is not automatically used for Randomizer.

Enable Unique Game Save Directory

By default, Project64 uses the same save for any rom of the same game, which means that it will re-use any earlier OoT or randomizer saves you have when starting a new seed. This can cause a number of issues, including game crashes. To fix this, go to OptionsSettings... and under Options find the Advanced section. If Advanced isn't displayed on the left than click Options and untick Hide advanced settings. In here, tick Unique Game Save Directory. This will make sure every seed gets it's own game save folder.

Configure Controller

First, take a look at the Controller Setup guide. Ensure your controller is calibrated, and if you are using one of the controllers with additional setups steps in that guide make sure you follow them.

In the menu bar navigate to OptionsConfigure controller plugin... This is where you setup your controller binds.1 The buttons on the left of a box refer to the button on an N64 controller and the box next to it displays which button on a controller is currently set for using it.

If you are using an Xbox controller, or any controller that is an XInput device, ensure you check XInput at the top. This will change the bind menu to be more appropriate for your device.2 The XControl column is the button on your controller, and the N64 column is the button on the N64 controller you want it to use.

For other controllers and keyboard users, ensure XInput does not have a check by it. Click on the button for the control you want to bind a button to and the menu will wait for you to press a button on the controller or a key on your keyboard to use for the button. You may need to change these again if you switch controllers.

If you use a keyboard, you will also want to increase the Analog StickRange to 100%.