1. Solar Lander
  2. News

Solar Lander News

Devlog #004: Structuring Mods

I wasn't able to get a devlog out for May, but at least the gap between the previous devlog (#003) and this one is smaller than the gap between Devlog #002 and Devlog #003. And we got another unexpected patch to the Physics Update. Plus, a little something extra which I'll save for last. Let's quickly address the most recent patch first.

What happened is while I was using the Physics Update as a reference for the Modding Update, I happened to trigger a null reference exception while testing something out. Judging by the log, it looks like it didn't affect anything. And I only caught it because the test was done in the editor, which I have set to stop execution upon encountering an error. When checking how it affects the game, I noticed that (a) the error only happens once instead of say, every frame, and (b) nothing happens within the game that would give any indication that there even was a bug in the first place.

Now that we've got that out of the way, let's address what's going on for the Modding Update.

[h2]The Systems Overhaul[/h2]
For starters, part of the Modding Update involves overhauling most (if not all) of the game's systems, which is quite the chore. The good news is that a lot of code is simply a matter of copy-pasting into different locations in an effort to make the code easier to maintain. The bad news is that moving so much code around breaks a lot of stuff.

I also have more bad news: My game engine is taking way too long to develop for it to make it viable to port Solar Lander to it. Not only have I discovered several major problems with the current implementation of the engine's systems, but having to create nearly every system from scratch or nearly from scratch is quite time-consuming. This is especially true when I'm stuck for extended periods of time trying to figure out how I'm going to resolve the various issues that I've come across. This is time I believe is better spent developing the Modding Update. So that's exactly what I've been doing.

[h2]What Is Finished[/h2]
One of the goals for the Modding Update is to have a nice way to package mods for distribution, whether it be through the Steam Workshop or other means. It would also be nice if the game could use these mods without having to unpack them. So let me introduce you to the ".mod" extension. It's a simple archive format that the game will be able to read that'll contain all of the files that will make the mod usable in-game.

Of course, it wouldn't be any fun if you had to repackage a mod that you were developing every time you made a change somewhere. So the game will also be able to use mods which are not packaged into a .mod file. The code for reading and writing a .mod file already exists. The details of how a mod should be made however, do not. Not yet, anyways. But I have decided that mods will not have any sub-folders.

I have however, decided that every mod will contain a mod_info.ini file, which will contain some basic information about the mod, like who the author of the mod is, what the mod contains (eg: space craft, game modes, flight computer programs, etc.), the display name for the mod, and any dependencies on other mods. The exact specifications of this file are not yet finished, but at least now you have some ideas of what to expect.

Solar Lander mods can optionally have a credits.txt and readme.txt which will be readable in-game. As for playable content, there will be a number of files including Lua scripts (eg: for flight computer programs and custom game modes), custom spacecraft and other objects, custom planets, and possibly a few other things that I haven't decided on yet.

Some of the other things that I've completed in terms of porting over from the Physics Update are the Main Menu, Single Player Menu, High Scores Screen, and Credits Screen.

[h2]What Needs Work[/h2]
Currently, the Modding Update is not in a state where it is playable. The whole program is just the game's menu. And even the settings screen isn't fully functional. Right now, I'm focusing on the settings screen. By the way, here's what that currently looks like:

The Help screen is probably going to be saved for last, as I want to make sure that everything else is finished first. It'll give a basic overview of all of the systems in the game, but I'm wanting to implement other features to give more in-depth help. For example, I'm also hoping to implement tooltips to various items along with a Tutorial game mode, which probably won't be out until just before the Modding Update is officially published.

Also, I'm going to be shifting the game's graphics from a mixture of sprite and vector graphics to be purely vector graphics (with the exception of the UI and background image), including some sort of animation system. Another goal is to make it so that objects can break-up upon crashing, creating debris that you have to watch out for.

Also, the API hasn't even been started, though I do have Lua 5.4 working. I am considering dropping down to Lua 5.2 so that I can integrate LuaJIT into the project, which will speed-up script execution by about 5-7 times what we would get without using LuaJIT, which would be just slightly shy of native performance.

Speaking of which, I'm going to make a game mode as a mod published on the Workshop, as well as implement an unpacked "Vanilla" mod distributed with the game that you can play around with.

Much of what I plan to add to the game will come after I put the Modding Update on the beta branch, but will be available by the time it goes onto the main branch. I will post an announcement when I put the Modding Update on the beta branch. And I also have not forgotten about the goal for implementing multiplayer.

[h2]Historic Branches[/h2]
I just added 2 new branches to the game which can be accessed through the beta participation: "pre-physics-update" and "physics-update".

The "pre-physics-update" branch contains the last build before the game got its first version number. I did discover that, at least for Windows, this build crashes due to steam_api64.dll being in the wrong folder. Though I don't recall it ever crashing before the Physics Update. Just go to where the game is installed and navigate to "SolarLander_Data/Plugins" and move "steam_api64.dll" into the "x86_64" folder and it'll be fine.

The "physics-update" branch contains the latest build of the Physics Update. And once the Modding Update officially hits the "beta-builds" branch, the "physics-update" branch will contain the final Physics Update build. And once I have verified that all systems are working properly for the Modding Update, I'm going to simply delete the Physics Update's project files.

v0.2.14: Fixed Invisible Bug

Bug Fixes:
  • Fixed a null reference exception (that has zero impact to the user) triggered by moving axis response sliders when no axis is assigned to the control.


Additions:
  • Added the "physics-update" branch to list of betas which will contain the latest build of the Physics Update.
  • Added the "pre-physics-update" branch to the list of betas which contains the last build before the Physics Update. Note: You must move "steam_api64.dll" from "SolarLander_Data/Plugins" to "SolarLander_Data/Plugins/x86_64" for this build to run properly.

Devlog #003: Project Status Report

It's been a while since the last devlog. And it's also been a while without any work being done on this game. I haven't forgotten about the game, but it was necessary to put the development of this game on pause for a while. While the development of this game has been paused for the vast majority of the time between posts, there have been brief periods of time that I have spent developing this game, which we'll discuss later on in this post.

Also, just a heads-up: I do not intend to make a Devlog post for April, but I do intend to make one for May. The original intent behind these posts is to publish them on the 1st of each month unless it lands on a Saturday, then it'll be published on the 2nd of that month. I intend to get back to that schedule.

[h2]What Happened?[/h2]
In short, life has forced me to put the development of this game on hold for a while. This is obviously beyond my control. For nearly the entire time from the previous devlog installment to the beginning of January 2025, almost no progress has been made on updating the game for this very reason.

Pretty much as soon as January hit, I got a lot more free time and started working on my various projects again. Some of which actually helped indirectly with the goal of taking Solar Lander off of the Unity engine. Others I just wanted to get out of my way and I thought they'd be quick to do so. Turns out only one of the three projects I tried to knock out of my way was able to get done quickly. But at least it's finished. During the time I spent trying to knock these projects out, I spent almost zero time developing Solar Lander. But there has been work done on Solar Lander during this time, which we'll discuss later.

Over the last couple of weeks though, I've spent almost zero time on any of my projects, which I really shouldn't have considering the fact that I do have enough free time to get work some done on these projects each week. For this, I apologize.

[h2]What has been done?[/h2]
In the time I spent working on Solar Lander, I managed to get some stuff working with my game engine, such as buttons. Here's a screenshot of the main menu in the non-Unity version of the game.

The text is a bit rough, as I'm using prerendered font sheets, which only looks good in a pixel-perfect text alignment and size. Also, the way I'm generating these font sheets is very manual, and I don't really care for that. I have started a project to automatically generate the font sheets, but I'm not sure that this is the best solution. I do have other ideas, such as procedurally-generating the font sheets at run time. There's also the option of simply not using font sheets at all, but instead rendering the font directly to the screen, or maybe to a separate texture that is then rendered to the screen. I haven't decided yet.

There are other element types that I have to get working in my game engine, such as sliders, toggles, edit fields, dropdowns, and scroll views. I also have to integrate the control system into the game engine, but thanks to another project that is now paused, I actually have a control system to integrate. And this control system works exactly like Solar Lander's current system.

By the way, the control system and input system are two distinct systems. The input system takes user input from the operating system and converts that input into a uniform format that the rest of the game can use. The control system is what allows game-specific controls to be defined, and allows users to change the key, button, and axis assignments to those controls, along with changing how the controls respond to user input.

When you're modifying input assignments and responses, you're interacting with the control system. When you're moving the joystick around or pressing buttons and keys, you're interacting with the input system.

By the way, Solar Lander's loading screen (for the non-Unity version) is working now, but may only appear for a few frames if that. In some tests, I don't see it at all, while in other tests, it appears for just one frame. Currently, it's set to only appear after the splash screen while the game's menus are being loaded. Eventually, I'm also going to make it appear when loading each level, but I suspect that the screen will also only appear for a few frames at most.

[h2]What's next?[/h2]
As far as Solar Lander's development is concerned, the next steps are to get the other UI element types working properly in my game engine. I'll work on improving the font rendering later (perhaps last). The toggles and sliders should be the easiest to implement, so I'll work on those elements first. Some elements, such as the input feedback elements, should also be fairly easy to implement. The more complicated elements will be the scroll view, and all of the elements (such as the drop down and text edits) which rely on them.

I also need to modify the text generator to output information on how many lines of text was generated, and where each line starts and stops. This actually might be fairly easy, and I have a few ideas of how this might be done.

Oh, and all of the game's content is going to be vector graphics. Currently, it's a mixture of vector graphics (planet's surface) and sprites (space craft, exhaust particles). The sprites and particles are going away in the next version.

v0.2.13: Stranding Detection Bug Fix

[h2]Bug Fixes[/h2]
  • Disabling both Command Module RCS blocks now gives a game over screen.

v0.2.12: Bug Fixes and Demo Update

[h2]Changes/Bug Fixes[/h2]
  • Removed the old restriction preventing portrait layout from being used in-game.
  • Audio and chunk size settings are now properly saved and loaded. You will need to re-adjust these settings for them to take effect.
  • Changed the minimum selectable screen resolution to 1024 x 768.


[h2]Demo Changes[/h2]
  • Adjusted the planets featured in the demo to force the use of the upgrade system.