Level Counter

Story: 60, Challenge: 0.

Saturday, January 26, 2013

Level count milestone and some design philosophy

Today marks a milestone in Pachinguys development. It has come a long way from the humble PC prototype it was just half a year ago. The prototype had three elements (pegs triangles and triggers). The game now has:
Pegs, triangles, triggers, bridges, retractable blocks, portals, fans, and upside down triangles

The prototype had one level and no menu system. The current level count stands at 28 story levels and 2 challenge levels, which brings us to a grand total of 30 levels! This is still far from the 70 levels total I want for the final game (60 story levels, 10 challenge levels). But the game is definitely progressing, and progressing well.

When I started working on Pachinguys I didn't know if I could create enough content (levels) without breaking my design guidelines. I believe I was (mostly) successful so far. My level and element design guidelines are:

1) No randomness. Every outcome should be predictable (once a mechanic is learned). In theory, if you know how the mechanics work, you should be able to solve the level in your head before proceeding to implement your solution in one go.

2) No reflexes. Every level needs to be solvable (with the minimum number of guys used) regardless of the players "speed". Levels that do require timing to solve must be forgiving in the sense that they do not require that the player reply the entire level just to get to the timing based part again. Levels that do not follow this guideline are currently considered challenge levels.

3) Maintain the pyramid shape. I believe a game should maintain a constant look and feel, and the general triangle shape of levels is part of that look. While I do at some levels add elements outside of the pyramid, I never remove any part of the pyramid. And I try to keep additions to a minimum.

4) a story is nice, but game play comes first. Many cool element ideas were scrapped because they contributed too little to game play. (Jet packs, slingshots, traps, to name a few). If it doesn't provide an interesting addition to the puzzle, it isn't in the game.

In general I strive to make this game as pure a puzzle game as possible. But the main intention is to create a game that is easy to learn and fun to play. After all, that's what games are all about.

Friday, January 18, 2013

Level sets, level unlocks, and persistant data

Much has happened to the good old levels system. In the last post I've mentioned creating the first of (hopefully) many challenge levels. To allow for different kinds of levels a new system was put in place. The main menu now enables you to choose the type of level you want to play (currently only story (regular) and challenge levels are available). As well as do some other stuff (more on that later). Once you choose a level type, the old level select menu pops up. However it is now specific to the type chosen and shows only those levels.

The old level select menu has also been improved. It now locks levels that are unimplemented or not yet unlocked. A level is unlocked by beating the previous level. (Naturally level 1 of any type is never locked).
This is all well and good. But when the game was closed it would "forget" which levels were already unlocked and lock all but the first level again. in comes androids shared preferences, which essentially act like a simple data base, allowing for storing pairs of string keys with primitive (int, bool, string) values. So now I have a simple data base of which level was unlocked, which I read to create the level menu. Naturally this data base is updated every time a level is unlocked. The same infrastructure will be used in the future to maintain the scores achieved on each level.

This whole thing of course makes it somewhat difficult to test new levels, so an "unlock all" button was added to the main menu to simplify testing. And a "clear data" button was added for testing as well. It completely removes the database.

(Initially all levels are unlocked -> After solving three levels -> Cheat by clicking unlock all in the main menu -> All implemented levels unlocked).

 A few other things were done, a new story level was created bringing the total to story: 23 challenge: 1. The blog was slightly redesigned to be easier to read thanks to some constructive criticism I received recently. So the lesson here is, let me know what you think, it really helps.

Saturday, January 12, 2013

More levels, bug fixes, and components library link

I've spent most of my time lately on creating new levels. The current level count now stands at 23. Level 23 marks the first of the "challenge levels". It requires expert timing and skill to solve (took me about 10 tries to get it right!). The plan at this point is to create several challenge levels based around unifying concepts (timing, specific elements, etc) and make them optional in the level menu. Every challenge concept would have its own level order (so solving Timing1 would be a prerequisite to playing Timing2, but not for playing any non timing challenge level). This all depends on my ability to create enough interesting challenge levels so it may not end up on the final version.

Fans have been giving me a lot of trouble lately, behaving in a seemingly random fashion. But I believe I've finally resolved the issue. The problem was not in the fans at all! It was in the way in which levels are translated from the levels file. I had now made sure all the blocks (elements) are in place before I initialize them (start up fans, pull up bridges, etc). So now all elements should behave as expected.

in the previous post I mentioned I've been working on a component based java architecture. I'm proud to say it is now done, complete with example components and test cases, and available on github. The repository contains the architecture in jar form (in the jars directory) and the testing and usage examples eclipse project. Feel free to browse and use it as you wish.