Presenting Sonder - Devlog 2

Since the inception of the game I had been thinking of names… lots of stuff came to mind but nothing clicked… that was until I was watching a video to put myself to sleep at night as I like to hear/watch documentaries until I sleep.
The video in question, is here and as fascinating as the painting was and hearing someone knowledgeable speaking about it, at one point the narrator spoke about “SONDER”, and as her explanation reached my ears I had the name of the game.
Sonder: the strong feeling of realizing that every person you see has their own life story in which they are the most important person.The font of this is cambridge’s online dictionary.
I already had the concept of a boy and a man (the uncle and the kid) fishing by the river shore, I tried drawing since basically the first lines of code and dialogs I wrote… with that name and a couple more tries on the art style, I had this logo, it was the first drawing I did in a decade that I was like: “Oh, I LIKE THIS!”
This name fits so well with the concept I want to make for the game, that it HAD to be this word.
A lot of drawings (badly done), a lot of systems, so much cut content due to… well scope… Those past months have been insane in the amount of learning and stuff we did… I had to move some critical parts from lua to c which I did not anticipate… but once that was taken care of, I have to say I am liking to code in c more than in lua for the playdate.
What is Sonder?
A fishing game with a story about a man going from a big city to the countryside, a place he used to visit all the time, as his uncle lived there. Our main character is just tired of “social media”, “dms”, “friends” and wants real connections. So he goes to this village that looks almost the same as when he was a kid, and you play as him, knowing people, fishing, remembering those holidays as a kid, how those simple days which were so unimportant formed you. Sonder is a game about realizing what is really important, and take only what is necessary from life. It is inspired by the Little Prince, Mogli and why not? Stardew valley and harvest moon and pokeemon. Not because of the gameplay, but because of the “vibes”.
You live your life in this village, in the old home of your uncle. He passed away a bit over a year ago, his death probably had an impact in this “early 30’s life crisis” people say you are having… As you fish, sell those fishes, buy new things, interact with people, you get to know or meet old friends from the time you were a kid.
Adults you used to be lectured by are walking now with gray hair in those same shores they did with you before. The childhood friends you made that are still in the village are responsible and not so responsible adults. All of them may talk about your uncle or you remembering those times as just a collection of happy memories. You want to feel at home in this convidative place.
“Why did you decide to disconnect?” people ask you. “Dear, are you ok?” Your mother keeps worrying about you on her messages… And you are vague, as if not wanting to be impolite but not wanting to talk about it… maybe people around you can help mend whatever is broken with you…? Maybe you don’t even need that, just the simple acts of living outside of the social media bubble may bring you joy again.
The game:
In this game you fish and take pictures of fishes, you made a promise to yourself that you would try and not use smartphones and tech in general all because it brings you so much angwish. You write your finds in your journal, like the old times, you also take pictures with a c95, you know, from that incredible company that everyone loved, Crankia, it had the best smartphone camera of the day. You are not sure why, it is just terapeutic to complete this notebook with all the fishes you find.
Each journal will be unique, that is because each player will take a different picture of a fish they found. You study and write about every fish you find and this is the pokemon similarity, which was never planned, but I am making a game I would like to play and that just connected with me.
At the end of the game, you may even export this book into a real pdf to contact publishing companies… maybe that is it? You would feel fullfiled writing and having your own book published?
Speedrunning the other stuff
Lots of things were done, I have written this in multiple different locations in different days throughout the time I have been away, living and coding… I don’t expect this to have cohesion in a narrative, so treat this as that ordinary presentation we do in school that is just a bit better than bullet points:
The fishes are alive?
From day one we wanted to make the fishes feel alive… but for the amount of fishes we thought initially… it would need a lot of animations, a lot of fishes with their own models so each feel like their own… For that reason the process changed and to doing simple cutout animations for the fishes, I made a simple prototype in lua and realized animations would also be very time consuming… what could be done? Did not even need to think much, because I had done a couple chain simulations in the past for other projects, so that was the route…
Verlet Integration enters the ring
This first version was a quick prototype done in lua. I do not plan on explaning the deep rabit hole that verlet integrations are, but think of it as a chain simulation
This is the first version, slow, poorly done, so very slow… it did not help that it was also written in lua… boy oh boy making the restrains between each pivot be respected was almost impossible…
But with a couple more iterations, and also moving from lua to c (which I may write about the process in the future), we reached this:
Fishy fishy, c'mon! a huge migraine trying to grasp enough of a verlmet integration system and fighting with it to make this look good and performant... Well, this now is running on the simulator of the playdate, A FAR bigger upgrade than my original lua code #gamedev #playdate #programming
— (@indoordruids.bsky.social) 2026-01-21T18:03:38.061Z
Naming things is not my forte… so I was thinking of calling this a bone system, but it is also a chain… so… I named it bonechain.c and rolled with it to this day…
With that, I started coding the game to take advantage of this stuff, and let me tell you guys… seeing everything fit together is incredible:
Look at that! 5 Fishes moving about, each made out of at least 3 links, and at solid 50fps (at least in the simulator). I think I can probably add double that, but I don’t see a need for the game…
Localization system
I made a localization system that behaves like the one in godot (because I know its source backwards), I knew godot’s approach is clever, simple and very easy to debug, so I had it running in an afternoon. To the translator, they only need to edit yaml files… name it with the usual language-country code and the system takes care of the rest… This has been working so well that I have not touched it in months too. xD
Data-driven game development
As you can see with the localization system, I decided to go the data-driven development and as such, most of my code just reads data…
A simple example of how the fishes in the game are described:
# yaml-language-server: $schema=./fishes_schema.json
'001':
name: f.001.name
shortDescription: f.001.shortDescription
description: f.001.description
minWeight: 150.0
maxWeight: 2500.0
minWidth: 18.0
maxWidth: 60.0
minStamina: 80.0
maxStamina: 120.0
spawnRate: 0.25
sellValue: 100.5
parts:
adiposeFin:
- x: 780.0
y: 112.0
- x: 796.0
y: 152.0
- x: 698.0
y: 145.0
- x: 702.0
y: 117.0
analFin:
- x: 789.0
y: 235.0
- x: 768.0
y: 366.0
- x: 644.0
y: 368.0
- x: 637.0
y: 266.0
caudalFin:
- x: 1001.0
y: 88.0
- x: 990.0
y: 313.0
- x: 845.0
y: 233.0
- x: 845.0
y: 124.0
dorsalFin:
- x: 545.0
y: 41.0
- x: 577.0
y: 117.0
- x: 338.0
y: 100.0
- x: 474.0
y: -9.0
head:
- x: 153.0
y: 128.0
- x: 175.0
y: 278.0
- x: 2.0
y: 234.0
- x: 35.0
y: 150.0
pectoralFins:
- x: 285.0
y: 251.0
- x: 308.0
y: 335.0
- x: 211.0
y: 342.0
- x: 184.0
y: 242.0
pelvicFins:
- x: 536.0
y: 286.0
- x: 551.0
y: 377.0
- x: 456.0
y: 365.0
- x: 438.0
y: 273.0
cutout:
- 167
- 831
habitats:
- river_1: 0.8
missions:
- type: habitat_count
habitat: river_1
target: 10
- type: total_catches
target: 20
- type: size_weight
condition: bigger
targetWeight: 2147
- type: size_width
condition: bigger
targetWidth: 53
- type: size_width
condition: smaller
targetWidth: 32With this yaml I made autocompletion possible, even intelisense for the fish class is achieved thanks to a tool I made which I called yaml2lua… it converts this data with the help of the schema, into a lua table and types that vscode or any other thing can read. Frankly, the tooling part should probably be in its own devlog, it is very interesting to talk about.
Dialog and portrait system
Inspired by the ones in old camelot games (more specifically shinning force 2), where each character has a blink animation and a speaking animation besides its “idle pose”. I always liked it in its simplicity… in the megadrive it would be just three frames and it woul do a lot to give life to the game. So I thought about implementing my own, and there it is. It is complex and simple enough for my needs. It enables me to ask questions, receive inputs an act through callbacks, I have not touched this since the end of the year, that is because it is working xD.
Portraits
As I made a dialog system that could take images to show, I kinda forced myself into this… My drawing skills are terrible, so I was thinking I could mask them with the fact that playdate only shows a single color, but it is as hard if not harder to draw in a single color… So I went the route of digitaly painting:



Those get converted to grayscale image with some magick commands to a format that the playdate likes more and still keeps enough of details that the color and shaddings imply, but they still need some touch ups.
Mariah was not drawn by me, if that is not obvious, it was by my cousin while he was hanging in my home, after he saw a bad sketch I made, I liked it very much.
Transition system
Transition system between the scenes, not worthy sharing a video of it, but now I have around 10 effects for transitions that are lightweight enough but give that flare effect to the game. Fades, crossfades, scanlines, swirl effect, I tried to add variation, the system is very simple, coded entirely in c and easily extensible. It was more of an exercise on making modular code and it was a success.
Title Screen
This is the title screen of Sonder, the main character is just hanging, in the future he may be doing other stuff, like throwing fish bait, or talking to a villager.
Misc
Right now, this is the output of cloc to examine the lines of code of sonder:
cloc . --exclude-dir build_simulator
11742 text files.
4960 unique files.
18269 files ignored.
github.com/AlDanial/cloc v 2.08 T=2.29 s (2168.4 files/s, 50225.0 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
D 2407 6300 0 38536
Lua 132 4085 13398 17316
C 28 2036 1101 10354
Rust 45 729 593 5176
YAML 53 156 152 4359
JSON 2204 16 0 3815
C/C++ Header 27 489 829 1361
Markdown 14 369 0 1052
SVG 4 3 8 478
Godot Scene 9 99 0 294
Text 5 58 0 231
Python 6 56 62 215
INI 3 65 0 132
TOML 10 13 1 118
make 1 53 25 107
Bourne Shell 5 29 12 86
XML 1 0 0 86
TypeScript 1 31 28 85
CMake 1 12 14 74
Containerfile 1 8 3 65
Godot Resource 1 10 0 64
Nix 1 4 7 19
VSCode Workspace 1 0 0 7
-------------------------------------------------------------------------------
SUM: 4960 14621 16233 84030
-------------------------------------------------------------------------------If you read up to here, thank you very much. You can find me at bsky/@indoordruids