Sunday, October 9, 2016

Building a Demo for a Puzzle Based Game

Building a demo is hard. Building a demo for a puzzle game is even harder.

Epitasis is a very interconnected game. Many levels tie in together, have hubs, areas to explore, and so forth. I sat down and started thinking about a demo about a month or so ago and really tried to hammer down what it'd be like. Since players who'd be playing it wouldn't have much storyline context or build up on previous puzzle mechanics, I simply wanted to focus on different puzzle elements and what the game could offer there.

I also intended the demo for just people at events / meetups / showing friends, so I wanted to keep it relatively short so people who would play it would have a quick understanding of what the game was like. It's by no means a straight up vertical slice, but it does showcase important basic puzzle elements and truly does show off the visual style aimed for in the game. In addition to that, its also very much a great staging area to test performance, which I talk about a couple paragraphs down.

So the design I came up with is something you'd see from something like The Talos Principle, where puzzle "areas" are somewhat clearly designated. However, I made each puzzle somewhat interconnected, as in you need to solve each one to power up a central structure. Along with that, minor exploration is introduced where some puzzle elements (such as crates for pressure pads) are spread out. Terminal machines offer a small backstory into the ancient ruins and landscape, and even a secret puzzle area is included if you can figure out how to get to it.

One of the great things about building a demo also is all the stuff it forces you to think about and do. It's a great exercise in building an entire standalone level and also really makes you get stuff done. For example, this demo really made me focus on optimizations and performance, since this upcoming week I'll be showing the game at a UE4 meetup, and pretty much need it to run at a reasonable frame rate on my laptop. I had to implement a bunch of new features and optimizations, but the payoff on this was about 10 FPS saved on my laptop (a Lenovo y410p with an i7 and 765m NVIDIA GPU) so it runs stably at 30 frames locked at all high settings. Previously it would only run at about 15-20 in that area. Tweaking these settings slightly I can get it to run even higher and closer to 60, and of course on my main desktop I also saw performance gains at a 2560x1440 monitor resolution with a GTX 970. I still need to get around to testing even lower end hardware again, but I'm hopeful that I'll see big gains there as well.

I ended up having to implement new features like Screen Resolution (previously only had screen percentage), detail modes (to use with material quality), and even a Max FPS setting to help smooth out FPS for other hardware like my laptop.

Along with that, I also ended up redoing my entire puzzle and usable actor systems in C++, which most certainly helped as it made me take a harder look at some of the things I was previously doing. In the end, this new code refactor, in addition to new quality settings and material optimizations (I'm looking at you water material!) ended up making the game much more performant.

I still have a couple things left to do before tuesday to show the game, and after that I'll probably be doing more puzzle and gameplay fixes based on feedback and other ideas I have lingering. Cheers!