DevLog#001 – First Game Design

I like to play puzzle games and for past few months, I was solving lots of nonograms. It’s a 2D puzzle game, where you uncover a picture, encoded with numbers on a grid.

So I started to think, how would it play in 3D? An early prototype, of which sadly I couldn’t find any screenshots, was just an direct adaptation from 2D to 3D. Hints were the same, just with an extra dimension of playspace. But it had a massive issue of being hard to read. There is no way to display 3D puzzle, all at once with hints visible as adjacent columns, there was just too much information on the screen. I needed a better design.

I figured out, if hints were to be displayed on sides of voxels, it would be easier to understand. But it created another issue. There is very limited space on each face, to display a hint, so standard ones wouldn’t fit. They had to be redesigned.

Thus, a number with upper index was born. Big number on a side would say how many blocks have to stay on that line, and another one in upper index, in how many groups.

This was so much better than just a direct port of the idea into 3D! I was happily coding the game, until I’ve reached another issue. It was way too easy. I was struggling with the concept on why, noticing that symmetric or narrow shapes were impossible to turn into challenging puzzle until I realized that there are to many hints.

Back to the drawing board, another change was required. Something that would figure out minimal number if hints that is required to solve a puzzle, without making it too easy. I’ve tried two approaches.

Brute forcing it, to find an actual minimum, which turned out to be impossible to compute on a home PC in reasonable time. I’ve dropped this idea really fast, as number of combinations to check was way to high.

Starting a puzzle with no hints, then adding them one by one until puzzle can be solved. This was much faster but I still ended up with tons of redundant hints that made it quite easy. So I’ve added another step, which tried to remove each hint, see if puzzle can still be solved and then just repeat that, until no hint could be removed. This gave me a fast and reasonably good solution for the problem. It opened up design space to any shape I would want, while still make it enjoyably challenging.