Christmas ROM Hack
Growing up in the 90s, my brothers and I spent countless hours bonding over games on the Nintendo 64. One of our favorite games was The Legend of Zelda: Ocarina of Time. As the oldest of the four, it was my task to fight the bosses as my brothers said a prayer and hoped I wouldn’t fail us.
# Fast forward to November 2023
My brothers were expressing a desire for a more sentimental Christmas. As I was thinking about what to get them, I saw a video talking about the latest status of the Zelda Decompilation Project.
A group of very dedicated fans had reverse-engineered the entirety of Ocarina of Time. This made it possible to create complete content overhauls using the game’s engine or even compile it directly for PC.
This sparked an idea: What if I put them in the game?
After doing a bit of quick searching on Google I realized this task may not be as out of reach as it would appear. I saw a few guides demonstrating the process and an add-on for Blender that would allow me to import and export models directly from the game.
# It’s now 3 days before Christmas
I had been engaged in a particularly complicated client project and realized that I had procrastinated on this idea. I had three days to make it happen. So where do I start?
There’s a YouTube playlist that goes over the process of modifying Ocarina of Time using the decompiled code and Blender. Perfect! I watched a couple hours of Kenton’s videos and got to work.
Hey, Listen!
Huge shoutout to Kenton for his amazing videos and even responding to my questions on Discord. And while we’re at it, shout outs to the Zelda Decompilation Project and Fast 64 teams who made any of this remotely possible.
The next 3 days saw a few hours of coding in C with a lot of time spent modeling in Blender. In order to preserve the spirit of the original game, I started by finding existing character models I could use as a base for my family members.
# Something neat I learned: everything is C
One of the coolest things I learned personally from this experience was just how much of the game lived directly in the C code. Every model, skeleton, animation, and even texture was directly encoded in hexadecimal as arrays.
For some this discovery may seem obvious, or maybe you don’t understand why I would find this strange or interesting. In most modern games and engines, assets are stored in separate (often binary) files that are loaded in at runtime. This largely has to do with how regions of memory are categorized for different purposes in modern systems.
For a game on a Nintendo 64 cartridge, this discovery makes perfect since dumping a cart’s memory to a file is referred to as a “ROM” dump. ROM stands for “Read-Only Memory” and contains the game’s static data, which encompases both the game’s assets and the compiled machine code.
# Unveiling the final product
It’s Christmas day. I had been working obsessively for three days.I put the ROM onto a flash drive and emerged from the basement to head over to my brother’s house.
I had attempted to create a portion of an icy dungeon that would eventually lead to a small room containing my family. Walking through the first door, you are confronted by a Lizalfos (that I failed to modify to look like the Grinch). Beating him you gain a small key and proceed to the next room with a block puzzle.
Just kidding, I messed something up. This left the dungeon with missing textures and the last room devoid of any walls, block puzzles, or the door to the final room. Thankfully this ROM has a debug mode that allowed me to jump directly to the final room.
In this room there was a stage. On that stage were my brothers Michael and Jesse, playing guitar and bass respectively. They’re currently in a band called Ponyboy, so it seemed the most fitting way to represent them.
To the left of the stage was my youngest brother, Daniel and his wife, Miranda. If you think the proportions are off, then you haven’t met them in person. My brother Daniel is basically a giant and Miranda is the opposite.
In the middle of the room was my mom, as excited as can be to see her son’s on stage. The pose is also historically accurate to what she does any time she’s excited about something — which usually involves her kids.
Finally, in the far back corner was my father. He was a… complicated person and put kindly our relationship was strained. Unfortunately it would remain that way, as he passed away suddenly in 2018.
I attempted to also include my wife, my step dad, and myself, but I unfortunately ran out of time.
# I’d do more ROM hacks, if only I had the time
Despite the crunch I found the process of modifying the game was incredibly fun — at least for me. In all honesty, I would love to invest more time and energy into creating a full-fledged ROM hack and explore what kinds of technical and artistic challenges would be involved.