Off-week - 3D Navigation

July 28, 2018

There wasn't any work done on Thorium this week, for a couple of reasons. First, there haven't been too many direct feature requests or bug reports for me to fix. Yay! I take that as a sign that things are going well. (Of course, if they aren't, please get in touch with me via email or the Disord server.)

That doesn't mean I haven't been occupied. I've been working on a big update to Thorium regarding navigation. If you've been trolling the Discord server, you would have seen my post about 3D Navigation.

It started out with me trying to figure out how to fix the messed up rotations in the thrusters screen. You might have noticed that if you spin the ship in certain ways, it starts rotating strangely, showing a phenomenon called 'gimbal lock'. It's possible to solve, but introduces a couple of problems that are difficult to describe simply. Basically, fixing this small, seemingly insignificant problem would require a complete overhaul of how thrusters work.

I've been trying to figure out a good way to implement a few features in one:

  • Solving gimbal lock in the thrusters system while improving how thrusters work.
  • Navigating via a star map (instead of arbitrary points randomly generated by the flight director).
  • Tracking the simulators rotation, angular velocity, position, and velocity in 3d space.
  • Connecting thrusters to the actual rotation of the simulator in space.
  • Connecting engines to the actual position of the simulator in space.

I'm working through those points step by step, and have made good progress. Here's a working demo you can try out in most major browsers.

3D Navigation


I've also been working on new ways to transfer data from the server to the clients to make sure the clients are all up-to-date and synced, particularly with sensors data. Since this system could be used extensively by several stations (including navigation [1], sensors [1], tactical [1, 2, 3], communications [1], and others [1]), it needs to be network tolerant. While I'm totally in favor of getting another degree in how to do networked gaming, I think it would be better to leave this kind of stuff to the pros.

Enter Lance. Lance is a browser-based networked game engine that allows for multiple clients to connect and view the information within the game world simultaneously. It has built in support for game simulation, including physics simulations, and runs the same simulations on both the client and the server. This means that even if there is some kind of network slowdown or disconnect, the simulation will continue to run on the client and server separately, and will sync up again when the client makes connection.

Yesterday, I created a demo of this, and it seems to work pretty well. Unfortunately, it does require a server and since I'm too cheap to spin one up, I don't have a demo readily available. However, if you are technically inclined and have Node.js installed on your computer, getting it up and running is pretty easy.

Lance Bridge Demo

Hit me up in the Disord server if you have any feedback or comments. Also, I'd like to remind you that this is a community site. That means that if you want to post your own content to the blog about how you use Thorium, cool ideas you have, or thoughts that you think might be relevant to the community, go ahead and do it! You can access and sign into the admin at

Since this week has been an off week, and since I've publicly announced that I will be toning down my personal development on Thorium, I think it makes sense to move to a every-other-week deployment cycle. That means that you, our users, won't be too surprised by all the changes week after week and I have some time to get together a bunch of awesome changes for every release. As always, if you have thoughts about that, let me know.