About Me
Hello and welcome!
I'm Nick De Breuck, for some people known as Rising Liberty.
I'm an Engine Programmer/DevOps Engineer currently employed at Rocksteady in London, UK.
I've been working in the game industry since 2019, after I graduated from Digital Arts & Entertainment in Belgium.
I discovered the beautiful art of programming back in 2015, when I started my studies at Digital Arts & Entertainment. Ever since then I took a deep-dive into C++ and what happens under the hood of a computer.
Most people say I work too much, but I consider working and programming in general as a hobby. Therefore it's not unusual for me to code 12 hours a day, as I just continue after my day job finishes, or I wake up in the night to fix that one bug I had the day before.
Over the years I've been looking more and more into the world as whole and how different systems have to work together, which is why I've been looking into development operations to automate and improve workflows where I could.
C++ is in my heart and soul which is why I decided to join the ISO C++ meeting in Prague in 2020. This was luckily right before covid which is why we were able to have a nice dinner together and take a picture.
I've learned a lot from the gathering, it's very inspiring and I recommend everyone who'd like to see how the language develops to join and share your thoughts and opinions.
Blog
Projects
I'm currently working on 3 main side projects.
Rex - Game Engine
Rex is a 3D Game Engine written from scratch. It's co-developed by myself and my brother (Dave De Breuck)
Rex Standard Library
I'm developing my own C++ standard library which is used in Rex.
The goal of this standard library is to have a consistent standard library, that is cross platform, focused on game development and more performant than the ISO C++ standard library.
C++ Project Template & Toolchain
I'm developing a C++ project template and toolchain to easily make C++ projects that work for every compiler, on every platform.
The template supports compiler selection or a combination of multiple compilers. Unit tests to test your changes. clang tooling (eg. clang-tidy and clang-format).
Rex - Game Engine
Rex is a 3D game engine written from scratch. it's co-developed by myself and my brother (Dave De Breuck)
The engine is written in C++ and is still under development. The engine is based on both mine and my brother's experience in the industry.
At the moment not much is supported as our professional life is very busy. I'm also still working on the toolchain which will be used by Rex and on the Rex Standard Library, which means proper development for Rex can't start until that finishes.
If you are interested in looking what we have at the moment, you can get the source code here
Rex Standard Library
Rex Standard Library is a custom library written in C++, based on the C++ Standard Library that comes with every major compiler. It is mainly used in the Rex Engine but you can use it for any C++ projects you like as a replacement for the C++ standard library.
You can find the source code of this project here
Motivation
Most games get developed on Windows machines, and most people who don't work at a company with pre existing code have to use the C++ standard library. the one that comes with MSVC, the default compiler with Visual Studio, is very hard to read and debug.
Another reason why I started developing my own standard library is because the C++ standard library is stuck with choices made decades ago that have proven to be bad. (eg. std::vector
That's why I started writing my own, to resolve the performance issues in the existing C++ standard library that comes with MSVC. I know that other compiler have their own standard library implementations, but not all of them are compatible with each other, meaning that if I wanted to have a cross platform project, sooner or later I had to use the MSVC C++ standard library which I know is slow.
Lastly I also treat it as an experiment to break the dependency on the C standard library. A lot of C code is hidden behind a library, which means this cannot get inlined, which again hurts performance. C also doesn't support function overloading, meaning a lot of similar functions are created (eg. abs, labs, llabs), Rex Standard Library uses C++ overloading support to simplify coding and improve the functions where possible.
Supported headers
-
Utilities Library
- chrono
- functional
- initializer_list
- optional
- source_location
- type_traits
- utility
-
Numeric Limits
- cfloat
- cinttypes
- climits
- cstdint
- limits
-
Error Handling
- assert
-
Strings Library
- cctype
- format
-
Containers
- array
- vector
-
Numerics Library
- numbers
-
Input/Output Library
- ios
- iosfwd
- iostream
- istream
- ostream
- streambuf
Partially supported headers
-
Utilities Library
- cstddef
- cstdlib
- ctime
-
Dynamic Memory Management
- memory
-
Strings Library
- cstring
-
Containers Library
- forward_list
- list
- map
- multi_map
- set
- unordered_set
-
Iterator Library
- iterator
-
Algorithm Library
- algorithm
-
Numerics Library
- numeric
- cmath
- ratio
Not supported headers
-
Utilities Library
- csetjmp
- csignal
- cstdarg
-
Utilities Library
- any
- bitset
- compare
- expected
- typeindex
- typeindex
- variant
- version
-
Dynamic Memory Management
- memory_resource
- new
- scoped_allocator
-
Numeric Limits
- stdfloat
-
Error Handling
- cerrno
- exception
- stacktrace
- stdexcept
- system_error
-
Strings Library
- charconv
- cuchar
- cwchar
- cwctype
-
Containers Library
- deque
- flat_map
- flat_set
- mdspan
- queue
- span
- stack
-
Iterators Library
- ranges
- generator
-
Ranges Library
- ranges
- generators
-
Algorithms Library
- execution
-
Numerics Library
- bit
- cfenv
- complex
- random
- valarray
-
Localization Library
- clocale
- locale
-
Input/Library Output
- cstdio
- fstream
- iomanip
- spanstream
- sstream
- syncstream
-
Filesystem Library
- filesystem
-
Regular Expressions Library
- regex
-
Atomic Operations Library
- atomic
-
Thread support library
- barrier
- condition_variable
- future
- latch
- mutex
- semaphore
- shared_mutex
- stop_token
- thread
-
Concepts Library
- concepts
-
Coroutines Library
- coroutines
C++ Toolchain
Motivation
I have many C++ projects and every time I had to make a new one, I had to go through a lot of effort before I could start going.
Over the years of developing games and libraries, I noticed that it's too easy to make a mistake, causing a bug or a crash and therefore hurt development. This isn't that bad in small projects, but as soon as your project reaches a certain size this becomes more of an issue and at that point it's a lot of work constraining yourself to avoid making those mistakes again. That's why I started making a C++ toolchain.
The toolchain supports all major compilers (MSVC, Clang and GCC), it auto runs clang-tidy and clang-format with default configuration set for you if your compilation succeeds A python file is provided which is run post build. by default, this runs clang-tidy and clang-format which I recommend you keep as this provides extra safety in your codebase.
Lastly, before you push to your main branch, unit tests will run to make sure you haven't broken anything, which you'd have to fix later.
I'm still working on this so the source code is not yet available for this
Experience
Rocksteady - Engine Programmer/DevOps Engineer
May 2022 - Present
I joined Rocksteady, initially for a engine programmer role, but given my experience at Creative Assembly, we came up with a different role which is a hybrid between engine programmer and devops engineer.
As of May 2022 I joined Rocksteady, trying to improve the engine of Suicide Squad: Kill the Justice League as well as trying to improve the workflow making the game going from building tools in Python and C#, to using ImGui to add new debug UI to support developers where possible.
Creative Assembly - Engine Programmer
January 2022 - May 2022
Over the years at Creative Assembly, I started doing more side work that was more devops related. I spent hours in the evening trying to optimize workflow or build systems we used for Total War projects, both released games as well as games that are still in development.
Over time, when I had some time left over I had more devops work thrown my way (eg. I ported Warhammer 2 from an old build system to the new one, saving a lot of time for all programmers).
Eventually I made the decision to join the Core Tech team of Creative Assembly, and I became responsible for all Total War projects low level technology (boot, shutdown, build system, string library) and workflow optimizations.
I was a "bullet" programmer looking through the codebase for optimization possibilities (both runtime as well as readability) as well asking around to developers for their workflows and possible improvements for them.
Creative Assembly - AI Programmer
September 2019 - January 2022
I joined Creative Assembly in 2019 as an AI programmer straight graduating from Digital Arts & Entertainment. Usually graduate hires start out as a trainee, I was lucky enough to start out as a junior due to my deep level knowledge of C++, and quickly able to think on my feet. Something I'm very proud of.
I joined the Total War team and was an AI programmer on Warhammer 3.
Skills
The following are the skills and experiences I've gathered over the years
Programming Languages
- C++
- C
- C#
- Python
Libraries
- ImGui
- SDL
- SFML
- Qt
Systems
- Build system
- CMAKE
- Sharpmake
- Premake
- Source Control
- Git
- Perforce
- Engines
- Unreal Engine 4
- Unity
Graphics APIs
- DirectX 11
- DirectX 12
- Vulkan
- OpenGL
Platforms
- Windows
- Xbox
- Playstation