top of page

Inner Peace

Project 4, Year 1


Inner Peace was our fourth group projects developed in the first year at The Game Assembly. It's a 2D-platformer inspired by Celeste. We wanted to achieve the feeling that Celeste has with its fluid movement and tight controllers. This is our second game developed in the in-house 2D engine called Tga2D.

My Contribution

Particle Editor

For this project I started working on a particle editor that would save and export particles as .json data. I spend a few days developing this editor and I feel like it paid off in the end. Both me and the animators were creating the particles for the game with this tool.

Particle Editor

The visual interface for the 2D particle tool that I created for this project.

GameObject System

I wanted to try my hands on a GameObject-system for this project so most of my work was on the backend, creating base classes for a working structure, such as game object managers, rendering managers, collision managers, etc.

System features:

  • Sprites would be loaded into the game using .json, and be referenced throughout the code with a hashed string ID.

  • Objects inheriting from the GameObject-class would be automatically added into the game object manager that'd be handling the update loop.

Of course, knowing what I know today, I'd be using other methods to load sprites from directories (using std::filesystem for example), but this seemed like a reasonable solution at the time.

This is probably the most valuable learning experience of my time on The Game Assembly, as it gave me an insight to the importance of readable code, system design and good interfaces. Even though the system was very bare-bone, it was a learning experience and for my next project I'd add components into the mix.

Animation State Machine System

For this project we wanted to have fluid movement and animations to go with it. I wrote a simple animation state machine with the intention of it not being hard to trigger animations on any object. You'd create a state machine in your desired game object class and assign all the states in the start function. You were able to chain states to essentially create animation blending.

An example of how the "Idle" animations were triggered.

How we used the system

The player class is adding new states to the animation state machine by first setting a state name, and then assigning a Sprite Name ID from the Sprite Handler class.

The gameplay programmer can then trigger the different states by calling on its "EnterState" function, passing a state name and a boolean expression.

Team: Pågatåget Original


Graphical Artists

Level Design


Music (External)

bottom of page