
Binary Stars and Multiple Star Systems
By The Wanderer
I always wanted to set the “story mode” of the game in our own galaxy. I was of the opinion that there’s enough mystery and immensity in the Milky Way that there should be little need to make up random star names. Travelling towards Alpha Centauri to me has always had more appeal than exploring the Khagaton system in Stellaris (not the least because in my own native language the word sounds incredibly funny). Sure, you can always change the list of names used, but to date I think that only Elite Dangerous and not-quite-a-game Space Engine attempt to simulate our own galaxy, with real data.
Why don’t more games do this?
To answer this question, first a preamble. In the past few days I have been working on the procedural generation of star systems. Since I wanted to add support for binary and multiple star systems, I realised I needed to revise some of the code and data structures I use in my Universe library. To test it I thought of grabbing some real data from Wikipedia. I checked the page for Alpha Centauri on Wikipedia, which describes the components of the system. If you are not familiar with it, Alpha Centauri is actually a trinary star system and not just a single star.
- Alpha Centauri A and B are closer together at an average separation of 20 AU. These two stars are also called “Rigil” (or Rigil/Rigel Kentaurus, not to be confused with the Rigel of Alpha Orionis) and “Toliman”. These two stars orbit each other around a common barycentre, or centre of mass.
- Alpha Centauri C, better known as Proxima Centauri, is a distant companion to the Alpha Centauri AB group. So distant that it orbits the barycentre of the system at a distance of about 10.000 AU, or close to 0.2 light years!
Since Wikipedia reported the mass of both components as well as the orbital elements of the companion (Toliman), I thought “surely the data for the other systems will be available in some star catalogue”. Well, trying to answer this question made me fall into an astronomic rabbit black hole of star catalogues, orbital elements, binary, trinary, and multiple star systems. Now I certainly know a lot more about the subject than before.
So, to answer the question: not many games do this because it’s really hard to do a good job with the data available.
Let’s elaborate: any attempt to model a certain degree of realism in space-based games typically carries with itself expectations. If you start to introduce real stars for example, one might ask to place them where their real location in 3D “galactic coordinates” and that’s easy enough. Next, you might want to have each star retain their real-life properties: Betelgeuse should be a red supergiant and Sirius should still be an A-type main sequence dwarf star. If you are simulating the orbital movements of planets, then you might as well simulate the orbits of binary and multiple star systems. Of course if you do, these should be the “real” orbits, right?
Well it turns out that we do not really know that much, yet. For some reason I had thought that astrometric missions (spacecrafts that are launched with the objective of measuring star data) like ESA’s Hipparcos or Gaia, that you might have heard of, had been able to more or less precisely map if not the whole galaxy, at least our galactic neighbourhood. Well the bad news is that we are still far away from having a complete “atlas” of the galaxy. Indeed, we can only estimate the orbits of a handful of stars (compared to the billions of stars in our galaxy). Precise measurements for the mass of single stars especially, are also missing in these catalogues.
For many star systems we are not even sure whether the binary stars that have been detected are “physical” or “non-physical”, or whether they appear close together because they are indeed gravitationally bound in a multiple star system, or because they appear visually together but are actually far apart (like for the constellations in our night sky). The good news is that if you are looking to do a PhD in astronomy there is evidently a lot to be done.
I thought then, well what do we know? I still would love to have a plausible if not accurate depiction of the solar system neighbourhood at least for the more “famous” stars.
Creating a star catalogue for Sine Fine
The “story mode” is set in the galactic neighbourhood, as mentioned before. Players will be able to choose the size of this volume at the game start. How many stars will be in each setting will need to be playtested. So far, I’m working with a minimum distance of 100 light years from the Solar System. So I needed to find out which stars are in this region of space.
My starting point was the list of stars with “proper” names, defined by the International Astronomical Union (IAU). As you know, some of the most visible stars have been referred to during the course of history with names given by the very first observers and their cultures. Names like Rigil Kentaurus (“foot of the Centaur”), Antares (“rival of Mars), “Altair” (“the flying eagle”), etc. have always had a sort of mysterious appeal for me, with roots in literally centuries or millennia of history. I wanted to pay homage to it within the game.
The IAU list of named stars contains about 450 stars that have had a name approved. These names refer to the individual components of a star system. As mentioned before, Alpha Centauri AB/C has three components, named Rigil, Toliman, and Proxima. Names continue to be added to this day too. Some of the more recent names have been decided through contests in some countries. For example, the star previously known as “XO-5” has been named as “Absolutno” in 2019, from the name of a substance in a Czech sci-fi novel. This list of 450 stars comprises stars that area also farther away than the minimum 100 ly, such as Betelgeuse at 642.5 ly. The IAU catalogue has 102 stars out of 451 within 100 light years, at least those that have a corresponding entry in the Hipparcos catalogue. A hundred stars seemed a small number, even for a game. So I thought, “well these are only the named stars, and they don’t include star systems that are named according to the constellation in which they find themselves”. These are the “classic” systems many know: Sigma Draconis, Eta Cassiopeiae, Zeta Ursae Majoris (Mizar), Epsilon Virginis (our Vindemiatrix!) etc.
This nomenclature is called the “Bayer designation”, from the German astronomer Johann Bayer (1603). These names are frequently abbreviated with the greek letter (depending on the magnitude) and a three-letter form of the constellation, e.g. Alpha Centauri is α Cen. There exists another “similar” designation (astronomers forgive me), called the Flamsteed designation, again after English astronomer John Flamsteed. These stars are named after a number (which was originally dependant on their right ascensions within each constellation, their eastward angular distance). Some stars that lack a Bayer designation are typically referred to their Flamsteed designation, like 61 Cygni. All in all, according to the tool I developed, there are 381 stars that have either a Bayer or Flamsteed designation within 100 light years. This number already feels more “respectable.”
But where to find the actual properties of the stars?
The Bayer and Flamsteed designation are catalogue of “stars and where to find them”. Typically a catalogue might report the right ascension (ra, east-west angular distance) and “declination” (dec north south) of a star in the sky as seen from Earth. This does not tell us how far a star is, because you would also need its distance. To get the distance you need to measure the star’s parallax (plx). Since stars move, they will appear at different locations in the sky after some time has passed. Differences might be minuscule, reason for which very accurate instruments are necessary. From these three values it is possible to calculate the x, y, z coordinates the stars have in the game.
However, this still does not tell us the properties that are relevant for a game like Sine Fine, like a star’s mass, luminosity, temperature etc. Most often, catalogues will report the star’s magnitude (its brightness) but not the mass directly. It is possible to combine other information such as a star’s spectral type, distance to arrive at an estimation of the mass, since brighter stars tend to have a higher mass. For binary stars this is actually easier because from observing their orbital periods, it is possible to estimate their individual masses.
So I began developing a parser for the 2007 version of the Hipparcos catalogue. The Hipparcos catalogue was the result of a mission by ESA launched in 1989, the first “astrometric” mission dedicated to measure the position and distances of the stars. From this mission, about 118.000 stars were measured. A lower precision version of this catalogue is called the “Tycho-2 catalogue” and contains 2,5 million among the brightest stars. If you have played Elite, you might remember that some of the stars have “weird” names consisting of just letters and numbers. Stars named HIP 1234 or TYC 1234-5678-9 are entries in these catalogue. HR and HD are also “popular” star catalogues that you might have encountered. HR refers to the Yale catalogue of Bright Stars, where the HR prefix is a reference to its predecessor, the Harvard Revised Photometry catalogue published in 1908. The HD prefix refers to the Henry Draper catalogue, published between 1925 and 1936, after the name of an amateur American astronomer. Another popular catalogue is the Gliese Catalogue of nearby stars, after the German astronomer Wilhelm Gliese, first published in 1957.
Not all stars contained in these earlier catalogues are contained in later catalogues. For example, because some of them were too faint or for other reasons. The astrometric mission to rule them all, is the more recent ESA’s Gaia mission, which launched in 2013 and ceased operations very recently in March 2025. This mission aims to build the largest and most complete 3D space catalogue ever made, comprising 1 billion astronomical objects. The data has indeed not yet all been released. Final release of these datasets is expected by the end of the 2030s, already setting the stage for a sequel to Sine Fine where you can play the ultimate “campaign” in a map comprising 1 billion stars /sarcasm.
As far as I am aware, the Gaia catalogue is the only source that reports a star’s mass estimation. However, the datasets that have been released so far do not (yet?) cover many of the more “popular” stars with proper names or with either a Bayer or Flamsteed designation. However, Wikidata has hundreds of thousands of pages dedicated to each star, with data often (but not always) present in Wikidata, a dataset that lists property-value pairs for many “entities” and that can be queried via an API. The data listed there is sometimes more “recent” as it comes from scientific journal papers.
So in order to retrieve data from Wikidata, one first needs to know what is the “Q-number” associated to a specific star. There are ways to query wikidata based on properties such as a Star name or its catalogue number, and retrieve this q-number in this way. This, in turn, requires one to have parsed one of the catalogues mentioned before. So, a few parsers and python modules later, I built the tool that you can now find on github, which parses the catalogues and be used to also match this data with what is available on wikidata.
The next part of the equation is to understand exactly (or at least as best as we can) what are the components of each multiple star system. In game, if a star system has multiple components that are sufficiently close together, these should be displayed in the same screen. But both Wikidata and the Hipparcos catalogue have one entry per star and it is not trivial to deduce which stars are close together.
Enter WDS and the ORB6 catalogues
The WDS is the Washington Double Star catalogue, while the ORB6 is the Sixth Catalog of Orbits of Visual Binary Stars. As far as I am aware, these catalogues provide the best source of double and multiple star system, outside of GAIA. However, astronomers not being computer scientists, have not entered this data in a way that is easy for a machine to understand. Take these (slightly formatted for readability) WDS entries for Alpha Centauri:
14396-6050 AB 1752 2023 481 218 5 20.5 8.1 0.01 1.33 G2V+K1V -368+047 -60 5483 NO P
14396-6050 AC 1920 2016 4 225 212 999.9 999.9 0.14 12.7 G2V+M5Ve -364+070 NO P
14396-6050 Ca,Cb 1996 1996 2 45 100 0.2 0.3 11.1 18. M5Ve -368+048 N P
That does not look very human-friendly either. But you look at the second column of data, where it says “AB” or “AC”, “CA,CB” it starts to get more interesting. The part with the letter describes the components that have been observed at the region of the sky indicated by the first column. The three pairs describe Rigil and Toliman (AB), Rigil and Proxima (AC), whereas the third line refers a hypothetical fourth component, a companion to Proxima (Ca,Cb), which was later revealed to be a “sub-stellar companion” (a Planet).
To further complicate things, these lines do not always refer to a pair of “actual” double stars. Sometimes, they list entries that refer to “visual” binaries, i.e. stars that appear together but are actually very far apart. Physical binaries, on the contrary, are what we are interested in: gravitationally bound pairs that are relatively close together. I found this website called Stelle Doppie (Double Stars, in Italian), which provides a visual representation of the WDS and OBS catalogue.
It was not easy to define an algorithm capable of interpreting those lines and create a hierarchy (a “tree” of stars), to understand who is orbiting who. The astrolabium
tool I built that you can find on github will give Alpha Centauri the following structure, based on the lines above:
*
├── A
│ └── C
└── B
Technically, Proxima is orbiting A and B as a whole and not just A. But I did not find a good way to represent this type of relationship, so as soon as I started having flashbacks of Graph Theory and all that, I opted for a conventional tree structure, where the star is assigned to the primary star in the pair.
Dancing with the Stars
The result of all this is above. According to the data Rigil and Toliman complete an orbit around their common centre of mass about every 80 years. However, there is a problem with it still. The orbit propagator used in the Universe
library is assuming there is a more massive attractor around which the orbiter orbits. This works fine in the case of planets and stars. Not so much when it has to simulate the orbits of massive objects like stars, which affect one another.
In the above simulation, to make it work there is an invisible attractor in the barycentre whose mass is the combined mass of the two stars. However, while it “looks” correct, this makes the period of the two stars incorrect. Both stars should have the same period of 80 years around their common barycentre. But in a two-body propagator like the one currently in use, the two stars have much faster periods of about 25 and 32 years. This means that they could eventually collide with each other, which could lead to unintended consequences.
Hopefully no one was armed over in the Alpha Centauri system. To solve this either an isolated two-body simulation should be implemented or, eventually, an n-body simulation. That should hopefully address the situation. An n-body simulation was something I had eventually planned to do, to simulate the stability of orbits in procedurally generated systems, and then “lock” them in place and switch over to the current orbit propagator. Another issue is specific to Alpha Centauri and all other systems that have very distant companions. A star like Proxima cannot be shown to “scale” together with the other two, as it would be placed so much far away. The alternative would be to “jump” over to the distant companion and only show the local system.
But first, there needs to be more work done on actually showing the procedurally generated planets in these systems. Even though the simulation it is not yet accurate, it was actually interesting to go check other binary systems to see how their orbits will look like. It is a weird feeling when you can be surprised by something you yourself have created. Another interesting consequence of finding all this data is that the proper motion of stars across hundreds of years can also be simulated. This will allow stars to slightly change their place in the galaxy across very large timeframes.
Hopefully all this will make the game more interesting!