The Starxxon Interview
March 5, 2021
NOTE: The following has been brought over from original Wordpress website where I had first published this. As such, some links and references might bring you to it since it is an exact copy, but otherwise everything here should be complete, though formatting might need to be polished a bit more later on. Also, as of writing this, "Part 2 of The History of Super Mario 64 Modding" still doesn't exist yet...but hopefully someday I'll get back to that idea- though no promises until there's something done.
Optional Music Box
Listen to Dire, Dire Docks while you read this if you wish!
Recently I had started working on The History of Super Mario 64 Modding as an article, with the first part covering from 2005 to 2011 with the earliest mods and development of Toad's Tool 64 being published not too long ago. I had managed to interview Starxxon (VL-Tone) and Guy Perfect (BGNG) which were very polite to tell about their story and experiences back then. That said, I had put some quotes from both interviews during the article but I always had intended to publish the full interviews as well...so here we are.
First here's the full interview with Starxxon, the developer of Toad's Tool 64, which happened to be instrumental in more than 10 years of modding with Super Mario 64. He was polite enough to retell his story about how he ended up in such a position, as well as talking about his other past and current projects. Starxxon also was very helpful in keeping his own old material, as screenshots from the earliest instances of Toad's Tool 64 were kept through a Twitter thread he made, as well as his old Youtube videos still being avaliable. On that note, he had published the first Super Mario 64 mod video (and the first SM64 video in Youtube...at all!) where he showed his work with a modified Mario model as Luigi!
On top of that, Starxxon also had been working in some few personal projects, one of them being a voxel conversion of the original Metroid NES game named Metroid Cubed! This is one of his oldest projects (dating as far as 2003) and is currently working in a iteration of this project called Metroid Curved.
Now, without further ado, I hope that you enjoy this interview!
Thank you so much for this opportunity! I was really surprised to find out how much you contributed to this now legendary scene since as far as 2005!
So first of all, can you give a brief introduction of yourself?
Starxxon: I'm someone who was always interested in knowing how things work, who's nostalgic about the technology, toys and games I experienced as I was younger. Since I was born in the 70s, I witnessed the arrival of video games and personal computing, so I enjoy using modern technology to shed light on their origins, or reimagine them!
That's quite fascinating!
What would you say that are your greatest skills?
Starxxon: I think I'm pretty good at visualizing data/ideas structures in my mind while making sense of them, and this applies beyond programming. If someone describes a plan, I can usually quickly tell where it could go wrong! :)
What do you remember when you joined the acmlm board?
Starxxon: I joined around the time that Acmlm was working on the Super Mario Bros 2 Discombulator level editor. It was the first ROM hacking community I joined and I found it very welcoming, though I was mainly lurking at the time. I think my first post was about an online SMB2 level decoder I made with Director that would run in a browser using the Shockwave plug-in.
Pretty nice! Around what time did you get interested at modifying SM64?
Starxxon: Around 2005. June 2005 to be precise!
How did you learn to modify the game in order to make your first "Luigi is real" video back in 2005? Was there any hacking research you used as a reference back then or before you made that video?
Starxxon: Around that time I was in the process of reverse-engineering the polygon and level format for Star Fox and was active on a forum mostly dedicated to game "ROM hacking". Someone (BGNG) had just cracked the compression format for Super Mario 64. Since I had some recent experience decoding Star Fox models, I started digging into the decompressed data, hoping that I could figure out the format and decode the game models. Eventually, with some help from other forum members, I started documenting the different formats and build a decoding tool.
Since I had found where the vertices and colors for Mario were stored, I tried to morph the values so that it resembled Luigi, for the fun of it. Rumors of Luigi being in the game started many years before but all we had were blurry photoshoped images, or Game Genie codes that made Mario green. Self published Internet video was an emerging thing, so I decided to post a short video showing my Luigi mod to a few video sharing websites, including one called "YouTube" (which I thought was a silly name) which just had started a few months before.
What do you remember about back when you uploaded that video (and the feedback it received)? Also, I had researched about it and its fascinating how this actually was the first SM64 video on Youtube ever!
Starxxon: Indeed as far as I know it's the first SM64 video ever published on YouTube! The reaction at the time was certainly interesting! I did present the video like Luigi was really in the game, but I thought it was tongue-in-cheek enough that people would get that it was a mod. But of course I still got a few commenters yelling "Fake!" and pointing out that the HUD icon was still was showing Mario. :)
How did you start working in Toad's Tool 64? I saw that your second video (2006) had hinted a level editor being at the works
Starxxon: At first, I was content with simply decoding SM64 levels and documenting formats along the way. I was happy to be able to fly around the levels and look behind the scenery! Eventually, as the tool I was building started to decode more abstract things like level commands, I added the ability to edit values, which made it more of a level editor. Initially I didn't want the burden of being the guy that would make the first SM64 level editor. I was hoping that someone else would use what had been documented to build a nice open source level editor. But for various reasons it didn't happen back then. As I found new stuff in the game, the decoding/editing tool gradually evolved to the point of being a functional SM64 level editor, so I felt like I had to publish it.
Can remember any dates about when you started working (and then released publically for the first time) TT64?
Starxxon: I started modding SM64 on June 19th 2005, and released Toad's Tool 64 publicly on June 21st 2007.
Alright! How did you feel about the feedback regarding your videos and TT64 back in those days?
Starxxon: Aside from some snark about my Luigis, the reaction was very positive. It was slightly overwhelming at times, I may have suffered from a little "impostor syndrome" because of it! I remember finding hundreds of videos of SM64 mods made with TT64 and even narrated tutorials on how to use it! That always felt a little surreal!
I'm interested about how did you make the Flatworld Battlefield map; looks like you had somehow replaced the geometry with a blank slate which could be filled with objects (or that's what I gathered from that video)
Starxxon: Flatworld Battlefield was an attempt to create a minimal template for new custom level geometry. It was created manually byte by byte from the knowledge I had of the format, and would produce a simple textured square made of 4 vertices. It was documented extensively, with an explanation for each command used in its data. While the object itself could serve as a flat basis for the level, the goal was for other people to create new custom level geometry or tools based on this template.
Forum user Messiaen (aka. Frauber) took the bait and created its own set of custom level objects (platforms, walls etc.) after studying the Flatworld template. He then went to create the first extensive SM64 mod involving entirely new levels, called "Super Mario 64: The Missing Stars", using TT64 and his own set of custom level objects.
I just happened to be thinking about that guy; did you cooperate with him in any hacks or tools? I had seen in a "Toad's Tool 0.6" video that you were working on a rudimentary OBJ importer; however TT64 never shipped with an OBJ importer even after the SKELUX updates (and around that time, frauber made an OBJ importer, which I wondered if you had a hand with or not)
Starxxon: Hah, the elusive version 0.6 of Toad's Tool 64. It was supposed to be the version where I added an OBJ importer. But it never finished, was very buggy and ultimately never released, for a combination of various reasons, including data loss and some real life stuff getting in the way. Messiaen was working on his external OBJ importer around the time I abandoned development on 0.6. I was not directly involved with it, but I may have answered a couple of questions he had. But at that point he was well ahead of me, he didn't need much help!
At this point I wonder if you have still keep contact with the people from the forums that helped you (BGNG and such) or frauber.
Starxxon: I went away from the SM64 hacking community for a few years so I lost contact with many of them, but some have found me on Twitter since!
(BTW last year I made 3 big "visual history" threads about TT64 using most of my archived screenshots)
I'm wondering about how you feel with the edits and tools you made after all these years.
Starxxon: I'm glad I had the chance to be part of the early SM64 modding scene! TT64 was certainly the most complex programming project I had ever attempted and I learned a lot while working on it. I do hope that what I made had a positive impact on the world! A few years ago someone commented that they first used TT64 as a kid and are now working as a level designer for a video game company!
What do you think of the stuff that people made with TT64 back then and today? Or how do you feel about the current state of SM64 mods and the bigger scope they have taken now?
Starxxon: The availability of a decompiled SM64 source certainly changed things a lot. It enables a level of customization to the game that we couldn't dream about 15 years ago. Ultimately, I think new tools will need to be created to be able to edit raw assets from the source using a graphical interface. For now we're in a transition state where some tools are still editing compiled ROM data.
Do you have any particular favorite SM64 hack (or which one has impressed you the most)?
Starxxon: I mentioned Messiaen's Missing Stars hack, which was a milestone, but I was also amazed to see Skelux's multiplayer hack, especially the earlier versions that used my 2008 Luigi model. I didn't think we'd ever see such a thing as a multiplayer SM64 hack!
Just by curiosity, have you ever talked with frauber/Messiaen or Geckojou since 2011?
Starxxon: I haven't had the occasion since then. After retiring from TT64 development I left the SM64 hacking community for a few years, so I lost contact with some of them.
I did try to find Geckojou after tweeting a clip from one of my old video featuring his level model, but I wasn't successful.
Do you have any message for the SM64 modding community?
Starxxon: There is a nearly infinite amount of ways to remix and rethink SM64, find your way, express yourself and remember to have fun!
To change a bit the topic, I saw about your Metroid Cubed project, from the isometric 3D-ified version to the Curved 2020 revival, I'm curious about what got you into developing that, as well as what you learned from it and if you have any further plans for it.
Starxxon: In the late 90s I had a weird dream that I was inside the original NES Zelda game and it was "kind of 3D"! I knew about voxels from seeing a scientific program about medical imaging on TV in the 80s.
To make a 2D NES game into 3D, it was logical to take the 2D pixel grid and extend it into the third dimension, which makes pixels into voxels. My first experiments were with the NES Zelda over world map. I created a custom tool called "The Cubic Sculptor" to assist converting 2D NES tiles into voxel objects.
Around the same time I was working on a Metroid level editor, based on the documentation from SnowBro, who created the original MetEdit. My own editor was never released, but I had all the level and tile data decoded, and already started to build an engine to make Samus run around in the editor.
Metroid Cubed was the result of merging these two projects. Metroid has a lot of unique tiles, and it was fun to "sculpt" them in 3D as their original 2D representation implied a lot of depth and texture. It was initially released in 2003 and ran in browsers using the Shockwave plugin. It was using a fixed isometric view because it was easier to do with pre-rendered voxel tiles, a realtime voxel engine was beyond what I could achieve with the hardware I was running at the time.
After getting faster computers I could eventually add a real time voxel engine, which I did many years ago, but that version was less complete than the original Metroid Cubed, missing most notably the enemies. In more recent years I revisited the project, adding back most of what was missing (like enemies, doors and items), and decided to map the voxel engine on a cylinder.
In late 2018, when I tweeted just "Metroid Cubed." along with a short clip showing the begining of the game, the tweet went viral and I got more than 10,000k views in a few days so it turned out to be quite popular!
So my plans for Metroid Cubed/Curved is to eventually release it in an unfinished state once I fix the most egregious bugs, and it will be released as is. It's based on very old code which was my attempt to recreate the gameplay the best I could, on hardware that could only run it at 10-15 fps. It's not running NES code at all. A lot of the speed and timing is wrong, and there would be a lot of small thing to tweak to make it close to the real game.
Considering that it could get shut down by Nintendo, it would not be worth to invest time to complete it 100%. It will simply be a fun novel way to experiment the game for a few minutes, not something that people will try to do speed runs on! :)
That being said, I've been thinking of taking an open source NES emulator and modify it so it could use the 3D voxel data from Metroid Cubed and display it using a voxel engine.
Fascinating!
I'm a bit curious about your experience with Star Fox, from a rudimentary level editor demo you made years ago, to this video where you show the game from a completely different perspective.
Starxxon: Star Fox is a game that I had great memories of playing in the summer of 1993. Around 2003, having experimented hacking NES games that were mostly already documented, I decided to try to dig into the ROM and hope to discover how the levels and models were stored, and ways to control the camera.
I barely knew anything about 3D modeling and format back then. Eventually I found a list of all objects in the ROM with pointers to polygon data. By looking at the hex data structures I figured out that objects where made of a list of vertices, and another list defining how vertices were connected to create polygons.
At the time I was using Macromedia (Adobe) Director to do most of my projects and recent versions added a nice 3D engine, which enabled me to render the objects much more easily than if I had to write native OpenGL. This served my well for Toad's Tool 64 later.
Once I managed to decode and render the 3D models, I started searching for the level data, and found it by searching object IDs from the object list in the ROM. I wrote a tool that could decode and display the list of level scripts command in a readable way. By making the values and parameters editable, it became a "level editor", but it wouldn't even show a 3D preview of the level.
Star Fox levels work more like a chronological sequence of events, making new objects appear and trigger events as the arwing moves forward. There are loops and conditional branches based on ASM routines embedded in the level script.
Adding a 3D level preview turned out to be more complex than expected, and around that time the Super Mario 64 compression format was cracked by BGNG, and I got absorbed into SM64, using what I learned with Star Fox to progress rapidly in figuring out how levels and polygons were stored in SM64, which lead to the creation of TT64.
More recently I went back and modernized the editor, hoping to make it progress, but I got sidetracked by the idea of making a "randomizer" for Star Fox. I already had access to the list of all level commands in the game, so it was relatively easy to make a tool that would create levels out of a sequence of random commands taken from the game levels.
It was eventually released as "Peppy's Tool - the Star Fox Randomizer". Not sure it qualifies as a proper randomizer, but it can be fun to use regardless. After that I made further advancements in mapping level commands in a more linear way, planning for version 2 of the tool, but it hasn't been released yet.
In the summer of 2020 there was a viral tweet about a SM64 mock-up of what it would look like on an FX chip, which got me interested again in trying to import new geometry in the game. One reason I hadn't done it before is that Star Fox uses BSP trees to sort polygons inside models, and I never managed to encode a BSP tree for a new model that wouldn't result in sorting issues.
In the thread for this FX game mock-up, I had an interesting discussion with the programmers of the original game, like Dylan Cuthbert and Carl Graham, who I had interacted with before, where I asked them more details about the BSP format and the tools they used to encode them.
A couple of weeks later, on July 27th 2020, I managed to import a Star Fox 2 ship model into the original game and posted a short video demonstrating it. I had some weird replies about it, and soon realized that by some coincidence the source code for Star Fox 1/2 had just been leaked on the Internet as part of the "GigaLeak". People though I was using it to make this mod but it wasn't the case! :)
But once I did get the source code, using what I already knew about the game, I was able to quickly make all sorts of hacks that were unthinkable before, including importing unused and new models and changing the camera angle, which is something I wanted to do ever since I started to hack the game! :D
That's quite amazing! Is there anything in particular you are up to nowadays?
Starxxon: I'm juggling with various projects, and I think I prefer it that way. Sometimes I lose motivation to work on something, and I pickup an older unfinished project and make it progress for a while. Lately I've been trying to map the game Alice in Wonderland by Windham's Classics for the C64. It has quite an large map and 250+ different screens/rooms with some interesting design.
Fun fact, some of the CD-I Zelda games used the Alice game engine as its basis!
I'm also thinking of getting back to improve/fix Metroid Curved, we'll see! :)
Just by curiosity, where did you get the "vl_tone" name?
Starxxon: The Casio VL-Tone (model VL-1 to be more precise) is a small portable synth released in 1981 that sounded a lot like a NES and had some features usually found on pro synths, such as an LCD screen, a note sequencer and a programmable ADSR instrument. I got one when I was 10 and it was the first programmable device I've ever owned!
To hear about these is always great to me; while I was not around at the height of arcades and games in the 90s, those technologies still are fascinating to me to hear about to this day...Oh, that makes me think about something: What was the first emulator you ever used?
Starxxon: The first console emulator I was able to run was GrayBox for the Mac if I remember correctly. But previously I had managed to make MAME run on a Mac IIx with a 16mhz 68020 just so I could try to play Bubble Bobble. It ran at 2-5 fps, and it was in greyscale on a TV via a weird hack on the video card that enabled it to output a NTSC signal. It was unplayable, but I was still amazed at being able to see Bubble Bobble, my favorite arcade game ever on my TV at home!
Where did you learn to do all the decoding stuff with games you had done all these years?
Starxxon: My first computer was a Timex Sinclair 1000 (North American ZX81). One of the earliest BASIC program I wrote was PEEKing RAM/ROM values and printing them on screen, trying to understand the data that was stored. I also had a few advanced books that included Z80 assembly. While I did not program in ASM back then, reading these books helped me understand how programs would store and structure their data.
Most of my reverse-engineering was done using very simple methods, mostly by trying to find data structure in ROM data using an hex editor, decode the values using simple programs I wrote and try to separate the data into discrete elements, things like commands and vertices coordinates.
Changing the data and then look what changed in the game, nothing really fancy.
Now I know that this is sort of a side question but do you have any stories from your earliest days on the Internet?
Starxxon: I first got on the Internet around '94, using the Lynx browser though a Telnet connection on a B&W Mac Classic. Lynx is a terminal based Web browser so it was entirely text, though I could download images if I wanted and display them with an external program (such as GIFViewer). So at the time most of what I was looking for was information in text form, like FAQs, video game walkthroughs, or technical documentation.
With only text, a 14.4kbps connection was plenty enough to browse the Web, once I got a faster (and color) computer and could use a proper Web browser with images, it became really slow to load Web pages. I still used often used a text-only browser for many years after that (WannaBe Web Browser) even as I got faster connections because it was so much more responsive and it served as a "reading mode" for text content. When I needed to view a more image heavy Web pages I would switch to Netscape or iCab.
Fascinating! Have you ever dabbled on the territory of emulation development?
Starxxon: I haven't yet. I'm more confortable writing in high-level languages, and those used to be too slow to be used for emulator. But with advancement in computing power and runtime efficiency we now have complex javascript emulators that can run full speed in the browser of a smartphone. With my recent work on Metroid Curved I've been thinking of starting from an open source JS emulator and modifying it to display my Metroid Cubed voxel data for tiles and sprites.
I know that there is a voxel based NES emulator already called 3dNES, but I think my technique of sculpting voxel volumes outward their 16x16x16 grid gives much better results, at least for Metroid. 3dNES is limited at 16x16x16 blocks so my voxel graphics would not fit. So if I ever do something with an emulator, it will be specialized to run the original Metroid in 3D using my voxel graphics.
What did you think when I reached out for this interview?
Starxxon: I was flattered for sure! "Someone wants to interview me? :O"
Do you have any special thanks for someone?
A: I'd like to thank my dad! As a kid, whenever I asked him how things worked, he always tried to explain it to me in the best ways he could!
Do you have anything else to add?
Starxxon: Thank you for giving me the opportunity to tell these stories! <3
Thank you for reading! If you liked this interview, you can check out all the other interviews I have done with other game developers and modders, and of course remember to keep an eye here for Guy Perfect's interview as well :)
Sharing this with others helps me out; and you can lend me a hand through my Ko-fi page as well! Any feedback and ideas are appreciated, so don’t be afraid to drop a message either here or on my Twitter. I'm really looking forward to what I can bring through Part 2 of The History of Super Mario 64 Modding, so until then, stay safe!