I have been working on a zuma/luxor/puzz loop style (what is this genre called anyway? ) game for about a month now in my spare time and it has come along quite well so I decided to share the progress here! I will post updates here and hopefully the accountability will help to motivate me to finish the game...
So far I have finished basically all of the core gameplay + built a small editor application to design the levels with. This type of game works really well with the crank and I think the game is a lot of fun and a great fit for the playdate!
I recorded some short videos using mirror - the game does run on device at 50fps even while mirror is connected, however the audio on the mirror side was all garbled so I ended up limiting the refresh rate to 30 while mirror is connected.. not ideal but something I would look in to later...
'Gauntlet' mode is an infinite game mode on a random level where a new ball 'color' is added every 2000 points. It just continues until game over.
'Adventure' mode progresses through all of the levels in order and should add a new ball color every so often. I currently only have 2 test levels so it just loops those and adds a new color on every loop I guess once the player completes enough levels it would go to some kind of 'yay you beat the game' screen as well, but none of that is implemented atm
The levels are pretty much just splines so the editor application is just a basic curve editor + a few other bits and bobs. It's not really fit to be seen by human eyeballs but here it is anyway:
Not much progress from the last few days - I adjusted some of the intro/exit animations from the rounds, made a couple of new levels and made it so each level can have its own background
Next things are
Fix the ‘warning’ sound that plays when the balls get close to the end spamming if the head of the first chain is constantly moving back and forth across the threshold (you can hear it a few times on the first map in the video )
Make more levels
Implement proper difficulty curve (Changing ball distribution, ball colours and ball speed as player progresses through the levels)
Implement main menu / level select and etc
Think about changing the whole sound design to a more lowfi/chill feeling
I did some work on the HUD UI. I added a label for the level that the player is on + a bar which fills up as you score points until you hit the point threshold where new balls stop spawning in. I also added support for simple drop-shadows to the clay playdate renderer and added shadows to the text and ui containers which helps to make them stand out a bit more.
The score number shown in the UI now also tweens to your new score instead of instantly jumping when you score points.
I found and fixed a bunch of issues caused by floats not being rounded to the nearest pixel in the playdate renderer as well... once the game is shipped I will make a PR to clay with all the fixes I have made to the renderer. It was really nice to have a UI library though and be able to play around with padding, borders and stuff without having to manually draw everything.
I also figured out that I had an old version of mirror installed; with the latest version + a better USB cable I can capture from the device without any garbled audio & without limiting the framerate to 30fps! Yay! Youtube compression still does a number on the quality though... Anyway here is a video showing the HUD updates:
I made some updates to the graphics to try to make the balls look a bit more spherical. I added a very simple shading to them and also adjusted how the shadow is drawn so they look more like they are connected to the track and not just hovering. I don't want to add a lot of shading because I'm worried that it will make the 'colours' hard to tell apart on the PD screen...
I started to get the idea to make 'rolling' animations for them, but as the tracks can go in pretty much any direction it would be quite a lot of work to do all of the directions + I would have to add some kind of pattern to all of the balls so you can see they are rolling... so I probably won't do it
I also added a dissolve animation for when balls get destroyed which replaces the simple fast flashing that they did before. I also increased the amount of time that it takes for balls to animate out by a small amount (like 100ms to 200ms).
This video shows it the dissolving balls:
I'm still not sure how to make youtube videos of the game that actually look good. It seems like youtube is reducing the framerate and adding a lot of compression artefacts to the video when they process it... the mp4 I get from mirror looks super smooth and crisp (and not even big file size, like 10mb for the video above), but in youtube it's just bleeagh. Oh well...
I worked on the UI for a bit; probably my least favourite task since I basically burned out working as a UI programmer in AAA games before
I updated the main menu to look a bit nicer - still planning to add a path in the background with some balls that just move around on it endlessly, and still need to make a proper logo for the game...
'Polku' just means path in Finnish, and since the game is about balls going down a path...
I started to flesh out the level select menu a bit. It lists all of the levels that the player has unlocked and organises them by stage. Since all that is really different in the the stages is the number of ball colours, I also added the balls that are in the stage next to the stage header.
The level picture is shown as a thumbnail, and I will eventually have it draw the level's path there as well so the levels are recognisable. The text shown to the side of each level is just a placeholder for now - when I implement the tracking for high scores it will show the player's best score or time against each level (depending on if you are playing in infinite mode or the normal mode). It will also show a par score/time there and some kind of check icon if the player's score is better. The idea is that the player can use this to track if they have 100%ed each level by beating the par score.
There is a small animation on the A button icon, but otherwise I did not add any animations or transitions yet. I will do it later!
Another thing I worked on was some performance optimisation. Since updating the visuals for the balls I noticed that when there are more than say 60 balls on screen the FPS would start to drop. This was because I was still drawing each ball in multiple steps with drawEllipse/fillEllipse and also setting the stencil each time for each ball to do the gray parts. I'm using the stencil for the gray parts because I use a 50% white/black checkboard pattern - it falls prey to dither flashing when the balls move if it's just drawn as part of the sprites
I fixed the performance by drawing sprites for most of the parts of the balls, and by batching drawing the gray parts so I don't need to set and clear the stencil for each ball. The process for drawing the balls now is pretty much:
Draw all the ball shadows (this also uses stencil)
'Clear' the background where each ball will be drawn with a white circle
Set the stencil and draw the gray parts for all the balls (since they have shading now pretty much all balls have it)
Draw the main sprite for all the balls
Even though I'm now looping through all the balls multiple times, it still ended up being faster than looping through them once and running through all the steps to draw them for each ball in turn.
edit: seems like image uploads are not working? anyway - you can see everything in the youtube video!
I have worked on the UI and the save game system in the last few days. Actually a lot of changes but nothing really related to gameplay...
The game now has a progress system which unlocks levels as the player progresses. It's a simple system that just unlocks them one by one. When a level has been completed in the normal play mode it is available to play in the infinite mode.
The level select screen shows the player's time and score as well as the 'par' values for each level. If the player has beaten the par then they get a lil icon shown next to their score. The idea with that is to help easily identify which levels have been fully beaten. Last thing left for the level select now is just to draw the paths for each level on the thumbnails!
I also added a 'how to play' submenu which just shows some basic instructions about how to play the game. This is available from the main menu and will also be shown to a new player the first time they hit 'PLAY' if they did not already view it.
Here I also hooked it in to the save system so it can show when the player has got a new high score or beaten the par score. I also added the functionality to press A to continue to the next level, or press B to go back to the level select (and same for game over, but A retries the level).
I also added a credits screen to the game - it's just a basic credits slider which can be sped up by holding A or down on the D-pad. Then there are also other random small things.. for example I changed the aim line to be an animated dashed line.. I'm pretty sure there are some other changes which I cant remember so I'll just add a video here with the current state of things...
I implemented a ‘demo mode’ for the game where it just loads a level and the balls endlessly move around the track. To be honest this was probably the most convoluted way to do it.. but I used it for the background in the main menu . I also started to work on designing more levels - trying to come up with tracks where gap shots can be had and the bomb balls can be used tactically!