👋 I began learning how to modify Super Nintendo games in November 2023: here are my notes!

I started off with a game I own a copy of (you should, too), “Final Fantasy V” for the Super Famicom.

All the notes here will be about this game’s ROM (read-only memory) and I don’t understand how to hack the running game (the RAM) too well yet, so please read on to get up to speed with the basics of ROM hacking Final Fantasy V (I’ll just write FFV from now on).

sfc.jpeg

You can search for your own copy of FFV to purchase, here. Then you’ll be legally cleared to play with power and hack this game, too!

Quest 1: 🧾 Change Item Name or Spell Name (or any list items: like weapons, monster names, etc)

📦 Get windhex

This is ancient windows hex editor, and an essential tool for romhacking.

Download it from here.

(Right click to open the .exe, if you can’t open it normally.)

BONUS: Windhex can work on macOS, too!

I suggest you use PortingKit, a suite that will emulate Linux, which will emulate Windows (this is done with an app called Wineskin), which will let you run windhex on your MacBook (crazy workaround, yet almost as good as running it in Windows10) 🤷‍♂️

Screenshot 2024-03-18 at 18.59.46.png

Screenshot 2024-03-18 at 19.01.45.png

If you are running it on macOS, you’ll need to open Wineskin and find the .exe file every time you open windhex. It’s a bit annoying, but you’re not needing to run 2 operating systems!

🔍 Learn basic features of windhex

Screenshot 2024-03-18 at 19.02.58.png

  1. Memory Address zone (aka Offset zone)

    1. it’s just the location in the game’s memory (filesystem is the modern analogy)
    2. you’ll start getting a feel for the addresses as you learn how to romhack

    memory.png

  2. Hex zone

    1. the place you make changes to the game code
    2. each byte is 2 characters… they are a number value
      1. one of 256 different values!
        1. lowest value is “00”
        2. highest value is “FF”
        3. (both of these values indicate “blank” for many roms)
      2. the digits are NOT just 0-9, they keep going like this:
        1. 0123456789ABCDEF

          1. it’s SIXTEEN digits, not ten 😈
        2. this is how these old games’ memory systems stored data efficiently

          1. so in hex world, 10 = “A”, and you’d think of 11 as “B” if we learned this “base 16” system in kindergarten, but we learned “base 10” instead
        3. when you get confused, just do a quick Search online for the conversions, and you’ll start to get the hang of this more dense numbering system

          Screenshot 2024-03-18 at 18.40.32.png

          I guess the 0x is a pretty standard way to indicate “base 16” aka “hex” 🤔

          Screenshot 2024-03-18 at 18.43.03.png

    zone3.png

  3. Text zone

    1. Here is where the meaningful, human-readable stuff will appear
    2. The table file (read on) will inform what shows up here

    Screenshot 2024-03-18 at 19.05.59.png

  4. Change fonts in these zones to make them easy to read!

    1. Make sure they still line up with one another, or you’ll start getting brain drain from seeing your rows mis-aligned
    2. Monospace fonts are recommended— these have the same width for all characters