Post-mortem
Ludum Dare 59 was held April 17th – 20th, 2026. The theme was "Signal", and I made a story game called "dearest friend". For the first time ever, I included my pen and paper drawings in a game, as well as my own voice!
Initial brainstorming
The weeks prior to the jam weekend were quite busy (I travelled a lot), so although I was keen to participate, having skipped LD58, I knew I wanted to take it a bit easy. As is tradition, I took my gamejam notebook to a café and brainstormed a bit over breakfast with my girlfriend.

I have played and seen a number of LD59 games now and am happy to say that I have seen almost all of the ideas I wrote down in the little list in the top right -- including "Signal, the app" thanks to this fun entry, but not including "Signal, the toothpaste" for some reason.
At this point I thought I would go with a kind of combined game, switching between a platformer with a side-scrolling view, and a puzzle game where one rearranges signal-processing blocks. And maybe a point 'n click with an isometric view. Although it sounds like quite a lot, these kind of rendering techniques are not far from some of my previous entries (abundance comes to mind). I was somewhat excited to do sprites with a sprite stacking technique, where I would have two (or three) different stacks, one for each of the two (or three) perspectives.

As I returned home and started actually working on the puzzle aspect, I started losing momentum. The puzzles might have been a little similar to the ones in Runnink out of space maybe? But wouldn't the gameplay feel rather staggered, switching between (presumably) frantic platforming sections and calmer puzzle-solving sections?
I guess the last nail in the coffin for this idea was thinking of actually making a platformer with a nice feel. By default I would have reached for the physics I had implemented in drill bill, but the source code was on my old laptop, and written in a different language...
Switching tracks
However, although I've already spent about half of day one by this point, I did not want to give up. There was still plenty of time and I realised I really wanted to tell a story and have an entry with somewhat interesting graphics in the end. So I started drawing! Pen-and-paper drawing rather than pixel-art drawing!

In the top-right corner you can see the draft of the beginning of the poem/story that I wanted to tell. On the right, a quick sketch of how the final art would animate and progress in the final game.

In the top-right here is the only part that I did not end up using: I wanted to have a line representing a continuous signal being received by the friend's eyes and/or emitted by their mouth. My idea was to stack a bunch of these sprites in a line and hope it would look ok!
From paper to pixels
I now had relatively detailed art to use, in fact as detailed as my scanner allows! Which, it turns out, is very!

This is a tiny section of a 4800dpi of the little heart.
As a further tangent, when I originally purchased this scanner, I was fully ready to use it with a Windows machine every time I needed to scan something. Drivers and stuff, you know? But, as it turns out, this is now just fine on Linux. In fact, the GUI frontend provided by the manufacturer does not offer a 4800dpi resolution (which the scanner tech specs show), but scanimage does!
So, despite the high resolution, I still wanted to reduce the size a lot and crush the palette into ... 3 bits, allowing for eight colours in total. This is partially because I just like that kind of aesthetics in my games, but also because it would be easier to further process the scanned images, e.g., to cut them out, fix small bits if needed, etc.
My workflow was the following:
- scan the pages at 1200dpi
- apply a colour curve to mostly hide the paper texture and make the drawing a bit more contrast-y
- reduce size by 50% using a smooth filter (Lanczos3)
- reduce size by a further 50% using a nearest neighbour filter to get some grain
- pick a representative set of eight colours
- quantise the image to the created palette
- cut out shapes
- determine semi-transparent edges for nicer stacking (see below)
In terms of commands and programs used: scanimage (1), krita (2-4), magick (5-6), aseprite (7-8).

(Note the left eye of the face here is missing the back bit, which is a separate tiny sprite, in order for the locked door to seem like it fits more properly in the face. Unsure it was worth the effort but there you go!)
Assembling pieces, shaders
Once I had some graphics (I was going back and forth between drawing, writing text, and programming the game), I placed them on screen. I spent a little bit of time to make sure I had a way to position the individual pieces "in game" using my mouse and keyboard, and to then export their positions with console logs. I am glad I did this, as it saved me a bunch of compile-and-refresh cycles.
One thing I really wanted to get right was how the sprites would stack on top of each other. Simply cutting out a shape like in step 7 above will not look amazing. Either the details and shading at the edges are completely discarded, resulting in a stark black outline, or else the details are preserved but would only look good when stacked on top of a white background. The latter would then look weird when a darker sprite is behind the edge of another sprite, and the game overall had a dark-ish tone so I wanted the background to be the darkest colour of the palette.
The solution I came up with was to use a different blend mode for the edges, and only for the edges. Specifically, the edges are drawn using a "darker colour" mode, i.e., we keep a colour "earlier" in the palette when two pixels overlap. It costs an extra drawcall but that's basically nothing!
Everything is further obscured by darkness encroaching from the edges of the screen. The light shader is simply an squashed circle of linear light, with a tiny bit of Bayer noise. The output colour is re-quantised back into the eight colours of the palette according to luminance (same order as shown in step 5 above).
Writing a story
One aspect of this game that I felt was a little outside of my comfort zone was the actual "story" (occasionally poem-ish). I wanted to tell a story that felt somewhat relatable, but not glib. Somewhat dark, but not too angsty. The latter in particular feels very difficult to balance -- a short story written during a gamejam has to take some shortcuts (at least when written by me, an inexperienced writer) but too many clichés are hard to take seriously. It has happened to me several times that jam entries going for a dark mood or a serious topic just couldn't carry the weight and became unintentionally funny.
So, this is the story I came up with, here with notes explaining some of the lines:
α The "friend" may partially be an amalgamation of several people I knew...
I had a friend α once
. . .
our friendship ended a long time ago
they don't want to see me anymore
and I don't want to see them anymore
β As after all, I have changed?
would they even recognise me β now?
γ Coinciding with the light revealing more of the face. Some memories of our childhood stick around very well (though it seems our brain actually reconstructs them when we recall them, maybe altering them in the process); I can still remember some specific conversations with a lost friend from ~15 years ago?
but the memories remain clear as day γ
sometimes I wonder how I could get through to them
δ The theme did not come through very strongly in the final game, this (and a later line) does not push the needle much. The intention was to originally have a signal, and to somehow push it further and further in, by choosing the right words.
to send a signal δ
to make them understand
. . .
we talked a lot back then
about our lives
our struggles
our hopes and dreams
ε "Worries" is such an innocuous-seeming word. "I worry about X" may just mean "I dislike X but want to keep my cards close to my chest in case you don't (yet) agree". Although this becomes clearer later in the story, this friend may have been "lost" to fascism.
about our worries ε
sometimes
ζ One of many metaphors in the story that are a little bit forced to align with the visuals.
we would get underneath each other's skin ζ
all along I assumed
we were built the same
same screws loose
η You may or may not know this term in a trans context. But: the skull shown on screen is also literally ridden with worms!
same brain worms η
same cracks
maybe I should have seen
θ As later: the armour of irony, of jokes that are not really jokes.
the face behind the armour θ
ι I wish I did not reach for a religious metaphor here, though maybe it makes sense with the "sanctimony" that soon follows.
was the devil ι there hiding all along?
and if I had made an effort
would it have made a difference?
. . .
dearest friend
once upon a time, you were my best and only friend
now your crown proudly bears the cross
sanctimonious
holier than I
. . .
back then
their words didn't hurt me
κ First they came for the Communists
And I did not speak out
Because I was not a Communist
(and so on)only others κ
λ Cutting contact is usually easier than having a sincere conversation about troubling topics. Unfortunately, this only increases the sense of isolation felt by the other side.
but still I didn't want to hear them λ
so we stopped talking
should I have done something different?
was there a combination of signals that would've cut deeper
into the core?
μ The solution to the puzzle presented here is to make all the shadow-people disappear, leaving the mind empty (see ν). But it is also possible to fill the seats fully. I wondered about having two solutions here and branching the story slightly, but alas, no time!
and who would I find inside? μ
deep down in their mind?
and what if
ν In this part of the story, I wanted to get across the feeling that the narrator hoped there might be some "external" factor to the friend's behaviour, some particular influence or media source. But one is still responsible for one's own actions and words, so the disappointment at not finding such an external source follows.
there is no one there at all ν
directing the things they say
their words a blaring alarm
a cry for help
ξ Semi-intentional reference to Void Stranger.
dressed in layers of irony ξ
now their soul is marred
ο Not so subtly referring to racial supremacists and their customary tattoos.
ever marked to announce their supposed superiority ο
but back then
they were pristine
. . .
dearest friend
what makes you tick?
and would I be saddened to see
π Yet again the sense of disappointment: is it that the friend is somehow "broken" inside? Or would the narrator behave the same way if exposed to the same background, upbringing, external forces, etc?
the same exact machinery π in you and me
but then why did you turn away?
. . .
dearest friend
ρ Lonely people with fewer (real-world) social interactions are often easily groomed and targeted by extremist groups.
are you lonely? ρ
what have you seen
to make you be this way
did you see the light?
did you see the dark?
σ The three lines here hint at the three possible solutions to the puzzle (choose only the dark eyes, only the light eyes, or only the "blind" eyes) and are then echoed by the three lines that follow, where one is picked as the "ending". Nothing actually changes apart from the line, though I would have liked to expand on this, given more time.
did you see nothing at all? σ
. . .
perhaps you succumbed to the darkness surrounding you
perhaps all the light you saw wasn't enough
perhaps you didn't see the world at all
. . .
dearest friend
if you could
would you call for help?
τ Bit of an uneasy ending. Is it too late for people like my friend here? Will anyone actually sincerely talk to them to get them out of the pit?
and would anyone answer τ
Giving my voice
When I settled on telling a relatively personal story, I thought it would be appropriate to also tell the story using my actual voice. I have not done this in any of my games before, so this was another step out of my comfort zone, even more so than using my pen-and-paper drawings. Would my voice sound right? Would it come across as sincere? Consistent across the reading?
With most of day 3 gone by this point, I started recording, using my trusty H4n Pro (apparently now discontinued). My recording studio was the bedroom, and I surrounded the microphone with some blankets and a pop filter to eliminate the bigger sources of noise. The main source of noise wanted to be my cat, but he was being distracted behind two closed doors by my girlfriend.
I read and recorded the story fully a couple of times until I settled on a reading that felt relatively natural and consistent. I find it relatively difficult to convince myself to read text aloud and clearly, as if speaking to another person who is standing some distance away, when reading by myself. However, this seemed to produce the best results, and still gave some leeway for dynamics, i.e., reaching for a quieter voice for some of the more delicate lines.
With the final recording, I performed some audio clean up in Audacity. I am not a sound engineer, so I mostly blindly followed these steps:
- record
- apply noise reduction
- normalise to 0 dB
- compress
- EQ to remove low-frequency noise
- normalise to -3 dB
I was pretty happy with how the final, processed audio turned out.
Then I cut the track into clips, removing silences and added a dummy label to each clip, which makes it possible in Audacity to export the track automatically into separate voice clips. I had 65 clips in total for each of the lines. I thought of having some clever system which looks at all the dialogue lines in the Rust source and exports them into a separate document, and then an even more clever system which somehow links the recordings with these lines... But in the end I just went through the lines and manually added the voice line number and that was fine.
Music
Finally, I noodled on the piano at around 1 AM (about two hours before the deadline), having found a very wide, indistinct-sounding synth pad. I knew I wanted some moody "ambience" without much musicality to it, so that is what I ended up with. I was recording the synth through the same H4n recorder, which really wanted me to know that it was running low on battery... But, by a stroke of fortune, just as the recorder died, I was holding the last notes for the music track. I needed to add a slight fade-out in Audacity here, but I was really thankful that the recorder (very sanely) saves the in-progress recording before shutting off.
Wrapping up
And... that's about it! The game is playable in the browser here. During LD streams I noticed it can get a bit laggy (I think there is a memory leak, unfortunately...) and there are some points where it crashes. Both are probably due to me doing something silly with how the plot is actually internally implemented -- it's all running a huge coroutine that steps through the story, awaits user inputs, etc. I should look into debugging this at some point.
As planned, this jam felt pretty relaxed. I am not yet sure if I will continue to make games like this in the future. I think the visual style looks nice and distinct, but I would like to add a splash of colour to it, too. Results-wise I expect my game might do ok in graphics but not so well overall, it is not all that "Signal"-related after all.