The Little Platform That Couldn’t

The following is a step-by-step account of me trying to get my mobile game, Pinball Sundae, released onto the Windows Phone 8 platform. Normally, I don’t really take detailed notes like this; but, for this, I had to. Going into it, I had a certain expectation: my experience deploying the game onto Android and iOS was very pleasant overall; it wasn’t free of frustrations, but I was delighted at how little I had to do to port between platforms. Moving to Windows 8 should be pretty easy, then, I thought.

I could not have been more wrong.

Early on in the process, I could tell that this would be more of an endeavor than I wanted. Not far into it, crap started to hit the fan–to a point where it was almost comical. At some moments, I was willing to bet that Microsoft simply did not want me to bring this game to their platform. So I thought I would save up all of the snags I ran into and share them, so that maybe some other developers following me might have an easier time (or decide not to mess with the platform to begin with).

Super-long bulleted list of fun–GO!!

  • First thing’s first: gotta install Windows 8. “Can’t I make WP8 apps with Windows 7?” Microsoft says “NO!” Good-bye, $200; hello, new OS! (Why exactly are you better than Windows 7 again?)
  • OK. So, I bought Windows 8 on Microsoft’s site, and they said I can upgrade from Windows 7 without formatting my drive. Sweet. So it downloads, and then I have to restart to begin the installation. Fine. But, as the process begins, I get a neat little popup saying “Windows 8 could not be installed“. Uh, what? All I could do was click “OK”. Not OK Microsoft; not OK.
    • After some Googling, I got a few tips: run CCleaner, run msconfig and disable all non-Microsoft startup services, and then run chkdsk. Only after doing all of these things was Windows 8 able to install properly. Yippee.
  • Next up, I tried to bring up the game in Unity. However, in the process of upgrading the OS, the Unity license file was lost (I guess this is in the registry somewhere, which probably got ravaged). I emailed Unity and explained the situation, and they promptly got back to me, allowing me to re-authorize the license. OK; cool.
  • So I got Unity up, got the project loaded–time to build! But, oh–some error popped up in the Unity console. It said something like “do you have the Windows Phone 8 SDK installed?” Damn. No, I didn’t. OK, my bad; I gotta get that.
  • Went to Microsoft’s site to download the WP8 SDK. Ran the installer, the setup window popped up, and then I got a user account control popup asking for permission. Uh…yeah, sure; go ahead Microsoft; install your own SDK.
    • Well… It wasn’t that simple. As soon as I clicked “Yes” to authorize the install, the setup program immediately bombed out, saying it couldn’t install the SDK. Fluke? Alright; maybe I’ll just do it again… Nope. Um… OK… Maybe a system restart is all I need; clear out the RAM/cache/bowels/etc. Still no. Are you kidding me?? (This is where the circus music started playing in my head. Ya da dadadada da da da daaa…)
  • Alright. Ah… Let’s switch gears, I thought. Let me try and get my trusty (and legit) copy of Photoshop CS2 running–I’m probably going to need it for icons or something. Clicked on it, got an admin permission error. Uh… Alright, so run the freaking thing as admin. Jesus. Right-click, “run as administrator”. (Why not do this by default?) And then…
    • New little popup: “extended attributes inconsistent”. Uh. What. (Cue the circus music again.) Thus, we arrive at my second are you kidding me?? moment. What is this? What does this mean? Google! Help!
    • It turns out… What I had to do to fix this, is the following: go into the Windows Sounds menu, in the Program Events list. Under the “Windows” category, there is an event for “Windows User Account Control”–this was the box that popped up asking for permission. I actually had to set the sound to “None” for this event. And then… Well, then it worked: I re-ran the SDK installer, clicked “Yes” on the UAC popup, and BAM! Progress.
      • That was my third are you kidding me?? moment, for those of you keeping track at home. Uh…Microsoft? What, uh… What? Why did a wonky sound event stop me from installing a program? Of course, I didn’t think to do this randomly; I found some suggestion after a fair amount of Googling. Really makes me wonder what kind of paper-clip bubble-gum contraption they have holding this excuse for an OS together.
  • Now this was maybe my favorite part: I thought to re-run the SDK installer. “Maybe the UAC sound error was related to the SDK install error? Could be, right?” I thought at that point, maybe anything was possible. And it was! I was actually able to install the SDK after fixing that “extended attributes inconsistent” error from before. Way to go. Way to fuckin’ go. (Ahem.) Anyway…
  • Now, at the end of the SDK installation, it was, like, “yeah, OK, we installed it, but you may have to enable hardware virtualization to get our shit to actually work.” What. Why? Why have this dependency? (Circus music again.) Why can’t you just work?? So, fine; I Google how to go into the BIOS and enable this feature through some cryptic menu options. *Sigh* OK, not too bad.
  • Opened up Unity again. Tried to build. Compiling scripts…and…WHAM! “System.Collections.Specialized.OrderedDictionary doesn’t exist in target framework.” Huh. Uh…
    • The problem was with NGUI, a Unity plugin I was using for my UI. It just needed to be updated. OK, I guess. So I downloaded the update from the Unity Asset Store and re-imported it.
    • namespace ‘global::’ already contains a definition for ‘UpdateManager’“. *Face palm* Come on! (I started hearing circus music here too.) GOOGLE?? Oh, thanks, Google; all I needed to do was remove a second reference to “UpdateManager” in one of the NGUI scripts. As if I didn’t love NGUI enough… (But that’s another issue entirely.)
  • So! Got the thing compiling; all the scripts were kosher. Rockin’. Now to test on the phone. But… “no Windows Phone 8 device is connected”. Oh. That’s weird. It’s plugged in… I mean, it must be because–YES! Of course!! Windows 8 won’t recognize my Windows Phone 8 via USB! Like, duh! Why would it? (Circus music.)
    • Hey, Google? …Yeah, OK. Right! Why didn’t I think of this myself? I had to install ASUS AI Charger and restart the machine. Now it recognizes the phone. That made total and complete sense, and I’m cool with it. (Are you kidding me?? moments++.)
  • Alright. Almost there, right? Gotta be almost there. So I retry the deployment, but now: Deployment failed. Device is “developer locked”. Developer locked?? What is this, Apple now? ’cause that’s just what I need.
    • Fortunately, aside from being an annoying speed bump, this part wasn’t hard: I just registered the phone for development pretty quickly and kept going.
  • Alright. Start the deployment again… Compiling…processing…packaging…making the Visual Studio project (if you must)… This could be it. This could do it! I THINK WE’RE ABOUT TO Exception: Deployment failed because Windows Phone 8 device is pin locked. Dammit.
    • All this meant was that the screen had timed out and turned off. I didn’t think that would happen since the phone was plugged into the USB port (and my Droid 4’s screen will stay on if it’s charging), but apparently not. Oh well. Just gotta tap the screen every so often to keep it awake…
  • So now that I’ve run into literally every possible snag in this process, nothing can stop me now! Redeploy…and… Are you kidding me?? Oh, it deployed alright. But. Well. The thing was…performance. I was getting about 4 FPS. Granted, this was development mode (and not release), but… Yeah. Uh… So… What? Development mode is not a problem for Android or iOS; what’s going on here?
  • So, of course, I look to the profiler for help. Ran the game through Unity and selected the profiler from the menu, and… Blank. Nothing. No data. Then I tried opening the Visual Studio project and deploying from there–and it took some time making a little performance report (“oh good”, I thought, “this should be helpful”), only to find out that the report only had DLL names (like the overall Unity player) and not actual function calls. I guess whatever Unity makes and sends to VS isn’t symbolicated. That’s cool… Looks like I gotta get the Unity profiler working then. But how…?
    • The solution was to enable the phone’s WI-FI. Are you kidding me?? Why can’t you send the data through the USB?? No; apparently, something about this has to be done wirelessly. I don’t know whose bright idea that was…
    • So, after looking at some profiling data, it looked like the function “WaitForTargetFPS” was taking up most of the frame time. The folks on UnityAnswers said that this function is called to slow down the game so that it hits the target frame rate. Well, my frame rate certainly isn’t supposed to be 4. In fact, I say “Application.targetFrameRate = 60” up in the init code, so… What?
      • Then I tried running in release mode, and… Bam. Smooth. So, is development mode on Windows Phone 8 inherently broken or something? Is it just my game? I wasn’t about to stick around to find out.
  • I figured now would be a good time to create an entry for Pinball Sundae on the Windows Phone 8 developer site. It’s $50 to become a Windows 8 developer. Sure. Fine. Whatever. (What about my yearly Microsoft XNA subscription? I only kept it around because I thought it would carry over to this. Guess not.) So I filled out all of the game data, payment info, screenshots, etc. Getting ready to actually upload the binary now!
  • At this point, I couldn’t help but notice that the icon for Pinball Sundae as seen on the phone still looked like the generic Unity cube. Turns out, one does not simply set a Windows Phone 8 app icon like one does for Android or iOS. No, fuck that. Here, you get to make a series of “flip cycle tiles” for your app. (WTF? Oh, hey, circus music.) Fortunately, the auto-generated VS project had some template ones available that I just replaced with Pinball Sundae-specific ones. I don’t know when/how/why most of those images are used, but, at this point, I couldn’t bring myself to care. (Also, why could I not do this within Unity?)
  • Now, to certify the binary, I had to go through the store test kit. This is series of tests (automated and manual QA) that the app must pass to be submitted. Most of these weren’t so bad (make sure the game doesn’t crash if you get a text message while playing, etc.), though I did have to go back and add a contact email address inside the game itself. I also noticed that Unity’s default settings for some of the textures on WP8 were a little low; I went back to specified higher-quality settings on some of them.
  • OK. Now. Should be all good. Game runs, it’s stable, passed the tests… Now I just need to make it into an “appxupload” file and upload it to the dev site. Now, how do I do this?
    • Apparently I have to locate a “Store” menu is VS. OK, let’s see, um… Hm. It’s not there. No “Store” menu. And it’s not a menu option somewhere else.
    • So I searched and searched and searched for what to do, but to no avail. Are you kidding me?? I reinstalled VS 2012. I reinstalled the WP8 SDK. Still no “Store” menu, and no way to create the appxupload file I needed. So, with that…

Well, that’s it. After all the frustration, lost time, $250, and just plain bullshit, I walk away with nothing. I suppose I could (if I really nag and whine) find a way to keep going, but… For one, I wanted this project out last week, in time for the Unity Windows Phone 8 contest. And, also… I just don’t care that much about WP8. Like, no one has it, and it’s not worth the trouble to bring apps over, at least not now. I thought it was gonna be, like, “oh, hey, WP8! I’m sure Microsoft and Unity worked together smartly and made a great game pipeline as was the case with Android and iOS” but, the fact is, that’s entirely not the case.

Oh well. At least I got my game onto my dad’s phone (it was his phone I was using to test with). Of course, then he goes and says he’d rather play it on the computer anyway.

LOL!

U Betcha

Remember about a month and a half ago when I was wondering what my next project would be? Well, I took all that momentum and sorta just…took it easy actually. I mean, I hung out, lead a normal social life, chilled out, relaxed, maxed all cool… You know how it is.

But that’s over now. Back to work. Because, as of today, I’m an approved Wii U developer for Nintendo! And now, all of those ideas I didn’t manage to cram into Pinball Sundae for mobile (you know, all those ideas I never actually shared on here but do exist–honest) will finally be realized! I mean, if you think about it, the Wii U is a pretty great platform for a game like Pinball Sundae: the tilting and touch features are supported, I can do local multiplayer, and I even have buttons on the thing (should I even want to use them)! And thank God Unity can build to Wii U too–it’s like they’re calling me.

So, yes. This is good. Good things are going to happen. Now excuse me while I go into hiding for the next eight months.

There’s An App For This

Coming in slightly ahead of schedule, Pinball Sundae is finally available on iOS! Chiggity-check it out here.

Yes. Now I can officially say I made an iPhone app! And, judging by the Android sales numbers so far, I’d do well to simply take my bragging rights and go back to my day job. Although I get immense personal satisfaction from the completion of a project (especially one that’s been over a year in the works), it mostly ends there. However, this should be a pretty kick-ass resume piece (I should go update that).

So now I get my nights back! For now, that is. From here, one of two things–well, hm… OK, one of three things will happen: Wait. No; four. One of four things will happen: 1) I begin work on my long-awaited RPG. I think I finally have the means to do it. 2) I go to Nintendo and try to become a registered Wii U developer (Pinball Sundae on a Wii U? U betcha!). 3) I start a new mobile game with a couple of friends of mine who have been talking about wanting to make something (though I’ve been down that road before, so some degree of commitment will be necessary). 4) I do 1 and 3 and the same time.

So that’s it! I also want to thank Unity3D for existing and making it so that I don’t have to write any Objective-C to make an iOS app. (Although, I still have to use XCode… But let me try not to complain too much.) Currently, though, Unity doesn’t support Windows Phone or Blackberry–once it does (I hear they’re in the works), I’ll look into grabbing those licenses. (Here’s to hoping I make enough profit to afford the additional licenses!)

So, if you haven’t yet, go get Pinball Sundae and enjoy!

To Android and Beyond!

Hello! Well, guess what’s finally done? “Breakout Snacks!” No! There’s no Breakout Snacks! There never was any Breakout Snacks! Breakout Snacks is just a myth!

Actually, there was a “Breakout Snacks” but, alas; no more. That’s because I renamed it to “Pinball Sundae”! Yeah, Atari wouldn’t take too kindly to me using the name of their hit arcade game in my own game’s title, so I did a little brainstorming and landed on something better!

ANYWAY! The game is out! For Android devices 4.0 and up, that is. I found that older devices either wouldn’t have enough RAM (the game isn’t a hog anyway) or just wouldn’t install it properly (like on my brother’s phone), so I didn’t want to risk someone plopping down the $0.99 and then having a lousy time. In fact, it should be just the opposite; there’s quite a lot of game there for just a buck! It’s a very good deal!

What’s ironic, though, is that while my main goal for this project was to make a mobile game for myself first and foremost–one that I wouldn’t find annoying like just about every other mobile game–and grab some experience along the way, I can’t actually buy the game myself. Thanks, Obama. (I mean Google. Sorry; reflex.) Yeah; Google won’t let me buy my own game from the store. Now, I could just plop it onto my phone from Unity, but how funny is that, that I can’t actually officially get the game myself…

I should probably link you to the actual thing though. It’s here. You could, of course, also just search “Pinball Sundae” on the Google Play app on your device too. I’ll be talking more about this in the coming days of course, but for now, I’m about to do an up-to-date iOS build (I’m writing this from my Mac right now). Enjoy!!

Are We There Yet?

Hey! It’s been 3 months. Yeah. I know.

Look… I mean, I guess I’m just gonna say what we’re all thinking… I’m not really gonna keep this blog going much anymore. (It’s not like I have lately!) It’s true that I have been hard at work on Breakout Snacks, and that after I’m done, I would theoretically have more time to blog about random crap. But… I don’t know; this method of expression doesn’t really suit me anymore.

Will I ever make another blog post after this one? Yeah, probably. But only for milestones or important things–which is sort of what today is. Today is “Almost Done With Breakout Snacks Day”! I’ve made a separate page of the site revealing a bunch of info about the game, including screenshots and a video. So, see? I’ve been up to stuff!

Now, I’ll probably go away for a while and work on it some more…and then I’ll come back here victorious after I’ve launched! So go check that page out and start anticipating! And check out my Twitter (@mikebelotti) which I find myself updating more frequently now…

Staying the Course

Is today the day I spill it all about my next game?

No!

But I don’t blame you for wondering. It’s weird that I’m this paranoid, but, it is a sorta unique idea, and it is theoretically possible for someone to see it, steal it, and have a team of developers copy it and release it before I do. OR, they release it right about (or slightly after) I do and then do a much better job at marketing it and steal all my thunder. (Note to self: get a marketer…)

Now, do I think I have God’s game gift to man here? No, no. To women? No. Do I think I have something kinda quirky and fun and sort of experimental? No. I mean, yes. Yes; I do. And once I even post a screenshot, the surprise is over!

So just hang back… I’m still on target for an end-of-April release onto Android and iOS (although if the QA phase takes me past that, so be it!), and it’s lookin’ cool. And, actually, there’s probably no harm in telling you that the tentative title is “Breakout Snacks.” So, there; do with that what you will.

Gaining Momentum

Things are happening. I still don’t have anything tangible to post or show, but things are happening. I haven’t been slacking this whole month…

At work, things are even busier. This is OK with me though; I’ve recently been recognized as a senior programmer (I’ve been there over four years now!), and my effort actually is paying off. Whereas last year I was flirting with the idea of pursuing leads with other companies (Zynga, EA, Arena Net, among others), I think I’d rather stay put for the time being. Things are…looking up.

And on the side project front, I’ve set a deadline for the end of April to have the game out on the Google Play store (and, ideally, the iOS App Store, but I know that Apple takes more time reviewing games beforehand). I’m feeling good about this; I’m already at the point where I’m just polishing the game; I have a couple more features to add, but the gameplay is basically solid, save for some minor tweaks and balancing.

I would love to reveal some details about what the game actually is, but, I’m also pretty paranoid. I mean, I’ve shown it to friends, family, coworkers (even my boss), and others (in person), and I’ve gotten some feedback. But I’m not at the point where I’m going to post public details on the Internet just yet… But, like I said, I’m pretty pleased with the progress I’ve made, and I think I’m on schedule to finish it up soon!

I Can’t Even Fill Out One Title

Remember the good ol’ days when my posts had not only a title, but a sub-title? How did I do it? I don’t even know what to start with now as it is.

Is it because so little is going on? Eh, I wouldn’t exactly say that… Hurricane Sandy tore through the area last week, leaving me without power for 4 days. No physical damage though; no floods or anything too bad other than that. But when you’re a video game developer…any amount of time without power is too much! I’m not going to take it for granted again.

Does this mean I’ve been doing more work on side projects? Well, actually, yes–exactly that. Anything to show? Well…my mobile game isn’t done yet, so…no. I mean, if you happen to see me in person, I can show it to you on my phone! But…I’m not going to share it with the Internet just yet. It’s mostly all programmed though; all that’s left is polish–nice art, sound, and frilly little things like particle effects. And, well, making the rest of the levels… And I wanna get this thing off to Android and iOS, preferably at the same time–it’s going to be sort of a challenge, especially with the iOS part, since Apple development sucks ass…but Unity does what it can to soften the blow.

Nothing else really new unfortunately; everything else is just politics as usual. I’m going to try to wrap up my mobile game in…maybe…two or three months? Something like that. I better start thinking up a name…

Pow! Kyaaa!

Hey! So, I know it probably seems like I haven’t been doing much in the way of game development lately… In fact, it probably seems like I haven’t been doing much of anything constructive lately… That’s fair; I haven’t given any evidence that says otherwise. Until NOW:

RPG battle system screenshot

Hah! See? Game stuff! I made that. Made what? A bunch of boring text on a still-more-boring console window? Mike, you’re losing your touch. I weep for the future; specifically, yours. Honestly now… No! No no! This is actually version 0.0000001 of my super RPG game idea! It’s just the battle system so far, but I determined that that would be the best place to start.

I know it doesn’t look like much right now, but there’s a lot going on under the hood. A little while back I posted a picture of a proposed code architecture diagram. I’ve since made some changes to that design and then (or, at the same time) turned that spec into a working implementation. TL/DR: I have a working turn-based RPG battle system here.

Right now I just have some characters in a battle scene (me and my friends Abe and Damon versus a bat, a robot and a wad of gunk) with placeholder AI that makes random decisions based on their available skills. So, no; you can’t play it at the moment… You just watch the exchange of the characters whacking each other with random attacks.

Wow. Random crap going on, and you can’t even control it. Some game, Mike. Way to go. Seriously, who gave this guy a college degree? I know what you’re thinking, but… This is actually very important in a not-very-obvious way. See, I need to make sure that the attacks and their effects–not just damage, but other effects, like flying, regenerating health, shields–actually work correctly, and so far they do. I even have a move that, when used, coats the battle floor with ice, making it hard to do melee attacks. Once I have most of the attack types in, I plan on using this console program to run simulations of battle scenarios to find out things like “are these enemies too hard? Do the heroes fail too often? Or maybe certain attacks are way too potent or weak?” That kind of stuff’s for later, but it’s in my mind.

So yeah; there’s a lot brewing.. I just need to be more diligent with setting aside time to work on this. I do like it; it doesn’t feel like a chore. But it’s a challenge, and after a long day of work, I don’t necessarily like challenges! But if I can drag myself to the gym–something I don’t particularly enjoy–then I can sure find time to wedge this cool stuff in.