Expectations

For examples of preset definitions in the desired format, look at the repository's existing files. The preset_scraper.lua script used to create preset data files can also be found here. To run this script, navigate to the Lua console under the Tools menu, then open the script from there. The script should not be run until a movie is playing. All files should be in the same directory, and within that directory should be a folder named states.

Recording

Create an emulator playback file in BizHawk 2.3+ using the vanilla JP1.0 ROM. You don't need to play perfectly, but play well enough that any preset built from the movie is useful for practice. Sloppy movement is fine, as long as Link's position for defined presets is useful. However, movies should still be reasonably good execution. Avoid taking unintended damage unless a trick is hard enough that every runner expects to take damage more often than not.

I will not scrape any movie that takes around 30% longer than the world record (unless it is a very short category). Such long movies will need to be scraped by the submitter.

How to start a new movie

  1. Open the vanilla JP1.0 ROM in BizHawk.
  2. Navigate to the File→Movie→Record Movie… option.
  3. Be gamer

Tips for recording

  • Enable the frame counter and other useful values in the View menu.
  • Save state often. BizHawk allows you to bind up to 10 quick states. It also includes support for named save states.
  • Take note of the frames you want to define presets at as they happen. Get Link into an appropriate position, pause the emulator, and look at the frame counter.
  • If you want to take a break, make a save state on the last frame you recorded. When you return, navigate to File→Movie→Recent and open your movie. Disable Read-only mode in the Movie submenu. Load the save state you created at the end of the movie.
  • Stop input for a few frames where you plan to make presets on the overworld. Do this to make sure that standing still at that position won't trigger a transition onto another screen or into the underworld.
  • Use RAM Watch to look at Link's coordinates for determining good preset definitions. This feature can be found at Tools→RAM Watch. Create a new watch for address 0x000020 that is 1 byte, displayed in HEX, in the WRAM Memory Domain for Link's Y coordinate. Do the same for address 0x000022 to get Link's X coordinate.
    • Ideal coordinate stopping points for underworld:
    • North transitions: Y = 14
    • South transitions: Y = E1
    • East transitions: X = E8
    • West transitions: Y = 0A
      Ideal coordinate stopping points for overworld:
    • North transitions: Y = 05
    • South transitions: Y = E2
    • East transitions: X = E6
    • West transitions: Y = 08
    • Underworld entrance: Y = xA

Defining presets

  • Create a .txt file named <category>.txt.
  • At the top of the file, put an "at" symbol (@), followed by a space, followed by the name of the category as it should be displayed.
  • To define a new segment, enter a new line that starts with an equals sign (=), followed by a space, followed by the name of the segment as it should be displayed in the menu.
  • To define a preset in a segment, start the line with the frame of the movie to capture data from, followed by a space, followed by the name of the preset as it should be displayed in the menu.
  • Choose frames that precede the next scene of action. For example, if the preset is for a kill room, define the frame as one where Link is in the door in the room before it. Don't pick frames that are in the middle of combat, performing a transition, or using an interface. The gamer should have control of Link once the preset is loaded, so the preset should be defined as a frame with control.
  • If you have specific concerns for what data gets scraped or presets you are unsure will be created properly, put a comment by adding a pound sign (#) followed by the comment at the end of the line. Everything that follows the pound sign will be ignored.
  • After the last segment, create a segment named "End"; i.e. put a new line containing = End.
  • After you have defined the end, put one more new line. This is required due to a bug I don't feel like fixing.

Submitting

Ideally, you will run the scraping script yourself. If you do that, be sure to include a folder in the same directory as the script named states. The script will automatically create a save state 60 frames before every preset. The script will also create a file named cm_presets_<category>.asm. Ideally, you package this file along with the preset definitions and every save state in a single .zip folder.

After submission and some initial clean up, I will send you a .bps file for you to patch yourself and test the presets.

When completed, all savestates generated by the final run of the script will be archived in a separate repository.

Styling

  • Category, segment, and preset names should be no longer than 25 characters and are limited to alphanumeric characters and the following symbols: % $ . - , ? ! # ( ) '
  • Category, segment, and preset names should be title case. Every word should be capitalized unless it is a conjunction (e.g. and, but, or), a preposition (e.g. at, of, to), or an article adjective (e.g. a, an, the).
  • Category names should match the common name for the category. Full abbreviations should not be used except for rulesets. For example, the category name "All Dungeons" should be used instead of "AD", but the ruleset should be "RMG" instead of "Restricted Major Glitches".
  • I retain final authority on any name used and reserve the right to change them as I see fit.