Tag Archives: Star Map

The Nine Sectors

If you recall, local space in this setting looks roughly like this:

adj-02aThe highlighted area is the area covered by our map – 3×3 sectors – with the central one, marked with a small “X”, the main sector the setting is all about. Coreward is up, Outward is down, Spinward is left and Trailing is right.

In order to create this central sector, we do need to know what’s just outside them, so I have been creating those other eight sectors’ worth of planets. I will not really check them or fix them up, except for regions that are actually important to my effort. This means all systems that I need to create trade routes to (so I can add them to my map) and a small section in the right-hand sector into which Empire has extended.

These are the tentative names I’ve picked:


Some notes:

Core: This is the core of colonial space. The empire/republic are here, and most of the important colonies. The border of this sector is pretty much the “edge of civilization”.

Expanses: Imperial colonisation and expansion was mostly directed towards this sector. It is a fairly sparse sector.

Frontier: This is an attractive sector with a dense population of star systems. From the Imperial/Republic Core sector it is only reachable via two key routes, and it is almost entirely unexplored.

Nebula: Dense interstellar gas clouds dominate this region, and many systems in this sector are fairly young. There is little usable real estate in this sector, and astrogation is hazardous.

Void: As the name implies, systems are scarce in this sector, but it is essentially divided into two regions. The more coreward void region, and a more outward-laying cluster of star systems.

Sentinel: The original colonists approached from this direction; it is a sector comparable to Core in terms of system density. Several smaller interstellar nations exist close to Core sector, and Empire (and now Republic) does extend about one subsector into the Sentinel sector. Exploration does not extend far into this direction, however, and all of the logs and astrogational data from the original fleet has been lost.

Islands: Several small startclusters dominate this sector, separated by great distances which make travel complicated.

Marches: Another frontier region pegged for expansion by Imperial authorities. However, since it is slightly further away and several other nations are in between Empire and the Marches sector, exploration projects had emphasized the coreward directions. It is unknown what, if any, expansion the Republic will undertake. The sector itself is fairly sparse in star systems close to Core sectors, but the outer region of the Marches is dense in stars.

Tempest: This sector is remarkable for an unusually high number of asteroid belts, nova remnants, and dead worlds – that is, worlds where life had once existed, but which are now sterile. The cause is unknown.

Quo Vadis, 256?

So. We have a home. Sector 256. This means the work is just beginning – now I need to lay out local space.


The map of local space should be centered on the Imperial Core. That is, by producing this map we imply that “this is it”, similar to how a Terran national map will show, well, the subject of the map plus perhaps parts of some neighbors. Subsectors F and G as well as J and K should thus be the main focus. K is obviously quite sparse – a backwoods area people don’t go to, perhaps comparable to a stretch of desert.

H on the other hand has many worlds that must be quite important – look at all of these A and B class ports and the travel connections between them!

In theory, this could be a neighboring nation but the ideas I have do not allow for a secondary powerful nation. So it’s part of the Empire, and this means I’ll have to expand the map to the “east” a little bit eventually, just to give our protagonists some room to explore.


The Imperial capital world, Mithra, and the original colony worlds the colonists settled on should be close to the center of that region. They do not “have” to be important anymore – just consider the difference between Rome two thousand years ago and now – but they should probably be relatively heavily populated. They should also be fairly close to each other.

Looking at the map, I immediately notice a bunch of temperate worlds which are marked as fairly habitable. (I also notice that habitability index 9 didn’t get shaded, but no matter). These are 1917, 2017, 2118, 2119, 2021, and 2219:

(8)Temperate 1917 X863445-0 Lt NI HI8 25500
(9)Temperate 2017 B8658B9-A Ga Ri HI9 833000000
(7)Temperate 2021 A663BB8-C Hi Ht HI7 786000000000
(8)Temperate 2118 D864951-8 Ga Hi HI8 5770000000
(8)Temperate 2119 C875657-8 Ag Ga NI HI8 4610000
(7)Temperate 2219 A576A85-A Ga Hi In HI7 12200000000

Interesting. #1917 works well for Mithra, just increase the population a little: X863845-0, Pop 156000000. Makes them “Rich” by Traveller definitions and I appreciate the irony. But we’ll get back to that later.

The other three original colonies were Sassandra, Ascalon and Xoth. Let’s use the three garden worlds, #2017, #2118 and #2219, for them. Either the colonists picked worlds most suitable for them, or ones they could easily terraform.

As for #2021, I’m reducing the population code to 9, with 1.19 billion inhabitants.

The Republic

The Republic was founded on Avalon. But where is that? With Mithra in “G”, our logical choices are “H” and “J”. J is probably the better choice – More isolated – but without wanting to foreshadow anything, I really want to place it in H. Let’s assume all those interconnected worlds indicate a tightly-knit community in this province, perhaps they were never too happy about being annexed by Empire in the first place. And Willem II was just the sort of Emperor who would ignore serious problems staring him into the face.

Consulting the map again, I find this:

(2)Hot 2715 A6309C7-D De Hi Ht Na Po HI2 1580000000

A small-ish desert world with high tech, good infrastructure, a very thin atmosphere and a class C government which the Traveller rules book says could be a revolutionary council. Could it be any better?

I can totally imagine these poor bastards, working in the mines under adverse conditions, their living quarters packed due to the high population. Everybody’s poor, and ideas of a Better Future begin to spread.

With the locations of Mithra and Avalon fixed, I’m thinking that the Republic first captured worlds in J, before circling back and attacking the Imperial core worlds from multiple sides. This probably also means that the J-H axis, with travel through the empty space of K, is the main area of Republic control. G is an occupied mess, and F ends up as a region on the sidelines – the Contact Light equivalent of the Regina subsector.

This is what I love about rng’s – they can be so inspirational!


World Generator Progress

Work days keep me from being productive where it counts – like science fiction world building!

I’ve made a number of improvements to my sector generator scripts…

  • I generate a “Habitability Index” – this has actually been in the script for a few days. I don’t use it for anything, but it’s a quick index of how nice the planet is to live on. Numbers are only ever added, not subtracted, so a world with a medium HI can still be crappy, but it’s still quite useful for judging worlds at-a-glance. Ranges from 0 (=abysmal) to 8(=perfectly earthlike).
  • I now use random seeds. As long as you know a sector’s seed, you can always recreate it again a second time with the script (as long as the script didn’t change).
  • The script now rolls for actual population, using Benford’s Law. (Thanks Berka.)
  • The script prints out some aggregated statistics about a sector – still a WIP.

Actual Population Sample

Here are the populations of the High Pop worlds of sector#121:

(8)Temperate   0110 B566998-8 Ga Hi  HI=8 A=6320000000
(3)Temperate   1502 B310999-C Hi Ht In Na  HI=3 A=1420000000
(7)Temperate   1710 A66ABD9-E Hi Ht Wa  HI=7 A=119000000000
(5)Temperate   3209 C8B5998-A Fl Hi  HI=5 A=3400000000
(6)Temperate   1617 B79AAD9-9 Hi In Wa  HI=6 A=31600000000
(3)Roasting    1620 A554A96-C Ga Hi Ht  HI=3 A=25100000000
(6)Temperate   2013 C841AD9-6 Hi In Po  HI=6 A=10800000000
(4)Roasting    2718 B5869B8-A Ga Hi  HI=4 A=7190000000
(6)Temperate   0330 D9729B9-7 Hi In  HI=6 A=4980000000
(7)Temperate   0923 B577A75-A Ga Hi In  HI=7 A=87300000000
(7)Temperate   1124 BA669B9-A Ga Hi  HI=7 A=1550000000
(7)Temperate   1127 C578BD9-7 Ga Hi In  HI=7 A=310000000000
(8)Temperate   1326 B8759D9-4 Ga Hi In Lt  HI=8 A=4960000000
(7)Temperate   1522 A675B66-B Ga Hi In  HI=7 A=206000000000
(3)Temperate   1527 A410A96-G Hi Ht In Na  HI=3 A=50000000000
(3)Cold        2229 A631AC9-E Hi Ht Na Po  HI=3 A=61200000000
(6)Temperate   2429 C894996-4 Ga Hi In Lt  HI=6 A=2990000000
(7)Temperate   1839 A585AA8-B Ga Hi  HI=7 A=79600000000

A= is the actual population. I only generate the leading 3 digits and then scale it up to the correct power of ten. Yeah that’s 300 billion people at TL7 on #1127 – with a small planet and more water surface than Earth has. Must be a lovely place. Lots of algae farms… Not to mention those TL4 and TL6 worlds.

Aggregated Statistics Sample

Generating sector: 121


Total Systems: 251

Total Population: 1022367735546

Star Ports:
   A: 12
   B: 24
   C: 40
   D: 48
   E: 57
   X: 70

To Do

I’ll add TLs and World Types to the statistics as well…

And I presumably should tackle unrealistic TLs somehow.

By the way, if anybody wants these scripts – let me know. You need unix (or a mac) for them, there is one shell script and one awk script – plus of course the sector map script I’ve modified.

Creating Local Space (2)

Today I decided to put one and one together, so to speak: Apply the theory I build up in the world building posts to the creation of our little nook of local space. Let’s call this our third trial run, that is, I may or may not keep the results.

For subsectors that had a split system probability, I rolled two subsectors each and then “masked” them manually. This was by far easier than to attempt to teach the script which hexes had what probability… However, for the lower-right corner two subsectors I got tired of this and just rolled 4- for the entire subsector. It will do.

Without much fuss, here is the sector map:


Click on it for the full-sized image. I kept my sketch as a translucent overlay.

The sector ended up having 213 worlds, slightly short of the 236 I had estimated. Tech level distribution is heavily stacked towards the low end:


World types are fairly well spread, though I stupidly removed my Se/Sm classes again:

As 4
Ga 54
Fl 53
Wa 7
Va 23
Ht 12
Lt 102
Hi 15
Lo 74
De 11
Ba 10

I’ve made the sector data the sample data for the hacked svg sector map script, if you want to look at or play with the raw data.

As for the results themselves, there are good and bad things.


  • Decent mix of world types
  • Fewer worlds than my draft sector (smaller is better)
  • Highest “regular” tech level is 13 (C), on 9 worlds.


  • The ten high tech worlds are all fairly low population (2×8, 1×9). The 15 High Pop worlds are 9×9, 5xA and 1xB, or between 159 and 1231 billion people, give or take a few. This isn’t necessarily a contradiction; neither China nor India have the highest tech on Earth.


  • The sector almost seems TOO sparse considering it is supposed to host the main interstellar nation in the region – even IF it is a frontier region
  • Distinction between “sparse” and more “dense” star region absolutely not visible based on sheer system presence.

Open questions:

  1. Does the setting work with so few TL10-13 worlds?
  2. Is the sector as-is viable for the sort of setting I have in mind?
  3. Is it, and this may sound silly, aesthetically pleasing?
  4. Is it a “good sector” for adventure?

There are probably more… we’ll see…

Size Matters, and Subsector Trial Run 2

The conclusion of the first trial run was that worlds were too big, the change I made was too drastic. So I sat down and did a few more 10k runs. This is a graph of the relevant world types – I consider something like “rich” to be too poorly defined to begin with.

Note that I added “Se” (Super-Earth, size 10+) and “Sm” (Small, size 2-) for this exercise.


I hope it’s not too small to read. Anyway, the graph shows 3d6-3, 3d6-4 and 3d6-5 compared to 2d6-2 when rolling for world size.

Obviously Super-Earths dramatically decrease and small worlds increase during that sequence. Fluid Ocean worlds are also directly tied to large worlds, and Vacuum worlds to small worlds.

3d6-5 would result in more asteroids than 2d6-2. Again, a no-brainer, but since I wanted to reduce smaller worlds not increase them, this seems like a poor fit solely on this criteria.

3d6-4 seems like a good compromise choice for my purpose based on this graph, so I’ll use that.

Tech Level

I haven’t really been able to make TL behave nicer, and I didn’t want to add a lot of filters. I can still do that in the future, but I have another plan.

Trial Run 2 Subsector

TR2 svg-map.pl

Many garden worlds in this one. I like how there again seems to be a cluster – marked by red communications links – of “developed” worlds contrasting with the “frontier” of the rest of the sector.

World Data:

Cold        0101 C941775-8 Po
Hot         0109 C787545-5 Ag Ga Lt NI
Temperate   0110 EA75652-6 Ag Ga NI
Special     0202 XAD5423-2 Fl Lt NI
Cold        0205 X410000-0 Ba
Temperate   0210 X410000-0 Ba
Temperate   0304 X967543-1 Ag Ga Lt NI
Cold        0308 B754431-6 Ga NI
Cold        0403 ECA6373-6 Fl Lo
Temperate   0405 X893224-3 Lo Lt
Special     0410 XBE4315-0 Fl Lo Lt
Hot         0501 EB86000-0 Ba Ga
Temperate   0506 C553442-5 Lt NI Po
Cold        0508 D567523-4 Ag Ga Lt NI
Cold        0510 X4A4465-1 Fl Lt NI
Cold        0601 X510467-4 Lt NI
Roasting    0606 CAC1775-7 Fl
Temperate   0608 B653965-9 Hi Po
Temperate   0703 E986242-4 Ga Lo Lt
Temperate   0705 B8529A9-9 Hi Po
Special     0802 EDD3341-4 Fl Lo Lt
Hot         0803 X9C7340-2 Fl Lo Lt
Temperate   0805 D7489B9-5 Ga Hi In Lt
Temperate   0808 A568BA8-A Ga Hi
Temperate   0809 B684475-B Ga NI

World #808 has a population of B, “hundreds of billions” and  must be the undisputed superpower of this subsector. Tech Level is again generally fairly low, considering I was aiming for a nominal 13 on “core” worlds, but it is a fairly decent mix if one looks at it as a pure Traveller-like premise.

Creating Local Space (1)

While I am working on the framework to generate the low-level detail, I can’t help myself but to work on the larger picture – and some actual setting data. Keep in mind that I already created one sector last year; I consider it my “draft”, and it will certainly inform many of the decisions I will be making.

For the first sector, I simply created a small grid of 3×3 sectors with a rough drawing of what I thought local space should look like. (In reality, these should be rectangular.)


I’ve refined this method somewhat. I created the following in The GIMP:


Black are “sparse” or “rift” regions, white are regions of greater star density,

The process to create such an image is fairly simple:

  1. Create a new image. I used landscape, A4 size. But this doesn’t matter.
  2. Filters -> Render -> Clouds -> Plasma.  I used the maximum Turbulence.
  3. Colors -> Desaturate
  4. Colors -> Threshold. Play with the sliders until it looks nice
  5. Filters -> Blur -> Gaussian Blur. I used Blur method “ILR” and radius 30×30, though you may have to change this depending on your image. You want to significantly soften the edges, while keeping the general shapes recognizable.
  6. Create a second layer.
  7. On the second layer: Filter -> Render -> Clouds -> Solid Noise. I used detail 15, x and y size of 16, and both Turbulent and Tilable disabled.
  8. Move this new layer underneath the original layer.
  9. Set the original layer’s mode to “multiply”.
  10. Merge the layer down.
  11. User Colors-> Threshold, play with the sliders again until you get nice distribution.
  12. If you dislike the results, try inverting colors or different random seeds for your plasma clouds.
  13. Don’t be afraid to manually edit the image after step 11 – I did!

Placing our Sector

Note that the image doesn’t have any sort of scale, which gives us some flexibility. I used Inkscape to place the same 3×3 sector grid, and I resized it a few times until I had the “right” fit. I decided on this location:


As is the tradition, X marks the spot – the sector of my setting. I picked this location because there is a lot of “interesting geography” adjacent to it.

Here’s the zoomed section, with subsectors stenciled in as well:


Looking at the map, I think that these are good probabilities:


I estimate a total of 236 systems for this, or just over half the number of systems in my draft sector. If this ends up feeling too sparse, I can obviously shift the probabilities up a bit.

We’ll do that next time.

Subsector Trial Run 1

Now that we’ve looked at all characteristics, it’s time to roll up an entire subsector – my first “real” trial run! I’ve modified the subsector map script so that it handles the slightly non-standard UWPs I am producing.

I’ve also generated trade code classifications as per the Mongoose Traveller rules.


This is the data I came up with:

Cold        0103 D3A6330-9 Fl
Temperate   0109 EB9A872-7 Wa
Temperate   0110 C574778-9 Ag
Temperate   0204 X879155-3 Lo Lt
Temperate   0301 C310789-A Na
Cold        0302 E300434-6 NI Va
Hot         0303 X8B4000-0 Ba Fl
Temperate   0307 BAA2778-C Fl Ht
Hot         0309 C6307A9-A De Na Po
Hot         0310 D7A79D8-2 Fl Hi Lt
Hot         0402 X8B5444-3 Fl Lt NI
Hot         0407 ECB6527-3 Fl Lt NI
Cold        0502 E764468-6 NI
Hot         0503 D697357-8
Special     0603 CDEA740-A Fl Wa
Searing     0605 X100000-0 Ba Va
Temperate   0608 XA626B8-2 Lt NI Ri
Cold        0702 E100347-8 Va
Frozen      0704 EBB6231-8 Fl Lo
Temperate   0705 X830116-3 De Lo Lt Po
Special     0706 XCE6131-2 Fl Lo Lt
Searing     0707 X7B4100-1 Fl Lo Lt
Roasting    0708 CA88756-5 Ag Ga Lt Ri
Temperate   0805 E566750-6 Ag Ri
Temperate   0807 D886412-2 Lt NI
Hot         0810 XB86113-0 Lo Lt

Looking at this data, I may have to change my world generation process a little.

  1. I think I definitely did overcompensate on the world size. There are too many big worlds in the mix now, and it’s hard to get asteroid mainworlds at all. In my 10k worlds trial run, a mere 50 main world asteroid systems exist. I wanted to make them more rare, not eliminate them.
  2. TLs are definitely on the low side. Out of the 26 worlds, 14 worlds have a tech level of under 7. Two worlds are not inhabited at all. #307 has a TL of 12; #301, #309, and #603 have a TL of 10.
  3. Too many population 1 worlds, 10-99 people. These are really hard to explain if they have a low tech level. I probably do need to enforce a “minimum tech level based on environment” – Worlds #707 and #706 for example seem silly.
  4. Otherwise population seems Okay-ish. Primitive societies also seem to have very low population numbers (stone age population of Europe, for example, is estimated between 4000 – 30000 individuals) but some of the values generated are a bit odd.

Now that I can easily create large sets of worlds/systems, I can tweak some of the rolls and constants and see what comes out of it.

Things to try:

  • World size: Larger negative DM to world size. Perhaps make it -4 or -5 instead of -3.
  • Tech level: A large positive DM comes from starport class, and a low population world can’t have a high-class starport.  Since population 1 are almost certainly not natives, they ought to have a much higher TL. Current DM is only +1, and at the same they will be penalized for a bad starport class since that is now dependant on population; it may make sense to be radical about it. Ignore star port TL modifier for low population worlds and even add a +7 or so instead. Population 2 is probably the same. Population 3 can easily be a viable stone age civilization.

Overall, though, I think we’re on the right track.

Update: After writing this, I discovered that my world generation script evaluated the Lo and Ga trade codes incorrectly. It’s fixed for the future…

Subsector Trial Run 0

Here’s the data I rolled up for a sample subsector. I’ve set the world name to the temperature range. I used 5 or less for the system probability, just so it’s not too empty. Government, Law, TL, Starport and trade classifications are still missing.

Cold        0102 887600-0
Temperate   0106 7a1800-0
Temperate   0107 564800-0
Hot         0109 400500-0
Cold        0210 7a2500-0
Temperate   0201 621900-0
Frozen      0203 ba6000-0
Temperate   0205 ab9900-0
Cold        0209 9c4200-0
Roasting    0306 a99500-0
Special     0401 ce7200-0
Temperate   0403 785700-0
Temperate   0405 779700-0
Special     0409 bf7200-0
Hot         0501 545400-0
Special     0610 cf4000-0
Roasting    0603 7a6700-0
Special     0604 8d6400-0
Frozen      0607 400000-0
Hot         0710 899100-0
Searing     0709 bc6100-0
Special     0801 8da700-0
Temperate   0803 874100-0
Frozen      0808 8b0400-0
Temperate   0809 673500-0

Using Alex Schröder’s Subsector map program shows us this layout (the colored markings are my addition, see below):



I know this is hardly statistically significant data, but still:

  • All worlds are fairly sizable. There are two main worlds of size 4, one of size 5.
  • Large size means weird atmospheres, hence the “special” temperatures.
  • Almost all worlds are inhabited; Worlds in hexes 203, 610 and 607 are uninhabited.
  • Highest pop is 9 (“billions”) on worlds 201 and 205. 201 is a medium sized world with a thin atmosphere and little water. 205 a high-gravity 90% water world with a corrosive atmosphere, so they must have rolled 12 for population.
  • Two worlds have a population of 8 (“hundreds of millions”), and four have a population of 7 (“tens of million”). Total subsector population is thus <20 billion people. By chance, they are all clustered in the upper section of the map (see blue markings on the map, above) which gives us a nice division – this is obviously a frontier subsector with a few older, more mature colonies… works for me.

I wonder if I over-compensated on world size, but it seems like a reasonable mix of worlds to me.


When I first started working on the science fiction setting, I created several maps covering the Orion Spur and even the Milky Way galaxy. I quickly worked out that these settings were much too big for me to handle, even if I only worked on selected “important” systems.

I was in the process of working out the “correct” size out when Realmwright finally convinced me to watch Firefly – I had been hesitant because I knew that it had been cancelled. I was surprised how much Firefly “felt” like a Traveller game. More importantly, it made me think how important recurring characters and locations are, and I finally decided to bring the setting all the way down to the very small scale of a Traveller sector. (This was, incidentally, when I began using Traveller to model the setting.)

I ended up creating an entire sector, but I did not really think about the process first and found out, later, that it was flawed – one of the key lessons that led me to the creation of Contact Light.

How “big” is a sector really?

Obviously, a Traveller sector consists of 4×4 subsectors, each measuring 8×10 parsecs. But 36×40 parsecs doesn’t actually tell us much about the scale of a setting.

Travel times: Once I had decided on using a Traveller sector for my setting, I worked out that a constant-speed hyperdrive with a velocity of 0.5 parsecs would be ideal. A subsector is 14 hexes across (diagonally), so that means 28 days – four weeks. For comparison, it took Colonial Age settlers four to five weeks to cross the Atlantic ocean.

Number of systems: As it turns out, a Traveller sector is quite a crowded place. The Mongoose basic rules book recommends a 50% system density (and if memory serves me right this has always been more or less standard). Since a subsector has 80 hexes, this means forty worlds per subsector or 640 worlds per sector. That’s a lot. Incidentally, my current Sector contains 424 worlds – some subsectors are more sparse – and that feels overwhelming.

What’s “realistic”?

The stellar density near our solar system is 0.004 stars per cubic lightyear, or about 0.14 stars per cubic parsec. The nearest we can get with one or two dice is a 1-in-6, or  16.67%, chance. This would result in ~ 13 systems for a subsector, or 208 in a sector. (Anecdotal data: The Sol sector in Traveller contains 18 systems.)

What can we do with 2d6?

In reality, I can’t imagine why anybody would want to roll even 80 hexes manually, but let’s still stick to the dice conventions. So what can we actually do with 2d6? This quite easily calculated, too:




Per Subsector

Per Sector

2 or less





3 or less





4 or less


Near Earth



5 or less







6 or less








7 or less








In other words, my sector worked out spot on at the 33% mark, or twice the stellar density near our Earth.

And I frankly can’t imagine what a sector at 58% or higher will look like. Messy, for sure.

What’s “good”?

I don’t think there’s a single number you can cite and say “this is what you should use”, since it’s too intimately tied to other assumptions in your setting.

Looking at these numbers and at my first sector, I have a gut feeling that 27.78% is the sweet spot for what I have in mind. But as we noted, it’s not only the number of systems that matters, but how interesting they are; let’s keep the numbers in mind and revisit them when we’re further along in the world generation system.