Retro/Grade is part of the Humble Weekly Sale! (And good Neverending Nightmares news)
I know I usually do only one update a week, but I was so excited about the Humble Weekly sale news, I had to share it with you. You can get Retro/Grade, the soundtrack, and 5 other awesome music games for a minimum donation of $6. How cool is that? I have been talking to Humble for a loooonnnggg time about getting Retro/Grade in a bundle, and my persistence paid off. I imagine you are getting sick of hearing about Retro/Grade sales, but this is an exciting one because it helps raise money for charity and is the best value yet. If you don't have the game, soundtrack, or other awesome music games in the bundle, why not check it out?
Anyway, I am not using my kickstarter list for spamming. I promise! I have plenty of cool Neverending Nightmares stuff to share. :) I am pleased to report that Neverending Nightmares will officially support the Mad Catz M.O.J.O with Ouya Everywhere whenever that launches. You may be wondering why I officially support it before we have an ETA on when that will launch. The answer may sound silly to you, but I was literally losing sleep worrying about it.
I don't know if I talk about it much, but I have pretty bad insomnia. Insomnia, OCD, depression, and asthma? Sometimes I feel like it is tough to be me, but I guess I can't complain because I'm happy with my life. Anyway, I've been on a bunch of sleeping medicine for 11 years, and I can't sleep for an entire night without them. If I'm lucky, I can maybe sleep for 1 to 2 hours without medicine, but falling asleep without it is near impossible. I think I've probably taken 5 naps total in the past 3 years... Even with the dose of sleeping medicines I take (which is on the higher side), I rarely get a solid night sleep. I have trouble falling asleep, and if I wake up, I have trouble getting back to sleep. On top of that, I have uneasy dreams most mornings that makes my slumber a lot less restful.
I suspect a lot of it is related to anxiety. Even in the best of times, I still worry… about everything. The one thing I worry the most is work. Even though I am trying not to crunch, I still am probably thinking about work about 30% of the time when I'm not working. If I don't have any activity to distract me from my own thoughts, I think about work about 75% of the time. Lying down to "sleep" is really when my mind starts racing about work and all the things I have to do.
That being said, why is getting the game running on the M.O.J.O., which has more powerful hardware than the Ouya, worrisome to me? For those who aren't well versed in game development, supporting a variety of hardware is challenging. For example, there is someone out there who keeps trying to play the alpha build with a Radeon X1300/X1550 Series. That's a fairly old card, and for whatever reason, one of our shaders fail to link. We have an error system, so I get an email whenever this poor soul tries to run the game notifying me of the issue. I've made that shader optional and created less intensive alternates, and he/she should be able to run the next build with no problem. The reason I point this out is because there are all sorts of weird problems due to differences in video chips.
When they announced Ouya Everywhere, I was excited because I'd love to see the game run on all sorts of different microconsoles, but I was also scared because I didn't know any details or how much work it'd be to get the game running on the Mad Catz M.O.J.O. Finally, after worrying about it for a while, I figured I might as well just buy the darn console and make it work.
Theoretically, going from a Tegra 3 to a Tegra 4 chipset should have been minimal work. Unfortunately, there were a few annoying issues.
1) MOJO has no development USB port. You have to connect using ADB over internet. That wouldn't have been an issue except that we use Nvidia Nsight for Tegra for native Android development (which is the only way to make Android development tolerable in my opinion). It doesn't support debugging over internet, which means we are pretty much stuck with printf debugging. I'm sure this may be Greek (geek?) to many people, but if you know what I am talking about, it's a big frowny face. :(
2) There are no standard controller mappings on Android, so we have to manually add them. On Ouya we support Xbox 360, PS3, Ouya controllers, and now the strangely named C.T.R.L.R., which is what the M.O.J.O. uses. (I'll add PS4 support when I get a chance!) That wasn't too bad, and I actually added support on Ouya before I even got development working on the M.O.J.O. (What is with all these periods? I think I'm going to omit them moving forward)
3) Tegra 4 does not support CSAA. That is the only way to get antialiasing on the Tegra 3. Who would have thought that Tegra 4 would have LOST features? It's probably just as well because pretty much no other hardware supports CSAA, and MSAA is much better. However, it is a bit frustrating because it means games that assume the Ouya's feature set won't just work.
4) I got a shader compilation error on varying mediump vec2 v_blurTexCoords; I honestly have no idea why this would work on Tegra 3 and not Tegra 4. I guess my array was too big, but why could the old hardware handle it? :-/ I made them individual variables, and then it compiled fine. This is for a 15 sample Guassian blur shader that I don't actually use on Ouya at all because it wrecks performance. It looks very pretty on PC, and it'd be a pain to make it PC only due to our custom shader preprocessor pipeline. Maybe they'll be a mobile platform out there that can handle it someday. :-) Honestly, I think it is overkill, but I really like it, so I am keeping it in PC. hahah It's the same thing that choked the poor Radeon X1300, which probably was a bad sign. Now I support 5 and 9 sample gaussian blurs which I use for fallbacks and for the blur of the lighting buffer, which really helps with the shadows.
5) Detecting the difference between a MOJO and an Ouya is not easy. Presently, we are using android.os.Build.HARDWARE, but that might not be the best way. Ouya has said they plan to make this easy, which is good news, but it seems like a nice feature for Android to support in general. I don't know how anyone releases anything on Google Play... Why can't I get the graphics chipset? Clock speed? CPU manufacturer? It'd be nice things to know. On Retro/Grade, I have a big table of presets I made for the top 30 or so GPUs on the Steam hardware survey, so you could hopefully get 60 fps out of the box without fiddling with any settings.
So after spending the time getting it running on MOJO, what are the results? I am pleased to report, we are currently running at 1080p instead of 720p on the MOJO. It runs between 50-60 fps without AA. I'm not sure if I want to turn AA on and clamp it down to 30 or just let it drop frames sometimes. This would be a much easier decision to make if I could vsync on Android, but it internally buffers it, so our clamp to 30 fps on Ouya doesn't seem that smooth because it doesn't perfectly line up to the flips. I don't think there is a way around this, but I complained to Ouya this morning, and one of the engineers said they might modify the Ouya build of Android just for me and make it properly Vsync. AWESOME! Who said you couldn't get anywhere by complaining? hahaha I also complained several times to people from Nvidia about the debugger not working on MOJO, and it sounds like they'll fix that as well. YES!
The game looks significantly better on the MOJO, so I am pleased to give gamers an option to get an even better Neverending Nightmares experience on microconsoles. I am really excited for the Ouya 2. In my opinion, Ouya is a great company because they really listen to feedback (and I gave them a huge list of Ouya 2 features I wanted), so I think they'll put together an awesome new console. Unfortunately, I don't have any secret info to share other than they said an Ouya 2 is definitely happening in an email sent to all registered developers.
Anyway, if you are at GDC, please stop by the Ouya booth tomorrow for free hugs and high fives! I've met several backers so far, and I'd love to meet you all if possible. :) I'll have my GDC recap report on Monday. There is still one day left! :-D