Tuesday, 25 June 2013

1GAM June: FShoot

This month I chose once again to do something new and took it upon myself to dabble with a little F#. This is the first time I have used F# in any way, and the first time I have used a functional programming language.

I ended up shoehorning OO code into F#, the same way I'm sure many C# developers do when they first look at F#. I say shoehorning because that's how it felt. Even once I had been given a crash-course in functional development by Matt, I still felt that F# wasn't for me. Much of my issues come down to trying to fit a game, which is essentially one big state engine, into a language which is inherently stateless. I did, however, begin to find the syntax of F# rather charming and I could perhaps see myself employing it down the line - just not to write core game engine code.


FShoot itself is a simplistic space-invaders clone. Not much to write home about, other than I chose to make the game using just particles. Every single object on screen is a particle or is constructed out of many particles. I think it makes for a cool aesthetic.

I haven't decided what I'm going to do for July. I think I'm running out of ideas, which is a really bad thing for someone who identifies themselves as a game developer. Still, I'm super chuffed to have made it this far (six months, six games!) and I'm not going to give up easily.

Tools Used

  • Monogame / XNA
  • F#
  • Visual Studio 2012
  • Photoshop CS6
  • Audition CS6

Source Code

Available on Github


20 days, very much on and off. I'd say ~30 hours total.

Special Thanks

  • Matt for the F# pointers.
  • Dave Thomas for the Monogame F# template
  • James for the Mac port!


Windows. If it doesn't run, you may need to install OpenAL.
Mac! A first for my 1GAM run this year. Thanks to James for the effort! Apparently tested on an iMac, but leave a comment if you can't get it to run.
And Linux. This has been tested on Linux Mint 14 (Cinnamon), you may need to install libSDL-mixer (sudo apt install libsdl-mixer1.2). Run from a terminal (mono FShoot.exe). If it doesn't run, copy/paste the output into a comment below.
  • FShoot - Linux .tar.gz

Monday, 3 June 2013

1GAM May: RoboFight!

RoboFight! is an example of a six-week idea that was implemented in twelve days. By that I mean that I bit off more than I could chew. I had the idea for a side-scrolling brawler à la Golden Axe, Double Dragon, Streets of Rage etcetera back in April with a view to making it for my May game.

However, due to personal issues and general Real Life™ things occurring, I didn't get started on the idea until the 20th of the month. What I should have done at that point was save the idea for June and make a smaller game. But as it was the only idea I had, I went with it.

Chaos ensued.


RoboFight! is far from finished, but the codebase is so sloppy I have zero interest in continuing with development now, which is a shame because there are a couple of genuine moments of fun to be had while playing the game.

Here's a list of the things that are cool/that I like:
  • The never-ending level. While not fully randomly generated, there are five hand-crafted "sectors" of map with a common start and end point that are randomly chosen and placed down as the player progresses through the game.
  • Weapons. The player and AI opponents can pick up (and drop) weapons that have different stats (range, damage and life). The weapons degrade through use and are then destroyed. Each opponent has a chance of spawning with a weapon.
  • The HUD. I had this cool idea of using tessellated triangles to represent the player's health and weapon life. I think it looks really cool. When opponents die, they drop particles of health represented by the same red triangles, which the player picks up to replenish.
Here's a list of things that would have been improved if I'd spent four to six weeks on the game:
  • Movement about the level. It was actually pretty tricky to do the stepped isometric level design you can see in the screens and video. It took me a few days to figure out how to do it, and it's still janky in places.
  • The default (no-weapon) attack. Without a weapon, the attack is a charged "energy fist" kinda deal. The player can hold down the attack button to charge up, then release. It works okay, but it's not as fun as using the weapons. That's bad because you spend more time without weapons than with. The game could use a couple of different attacks and perhaps a block.
  • Combat in general - needs a lot of tightening up, doesn't feel satisfying without a weapon, easy to get stuck in a gang of 4-5 opponents.
  • Enemy AI. It's not too bad, but they can get stuck on scenery at times, and perhaps don't react to threats as well as they should.

June's game is going to be something extra small, as I don't have too much spare time at the moment, and I need to give myself a bit of a break. I'm maybe going to look at using F# just to see what the fuss is about.

Tools Used

  • Monogame / XNA
  • Visual Studio 2012
  • Photoshop CS6
  • Tiled
  • Spine
  • Texture Packer


12 days. Probably ~35 hours total.


Windows. If it doesn't run, you may need to install OpenAL.
And Linux. This has been tested on Linux Mint 14 (Cinnamon), you may need to install libSDL-mixer (sudo apt install libsdl-mixer1.2). If still no joy, run from a terminal (mono RoboFight.exe) and copy/paste the output into a comment below.
  • RoboFight! - Linux .tar.gz