Home > Projects > Unnamed 3D Puzzle Adventure Game

Unnamed 3D Puzzle Adventure Game

Andrew Jon Haman

[This page is in development.]

The game centers around hyper-connectivity of Time and Space. A large, abandoned chamber houses portals, connecting one island to itself again and again over a vast period time. Deflect lasers and explore the consequences of discontinuous Spacetime and uncover the many secrets of the mysterious isle.

A large goal of this project has been to help me get an understanding of every aspect of game and game engine development and thus I have commited to programming every feasible aspect of the project myself. This means programming the memory allocators/renderer/shaders/collision/entity system/asset handling/texture compression/mesh+material processing/gameplay/ui/3d editor/visual effects. The first iteration was written in a minimalistic subset of C++, using OpenGL, however I have begun porting the project to jai/DirectX12. More Information about jai can be found here, but essentially, it is a C-like language systems level language, with very-good meta-programming/reflection support, and numerous quality of life improvements over C/C++ that make it worth using for me.

The game is not trying to look good yet in terms of art direction yet, and is very much programmer art at this point, I want to spend more time fleshing out the game before beginning any serious art development because it will allow me to better fit the art to the constraints of the game. That being said, there is a gameplay requirement for some form of global-illumination. For now this is a pre-computation pass based on the same method as was use in The Witness, with a few changes, such as the implementation of this paper by Jarosz et al. (archive). However, the plan is to move at least partially to a real-time method in order to support some cool puzzles. Here is an example of how that looks. Again, the art has not had effort put into it yet, this is just to illustrate the engine tech.

Here's what the same scene looks like without lightmaps.

And here is what the debug view looks like for that. The radius of the circles shows how far away a sample is considered valid.

I run the full game loop at 180 ticks per second to reduce integration errors involved with large timesteps (and also because it's fun to make things go fast). The game loop involves the simulation of 13 simultaneous 'worlds,' each of which undergo a collision detection and response which is implemented using SIMD implementations of the GJK and EPA algorithms. In order to speed those up a bit, I implemented a spatial hash-grid to reduce the number of broad phase collision tests that must be performed. One debug view for that system looks like this,

One aspect of the gameplay requires a bunch of fun stuff involving light beams reflecting off mirrors and going through different colours of glass, which cast their own translucent shadows.

The Editor for the game is part of the same executable as the game so as to cut down on the complexity of interop between game code and editor code. I have put a decent amount of work into getting the editor workflow be intuitive and fast. Among other features, it has box select, orientation relative transformation, snapping, a text console, and some immediate mode windows. Again, all custom.