Lucerna was my first major project in C. Through it I learned a lot about systems level and graphics programming, such as working with OS and graphics APIs and structuring my codebase to separate platform dependent components.
It featured a windows platform layer; 2D OpenGL renderer with post-processing effects such as bloom, grain/noise, gaussian blur; custom hash table implementation; custom serialisation format; custom arena based memory allocation; an immediate mode user interface for developer tools; an in game level editor; asset and shader hot reloading/recompilation.
Although it is unlikely to ever be finished as a game, I had a lot of fun working on it, and the lessons I learned during my time with the project have been critical to my progression as a programmer.
The source code is available here.