AerRacers

Post Mortem

Introduction

Context

In my third year of Game Programming at SAE Institute we were tasked of building a game using a custom C++ engine, which can be played on the Nintendo Switch and to do so we developed the AerRacer project.

Instructions

This project is spread over 8 months of work, from September 2020 to April 2021. The AerRacers project goal was to create a racing game that can be played on Nintendo Switch by multiple players locally For this project we used the Neko Engine, which is a custom C++ engine developed by Elias Farhan. Neko Engine is based on the ECS system and uses OpenGL, SDL2, and EasyProfiler libraries.

The Team

The team is composed of five programmers:

  • Sebastien Feser, Project Leader, Lead Designer, and Lead Game,
  • Luca Floreau, Producer and Lead Programmer
  • Simon Canas Lead Engine Prog
  • Dylan Von Arx Lead Tool who left in January
  • I, Stephen Grosjean Dev Ops, Game Programmer

My roles

In the beginning of the project, as the Dev Ops, I was tasked of setting up the project files on GitHub and setting up CMake and the Visual Studio project using the NekoEngine. I was also tasked of doing the necessary documentation for the naming convention in the code and for the files, and many other documentation tasks, so that the project was ordered and clean.

Then, when the project was running, as a Game Developer I was tasked of doing the controls and the inputs on the ship.

And finally I implemented the audio playing on the engine.

Dev Ops

For my first task, my objective was to setup the project files on GitHub, I used the existing NekoEngine to make a clone of the repository to start implementing the game on this repository.

I setup a second project, this time using Unity Engine, this second project will be used at the start of the development to quickly iterate though prototypes to design basics mechanics of the game.

After that was done I needed to setup our custom library that we will have to develop, called AerLib that will be where our game core mechanics will be implemented.

Then I setup the CMake configuration and finished the VisualStudio project configuration.

When that was done I needed to document everything, from how and where to access the repositories, to how to name the files in the project and the branches in GitHub.

I created tests and verifications using TravisCI, and created a bot which run on a RaspberryPi that checked if the current build was broken or not and alert us on discord. The testing procedure was stopped mid project due to TravisCI being no longer free for use.

Game Programmer

Ship Movements

When my DevOps role was mainly calm and finished I switched to the Game Programmer role, I was tasked of implementing the inputs and the movements for the ship.

The first part was simple and relatively quick, I took the raw inputs from the controllers and transcribed them into direction, I then took those directions and turned them into gestures that will be used to move the ship.

I’ve done that to clarify the code and add a layer between the raw inputs and the movements.

The next thing I needed to do was the movements that was mainly three tasks into one, the first one was the basic movements of the ship (Forward, backward, turning…), which needed to be “fun”, the second was the hover mechanic, the ship need to hover above the ground at a certain distance and to have a realistic movement, the last one was the rotation mechanic, the ship will need to rotate according to the slope of the terrain it is currently standing on.

The first movement task was simple to implement, but really hard to make it fun, the ship control using two joysticks that control the propellers on each wing, the mechanic is not intuitive to new players so I had to iterate and test though many control possibilities to find a control scheme that was intuitive and fun. That took me a very long time, much more from what was expected.

For the hover mechanics the problem was that is needed to be somewhat realistic, so I implemented a PID controller into the hover control to dynamically adjust the force that was applied to the hover, which worked great.

The last part was the part that took me a bit to find a solution, I needed to create new Quaternions functions into the engine to be able to get the correct rotation between the normal of the ground and the current ship rotation. In the end I succeeded but this part was nerve wracking, as quaternions are not the most intuitive things to calculate.

Audio Integration

In the last part of the project, when the gameplay was finished and we were in the polishing phase, I was tasked of implementing the audio into the game. There was already an AudioManager, I needed to call the correct sound at the right time in the game.

I implemented menu sounds that played at the press of a button or at the change of a selection item, I made the engine sound change pitch when it accelerate, giving the impression that it was running faster to accelerate, I also called sounds when the ship was colliding into walls, obstacles or other players. Finally I added a lap sound each time a player made a new lap in the race.

Conclusion

Final project

The game is finished and working well with many features that we wanted inside it.

My opinion

As my first big project compared from what I have done before, I’m happy and impressed by what we have achieved during 8 month.

For a lot of tasked I should have asked more help, that would have made my speed up in some parts of my tasks.

The project was a nice experience to develop and to plan, but we will not push it any further into development.

What I have learned

This project made aware of a lot of skills I was lacking, not only in programming but also in project structure organization and team cooperation.

I leaned many technical skills during this project which will help me further into developing games.

Thanks

Externals

  • Nicolas Schneider
  • Amandine Coget
  • Sylvain Cardin
  • Chris Wulf

Unofficial testers

Thanks to the teachers

  • Elias Farhan
  • Nicolas Siorak
  • Frederick Dubouchet
  • Nicolas Vallee

Thanks to the team

  • Tools team
  • Art team
  • Audio Team

Thanks to the Leads

  • Sebastien
  • Simon
  • Luca