_ _ _ _ ___ ___ | |_ ___ | |_ ___ |_| _| | ___ ___ | _|| . || . || . || _|| _|| || . || -_|| _| |_| |___||___||___||_| |_| |_||___||___||_|
This is a (very work in progress) game engine & game where I get to experiment with a lot of game development ideas and rediscover the joy of coding along the way.
- Totally isolated platform / renderer / game layers (only Windows platform & OpenGL for now, there's also a PS4 branch which is private for obvious reasons)
- Hot code reloading (any change in the game layer code is immediately applied live)
- Looped live code editing a la Handmade Hero (press F1 and input will start recording, press F1 again and whatever was recorded will be played back in a loop.. you can still modify the code live as per the previous point!)
- Live shaders recompilation (a la ShaderToy)
- Debug overlay (tilde) & editor mode (F11)
- Infinite procedural world (WIP)
- Minimal dependencies (only ImGui and stb_image so far)
- Pure C++ without all the OOP crap (a.k.a. "C+")
If you wanna have a peek, there's usually a ready to run .exe in the dist/ folder (might be a bit outdated). Otherwise, building on a modern Windows machine should be relatively easy. You'll need to run the build.py script using any version of Python 3. If you encounter any problems, please let me know.
A list of papers, articles, sites, etc. that have been useful so far during development:
Marching cubes
http://paulbourke.net/geometry/polygonise/
http://alphanew.net/index.php?section=articles&site=marchoptim&lang=eng
Fast quadric mesh simplification
https://github.com/sp4cerat/Fast-Quadric-Mesh-Simplification
Resampling meshes using MC
http://vcg.isti.cnr.it/publications/papers/mi_smi01.pdf
Wave Function Collapse
https://github.com/mxgmn/WaveFunctionCollapse
https://adamsmith.as/papers/wfc_is_constraint_solving_in_the_wild.pdf
Dual Contouring
https://www.cse.wustl.edu/~taoju/research/dualContour.pdf
https://people.eecs.berkeley.edu/~jrs/meshpapers/SchaeferWarren2.pdf
https://www.boristhebrave.com/2018/04/15/dual-contouring-tutorial/
QEF Minimization
https://graphics.rwth-aachen.de/media/papers/308/probabilistic-quadrics.pdf
https://github.com/nickgildea/qef
After many many years dedicated to the beautiful art of programming (or 'coding' as I prefer to call it), I've grown more and more frustrated with the way software is conceived these days, what the industry considers 'best practices' and the path software development has taken in general. From a philosophical standpoint I believe this actually merely reflects the sad state of the modern world at large, but that's certainly a huge topic for another time.
In the last few years, however, thanks to the internet, I've discovered I'm not alone in thinking so, and have introduced myself to the ideas of some great minds out there, people like Casey Muratori, Jonathan Blow, Mike Acton, Sean Barrett, Brian Will, Omar Ocornut and others (to all of them, my most sincere thanks!). They showed me there is indeed another way, and above all, that this way is actually superior. This project is my first serious attempt to put some of these ideas into practice, to see where they take me.
With time, I found some of these ideas I actually knew already, I had only be taught very early on to forget about that stuff and write yet another stupid class hierarchy instead. Now I've seriously rediscovered the joy of programming, and why I started doing this in the first place. And so, just for fun, and also to make sure I don't forget these ideas ever again, I've decided to write down my very own
- Complexity is the enemy
- Quality is a metric
- Beauty matters
- Code is for people, not machines
- Your dependencies will enslave you
- Your turnaround is way too long
- Dumb code is very easy to debug
- Marrying data and behaviour is like marrying Heaven and Hell
- C++ is just evil
- When tempted to abstract away, think twice
- When tempted to design for the future, don't
- When in doubt, make it explicit
- Don't be afraid of long functions
- Focus. Pay attention. The devil is in the details