Dev Log #9: Breakable objects (and many other small things)

Summary of the many things implemented since last dev log.

+ Added events into skeletal animations, this way we can synchronize sounds and SFX at certain moments in the player animations. For instance we can launch foot step sounds, and particles at the exact key frame the foot in the animation taps the ground. The support is implemented only on the engine, and not in the editor. This means I have to install the events using game code, instead of editing them from the Actor editor.

+ Added audio feedbacks: jumping sounds, attack, walk, crouch-walk.

+ Added visual feedback when the player walks, or crouch-walks: dust particles.

polvo+ Implemented automatic sound and SFX preloading. Instead of having to add new entries into the lists every time a new sound or SFX is introduced into the game, I programmed a feature to scan inside the room data and load them automatically. In this case the breakable object introduced new sounds and SFX.

* Fixed audio panning problems. Seriously, OpenAL is a pain in the ass when talking about 2D sound. I managed to get a good panning for 2D sounds, but at the expense of having to work for one full day. Sadly, I spent most of the time trying to figure out why panning wasn’t working correctly, until I found, I had checked something like: “enhance stereo” on the control panel applet for the sound card, arggggh! >:[

+ Added enviromental reverb into the game engine. Having spent so much time dealing with audio, I considered it was the right moment to implement the enviromental sound on the engine. This time OpenAL worked really great. Added 3 controls for the Enviromental FX:

  • Enable/Disable Reverb
  • Reverb amount
  • Reverb type.

* Fixed some bugs on HUD Editor related to the Prefabs.

+ Added breakable objects. This required the inclusion of many new features in the game engine:

+ Slight refactor in the component system. Besides the base class of an object, we also store its class name. We now can query components by its class name.

* Breakable objects are implemented through old CLevelEntity objects. This kind of entity is perfect and has the perfect feature set we need, including a property which let us decide what to spawn when this entity dies, and at what probability.


+ Added the sword attack entity. This is an entity that lasts for few frames and represents just the bounding volume where the sword moves. When this entity collides against other entity (for instance a breakable object) it sends a custom message. Then we reproduce a sound, some particles, decrement the breakable object energy, etc….

+ As Box2D doesn’t support object flipping (flip the body and/or fixtures when the player graphic flips direction) the SwordAttack entity is divided in 2 sub entities. We spawn one kind when the player faces to the left, and the other when the player faces to the right.

+ Added control to avoid the same entity colliding 2 or more times consecutively. The SwordAttack entity lasts for several frames, but we just want the collision to be detected only once per attack. In other case, the breakable object would die with just one player stroke.

+ Added custom event sending on the Collision Manager. When 2 entities collide, now we can send custom events instead of the GMSG_ENTITIES_COLLIDED generic one.

* Fixed a bug in the collision system. Sometimes collisions were not detected or the SwordAttack entity was not spawned.

* Improved the computed collision point between 2 fixtures when one of them is a sensor.

+ Added custom event sending on the Collision Manager. When 2 entities collide, now we can send custom events instead of the GMSG_ENTITIES_COLLIDED generic one.

+ Orbe spawns when the object breaks (with some probability).


* Orbes now can be attracted or not. For the maze part of the game we don’t want them to be attracted so easily by the player.

+ Improved the CPlatformer component. Specifically the jump feature set is richer. Continuos jump can be enabled/disabled (disabled in this game), and we have a variable height control: Shorter button strokes produce lower jumps, longer button strokes produce higher jumps (up to a max).


+ Added support for Orphan entities. Orphan entities produced memory leaks when changing the room. Now they are destroyed upon room deletion.

* Improved control over the frame buffer for the 2D lighting. Done inside the core of the engine. We’ll see this in action later.

+ Added character self centering feature. When climbing up or down the ladders, the player is automatically centered.


+ And last but not least, I’ve created the first 4 rooms of the maze!

4-first-roomsAs you can see, there is still no decoration and no lighting. That’s just something to start exploring the maze 😀


This entry was posted in Blog. Bookmark the permalink.

Comments are closed.