I had time to work intensively during these 10 days... to create a game engine from scratch. Custom made for the jam.
The engine is for now called "OOM Engine" (OOM stands for "Out Of Memory" ). This is a 3D game engine made in C++17 with DirectX 9 and OpenGL 3 (not really a cutting edge DX12/Vulkan engine) holding in exactly 350 KB, with all dependencies and without any kind of compression. You can check the sources here.
Implemented features :
- Import of 3D models from .obj files (OBJ are really easy to read !)
- JPEG, PNG textures (Supporting both is good because there some cases where one performs better than the other etc.)
- 3D audio (stereo panning) .wav and .ogg - ogg is a very good compromise, but libvorbis and libogg have a cost. +100 KB
- Basic forward rendering pipeline with post-processing (Fog, AA etc.)
- Working game objects and components
- Old school GUI texts using textures instead of font files
- 3D physics thanks to a really well made and handy physics library
- Gizmos to debug the engine/game
- The whole engine is inspired from Unity.
What is not required to run the engine : a virtual machine, an emulator, downloading dependencies when the game starts (that's the case of almost all web browser games)
What is required to run the engine : Windows
Some issues I had :
- Audio... a real challenge because there are two challenges. How can I play sounds ? Which format for audio files ? The first was the most complicated.
- I tried with OpenAL -> No, OpenAL is DLL only. That means there is no possible optimization (in size) for the DLL. If we strip the DLL, the linker will yell for missing symbols, so ...
- High level libraries -> No. SDL, SFML etc. have many dependencies (including OpenAL). The problem is still the same.
- The solution : Using DirectX 9. This dependency (dsound.dll) is Installed on all Windows.
- For the file format, wav are a way to large.
- Ogg files. The best compromise but I had some difficulties to compile libvorbis with libogg.
Some screenshots (placeholders) :
First 3D model import
Grid, Point light and axis gizmos :
Lighting and post processing :
Always better with animations :
3D Sound test :
With sound, better ;) :
And voilà, 5 days and 1 MB available for the game !