Secret of Escape Now Free

To celebrate my birthday, I’ve decided that from this day forth, my stealth game Secret of Escape will now be available to download FREE of charge. You can now get the game from either IndieGameStand or Itch.io if you want to download it and enjoy it as much as you want. I haven’t been able to change the price on Desura because it won’t let me set a price below $1.99, but since Desura’s bankruptcy I doubt anyone will use it.

SoE_Small Continue reading

Procedural Meshes: Generating Gemstones Part 2

Last time I talked about writing a gemstone generator for Unity, in this part I’ll talk about taking that script and making it work in SFML 2 using C++. What makes this challenging is that Unity is a 3D engine with a Mesh class making it easy for procedural geometry, while SFML is a C++ framework made primarily for 2D games. The most SFML gives you is the sf::Vector3f object, which allows you to store 3D [x,y,z] coordinates, which means the rest of it is up to you. As of writing, this is the approach I went to generate 3D gemstones in Gemstone Keeper.

Continue reading

Procedural Meshes: Generating Gemstones Part 1

So two years ago as a student researching for his thesis, I took part in the first procjam. Organised by Michael Cook, this is a games jam that focuses on procedural content, whether that be games, art, text, tools, anything that can make something. Last year I decided to go a bit basic, write some pre-existing noise and maze algorithms for the Haxe Programming Language, which I eventually tweaked and published on Haxelib and Github as MAN-Haxe.

Last year, I decided that for my current project, I was going to do something relevant, and this time use no pre-existing algorithms, this is where the Gemstone Generator comes in. I have images of the meshes below that show the progress from early successful generations to the final most generation test before the UI layout was cleaned up and the demo was uploaded. The generative process is now being used in Gemstone Keeper, albeit with a different rendering process considering I’m turning Unity’s Procedural Meshes into SFML meshes.

Capture Continue reading

Weapons of Gemstone Keeper

So for this week (11th – 17th January) I decided to focus on weapons, a pretty important element of twin-stick shooters. I didn’t want to stick with using one weapon for testing, so I decided to see if I could make a few more for the game. This should explain how I approached the problem and what the weapons system currently looks like for Gemstone Keeper.

Continue reading

New Year

Celebrate what you have accomplished, learn from what went wrong, and most importantly you must move forward. Hope everyone has a great 2016!

We Are SurroundedTitle

Ag8tZsx

One of my goals for 2016 is for Gemstone Keeper to be on Steam Greenlight. I’ll will be sure to have an alpha build ready for play within the next few months.

Grow Trees… Or Something – Ludum Dare

So this is something I didn’t expect to happen, around two weeks ago was Ludum Dare, where we all had only 48 hours (or 72 for jams) to develop a game, however because I had plans to go to a party that was some distance from home, I had much less time. Despite that I still managed to finish something, although honestly was disappointed I didn’t have much to show, so I could go and vote on other entries.

You can play my entry for Ludum Dare 34 here, but here’s my post mortem as written on the Ludum Dare website.

Continue reading

Feeling Superstitious?

I would make this my obligatory “I’m in” post, but I thought I’d make this a bit fun and tell you some weird or crazy fact when it comes to me and game jams, and in particular Ludum Dare: I’m cursed.

Now here me out, I am aware this sounds weird and possibly crazy (because it is), but even if it’s just a sheer coincidence or just bad luck, there is an unusual pattern that has occurred whenever I take part in game jams, and this has been happening through most of the game jams I’ve taken part in since 2013.

The “curse” goes as follows: Every game jam with an even number will either lead to no completion or failure.

That’s not to say that the jams with odd numbers have lead to roaring successes but the majority of my game jam participations which lead to finished and submitted games and some have had much more positive reception than I’ve hoped for, which is saying something for someone who hasn’t (yet) reached the top 100 in any Ludum Dare category. Heck, on my own Ludum Dare author page there are only entries from odd numbered LDs.

So if you are interested, I will show you my evidence and also add in some lessons that were taken from them.

Ludum Dare 28:

Most of why this jam went wrong for me can be summed up in the post mortem I wrote. The short version was that I was collaborating with another person, and we left pretty much everything from what tools we would use, to our game jam idea to the last minute, and as a result we made an unfinished game that we felt embarrassed to keep online so I reached out to Ludum Dare to have that game removed. I don’t have any criticism to give Code_Assassin, but we pretty much agreed that if we were to collaborate again, we’d definitely need a week or so to prepare what games we could make and what tools we would use.

Lesson: Prepare well in advance.

Ludum Dare 30:

So this one I did announce I would participate, and I was joined into a team this time. So how come I didn’t submit a game at this one? Well the answer was that a game was made, and submitted by the other programmer, LiquidBrewing, the game being Cardboard Giuseppe. However as you can see, no one voted for it, and only two comments, reasons why I’m not so sure. During development there were some issues, namely that one of the artists dropped out (meaning I ended up doing some artwork in order to finish the game up) and it didn’t help that I was away on Friday and Saturday. I guess it wasn’t a surprise that the majority of the code that I wrote never got used in the game.

Lesson: Leave some days free to work (especially in teams)

Ludum Dare 32:

I couldn’t participate in this one, although I cannot find a reason why. I can recall telling people I could not take part because I was going to be away somewhere, but I cannot recall what event prevented me from taking part.

Global Games Jam 2014:

Just to show this doesn’t just occur at Ludum Dare, here’s Global Games Jam. I’ve participated at GGJ for three years running and 2014 was the only year that had an incomplete entry. This one had a much larger team of seven people, and yet the reason we never finished was once again, down to tools. We all agreed to use Unity, a great choice if it wasn’t for the fact that most of us never used Unity before, and our venue actually had rooms with didn’t permit the use of Unity (although Unreal Engine was accepted). It was a shame, since we had an idea of an RTS where the visuals and language of the game would depend on what side of a revolution you chose (kinda like Command and Conquer, now that I think about it). On the plus side, I managed to write a sophisticated and fully designed graphical user interface, just a shame the gameplay never became fully realised. I later wrote a post mortem of the jam so you can see the full details of what happened near the time it occurred.

Lesson: Use and prepare tools you know how to use.

So whatever reasons of this, I’m still taking part in this LD, even if it’s number 34. Whether or not the incidents above are the cause of an actual curse, and these aren’t the only ones, I still enjoy the learning process and hard work I put into making small and quick games every year. I look forward to seeing what cool stuff gets created and I hope, despite already having a planned trip to London…Ah well, going to London to see friends during a Ludum Dare didn’t stop me at LD31!

Understanding ASCII Art

It’s pretty easy to see that I’ve taken the step of using ASCII art in my next game, Gemstone Keeper, and it’s pretty difficult to not notice it if you see the screenshots I’ve been posting for #IndieDevHour or Screenshot Saturday.

This writeup will explain my understanding as mainly an outsider and relative newcomer to the ASCII art and Roguelike Development scenes, and hopefully explain my reasons why I chose to move to ASCII art, and how I am approaching it to make my own style to the art form.

Continue reading

Allegro to SFML (aka How I learned to love VertexArrays)

If you have been following me on Twitter, you may have noticed that after game jams, I’ve returned to Gemstone Keeper. Since I started work on my thesis project, GenLevelTools, I have been working in Allegro 5, using my previous experience and the already functional graphics rendering, for both the GenLevelTools and Gem Finder, the simple prototype that is now Gemstone Keeper.

However I decided that I would change the underlying framework from Allegro 5 to SFML 2, the thought of changing systems has been in consideration since IRDC 2015, which came about for numerous reasons:

  • The Gem Finder code needed updating, as it was written during a time where I was under pressure to meet a deadline and have something to show, for what was essentially the most important part of my University degree. Now that I have graduated, and have gotten a full time job, I have a bit of flexibility and less pressure for me to make some improvements. If I was going to update the current code, I needed a framework that could satisfy the needs of a new system. I could rewrite the code with Allegro 5 with my experience and confidence behind me, but…
  • Allegro 5 has limitations, which makes some of my concepts for Gemstone Keeper less feasible. The last stable build of Allegro was back in January, yet it lacks certain features that you’d find in other C++, C# and even Haxe frameworks. Specifically shader support for effects, and gamepad support beyond DirectInput. While shaders are a feature of Allegro 5’s unstable builds, there is the issue of stability and compatibility. My attempts to get the unstable builds to work have been less than futile, and even when I finally got a functional build of the unstable release, I was met with a lack of certain libraries to run shaders (namely libpng1_6.dll). It wasn’t worth it, and if it was a struggle for me to get it to work, then it would be worse for me to help get the game running for other people. Also Xbox 360 controllers are recognised as DirectInput devices, which does have some limitations, specifically with the analogue trigger buttons.

This is where SFML comes in. Like Allegro, SFML is a set of C++ libraries that can be used to develop games for PC, Mac and Linux with experimental Android and iOS ports. However, SFML does have shader support with little to no issues installing either the latest source code or direct download from their stable release. While neither have XInput Gamepad support directly, the SFML community have had no problems showing how easy it is to make an XInput wrapper for SFML.

The real seller for me is that SFML’s text rendering has a much superior output, but also support for wide literal characters. This is a big deal for anyone who is developing games that rely on text, such as games with ASCII graphics.

Firstly, Allegro’s text rendering seems to struggle with rendering text that isn’t a factor of two, or below a font size of eight. This is pretty reasonable for using TrueType Fonts that may not have data for all sizes, but software that uses a lot of text have algorithms that help keeps the quality of text consistent regardless of size. In my tests, SFML handles this quite well, while Allegro has issues such as lack of transparency and defects with certain characters at small sizes.

Rendered text comparison.

Left: Allegro build Right: SFML build

Secondly, being able to use wide literals means that I am no longer restricted to characters in the ASCII format, which have less than 255 usable characters, now I can use over 1000 possible characters in the Unicode format, which as of C++ 11 is fully compatible (SFML says that they don’t support unicode formats at the moment, but as long as the font supports them, SFML should render them!). This means more possible creative designs, so more enemies, environments and other features are possible!

Use of unicode characters in game.

Copyright symbols as enemies, because I can now!

Most importantly, SFML is being constantly updated, like I said earlier, the last stable release of Allegro 5 was back in January. In comparison, since starting the framework transition back in August, SFML has already had two updates for SFML 2. It also benefits that SFML is an active community, and appears to have more of a social media presence. These factors help in both finding framework issues, and possible advice for certain functionality.

The new framework I’ve been working on has a slightly different approach, more similar of an approach to Flixel, like what I did earlier with my MonoGame framework Ricoh2D. As such, I’m using an inheritance of a singular base class, as well as a heavy use of object pooling. This way I plan on having updating, rendering and collisions accessible for each object, to make it easier to add and remove objects at runtime. Like Ricoh2D, I’ve aimed to have collision checking handled on a single function call, with the option to pass in a function for collision response.

Because I’m using SFML, I’m also hoping to produce a more optimal and performance with the aide of VertexArrays. All renderable objects in SFML use Vertices to determine the coordinates, texture coordinates and colour of each point of a graphic. During development, I’ve found it is highly efficient to use VertexArrays whenever you can for more custom rendered objects, as there is some overhead whenever you perform a draw call, although the effect is larger in debug mode. For example, when I initially built a tilemap renderer that drew each tile as a separate sprite, I was getting around 400 FPS. When I changed it use a single VertexArray object, where each four vertices is a single tile, the framerate shot up to 1200 FPS. I have since used VertexArrays to replace SFML’s built-in text renderer with my own, that allows me to have text alignment combined with multi-line rendering, when the built-in renderer only had multi-lined text while aligned left. I am considering creating a sprite-based particle system using vertex arrays, as my current system uses multiple sprite objects.

As of writing, the transition of features from the Allegro version to SFML version of Gemstoke Keeper is around 75%, most of the basic rendering has been implemented, the level generation has been transferred over. I need to implement the current enemy behaviour as well as level progression and other enemy screens to have a complete transfer. Once that is finished, I should be able to work on my plans for new features, and should start planning on releases.

Ludum Dare 33

Ludum Dare, one of the largest online game jams, has posted the results of every competition and jam entry made, a staggering 2727 games! You can check out my entry below if you haven’t seen it yet, for which I have included my results:

Embedded image permalink

So if I compare with my last entries to Ludum Dare, the average of scores have shown their gradual increase (2.47 – 2.86 – 3.17 – 3.31), and I must praise Lyserdigi for the music to get a such good audio score.

I’ve had a load of fun developing this entry, which I’ve gone into detail in a post mortem. So during the three weeks after submissions had reached the deadline and tried out and voted on as many games as I can, which isn’t easy since I started a new job last month, and I have no idea how any person could vote on over 2700 games in three weeks. Regardless, I’ve managed to find my favourites, found through recommendations, some friends or by random. So to end things off, here are my favourites:

Escape from Twump Tower

Honorary award for catchiest music track in a LD game, this is a very colourful game for such a topical storyline. Music is really catchy and I love the Megaman approach.

Intergalactic Love Machine

I love the dialogue and the text options, this is a really neat idea to base the theme on and the design of the monsters are really well made, fitting with the individual characters.

R-ADIUS

Very well made, I like the strategy involved in planning how to overwhelm the player ship to make it lose all its lives. I hope MrTwister expands this to give some more level and boss varieties, since I managed to beat the player after three rounds and the game just looped around.

Unsolicited

Brilliantly simple and novel concept, definitely liked the level of micromanagement you have to pull off in the later levels.

A Shadow In The Night

A very well polished puzzle platformer, with a unique jumping mechanic. Really good take on classic movie vampires with a great art style!