On becoming Genya Arikado
I was fourteen years old and I needed a forum handle that no one could connect me with that I could post to programming forums asking for advice with. Having just beaten Castlevania: Aria of Sorrow with the best ending, I chose "Arikado" as my handle. I'm not one for having tons of handles, so I've always stuck with this one throughout anything I ever did online (now I just use my real name for stuff).
Anyways, I was fourteen, I was in eighth grade, and I was a game programmer. Since I was twelve I taught myself C and C++ and had been making text based games. Around the time I was thirteen I graduated into SDL and ALLEGRO and started making games with graphics and sound effects. In so many ways, it was the best time of my life.
I read on Joystiq about Wii hackers and the Homebrew Channel Beta. It blew my fifteen year old mind that there were people who figured out how to run their own code on the Wii. Being able to at least launch a hello world program would be a dream come true for me. I followed the HackMii blog and WiiBrew closely. When the Homebrew Channel was finally released I downloaded every program that was made for it, played them all to death, and then began a month long excursion into discovering how to write my own programs. I learned about things like GCC, GDB, GNU/Linux, data structures, PowerPC, stdlib, the inner workings of computer hardware, application security, and so much more. After reinstalling devkitPPC several times, I was finally able to compile and run a program on my Wii. It was a milestone in my life.
It wasn't soon after that I discovered libwiisprite by chaosteil and I was able to apply my game programming knowledge to creating games on the Wii. I asked a ton of questions in the newly revamped WiiBrew Forums. So many that I was actually quite a nuisance (thanks for bearing with me Muzer, Dykam, Ave, tona, and countless others). It's impossible for me to articulate how much knowledge I gained in just a short period of time. I was in awe of HackMii team and the work being done by others to port popular games and emulators to the Wii. By comparison, I wasn't doing anything for the Wii, but I still felt in awe every single day that I woke up that I was working in such an incredible scene with such exciting software.
Eventually, I got the nerve to release a target shooting game I made called "Wii Shooting Gallery". It was poorly received, but I didn't care. I had built a Wii homebrew application and other people had downloaded and ran it. A few days later I googled it and I was blown away by how many other websites had reported on it. Holy cow! I payed close attention to feedback and I modified Wii Shooting Gallery as commentators suggested. I added new modes and I set the artwork to be loaded externally so that anyone could modify it. I played the final version of the game just before writing this and I was quite surprised that it's a solid fun, five minutes of entertainment. Obviously, I'm biased, but for some reason I remembered it not being much good.
Alongside Wii Shooting Gallery I developed a brick breaker game I called WiiBreaker. A couple of noteworthy things happened during this. First, I wanted to be able to control the paddle with the balance board. There was no balance board support in devkitPPC at the time so I found a hacker named who was working on implementing it, I compiled his libogc patches, and I was able to make some really minor tweaks to it based on what he explained to me about the hardware. Eventually, his code (which I think included my changes) was merged into devkitPPC. It's starting to become ubiquitous with me saying "I was blown away by ...", but I was really blown away that I had made even a minor contribution to a widely used SDK. Wow!
At this point I had a small name for myself on the WiiBrew Forums. I had begun to help more people than I annoyed and I was actually sought out privately by a number of people via IRC for some more consultation and advice. I truly believe that this, right here, right now, was the absolute highlight of my second life as Genya Arikado. I had done some small things, I was recognized by people I didn't know, I actually had some good friends I spoke to a lot, and above all I was having a blast.
Then tona, the only active administrator on the WiiBrew forums, promoted me to being a moderator and then eventually an administrator on the forums. I was a week away from turning sixteen at the time this happened. To be perfectly honest, it really went to my head that I could be regarded as a community voice on the same level as bushing, marcan, and others who were my personal heroes at the time (truthfully, they still are).
The forum moderation never went nearly as well as I had hoped. I learned a few very powerful, valuable lessons:
- You don't have to contribute to everything in your realm of interest, just for the sake of contributing. Try to add to the discussion with new information, not just a rehash of what's obvious (except when appropriate)
- There are real people sitting on the other end of computer screens. Even though it's fun, the Internet is just an abstraction of life, not a game.
- Most importantly: Don't be a dick.
DOP-Mii got started when someone on the WiiBrew forums wanted to patch an IOS (an IOS is essentially like a kernel for the Wii, it has very many of them) to install fakesigned content (content lacking an official signature from Nintendo like custom channels or customized IOS's). However, patching an IOS required loading an IOS with a bug in it and this particular user could only do so if the software loaded an IOS other than the default IOS. So, I modified the program to let you load any IOS available on your Wii. I called the new version of the program DOP-IOS MOD. I didn't know hardly anything about how IOS worked, but DOP-IOS MOD got thousands of downloads in just a few days. I started adding more and more features to DOP-IOS MOD. Some from other programs, some that I developed carefully myself (the bootmii NAND backup was a life saver by the way).
With the frequent updates Nintendo was making to the Wii, it was hard to keep DOP-IOS MOD up to date as I was working through school. I got a ton of community support. One community member, Lunatik, was particularly helpful and soon became an official maintainer of DOP-IOS MOD. Lunatik built a new framework in C++, added more features using the framework, and eventually we both decided to rename the program to DOP-Mii as it no longer shared any real resemblance to the original program (of course, we still accredited the original author).
Only until recently in my life, DOP-Mii was the most competitive piece of software I ever worked on. Every single day there was a new branch of it with a minor change and some clown claiming all of the credit for the code base and refusing to share the source code. Lunatik and I worked our assess off to keep DOP-Mii as up to date as possible meanwhile adding new features to DOP-Mii.
There was one particularly bad clone by WiiWu that was just a WAD Installer added on top of an old version of DOP-IOS MOD (note, NOT the DOP-Mii code base) with no credit whatsoever given to me. This ensued in quite a lot of heated argument from me over at GBATemp which resulted in me getting banned there (for my third time, actually).
I learned some important lessons from this:
- If you have a good idea, people are going to try and steal it. It's as natural as the sunrise ever morning and the sunset every evening.
- Don't take what software people choose to use so seriously. I was passionate about my work being represented in only it's finest form, but I should have realized that if people were dumb enough to use dangerous clones, that I shouldn't bother trying to stop them. After all, it doesn't effect me.
Today, last I checked, while it has a few bugs for some users, DOP-Mii is still pretty solid and works perfectly for most. I think some people have forked and seriously improved it. I have no more desire to ever return to DOP-Mii except to perhaps use the code base as a means to revitalize some of my knowledge.
Porting DeSmuME to Wii was the coolest thing I did as Arikado. Seriously. I did a ton of reading on how software emulation works, and I followed the porting process on a few other projects so I had a good idea of how to do it. It took me over a year, from the time I was sixteen to seventeen, but I was able to port DeSmuME to the Wii and it was amazing. Humongous thanks go to scanff who helped me fix a memory allocation error that was the last bug preventing emulation from occurring.
Let me go in reverse order this time and tell you what I learned from porting DeSmuME to Wii first:
- Never, ever, ever, ever, EVER announce that you are developing or porting something unless you either have a perfect reputation or you already have a prototype. Some of the messages I received while I was porting DeSmuME really upset me at the time. I was only sixteen, and you trolls can be damn effective when you want to.
- When porting something, first compile and mess with it on it's intended platform first. Doing so would have probably saved me a few months of understanding run time errors.
Software emulation is really, really difficult and complex. Porting a software emulator is in many ways just as complex as writing one, especially if you intend to port it well. I think in the end, as it is now, DeSmuME Wii is pretty amazing.
When I started porting it, WinterMute (devkitPRO maintainer) basically told me it couldn't be done, or if it could be done, it would be so slow that it wouldn't be playable. Without drastically changing the emulation core, we were able to get some lightweight Nintendo DS games to run at nearly full speed or even full speed (DS homebrew, tingles balloon flight, NAMCO arcade classics). Some of the heaviest games ran at as much as 20% of full speed.
I am still confident, as I always was, that if the emulation core was drastically rewritten such that CPU emulation dynamically recompiled instructions from ARM to PPC before run time, if the Wii's unique floating point instructions were fully taken advantage of, and if a faster version of our GX renderer were implemented, that there is no reason why most if not all DS games could have been emulated at full speed.
Having said all that, I personally do not have ability nor the desire to do this. In fact, even the famous emulatemii team might not be able to do this.
Immediately off the top of my head though, recompiling the DeSmuME Wii with the latest libogc should speed it up a barely noticeable amount and should fix the sound issues that were caused when a bug was introduced in libogc. Dancingninja has told me he intends to look into this over summer.
Our version of DeSmuME, DeSmuME Wii, was also used as the base for a port of DeSmuME to the Playstation 3. Last I checked over a year ago, it was running games like Yoshi's Island 2 at full speed. This is probably your best bet for a full speed console emulator of the Nintendo DS unless you yourself wish to write one.
Remember that first lesson I learned while working on DeSmuME Wii? Well, yeah. I happened across drk||Raziel on IRC and persuaded him to let me work on NullDCe. I added a full control scheme to the emulator, some minor rendering fixes, and then I was kicked off the project without warning because I was working too slowly. It ran surprisingly decently and drk||Raziel promised me he would have it running at full speed. I have no idea if drk||Raziel will ever release it. I'm not going to be an asshole and release an old version of it though. And I'm certainly not going to share any of the source code out of respect for drk||Raziel. My last build isn't worth playing. Sorry about how this one turned out, Internet.
I was working on a ton of different project on the Wii when I jumped on the opportunity to take on nulldce as well. It was a dumb idea in retrospect.
Heretic, HeXen, and Strife
I don't remember the whole story of how I decided to port these. I was 99% done porting HeXen but having an issue loading WAD files. Endianness at the time was my programming Kryptonite. I posted my HeXen source code and asked for help, a week later Hermes posted a working port of HeXen. Only two days after, feeling slighted by Hermes, I ported Heretic to the Wii. I then went back and finished my HeXen port. Next, I blasted Hermes's ports out of the water by enabling add-on packs to work in my ports, adding a better and full control scheme, adding USB support, and other features. I never did get around to implementing cheats though unlike Hermes did in HeXen.
Shortly after I started working on porting Strife. I got the game to load, but the engine seemed to crash after about a minute. Mr. Peanut who ported Wolfenstein 3D to the Wii gave me a hand but we were both pretty unsuccessful. The code for Strife is up on Google Code still if you ever want to take a look at it.
There's still room for improvement on all three of these projects. I think they would be great for someone bored or someone who wants to really learn about porting to work on.
I mentioned towards the beginning of this post how I had started learning game programming with the ALLEGRO library. When I was working on porting RealityBoy over the to the Wii, I was trying to port over some of ALLEGRO. I was contacted privately by DarkNation who had gotten some of it working in his spare time. Together, we were able to make some stuff work but only very little. I think it would be awesome if someone forked our work and finished it. There are a ton of programs written using ALLEGRO and it would be great to see some of these on the Wii.
WiirtualBoy and Mednafen for Wii
I was contacted by raz0red who had gotten some of Mednafen to run on the Wii so that you could emulate the virtual boy on the Wii. I did some work speeding up the port, but raz0red really did pretty much everything. He deserves, well, all the credit for both WiirtualBoy and Mednafen. I was thrilled to have done some work on both of the projects. raz0red is extremely talented and has been behind a ton of neat projects. It was an honor working with him.
The DOOM port was done by porting the prboom engine to the Wii. It was done long before I ever made DOP-Mii. Toward the end of my Wii programming career, the port had gotten old and had a number of bugs from libogc updates. It was also lacking many widely requested features (USB support, control changes, customization options). I was able to get in touch with the project maintainer and I was able to fix those bugs, add those features, and even get sound working for the first time (with a hand from MrPeanut). Oddly though, I've been repeatedly criticized as "credit whoring" for my participation in the DOOM project. Yes, I've contributed to a lot of things, I have my name in a lot of places, but I don't just put my name on things for the sake of putting my name on things. I apologize though if my contributions to this project were never perfectly clear, feel free to look at the diff record on the repository for more information.
I did two things under the name "Genya Arikado" that I'm quite proud of. The first, was going after someone who was selling my software. I ended up forcing him to get a lawyer and costing him legal fees before he complied with my requests and I dropped my case. It was the most hilarious hing in the world receiving e-mail written in heavy legalese to firstname.lastname@example.org addressed to "Sir Arikado". The second was raising awareness of scams perpetuated by people selling poor GUI development tools like Wii Game Studio. I got bunches of fun threats from my comments I made about them.
If I could go back in time I probably wouldn't have bothered with either incident, even though I'm rather pleased with how they turned out. Carrying on a charade as "Genya Arikado" probably wasn't the best idea I ever had and my have had some ramifications for me had my adversaries been just slightly more intelligent or capable than rocks.
Running newskeen.com and 1ntrusion.com
For awhile I became bothered by the lack of a quality "scene" news site since brakken quit running tehskeen. To some extent, I still am. GBATemp sucks. But I was definitely not fit to report the news. It's extremely time consuming and very mentally draining. I gained a lot of respect for those who do do it. I also, erm, "broke up" with Len from newskeen in a way that wasn't the nicest. I simply had no more desire to participate in the site and Len didn't seem to be able to accept that at the time. If you're reading this, sorry Len. I don't remember all of the details, just that it got a bit ugly. Yet another one of my hot headed hormonal adventures through the process of growing up.
I want to seriously thank anyone who ever sent me money. The money really, really helped me. However, in retrospect, I should have never accepted donations. Writing homebrew is something that should only be done purely for passion. Again, thank you. I don't think I'll ever to repay all of the kindness and generosity I was given through donations.
I found an exploit in Silent Hill Shattered Memories but I wasn't able to completely break the hashing algorithm used to protect it from tampering. Apparently the checksums have checksums. I did a lot of writing on this as I was working on it so I'll be releasing that writing in case anyone finds it useful.
I also found an exploit in Boom Blox. There wasn't any hashing used to protect the savefile from tampering so I was able to edit the name string and create a buffer overflow. The next step would have been to open up an assembler and code in a DOL/ELF loader. Here is a previously unreleased video of this hack at work.
scanff and I got Duke Nukem 3D to play on the Wii. We never finished it. Apparently there's a decent eduke port for the Wii now which is also what ours was based off of. I think I mentioned this publicly a few times so I felt it worth addressing.
Saying goodbye to Genya Arikado
So today, four and a half years since I started writing code for the Wii, I find it appropriate to officially distance myself from my life as Genya Arikado. I haven't touched anything on Wii for six months, and I'd be lieing if I said I was planning on working on anything this summer. I might touch something on the Wii, but I also might not. I'm betting on the latter as I'm currently employed doing web development and mobile app development for Android. Finally, I have much more of a social life than I used to, so it's just really hard to squeeze in time to play on the Wii even though in all honesty I wish I could.
If I ever come back to doing gaming homebrew, I've decided I'll probably do so under a different moniker to avoid any confusion and drama. Maybe I'll change my mind on this, I don't know what the future holds, but I find it unlikely I would use the name Arikado again.
These have been the best four and a half years in my life and I am eternally thankful to everyone I have met during them. I can not express my gratitude no matter how hard I try to find the right words to do so.
I hope this post clears up, well, everything about me ever. If you have any questions, I'll probably browse the comments for about a month or so until shoving off from this identity for good.
Thank you again. Everyone. For everything.