What follows is the entire devlog for the first game I ever really finished — ElectroLight for the Playdate! Electrolight is available on itch.io.

Tiny yellow box

(Feb 27)

A few weeks ago I purchased a Playdate after humming and hawing for a bit. I don’t play many games. If I am looking for something to play, I’m usually wanting something I can pick up for 15 to 30 minutes. The Playdate seemed ideal for this, and when I realized there would be nothing stopping me from also building a game—something I’ve been wanting to do for a while, I decided to make the purchase.

It turned out I was more excited than I expected. I wanted to start working on a game post-haste! My Playdate won’t arrive for another few days (hopefully), but I thought, why not get started trying to make something?

Pulp: Start small

(Feb 29)

Over time, I’ve learned that I often take on projects too large to ever get done. Even building a single game on the Playdate with their SDK would be a challenge; I’d have to learn their API’s (which look totally reasonable), as well as get into the groove of writing some Lua. All these things are possible, but I think the real ticket is to ship something. Make it small and build momentum.

This is where Pulp comes in, a browser-based engine that Panic has built, allowing you to build an entire game in the browser. The games you could make with Pulp are certainly limited, but limits are good. Let’s walk through it now:

  1. Games revolve around "rooms" that you can move between in a top-down or platformer-esque way.
  2. You drag and drop sprites you create (whether the player, interactables, world tiles, or "exits")
  3. Player movement is already hooked up to the d-pad.
  4. You have a simple lua-esque language called "pulp-script" that enables you to run code in event handler (on update, on enter, etc).
  5. Pulpscripts can be attached to various entities to trigger dialogue boxes, movement, sprite swapping, trigger sounds etc.

That’s a lot, but at the same time, not too much. Most games that use pulp are going to involve moving in and out of rooms, picking things up, interacting with other sprites, and that’s about it. So, how do you make it interesting?

E Y E L A N D

I stumbled across Eyeland, a game made with pulp for the Playdate nearly a year ago. Soon I will be able to play it! Something about Eyeland really intrigues me. It seems cute, whimsical, and approachable. If I could make something half as friendly with Pulp I would be satisfied.

Eyeland uses Pulp in a way that appears both top down and side-to-side—at least what I can tell from the screenshots. I have been holding off watching play-throughs because it looks so delightful on its own!

Something of my own devising

I haven’t set my sights so high as to make something like Eyeland, but I love seeing what’s possible.

So, I started up a game on pulp a few days ago, and I’ve been just playing around thinking about what to do. I’m trying to record myself working and thinking through this project, which might make its way into a Youtube video at some point.

So far, I haven't done a ton, but I did some on-video brainstorming:

Brainstorms mean all ideas are welcome 🤷

I quickly realized that my second option, "You are a piece of energy on a circuit board" was the most interesting. Going back and looking at some of these brainstorm items is definitely making me laugh. But, if you don’t welcome all ideas, you don’t get the stuff you really want.

Making a character

Making a character in Pulp is fairly easy. At first, the interface can be a bit overwhelming — it’s like looking down at a desktop with a number of buttons and switches and a big main screen. Once you begin to click around a little, it starts to make sense.

Making a player is fairly simple. Click "Room" (1), select Player (2), Go to the sidebar (4) and start drawing. If you want to create a different tile to display when, say, moving in another direction, you can hit the + button of the duplicate button (5). Want to add frames to animate your player? Duplicate or hit the plus button on the right pane (6).

Before long, I had created this lil’ pal:

That was enough for now, though. The real work will come next with designing rooms.

Playing with rooms

(Mar 2)

I didn’t really have the confidence to dive into creating a game without playing around for a while. Until now, I’ve had a little idea, so I needed to play around to see what’s possible with the 'rooms' in Pulp.

I know that I want to create several Rooms that represent different parts of the computer. So, I started designing one to represent the computer’s processor.

I started by creating a Pureref file to gather a few images of computer chips / parts.

A pretty bare pureref board
A pretty bare pureref board

After that, I started trying to create a processor room. It came out like this:

I hadn’t really felt inspired by my attempts at creating a circuit board. But, this little room came to life when I added some kind of weird particle-y effects by animating some tile sprites. After this, I started to see some fun I might have.

My "Processor" doesn’t look like one yet, but that’s okay. I’ll probably come back to it and figure out a bit better how it could look—but also I’ll need to lean on dialogue to explain things, which is fine. I only have so many pixels (and time) to work with.

Making a 'script'

(Mar 3)

I don’t have a strong sense of any dialogue or direction that the game will play — it’s just a lil’ game after all. But I decided to try to write up a little flow of what could happen:

I have a sense of a few rooms, but only a vague idea of what the player would have to do in the rooms to get the information they need. The player will meet different parts of the computer and receive pieces of data from them which will enable them to escape the computer.

Creating the first room

(Mar 4)

I spent tonight trying to figure out how to make the first room where the player starts. The idea is that the room is entirely dark as if a computer were shut off, and it's still booting up. In the room, the player finds a diary that indicates they should try to get "outside".

I spent most of my time tonight animating the player so that it looked as if it was in a dark room by animating what would be the casting of light. This turned out to be more difficult than I thought, but very possible—just tedious. Basically, you have to draw the tiles surrounding the box that is the player, and the tiles need to be animated so that it looks as if they are flickering with light.

It took longer than I would have liked, and I'm still not happy with how it looks, but I should move on.

Next, I'm going to need to finagle some magic such that the diary appears as the player approaches it. This is tricky because the drawn light particle tiles will overlap the diary when it's found. Basically. I will have to expand the amount of light that's shed from the player so that the diary can better come into view, I guess.

Alternatively, I might just make it look as if the diary is glowing. That's an option. After that, I'll have to add a room that the player exits through, which I might make it so that they have to discover it "in the dark". It looks like pulpscript has a wait function which maybe I could use to "turn on the lights" after a little while.

Getting the Playdate!

(March 5)

My playdate arrived today. I was just about to hop into the shower after a climb when I happened to look at my phone—I was getting a call. Like many times before, deliveries can’t seem to find our address. I picked up and told them I’d be out soon. I padded out in my bare feet and grabbed the box! Christmas came early. I felt like I was a kid getting a Game Boy Color again (except this device doesn’t have colour).

I spent my spare time today poking around. I managed to get everything set up as well and figured out how to load games into the device. That meant I was able to load my pulp game and try it out—there isn’t much to it yet, but seeing it on the screen and moving the player around was super satisfying.

Making the First Room

(March 7)

I spent a good chunk of time getting acquainted with the mechanics of creating a room and working with pulp-script. I made my first room which involved the player sitting in the dark with animated light emitting from them. This took a while. I was purposefully spending time in the weeds having fun, just trying to get things animating nicely. It’s nice to putter as a way to get to know your tools.

Playing E Y E L A N D

(March 9)

I bought a copy of E Y E L A N D by Ron Lent yesterday from the first-ever Playdate catalog sale. Within minutes of playing it, I was blown away by what the creator had been able to achieve with the pulp game engine. I quickly saw some cool stuff you could do. I tried not to dwell on how much work it would take to make something like this, and just enjoy the game. Still, after 10 minutes of playing E Y E L A N D, I had to go looking for any dev logs or blog posts that Ron might have put up. I couldn't really find any, but they were active on the Playdate Developer Forum. From that, I was at least able to find a font that Ron had made for his game and made available after he had completed it. There was also a play-testing thread that provided some insight into the game.

More Rooms

(March 13)

I doubt that I'm on track to actually finishing this game by the end of March, although I do admire my ambition that I set out with at the beginning of this month. As usual, I have bitten off more than I can chew, or that is, it's more than I can chew in a month to meet the standards of what I have in my mind. I'm still having fun, though! I've been posting my progress as I go on Mastodon, and I've been having some positive feedback and that keeps me feeling a little more motivated. Mostly, I've just been clicking around in pulp building rooms and writing dialogue. It's the creating of the art assets that takes the longest time and for me, it's quite difficult to wrap my head around how to represent something with the limitations of 10 by 10 pixel tiles and one-bit art. Here’s what I’ve gotten done.

I spent some time building this little room where there are a series of diodes that are supposed to be working together to, I suppose, to move the flow of electricity through a circuit. Frankly, I don't know anything about how circuits or even electricity works. Or really even computers at a basic level (at least until I finally do NAND2Tetris). Who cares! In this room, these diodes are all bickering because one of them isn't doing their job, meaning the energy is not flowing where it should be through the computer. I'm going to make it so that I need to collect something for the diode to make it happy. I enjoyed writing dialogue here. Quickly, the room came to life once I had these little sprites talking about their current situation.

Next up, I spent a good chunk of time trying to draw a hard drive with Pulp tiles. It was quite difficult. I still managed to do something that I suppose resembles a hard drive, the hardest part being the creating a large circle to represent the hard disk itself. You need to create tiles that are just portions of the circle and then draw them into the room. So I wasn't really able to animate anything that resembled a spinning hard drive, but I think that it gestures enough towards the representation of it.

Please disregard the imperfect loop ➰
Please disregard the imperfect loop ➰

The RAM

(March 13)

I drew the "RAM" room today and it was fun. It looks like this:

I’m working backward right now—I’m not sure how the player will get to the RAM, but I figured I could motivate myself by creating the room so that I can picture things, and then figure out what it takes to get there. I think it would be cool to try to answer a riddle of some kind, which will give you a certain key. Different parts of the computer will give you different keys, which will all help unlock doors to get to the final room that ends the game. Figuring all this stuff out is less interesting than writing interactions with characters, for me.

Also, I’m in a big way where everything I want to make seems to take so long. Impatience means it’s time for a break.


Some In-between Rooms

(March 17)

I got a little busy in the last few days, but I'm still chipping away at this game. I won't be done before the end of March, but I am making progress. In the last few days I've created the cafeteria, the cafeteria line, as well as a new character. This game is starting to turn into a "Before you can do A, B, and C, you’ll need to do X, Y, and Z," respectively. I need something to fill in the main rooms of the computer parts (the Ram, the hard drive, etc). I’ve managed to come up with a few characters who require a bit of help and who will help you a bit in return. I’d also like to throw in a few red-herrings—little NPC’s that are just there for the sake of being there.

It’s the little things, like creating a Garbage Collector who is a bit clumsy and forgetful, that makes this a fun process. I don’t really know how I came up with it—except that I knew I wanted to make more hallways with little characters in them. The idea showed up, and I said come on in.

I’m also unusually pleased about this strange cafeteria character I created. Perhaps it has something to do with the fact Pulp really lends itself to top-down perspectives, that the idea of a character just made from the world tiles I’ve created so far is fun and surprising. I think I like the fun surprises that game development can give you.

Lots left to do. Let’s list 'em off to feel good and bad about it simultaneously:

What’s gotten done:

  • Coming up with a basic premise, character, and select rooms they travel through
  • Learned pulpscript and the interface of pulp. Played some games made with Pulp to see what’s possible
  • Created a few characters to talk to and help build the world.

What remains to be done (a lot):

  • Continuing to develop and connect the story
  • Making the rooms and characters that will be a part of the story
  • Wiring up game logic for more puzzles
  • Writing music and sound effects
  • Making game art and descriptions for itch / the catalogue if I submit it
  • Practice play throughs.
  • Plenty else, probably.

This remains to be done list certainly feels a bit intimidating. Seems to go with the territory for building my first game (I’m writing this with the optimism that I will indeed finish this).

Ok, will check back in a few days.

Using "tell" and "call"

(March 26)

Tonight I found myself working on "Hallway #2" which is where you interact with the Garbage Collector. I just wired up the logic so that you can push these four different buttons to key in one of four different letters on the screen for a simple puzzle.

If you key in the word "free" of the four letters, then the "data will get cleaned up" (as per the Garbage Collector’s wishes) and you'll find yourself with a little gift from the Garbage Collector. When I approached this, I really found myself dismayed to be writing this in PulpScript because this would be easy in a more advanced programming language like Lua. But I also realized that as I repeated myself again and again that I actually had some abstraction methods that would work with PulpScript that are not so dissimilar from using functions.

Okay, so here's what's happening in this GIF. Pushing a button will print a character at the top of the screen. Each successive push will print another character below. So, each button corresponds to a single character. One is F, one is R, and the other two are E. Okay, so if you don't key in free, the letters need to reset back to a clean slate, and you can try again. What I started off by doing was attaching a script to every sprite, which corresponds to a button, and then they would all handle the same functionality effectively. Here’s what the code looked like.

if GC_LETTER_TIMES_PUSHED==1 then
		tell 19,2 to
			swap GC_NEXT_LETTER_TILE_TO_SWAP
			GC_CHOICE_1 = GC_NEXT_LETTER_TILE_TO_SWAP
		end
	end
	
	if GC_LETTER_TIMES_PUSHED==2 then
		tell 19,5 to
			swap GC_NEXT_LETTER_TILE_TO_SWAP
			GC_CHOICE_2 = GC_NEXT_LETTER_TILE_TO_SWAP
		end
	end
	
	if GC_LETTER_TIMES_PUSHED==3 then
		tell 19,8 to
			swap GC_NEXT_LETTER_TILE_TO_SWAP
			GC_CHOICE_3 = GC_NEXT_LETTER_TILE_TO_SWAP
		end
	end
	
	if GC_LETTER_TIMES_PUSHED==4 then
		tell 19,11 to
			swap GC_NEXT_LETTER_TILE_TO_SWAP
			GC_CHOICE_4 = GC_NEXT_LETTER_TILE_TO_SWAP
		end
		
		if GC_CHOICE_1=="F" then
			if GC_CHOICE_2=="R" then
				if GC_CHOICE_3=="E" then
					if GC_CHOICE_4=="E" then
						say "You got it!"
					else
						tell event.room to
							call "reset_tiles"
						end
					end
				else
					tell event.room to
						call "reset_tiles"
					end
				end
			else
				tell event.room to
					call "reset_tiles"
				end
			end
		else
			tell event.room to
				call "reset_tiles"
			end
		end
	end

Now imagine I had this code on four different sprite scripts and all of them were almost identical except for the fact that they corresponded to a specific letter. Well, it turns out it's not so difficult to abstract this. Pulpscript doesn't have functions, but what you can do is tell one script to invoke or call an event handler on another script. So this is like working with functions except there are no parameters so you have to rely on global variables. So I namespace my variables to the room where they are used. Basically, the letters all have this tiny script instead:

// "E" Button script.
on interact do
	GC_LETTER_TIMES_PUSHED++
	GC_NEXT_LETTER_TILE_TO_SWAP = "E"
	
	tell event.room to
		call "gc_check_valid_tiles"
	end
end

And that's about it. It's actually really effective, cleans up my code a lot, and makes it way easier to read and less error-prone. I just didn't quite catch that I could do this right away.

Aside from this, I also included a bit of sound to trigger when you get the puzzle incorrect. It's these sorts of moments where I get to glue in sound, design, and code where I start to feel actually excited by what's happening. So I'm gonna roll with that. Next, I need to set up the success case when you get the puzzle right and figure out what happens to this poor Garbage Collector once you help him out.

Connecting the story

(March 31 – April 7)

It's been a while since I've worked on this project, but I’ve gotten back into it and have been working away at the hard drive room for about a week, on and off. Just chipping away at it 30 minutes at a time.

At this point, I have several rooms, one for the processor, the hdd, the ram, etc, but no connecting rooms between that. The thought of that felt a bit stymying — I was just waiting around for … anything to tell me how to do that.

In the end, I just built this simple intersection—I told myself it didn’t have to represent any specific part of the computer — just connect the thingies, who cares! This unlocked some inspiration quickly. In my mind, I started to think of this little intersection room as a bridge high over a deep darkness. That led to creating a room with a lookout, just looking out over the darkness. Then, I animated little specs of lights, and everything came a little more to life.

I connected the hard drive room to the north exit and then wired up the dialogue for that.

For the hard drive, I wanted to involve the crank, and figuring out how to make that work with Pulpscript, in connection with the dialogue, was a bit tricky. If you haven’t played the game, the idea is that the crank is used to wake up the hard drive, and to help the hard drive find some key information…

Connecting this to how much dialogue is spoken, and when, and where, all increased development time. While it was easy for me to imagine multi-part, branching dialogues, I had to stop myself for the sake of finishing the room.

Anyway, at this point, I’m writing this all down to avoid wiring up the plumbing for unlocking the door to the RAM room. The elements of characters and entities being alive, having dialogue and unlocking parts of the story are energizing. Wiring up code so that a door only unlocks when you have the passcode is not (even when it’s only going to be three lines of code and two minutes of clicking around in the pulp editor.

Ending the game (not actually)

(April 10)

Today I created a room where the player can—let’s say lose, for a lack of better words. If you touch the electric lake, well... you don’t want to do that.

Anyway! While building this, I realized a few mistakes I’ve made during this process:

If you are using global variables across multiple files, declare them in a single place, so you can keep track of them and reset them. Currently, I’m chasing down variable names, that are set in all kinds of different places across the pulp editor so that I can effectively reset the game to the beginning when the player wanders into The Electric Lake.

Not having been disciplined with global variables means having a lot more play testing to do.

Hooking up the Processor Room

(April 11)

I’m hanging out at a side-project social night and I am puttering along on this. It’s actually feeling closer and closer to done, which is funny — the feeling just kind of snuck up on me. I just connected the Processor to The Electric Lake which is a bit of a funnier part of the game and made me smile. I added a new character called MURT, which injected some life into things. I struggled for a moment to figure out what to write for the room with the Processor, but ended up pushing through and wrote what came to my head first (a phenomenon that is getting easier).

Next up, I need to connect the interaction with the processor to create a door to "The Depths,". That means another room, dialogue, story, and then the player is actually close to finishing the game. And then I need to figure out some music. It’s such a small game, and it’s easy for me to look at it and say, "it’s puny! Not long enough! Needs to have more X, Y, Z!" That’s scope creep, right there, mixed with not-good-enough syndrome.

Day by day, this little game will get done.

Making tunes

(April 21)

Today was a bit frustrating what with trying to make some music on the pulp editor. Mostly, I'm finding that my current browser, Arc, is really stuttering when working in the game editor. Clicking around and adding MIDI notes to the piano roll is a bit cumbersome. I actually ended up switching over to the iPad and using the Apple Pencil to draw in notes. Mostly though, I love the limitation of having five voices. Writing music alone can take so long. The limitations are, yet again, helping me get this thing done.

First play test

(April 23)

I took things for a test ride today on the Playdate. I'm surprised and not surprised that I haven't done it sooner. I also expected that there would be many things that would need tweaking. This was true. Mostly, I felt that I required a new, empty to-do list that was based solely on a play-through on a physical device. As a result, I came away with some 20 or 30 to-dos that are varying in size and scope. Here’s what I basically came away with:

  • sounds are either too loud or too quiet
  • there needs to be more music
  • the crank simulation is (unsurprisingly) nothing compared to using the device; I need to update some control flow that uses the event.ra variable
  • a batch of typos and dialogue fixes.

All in all, it's not bad. I have to stop and be mindful of this new long list of things to do and say to myself “I don’t need to do this all right now, little by little things get done.” I can't believe how much I have to keep telling myself this mantra. This really is a case of the last 10% is the last 90%. It’s so easy to a) criticize the whole project, call it dumb, childish or naive and that I’ll make something better next time. Nuh-uh. Not happening.

There are no two ways about it. My finishing muscle is weak as hell. But it’s not going to get stronger any other way.

I’m Tired

(April 26)

Is it normal to get this fed up with a project so close to the end? I guess I’ll find out if this is indeed almost done.

I’m already daydreaming about the next project. I love what Pulp offers, but I’m excited to write code in my editor of choice, and being able to organize things with a larger degree of customization.

Anyway. Today I worked on giving the diode’s more dialogue after the Diogenes gets their precious bits n’ bytes. I fixed a bug with music issues (which might have just been related to me trying a new webkit browser (Orion)) rather than an actual issue in the code.

Behold, what’s left from the play-test on the 23rd:

+ Other
	+ Make game card
	+ Make a home screen??
+ Diode Room
	+ trigger funny music when talking to Diogenes (the grumpy diode)
+ Depths
	+ Ending is too abrupt
+ Diary/DarkRoom
	+ no music or dialogue on opening.
	+ Opening sound is too loud (it clips) (ready to test)
+ GRUM 
	+ Maybe make music in the room with Grum (mixed with waves)
+ HDD
	+ music when the HDD wakes up
+ Cafeteria
	+ Add cafeteria room music

Take a breath in. I’ve completed about 90% of the first checklist, and above is the remaining 10%. Once I finish these up, I’ll schedule myself to do a play test, write up everything ELSE that needs to be done (and then probably take a few days off to work on something else) and then come right back to it.

Another play-test

(May 3)

This project continues?! It does. I just finished my third play-through, and it took about 15 minutes. So short! Now, to be fair, I know every in-and-out of the game. For a first-time player, it might be a 20-minute game. I’d be happy with that. Short and sweet (hopefully).

This play-test yielded mostly sound and dialogue fixes to make:

+ sound + music
	+ turn down volume on screen shake in diary
	+ music: turn up wave volume a bit, and sine down in grum room
	+ music: make diode room loop its music
	+ sound: garbage collector success should be triangle, not sine - it's too soft
	+ Music: write song for cafeteria line
	+ sound: turn volume down on hard drive ramp us saw wave... by like 0.1
	+ music: turn down song of murt electric lake - everything by 0.1
	+ jump between depths volume too loud?
	+ volume on last depths sound too loud (when the drums cut out)
		+ also, only actually do it when you reach the PSU
+ Dialogue
	+ typo on plaque "itfor"
	+ Grum dialogue "I just need a little BREAK from WORK" (add words)
	+ dialogue: Add music notes to DIOCRAIG's dialogue
	+ Update DIOGENYS line when they get their bits and bytes ("invigorated")...should be "I think I can work now."
	+ dialogue "oh great hard drive", should be "oh, great.."
	+ dialogue: "what did I just say," should have question mark at the end
	+ provide hint on what the wings of now do - like dialogue after "These will surely help you get over whatever obstacle lies in your way?"
	+ Maybe, show dialogue when talking to blips on the screen when walking through the depths. Bits of advice? 
+ ending still too abrupt

Look at all those lil’ fixes! Each of those will take no more than 1 or 2 minutes on average (except for making more music). I promise I won’t post too many more checklists (although it does feel good; it really captures the all-too-real monotony of sanding down the rough edges of a project).

With the above said, I’ve noticed a change in myself: I’ve definitely pushed past the last 90% (he says naively)—and all that remains is to keep pushing through. My muscle for simply continuing is getting stronger. While negative and critical thoughts pop into my head occasionally, I just note them, and watch them float away, and then I get back to work. I credit some new mindfulness practices for that.

The process is more good than bad, and I’ll take that, stop thinking about it, and get back into the flow of fixing little bugs.

Ignore and Listen

(May 9)

I’m encountering a rather strange bug. It’s almost certainly living somewhere in my code. In pulp, you can ignore all input from the device with a call to ignore. When you need to re-enable inputs, you call listen. Rather than scattering ignore/listen across my code, I recently decided to just set a variable IGNORE to be on or off, which in the player draw call looks like this:

on draw do
	
	if IGNORE==1 then
		ignore
	else
		listen
	end

At the end of the day, I’m not really sure why I did this. Not only that, but during my most recent play-test I’ve been searching for places where I should disable movement in-between dialogue points in the game — especially to prevent the player from walking out of the room while dialogue is still happening.

Long story short, I’m running into a strange bug here:

// other code ....
wait 5 then
  say "HARD DRIVE:\n_____________________\nHO HUMMMMMMMMMMM!\nwho wakes me from my precious slumber! this had better be good. \n\nYOU THERE! little ball of energy or whaddever you are. what do you seek from my vast and unfailing memory?\n" at 1,3,21,8
    wait 1 then
      say "YOU:\n_____________________\nwell...i woke up today, and i felt compelled to leave here and go into the great world beyond. you know... outside. oh, great hard drive, can you tell me anything about that? what knowledge do i need on my journey?" at 1,3,21,8 then
        wait 1 then
           say "HARD DRIVE:\n_____________________\nTHE OUTSIDE, eh? ho, hmmmm. let me search for some information to help guide you on your quest." at 1,3,21,8 then
             wait 3 then
               sound "wompwomp"
                say "HARD DRIVE:\n_____________________\nyeah, i got nothing. \n...\n...\n\nzzzzzzzzzz." at 1,3,21,8 then
                  log "I SHOULD BE ABLE TO MOVE HERE BUT I CAN'T"
                  IGNORE = 0
                end
              end
            end
          end
       end
     end
end

Jeez, that’s some awful code. You can see my log “I SHOULD BE ABLE TO MOVE HERE BUT I CAN’T”. What ends up happening is that eventually the player can move again and input is accepted from the device…but it doesn’t happen until well after all the dialogue is done. It’s almost as if all the wait blocks are doubled in duration until the IGNORE=0 kicks in (despite the log working at the same time). I’m probably just going to have to remove the ignore/listen and just hope players don’t move around too much in-between dialogue.

Edit: A week or so later, I found a thread that explained what is happening! When you call ignore more than one time, it “stacks” these calls, and there needs to be an equivalent number of listen calls in order to “unstack” the ignore calls. WOW. Because I had my logic for setting IGNORE in my draw loop, it was stacking one for every frame.

Passing off to another play-tester

(May 9, again)

I’m delighted to say that I have recruited a play-tester that is not me! Thank you to my friend Cole for taking a look at the game. It’s very strange to have someone look over something you have spent two months creating, pretty much in a vacuum. I felt the need to be honest and say what would and what wouldn’t change (even if just purely because I’m ready to be done with the project and move onto something else). While I hesitate to preempt any kind of feedback, I still will:

Feedback Group A: things I can act on:

  • typos found
  • music that is too quiet or loud
  • small “flow” notes (ex: music changes too quickly)
  • any bugs found
  • how long the game took to play

Feedback Group B: things I (likely) won’t act on:

  • “I don’t get it” / “it wasn’t fun” / “the story didn’t make sense”
  • “it’s too long / too short”
  • “I would add X mechanic here”
  • “The tone is too Y or not enough < insert tone> “

I suppose “Feedback Group B” is much more subjective. I can’t really act on those kinds of feedback—I can only simply note what may or may not have clicked. However, if the player gets frozen when exiting another room, or if the game shuts down after talking to the hard drive—well… that’s gotta get fixed.

What remains? I need to create a game card, some art, the itch.io page, investigate what it would take to submit to the catalogue. All of that will be a fun break from playtesting bugs, and by the time I’m done I should be ready to get back to squashing bugs.

Packing the game (making cards)

(May 11)

Last night I made tea and tried doodling some “cards” for the game. This meant reading the documentation on how to better customize the pulp output. I found this article which walks you through pretty much everything you need to do. So, I set about moving files around, and created some dummy pngs to see if it worked. It did! This means my game can have an animation while being displayed in the game list. These really are the final touches!

I still am getting hit with the usual doses of self-doubt. The game isn’t long enough, it’s not really a game enough. You know, the typical doubting mind. I shrugged that off and moved on to thumbnailing some cards:

More Card work

(May 12)

I spent an hour last night trying to create a more finalized version of one of the thumbnails above. Turns out that 350x155 is really not a lot of room for details! I was hoping to create thumbnail 4 as the final card—and while I could redraw the title—it was just too small to draw the LED in a recognizable way. I will have to simplify things. I also realized what anti-aliasing really is (one of those words that I kind of understood for years but never actually thought about what it means) — while drawing the thumbnails in Procreate, I realized that my brush was generating black lines, sure, but also varying levels of grayscale lines to make the drawing look smooth at the edges. Then it clicked that this won’t fly with the Playdate being 1-bit—a pixel is either on or off. So, I switched over to an anti-aliasing brush and saw more realistically how things would look.

To simplify, I will maybe just have some text and a depiction of the character on the card, maybe one that animates on hover if it’s not too much extra work.

More Playtesters!

(May 16)

Today, my pal Henry did some play testing for me. It was really useful having both written feedback and a brief discussion afterward to be able to get insight into things I've missed. So I've got a few more things to dial in, mostly small fixes.

It took both playtesters not very long to play—which is okay—it’s more just a stark realization that it would be another two months of evenings/weekends to get something a bit more substantial. Realistically, I want to finish and move on; I actually just scrolled back to my entry on February 29th, and what does it say?

> I think the real ticket is to ship something. Make it small and build momentum.

Lots of good learning experiences, here.

Versioning

(May 19)

Here’s something that would be smart to do: put the version of things in the menubar (programatically) so that when I launch the game on the playdate (after going through the effort of building it and moving it over… I’m confident I know which version I’m playing.

Gah.

Lost some progress

(May 31)

Unfortunately, I haven't had a ton of time to dedicate to this project between camping and starting training for a half-marathon. I came back to this project two days ago when I started thumbnailing some possible banner art for itch.io or catalog (if it's accepted for that). Then, I hammered out the final version of that today. I'm feeling pretty happy with it, but then I realized that it actually needs to be a specific size, so I might need to make some more adjustments. Here's how it looks now:

I went back to do some playtesting and realized that either I've lost some progress or I didn't make as much progress as I thought I had. Still, more volumes needs to be tweaked, more dialogue needs to be fixed, and there's still one or two bugs kicking around. I feel okay about that. More than anything, I was just hoping that the game would be done by now and that I could move on. Right now, it's taking up one of my proverbial creative burners. I've got new ideas I want to work on and this is just taking longer than I'd like—but I would rather not start anything new until this is done.

Making art assets

(June 6 - 16th)

The art assets are going slow.

Catalogue Submission

(June 17th)

I felt like things were getting a bit long in the tooth here, and I decided to submit Electrolight. There are many things that could be worked on forever, but then I’d shrivel up and die and never do anything else with my life, including making better games (and novels, and pictures, and sit in a hammock, and play with the cat.) Dramatic, I know.

Panic’s submission form has some charm and quirks to it, which makes me feel glad to be making something for this community. The playdate can feel like such an anomaly of a place in today’s gaming landscape. It’s refreshing, in case I’m not being clear.

Now I’ll take another break from working on this while the game gets reviewed. Meanwhile, here’s an instance of some catalogue art I made if it does get accepted.

Publishing to Itch.io

(June 24)

Tada! I have published this game to itch.io. I threw together a page, used the screenshots, and art that I had already made, and voila, easy as that. It feels a little weird to be "done" (aside from the bugs that will inevitably show up). And it also, frankly, feels a little weird to charge money for something I’ve made 🙃. It’s an experiment in many ways.

Wrapping up

(June 24)

It might be too early to wrap up this very, very long blog post, but I think this is where it ends. I've never done a project this long that also included documentation that actually got published. I set out to have it done and published, and I did it. Feels good. I think I'll take a break from working on the play date, although I would like to return to make something else for it. I have a few ideas kicking around, and I'm more than ready to move into the world of actually writing code in Lua or maybe even CE someday. If you tried the game, thanks for trying it. I hope you had fun, and I brought a smile to your face. Before I go, I'd like to thank Cole and Henry for taking the time to playtest and give me some feedback.

Postscript: Resources and Advice for past me / future pulp game makers.

After using pulp for a few months, I've written out a list of things you might want to keep in mind if you ever start a game with it. These are just things that I noticed or found useful or hope that I'll remember next time. Hope they're useful for you too:

If you are using pulp:

  • All variables are global. Set yourself up for success by building the mechanic for restarting your game (or room, or whatever) early in the process
  • The PulpScript Docs are great. You’ll use them a lot.
  • There is a playdate forum with a Pulp subforum.
  • Check out Ron Lent’s Font (and devlog!) for the awesome game “E Y E L A N D”
  • If you change a tile type from "sprite" to "world" you will lose the behaviour script you attached to it. The window warns you - pay attention!
  • Looking back, i’m surprised I didn’t write my scripts in my editor so i could keep them in one place where it’s a bit easier to read / flip to them rather than having to navigate the web editor. This would have also had it’s own pains with regard to copying and pasting
  • back up your json files and use git! I never had to revert an old commit (and commit often!), but a couple times I did end up having to redo work that I accidentally deleted.
  • Decide on a system for naming your rooms, variables and whatever. The search tool is limited in the sense that you can’t see the results of all your searches in line (just the scripts/tiles/rooms that use those values. Having a system for yourself will make it easier to find what you are looking for down the line.