···10101111<!-- more -->
12121313+::span{class="z-0 inline-block overflow-hidden w-1/2"}
1414+1315{
1616+quality="50"
1417class="animate-rotate"
1518alt="sonic running in a rotating animation"
1619width="428"
1720height="498"
1821}
2222+2323+::
+183-45
content/blog/en/2026-02-27.md
···66time_zone: America/New_York
77---
8899-MAGFest 2026 was an awesum possum grade awesum event! The whole trip happened due
99+@ MAGFest 2026 was an awesum possum grade awesum event! The whole trip happened
1010+due
1011to a desire to meet people I knew from [Zelda Fan Game Central](http://zfgc.com/){target="\_blank"}.
1112There was a lot to unpack, and I felt that now the time is right to finally decompress
1213everything that had led up to going to MAGFest, and the OoT2D Rick Roll Demo.
···15161617## The Beginning
17181818-### MG-Zero and gm112 combine their half-braincells together to form one braincell
1919-2019During a conversation with Steve, we had talked about Ocarina of Time 2D and how
2120nice it would have been to do a panel on it. To give a spotlight to the community
2221of where OoT2D was born. That discussion evolved into a project that went down
2322a rabbit hole of learning how to make a game on the Game Boy. The idea was to
2423make an Ocarina of Time 2D demo that would play into the hopelessness
2524of Demo 4 (I will write an article about this later).
2525+And also, given how many assets were created by other members at [ZFGC](https://zfgc.com/){target="\_blank"},
2626+I wanted to make a
2727+box that would include content made by members of [Zelda Fan Game Central](https://zfgc.com/){target="\_blank"}.
2828+Unfortunately, that idea fell through due to time constraints and lack of responses.
2929+3030+The plan ended up evolving into:
3131+3232+- Make Rick Astley's "Never Gonna Give You Up" sing on the Game Boy
3333+- Tile out Kikori Forest
3434+- Add NPCs and script to invoke rick roll
3535+- Profit???
3636+3737+### MG-Zero and gm112 combine their half-braincells together to form one braincell
26382739Thankfully, I had already had been helping another friend of mine, Aaron,
2840with theirown Game Boy project, Dearborn, which has a similar playstyle to
29412D Zeldas.
3030-3142Aaron had been working on Dearborn, and then reached out to me to help with
3243developing the game. Since we were in pre-production, we experimented with
3344a couple of different ideas. One was a turned based combat system demo, which
···36473748Christmas was approaching soon, so I made the decision to take
3849the time to develop the action adventure mechanics into the game and fork off
3939-into our glorious rick roll for MAGFest. Mwahaha >: )
4040-5050+into our glorious rick roll for MAGFest.
4151It seemed like the perfect fit for building a version of the game that would
4252rick roll the player! \:D So, off I went to putting together the demo!
5353+Steve (MG-Zero) would later go on to help create the cart label for the rick roll.
43544444-### From Dearborn to Rick Roll
5555+Mwahaha >\: )
5656+5757+Why Rick Roll, you ask? Well, [ZFGC](https://zfgc.com/){target="\_blank"} had
5858+a long history of loving memes, even having a presence on [YTMND](https://ytmnd.com/)!
5959+And the community had been edged enough about the release of Demo 4 or some other
6060+variation of OoT2D that how could it NOT be Rick Roll? Rick Astley was always
6161+there for us, after all.
6262+6363+## From Dearborn to Rick Roll
45644665Copying Dearborn's files into a new project gave me the starting point for
4766creating Link's Room, using tiles from Oracle of Ages. My thinking was to
4848-start from the very beginning, and move on from there. Kikori Forest was
4949-more or less a rough port of the actual layout of the map, with some things
5050-like rocks removed. This process had taken roughly a few weeks of intermittently
5151-devoting time to it.
5252-5353-### Getting to grips with an 8bit handheld
6767+start from the very beginning, and move on from there.
6868+GB Studio was very familiar to me, since I've used Game Maker in the past. It also
6969+takes care making sure you're not getting caught up in how tedious working with
7070+such an old console can be! But, I got a little carried away. \:) One of the first
7171+things I did was bundle the cli tool so that we did not have to build the cli ourselves.
7272+At the moment, the changes were wiped away in a rebase I did, but you can see the
7373+[fork here](https://github.com/pixelatedtree/archive-gb-studio){target="\_blank"}.
54745575So one of the first requirements I had to handle was reworking the camera
5676to scroll sections of the map in the same style as 2D Zeldas, and to
···5878At this point I had forked GB Studio and began adding things to help with
5979overcoming some of the rougher workflows for the type of game we were developing.
60806161-TODO: Finish this section
8181+[Robert Donman](https://www.youtube.com/watch?v=4H13KJJ6Ysw){target="\_blank"} made
8282+a good video that talks about the camera system in GB Studio. This was the first
8383+approach I attempted. But I felt it could be improved. The approach was
8484+limited to the available VRAM for each scene, since you had to construct the world
8585+using smaller grid single-screen maps. And, I wanted to be able to have arbitrarily
8686+sized maps.
8787+Exporting the engine, I wrote a routine that would stream chunks. And a custom camera
8888+was setup to remove the requirement of using trigger volumes in scenes to control
8989+camera scrolling. Now was time for actually creating maps!
9090+9191+### The Label: What's up with that ESRB rating?
9292+9393+Using a [label template](https://github.com/Dinierto/Cartridge-Label-Templates/blob/main/Nintendo%20Gameboy%2C%20Gameboy%20Color/Nintendo%20Gameboy%20Cartridge%20Label%20Template.psd){target="\_blank"}
9494+from [Dinierto](https://github.com/Dinierto){target="\_blank"}, we went back and
9595+forth on how to design the label. We settled on going for something that could
9696+look like a legitimate cart from far away, but as you took a closer look,
9797+something should look off. ;)
9898+9999+{
100100+width="500"
101101+height="500"
102102+class="size-64"
103103+alt="Don Patch"
104104+loading="lazy"
105105+:placeholder="512"
106106+}
107107+108108+Special shout out to Steve for the rated D for Dick ESRB rating idea. >\: )
109109+110110+### Level Design: Scale in a top-down game on the Game Boy
111111+112112+Majora from ZFGC had made a [complete OoT2D Map](https://www.theverge.com/2012/4/22/2967357/zelda-ocarina-of-time-2d-oot2d){target="\_blank"}
113113+in ALTTP Style. Which it worked as a great reference!
114114+[ZFGC](https://zfgc.com/){target="\_blank"}
115115+also served as a great place for references, since I had access to the assets archive.
116116+117117+The first problem I came across with mapping was scale. Maps simply were too big.
118118+Even with a 2D representation
119119+with another 2D Artstyle, the scope of the world just conveyed differently with
120120+the resolution of the Game Boy. After a bit of trial and error, I learned how
121121+to reduce the size of the maps to work within the Game Boy's resolution.
122122+123123+### Level Design: Color palette limitations
124124+125125+Another problem I ran into while mapping was learning how to break up tiles
126126+vs sprites. Sometimes if you wanted to express some kind of visual element,
127127+using background tiles may not be practical due to the choice of 4 colors per-
128128+tile. And while you can use multiple background palettes, you may be unable to
129129+use the correct palette for all tiles within an 8x8 tile block. This is where
130130+sprites can help. For The Great Deku Tree, I used the Maku Tree sprite from
131131+Oracle of Ages, and when implementing the Tree, I separated the eyes from into
132132+their own sprites and wrote a routine to control rendering them. This also
133133+let me place additional sprites for flowers and such on the Tree. Though,
134134+sprites aren't always the best solution for this because you can run
135135+out of sprite slots per scanline! Which segways into another technique,
136136+you can use [RGBGFX](https://github.com/gbdev/rgbds){target="\_blank"} to
137137+write a script to process your map scene in such a way where it can help
138138+overcome the color limitations of the background tiles. My recommended
139139+approach is to create a shared tileset with some duplicate tiles that are modified,
140140+because then you can have more control over the color palette of the background
141141+tiles. It is also a great tool to know for Game Boy development! \: D
6214263143### Figuring out the audio situation
64144···113193 "$OUTDIR/never-gonna-give-you-up-%03d.wav"
114194```
115195196196+The [ffmpeg](https://ffmpeg.org/){target="\_blank"} parameters above were approximated
197197+by using [https://www.audacityteam.org/]{target="\_blank"}
198198+to experiment with bit crushing the WAV files and trying similar results in [ffmpeg](https://ffmpeg.org/){target="\_blank"}.
199199+The parameters were found by hugging the [ffmpeg filters](https://ffmpeg.org/ffmpeg-filters.html){target="\_blank"}
200200+documentation and thanking it for the help. They probably are far from optimal.
201201+It was a fun experiment and the results appeared to be acceptable.
202202+116203```bash [output.log]
117204ls -1 | wc -l
118205119119-# 72
206206+# 72 - the number of output files
120207```
121208122209::
123210124211::
125212126126-With around 72 output files, I removed 3 of them and replaced the last
213213+With around 72 output files, I removed 3 of them<!-- for the noice number -->
214214+and replaced the last
127215one with a silence file. The next step was to see if we could playback the wave
128216files. My first attempt involved queuing up two GBVM `VM_SFX_PLAY` commands,
129217which didn't work on its own. Then I tried using a C-style array, and manually
···181269especially given the simple approach to playing back Rick Astley's "Never Gonna
182270Give You Up". ;p
183271184184-### Departing
185185-186272A few months pass...
273273+274274+### Departing
187275188276The day finally came. It was a cold winter morning, I had booked my flight really
189277early so that I could get into registration early for MAGFest. My MacBook Air M1
190278was getting loaded up right before I left for the flight with a simple scp copy
191191-command.
279279+command. After packing the last of my luggage, I loaded the laptop in my bookbag
280280+and left for the airport.
192281193193-Then, I arrived on the airplane. Opened up the MacBook and then,
282282+Then, I arrived on the airplane. Opened up the MacBook loaded up GB Studio and then,
194283"Oh fuck", I thought to myself.
195284285285+{
286286+quality="70"
287287+width="37"
288288+height="35"
289289+class="h-9.25 w-8.75"
290290+alt="Ganon from Zelda 1 Sprite"
291291+loading="lazy"
292292+:placeholder="512"
293293+}
294294+196295Turns out, only a few of the files had came over, since I had completely ran out
197296of disk space! With only an hour, I scrambled to slap together a new demo. I had
198297used the RPG template project that was included in GB Studio. Then, grabbed the
···201300the code and for the music playback was just a few lines of code and also
202301came over!
203302204204-I landed and made my way to the Gaylord Convention Center.
303303+The airplane I was on happened to be a smaller passenger plane, so it was
304304+quite an experience remaking the demo while crammed into a small space.
305305+My first priority was to make sure Rick Astley still sang, and after
306306+doing that, using one of the resources grabbed from [Sprites Resource](https://www.spriters-resource.com/){target="\_blank"}
307307+I compiled something that I felt could still fulfill the spirit of the
308308+prank.
309309+310310+After an hour, I landed and made my way to the Gaylord Convention Center.
205311206312## At the Gaylord
207207-208208-### Preregistering and hanging out for a bit
209313210314{
211211-fit="cover"
212212-quality="90"
315315+quality="70"
213316width="500"
214317height="500"
215318class="size-64"
216319alt="Day 1 in the food court"
217320loading="lazy"
321321+:placeholder="512"
218322}
219323220324Around 7AM on the first day of MAGFest, I was able to get
···228332bring back the Great Deku Tree, and some of Kikori Forest, but then my phone
229333had started buzzing with notifications which took my attention.
230334231231-### Meeting up with Friends
232232-233335Steve had messaged me, and it took me a moment to respond since I was distracted
234336by making those last minute changes to the rebuilt demo. For the first time, I
235337finally met my friend Steve, who is MG-Zero at ZFGC. Many decades of shitposting
···238340chill.
239341240342We made it to the hotel room, and I plopped on the bed and busted
241241-out the goods. >: )
343343+out the goods. >\: )
242344243243-### Flashing Game Boy Carts
345345+{
346346+quality="70"
347347+width="500"
348348+height="500"
349349+class="size-64"
350350+alt="Flashing Game Boy Carts with my best bud MG-Zero"
351351+loading="lazy"
352352+:placeholder="512"
353353+}
244354245355Because of missing some of the object data, I decided
246356to scrap Kikori Forest, the Great Deku Tree, and just make a simple
247357single room for the rick roll. After fiddling with the scene script,
248358a ROM flashing extravaganza happened! haha
249359250250-{
251251-fit="cover"
252252-quality="90"
360360+Sadly the GBA SP I had was somewhat faulty with the audio, which made
361361+verifying the carts a bit difficult, but we printed everything.
362362+363363+### Don Patch
364364+365365+[Don Patch](https://www.instagram.com/donpatchthecarrot/?hl=en){target="\_blank"}.
366366+That is all.
367367+368368+{
369369+quality="70"
253370width="500"
254371height="500"
255372class="size-64"
256256-alt="Day 1 in the food court"
373373+alt="Don Patch"
257374loading="lazy"
375375+:placeholder="512"
258376}
259377260260-## Unleashing Rick Astley onto MAGFest
378378+### Unleashing Rick Astley onto MAGFest (Release time!)
261379262262-To describe the rick roll, essentially just imagine a legitimate
263263-startup sequence that hits you with an 8-bit rendering of the raw
264264-waveforms of Rick Astley's "Never Gonna Give You Up". Haha, with
265265-you being able to control Link in a tiny room. If you walk up
266266-to the top right corner, you can see a credits roll!
380380+We left for the convention center with some cartridges in hand. I had come to
381381+MAGFest with a total of 14 carts, with 5 reserved for friends. Steve also
382382+created a line of stickers to go along with the carts, so we distributed both
383383+in tandem. After leaving a few carts, we noticed that they did not
384384+last long on the floor, so we made a game out of guessing how long they would last!
385385+The rest was then handed out.
267386268268-TODO: Finish this section
387387+{
388388+quality="70"
389389+width="500"
390390+height="500"
391391+class="size-64"
392392+alt="OOT2D Rick Roll Zelda Cartridge"
393393+loading="lazy"
394394+:placeholder="512"
395395+}
269396270270-### Video and Source Code Release
397397+gm112 and MG-Zero present to you: Rick Astley!
271398272272-After flying back from MAGFest, it was time for publishing everything!
399399+Now that I'm home, it was time for publishing everything!
273400Due to the limitations of cost, I could not produce very many carts. The
274401compromise was to publish the source code and ROM along with a video, for
275275-all to see and also mess around with themselves. :)
402402+all to see and also mess around with themselves. \: )
403403+404404+## Video, ROM and Source Code
276405277406<!-- markdownlint-disable MD013 -->
278407<iframe src="https://www.youtube-nocookie.com/embed/f6blx_wpCHw?si=kGLdnKn9qdPymGmb" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen class="md:w-full"></iframe>
279408280280-I've also posted this on [archive.org](https://archive.org/details/game_20260114){target="\_blank"}, and naturally the [GitHub repository](https://github.com/ZeldaFanGameCentral/MAGFest-2026-oot2d-rick-roll){target="\_blank"}.
409409+I've also posted this on [archive.org](https://archive.org/details/game_20260114){target="\_blank"},
410410+and naturally the [GitHub repository](https://github.com/ZeldaFanGameCentral/MAGFest-2026-oot2d-rick-roll){target="\_blank"}.
411411+You can use [Web SkyEmu](https://web.skyemu.app/){target="\_blank"} to play the ROM.
281412282282-## Closing Thoughts
413413+### Closing Thoughts
283414284415There were a lot of lessons learned, a lot of fun and memories made along the way. I'm glad I got to
285416celebrate the love of Zelda, OoT2D, ZFGC and friendship! In another timeline, someone showed up to
286417MAGFest 2026 and said, "Hey everyone, behold - Ocarina of Time 2D Demo 4!", followed by world peace
287418and harmony.
419419+It is just incredible to me how a fan project could bring so many people together, and still be
420420+remembered so many years later. Many of us are still friends, still play Zelda, and it reminds me
421421+of how fortunate we are to have such a wonderful community. Even in poking fun at OoT2D, let me be
422422+clear that it is out of love of the project, the idea of it, and the desire to one day see
423423+Ocarina of Time 2D come to life.
424424+Working on the Game Boy was much easier than anticipated, thanks to [GB Studio](https://www.gbstudio.dev/){target="\_blank"}
425425+and the efforts of the gbdev community! I look forward to experimenting some more. Until next time!
288426289427gm112 waz here. And then, he ran off!