7 Days to Die
7 Days to Die is a survival horror video game set in an open world developed by The Fun Pimps. The console version was published by Telltale Games and ported by Iron Galaxy studios.
What I worked on
The game is built in Unity Engine and was originally built only for PC. Adapting this to consoles involved tackling a number of technical challenges, some of which are:
- Memory and performance constraints are much tighter on consoles compared to PC, so a lot of optimizations had to be done to get the game working on consoles. Some performance and memory intensive code was converted to native code to have better performance and tighter control of memory allocations. A lot of allocations were converted to use pooled allocators and the number of allocations themselves reduced for console.
- Texture size reduction was another improvement which saved a lot of graphics memory.
- Multi threading with pooled work queues were used extensively to spread the parallel work loads of terrain generation, loading assets etc.
- Most of the audio was set to be played via audio streaming to reduce memory usage.
I worked on this project about 7 months and these were the main tasks I worked on:
- Getting the game running on the console. This involved integrating PS4 and XboxOne native plugins for unity. These plugins provide platform specific APIs to save data handling, networking, user management etc.
- Upgrading Unity version - there were some custom code changes made to platform plugins and unity engine source itself. I merged some of these source code changes to the new version. This involved understanding the code and handling API changes and get the core features working.
- UI systems including title menu and in game UI interactions.
- Asset loading improvements such as splitting up loading sections into co-routines / threaded calls to improve loading times and keep the game responsive.
- Getting the controller inputs working and fixing in game object interactions.
- Improving graphics memory utilization bugs by reducing texture and render target resoultions.
- Memory profiling and eliminating extra allocs and finding potential places to convert them to pooled allocations.
Overall, this project gave me a chance to work with a great variety of technical challenges and I had the previlege of working with a super friendly and smart team.