Starfare Haven Update

I haven’t posted here in a while. I took a break from the project to concentrate on preparing for a dream hiking trip to northern Sweden.

Here are a few videos demonstrating where things stand.

Here we are stress testing the new multi-threaded path finding, task following, and resource database. Keeping track of all the dynamic things on the ship in a way that can be very quickly searched is an interesting problem. The solution I came up with is more complex than I would like, so there may be another refactor, but for now it’s working quite well and takes advantage of multiple cores to spread the load around.


I did some experimentation with dynamically generating a path finding node graph based on traffic patterns. In a nutshell, I keep statistics on each grid node that an entity passes through if that node was part of a path. If enough traffic passes through a node it gets added to the graph, and can age out of the graph if the traffic is reduced. The path finding algorithm can then use the dynamic graph, which is a much smaller set than the full grid. If a path can’t be found then the full grid can still be searched.


Testing out the new airlock here. This demonstrates the entity following a set of tasks in conjunction with the door cycling through its states – they must work together. This is further complicated when multiple entities need to use the door since only one can use it as a time, so they must queue up (not shown here). The colors are for debugging and indicate the air pressure in each location.

Just a nice view of a larger ship with various functional rooms.

At this point, the game framework is all pretty solid and I could start working on other game systems, such as landing on planets. I’ve already made some effort towards that – I can create multiple maps and toggle between them – you’d have the ship map, and the planetary map, for example.

Oh, I guess I announced this on Twitter a while ago – the name of the game is Starfare Haven.

Leave a Reply

Your email address will not be published. Required fields are marked *