Protonaut has gotten universal praise on one thing, and one thing only: Shooting.

Protonaut has gotten universal praise on one thing, and one thing only: Shooting.

Protonaut seriously needs a tutorial overhaul, and I’ve been thinking about how to best accomplish this. I originally envisioned putting “signposts” in the game, with static text on them – then the tutorial would be one big level with a lot of help along the way.
It’s been nearly a month since launch, and it’s time for a retrospective on Protonaut!


That there is a delicious pie chart of where people left my game for good, their IP address never to grace my website again. 45% of my visitors were lost completely before even loading a level. I then proceeded to lose around 20% of my traffic at each stop in the tutorial, to the point where less than 1% of total traffic finished the tutorial in it’s entirety.
Sorry this one is unlabelled, but it is how many times each level was played – and essentially goes in order around the wheel – Tutorial 1, tutorial 2, tutorial 3, tutorial 4, etc…Yes, that’s right. I’m seeing a THREE PERCENT CONVERSION RATE! *balloons fall from ceiling, cue dance music*
That’s right, after months of hard work Protonaut is finally LIVE!
Protonaut is on-schedule for release later today, likely sometime around midnight PST. Still waiting on some music/sound effects, and we have some shuffling of levels to do in the Trials, but otherwise the game is gold.
I attended PAX (The Penny Arcade Gaming Exhibition, aka PAGE; or at least it should be) this last weekend for the first time. People seemed to get so excited about it that I had quite high hopes.
The typical meet-the-developer experience is to stand in line for 45 minutes and get spoken at with a megaphone. The words are usually empty; the standard press-fare you get around games. Everyone sounds like a talking press-release. Then you get a t-shirt for your patience.
I attended GDC, where I could (and did!) talk to some developers for over 30 minutes. Some even went with me out to lunch for for a beer. There was never a line.I really don’t know where this whole “I got it first” mentality comes in. I’m not the kind of guy (14-year-old?) who runs to his friends and says “HAHA I PLAYED xyz BEFORE YOU!” and my friends get genuinely jealous. I’m a patient fellow; I wait until TV series are cancelled before watching them, for example.
Contrast this with GDC, where you get to play early builds of games that companies haven’t even decided on release yet; prototypes; exploratory gameplay visions… It’s quite exciting.And I’m one of those guys that rolls my eyes at reviewers saying racing games makes them queasy. I’m pretty robust in that department.
GDC’s version was Sony’s booth. They had a new TV, where they essentially doubled the pixels. Yep, you have to essentially buy two TVs to get this to work. Half the pixels on screen show left-eye information, and the other half show right-eye information. You get the full 28-FPS experience from your television set, which means no flicker, no headaches, and more information. Since the left/right channels are permanently polarized, you can use any standard cross-polarized pair of glasses – no batteries, no tether. Technically speaking you can also get 2xHD resolution in 2D as well. Obviously expensive though – new TVs for everyone!Someone went up to the mic and asked the PAX10 panel if Microsoft’s XNA framework supported multiplayer. (!!!!)
Another dude asked the PAX10 panel, “Now that you’ve released successful games on your own, have you been able to get good jobs at the bigger gaming studios?”… This one just blew my socks off. I suppose the average gamer dude doesn’t realize that indie games are an escape from the corporate world, not an icebreaker into it. I guess I can’t fault them for that, but all in all it was just a waste of my time.Though technically launch date is somewhere around September 10th, I’ve got so much going on there’s only around 6 days of actual work left for me to finish Protonaut. That means I don’t have a lot of time to post here :)
I had a need for this routine in Protonaut, and Ryan Madsen was gracious enough to pseudo-code this up for me. I then converted it to proper AS3 and to suit protonaut’s needs.
private function dec2bin(dec:uint, digits:Number=6):Array { var result:Array = new Array(); for (var i:Number = 0; i <= digits-1; i++) result[i] = 0; for (var i:Number=digits-1; i >= 0; i--) { if ((dec - Math.pow(2,i)) >= 0) { result[i] = 1; dec -= Math.pow(2,i); } } return result; // results are in reverse order... 1 == 1,0,0,0,0,0 }
My current project, Protonaut, somewhat recently got a “Replay” feature. You can save your victories and share them with your friends! But how to execute the replay feature is really tricky, especially when you only have finite space and bandwidth to dish them out with.
[...] ,,1,1,0,0,0,0,0,0,,2,2,0,0,0,-1,10,0,,3,3,0,0,0,23,0,0 [...]I used comma deliminators and the data is broken down as:,,Array Index, Tick#, jumpstate, firestate, (other keys)…Keystates could be At Rest (0), Just Released (-1), or Held Down (length).
…191J192Q200p201’202’203’204’205W300L…
EDIT: The free code-IDE FlashDevelop does a really good job of doing all these steps for you! I recommend everyone switch to it. :)
One of the things that has been vexing me lately is trying to get a Flash PreLoader working for my games. I’ve tried Googling it, but there are too many like-terms: Flex Builder, FlashBuilder, Flex, CS3, CS4… The all have different methods, and my method is the least googleable: Flex 3.3 SDK, AS3 only.
package {
import flash.display.DisplayObject;import flash.display.MovieClip;import flash.events.Event;import flash.utils.getDefinitionByName;
[SWF(width='800', height='450', backgroundColor='#E5E5E3', frameRate='30')]
public class Preloader extends MovieClip {
public function Preloader() { stop(); addEventListener(Event.ENTER_FRAME, onEnterFrame); }
public function onEnterFrame(event:Event):void { if(framesLoaded == totalFrames) { removeEventListener(Event.ENTER_FRAME, onEnterFrame); nextFrame(); init(); } else { // Show your preloading graphic or animation here } }
private function init():void { var mainClass:Class = Class(getDefinitionByName("Main")); if (mainClass) { var app:Object = new mainClass(); addChild(app as DisplayObject); } }}}
It’s a very simple application. It simply adds an event listener that waits until ALL frames have loaded, and once that happens it will launch your “Main” class. At this point in the game, we still only have a single frame, so it won’t do much. In this case, “Main.as” is my main class for Protonaut and also exists in the root folder of my project. You will have to edit this to match the main class name for your project – use “BobJones” if “BobJones.as” is the primary class in your project.
"mxmlc.exe" -frame two Main -file-specs="Preloader.as"
var app:Object = new mainClass();
var app:Object = new mainClass(this);