Master Key Pocket - a text-less adventure

Master Key is a Zelda-like with a great focus on exploration and non-verbal dialogue. This is a demake (or a spin-off?) of said game with different elements to create a unique experience for playdate users.

How I discovered this game and why I decided to make a demake of it

Earlier this year, I made a demake of Tunic for the Game Boy Color with GB Studio and a huge inspiration from early Zelda games (especially Link's Awakening). This is the first time I ever made a game publicly available and although it wasn't as popular as other demakes made with GB Studio, it was well received by many who tried it, especially by the Tunic community as it served as an example of what it might look like.

I was flattered by the reception and decided to look further for any mentions. I ended up finding a comment on Reddit about a very similar game but with a greater focus on exploring called Master Key. I liked it, so I searched for more information and managed to find a Discord server where I could talk to the developer. The server is very small but the people are nice and the developer was happy to let me make a demake of Master Key. The suggested platform was the playdate since it was very requested.

Originally, I wanted to remake the game with the playdate's SDK but since it isn't currently compatible with arm-based Chromebooks, I decided to stick with pulp. At first, I didn't like the resolution and limited movement but later on, it made it easier to work anywhere, whenever I wanted.

What has been remade so far

  • Most of the essential tile sets have been faithfully downscaled thanks to the support of the dev.

Downscaled, need some polishing


  • HUD Most of the HUD elements work, except the life gauge (which is based on this thread).
    It's only limited to 4 full halves. Perhaps I could add 2 more variables that represent the second line. but then again it will continue drawing on the first line.

  • Look at it go!|120x80, %
    Basic Movement Animation


It only has been a month and a half since I started working on this, so there's not much to show as I'm still learning how to use pulp. There are still some things that need to be added, so I'll be more active in #pulp if I get stuck on something. This is the first time I have written a development log during development since I typically write one after finishing. I'll be making some updates by the end of every month but I can't guarantee that they will be as long as this one unless I would explain a certain feature.


This is looking really cool, the downscaled art looks great! Accurate but gets across clearly the "demake" vibe.

Thanks, that's the idea, but I'm trying not to make it feel like a worse version of something that already exists.

Never heard of Master Key before but I am ALWAYS down for a Zelda-like!

Update #1
It's been a while since I haven't posted anything here (apart from the Playdate Squad discord server). I've been working on a few major features like a combat system and health system (I'll explain how it works later). I'm almost done with the fundamentals to move on with the game's world. For now, I plan on recreating the demo as closely as possible and mixing things up with some new areas, items, and characters. The title of this demake may now be called Master Key Pocket to differ from the original game.

What has been made so far

  • Combat System & Enemy AI

Enemy Test Room
It's far from perfect, enemies can't handle more than one hit and they can only move in "black" tiles. I previously tested with a script that allows movement on any tile but it doesn't work with multiple enemies, so I'll save it for special enemies that only appear in one screen. As for the fox protagonist, needs to have a knockback and a hurt animation when being hit.

  • Coins

collect 'em all

There are 3 types of coins with greater value than the last. These can be collected and gain health until it reaches your maximum and it even changes the icon, just like in the original.

  • Non-verbal dialogue

sample text
This will be more focused once I start working on the game world. It's going to be challenging to see how many expressions I can make with no text whatsoever and with pictograms that are as small as 8x8.

  • Improved life gauge

Heart Test Room

The Life gauge can finally draw another line of hearts when the previous one is full. It's basically 4 different life gauges that sync with each other.

Here's how it works

First, it converts all empty heart halves to fill empty hearts, in addition to drawing all empty heart rows.

MaxHearts = HalfMax
	MaxHearts /= 2
	HPEmpty = ""
	HPEmpty2 = ""
	HPEmpty3 = ""
	HPEmpty4 = ""

Then, it determines how many hearts need to draw on each line. If the last line reaches its maximum amount of hearts (in this case 4), then the last line only draws its max and the next line adds the current value of MaxHearts and subtracts the amount of the last one. This number multiplies as many rows are added.

HP1Max = MaxHearts
    if MaxHearts>=5 then
		HP1Max = 4
		HP2Max = MaxHearts
		HP2Max -= 4
	if MaxHearts>=9 then
		HP2Max = 4
		HP3Max = MaxHearts
		HP3Max -= 8
	if MaxHearts>=13 then
		HP3Max = 4
		HP4Max = MaxHearts
		HP4Max -= 12

it then draws the given amount of hearts to every line. The way loops work in Pulp is that while x is greater than 0, do y and substracts x and repeat until is no longer greater than 0.

	while HP1Max>0 do
		HPEmpty = "{HPEmpty}{embed:lifeempty}"
	while HP2Max>0 do
		HPEmpty2 = "{HPEmpty2}{embed:lifeempty}"
	while HP3Max>0 do
		HPEmpty3 = "{HPEmpty3}{embed:lifeempty}"
	while HP4Max>0 do
		HPEmpty4 = "{HPEmpty4}{embed:lifeempty}"

then, it does the same thing with the actual hearts as we did with the empty ones.

    HP = HeartHalf
	LifeString = ""
	LifeString2 = ""
	LifeString3 = ""
	LifeString4 = ""
	HP /= 2

It needs to find a way to know when the heart is in half or not. This is where a variable I dubbed as MasterHalf comes in. For some reason, when the HP reaches 3.5 or 4.5 the first line draws more than it should hence when HP reaches those values it does the same thing as it reaches 3

    HP1 = HP
	MasterHalf = HP
	MasterHalf = floor HP
	MasterHalf -= HP
	if MasterHalf!=0 then
		if HP<=3 then
			//Bugfix starts here
		elseif HP<=3.5 then
		elseif HP<=4.5 then
			//Bugfix ends here
		elseif HP<=7 then
		elseif HP<=11 then
		elseif HP<=16 then

repeat the same thing as we did with empty hearts but with full hearts.

	if HP>=4 then
		HP1 = 4
		HP2 = HP
		HP2 -= 4
	if HP>=8 then
		HP2 = 4
		HP3 = HP
		HP3 -= 8
	if HP>=12 then
		HP3 = 4
		HP4 = HP
		HP4 -= 12
while HP1>0 do
		LifeString = "{LifeString}{embed:lifefull}"
	while HP2>0 do
		LifeString2 = "{LifeString2}{embed:lifefull}"
	while HP3>0 do
		LifeString3 = "{LifeString3}{embed:lifefull}"
	while HP4>0 do
		LifeString4 = "{LifeString4}{embed:lifefull}"

And finally, it draws the heart halves if there are any.

if MasterHalf!=0 then
		if HP<=3 then
			LifeString = "{LifeString}{embed:lifehalf}"
		elseif HP<=7 then
			LifeString2 = "{LifeString2}{embed:lifehalf}"
		elseif HP<=11 then
			LifeString3 = "{LifeString3}{embed:lifehalf}"
		elseif HP<=16 then
			LifeString4 = "{LifeString4}{embed:lifehalf}"

Here's the draw function

// Draw Empty Hearts
	if HPEmpty!="" then
		label "{HPEmpty}" at 20,1
	if HPEmpty2!="" then
		label "{HPEmpty2}" at 20,2
	if HPEmpty3!="" then
		label "{HPEmpty3}" at 20,3
	if HPEmpty4!="" then
		label "{HPEmpty4}" at 20,4
// Draw Full (or half) hearts
	if LifeString!="" then
		label "{LifeString}" at 20,1
	if LifeString2!="" then
		label "{LifeString2}" at 20,2
	if LifeString3!="" then
		label "{LifeString3}" at 20,3
	if LifeString4!="" then
		label "{LifeString4}" at 20,4

Update #2
Unfortunately, I wasn't able to work on this project as much as I wanted to. This month's plan was originally focused on improving the game's combat system but I drifted away from that and ended up making the inventory screen (or subscreen). Unlike some of the major additions, the inventory screen is nearly complete, and is very different from the original since it uses the crank. Here's a small side-by-side comparison (all of the icons are placeholders excepy the key).

Original (may look outdated)


Some things had to be cut to have space like the hud and the whole selection screen had to be reinvented to take advantage of the crank but looks good enough to me. The crank concept is inspired by The Legend of Zelda: Twilight Princess for the Gamecube where you use the C-Stick to select the item from a wheel and use the face buttons. I decided to use the D-pad to do other actions like manually saving the game (if autosaving isn't trustworthy), opening a fullscreen map, exiting the game, and other options by double-taping on the D-pad; these don't work at the moment. Here's the crank wheel in action.

I also made some other small additions like the GIF below but the inventory screen is the bigger showcase as this is a concept I had since I started thinking about how Master Key would work on the playdate. I've been busy these past few weeks and I can't promise that I'll be able to post an update for the next month.

Also, Happy Halloween to those who celebrate it as we don't celebrate it here.