Merry Multiplatform-mas!

It’s been a while since I wrote anything heavily technical, so here comes some words to fix that!  Black Annex is going to launch for Windows, MacOS and Linux simultaneously now, thanks to some large amounts of progress I’ve made lately.

Let’s start by talking a little about how I make Black Annex.

Black Annex is written in BASIC, it’s almost pure QBASIC, but to make it work on >16bit operating systems, it’s translated to C at compile-time, links SDL for its interface work, and then compiles using GCC. This was, originally, handled by an off-the-shelf product called QB64. It worked really well at first, but I started to find bugs in QB64 as I started to push for higher framerates, modern features (Steam Overlay Support) and slightly unusual input methods (relative mouse movement, for one). QB64 really broke down at a few key points, and I knew I would have to fork my own version of it and change a lot of it to make it work. I know almost zero about programming in C, so the scope of doing this was very scary.

This was the reason I decided to focus on Windows first, and then worry about a custom compiler for Black Annex for MacOS and Linux post-release. Programming in C is scary enough for me, but targeting operating systems that I’ve never worked with would also make the job even bigger.

So, it was obvious that I’d need to use a custom fork of QB64 to compile Black Annex, but I wanted to make sure that the off-the-shelf version of QB64 would still compile it. I wan’t to make sure the game would “work” to some degree if people didn’t have access to my compiler, only the game source.

The first thing I wanted to change about the compiler was the way that the PAUSE key, and the ALT+ENTER keys worked. The PAUSE key, in QBASIC, makes the entire program execution just pause. This really messed with my delta-timing in-game, and I wanted to just disable it so I can control game pausing myself. ALT+ENTER toggles full-screen modes, which crashes the game if you do it while the game is loading in sprite sheets. I wanted to just completely disable that and make a menu option for full-screen.

Changing those two options would be my first adventure in the C source of QB64. QBASIC 4.5 for DOS is basically this library file called qb.lib, which contains all the information for translating your BASIC code into DOS interrupts and such. QB64 works the same, with a file called qbx.lib. All the changes I wanted to make live in a file called qbxlib.cpp, which I can modify, recompile QB64, and then recompile Black Annex to use the new libraries.

I spent many hours exploring qbxlib.cpp, it’s a big file and it’s really messy. There’s no tab-spacing or anything, it’s just a massive flat text document. I tried to get Sublime Text to do the “Auto Spacing” on it to make it a bit more readable, but it didn’t have an amazing effect. I navigated about and found some parts where keyboard input is handled and disabled the ALT+ENTER and PAUSE key behaviors. With that done, I left it at that. That was the only thing I really needed to do at that time.

Six months passed, and I found a bug. The first major change I had to make to QB64 was the way mouse movement is handled.

The bug wasn’t in QB64, or Black Annex, the bug is in SDL 1.2 (or, some would argue, Windows). QB64 uses SDL for keyboard and mouse input. SDL has a bug involving relative mouse movement. When using relative mouse movement with SDL, you’ll typically enable a flag called SDL_GRAB, which forces the mouse cursor to stay inside the program window. The bug is as follows: When you enable SDL_GRAB, then begin holding a key on your keyboard, the mouse movements reported by SDL will skip a few messages, resulting in pulses of “lag” in the mouse movement. Release a key and the issue goes away. Hold two keys and the issue returns, release one key (while still holding another) and the issue goes away. If you disable SDL_GRAB, the issue does not appear at all.

The issue appears because SDL_GRAB works by constantly warping the mouse to the center of the window after reporting mouse movements. It does this warp as fast as it possibly can. Windows can only record so many messages about inputs, and while holding a key, moving the mouse, and warping the mouse, information gets lost (or SDL doesn’t read the messages fast enough, I am not sure).

I was completely unable to fix this issue inside my BASIC code, I had to go back to qbxlib.cpp and write some hacks into the keyboard/mouse handlers there. I tried so many things, sending fake KEYUP messages to SDL, sending fake KEYUP messages to the windows even queue, and all sorts of terribly ugly hacks. Disabling SDL_GRAB and just constantly using SDL_Warp to warp the mouse myself. Using the Windows API to warp the mouse. None of these worked. The issue always returned.

In the end, I had to disable SDL_GRAB, and every time the mouse reaches past the inner 25% of the program window, warp it back to the center myself. This much slower warping (as opposed to warping constantly as fast as possible) made the issue go away. This was about one week’s work, between learning C, learning how to handle events in Windows and SDL, and actually coming up with a solution.

With this work done, I remembered the main roadblock I had originally encountered with the MacOS and Linux builds of Black Annex. Every time you moved the mouse, the entire game would just lock-up. Execution would resume as soon as you stopped moving the mouse. In the past week, I’d learned a lot about how mouse movement works in QB64, and I was confident that maybe I could actually make some headway in the Linux and MacOS forks of QB64 I had planned.

But, I had something else I’d rather work on with my new knowledge of C and the qbxlib.cpp file. I wanted to get the Steam overlay working. The Steam overlay only works if you game renders using OpenGL and DirectX, but QB64 just uses software “Surfaces”, so it was out of the question. I had been talking to Simon Roth a little bit about my issues with mouse movement earlier, and I mentioned the Steam Overlay roadblock. He said to me: “You can just render an SDL surface to an OpenGL texture, that’s what I did with VVVVVV”.

I understood the theory of what he was talking about, but I had zero concept of how to actually do what he was saying. The second major change I had to make to QB64 was the way SDL surfaces end up on your PC screen.

Googling “Render SDL surface to OpenGL texture” comes up with lots of results, and I had to spend a lot of time reading about what these people were doing, and how to make it work. It wasn’t too long because I had completely broken QB64, and ended up with it always just outputting a square window with an OpenGL-rendered triangle on it. Black Annex would be running in the background; you should still hear the music, but the rendering was just an OpenGL loop thingie now.

With loads of help from the goons in #sagamedev, I got the SDL surface that normally appears on-screen in QB64 to instead render to an OpenGL texture in a quad on-screen instead. Black Annex launched via Steam, and the Steam Overlay appeared. I had to do some work as far as communicating to OpenGL what resultions to use versus the size of the SDL surface I had initialized, so I hijacked QBASIC’s “OCT$” function (who even uses that, anyway). By using an existing function, I could ensure my code would still compile using an off-the-shelf compiler, but if OCT$ returned some very specific results, Black Annex would know that OpenGL was available and switch to using that instead. I changed the code for OCT$ in qbxlib.cpp so that it would always return a blank string of 22 spaces no matter what you sent to it, and then it would begin a sequence of initializing OpenGL. Making a call to OCT$ would first turn OpenGL on, then you need to send the width of your screen to OCT$, then the height of the screen. It looks funny to see these unexplained calls to OCT$ in the code for Black Annex, but there’s comments explaining what they do.

So I’d ended up with a build of QB64 that’s very different than the off-the-shelf version, and also supports OpenGL scaling, instead of the very slow scaling method I had used previously. Full-screen Black Annex is a lot faster now.

So next I turned to Linux with my new knowledge of how all this stuff works. I figured “I can probably get Linux working”. I installed Ubuntu on a Dell XPS17 I have spare (it’s not mine, I borrowed it for exhibiting at PAX). The XPS17 has an Optimus video card, so it took two instances of “Whoops, I broke everything, format” for me to get into Ubuntu (I don’t know anything about Linux so it was easy for me to break stuff).

I installed the vanilla QB64 onto my Ubuntu computer and compiled Black Annex. As it had always done, it crashed as soon as you moved the mouse. I jumped straight into the qbxlib_lnx.cpp file and got to work on finding what the hell the mouse was doing that made everything crash. It was a straight-up bug. The fellow who made QB64 must have just never tested relative mouse movement on Linux, because it just had a line that was telling program execution to literally pause whenever the mouse moved. I have no idea what the point of it was meant to be, so I just commented it out. Blam, Black Annex worked on Linux. I don’t fully understand Linux, so I’m not 100% sure how to deploy the game (it has these SDL dependencies), but with the game working, I ported all my OpenGL code over to the Linux libraries and I had Steam Overlay working on Black Annex in Ubuntu. The entire Linux effort took a single afternoon. It was an amazing result.

But then there’s Apple.

I have a really bad time trying to use MacOS. I get frustrated and fumble around and can’t find folders and get confused and end up installing Windows 8 on my iMac and breathe a sigh of relief. That is my relationship with MacOS up to this point. I recall the issues that I had with Black Annex on MacOS.

Firstly, there was the mouse issue, the same as Linux, game would crash the moment you moved the mouse. Then there was the ugly-as-hell terminal that would also run alongside the game reporting some kind of errors or something the whole time the game ran. Then there was this stupid .command file you had to run to actually start the game so that the working-directory would change before running the game so that it could find the SDL framework in its subdirectory. All these issues compounded with that fact that I struggle massively with MacOS made this seem like the scariest endeavor.

So I installed vanilla QB64 on MacOS and compiled Black Annex. It was exactly as I described. I quickly fixed the mouse issue, it was the same bug that had been in the Linux build, so the game worked at this point, but this horrible terminal window and the .command file you needed to use to start it was really ugly.

The reason it had this .command file was because all the SDL framework lives in a subfolder next to Black Annex called “common”, but in MacOS, when you run an executable (unlike in Windows), the program considers ./ to be the hard disk root, as opposed to the executable program’s folder. So when Black Annex looks for ./common, it wouldn’t find them. This .command file performs as chdir to the executable’s folder, and then launches the game so it can find all of its frameworks. I Googled the issue.

I found this program called otool, which you can use to find a list of every framework your executable relies on, and where it expects to find it on the hard disk. As expected, Black Annex was spending a lot of time searching for ./common. A little more searching and I found a program called “install_name_tool” which lets you change the URLs that your program expects to find its dependencies at. In fact, you can use “@executable” to direct these changes to areas on the hard disk relative to where the executable is located! So I wrote a little .command file of my own to change all the dependencies on an executable after it’s been complied by QB64, so the .command file wasn’t needed anymore.

Well, this worked all well-and-good for the dependencies, but what about the actual game content? It lives in a folder called “campaign” next to the Black Annex executable, and there’s no way in QBASIC for me to say CHDIR(“@executable”) or anything like that. I had to go back into qbxlib.cpp and perform a chdir in there by discovering the executable URL manually. This was a real fuckaround, with a lot of conflicting information as to whether it was even possible outside of ObjectiveC. Without delving into actual source code, I eventually found someone who had written a few lines of code to do what I needed, and worked it into my own uses.

So Black Annex would work now without a .command file to start it, the last thing was just this ugly terminal window that always insisted on being there while the game ran. It was just reporting “Warnings” constantly from the C source of Black Annex (which I never touch, considering I deal in the BASIC side of it only), so I wasn’t interested in fixing all the warnings hoping the terminal might go away if I did.

Well, I got distracted by something else…

I wanted to make a .app bundle for Black Annex. You know how on MacOS games are usually just these .app folder things that you just double-click on and the game runs? Well, I packaged up Black Annex into one of those and the terminal window I was arguing with just disappeared completely! I guess it’s just some magical thing where .app bundles just assume you’re not interested in debugging your software and hide that stuff.

I had to make one last change to libqbx.cpp’s new chdir code so that it would change directory to one inside the .app bundle and still find everything, but with that done, Black Annex would launch happily!

I sent the .app bundle to a friend who also has a Mac to test it out. He replied: “It says I need to install x11″. What the fuck is that? I have no idea what this means. It’s something to do with making Linux stuff work on MacOS. But Black Annex just uses SDL for everything and that works on Mac. Why is it using this x11 thing?

I went back to otool and checked the dependancies and saw this “x11″ thing in the list, it was loading something called “freetype”. I guess the default font that QBASIC uses is emulated in QB64 using this stuff. I don’t even use that font, I have my own text renderer I built for Black Annex. Sometimes I use “PRINT” while debugging, but I don’t plan on doing any actual QBASIC development on MacOS. So I went through libqbx.cpp, commented out every line that made reference to “TTF” font stuff, and remove every reference to SDL_TTF in the compilation process, and I was done.

I haven’t ported the OpenGL stuff to MacOS yet, but I now have Black Annex deployable on Windows, Mac and Linux. I still need to re-visit the Linux pipeline to make sure I’m not requiring the user to jump through unrealistic hoops in regards to dependencies, but the major work is done.

Black Annex will launch on all three platforms simultaneously.

Annexation

At certain times, extra rooms are added to Black Annex during game-play. I actually cut this from the design doc about six months ago, but I was finally able to add it back in by piggy-backing on the system I build for spawning in enemies. It works in a much more complex way than the enemy spawn-in. With enemy spawn, there’s just an AI entity that’s invisible until it hears someone call for help.

When creating a new room, the clipping plane needs to be dramatically modified, and the zBuffer needs to be rebuilt as the room is spawning-in as well (the zBuffer typically only considers walls and static objects once when the level loads, and then never again because they don’t change.). There’s also the issue of “joining” tiles needing to appear to connect old rooms to the new ones, so certain wall tiles need to “listen” for a spawning room, and switch to a different type to connect to the new room.

In the video below, see how the new room actually “connects” to the old room, and a new window appears in one of the offices which wasn’t there before.

Let’s Distribute!

It’s now been a year since I first showed Black Annex (way before the game had been revealed publicly) to a distributor. I’ve spent the last year contacting distributors, getting to know them, reading contracts, researching them, and preparing a product for them. I’ve managed to get my head around *most* of the distributors that I have decided to launch with, and I thought I’d write a few words about each of them (except Steam because I’ve covered that well and enough already).

Hopefully you find some of this helpful in your endeavors.

GOG.com

gog header

Who Are They?: Some people call them “Gee Oh Gee”, I call them “Gohg Cohm”. I can’t remember which is correct. GOGcom are the biggest online digital distribution portal beneath Steam. They’re also a lot more exclusive, and have a much more targeted demographic. There’s no unified way to just put a game on to their service. Games on GOGcom need to appeal to the GOGcom audience, which does not exactly consist mainstream gamers. GOGcom used to be called “Good Old Games”, and build up a userbase of people coming to buy classic PC games repackaged and patched-up for modern PCs. This remains a huge part of their business still today, but they also welcome many new titles which appeal to a similar demographic. Retro City Rampage and Hotline Miami are obviously fantastic fits for their service, where-as Call of Duty or Street Fighter IV might not be so much.

I once said in an interview “Getting on Steam [via greenlight] means you won a popularity contest, getting on GOGcom means you made a good game.”.

Another important thing to note is GOGcom’s distribution model. They will not sell your game if it has any DRM, they won’t allow you to use your own installer, and you can’t use an icon of your choice for your game’s executable. All GOGcom games use an installer that has a couple of ads for GOGcom in it, and their games all use icons which feature art from the game in a little circle (at least as time of writing, it’s changed once before). I personally have no issue with any of these things, but some people might, I guess. Purchasers of your game can re-download the game as many times as they like by logging into their account on GOGcom, and they receive an installer which has zero DRM in the installation process.

What Will They Sell?: So, while GOGcom is an incredibly important player in digital distribution, there are some games that they will reject instantly, with fairly quick prejudice without even playing the game based on their initial impressions. You might need to accept that your game might never be a fit for their service.

They’ll sell finished games for Windows and Mac. No Linux and no Alpha funding/early access stuff. They don’t do demos, either.

Submitting Your Game: Back when I first contacted GOGcom, there was a tiny form you could use to email the team, and you’d just send it to “Business Enquiries” and tell them you were making a game. Eventually it would get into the right hands. Now, there’s a slightly more formal page to use at http://www.gog.com/indie but it still just shoots an email to the people there and they’ll take a brief look at what you’re sending in. You’ll likely end up engaging in a dialogue with one of the business development people there after a short wait.

What to Submit: GOGcom very specifically advise you’re able to provide them with the following things before they’ll look at your game. Expected release date and price, a trailer or some game-play videos of the game, a build of the game for evaluation.

The evaluation build would ideally have 2-3 hours worth of playable content, and be mostly feature-complete. They’re obviously fine with missing features and lots of bugs, but they want to be able to sit down and get a really good idea of what the game is like before agreeing to anything.

Humble Store

humble header

Who Are They?: You probably know Humble for their “Humble Bundles”, which began with the DRM free “Humble Indie Bundle” and have since branched out into other (DRM inclusive) bundles, weekly sales, and their “Humble Store” and “Humble Widget” platform. If you’re planning on selling your game “Direct” (a link on your own website, which you drive traffic to yourself) your best option is to use Humble. They’ll give you a little box you put on your own page called a “Humble Store Widget” which lets people buy your game and download it from their service. Humble will take approximately a 10% cut of your sales in exchange for providing you with hosting and a unified purchasing platform.

For the buyer, it means that they purchase your game once, and can always re-download it from their account at humble’s website. However, they can’t make the initial purchase at Humble’s website, you have to drive the traffic yourself. Humble won’t help you market your game, or put it in front of customers’ eyes. They are your “Direct sales” platform.

What Will They Sell?: It seems like they’ll sell a lot of stuff. They even have a couple of movies on there. They’ll do Beta stuff. Windows, Mac and Linux are all cool, and you can throw in stuff like Soundtracks as well. They’ll let you give-away Steam keys with your games without hesitation, too. If you have an arrangement with other distributors for keys, Humble will let you put those in, too.

Submitting Your Game: Humble Store has a little web-form you need to complete to send them information about your game, it’s fairly informal. The URL to the form doesn’t seem to be something publicly available, so I’m not going to go ahead and post it here in case it’s meant to be a secret, but if you just email them at [email protected] and ask really nicely (I actually had to email three times to get a reply) they’ll link you to the form (It’s not the “Game Submission Form” on their support site, by the way.). You’ll need to actually supply them with some kind of build as part of the submission process. They’re not going to give you a hard time, once you have the form, just wait until your game is ready before you bother submitting.

Amazon

amazon header

Who Are They?: Amazon are some massive online retailer. I bought a Bayonetta guide from them once, I think they’re a lot more popular in the USA than Australia so I don’t have a ton of experience with them from a customer perspective. They hate selling games to anyone outside the USA for some reason (even digital games) so a huge “fuck you, Amazon!” for that one. But other than that, they’re certainly a digital distributor with an “Indie Games” section. As far as scale goes, I’m not sure how many people are turning to Amazon for their digital download needs. I bought the BioShock triple pack there for $19.99 (had to create a fake USA account to do it) and it gave me Steam keys. That is my entire experience buying from them.

What Will They Sell?: Despite my back-handed comments about them, they actually do want to sell indie games, and they will talk to you and be helpful about getting your game on their platform. It looks like they’ll on-sell Steam Keys, which are emailed to buyers when they purchase. Get a load of this, though. You can go to your “Purchase Library” on amazon and just click “Download” to download the game directly from Amazon. This downloads a 1mb Installation file. This installer downloads a .html file from Amazon.com and puts it in a folder on your PC. This .html file has a Steam key in it. I thought that was pretty funny.

They probably actually do provide real downloads for indie games, but I just haven’t bought an indie game from them before, so I wouldn’t know.

Submitting Your Game: Amazon are actively seeking indie game developers, so you might actually get contacted by them if you’re making enough noise on the internet about your game. They’re really easy to talk to and, as I said earlier, they do want to sell your game. If you want to get in touch with them, send an email to [email protected] with the subject line “Bring Me Gamers”. Kinda dumb, but that’s what you do.

Greenman Gaming

gmg header

Who Are They?: Greenman Gaming is a pretty broad distributor. They seem to be, as far as content goes, pretty similar to Steam. They sell basically every type of PC game, they do Early Access/alpha funding, they re-sell keys from other services (almost primarily, actually) as well as running their own download service. There’s nothing particularly amazing about their service in comparison to others, but that’s no reason to pass over them. They have an easy-to-use system and a decent user-base. I’ve only bought my first games from them today just to see how it works and it really just consisted of them emailing my some keys and download instructions. Nothing I purchased was supplied by their own download service, all third-party (I purchased FFXIV and Reus).

What Will They Sell?: They’ll do alpha funding/Early Access, and they’ll sell Steam keys for you, but as far as direct purchases, I think they only do Windows games. I might be missing something, but I couldn’t find any Mac or Linux games on there.

Submitting Your Game: Much like Amazon, Greenman Gaming actively approach developers who are actively promoting their games. If you want to approach them, email Alistair at [email protected]. They’re pretty easy to talk to, and not the fussiest bunch in the world. They won’t really need to play your game before sending you a contract if you’re able to at-least demonstrate a working product to them with an active community around it.

Gamer’s Gate

gamesgate header

 

Who Are They?: Gamer’s Gate have been around for bloody ages. I think Penumbra Requiem was originally launched on there, because I bought that when it first came out on Gamer’s Gate but haven’t been back since (also, don’t buy it, it’s awful). They’re pretty similar to Greenman Gaming in that they just pretty much sell everything from AAA titles down to indies, and they have a piece of software you install on your PC to download the games that you have purchased. I managed to log in to my old account and for some reason I own a game called “Volvo The Game” along side Penumbra Requiem, so I guess that’s good?

What Will They Sell?: They’ve got Mac and PC sections, and it looks like they’ll also sell “Guides”, too. I believe they’ll do Alpha funding as well, as they’ve discussed it with me in brief in the past. They’re not very picky, and they’re happy to deal with indies.

Submitting Your Game: They’re actively approaching developers, so don’t be surprised if they email you out of the blue, but if you want to put something in-front of their face, email [email protected], they’ll want you to just give them the usual stuff like your planned release date, price, info about the game with some screenshots and a video, and a little write-up to help them understand what you’re selling them. Don’t stress over it, they won’t ignore you if you forget to mention something. They’re human beings; they’ll talk to you.

Desura

desura header

 

Who Are They?: Desura are awesome. Put your game on Desura. Just do it. Seriously, though, I left Desura until last because I wanted to book-end this post with my two favorite distributors. One way to think of Desura is that they’re a shop-front that sits on top of IndieDB, kinda. It’s the same account system and mostly the same content database. If you’ve got your game on IndieDB (which you really should) you’ve probably noticed there’s a “publish” button at the top there. That’s for selling your game on Desura. It’s super easy to aggregate your game content between IndieDB and the Desura shop page, and the IndieDB and ModDB community is fully integrated into Desura. Also, they’re an Australian company.

Desura uses a super cute client that runs on Windows and is really good (it’s low profile and easy-as-hell to use while actually having fun community features). You use the client to download games, but you can run the games independently of the client afterwards.

What Will They Sell?: Anything, really. They’re very open, you can put builds of your game up however you like, and they’re a popular place to run alpha funding and beta testing because of the large community there which are all interested in indie gaming. Desura is pretty much all indie games, mods, and community content, so alpha funding is pretty welcome there. Windows, Mac and Linux are all good to go with them. You can set your own price and really do whatever. They’re just swell.

Submitting Your Game: If you don’t already have an IndieDB page for your game, go make one. It’s never too early, even prototype stuff should have a page if you’re planning on expanding it as time goes by. Once you’ve got an IndieDB page up, just click the “Publish” button to submit it to Desura for sale. One thing they do require is that you provide at-least 10 screenshots of your game before they’ll sell it. Not sure why, it’s a definite requirement.

Comedy Option: Origin

hahahaahhaahhahaha no. (seriously, they charge you a bunch of money to sell games on their service and act like they aren’t actually desperate for decent games to sell and who the fuck buys games on Origin that aren’t Battlefield 3, Mass Effect 3 and Sim City?)

Black Annex – From Greenlight to Greenlit

greenlitBlack Annex has been Greenlit by Valve, and will be available on Steam when it is completed and ready for release. There will be no “Early Access” (or Alpha Funding) anywhere, through any distributor. It will also be available on many other distribution platforms. There is no release date.

So, with that out of the way, let’s talk about Greenlight!

Twitter announceI announced Black Annex to the world on the 2nd of April 2013. At the time, I had 551 followers on Twitter. I spent the next two days responding the public reactions to the announcement, and preparing a Greenlight campaign. In those two days, my Twitter follows jumped to 611 (This would be the largest jump in the month of April). This was the number of followers I would have to leverage my Greenlight launch. Black Annex was set to “Live!” on Greenlight on April 4th, 2013; exactly one year in to development.

The instant you launch on Greenlight, your campaign will appear in every Steam user’s “Greenlight Queue”. This is the extent of the marketing effort Valve will do for you. They will give you one shot in front of every potential customer’s face to convince them to say “Yes, I will buy that”. That is it. There is no prejudice, EVERY user is asked to vote. There is no concern for what genre of game they like to play compared to the genre of the game you’re selling, or what they might already know about your game. Everyone casts a judgemental eye on your campaign.

So, this is what happens on Day 1 on Greenlight, when Valve markets your game for you.

day1

You don’t want Valve to market your game. Let me explain what you’re seeing in this image. The Yellow line represents “People who looked at your Greenlight campaign, and were asked ‘Would You Pay for This Game?’”; 2028 people. So, that’s how many people, thanks to Valve’s marketing push, were asked the question.The White line shows how many people actually took the time to answer the question (whether it was Yes, No, or Remind me later), which amounted to 1810. That’s not too bad. Not many people just moved on without voting. So we immediately see that when Valve markets your game for you, they get it in front of eyes that are actually interested in giving feedback. That’s a good start. Unfortunately, we look at the Green line next.

The Green line is how many of those votes were “Yes! I’d buy this!”. 805. 44%. So, less than half of the people that Valve drove to my Greenlight for me were interested in buying my game. Considering that the entirety of Steam’s user base was urged to vote, that makes sense. I don’t think Black Annex would even remotely appeal to the average Steam user. It has a specific audience. So with this day done, Valve’s marketing efforts very slowly start to wear off.

By my marketing push has just begun!

Now, there’s no question that I do not have the raw numbers Valve have, as far as audience goes. I will never have the number of views ever again that I got on that first day. That make sense, and there’s no point complaining about that. But, I have Valve beat hands-down when it comes to quality. If I drive someone to my Greenlight page myself, it’s targeted at someone who has a far greater chance of actually being interested in buying the game in the future. I don’t just spam in every direction, I made targeted moves in an attempt to actually get the elusive “Yes!” vote. I need my “Percentage of Yes” to be impressive if I want Valve to ever Greenlight me. Anything under 50% would be embarrassing; Valve already wrecked my percentage with their initial push, so I’ve gotta clean that up, and I only have small numbers to work with.

As a few days pass and I wait for my initial marketing to come into effect, we see their numbers cool off, and the percentage starts to creep to around the 50% mark. My first action has been to email about fifty websites, each one targeted directly at a particular staff member by name, with a hand written email in context of any previous talk we’ve had before. This takes a few days to prepare and send, and then for any websites to act on it. As the hits on my Greenlight page transition from “Valve Driven” to “Me Driven”, the “Yes” votes start to level out. By the 11th, we see a bit of a bump as my marketing is starting to move around the internet.

before viral

So far, the press has been as follows:

“Broadcast Syndication: Black Annex” -Rock, Paper, Shotgun
“Black Annex revealed with a kickarse trailer” -Pixels For Breakfast
“Black Annex Announcement” -TruePCGaming
“Black Annex: an isometric corporate espionage game built in QBASIC” -PCGamesN
“Black Annex – Corporate Warfare” -TheGamersPad AU
“A Crazy Australian Man Made This Crazy Video Game In QBASIC” -Kotaku Australia
“Local indie invites you to “steal, destroy, kidnap and kill”” -TheBlackPanel
“Isometric strategy stealth PC game Black Annex is a love-letter to Bullfrog’s Syndicate” -Indiegames.com
“Greenlight Spotlight: Black Annex” -Gamezebo
“Spotlight on Greenlight: Black Annex” -PCGamesN
“Head back to the world of 8-bit corporate sabotage with Black Annex” -games.on.net

So this was a good place to potter along at. Word slowly moves around a bit from these articles and people voting fairly evenly between “Yes” and “No”, but then this article went live: “Black Annex is the best QBASIC game you’ve ever seen”-PCWorld.

viral

Black Annex went viral for 24hours because of the “It was written in BASIC” aspect. It was a very explosive time for the product which lead to articles popping up all over the internet, from Google News to Yahoo! Hackers News and a ton of places in-between. This, obviously, affected Greenlight in a very positive way.

So here we have the best piece of data to contrast “My Marketing” with “Valve’s Marketing”. Compare this to Day 1, and you’ll see how I had dramatically less over-all eyes on the campaign page, but a far better quality of visitor. 1345 votes were cast (compared to Day 1′s 1810) but 973 of those votes were “Yes!” (compared to Day 1′s 805). So that’s 72% “Yes” votes (compared to Day 1′s 44%), with a higher overall count of “Yes!” along with that. That’s a big improvement over Day 1 any way you look at it. The only way for me to have performed better on Day 1 is to have created a game that would have appealed instantly to a broader audience (a.k.a. a game with zombies in it).

To give you some perspective, for the entirety of the remaining time between this moment and being Greenlit, Black Annex would never have another spike in “Yes!” votes even 1/5th the size of that particular one. Not one fifth! It was an insane spike. Let’s move ahead a few days to the next spike (which almost was one fifth of that last one).

reddit spike

 

This spike is kind of interesting around the 29th of April as it was a return to the “Lots of views, not many Yes votes” pattern. The thing to notice here is that I got a lot of views, but a very small number of votes. The actual votes were very likely to be “Yes” though, so heaps of people came to my Greenlight with no interest in voting. What happened? I’ll show you.

I made this post on reddit.com: http://www.reddit.com/r/gamedev/comments/1dejg1/have_a_game_on_greenlight_a_little_tip_to_make_it/

So I made a post on Reddit almost completely unrelated to my game, but using my Greenlight page as an example of how to do something technical. This resulted in a ton of people checking out the little tip I was giving them. The ones who actually stuck around decided to throw me a “Yes” vote while they were there. This worked out really well, and become the second largest “Yes” spike I would ever achieve. It’s a good example of a kind of alternative way to get traffic to your Greenlight page. It’s still targeted to people I actually think would be interested in Black Annex, but also with a totally alternative reason to check it out. Keeping it fresh!

So despite the huge gap between “Number of Viewers” and “Number of Yes! votes”, the actual percentage of Yes/No was 64%, so it still helped heaps in re-gaining that “Yes Percentage” that Valve’s marketing had dropped so far for me on Day 1.

After this last spike, I backed off any massive marketing efforts and just kept tweeting all the time and marketing as much as I could. Rather than driving traffic to my Greenlight directly, I was more largely focusing on building up high quality twitter followers so that my marketing would have a better reach as time went by, and as PAXAus came closer. Greenlight activity slowed down, but twitter followers kept growing.

greenlight slowingGreenlight shows very little activity over this time.

png growthBut over this same time, I gained 108 followers on Twitter. During this, I would always block followers who were useless spammers like “I market your business!” or “I post links to porn and virus sites!”. I try to keep my followers list at a fairly decent quality.

During this time, thanks mostly to twitter, I was starting to get to know lots of super cool people who work in games journalism to some degree, and was often chatting about Black Annex and myself. Various articles would go online from time-to-time after a little chat, and eventually another spike came about thanks to Mark Serrells from Kotaku Australia putting this article online: http://www.kotaku.com.au/2013/06/577447/. This article aggregated to Kotaku USA as well, and Greenlight showed this in the graphs.

kotaku

 

Now, these weren’t huge numbers (the largest spike there is 166 votes) but it’s an awesome quality of visitor, extremely likely to vote “Yes!” so it just helps on the overall appearance of my campaign. It’s really creating that image of “When people see Black Annex, they’re pretty likely to buy it!”. That matters, to me and to Valve.

Now, a little earlier this month I had flown to Los Angeles to go to E3. I took a laptop with me and had six interviews lined up to show some people Black Annex. While I was there, I met a YouTuber named GhostRobo (among a few other awesome people) who was super excited about Black Annex when I showed it to him on the show floor. After E3, he said he’d love to do a little video on Black Annex to help me out with Greenlight. That video would be the next spike that I would get on Greenlight.

Now, I’d heard over and over how “Youtubers = Greenlight votes” so this was pretty exciting, but Ghostrobo didn’t actually have a build of Black Annex with which to do a Let’s Play, or even show any new content that had not already been publicly shown. All he had was the launch trailer, and a recording of a live gameplay stream I had done a few days beforehand (more on this soon). So he threw up a video about Black Annex and I saw a nice little spike from that.

ghost robo

Obviously nothing amazing, but hugely better than just letting anything stagnate. Now, I mentioned that I had streamed some Black Annex game-play online, that was great. It gave me a nice boost in Twitter followers when I mentioned my Twitter name during the stream, and it gave me a little 40min video I could use to demonstrate the game to people. I sent that video to Rock, Paper, Shotgun and this happened:

rps 2

 

Another awesome spike (you can see GhostRobos spike just to the left of it there). RPS had basically just thrown up a quick writeup about my stream recording, calling the game “cute, silly, and interesting” basically. The really interesting this about this is how only about 50% of people who they drove to my Greenlight voted “Yes”, but almost no-one voted “No”. Rock, Paper, Shotgun readers are officially my favorite online community because of this. It’s not that they all love Black Annex, it just shows that if they’re not interested, they won’t say “This sucks!” and slam the “No!” button, they’ll just move on to something else. That rules! So yeah, I really appreciated that.

And that… was that, really. PAXAus came and went, and that was a campaign for twitter followers (you can read more about that in my previous blog post), and didn’t really cause a spike in Greenlight, it just kept the bump going after Rock, Paper, Shotgun’s latest article. I spent most of August just relaxing after PAXAus and catching up on smaller things. You can see how immediately Greenlight falls back down after you stop massive promotions.

almost doneI’d be lying if I didn’t say that I was starting to lose faith in my hopes of ever getting on to Steam. I was 78% of the way to being #100 after PAXAus, but it started dropping, and went down to 73%. I was only three-quarters of the way to #100, then there would be 100 more people in-front of me still! So daunting. I had managed to successfully combat my poor “Yes!” percentage that Valve had initially caused for me, and I was at 49% “Yes” and 50% “No!” (the margin of error was in favor of No).

Almost at 50/50 Yes/No, still needing about more 20,000 “Yes” votes needed on top of my current 12,000 just to be in the top 50 of Greenlight. So, on Wednesday the 28th of August, at 1am I had finished re-arranging my studio and setting up a really nice PC that I hardly ever use to be me new main workstation. I went to bed. I put my phone on the charger, set my alarm to get up for work at my day-job the next day, and put it on the floor.

Then my phone made the “You got a gmail” noise. I had just set up a new Asus Wifi access point and it wasn’t working properly. I picked up the phone and looked at the screen. It said

“Steam: Black Annex has been…” [Slide to Open]

I looked at it and thought “Why the fuck would Steam email me about Black Annex unless they had to remove it from Greenlight or I violated something…”, I slid the thing and my Wifi crashed and refused to open the email. I got pissed off, then my wife’s phone made the “You got a gmail” noise. She is also a “Creator” on my Greenlight page. She woke up from the sound and I said “What is that email? What does it say?” while I was turning off my Wi-fi so I could just check my email over 3G instead. I had to force-close GmailApp and re-open it so it was taking ages.

My wife was too tired to make any sense of what she had just read on her phone and wouldn’t answer me properly, she started going back to sleep.

I opened the email on my phone and blurted out loudly. “Oh my god, we got Greenlit. We got Greenlit”. It was about 1:10am. I rushed out of bed and got on my new computer.

IMG_1685

So… that happened…

I don’t know why that happened…

Valve Greenlit 100 titles. I was more than 25% away from being in the top 100, this means games were passed over in favor of Black Annex. I was about 4000 “Yes” votes away from being #100 at the time.

But Black Annex got Greentlit. So that’s a thing that happened.

Thanks, everyone. Reddit, SomethingAwful Forums, Twitter… everyone.

 

Where We At

I’m at a stage with Black Annex at the moment where most of the development time is spent creating content, rather than working on the technical side of things. The features are nailed down (although some still not implemented) and most of the technical hurdles are overcome (except optimisation, there’s always room for more optimisations) so I don’t really get to just play around with code all that much in Black Annex right at this time.

So, one week ago I opened a blank new project and started creating something. This blog is always about the more technical side of what I’m doing, so here’s some video of something totally new.

Maybe one day it’ll turn in to something more.

A PAX Roundup

When exhibiting at something like PAX, you need to think about what exactly you’re trying to get out of it. Where your game is finished and available for sale already, your “Call to action” at PAX would be for people to buy your game. Black Annex isn’t finished yet, it isn’t even in beta and there’s no publicly available demo for people to play, so what is the “Call to action” for attendees who saw Black Annex at PAXAus? Three things, in order of priority (this doesn’t include vague things like “Get excited about Black Annex! Tell your friends!”, these are measurable things).

  • Follow @manfightdragon on Twitter
  • Vote for Black Annex on Steam Greenlight
  • Visit blackannex.net

For media at PAX, the call to action was:

  • Write something about Black Annex on the internet.

So lets talk about how I expressed these calls to action to the people I met at PAX (or communicated with online before/during/after PAX), and what kind of result it all had.

The first thing I had to do was prepare media for Black Annex at PAX. I wrote about 190 emails individually to media people who were granted media passes to PAXAus. For every person I emailed, I made sure I already knew a little about them. Do they follow me on twitter already? Do they follow me back already? Have I talked to them before? Have they written about me online before? What kind of stuff do they write about online? etc.

I build a huge spreadsheet of all this information in one place, and spent about three days (one month prior to PAXAus) writing all the emails up. I asked Mark Serrels (Kotaku Australia) for some opinion on how/when to send emails to press. Among the advice he gave, he also published an article on KotakuAU (which I think aggregated to Kotaku US maybe?) where he mentioned the insane effort I had put into press contact. You’ll notice the effect this article had on my Greenlight stats later in this post.

The emails I sent all were about 2 paragraphs long. Here is an example of one I sent:

“Hey, Dave! It’s Lance here (@manfightdragon on twitter, guy making Black Annex, http://www.blackannex.net, don’t act like you don’t know me). Anyway, you’ll be at PAXAus, yeah? I’m in the “Indie showcase” there, at booth 2330 specifically (theres a map app thing here: https://itunes.apple.com/au/app/pax-aus-2013/id657630506?mt=8 ) . If you don’t come say “Hi” to me at some point, I’ll be a big sad baby forever because I am literally a child.

 
So yeah, I better catch you there at some point!
 
(I’m also on the indie showcase panel at 8:30PM on Friday but that’s boring you don’t have to do that)”
Now, Dave already followed me on twitter, and we had talked in the past and he had DMed me his email address, so I didn’t need to mention twitter to him as we already have a relationship there. But, almost every email I wrote to press that day ended with:
“(PS. tweet me maybe, @manfightdragon)”
post email twittersSo I wanted three things from this exercise. Email replies saying “I will come say hi!”, people to actually come and say “hi!”, and people to follow me on twitter. The most immediate result was twitter follows (emails were sent on the 24th, you can see an immediate spike followed by steady growth.). About 80% of email I emailed replied, and about 90% were “Yeah, I’ll come see you!”. I had a short dialogue with everyone who replied.
So that was the main action I took to prepare for PAXAus. I hadn’t updated this website since getting back from E3, as it’s not really a marketing tool in any way at all.
So lets look at what happened during, and just after PAX in any measurable way I can so far.
The Press: The most immediate press results were in the form of tweets, here’s most of the ones I can find that happened during PAX (or just after):

Articles went online starting from the first day, and are still continuing now. Here’s a few I’ve seen so far:
http://techgeek.com.au/2013/07/21/indie-showcase-black-annex/
http://operationrainfall.com/pax-aus-2013-black-annex/
http://www.kotaku.com.au/2013/07/i-checked-out-black-annex-at-pax-australia-and-met-a-kindred-spirit/
http://www.guardian.co.uk/culture/australia-culture-blog/2013/jul/22/pax-australia-penny-arcade-melbourne
http://www.pcauthority.com.au/Feature/350923,pax-australia—three-days-of-gaming-costumes-and-queuing.aspx
http://www.capsulecomputers.com.au/2013/07/inside-the-aussie-indie-showcase-at-pax-aus/
http://games.on.net/2013/07/australias-got-talent-the-indie-pc-games-of-pax-australia-2013/
There’s a few others floating around, but Google Alerts is probably the most awful way to try to track this kind of thing, so I can’t pull up a list of them easily right now. A huge part of the press result was meeting so many people, and I’m not in a lot of discussions in regards to further marketing opportunities, so this will span a fairly large time-frame.

pax twitersTwitter: At the booth, we had mints with our twitter handles written on them, and I had business cards with my twitter name. The mint trays also had little tags sticking out of them with @manfightdragon written on them. Twitter followers are probably one of the best things to get out of something like PAX, because they’re people who care about you, or your game, and they’ll help promote it for you. If you say something interesting, they’ll hopefully retweet it and spread it around super-fast. Twitter followers, for me personally, is the most valuable thing to have in promotion. Other people might be better that harnessing Facebook or Google+ but I can’t get my head around how to use those effectively. So, overall, a great result in twitter followers. I was telling a lot of people face-to-face, on camera, or on the panel “Follow me on twitter”. I wasn’t giving anyone my email address or any other way to contact me.

pax greenlightGreenlight: Okay, let’s talk about Greenlight for a bit. Everyone wants to talk about Greenlight, right? Well. PAXAus was, easily, the biggest Greenlight spike I’ve had in a while. It’s not as big as a fantastic RPS article, or getting a storm of KotakuUSA+PCGamer in one day, but it was still really REALLY good. Also, just out of interest, notice how a KotakuAU (And I think it went on KotakuUS at the same time) article gets more visitors (yellow) but less “Yes” votes (green). Where as an article on RockPaperShotgun gets less visitors, but the traffic you do get are more likely to vote “Yes”. Target your marketing!

Ahem, anyway. Yeah, so PAX had a great result, partially because a KotakuAU article went up on Day 1, but also because one of my big “Call to action”s for visitors was to go to Blackannex.net, which has a big Greenlight button on it. Greenlight doesn’t tell you exactly where people are coming from who see your campaign, so it’s hard to get a result on that kind of thing. I’m interested to see how Greenlight fares as a few more articles go up over time in the post-PAX period, and which spikes I’ll be able to correlate to what events.

So yeah, PAX was a big marketing success. Now I have to actually make a game, I guess…

Let’s talk about PAX, baby.

I spent the entire last two months preparing for E3, which was an awesome lead-up to readying Black Annex for PAXAus.

Knowing that Black Annex would be playable by the general public at PAXAus in a massive booth, I took a very rough build to E3 and let about ten people play it there with no guidance (I just silently stood behind them to find out what guidance I need to build into the game and get it ready for PAX).

E3 was great. It was super fun and absolutely massive, I met some amazing people there. I spent time talking to Joystiq, RockPaperShotgun, GhostRobo, Fullscreen Arcade, BeefJack, and Random Assault Podcast. Among all that, I also got a chance to just explore E3, see lots of awesome games, and also be amazed by my first time in the USA.

BPR5pMvCYAAKHp_But that was all to prepare for PAXAus. So I made a single mission for Black Annex that was *fairly* hard, but also do-able with a few brute-force attempts, and built a short (somewhat confusing) tutorial into the start of the game. I had a team of five people including myself to help run the booth (@manfightdragon, @honeycommbe, @urbanneurosis, @takorii, and @davomagnifico). I had sent out about 200 emails a month before PAX, each individually written and catered to each person inviting them to stop by the booth and meet me to check out Black Annex. I was fully booked all 3 days to be in interviews, so I knew I’d need people at the booth the whole time for me.

IMG_1386In the lead-up to PAXAus, while I was preparing the demo and talking to media, @honeycommbe was preparing the booth. We would have a trestle table with two desktop PCs (actually an iMac and a laptop hooked into a KVM), and one press-only demo unit (a laptop on a bar table). We also had a small cabinet, and five seats. We brought two A1 posters with our own art, three rice-bubbles boxes that we put printed sheets over to create fake “Big box” Black Annex retail boxes, glass jars filled with mints which we had written our twitter handles on (using food dye), about 1500 button/pins, of which there were 6 different styles in two fishbowls at the booth. We also brought business cards in holders.

IMG_1396We packed a car and drove to PAXAus. I arrived Wednesday in the expo hall (PAX begins Friday). I took all the bulky items in and set them up. I wasn’t allowed to hook up the electrics until they’d been “Tagged”. I ran into Jerry (from Penny Arcade Co.) and got a very excited photo with him after giving him a run-through of Black Annex. I left things for the night and got some sleep.

The next morning, I wandered back into the expo hall, still with one day to go before the actual show, hooked all the electronics up and made sure everything was sound. After a lot of work, preparation and meditation, we were ready for the media and the public to come and play Black Annex for the first time. (Sidenote: I’m pretty sure the entire “we have to test and tag your cables!” thing never happened). I didn’t want to leave, but I had a VIP event to go to where press people would be mulling around, so we headed over there.

IMG_1411The next morning we arrived about two hours before the media would be allowed in (which happens one hour before the public are allowed in). We chatted with other exhibitors, and waited. I expected a huge flood of media to enter, but it was only a very small group of people scattered around. All the media people who came by in the first hour knew who I was, and a few sat down to play Black Annex and have a chat. They all seemed fairly happy.

IMG_1439Eventually, time passed and the public came in. The public was a massive crowd, and after about 30 minutes, the Black Annex booth was absolutely packed with lines for both demo units. It stayed that way for the entire expo. People found game-breaking bugs and we realized that we needed to manually re-start the game every time people walked away from it (when the public sit down to play a demo game, they don’t esc->new game, they just start playing.). The response was fantastic, most of all from the press-people who wandered by. There was a huge mix of people who had heard of the game, and people who had no idea what it was. I spent all my time between booked interviews and ad-hoc interviews. There wasn’t really any down-time at all. Having five people at the booth was definitely necessary.

IMG_1452So I took an alpha build of Black Annex to PAXAus as one of six people chosen to be in the indie showcase. I had an enormously positive response from the media and the public. I got to meet a lot of new media I’d never met before, and got to finally get face-to-face with many I already knew well.

It was an immensely important event for Black Annex, and it’s caused a massive boost for the game’s position online now. I’ll be pushing out a lot more information about “What PAX meant for Black Annex” over the course of this month and as time goes on. There’s a lot to be said, and I’m really glad it’s all done now.

Framerate++

A lot of the jobs on my to-do list are variations of “Make [x] not run like shit”, so I’ve been spending a lot of time making things run a lot faster, and the overall system requirements for Black Annex a lot lower.

So one of the first things I managed to do was fix an issue paging the video buffer meaning that even when the game was running at 60fps, the screen would only update at 30fps. I didn’t even realize this was happening until I fixed it so now the game is literally running twice as smoothly as it was in the PAXAus AIS demo.

Performance MenuAfter this, I needed to seriously think about getting the game able to “Stretch to full screen”. I mean, I’ve had it working, but the “stretch” was slowing the game down massively so it would drop about 20fps when doing it. I had been just treating the screen like a rectangle and scaling it in a really basic way before blitting it to the computer screen. It was running horrible, so I started working on a way to actually map the screen to a couple of texture-mapped triangles and scale those up to the screen size instead. I ended up getting this working, so the screen is sliced into two triangles, then the two triangles are drawn back onto the screen at a new size to make the game full-screen. This turned out to be almost no slower than drawing the screen at the original size. Dealing in polygons seems to be pretty snappy, it turns out!

When I figured that out, I went back and changed almost every sprite-blitting routine to use texture-mapped triangles instead, and this sped up the game massively, especially if any form of scaling was being used on any sprite. The problem is, there’s no filtering, so I can’t smooth the screen or anything. Scaling square pixels to funny numbers can get some ugly results. I’m going to let the player run the game in any resolution they want, but they’ve got a few options on scaling. They can just go straight-up “Full screen” and just put up with any ugly pixels, or they can “Scale to nearest square pixels” which leaves some black borders at some resolutions (It will scale to 100%, 150%, 200%, 250%, etc. Keeping things fairly nice), and they can turn on “allow 25% extra scaling”, which allows 100%, 125%, 150%, 275%, etc. It’s a little uglier, but it’s up to the player to decide what they’re happy with.

A Pixel ShaderSo that’s done! Although I had at least tried to put some kind of screen filter in, it was just too slow to actually use. During that process, I did actually make a pixel shader for the game, which a lot of people though was pretty cool. It’s just a tilt-shift thing which gives everything a kind-of “Miniature” look. It will just be optional in the game as it runs like trash, but I like leaving things like that in for people to fiddle with.

But THAT lead to me deciding to work on some absolutely massive performance tweaking for the engine. I decided it was about time to actually go ahead and work on “Frame Skip”. “Frame Skip” is where you measure the time it’s taking to render the game’s graphics and, if it takes too long, turn off rendering until the game catches back up again. This results in “choppy” gameplay, instead of “slow motion” game play when things start getting too heavy for the CPU. The good thing about frame skip is that it lets people with computers just a little below requirements still play the game at the same “speed”, they just notice the game looks a tiny bit worse. It’s much less frustrating than having the game run at a snail’s pace.

I made it so Frame Skip comes on gradually, so if the game only slows down only for 1 second, it will give you a little mix of slow-motion and maybe just skip 2 frames or so. This means that if a GUI element takes a little bit too long to populate (Some of them have elements that stream from the hard drive), the GUI animation will still remain smooth instead of just jumping in. If the entire game runs slow, the frameskip will quickly go to full effect and the whole game will just be a bit jumpy.

So that’s great! The game runs way better on this Core Duo Mobility laptop I have for testing, which it was kinda unplayable on before. It still needs some tweaks but the technology is there and working so I’m super happy with that. The next item on my to-do list said “Make Pathfinding faster, a LOT faster” so I decided I really needed to finally wrestle with a* Pathfinding and make it work. Doing this in BASIC is extremely hard because you can not create arrays of arrays, and there’s no pointers either. I had to create a ton of different arrays with a bunch of arbitrary reference keeping arrays between them so they can point back and forth to each other. I also ran into a massive issue calculating the heuristic for my map because I use a horrible skewed coordinate system. A goon by the name of “testsubject” eventually figured out the math for it and I’ve had awesome success now implementing a*.

I uploaded a video showing the game running with the old pathfinding, and then I pull down a menu and change it to a* in real-time and the game instantly returns to 60fps with no frames dropping at all. Have a little read of the video description on youtube if you want a bit more detail on exactly what I’m doing in the video.

So that’s what’s new. Oh, I’m also going to E3! I won’t be exhibiting there or anything, just hanging out and hopefully meeting some cool people. I’ve never been to America before, tweet at me if you want to meet up or something.

March to PAXAus – Finale: You have been judged…

greenlightI didn’t really make it clear what I was doing in March, I just just smashing out updates every day to try to create a cohesive, playable game out of the pre-alpha version of BA Project. The reason for this was that the deadline for submitting a playable demo to the judges at PAXAus was April 10th and I really wanted to try to get something into their hands that actually “worked”.

So I spent the entire month of March smashing through as many critical features that the game needed to actually work as a whole. With that done, I hit the Alpha milestone and announced Black Annex. Around April 7th I sent the most bleeding edge build into the PAX judges after about 30mins of playtesting and two last-second fixes. (The final playtesting is shown in the video below, recorded around 3am).

For a little fun, I built a gimmicky custom intro into the PAX build which makes it appear that you’ve launched a DOS command prompt when you run the game. It just dumps you into a DOS window reading: “C:\GAMES\BLACKA~1>”, slowly, the commend prompt types out “annex.exe /paxmode”, a fake DOS/4GW runtime starts, and then a warning saying “YOU ARE SEEING THIS SCREEN BECAUSE BLACK ANNEX WAS LAUNCHED IN ‘PAX MODE’”. The moment the player pressed a key on the keyboard, the entire computer screen instantly goes black and the demo starts.

The demo had an utterly broken Main Menu that liked to randomly drop in and out if you clicked “Begin Game” too quickly, the Options menu didn’t work, and sometimes the “BLACK ANNEX” logo itself would just disappear. The only instruction given to the player was a loading-screen hint reading “Left click to make your agents walk to a location, double-click to run.”. There were five “playable” levels, but all of them were either uncompletable due to being massively unbalanced, or completed within 10 seconds of the level starting because the mission objective was way too simple. The minigun was completely broken, if you stacked three weapon abilities none of them worked, nothing made sense. The mouse cursor was an uncontrollable wreck plagued by a bug that I’ve only now fixed two weeks later and the “Mission Deploy” screen would just randomly close sometimes as soon as it opened. Loading took up to twenty seconds per level and the game ran at about 40fps on a computer made one year ago.

I can not stress enough how little sense this game made in the demo. You were dumped into a game with way too many mechanics, none of which were explained to the player and most of which barely functioned correctly anyway and expected to find, as the PAXAus submission form said “fun factor and a great gameplay experience.”.

As the creator of Black Annex, all I see when I play it is a mess of systems interacting with a bunch of unintended things happening all over the place.

The judges at PAXAus didn’t see the same thing I see. They sent me an email to let me know.
email

ais logo mediumSo now, me and five other Australian developers are going to be part of the Australian Indie Showcase at PAXAustralia 2013. We get to do a panel! So come to PAX and ask me about making a game or something.

Full Disclosure

Well, a lot has happened over the last couple of days so I’ll just post this first-up before I go on a rant.

greenlight

 

So the first thing I did the other day was upload a trailer to YouTube but leave it “unlisted”. I posted a link to it on twitter and publicly said the name of the game for the first time. The tweet went absolutely crazy instantly with re-tweets allover the world from so many amazing people.

Then, I posted the trailer on Facebook and started responding to twitter comments that were flooding in. I then posted on reddit with an amazing result over there. I clicked “Publish” on the YouTube video so it aggregated a little automatic post to all my social media connections there and pushed to all the subscribers. Then I posted the blog post here which automatically pushed to Facebook and Twitter.

After that was all publicly revealed, I spent some time talking to people about the game all-over the internet, and I sent a quick link to Simon Roth over Skype, which he seemed to think was pretty cool.

A few particular media people had asked me to keep them in the loop in the past, so I sent them a quick bit of contact to let them know I’d pushed out some new info. They seemed happy with that. The day pottered on with lots of excited people talking about how much they loved the trailer, and I sat at the top of /r/gamedev on reddit until I went to bed.

I woke up in the morning to see a post on Rock Paper Shotgun and I was shaking with amazement. Simon had sent the trailer to them and they seemed to really like it. A few other media-mentions popped up the next day, and things have just been crazy busy since. I’ve received some really interesting emails from lots of different people and everyone overall seems really excited about Black Annex.

So, with that, BlackAnnex.net launched the next evening to give me a central place just to gather the media for the game so I can keep this blog just for my normal ranty updates.

It’s been an amazing few days and now I’ve got a huge amount of expectations to live up to. Still gotta finish the PAX demo.