Design: Level loading
In this article I'd like to talk about how I stored the levels in Lazy Farm and Toy Box Pipe.
The map memory in PICO-8 is a matrix of 128 x 32 tiles or 128 x 64 tiles if you take half of the sprite memory. This is not a lot of space if we don't use it wisely. For example, in the Jelpi demo there is a single short level and it already takes almost all the space available.
Lazy Farm is a sokoban-like game with single-screen puzzles. In PICO-8 the screen is 16x16 tiles so the map memory would be filled with 32 o 64 levels.
Most of the puzzles only use a small fraction of the screen and I had in mind to publish the game with more than 100 levels so using a slice of 16x16 for each of them would be a waste of memory.
At the end I decided to use a similar approach to the texture packing used in 3D games: I placed the level as tight as possible only storing the parts that are used in the gameplay.
Here you can see that a single screen can hold 4 packaged levels.
I created an array that holds the information for each level in the following format:
{ name = "Level 1-1", -- Top left corner of the level x0 = 0, y0 = 16, -- Lower right corner x1 = 5, y1 = 20, }
For convenience I left the top-left screen blank. When a level is loaded a fill this area with an empty brown tile and then I copy the tiles from level one by one in the center of the screen. This is so the level rendering function is just a call to "map()".
The actual code for Lazy Farm is bit more complicated because I have to check some special tiles that need to be converted into entities. You can take a look at the implementation by opening the cart in the PICO-8 editor or in the BBS.
Files
Get Pico Lazy Farm
Pico Lazy Farm
Farm-themed puzzles
More posts
- Tutorial: Game scenesJan 08, 2020
- Tutorial: Minimap in PICO-8Nov 28, 2019
Leave a comment
Log in with itch.io to leave a comment.