An Uncrank'd Game Jam's Postmortem


First Draft

After thinking of a few concepts I decided on an exploration game where you sail the seven seas searching for treasure, I kinda wanted to recreate the feeling of The Legend of Zelda: Phantom Hourglass where I remember spending  several hours exploring the sea on my DS.

Furthermore, I knew that a mode7's library was available for the Playdate and thought that it was a good opportunity to test it.

                                                                                                                         

Mode7

Mode7 originate from the SNES and is especially known with Mario Kart. This technique is used to fake a 3D effect using only sprites and reducing a lot the performance cost that would otherwise need to render a 3D object. The Playdate doesn't have any GPU, so it turns out that this technique is particularly effective on this hardware.

Mario Kart on SNES use Mode7

Hopefully the developers of P-Racing developed their own Mode7 library for the game and made it public (Playdate Mode7 Library). Now I just have to learn how it works and we're lucky, they made a demo project and a really good documentation.

                                                                                                                         

Character, Controls, Camera

The first step was to create a toy, so first I focused on the 3C ( Character, Controls, Camera ). The Character remained quite similar to the P-Racing demo scene from the library, but I added a bit of movement to the Camera.

First prototype with just controlling the boat

The biggest change was on the Controls, I wanted to use the crank in some way, and at the time a was thinking of a game much focused on the racing side. The gauge is a relic of this, cranking to fast would have caused the boat's motor to stop and highest speed would have been achieved when cranking at a stable defined speed. In the end, I focused more on the rest of the game and the gauge remained a simple speed display.

Steam's gauge prototype

                                                                                                                         

Objectives

Now that I can travel through an endless sea, it's time to define the objectives, basically, what can the players do in the game and how can they win it. I took some idea from games like A Short Hike, in which, despite having a limited area, you may find a lot of different activities (mini-games, puzzles, find secret...) to gather items that will help you reach your final goal.

Here, the final goal will be simple: collect X amount of a certain item (this will be the Crystals). This approach allows me one thing really important for a game jam: to have a working game even if there is only 1 or 2 Crystals available. And depending of the time remaining, I can create new ways to add Crystals and increase their number.

First I listed different mechanics that could be used to find those Crystals:

  • Path to follow, possibly in a limited time
  • Finding item in the ocean with a Salvage-arm ( some items will be hidden )
    • Finding Crystal directly or
    • Finding Bottles to show hidden spot on the map
  • Hidden path to follow ( show on the map after finding Bottles )
  • A cannon to shoot moving targets
  • Gathering X items in a limited time on the map to gain 1 Crystal

Passing through gates

In the end, there is 6 Crystals available, 4 to be found at specifics spot with the Salvage-hand ( 2 shown, 2 hidden ), 1 by following the path of gates and 1 last by following a precise path around rocks that will be drawn of the map after finding Bottles.

The Legend of Zelda: Phantom Hourglass (cannon gameplay idea)

                                                                                                                         

Creating the Assets

The library uses bitmaps, those are grey-scale images that will be processed by the Playdate to show a different dithering pattern depending of the grey strength. This is especially useful to sprite that will be rotated in 3D dimension like the floor of the game, the track for P-Racing and the sea for The Crystal Bay. The documentation gave a few examples using "ImageMagick" to create the right file format for bitmap as it asks a bit more processing than just drawing black and white images.

Grey-scale bitmap to Playdate dithering

All the elements drawn in the world are called Sprite into the library. As I said above, we will need a ImageTable with every possible angle of the sprite to fake a 3D object. To help us with this process there is also a demo Blender's project in the Mode7 library that will help us. This Blender project contains a script that will automatically take images of the given 3D model at a given angle interval. For example, I asked the script to take an image  of this Tower every 40° ( Yaw rotation ) so it created a total of 9 images. Once in the game, the sprite is shown accordingly to the camera's angle.

Tilemap example

Here, I took some assets from Kenney's Pirate Kit and Kenney's Watercraft Kit and applied this processed. One issue I had was caused by the overused of dithering, this made the game really hard to read and is still a point that could be greatly improved in my opinion. To fix this issue, I added a coarse outline in Blender for each element before.


Blender Mode7 process

One downscale of this is that the fewer image is taken the more the object seems to jump between frames. And here is just a simple example, we need more images depending of the distance of the object ( we can this this for the rocks behind the tower ), and even more if we want to animate these objects or add Pitch rotation. So if we don't limit the number of frames, we could end up with the Playdate having issues to retrieve all the necessary images fast enough.

Tower Sprite in-game's result

                                                                                                                         

Finishing touches

One thing I worked on in parallel was the map, some gameplay needs it and as the game is heavily based on exploration, it seemed like a must-go anyway. I first created a dynamic map, generated on the fly during the game execution, while it didn't looks really good and it helped me to place all my elements in the game ( filled circles are sprites like rocks, tower, buoys and the outline circles are the hidden detection zone ).

Once all my elements were positioned correctly, I just had to take a screenshot, export it to Aseprite and draw my own map following the given arrangement as well as the hints that could be found in the Bottles.

Generated map with in-game objects          -         Drawn map                            

One final step was to add some UI elements, Animations, Sounds, Music and Start / End Screen and voilà!


Salvage-hand animation

                                                                                                                        

I feel like this game could end up being a real nice little chill exploration game with more polish and content so I don't know yet if this project will evolve to the point of a full game one day but I'm keeping this idea not far from my keyboard.

I leave you with a few resources if you are interested for more, thank you for reading up to this point and I hope you found some interesting information in this melting-pot. See ya!


                                                                                                                       

Resources

P-Racing's Mode7 Library - Once again, the library is really strong and clean so if you want to learn more about it , go for it!

Atlantic 41's devlogs - If you want to dive deeper into devlogs, Stephan Rewind write a lot of incredible articles that helped me a lot on some aspect of The Crystal Bay ( I never change the really similar placeholder sky besides, sorry 🙏 )

A Technical Survey of 3D Graphics in Playdate Games - A really nice compilation of every 3D techniques that currently exist on the Playdate

Uncrank'd Jam Game List - All the games submitted at the game jam at the same time that The Crystal Bay. If you haven't yet, do not hesitate to try all the other games as every one of them are worth your time!

Files

The Crystal Bay - Post Jam Reduced Size 6 MB
May 12, 2024
The Crystal Bay - Jam Version 73 MB
May 12, 2024

Get The Crystal Bay

Download NowName your own price

Leave a comment

Log in with itch.io to leave a comment.