I hope to finish the whole Bomberman game before October 2016. Currently progress is slow but steady.

What Is Finished?

  • Basic AI using a state machine. Currently I’ve created several states:
    • RoamState: walk around randomly.
    • HitState: when being hit by a attack, e.g. a projectile.
    • AttackState: used for monsters to attack a player.
    • DestroyState: used to destroy any entity (creatures, walls, etc…)
    • SpawnState: used when entity appears in the game.
    • PropelState: projectiles use the propel state to move forwards.
    • ControlState: players can control their character when this state is active.
  • The game checks for victory & loss conditions every frame:
    • Are all monsters dead?
    • Are all players dead?
  • Entities are configured using JSON files.
  • Themes (the look & feel of the level) are configured using JSON files.
  • Levels are configured using JSON files.

A JSON file for an entity (Imp monster) currently looks like this:

{
    "sprite": {
        "atlas":       "Imp.png",
        "width":       32,
        "height":      32,
        "speed":       1.6,
    },
    "movement": {
        "moveUp":      { "anim": [ 4 ,4] },
        "moveDown":    { "anim": [ 0, 4] },
        "moveLeft":    { "anim": [12, 4] },
        "moveRight":   { "anim": [ 8, 4] },
    },
    "attack": {
        "attackUp":    { "anim": [17, 1] },
        "attackDown":  { "anim": [16, 1] },
        "attackLeft":  { "anim": [19, 1] },
        "attackRight": { "anim": [18, 1] },
    },
    "destroy": {
        "duration":    1.5,
        "anim":        [20, 4],
    },
    "sounds": {
        "destroy":     "ImpDeath.caf",
    },
    "projectile":      "Fireball",
    "states":          ["spawn", "roam", "attack", "destroy"],
}

As one can see, the sprites are taken from the Imp.png file. This file is a texture atlas, it contains all sprite images for the Imp monster. Every single sprite in the sheet has a size of 32 by 32 pixels.

Imp Atlas

The Imp atlas file. PLEASE NOTE: for development purposes only, the final game will include original graphics.

We can also see that the Imp has 4 states of the StateMachine. For the roam state we make use of the movement animations. For the attack state we make use of the attack animations, etc… For the move up animation we use sprites 4 to 8. For the attack animation we use sprite 17. Whenever the Imp enters attack state, it shoots a Fireball projectile, which is another entity.

Work In Progress

Currently I’m working on the asset loading system. I want a designer to easily test content. It’s important a designer gets good feedback whenever content is not edited or created properly, so I am working on an notification overlay. The whole loading process needs some fine-tuning as well, currently it’s too buggy / unreliable.

How will the asset loading system work?

  • Assets should be stored on Dropbox. Dropbox has versioning build-in, which can be convenient for rollbacks.
  • Assets are stored in a zipfile.
  • When the app starts (Debug mode) the app checks if assets are changed by comparing the last stored ETag with ETag of the remote assets file.
  • When downloading updated assets, the new ETag is stored inside the app.

A loading scene will show progress and / or errors.

Planned Work

Still lots of work needs to be done:

  • Add level transitions.
  • Add power-ups.
  • Add sounds.
  • Add music.
  • Add support for controllers.
  • Show points when monsters, walls are destroyed. Add points to player’s score.
  • Create a main menu.
  • Create a settings menu.
  • Create a proper HUD for display of lives, power-ups, etc…
  • Create more interesting monsters, perhaps by adding more states to the state machine.
  • Create custom graphics, sounds & music.
  • Create a marketing website.

Conclusion

I hope to finish most of the asset loading system today. Tomorrow I will focus on score display. Audio support should follow in the coming week.