I wrote a webapp in NextJS to easily create the FF4 Ultima Plus romhack from many patch options; I then adapted it for another project, FF6 A Soldier’s Contingency. This guide will walk you thru adapting it for use with your romhack, too.

Reach me at [email protected] if you need help adapting this open source project!

Current FF6 ASC webapp repo: please git clone and make your own codebase (I’m spread too thin to manage branches on this project).

Core Concepts

  1. Create patches for each version of the base ROM you want to support
  2. Collect all the option patches together in feature categories
  3. Make a .zip bundle of the main patches, and one of each option category; put them in /public
  4. Modify the open source NextJS app code to resize your project ROM & use your bundles
  5. Change the branding and text on the app to match your romhack
    1. title & title screen
    2. descriptions of patches
    3. color scheme
    4. favicon & any other graphics
  6. Test your version
  7. Deploy to Vercel when it’s working as desired

Base ROM Patches

First off, it’s important to know this webapp always removes the copier header from any uploaded ROM.

<aside> 🔥

If your project also offers patches that are calibrated for ROMs with copier headers, you will not need to use them with this webapp!

</aside>

Your romhack likely has more than one core patch, in order to support multiple versions of a game. The main .zip file will contain all of the patches to build your romhack, for ROMs without copier headers. Even if there is only one patch, you will still need to place it into a .zip file and give it a sensible name like “core-game.zip”, “main.zip”, or etc.

Option Patches, in Categories

Group the options your project offers into .zip files based on what they change. For example, all the character portrait graphic options might go into one archive called “Portraits”. Usually only one of these options will get used at a time, so if you’re having trouble setting up the categories use this rule to sort the options.

image.png

Another obvious option that will only make sense as a single choice is a new font.

image.png