The making of Long Puppy

In 2025 my game Long Puppy was released as part of Playdate Season 2. This is the long-winded, detailed version of how that ended up happening and how I made the game. If you want a much briefer version of the story then you can listen to the interview I did for the official Playdate Podcast!

The elevator pitch for the game would go something like…

“You are Long Puppy, but you start out as a rather short puppy (a mere 8 feet). If you eat the food in the level you will gradually become longer and longer puppy. Which is great because your owner has terrible aim and the ball always ends up in weird places when you play fetch. On top of that, his previous dog died while playing fetch with him and shows up every time you grab the ball, he tries to steal the ball back because he’s JEALOUS.

If you manage to fetch the ball you get to take a huge DUMP.”

The start of the project

I started making Long Puppy as a side project while I was still deep in the development of Surmount. I had just received the console as a birthday gift and was curious to see if I could get something to run on it.

I followed some of SquidGod’s tutorials on Youtube. In one of them I think he showed how to rotate a sprite depending on the crank direction. I made it move forward if you pressed up on the d-pad. Then I had the idea of placing body parts behind the head to make it play sort of like snake and to restrict your movement a bit. I’m not sure how or when I thought of turning it into a dachshund. Fuzzy memory around that. I was probably destined to make a game about a dachshund some day though, since I grew up with one and I find them very funny.

A masterpiece if I may say so! Drawn circa 2020.

In Unity I would have made this player controller very quickly, since I’m so used to the workflow and already know C#. It took a way longer to get even this basic movement going on the Playdate, because I had never programmed in Lua before and not having an editor to interact with took some getting used to.

Demonstrating butt sniffing with an early implementation of the movement mechanic. Without ground checks or collision detection or anything (a long way to go).

I knew I wanted this game to be really small. I wanted the basic gameplay loop to be sort of like Katamari Damacy. Where you roll up items with your ball, and as it grows bigger you can access new areas. Only in this case instead of rolling stuff up to become bigger, you would eat stuff to become longer.

I had an entire story written out for the game in my notebook. It was supposed to be about the dog living a happy life, aging, dying and then being replaced by another, pretty much identical dog. It was inspired by what I could foresee happening with my parents and my childhood dog. He was 17 years old at the start of the project, still going strong but felt like it could be over at any time. It’s hard to picture them without a dog so I expected them to get another one sooner or later.

Either way this was just a side project. I just worked on it a little bit during weekends or when I had longer breaks from Surmount. It was slow going.

But eventually we finished Surmount and I had to figure out what was next. I had a bunch of ideas and prototypes in different states. I didn’t know which one to go with because they all seemed like fun options. There were three games in particular I was weighing between. Ploppy Weather (which I’ve talked about before), Big Wizard’s Kitten my entry in the 2024 GMTK Game Jam, and of course Long Puppy.

I was asking friends what they thought, they all thought it would be better to work on a non-Playdate game. Mostly because Playdate is a much smaller platform and therefore less money to be made there.

However, one of the people I talked to was Jurge from Popagenda. He worked on PR stuff for Surmount and he also does PR stuff for the Playdate. Through him I found out about Season 2. So I asked him if he could show Panic a gif of my game to see if they had any interest in it (the first gif in this post). He asked me if I had some kind of pitch I could share with it, so I threw one together in an hour or so (using thoughts that I’d been stewing on for months). You can read the pitch here if you want. Then he passed it on to Panic.

Look at this lame concept art.

It didn’t take very long for an email from Panic to land in my inbox with an offer to have the game in Season 2. I was psyched to get the offer and really wanted to do it. But I did have some conflicting feelings about it because of the chats I had had with other friends and game developers before it. It felt like I should “aim higher” by working on a PC game instead. In the end I decided to just go for it, for the same reason I make most of my decisions; it just seemed too exciting to pass up. And this opportunity might never had come again. I think I would have regretted it my whole life if I had said no. I love this little console and everything it stands for.

So yeah, I kept hesitating back and forth for a week but ultimately couldn’t say no!

I say ‘yes’ to Season 2

They had very specific milestones planned for all Season 2 games. The first one was to have the game’s alpha done, with all features present and to have a first pass of all content in place. I made myself a schedule to work on it for 2 days a week. I made myself a reminder to do a reality check two weeks before the deadline, incase I would need to ramp up or tweak something. I actually don’t remember if I ended up doing that. Probably a bit.

The reason I didn’t work on it full-time was because the sales of Surmount were not good enough to live on and I had burnt through a lot of savings. So I had to do freelance work at the same time to stay afloat.

Even though I met that deadline it felt like the game was quite incomplete at this point. Anytime I made someone try it, they didn’t get into it. They liked the movement mechanic, after some getting used to it. But the game didn’t have a clear or intriguing goal. At this point the only goal in a level was to eat enough food before the timer ran out.

Figuring out the gameplay loop

It was quite hard for me to think of an intriguing goal for the player. My first idea was to change the game from being about challenge, to just be a little open world where you can slowly stroll through and discover fun things. I did seriously attempt to get this to work but after about a week I realised how much more content I would have to produce for this to pay off. So I scrapped that idea and went back to it being about challenge.

I figured if the point of the game is to grow longer, then the goal should probably be to reach something. What do dogs like except for food? Balls. So I turned it into a game of fetch.

Now the game loop was: Eat food → Grow longer → Reach ball → Return to owner.

This loop/concept was already way easier for people to grasp because everyone already knows the rules of fetch.

A friend who tested the game said they didn’t get the point of returning the ball to the owner. It just felt kinda pointless because there would no longer be a time limit once you’ve picked up the ball, they just have to traverse back across the whole level. He said “it feels like you need to do something to recontextualise the level to justify the player traversing across it again.” This stuck with me but somehow it seemed unfeasible - how could I change the entire level???

I came up with a solution sort of by accident when I dealt with another problem.

There was still a countdown timer in the levels. It was there to add some pressure and make the player move through the level quickly and think of the optimal path. The problem with a timer is something needs to happen once it runs out. Originally it would just result in a GAME OVER. But it felt way too punishing. All progress in a level lost in a second and without any justification as to why the countdown would result in a GAME OVER.

So inspired by Spelunky, which also has a timer in its levels, I decided to spawn a ghost. Which would chase you and kill you upon touch. This was much more exciting than a sudden game over.

“3,2,1 GAME OVER” < “3,2,1 GHOST!!!”

That wasn’t exactly it though. Right before launch I ended up doing one more change to it because the QA team at Plastic Fern could only finish a few of the 13 levels I had made for the game, because the ghost kept killing them. Instead I made the ghost chase the ball instead of the player. So if the player is holding the ball the ghost will stun the player, then steal the ball and slowly return it to where it was. If the player is quick enough they can steal the ball back from the ghost before it has made it all the way back. This means the game over state is completely gone from the game. That works better for a short linear game like this one.

I did this rework of the ghost’s behavior way past the feature-freeze deadline but it felt like such an important change, it would have been a huge mistake to ship without it. Otherwise most people wouldn’t have made it past level 3.

Fine-tuning the controls and movement

I love to make games where the input method and/or the movement is unconventional. Like Katamari and Getting Over It.

My previous game Surmount is also one of those games. It’s completely built around swinging and building momentum to climb a mountain. That one took a really long time to get right because to swing you would have to rotate the joystick, which is surprisingly hard for a lot of people. On top of that you also have to release from your swing with the right timing to go where you want. Not an accesible combo.

I managed to avoid both of these types of problems with this game.

Rotating the dog’s head with the crank feels very natural by itself and doesn’t require much precision, and there is also no necessity to time anything correctly. I actually avoided having any timing elements at all. Early on I made enemies that moved on paths, they made you retract upon touch. They pissed me off so much I cut them out right away.

There are a bunch of smaller details I implemented as well which I think paid off quite well in making the movement feel nice and intuitive.

  • The movement speed increases gradually as you extend. This works because usually you do finer movements close to where you start and then you just wanna traverse a large gap or distance. I never heard anyone complain about movement getting boring, I think because this speed up makes it feel snappy to get where you want.

  • Your paws signal clearly when the ground is within reach. I just made the paws really huge, like twice as big and they snap to the ground underneath you. Makes it very clear where you can go.

  • I also added an offset to the ground-check based on the crank direction, so if you look at a floor to the side of the dog then the feet will stretch a little bit extra to reach in that direction. It’s subtle but let’s you be a bit more intentional in some situations and makes it generally more forgiving to move around.

  • When you stop moving I check if there is any food just in front of the snout of Long Puppy. There’s no need to check at all times since if you’re still moving you would touch that food anyway. It’s no fun to have food a few pixels out of reach. I think it should be clearly out of reach.

  • Tapping the jump/up button an extra time makes you retract much faster. Most people probably don’t know this, I guess it ended up being a bit of a secret. But it gets really useful when you become around 30 feet long, especially when Bad Dog is after you.

  • The body is not drawn as anything fancy like a spline or a curve (because I couldn’t figure that out). So instead I just place sprites that look like balls of fur behind the head as it moves.

  • When the player retracts back to where they started to move, I just move the head back to the previous body part in the chain until it reaches the butt. In order to have the head rotate along with the direction of the body parts I just store the rotation of the head with each body part as they are created. NO MATH.

  • I really like how the camera movement works in Animal Crossing games. It’s essentially just a bounding box, when the player reaches the edge of the bounding box they pull the camera with them. Just in my case it’s a bounding circle instead. I tried to offset the camera in the direction where you are looking but it felt too unwieldy on such a small screen with tight spaces.

  • I made it look like the dog gulps down the food by iterating through a few of the last body parts and changing their sprites to look bigger. This might be my favorite detail in the dog, it just makes the eating feel SO REAL.

Nobody ever mentioned any of these things, but people do say it feels nice to play so this is probably why that is.

When I first started I thought the control scheme was gonna be a bit too fiddly. But it’s so different to anything we’ve had yet. It’s about learning that system, once you’ve had a little while with it the momentum you can start to pick up is really satisfying. - the Playing Catch-Up podcast

I had implemented most of these things before I even started building levels and was already happy to just move around in a simple test level. I guess it’s the scientifically proven Nintendo way to develop a character controller.

Adding personality to it

I know in the beginning of this blog post I talked about how I had thought up a story for the game. I ditched that story. But even when I planned on having it I sort of pictured the game to not have any dialogue at all. I thought of this as some sort of weird dog simulator, and in my mind dogs don’t understand English.

But then I started making the tutorial and it felt like I shooting myself in the foot to not use text. So I added speech bubbles to the dog owner. When I wrote his instructions, I thought of the tutorial in Portal 2. That’s the greatest video game tutorial of all time, it made me laugh out loud when I first played it. Minor spoiler: the funniest bit is when they tell you to “press A to say apple” or something like that and it’s actually the jump button. The tutorial robot says you must have serious brain damage. I tried to channel that into how I wrote this tutorial, just trying to have fun with the dialogue.

So I said stuff like “press up to stand up,” and “press down to sit,” framing the initial instructions as if he’s teaching you to do tricks. Not as funny as Portal 2, but I did my best. I tried to make every sentence as brief or entertaining as I could.

I had so much fun making that aspect of the tutorial I ended up adding dialogue everywhere I could; at the start of each level, when you pick up the ball and when you return the ball.

Picture taken by a player.

The narrative/characters is a pretty big part of what gives the game its personality. But it was kind of a happy accident how it came together. It was just the result of the mechanics and design decisions. Take the ghost dog for instance, originally it was just a ghost that showed up to remove the Game Over problem, there was no explanation of what the ghost was.

So what could be an explanation for a ghost in that situation?

It was your owner’s previous dog. Which means he was probably very reckless while playing fetch with it, and that got it killed in the first place.

Why does it chase you?

For some reason that dog loved its owner and is now very jealous of you getting all his attention. Which must mean there is something endearing about the owner despite his recklessness.

The fact that the ball ends up in weird places also informed something about the owner. He says “woops,” a lot. He’s just terrible at aiming. Which makes him seem a little bit more innocent.

It felt sort of like a snowball-effect of easy decisions that unveiled themselves one by one.

I think writing comic strips during this time probably helped prime me a bit to make the dialogue and characters more interesting too.

Whenever I could I would try to add a touch of dogginess in gameplay features too.

  • The start menu says “Press A to Stroll.”

  • On the level select screen you stroll with your owner in tow.

  • To transition to a level the owner tosses the ball.

  • The mini-map to spot collectibles is called “Sniff Radar.”

  • The collectibles are literally spots of pee that you have to sniff out, once you sniff them you can see in clear doggy-imagination who the urine came out of (from cats to creepy clowns). You can see all of them in a Pee Journal (or Encyclopeedia as it is called in the code).

  • And then there is the Poopy Time sequence at the end of each level. Which sparked some of the funniest comments I’ve ever read about anything I made. Someone said it created a new gold standard for how we should measure high-scores in games (by the height of your shit).

The fantasy of being a dog and playing fetch helped a lot in thinking of ways to spice things up!

I was cocky going in

Honestly, one of my thoughts before getting started was “this seems so easy to make, it would be silly to say no.” Naivety is a great motivator to get started, lol. In a way that was a fair assumption, compared to Surmoun this was a walk in the park (it took more than 3 years to make Surmount).

In some ways it was easy, the build times for Playdate games are almost immediate (as opposed to Unity, I’m writing this as I’m procrastinating from a Unity project). The graphics are low resolution, black and white.

These advantages definitely doesn’t mean it’s frictionless to make a Playdate game.

  • Reason 1: I’ve realised that I kinda hate level design. People kept telling me throughout almost the entire project that the levels were too long (10 minutes). I kept procrastinating it or ignoring it or something. At some point I had heard it too much or someone said it to me in the right way and I finally pushed myself to make new, smaller levels. I wish I had been quicker to react and done that sooner. I think I put too much pressure on myself to make really smart levels, so they ended up kinda huge and unwieldy. I got through it by allowing them to be very simple.

  • Reason 2: I had to learn how to program in Lua. I kept making a lot of basic mistakes in it. For the longest time I had no idea between difference of ‘self.’ and ‘self:’. By the end I got quite comfy in both Lua and the Playdate SDK. It felt so smooth and intimate by the end of the project.

  • Reason 3: I did all game development alone - the art, design, code and music. I love doing all of these things, and despite the game being very small in scope all these things added up to a lot of work.

  • Reason 4: The hardest part was by far the decision making/game design. The decisions probably sound kind of obvious when you read through this blog post. But they were absolutely not obvious for me at the time. Sure there were parts in all aspects of the game that were hard. But none of them felt as detrimental to the game as the actual game design. It felt like nothing else mattered unless there was a decent structure for everything to stand on.

Closing up

I feel like I matured a lot as a game maker on this project. I managed to find quite simple solutions to things I originally had very high ideals for, both technically, in game structure and in story.

I think I managed to address most of the player feedback reasonably well too.

If there’s anything I wish I could have done better it would be to have a more elegant consequence with the Ghost Dog. Once players learn that the dog is not a real threat (it doesn’t ever kill you), it just becomes an annoyance. I think it works and it’s better than having it kill you. But annoyance in games is usually controversial. The game is not that hard and it is very short, I think most people complete it in an hour or two. So I think it’s ok anyway as it is. And there are options to remove the dog or tweak the timer if people really can’t stand it. Maybe some day a better solution will pop into my head. Who knows? (I kind of have a thought about it now actually, we will see… )

My parents’ new daschshund helping me fix bugs the day of launch.

So what will happen with Long Puppy now? Probably nothing, I will just fix whatever bugs pop up if they are bad enough. I thought a lot about what it would be like to make a bigger console version of the game, in full color, some couch coop. It could be kinda like Untitled Goosegame. I also had an idea for how to turn this into a tiny roguelike mountan climbing game and might have done a tiny prototype of that. I can’t say what will happen with any of this though, I find it hard to predict what I will actually stick to and finish. Except for when I REALLY MEAN IT.

So uh, that’s it! Consider picking up Season 2 or just Long Puppy if you own a Playdate.

Hope you found this long-ass post interesting. Thank you for reading!

Long live long dogs!

And long live making short games!

Next
Next

Making the key art for TOEM 2