Blowbox 2015
What is Blowbox 2015?
Blowbox 2015 is a 2D game engine built using DirectX 11. I built this engine back in 2015 as part of my intake assessment to the IGAD course at the NHTV Breda University.
Blowbox 2015 is a 2D game engine built using DirectX 11. I built this engine back in 2015 as part of my intake assessment to the IGAD course at the NHTV Breda University.
- First ever C++ project.
- First time using DirectX 11.
- Embedded LuaJit into the engine for easy scripting.
- Live shader & script hotreloading.
- 2D softbody physics simulation using Verlet.
Technical specifications
- C++
- DirectX 11
- LuaJit
- Hotreloading
- 2D physics using Verlet integration
- 3 months of development time
|
First ever C++ project
This project is my first ever project I've done with C++. It is not super fancy or anything, but I am quite proud of what I did with this back in early 2015.
Basically, everything you see in this project is the first time I had ever done it: working with win32, working with DirectX 11, doing content / asset management, handling input, embedding scripting languages.
This project might as well be called "first", because that's what it is.
Embedding LuaJit for easy gameplay scripting
Once I started developing this engine, I quickly realized that doing any scripting in C++ is a quite a pain. So I decided to embed LuaJit into the engine. Lua is a language much like JavaScript - it is weakly typed and has a friendly syntax. To embed the language, I didn't use the standard Lua project to embed into Blowbox, but instead I used LuaJit.
LuaJit stands for Lua "Just in time". That means Lua is being compiled just in time. Using LuaJit over standard Lua results in great performance gains, often being more than 10-100 times more performant.
Check out some code I wrote as part of my Lua embedding wrapper here.
2D softbody simulation using Verlet integration
To accomodate the intake assignment (build something themed around Jello), I decided to build a 2D softbody simulation using Verlet integration. Verlet integration itself is a really simple concept to understand - current velocity of any particle is implied by its position relative to its position in the previous frame. This has all kinds of benefits. The thing that it is useful for in this case though, is that it allows me to write particle constraints without having to influence the velocity of a particle. I can just move the particle and everything will automatically be resolved.
That might sound a bit dense, understandably. But I recommend you to take a look at the implementation of all of this. It's actually so simple, it's quite amazing.
The implementation for the Verlet physics simulation can be found here.
This project is my first ever project I've done with C++. It is not super fancy or anything, but I am quite proud of what I did with this back in early 2015.
Basically, everything you see in this project is the first time I had ever done it: working with win32, working with DirectX 11, doing content / asset management, handling input, embedding scripting languages.
This project might as well be called "first", because that's what it is.
Embedding LuaJit for easy gameplay scripting
Once I started developing this engine, I quickly realized that doing any scripting in C++ is a quite a pain. So I decided to embed LuaJit into the engine. Lua is a language much like JavaScript - it is weakly typed and has a friendly syntax. To embed the language, I didn't use the standard Lua project to embed into Blowbox, but instead I used LuaJit.
LuaJit stands for Lua "Just in time". That means Lua is being compiled just in time. Using LuaJit over standard Lua results in great performance gains, often being more than 10-100 times more performant.
Check out some code I wrote as part of my Lua embedding wrapper here.
2D softbody simulation using Verlet integration
To accomodate the intake assignment (build something themed around Jello), I decided to build a 2D softbody simulation using Verlet integration. Verlet integration itself is a really simple concept to understand - current velocity of any particle is implied by its position relative to its position in the previous frame. This has all kinds of benefits. The thing that it is useful for in this case though, is that it allows me to write particle constraints without having to influence the velocity of a particle. I can just move the particle and everything will automatically be resolved.
That might sound a bit dense, understandably. But I recommend you to take a look at the implementation of all of this. It's actually so simple, it's quite amazing.
The implementation for the Verlet physics simulation can be found here.
textneedstobeherelol