Project Description
Together with the team at Play Magic, I’ve worked on the remake of XIII, cult first-person action game that was initially released in 2003. As the Junior Audio Programmer, I was responsible for the integration of all the audio into the game. XIII is made in Unity and uses FMOD Studio as the audio middleware.
Game Description
XIII is a remake of the cult first-person action game that was initially released in 2003. You play as “XIII”, a man without an identity, in a solo campaign with numerous twists and turns. Inspired by the eponymous graphic novel, the game features a completely reinvented and unique cel-shading design. In XIII, players can also take part in fierce multi-player fights.
Tasks involved
As the sole audio programmer of the team, it was my job to help create the tools and systems for the sound designers to be able to implement the sounds into the game. The following systems and tools have been developed:
- Audio Occlusion & Gates
- Modular Weapon Audio integration
- Cutscene Video & Audio synchronization with FMOD
- Dialogue Localization
- Optimized Audio Banks loading
- Surface Detection for Footsteps
- Other smaller systems
Audio Occlusion & Gates
This system made heavy use of Unity Raycast system. It worked with raycasting between the player and the sound object to check if any objects where blocking the way. This was done with a maximum of 3 points with 3 raycasts on each side, to 1 raycast between them depending on the importance of the audio object and platform quality. There where multiple systems in place to make sure to optimize and only raycast the sounds that the player could potentially hear.
Audio gates worked in a similar fashion, but required manual positioning in engine. This person required to position both sides of the gate to raycast too. This allowed to raycast through doors, in important corners and through other objects. There where some systems in place to maximize performance, such as, only checking for gates which the player can see, as well as checking for sound distances.
Modular Weapon Audio integration
The weapon system was made modular to allow for constant iteration and improvements, as such I made it so that depending on the modules setup on the weapon, different audio values where shown for the sound designers to implement. E.g. If the weapon had Burst Fire, I added a spot that contained the parameters needed to setup burst fire audio with FMOD. This was done in-engine, allowing for quick changes and easy checks for the sound designers to make sure no big changes where happening to the weapons. The system below made heavy use of composition, to easily allow for adding and integrating more audio into respective modules.
Cutscene Video playback & Audio synchronization with FMOD
I worked on making sure that cutscene video playback and audio synchronization was working on all platforms with their respective requirements obtained and indicated to the teams making the cutscenes.
As we where using FMOD Studio, we needed to synchronize the playback of audio together with the video.
The most important was creating our own videoplayer that would integrate with the Nintendo Switch playback system, as the videoplayer of the Unity version used was not compatible with the system. As such, worked on making sure the requirements where setup correctly and documented the steps on adding more cutscenes. (I learned the hard way that spaces in file names are a big No-No! 😅)
Dialogue Localization
To make dialogue localization working we made heavy use of FMOD Audio tables feature together with programmer sounds, where one would have the same key for the dialogue line in each language, and just swap the respective banks loaded, while having the english bank as a back-up. (this was prior to FMOD Studio having localization banks available). These keys where named the same for both the sound files and text for easy reference back and forth.
Optimized Audio Banks Loading
As the weapons in each level where changing till the last minute, one needed to create a dynamic weapon audio loading system to minimise performance impact and memory usage. As such, I developed two systems, one for the player and one for the AI.
For the Player, whenever they picked up a weapon, the respective bank got loaded, and when the weapon got destroyed/removed, it was unloaded. This only happens during low gameplay moments, making the perfect times to load and unload banks. Also, the pickup sounds where separated and loaded at most times, as these sounds where important to bridge the loading gap.
For the AI, the weapon bank got loaded(once) at AI spawn, if the respective weapon existed in the level, and unloaded at the end of the level.
Outside of the weapons, I created a system which allowed for tying banks to be loaded and unloaded at either start or end of level, maximising loading screen usages.
Surface Detection for footsteps and bullet hit VFX
The surface detection system was decided upon together with the art team to make use of Material Tags. As such, I created the tools and scripts to allow both mass tagging the materials for already existing materials, as well as, the systems to obtain the tags for the materials at runtime.
Other smaller systems
Furthermore, I’ve worked on various smaller systems to help the sound design team get the best audio possible and easily upgradeable, such as:
- Spline system to put objects on so that it stays close to the player.
- Play 3d sounds around the player
- Integrated UI sounds into the game.
- Waymarks system integrated with the objectives system
- Audio Spying weapon
- I helped with profilling on Nintendo Switch to find improvements in code developed.
- Aand loots of bug fixing! 😄