Solar Skipper postmortem


This post is also available on my blog here: https://cagibidev.codeberg.page/blog/2025/solarskipper.html
Good morning, folks! It's not even in the morning when I'm writing this!
Today, tonight, or towhatever, I will present to you the making of Solar Skipper. Insert awesome credits roll here
It started in 2016
Before that, let's talk about Potato Cycle Nasa Tour.
PCNT is a bicycling race game made by myself as the developer and Uubu as the pixel-artist. We published it in the CBNA forum, a community of french-speaking game makers, in the summer of 2016.
Uubu as always did a really good job of a crunchy/dirty but readable aesthetic, and I tried to do a punchy soundtrack loosely inspired by Herbie Hancock. Gameplay was a bit lacking though. Mostly button-mashing. I don't recommend it.
For one of my last games in GameMaker, we planned many features: different tracks, persistent trophies, and most importantly, wacky commenters with dialogues custom-made for various situations. Cyclists' names were inspired by forum members, and when one of them leads the race / is racing against another one / etc, a private joke might ring between the commenters.
As always with hobby games, this was not to be done, and the potato was put back down into the dirt of forgotten projects.
What nobody knew was that potatoes… could grow in the dirt.
- The game's topic (forum in French)
- Uubu's page (feat another game we made together, HeadBall! I still have its source code)
The 2nd old game in 2020
Okay that last sentence about potatoes was very bad.
In March 2025, the FediJam #3 took place. For one entire month, game creators on Mastodon and elsewhere had the option of making a game about hoisting the sails (theme of the jam).
I already made a game with a sailboat, called Lighthouse Keeper, in 2020. That's closer to PCNT than to today! I feel old. Lighthouse Keeper was in Godot 3, and iteration 1 of Solar Skipper too, showing the game engine's longevity. Between those two, I released about 15 games in Godot? I didn't count.
But for the new game, I remembered PCNT's wackiness and wondered, can I dig out a 9-year-old potato and prepare it like a chef?
The new game: iteration 1
I started with Kerbal Space Program's and Triplanetary's favorite friend: orbital mechanics.
So there are these spacecraft concepts called solar sails which are useful for when you must navigate a solar system but you can't carry fuel. I know, so relatable. However, both KSP and Triplanetary are focused on rockets and don't support solar sails out of the box (there are mods for that of course).
With the jam's theme and my interest for space flight, choosing the main mechanic was easy: solar sails! However, 3D navigation is complex, so I smashed it on an ocean of space to make it simpler (2D).
And thus, the potato was smashed and ready to be prepared.
I instinctively opened Godot and made a sailing prototype with 3D orthographic view. Originally, you could change sails and set anchors, and I also planned an intro with the sport commenters. I even had potential features like a campaign mode with harbors and all.
But in the end, after a week the 3D iteration was playable but didn't have commenters and was still a bit on the heavy side (5-10 MB), especially since I started tinkering with lighter game frameworks in the past months. The gameplay is 2D so it didn't really need 3D visuals anyway. It even became a bit laggy on my humble GPU. Then I wondered: can it be downgraded to a better game?
So it was time to unsmash that potato and smash it again, this time thinner, crunchier and crispier.
Iteration 2: why?
Why did I keep that bad metaphor about potatoes?
No not that.
Why did I "downgrade" the game to 2D and a low-level game engine, "wasting" weeks in the process? Well, why not!
So I grabbed the nearest low-level game framework I could find, which was high_impact. It's a C port of ImpactJS, made by the same developer. As a bonus, it has a nice music editor, and days before the jam I successfully compiled a game below 100 kilobytes with it.
It's kind of a demake really. I told myself, the days of dirty wacky pixel-art are back. The permacomputing ways are fast approaching, and it's time to shed what little bloat Godot has. And this time, it will have the sport commenters.
- Article about the making of high_impact
- Another cool framework I tried before: Löve2D
- A third one: Raylib
What was done
Mechanics/tasks:
- Boats orbiting stars. Names are still inspired by forum members
- Steering the sail with Left & Right, stronger when close to star or when star is bright
- Some basic settings
- A tutorial, then a full race
- A ranking system and trophies at the end
- A nice little minimap with shining stars
- Randomly behaving opponents, for more CHAOS! Ahahahaha!!!
- And the sport commenters, finally: Jules Hyperterre (a retired gas giant with a funny accent) and Kevin Florent-Charles (a chicken). Always says "cot" because he is a chicken.
- Actually publishing the game (not the easiest part)
Aesthetics:
- I used a subset of the Master System palette (colors only with 00 55 aa ff in them. Really good with colorful settings like this one.
- Dithering! It's been a while.
- Music is made with pl_synth, by the high_impact guy. It's a very limited program (no note length! You have to let them ring), and doesn't have sampling, but I still managed to compose in it. And it's a cartoonish space game, who cares if this is all oscillators. Bombastic orchestral music wouldn't fit the comical tone anyway (…OR WOULD IT??)
The planned but not done
I planned to add up to three types of boat you can choose, with different little portraits of sailors in the rank panel:
- the kitchen boat with a checkered napkin as the sail (current one). Would have a robot grandma in command.
- the surf boat which is also a ironing table. Would have a cool surfer octopus.
- the wooden rowing boat piloted by a giant winged ant with glasses. The wings are just for sailing. The paddles are just for show.
Four race modes: solo, small, medium, big. It would have "mushy rewards". By that I mean the first prize wouldn't be the gold medal, but increase with number of participants:
- Solo (1): only a participating ribbon
- Small (3): bronze for 1st place, ribbon, ribbon
- Medium (7): 1 silver for 1st place, 2 bronze, 3 ribbons, 1 dirty sock for last place
- Big (15): 1 gold, 2 silver, 3 bronze, 6 ribbons, 3 dirty socks
You can see the medals are… proportionally prestigious (try saying that very fast). Also I like last place rewards, because these aren't really presented in a mocking way, and sometimes you don't need achievements. In the end I only implemented the medium configuration with a more classic reward system.
Also, I planned to do some "dust clouds" walls instead of the current "constellation lines" borders. You can still see the unused tileset in the source code. But in the end, the borders were enough (for some definition of enough: see below).
Among other cut features was different tracks inspired by real-life constellations. It was a bit tedious to mockup Ursa Major.
Finally, opponents were planned to be a bit less stupid: either an opponent AI (kinda hard to do with such a dynamic wind/gravity mechanic), or me prerecording races to give the illusion of it. But the game is hard enough that random opponents pose some challenge at least early on.
The unplanned
Now some words about what I didn't intend to do. I don't know why, but serendipity in game development is more and more appealing to me.
If you really push your luck, you can cross the borders. That wasn't planned, but I kept it because that's funny and has potential for cheating.
Orbits aren't really stable right now. I successfully did stable orbits in earlier versions, but it wasn't easy to hop from star to star. You're not supposed to be a satellite anyway.
There are other glitches here and there, like for accented dialogues in progress in the French version. It adds to the charm, so I didn't bother fixing them.
I guess it counts as an unplanned thing, but my C code is getting also kinda bad-quality and smelly near the end of the jam.
Feedback
For some browsers (like Librewolf), I got a "GLctx is undefined" error at launch. I can't reproduce it, but I found a compilation flag that might help.
Also, some players find navigation too hard. Maybe I should expand the tutorial, make steering even stronger, or try to come up with a solution for the "inescapable star's pull on final approach" problem.
Conclusion
Whew! That was a good jam. I might do other games in high_impact in the future. I hope you like potato chips.
Speaking of jams, I won't join the next Ludum Dare this weekend because I want to spend a nice and restful weekend after Solar Skipper.
And on that, see ya in the next one!
Leave a comment
Log in with itch.io to leave a comment.