Newsletter October 2015

Plunging Spaceships into Certain Death

This is the online version of the Von Neumann Defense Force monthly newsletter. Do you want mailings like this, every month, delivered right to your inbox? Then subscribe to the newsletter and make this wish a reality!


Hello, and welcome to this month's Von Neumann Defense Force newsletter! I'm Hanno, VNDF's lead developer and chief newsletter engineer.

The last few weeks have been kind of a mixed bag. First Chris got busy, but I hit my stride and got a lot done, so it kind of evened out. Then I got busy, too, and basically nothing happened for two weeks. Still, some things got done, and the game has made some visible progress compared to last month!

Let's get right into it:

  • Planet Generation: Instead of generating a bunch of planets on top of each other, we now have some more realism.
  • Navigation: Work on the navigation feature has been ongoing for months now. Finally it has reached a state that can be considered feature-complete!
  • Collisions and Gravity: Some interactions between ships and planets have been added to the game.
  • Configuration: A documented configuration file is now being shipped with the game.
  • Under the Hood: Some improvements have been made under the hood to make development more smooth.

Have fun with this month's newsletter and please email any feedback to Do you have any questions about VNDF in general or the contents of this newsletter specifically? Please let me know!

Planet Generation

Last month, planets made their way back into the game. Since then, we improved the way they are generated and positioned. Things are a bit more realistic, closer resembling what a planet with some moons would look like.

A planet with moons

(click to see full size)

Of course, that screenshot demonstrates the next problem: When you zoom out far enough to actually see a few moons, they are so small you can barely make them out. Space is big, but a solution will find its way into the game eventually.


It's been a while since I started working on the navigation feature, and I'm proud to say I finally finished implemented everything I wanted.

I've added an additional argument to the schedule-maneuver command, to allow players to set the thrust of a maneuver. In addition, there's now a list-maneuvers command, to list all scheduled maneuvers, as well as a cancel-maneuver command to cancel one.

A list of scheduled maneuvers

(click to see full size)

Work is currently ongoing to show the predicted path of the player's ship, based on the maneuver information that is available now. In addition, once the navigation feature has stabilized a bit (we might still change it here or there), we can start displaying the scheduled maneuvers graphically and introduce a user interface for setting them up without using the console commands.

Collisions and Gravity

Now that we have planets again, it would be a shame not to do something with them. This is why I implemented both gravity and collision detection. In addition, I changed the spawn point for ships to a spot a few hundred kilometers above the planet's surface.

A space ship, not far from a violent death

(click to see full size)

Since the ship's initial speed is not high enough for it to stay in orbit, you can watch it slowly plunge to a certain death, which is strangely satisfying. I'm sure it will get old soon, though, and I'll have to implement some new features to entertain me. Oh well.


Last month, I introduced the new configuration file. As of today, a documented example file ships with the game to make this feature more accessible.

Remember, newsletter subscribers get a download link for the Linux version of the game.

Under the Hood

There are constantly small cleanups being made, to make the code more solid and easier to work with. This month, two stand out: Game event validation and code generation for the entity system.

The code that validates game events on the server side has been refactored to be more robust and secure. This is very important, as there's always the potential for abuse in a multiplayer game. For example, players can cancel scheduled maneuvers. Imagine if this wasn't validated properly, and player's could cancel the scheduled maneuvers of other players. Or, even more hilariously, since canceling a scheduled maneuver technically means removing an entity from the game, imagine if players could misuse that to remove any entity from the game, like planets or each other's ships.

The second improvement is code generation for the entity system. An entity system (or entity-component-system, short ECS) is basically a way to organize game data and game logic. We've been using a homegrown one for a while, but a lot of that code had become repetitive, and thus error-prone. Now the code that handles game data, which previously had to be maintained manually is being generated from a simple specification, making it much easier to handle.

See You Next Time

Do you have any questions about this newsletter or Von Neumann Defense Force in general? Send them to me! I'd love to do a Q & A in some future newsletter.

Thanks for reading, and see you again for next month's newsletter!