Monstro release date on Steam!

Just a quick update - Monstro: Battle Tactics will be released on Steam on December 3rd, 2015!

Monstro: Battle Tactics Game Development

The truth about Monstro

Now that I have your attention with a scary-sounding header I'd just like to tell you that the plans which we had for converting Monstro to HTML5 have died and the game will be released using Adobe AIR captive runtime (thanks to the brilliant FRESteamWorks ane which works like a charm).

There will be a lot (and by a lot I mean some) new and cool features like dynamic lighting, challenges per level, new short campaign (a hopefully smart tutorial campaign with a more than dozen of new level). I had some very ambitious plans about adding new units. traps, abilities and environments but they're scrapped. If the game proves to be popular I'll gladly expand the idea of Monstro with new cool features.

Monstro is planned to be released this summer!

Also we already know what our next project will be and in the following weeks more information will be available.

Stay Tuned!


Monstro: Battle Tactics Game Development

Augmenting Phaser

When I made Monstro in the first place I used Starling as the rendering framework but because I've earlier worked by directly modifying BitmapData I had my own set of Display Objects and their properties. One of the properties I needed in Starling was "center" which retrieves the center position of a sprite and sets it, a thing that can be easily replaced by x = value - width / 2 but the resulting code is not as clear and is much more prone to a mean typo.

Since for Starling I just made my own fork I didn't really have a problem there, but for Phaser I decided to stick to the main repository to avoid the pain of having to keep it up to date and eventually growing in a completely different direction and being 500% unhappy.

So the solution I have figured out was to utilize the fact that JavaScript is prototype-based language and decided to augment the existing Phaser classes with properties of my own. Gist with all the changes I've made.

It includes such augmentations:

  1. Methids positionCenter/positionMiddle - This function positions the object exactly in the horizontal center/vertical middle of the screen (it takes the first Phaser.Game object to get the screen dimensions).
  2. Methods positionCenterParent/positionMiddleParent - Like the above but it uses the parent of the object instead of the whole screen.
  3. Properties right/bottom - Get/set the position of the right/bottom edge of the object.
  4. Properties center/middle - Get/set the position of the center/middle of the object.
  5. Methods globalToLocalX/globalToLocalY - Given the global position X/Y it returns the said position relative to the object's local space.

If, like me, you're a TypeScript user, the Gist also includes a definition file with references to the augmentation files. Just make sure to reference it in your bootstrap or whatever after you reference Phaser. Unfortunately the version of TypeScript I am using does not allow you to define the same class in multiple places, so I had to modify my phaser.d.ts file manually to add the augmentations.

Phaser JavaScript

Monstro stack: then and now

Most of the classes from Monstro source code When I first started writing Monstro I had a very clean vision of how the underlying codebase is going to look like. Written in AS3, built on top of Starling and my own framework dubbed Retrocamel. And there is a lot of code there. What you can see to the left is 233 .as files and it does not include Starling and Retrocamel. All of the source files of the project total to about 1.5k!

Now the new, HTML5 Monstro is a different beast. I did a short research before I started working on it and I've decided on the following technologies:

  • Typescript - My first major decision was to write the game in Typescript for three main reasons. One: I love compilation-time type checking. Two: AS3 supports typed variables and that makes the porting easier. Three: At least for me, typed variables seriously speed up development time and at least in IntelliJ typescript has superior intellisense.
  • Phaser - This game development framework built on top of PIXI perfectly works with the old code and is non-intrusive enough to not hinder my coding practices at all. I really like the Plugins functionality and I am certainly going to release parts of the source code as modules for others to use. I've been doing some augments to the code on my own and I am seriously thinking about forking the projects and spewing pull requests.
  • NW (node-webkit) - As I want to make my game work on as many systems as it is possible I've decided to go with NW. I've got some experience in node under my belt and I think it will work flawlessly for the desktop versions of the game and I am still investigating other venues for mobile devices. Suffice to say the game is going to work in all major browsers on all platforms supporting WEBGL.
  • Grunt - Seriously, I've worked with Ant, Groovy and Grunt so far and Grunt trumps all of the others. Trumps them so hard it hurts, even though I feel the initial learning curve was kinda spiky for me because I had a problem grasping the basics of how Grunt works, it just wouldn't click.

Above that I am using a good number of Grunt plugins. I am going to talk about all of it in more detail in the future posts.

Also a side note - I've realized file downloads and SWFs are currently not working. I am planning to resolve this issue in the next few days.

Monstro: Battle Tactics Game Development

Monstro has been Greenlit

What can I say. Monstro has been greenlit!

It's a big news which is going to bring big changes to the game. What exactly it means? Stay tuned, for tomorrow will mark the start of my development blogging!

Monstro: Battle Tactics Game Development