As promised on the last interview with JMC47, I’m bringing today the full interview with Guy Perfect, which has quite a bit of a historial regarding his feats. One of the things he’s known for is for being a tech wizard with the Virtual Boy between the homebrew under his belt and writing the “Sacred Tech Scroll” documenting VB’s hardware. Of course, with this amount of knowledge, he’s been known to be working as well on PVB Emulator, his own Virtual Boy emulator which had shown an incredible amount of promising progress and even work on supporting the Link Cable feature which was never used for commercial games (but was used in Homebrew titles), as well as being pitched tobe made for the 3DS as well (to take advantage of 3DS’s stereoscopic 3D feature of course). Recently he has been working as well on figuring out stuff for the Bandai WonderSwan scene.
On the other hand, Guy Perfect also has brought quite a few good gifts for F-Zero fans thanks to his own interest on the games: A quite impressive one is his F-Zero Execution Project track editor, which was released all the way back in 2006 long before the 64DD Expansion Kit version (which had its own track editor integrated) was emulated and playable outside of real hardware. He would also eventually make the “F-Zero GP Legend e+ Complete” patch which restored a lot of previously lost bonus content that was only avaliable on the Japanese version AND if you happened to have the right e+reader cards. Essentially you can have the game’s almost-lost “DLC” of extra tracks and ghosts easily accesible in your game!
Now I actually had used FZEP quite some few times before as I loved F-Zero X and making custom tracks for it, though at the time I was doing that often I also was using the back-then finally emulated 64DD version for ideas, but even then this tool allowed you to download .fzep files and patch them into your ROM (basically add your own tracks, someone’s else or even the included tracks with the editor from some few peeps like Guy Perfect himself, and even text data for the official 64DD tracks which at the time you would only be able to play through this or having a 64DD). However, something even more fascinating which you might know if you had seen Starxxon’s interview (or SM64 Modding History) is that Guy Perfect would figure out the MIO0 model compression format during the development of this tool, which would get shared to Starxxon and eventually would create Toad’s Tool 64. In other words, he made the very first step into bringing SM64 modifications to what it is now (as Starxxon would take the info and run with it).
So basically it was a bit of a coincidence that I wanted to reach out to him to know more about how he figured out the SM64 model compression format for that SM64 Modding topic, and ended up learning more about both FZEP (as I didn’t realize he was the developer of that as well) and his current endeavors on dissecting the Virtual Boy. Now, without any further ado, I hope that you enjoy!
Recently I was doing some research to write an article about the History of Super Mario 64 Modding, as I had interviewed Starxxon (aka VL-Tone) recently and had mentioned the name of “BGNG”, which then saw that was supposed to be you; that and along that search I also happened to stumble with your F-Zero translations; I was able to play through F-Zero Climax thanks to that so I’m glad that you happened to reply so fast (since I didn’t know if it would work or not)
I actually haven’t been directly involved with Super Mario 64. VL-Tone and I were working on N64 projects at the same time, but we didn’t cross the streams.
I had dug up a bit and found that you had cracked the MI0 model format for SM64 and then VL-Tone ran with it lol
It was interesting to check through the old acmlm boards (there’s an archive about that old thread where that was posted)
Yeah, I was working with F-Zero X and found a bunch of files marked with MIO0, so I figured I’d look into it. Mostly images. Well… “files” is a bit generous. It was just data. As I recall, MIO0 was also used in Super Mario 64, so it was useful to get that format sorted out.
In any case, thank you so much for this opportunity; I’m always glad to be able to talk with people as experienced as you!
Alright so first of all, what can you say about yourself?
I fancy myself a reverse engineer. I’m drawn to obscure systems because I like solving the many mysteries that come with the video games that never got their time in the limelight. I’m currently involved in documentation and emulation efforts involving Virtual Boy, Pokémon Mini, and most recently Bandai WonderSwan.
How did you get started at reverse engineering games?[16:38]
Gosh, that was hundreds of years ago. My first exposure was probably Game Genie on the NES, messing with Super Mario Bros. in various ways. I also have memories of a program called MetEdit from around that same time period that provided level editing features for Metroid. I don’t recall the exact sequence of events that led from one thing to another, but I imagine it probably stemmed from that: knowing it’s possible to mod a game. I do recall that my first attempt to crack open F-Zero didn’t go so well…
That’s pretty interesting!
What do you recall when you entered the acmlm board? From what I found, it was one of the main forums where people discussed romhacking
I don’t recall when or how I stumbled into the home of “Rohm Acking”. It started out called Acmlm’s Board then was at some point renamed (I think?) to Jul. For a long time that was my go-to place for modding and hacking discussion, even after Romhacking.net was a thing. Nowadays game communities tend to congregate on Discord, and each community tends to have their own hacking and modding cliques. Sure seems to be a different world now than it was when I started.
This post from June 15 2005 is where your MI0 specification was posted, after which VL-Tone started cracking open SM64 models. You had mentioned that you found that spec because of digging F-Zero X data…I’d love to hear more about that.
I was researching the game data in F-Zero X with the intent of creating a level editor for the game, which I eventually did manage to release. Most of the game’s textures were compressed in the MIO0 format, so to properly generate images for the user during editing, I needed to be able to decode them. If I’m not mistaken (and let’s face it: I’ve been wrong before), the utility I produced was the first level editor for a Nintendo 64 game that was freely available to the general public.
What were your resources to learn and figure out the MI0 compression format for N64 games?
I don’t quite remember the process, but I remember receiving assistance from members of Acmlm’s Board. One person was able to point out that the encoded text data from Super Mario 64 looked a lot like some form of LZ, and that certain bit structures indicated a potential encoding scheme. Through some trial and error I was able to piece together how it was set up.
That’s interesting to know!
I used to mess a lot with this FZEP to make custom FZX tracks years before the 64DD version was emulated, and was the closest way you could get to play those 64DD tracks (albeit with improper AI rubber banding due to that being hardcoded); it was pure magic for me! Hadn’t realized at first that you had made that level editor!
I was a much not-as-accomplished programmer back then. But it gets the job done.
Can you tell me more about how you made this tool?
It was pretty standard fare as far as application development goes. It consisted of many familiar UI controls and conventions that users would be used to, plus a 3D preview so you could see the effects of what you were doing. I made it with Microsoft Visual Basic, since that was still a relevant thing in the pre-.NET days. I wish there was more to say about solving exotic problems or using technical wizardry to get from point A to point B, but the fact of the matter is that it’s really just a run-of-the-mill windowed application at the end of the day.
How was it possible to get the course data/coordinates for the 64DD tracks back then? (they are included with FZEP as text files)
Initially, I enlisted the help of users on an F-Zero forum who had access to the official Expansion Kit. The editor exposes all the numeric properties needed to accurately reproduce the tracks in an editor. Once the disk itself was dumped, I was able to locate the level data within it, which was fortunately in the same format as the levels stored in the cartridge.
That reminds me of some few interesting options packed with FZEP; namely music track options and venues that would be used if the game was booted with EK. How did you get to test these FZEP features when 64DD wasn’t emulated yet? There was an option for using the extra music tracks if the ROM was paired with EK (and I think there were some few extra track options that only worked if it was paired with 64DD, like center pit lanes)
Expansion Kit music was not supported. Official courses that used them had their music substituted with tunes in the cartridge instead. The application’s internal data format did have entries for the Expansion Kit music, but courses couldn’t be patched to ROM using them. The purpose for this was to allow the courses to be represented accurately, even if the destination didn’t have all the needed features.
The short answer is “application supports them for consistency, but cannot patch them to the game”.
This is a thing that I haven’t tested yet, but technically if you patched them to a Japanese ROM and booted it with EK (as this can now be done with PJ64), would these extra features work?
If you place a center pit area into the game and load the modded game with the Expansion Kit, I believe it will function. The application doesn’t have the music identifiers to patch, however, so those won’t work. Come to think of it, the application may refuse to patch center pit areas too as a formality. I don’t remember.
Well, at least its something that I can check later for curiosity. Speaking of curiosity, what gave you the idea for the name “F-Zero Execution Project”?
Within the canon of the game’s narrative, the F-Zero Execution Project was the organization responsible for hosting the F-Zero Grand Prix. I figured it was an appropriate name for the level editor.
Interesting! On the topic of F-Zero X, did you have a hand with the 64DD emulation efforts?
No, I sat on the sidelines and watched that one transpire. I was pleasantly surprised to see 64DD software converted to cartridge format, including F-Zero X Expansion Kit. You can enjoy the full experience with an Everdrive64.
I also was quite amazed when I saw Zoinkity’s port and then proper 64DD emulation came through (I interviewed LuigiBlood about that as well).
F-Zero X Expansion Kit was the first of three F-Zero games to haunt me with bonus content lost to time…
I remember watching videos of EK over and over as well!
Changing the topic a bit, how long it took you to figure out GP Legend (GPL e+) and Climax (story translation)?
The Climax thing was a one-afternoon experiment to see if I could locate the text data, which I did. I never took it any further than that, though, so if there’s a full English translation out there, it wasn’t me.
The “e+ Complete” mod of GP Legend was about two weeks start to finish. That was the second game that haunted me with bonus content lost to time. Someone messaged me out of the blue saying he had the data for the lost “Carddass” e-Reader cards, so I dropped what I was doing and made the mod.
Cool! Now on a more relaxed note, what is your story with the F-Zero games? I can see that you already had an interest in them since a long while; I loved these games since I had F-Zero GX as a kid on Gamecube and then started emulating FZX on PC.
I just like F-Zero. Sure would be nice if they ever made another one.
What did you remember thinking back when VL-Tone extracted the Super Mario 64 models with your MI0 spec and then made Toad’s Tool 64?
I was stoked to learn that someone else was doing Nintendo 64 hacking at the same time I was. For a time we’d arranged to release our level editors on the same day as a sort of joint event, but the Super Mario 64 stuff caught some snags and I didn’t want to unnecessarily delay F-Zero X.
On the note of figuring out models, did you ever extract the car models for F-Zero X (or use that knowledge for anything outside of FZEP)?
I never did any work with the machine models.
I remember that there was a tool that allowed you to create codes and make custom machines (just like the 64DD version did allow you).
Now moving on, what have you been up to recently?
A bit of a mix between Virtual Boy, Pokémon Mini and WonderSwan. Flash cartridge options are a thing now, so I’ve been doing R&D on each system to formalize how they each function. I have lengthy technical documents in the works for each of them that aim to provide all of the pertinent known information for anyone seeking to program for them.
WonderSwan in particular has been picking up speed for some reason. A Discord server popped up for it, a new aftermarket display was just released, and last night I was contacted by a cartridge development crew about doing English translations. An interesting time indeed.
That sounds great! Was there any particular F-Zero X custom track pack/mod/related content? (like a speedrun or WR) that impressed you the most? (F-Zero X Climax, F-Zero X Legends, Uchiha Madao 64DD tracks, etc)
I honestly haven’t been following it. After I released the software I moved onto something else.
What have you seen from Super Mario 64 modding after all these years that has impressed you the most?
I’m afraid I haven’t paid close attention to that either. I’ve heard stories about how mods of the game would traditionally fail when attempting to run them on the hardware, but that newer mods are actually being tested thoroughly.
Yeah, recently there were both tests on real hardware and patches to make older hacks run on N64 as well; pretty interesting stuff.
What did you think when I reached out to you for this interview?
I’m glad you were able to eventually hunt me down! Not really all that well-versed in Super Mario 64, but I’m happy to provide historical context when I can.
By chance, do you happen to have any stories about those early internet days (or when you joined the acmlm board)?
Every site would have this landing page with a big graphic and a link that said “Enter Here”, there would be a “hit counter” that tracks page views, and would usually look like a car odometer. Some real ambitious ones with too many digits., like “You are the 00000031th visitor to my domain”.
If you liked what you saw, you could always “sign the guestbook” before you left. Some of them were kind enough to give you links you could click and escape from the nested frame structure you found yourself in when following links on other sites. If you were on Netscape, you were treated to blinking text. On Internet Explorer, it was scrolling marquees. For broken links to other sites that covered the same general topic, just follow the web ring. The background was some small, repeating graphic, and it wasn’t unusual to be inundated with an unlicensed MIDI reproduction of whatever oldies the person was interested in.
This was a common sight as well:
For a long time, the 88×31 pixel graphic was quite common when linking to other websites. Each site would make a “button” to represent themselves for other websites to use. Every now and again you’d come across some promotional website that required Macromedia Shockwave. Those took a while to load over the phone line.
I remember waiting like an hour downloading a sound file from the Mario Kart 64 website prior to the game’s release. It was like a 10-second clip of the Moo Moo Farm music.
That’s pretty neat; hey that gets me thinking about how it was back when those N64 classics like Mario Kart 64 and F-Zero X weren’t released yet…
The F-Zero X website was the only mention of his name being Douglas Jay Falcon. The Internet Archive did not capture that image. Sure sounds better than Andy Summer like in the cartoon.
Early mainstream internet was a lot of trying to get around people’s font and color choices while attempting to do research. Every month like clockwork America Online would send you a CD in the mail. Once Internet Explorer successfully drove Netscape out of the market, the Mozilla browser (not yet Firefox) popped up with a revolutionary new feature: tabs! Thus was the beginning of the IE6 era, where web development was just the worst.
jQuery and other frameworks got their start around this time in an effort to bring some semblance of consistency to developers across browsers. The industry finally caught up and has been pushing standards conformance for several years by now. Nowadays we have a different problem: developers who rely on jQuery and never learned the standard! Music and videos would be shared in various proprietary formats such as Windows Media Audio and RealVideo. But hey, there was always Winamp.
Some websites were a pain to use because they were designed for 800×600 screen resolution but your monitor only went up to 640×480.
It is really fascinating to hear about this!
Also, you had previously mentioned working on some WonderSwan stuff; how did you get your hand on messing with that?
So a guy in the Virtual Boy community, Kevin Mellott, recently started selling a self-manufactured flash cartridge for the system that he calls HyperFlash 32. It can store multiple games on it, and you can select which one to use on the cartridge itself using little cap touch buttons and an “e-ink” label that changes depending on what game is selected.
He solicited suggestions for what other system he might make an e-ink-equipped flash cartridge for and the dart landed on WonderSwan. At the time, I was trying to talk him into doing Pokémon Mini stuff, but he wasn’t really interested. He pointed me to a2heaven’s DITTO mini product, which was a nice little flash cartridge for that system. I knew he was going to do WonderSwan, so I got on board as well. I ordered a B/W and a Color unit from eBay and Mellott sent me a flash cartridge he’d purchased for it. I’m using that flash cartridge to do these tests.
Unlike Virtual Boy and even Pokémon Mini, WonderSwan is so obscure that it doesn’t have a home base on the internet. Just this little Discord server. And we’ll be making an unofficial fansite before long to give it a home. And really that’s what got me fully on-board. WonderSwan deserves just as much love as this Pokémon-themed Tamagotchi-esque toy that no one’s ever heard of.
Through the reverse engineering of others and an official devkit available at retail called WonderWitch (and its accompanying documentation), we know enough about the system to program it. The CPU is similar enough to an Intel 8086 that development tools for things like C or assembly targeting 8086 can be used for WonderSwan.
Take a look at this: The “Sacred Tech Scroll” is a document I put together over a matter of years, containing everything that is known about the Virtual Boy from a programming perspective. I have similar documents in the works for Pokémon Mini and WonderSwan. I want this information to be available.
Woah…this is quite a lot of information! I remember hearing about the WonderSwan Color the first time because a GBA Digimon game I had heard of before was ported there as well, but the Virtual Boy was always a sort of mythical thing for me as weird as it was.
The guy who did the Nocash line of emulators (No$GBA, No$GMB, etc), Martin Korth, wrote very similar documents for the systems he made emulators for, including NES, SNES, Game Boy, GBA/NDS and even Sony Playstation. The general formatting and presentation of the Sacred Tech Scroll documents was largely inspired by the Nocash docs. For example, here’s the NES document.
That makes me ask about if there was any Virtual Boy homebrew that made use of the supposed Link Cable support the VB had?
One such link cable was actually found! A Virtual Boy devkit went up for auction a few years back and it had an official link cable with it. It’s currently the only known unit out in the wild. Some homebrew does use it, and Mario’s Tennis was modded to re-enable the multiplayer code that was present in the game but deactivated before release.
Since I need to document communications features, I need to do R&D on multiple systems. This means two consoles, two flash cartridges and a link cable. Same story for Pokémon Mini and WonderSwan, although Pokémon Mini has a built-in IR port instead of a place to plug in a cable. I ordered two WonderSwan flash cartridges last week, and they’ll be here whenever USPS stops sucking approximately all the ass.
Well, it is always great to see documentation/emulation efforts like this. Recently had caught up to Near posts with Ares N64 support (which I won’t be able to test since turns out it needs Vulkan GPUs) which is fascinating, and last year I had interviewed a couple of emudevs (including LuigiBlood). It is interesting to learn more about their projects from their own perspective, and also hear about other things from a more grounded side.
I’m knee-deep in a Virtual Boy emulator as well, and have similar plans for the other two systems.
Oh yeah that reminds me that last VB emulator I had used was VBjin. No idea if there are any good alternatives to that at this point…
The best accuracy/performance is going to be Mednafen…at least until I finish the one I’m making. Obviously. (-:
I have to develop it in parallel because of the target platforms I need to support. One side needs to be Java so it can run on… well, all users. And the other in C so it can run on 3DS. I’m putting more emphasis on the Java application because I want good debugging tools. What better way to get what you want than to do it yourself?
Best of luck on that! I haven’t got versed with learning how to program yet but I always had admiration for emudevs because of, you know, making software from entirely different hardware run in my PC as if it was nothing.
If you have any questions, lemme know. I’ve done a full-system Virtual Boy emulator before. This one is round 2. So if you want to pierce the fog of mysticism surrounding the process, I know what’s on the other side, as it were.
Sounds amazing! It was great to be able to talk with you, as well as talking with Starxxon/VL-Tone!
Flash cartridges to me aren’t about pirating games. They’re about learning and creating.
VL-Tone has a lot of information. I’m sure that was a fascinating discussion.
Do you have any special thanks for someone?
No one in particular, but particularly everyone involved in the reverse engineering scene. We’re still getting a lot of new life out of old games all these years later thanks to your work.
Got anything else to add?
Naw, nothing relevant. I could ramble on about lots of other things, but not the history of SM64 hacking. Though I can say that I implemented Bad Apple on Virtual Boy once.
Thank you so much for the chill talk!
That’s what Discord is for!
Thank you for checking this out; if you enjoyed this, you may want to check out the other interviews, and stay tuned for some interesting articles upcoming; specially if you are a emulator enthusiast. If you want to see something specific covered here, please let me know on the comments, and support me by spreading the word! You can also support me through Ko-fi so that I can keep having my plate with something oh man
As I wrote at the end of JMC47’s interview (which at the time of this writing was the one before this), I should be getting back on track on some new interviews as well as finishing SM64 Modding History (someday). Might also try doing some more freeform articles (for example, now that we are getting on the topic of emulation, there are some that I would like to give more focus, as well as talk about some weird experiences I had with emulating some games like Samurai Spirits 64 and Golden Tee Golf), but only time will tell if I will be able to ring enough that bell.
See you next time!