About two year ago I started a game engine called Creatine, which was built upon CreateJS. I used this engine for quite some time, creating 4 jam games with it. However, I reached a point where I couldn’t improve Creatine anymore due to the limitations of CreateJS, in particular because CreateJS cannot use WebGL.
But why I don’t simply use Phaser? Well, Phaser is undoubtedly a great project, with a mature code base and huge community, but I personally don’t like it. Its internal structure is confuse and I can’t understand properly (without spending a lot of time) how it works. Notice that, this is my opinion. I don’t like Phaser, but I am not saying you shouldn’t use it.
So I started Skald, my new engine, with some important pillars in mind:
- The engine must allow me to create fast prototypes for my jam games, however, it must have a good architecture so I can create larger games with it if I want to.
- Kind of consequence of the point above, the engine must allow me to reuse individual components, something similar to how Construct 2 works.
- The engine architecture must be simple and intuitive, so anyone could understand what is happening under the hood.
Additionally, I would like that the engine be flexible enough so people can use it ignoring any part of it (e.g., you may rewrite how scenes and ECS works with relatively simplicity).
Right now Skald is on Alpha 2 – which means that I don’t recommend anyone to use it yet! – and the core features at this point are:
- Game class with managers to control audio, inputs, scenes, devices, etc.
- An extensible asset loader.
- ECS objects. Not perfect or very strictly classic implementation, but it is working well.
- Multiple and extensible audio systems. Right now with support to webaudio and html5 audio.
- Support to 3rd-party plugins.
- Scene transitions (similar to creatine).
- Tweens, color and easing functions, and other utility functions and structures.
- Most of the features of PIXI.
The final version of Skald won’t be released any time soon, but for the next alpha release I would like to add the following features:
- Particles! Super important to have a particle system.
- Scene stacking, so we can add, for example, a pause screen over the game without removing the game scene off the screen.
- A better initialization procedure with a default loading scene (if there is anything to load).
- Anonymous scenes and entities.
The project is hosted on github: