Friday, May 18, 2012

Final Blog Post

This blog post will be both the 200th post and the final blog post I leave here. I apologize for the length and I honestly don't expect anyone to wade through all of this so I'll try to carve it out into sections. The purpose of this is to hopefully explain everything I ever did and put it to rest once and for all. Since I still get more than 60 hits a day on this blog consistently and a message every month asking me questions, I feel this is the most I can give back. It's been an incredible ride as Arikado, and I'm honestly pretty upset to hang up the disguise.

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. 
To everyone who ever put up with a bout of my youthful asshattery on the forums or elsewhere I sincerely apologize (hey WaxyPumpkin72 and z4001500187). The learning process involves making mistakes. In my case, many, many, many mistakes. But I attribute each and every mistake as a reason I was able to evolve into (hopefully) a much better adult. I look at some of the kids on the forums across Anonymous and in other scenes (particularly all the 15 and 16 year old iOS hackers) and sometimes I muse if I was really as big of a jerk as some of them. Usually, I was worse.

DOP-Mii

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, I'd like to say that the DOP-Mii debacle has made me much more mellow in the world of software development. One of my apps on the Android market recently got cloned to a T and I hardly batted an eyelash. I just added more stuff to mine, relished in the fact I had a larger audience, and moved on with my life. It didn't cause me any stress or even remotely upset me. As someone who closely reads many programming blogs and websites, I can certainly affirm we need a lot more level heads in the world. But I now realize that levelheadedness is only achieved through experience.

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.


DeSmuME Wii


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.

NullDCe

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.

 ALLEGRO

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.

DOOM

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.

Social Activism

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 castlevania7689@yahoo.com 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.

Donations

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.

Unreleased Hax

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.

Writing a Savegame Exploit for Wii From Start to Finish

In this post I'm going to go into great detail of writing a savegame exploit for Wii from start to finish.If this does interest you, then by all means please continue reading after the break.

Note that this exploit was never finished, but I'm releasing my notes on it in case anyone might find it useful.

Wednesday, October 19, 2011

WiiMednafen

I just wanted to bring everyone's attention to raz0red's initial release of WiiMednafen : http://wiibrew.org/wiki/WiiMednafen . It's a multi-system emulator for Wii homebrew.

You may recall that Wiirtual Boy was a partial port of Mednafen to Wii which was written 95% by raz0red, optimized by Rypecha (the original author of mednafen) specifically for the Wii and had a few minor contributions made to it by yours truly.

Anyways, I've had nothing to do with WiiMednafen (I was offered the opportunity to work on porting it which I initially took up, but I never did anything since the project began when school resumed for me and I was just way too busy) but I think it's important that Wiirtual Boy fans switch to using WiiMednafen instead of Wiirutal Boy because WiiMednafen brings many new features and improvements to Wiirtual Boy.

Once again, kudos to raz0red for his fantastic work on WiiMednafen.

Wednesday, July 6, 2011

DOP-Mii v16 BETA

A new version of devkitPPC and libogc was released a few days ago. According to the changelog it fixed bugs that Daco and I bitched about relentlessly which broke DOP-Mii and priiloader. This resulted in a lot of rewriting on both our parts (probably for the better though to be honest) to comply with the newer libogc. Unfortunately, DOP-Mii was still not perfect for everyone. I probably get at least one or two messages a week from someone reporting a crash and I usually can't distinguish if it's a rare case not being refused to be handled that exposes a libogc bug which I don't check for or if it's someone incorrectly using DOP-Mii.

Anyways, I'm really overtired so I'll stop blathering. If you can, please try out the BETA .dol linked to at the end of this post. Let me know if it fixes stuff for you, gives you new problems, or if nothing changes for you. Assuming that this fixes stuff (syscheck no longer crashes on my end) for everyone I can probably get rid of most if not all of the code I wrote in to not load certain IOSs with certain patches and then try another beta release ... and if that works then do an official release and then finally get back to adding features to DOP-Mii instead of fixing existing stuff.

As always thanks for your patience on this and for all of the support. I would've given up on this project a long time ago if it weren't for all the awesome people out there.

http://dop-mii.googlecode.com/files/boot.dol

Friday, June 24, 2011

Wiirtual Boy

Nearly a year ago I announced I was going to work on porting the RealityBoy emulator to bring Virtual Boy games to be playable on the Wii. At the time, RealityBoy was the best Virtual Boy emulator as well as being the simplest to port in my opinion. It wasn't going to be easy; RealityBoy was based on the ALLEGRO library and it wasn't written with PowerPC nor big endian architecture in mind.  For the most part it was going to have to be completely rewritten. In order to make my work better benefit the Wii homebrew development community I was able to (with the help of "DarkNation") bang out a simple port of ALLEGRO to Wii. Coupled with this and a lot of reworking on RealityBoy I was able to get emulation going but I was unable to receive any sort of sound or video output. I assumed this was because the ALLEGRO port was still rather incomplete. A lot of work lied ahead of me. And with school, work, and other personal pressures building up I had very little spare time to work on this.

Around this time, the mednafen emulator released a beta build which included virtual boy support. Mednafen contains arguably the most powerful, optimized emulators for each of the platforms it supports. Furthermore, mednafen is based upon SDL and OpenGL, the former of which we have a port for on the Wii and the latter of which can be easily rewritten as GX (the Wii's video hardware API). Ryphecha, the lead developer behind mednafen, actually contacted me personally to let me know. She really wanted me to drop my RealityBoy port and turn to mednafen (which had previously never even been looked at as a possibility to be ported to the Wii by anyone ever). I played with mednafen for a little bit. At the time I was so distracted by so many different things I didn't get very far beyond compiling the emulator on Linux and playing with the source to see how it works and what could be cut out for a port of only the VirtualBoy component to Wii.

Then a month ago, during my last week of finals, a developer named "raz0red" contacted me. Apparently I wasn't the one who had taken an interest in mednafen. raz0red had done what I had sought out to do by using mednafen to get Virtual Boy games running on the Wii. I accepted his offer to join forces and do a proper Virtual Boy emulator for the Wii. My work was mainly done in optimizing the emulated hardware (which, by the way, Ryphecha was infinitely helpful for by answering all my questions and even going so far as to send me some snippets of code). I really think the emulator turned out pretty well. It's not perfect, but it's about as close as we can possibly get.

Take a look:

Working on this emulator was a great experience and it taught me a lot. After a rather long hiatus it was great to finally start making progress with Wii homebrew software development again. This reminds me that I need to thank everyone for putting up with my "off and on" sprees of development and for supporting me through all of it.

If you haven't yet already, you can grab Wiirtual Boy here.

I've got more plans for this summer. I've had an infinitely popular shooter ported and running on Wii since October that I need to finally finish. I've also been toying with the idea of porting another part or all of mednafen to Wii (for fun, I have emulation of something else in it mostly working). Not to mention I have several old projects that need to be cleaned up and finished. As always, I'll keep my blog updated to the latest.

Sunday, March 27, 2011

3DS Get


I've had it for about two hours now. Initial impressions: 3D effect is not gimmicky and does not become less noticeable as the time you spend with a game wears on. I've yet to be given a head ache. Face Raiders is hilarious. Pilot Wings (the only game I purchased) is pretty "meh" so far.  No data manager yet? No internet browser yet? Disappointing :( Digging the new stylus. AR Cards are incredible, looking forward to seeing more in the future. Mii QR codes seem to hold a lot of redundant data.

Regarding a hacking "scene": Nothing too interesting yet. But if you're a dev you may find it worthwhile to pop into #3dsdev on EFNET.