Updated by spotco on April 22nd, 2013

Won a hackathon and all I got was this this blue box
On the upside, did finally get to make the online 3d FPS I always wanted to make. Presenting...SHOOT2KILL
(don't know how long I'll keep this server up, living off ec2 free tier for now)

It can handle about 4-5 people before shitting itself.

A year of SpeedyPups

Posted by spotco on April 1st, 2013

Got a pretty good amount of work done on the iOS game over break. Mainly animation, menu and more level making. It's got a new animated logo (fancy). As you can tell, it's really Sonic-inspired.

I've been working on this project for about one year now. I remember when it was initially started, I had just finished Goober and felt like a real AS3-hotshot. I didn't know anything about the MacOS/Objective-C environment (in fact, I don't think I had ever touched OSX at all). The game wasn't always about puppies, either. I think the original idea was something about racing ostritches, some sort of mario-kart like game with online (buzzword social) networking and whatnot. Check out this badass motherfucker:

As you can guess, awkward ostriches had a lot less marketability than cute puppies so we switched characters about a month in. The name GOStritch (as in GOStritch level editor is a legacy of this). Also around this time, I had just finished Rayman Origins on the Wii and was super inspired to create with crazy level design just like it. So I dropped the ``online mariokart'' (it never worked out anyway) and decided to do a straight up platformer.

When I started, I had never actually programmed in any C-variant before. So on top of the whole ``whats a header file??'' confusion, I had to deal with the extra details of Obj-C syntax. And it's not a particularily friendly-looking language:

+(CCMenuItem*)make_button_tex:(CCTexture2D*)tex seltex:(CCTexture2D*)seltex zscale:(float)zscale callback:(CallBack*)cb pos:(CGPoint)pos {
    CCSprite *img = [CCSprite spriteWithTexture:tex];
    CCSprite *img_zoom = [CCSprite spriteWithTexture:seltex];
    [Common set_zoom_pos_align:img zoomed:img_zoom scale:zscale];
    CCMenuItem* i = [CCMenuItemImage itemFromNormalSprite:img selectedSprite:img_zoom selector:cb.selector];
    [i setPosition:pos];
    return i;
It becomes second nature after working with it a bunch, I swear! Now that I've worked with it a good bit, I actually think it's a pretty good language for getting stuff done. In terms of standard libraries and whatnot, it's functionally equivalent to Java. The only major difference here is that the containers are untyped and the syntax is [NSString stringWithFormat:@"pig disgusting without an IDE"]; It's got a couple of neat features too not present in java. It's got some syntatic sugar (debatable) for function pointers, a silly way to add methods to classes at runtime and the ability to do straight c-style code when necessary (and I actually had to do this once for some GL optimizations in the game).

A year later, and the game's almost done. Here's the newest demo video I sent to the musician to show off at GDC:

There's still a couple of things I need to get in before the first release, mainly relating to game-ification and non-directly game-mechanics related stuff. Basically, setting up a inventory and shop system to have stuff to buy with the ``coins'' collected and possible monetization (aka ``Unlock this feature for 4.99$!''). I made an actual todo list, but the gist of it is:

  • Inventory and shop system where you can buy one-time use powerups to help you ingame (at the time of writing I have this somewhat implemented). I'd like to have at least 4 different powerups (magnet, rocket, heart and shield), all upgradeable to last longer/more effective/etc. I hope this could be one of the main money dumps in the game.
  • Challenge level system. A series (target amount here is about 16-24) of challenges where you'll be given a goal (ex. collect at least 28/30 total coins, beat in 30 seconds or less, etc) to complete. The real genius of this will be that I will hopefully be able to reuse the same levels I use in the infinite mode (now called ``Free Running Mode''), meaning less work overall. I intend for these to be from somewhat challenging to perfection-demandingly hard, but it looks like items will make them easier than intended. Well, gotta casualize somehow. Now if only I could monetize that...
  • Make a shit load more levels (about 20-25 more). This is probably the most challenging (if not definitely most draining) part of game development - making the actual content itself. The whole past year's been spent perfecting the code and game engine, but the whole point of that is to have fun levels for the player to actually play. I've had this internal-tools-quality web app to make levels, but it's still pretty tiresome to make them. It's usually about 1 hour or so to make a ~60 second level section, so you can imagine the math there. In the very distant future, I'd like to have an in-game level editor. I don't know how I'll ever transform this modal mess into an intuitive touch-app for the cellphone screen, but that's a problem for a very distant me.
And that's it! It took a whole year to get to this point. To make myself feel better, I just like this think that this game is several orders of magnitude more complex than goober, which took about a year as well from start to distribution.

Last bit, still working through my Wii JRPG backlog and recently beat Opoona. Was it a good game? Yes and no, but the soundtrack was probably the best out of any game I've played in the last few years. A few highlights. Next in line: Okami. I've owned the game for like a year now and am finally starting it.

Leave a comment!