Making of Kye for Playdate


Last year in August, me and Matt Sephton (aka gingerbeardman) started developing a port of Kye for Playdate as a small distraction. We expected to publish it in a few weeks… and it was a bit more complicated than that.

We eventually published the 0.1 version in October, but soon realized the game had issues. I quietly deleted the six-week mini-roadmap from our itch.io page after a few months. The complete version launches today, and here are eight takeaways from porting this tiny little game to Playdate.

Matt designed the look of the game, from the grid dimensions to the tiles, while I worked on the rest of the user interface and gameplay logic. Throughout the development, we discussed everything—sometimes in depth, sometimes just nodding and agreeing to go forward.

Note: This devlog is a twin of an article I wrote for Uncrank’d #3. That article is more focused on how we got through the development, while this one focuses on what I learned. There’s some overlap, but you might want to read both to get the full picture.

1. Community docs might be wrong

We started the development with a document called The Rules of Kye, written by Jim Babcock more than 20 years ago (it’s available online). The doc says

There are at least five implementations of Kye, all of which differ subtly in their rules. This is because the authors had nothing to go on but the previous games themselves, from which it can be difficult to determine the subtleties of the rules.

This document seeks to completely encompass all of the rules of Kye, from all versions of Kye, including the subtlest of points, so that Kyes may be completely map-compatible in the future.

And that’s extremely cool! Not having the source code a document like that is the holy grail. Except… as I went, I discovered that some things did not work in the original game as described.

Eventually, I discovered that the doc sometimes establishes reasonable rules rather than describing what actually happens in the game. And it is incomplete in some other areas. The author of the doc worked on a version of the game for TI-89 that changed several rules of the game, so perhaps they just not had a chance to discover the issues.

2. A community turns bugs into features

If you make a game and all its content, you may change some mechanics and check that everything works—it’s hard but at some points in the development, it’s possible. With a game that contains 30+ years of community content, you can’t do that. If there’s a bug, some level depends on it. Every bug is someone’s feature, kinda like with any kind of office software. Predictably, there’s XKCD about this.

This is why having access to source code or very precise docs is priceless. When I started, I thought I had precise docs but soon I had to go level by level and check if everything worked—and if there was anything off, I went into detective mode. I created test levels, ran various versions of the game, or at one point even tried to read a decompiled code of the original game — thanks scratchminer for a helping hand!

In one specific case, I avoided going astray and establishing our own rules of Kye only thanks to help from the developer behind the C64 port, Patai Gergely. The issue was with the order in which all objects acted in every game loop—the Rules of Kye doc said that the order follows the grid, but actually it was the order in which the objects were created (so in our version, an object might change its position in the queue by moving around the grid). After several months of development, I saw the signs of things being wrong, but at the same time I thought the (correct) alternative wouldn’t work.

When discussing Wheelsprung, Nino Van Hooff’s game inspired by Elastomania, I asked about support for community levels made for Elastomania. And then I immediately realized what I was asking for and turned my question around into a warning. You cannot develop a new game that supports levels from another game without getting all the logic and parameters exactly right.

3. We made the most faithful port of the original (I think), but we’ll probably never get to 100%

As far as I know, we made the most faithful port of the original game! Python Kye is the best port on computers, but I found a difference that breaks some levels even there. After Kye (the player character) falls into a pit or gets eaten by a monster, the respawn is handled differently: it selects a random position around the start point. The original looks for a free tile in a counter-clockwise spiral. I tested this with a lot of trial and error with the original game and later found a todo comment in the C64 port’s code that describes the same behavior.

I tested a lot of levels created by the community, and by now, it seems that all the logic from the original is replicated in our version. However, there is an exception — and it’s mouse controls! These allow much faster movement in the original, because when controlled with a mouse, Kye’s movement does not trigger the movement of all other objects.

Aside: Matt recently made it possible to use a mouse on Playdate, but I’m not sure if we’ll try to implement it in Kye. The current solution is a very niche accessory. And also, neither of us like the mouse controls in the original Kye, so coding that would be painful.

So far, all levels designed for mouse controls can be completed thanks to rewind and undo, but we may still find levels broken by this omission in the future.

4. Changes to the game

Yeah, after saying we made the most faithful port, here I am coming with changes. To make the game more palatable to 2024’s game-likers, we added two methods of undoing steps to the game:

  • REWIND: The first method rewinds the game step-by-step by cranking the crank. Players can rewind up to 400 steps and that’s enough to overcome simple mistakes, such as pushing an object into the wrong place.

  • UNDO: The other method undoes all progress since the last diamond pickup. The goal in each level is to pick up all diamonds and this enables players to remedy bigger, more strategic blunders. Quite often, a partial solution blocks access to other areas in a level, so players need to go through a level in a specific order.

Rewind and undo profoundly change the feel of the game, because making a single mistake near the end of a level is not fatal anymore. I remember punching the keyboard quite aggressively in my childhood, so this may even save some Playdates from harm. On the other hand, some levels are built with that mechanical tension in mind. Some levels feel more like an action or racing game than a puzzle—and going through them with a rewind may feel cheap.

Aside from these, one can also skip a level on Playdate, and the game tracks progress across levels while the original game uses passwords.

If you want the tension of the original (and some frustration when you find a mouse-centered level), you can choose a save slot named “classic” that has these modern affordances turned off. If you manage to go through all levels in that mode, please send me an email!

5. Player onboarding

After a playtesting event (thanks to Mark LaCroix for organizing these), I realized how much information I’d like to give new players before they pick up the game.

The first level in the original game is intended as a tutorial—the player spawns right next to a diamond but has the opportunity to interact with most of the building blocks of the game. However, if a player picks the diamond up right away, they’re transported into a 2nd level that has no mercy. There’s still a learning curve, but the increments are pretty big.

Earlier, I noticed that the author of Kye’s fansite, My Kye Page noted that a few of the community level sets are beginner-friendly, so after some consideration, I chose one of these and set it up as the new default set. It is much slower and perhaps too literal in places but it makes sure you get the rules. The original set is still pretty good, but hopefully more people will appreciate it after learning the basics elsewhere.

6. Something easy to pull off

In a trailer back in October ’23, we mentioned trying to pull it off in an evening or two. We knew there’s a risk of getting swallowed alive by the game, but I wasn’t aware of the documentation’s mismatch with reality. I didn’t even grasp the whole problem of having many versions of the game and that we would need to decide what to be compatible with. For the first month, I even tested our gameplay against a web version of Ultimate Kye—a version of the game that differs from the original in many ways.

After an intense September, I had to step away and mostly finish my freelance gigs, and I returned in a bigger capacity only in January. The game was finished by mid-March, but we needed to finalize the itch.io page and… a few other things.

7. Networking across generations

One of the best moments in the development was contacting the admin of the Kye fansite, My Kye Page, Robert Phipps. A few weeks after I wrote a long message, I got a reply from Robert. The reply actually arrived on my birthday—too bad I found it in my spam folder a week later ;-)

Anyway, what a gift! We got approval to use all level sets available on the site in our port of the game, and suddenly we got from ~350 to more than one thousand levels. I went through all the files and added text files with level descriptions, fixed ancient encoding and formatting issues, and was overjoyed. Our itch.io page got even linked on the site with all the other versions of Kye 🙂

The final stretch was in front of us. Some debugging and one step aside:

8. We knew, but we still tried

Kye is distributed as charityware. You get a glimpse of the game, and then you may want to give money to a children’s charity of your choice to unlock the rest (we set up a campaign on JustGiving to make it as easy as possible). The original game required a contact with the author of the game, but most of the newer versions used some kind of honor system. So essentially, in today’s terms, it’s a free game with an in-app purchase.

Playdate Catalog does not accept free games, and we knew that. But we still tried. The reach and ease of use of Catalog is much better than sideloading, and there’s also the possibility of using scoreboards to track player progress. We had some light encouragement from inside, so we tried our luck with submitting Kye.

I thought of two possible models that could be workable—thanks to its charityware status, perhaps we could get in as a free game. Another option would be to set a price for the game and for Panic to send the revenue share directly to a charity of their choice. (We wanted to avoid forwarding the payments — both of us devs live in Europe, so sending the money across the pond is highly impractical, and a lot of money gets lost with third parties and taxes.)

In the end, we were turned down. I see the problem with free games—there’s no revenue but there’s all the work. And of course, accepting one such game creates a precedent for others. I still hope that, in the future, there’ll be a way to do something like that.


It’s up to you now!

After all that, the game is out now! Try it out! And if you’re interested, donate to a children’s charity. You can do it even right now!

If you find a bug, please, let us know. And if you solve 92% of all levels, let us know, too! We’ll send you a cake! The game tracks the progress on its menu screen.

And if you’d want to make a small game, do it! But beware! Small games exist but ports of games with community content aren’t it, even when they look small and cute 😀

Get Kye for Playdate

Leave a comment

Log in with itch.io to leave a comment.