There’s a Mastodon bot that regularly posts example maps: @traveller!

2020-07-30 Starship Geomorphs 2.0

“The Starship Geomorphs book has been revised and expanded and is now available for free download.”

I you don’t remember, this was already the best Traveller thing in PDF back in 2018. It makes me want to run Traveller.


Add Comment

2019-10-01 Fantasy Traveller

In the vein of How about 2d6? I was recently reminded of the Traveller variants that are not based on a Science Fiction setting.

All I knew was games such as Mercator. It’s a free game by Paul Elliott:

MERCATOR is a Roman Empire setting for Classic Traveller. Marc Miller has read it and given it his seal of approval!

I also knew that the Cepheus Engine existed as a free Traveller variant, but @lskh discovered that Zozer Games has some low tech supplements:

Low Tech Weapons provides you with a huge number of new melee weapons that can be added without fuss directly into your Cepheus Engine or 2D6-based SF RPG.

Fast Magic offers a complete, improvisational magic system.

As it turns out, Zozer games is Paul Elliott, so Mercator comes from the same source. The Cepheus Engine is by Jason “Flynn” Kemp via Samardan Press.

The only other such product I know is Worlds Apart, which exists both as a free game and as a fancy game on DriveThru RPG, by Expeditious Retreat Press.

Another find by @lskh are the many dozens of products offered by Micheal Brown on DriveThru RPG, including Magic and Martial Art.

Another 2d6 fantasy game might be Fenris but when you start skimming it, it looks a lot more like a d20 system with the d20 replaced by 2d6. Just to give you an example, attributes are still 3d6. There are character levels and hit dice and all the things we know and love from D&D variants, so I’d say this is not a game in the Traveller vein.


Comments on 2019-10-01 Fantasy Traveller

There’s another one in the works as well: Sword of Cepheus.

(By the way, how exactly does your subscription system works? I don’t think I’ve been receiving e-mail notifications of comments to posts I subscribed to.)

Ynas Midgard 2019-10-02 06:00 UTC

Hm. Perhaps there’s a bug somewhere. Check your subscriptions. It should list “Comments on 2019-10-01 Fantasy Traveller”, for example. Once a day a cron job is supposed to compare these subscriptions to the list of recent changes and send mails as appropriate. Looking at my outgoing emails, it seems to be working.

– Alex Schroeder 2019-10-02 06:20 UTC

Aldreth was done for Megatraveller.

And I misremembered Wanderer as an actual game and not simply the brilliantly done mock-up with some relevant threads...

– Simon 2019-10-02 22:55 UTC

A half-step away there is also the excellent science fiction game Stars Without Number by Kevin Crawford. It is an OSR/TSR-era D&D class-and-level game with Traveller’s 2d6 skill system attached. It works very, very well. (And the GM tools/setting creation chapters are also great.)

– Blunder 2019-10-02 23:17 UTC

That blog post sounds sweet, Ynas!

Yeah, Simon, that fake fantasy Traveller The Wanderer drove me nuts back then. 🙂

And the link to Paladin in a Citadel led me to this Orcus picture that I like so much! My favorite.

I had forgotten that Stars without Number used 2d6 for skills, Blunder. Kevin is not afraid to mix and match!

– Alex Schroeder 2019-10-03 05:43 UTC

FYI I’m not getting any emails for my comment subscriptions either.

– Björn Buckwalter 2019-10-04 14:05 UTC

Hm. I just checked my mails and cron seems to print no errors:

Date: Fri, 04 Oct 2019 07:08:36 +0200 Sending Comments on 2019-08-15 Deep Carbon Observatory Day 1 to bjorn... using

Perhaps Gmail changed something about all that?

– Alex Schroeder 2019-10-04 14:38 UTC

Hm, when I setup a test and remove all the safeguards, I do in fact get an error:

invalid SSL_version specified at ... IO/Socket/ line 698.


– Alex Schroeder 2019-10-04 14:49 UTC

Wohoo! Back in business. Thank you for the heads up.

– Alex Schroeder 2019-10-04 16:31 UTC

Add Comment

2019-07-08 Square Traveller

OK, square maps instead of hex maps, for Traveller, right?

This is the sort of map the Traveller Subsector Generator creates. It’s pretty good, I like it.

Original map

If you use the same data and rewrite it somewhat, you can use Text Mapper to generate the same map, but now with rounded communication and trade lines:

Hex map

And since Text Mapper recently got the ability of creating square maps instead of hex maps, all I had to do was fiddle a bit with the data, move the black frame around, move the labels into the correct positions, and we’re nearly there:

Square map

There are still so many things wrong: the symbols overlap the coordinates and the labels; the lines intersect the labels, so basically everything is terrible and unreadable at a second glance. But it will have to do for the moment. Perhaps if square Traveller maps make a breakthrough one day! 🤪

The map generated uses a separate map, Which in turn uses a separate library. If you want to regenerate, you need to put the following in the text area:



Or take a look at the map and modify to taste.


Add Comment

2019-01-11 No Advancement

If I were to design a simple new RPG it would not have advancement. Much like Traveller. So how do you get an ever changing game experience? Different spells might be a way. But what I would like to do would be the adding of powerful named enemies. Nobody knows you at first, you have no friends, and no enemies. Later, you know more about the world, you have made friends, and you have made enemies.

Personally, I think that “inner changes” and growth as a person don’t need rule support, that just works as-is. I guess the reason I was thinking of this was a podcast episode by Ray Otus I just heard about Advanced Sellswords and Sorcery. The idea was to have some sort of “advancement” which meant being able to take more wounds (being able to have more negative tags/aspects before being taken out) and I thought to myself: but this just makes combat longer, that’s boring!

Have you ever played Traveller? It doesn’t have any meaningful advancement at all. The only thing that changes over time is that you might have more money, better equipment (including a starship, of course). I still think it has long term appeal.

Same with the basic idea Fate as I see it: you might shuffle the skill pyramid around, but you’re not going to actually get better in absolute terms. And that suits me fine. Even though it’s very different from the D&D family of games. At least, that’s how I remember it. On Mastodon, @hawkjohenson remembered some sort of advancement (adding more skill points to the skill pyramid), but we both didn’t check the books. :)

The Fate rules I read and used were Spirit of the Century, Diaspora (and that Mass Effect game based on Diaspora, not the other one), and some reading of Fate 2 way back when I revised my own Mesopotamian Fate variant (in German) – and I never noticed a way to grow the skill pyramid. I just reread my own Fate variant and it mentions switching skills in the pyramid and removing consequences and the like – but not getting more skill points.

What I am looking for is the promise of changing gameplay over time. Classic D&D achieves this in a way with spell levels. The game with and without fly spell is very different. Same with a host of other spells.

To take a very different example: I love how the gameplay of A Dark Room changes over time. So breaking away from that single axis of change (in the words of @halfjack) is central.

That is also why I don’t want to play a variant of D&D where characters get more and more hit-points and it’s all about the attrition, the slog, the grind, the endless back and forth. This happens if hit points are inflated, or special attacks like level drain and various save-or-die effects (poison, petrification) are removed from the mid-level game. If these are not in effect, then all you are left with is the slow back and forth of melee. Ideally, however, combat is over in two or three rounds when I run the game: at low levels, two or three hits should take people out; at higher levels, it’s spells, save-or-die and level drain and similar attacks that speed things up.

That’s also why I don’t want the armour class of the opponents to increase as the attack bonus of the characters increases. If you do that, nothing changes. I’m fine with fighters hitting every single round at higher levels. It’s supposed to feel different!

Changing gameplay is more important than more staying power, better chances to hit, or similar “advancement”.


Comments on 2019-01-11 No Advancement

Interesting argument to simply create “chapters” and for advancement to them: Ditch Experience Points Forever!

Note that in Just Halberds I said the following regarding advancement:

Just hand out one kind of improvement to one character per session, if appropriate based on the events during the game. I’ll see whether I can continue doing this. I don’t want to count experience points and we’d still have some sort of advancement for the characters that are playing. This is important to me as I don’t want to advance characters that aren’t playing. – 2020-03-27 Ancient School Rules

– Alex Schroeder 2020-04-14 19:20 UTC

Add Comment

2018-11-04 Traveller Starship Geopmorphs

Wow. This free PDF with Traveller geomorphs is amazing. All your station mapping needs are taken care off, I’d say! 🙇

Linked from this blog post: The Starship Geomorphs book is finally complete!.

I always assumed that one day we’d be able to use Gridmapper to create such maps. But not with this level of detail. Such curves, structures, and more details.


Comments on 2018-11-04 Traveller Starship Geopmorphs

Definitely one for Uplinked Intelligence, the wiki that collects cool OSR Science Fiction house rules.

– Alex Schroeder 2018-11-04 19:21 UTC

Status of the Starship Geomorphs book update. There is going to be an update‽ Wow!

– Alex Schroeder 2020-03-21 22:40 UTC

Add Comment

2018-10-27 Names in Traveller

I keep wanting to go back and run a Traveller game. But this seems to be my curse: writing software for games I don’t play. Like other people reading rules for games they don’t play, or buying materials they don’t use. Well, in case you want to run a Traveller game, check out this Traveller map generator. Please note that generating the map for a whole sector takes a few moments. Subsectors are much faster.

I just added something new to it: languages. For a long time, the map generator would pick a “language” and generate names that belonged to this “language”. The name generator is also available as a separate tool. I felt that over the centuries, there must be settlements and growth, decay, something like migration. And thus the names should stick around.

Here’s what I’m doing now:

  1. After all the systems on the map are named (using the language of the ancients, I guess), I go through all the systems again.
  2. Every system has a 5% chance of having developed a dynamic culture with it’s own language and names.
  3. For every culture that’s thus generated, I determine whether it has access to Jump-1 or Jump-2 drives (50% each).
  4. And I decide for how many jumps they will spread: one to three jumps.
  5. If they arrive at a system where another culture has already taken root, there’s a 50% chance that they won’t settle and expansion stops.
  6. This expansion also renames the systems using the new “language”.
  7. When I’m done, it’s time to pick colours. Sadly, I know very little about colours and so I just have seven colours prepared and each culture gets one of them. That also means that sometimes regions with the same colour will touch and appear to form a single area. Well, I guess these are multi-lingual empires.
  8. System not touched by these expansions keep their names and the white background.

It looks quite appealing!

Sector Map

There are still unresolved questions, though: is the red area in the lower left really a merger of several larger cultures that all happened to end up red?

Here’s some debugging output. What you see is a line showing where the expansion started, the colour picked, the jump drive quality (1 or 2), and the expansion (1 to 3, going down by one with every step). I filtered the entire output for the area of interest: x coordinates from 01 to 09 and y coordinates from 30 to 49. Every line is prefixed with it’s line number, which should make it easier to spot gaps.

50 matches for "0.[34]. " in buffer: *scratch*
    127:0735 005 1 1
    128: added 0635 1 1
    129: added 0734 1 1
    130: added 0835 1 1
    131: added 0536 1 0
    132: added 0633 1 0
    133: added 0935 1 0
    134: added 0936 1 0
    182:0840 009 2 2
    183: added 0740 2 2
    184: added 0838 2 2
    185: added 0940 2 2
    188: added 0638 2 1
    189: added 0438 2 0
    190: added 0537 2 0
    191: added 0538 2 0
    192: added 0737 2 0
    195: added 0936 2 0
    414:0935 023 2 3
    415: added 0735 2 3
    416: added 0835 2 3
    419: added 0534 2 2
    420: added 0536 2 2
    421: added 0635 2 2
    422: added 0936 2 2
    423: added 0334 2 1
    424: added 0335 2 1
    425: added 0435 2 1
    426: added 0633 2 1
    427: added 0734 2 1
    428: added 0134 2 0
    429: added 0135 2 0
    430: added 0232 2 0
    431: added 0234 2 0
    432: added 0332 2 0
    433: added 0336 2 0
    434: added 0136 2 0
    435: added 0337 2 0
    436: added 0538 2 1
    437: added 0737 2 1
    438: added 0338 2 0
    439: added 0339 2 0
    440: added 0438 2 0
    441: added 0638 2 0
    442: added 0537 2 1
    452: added 0931 2 1
    453: added 0932 2 1
    459: added 0730 2 0
    460: added 0731 2 0
    461: added 0830 2 0

As you can see, there was a culture that started in 0840 and grew into 9 more systems (with some growth outside the bounds that we’re looking at) but the culture which started in 0935 gobbled half of it up. A Jump-2 drive and a drive to expand up to three jumps makes a massive difference. Just to make sure that the remaining lines did not hide anything important, I went back to the file: 63 systems!

0935 023 2 3
 added 0735 2 3
 added 0835 2 3
 added 1034 2 3
 added 1134 2 3
 added 0534 2 2
 added 0536 2 2
 added 0635 2 2
 added 0936 2 2
 added 0334 2 1
 added 0335 2 1
 added 0435 2 1
 added 0633 2 1
 added 0734 2 1
 added 0134 2 0
 added 0135 2 0
 added 0232 2 0
 added 0234 2 0
 added 0332 2 0
 added 0336 2 0
 added 0136 2 0
 added 0337 2 0
 added 0538 2 1
 added 0737 2 1
 added 0338 2 0
 added 0339 2 0
 added 0438 2 0
 added 0638 2 0
 added 0537 2 1
 added 1037 2 1
 added 1038 2 0
 added 1039 2 0
 added 1137 2 0
 added 1237 2 0
 added 1032 2 2
 added 1133 2 2
 added 1234 2 2
 added 1235 2 2
 added 0931 2 1
 added 0932 2 1
 added 1030 2 1
 added 1031 2 1
 added 1131 2 1
 added 1132 2 1
 added 1232 2 1
 added 0730 2 0
 added 0731 2 0
 added 0830 2 0
 added 1229 2 0
 added 1230 2 0
 added 1331 2 0
 added 1332 2 0
 added 1333 2 0
 added 1334 2 0
 added 1432 2 0
 added 1433 2 0
 added 1434 2 1
 added 1435 2 1
 added 1535 2 0
 added 1536 2 0
 added 1634 2 0
 added 1337 2 0
 added 1537 2 0

This culture did not “fuse” with neighbours. They reached from 01 to 16 in width and from 29 to 39 in height all by themselves. But going back to the map, a quick check shows that 1240 is also red and not in the list. How come? It belonged to another large region:

0840 009 2 2
 added 0740 2 2
 added 0838 2 2
 added 0940 2 2
 added 1039 2 2
 added 1040 2 2
 added 0638 2 1
 added 0438 2 0
 added 0537 2 0
 added 0538 2 0
 added 0737 2 0
 added 1037 2 1
 added 1038 2 1
 added 0936 2 0
 added 1137 2 0
 added 1139 2 0
 added 1237 2 0
 added 1140 2 0
 added 1240 2 1
 added 1439 2 0
 added 1440 2 0

And now we come to the colouring. This is culture 009 and 023. The CSS class is computed by taking this number mod 7 + 1, resulting in 3 for both, and the class culture3 uses the background #fff0ff (some sort of plum, I guess).

I’d say the next improvement would be adding some more colours before fiddling with the algorithm too much.

Do you think languages should spread along trade and communication lines? Or should they spread out based on how close systems are? For example: if a civilisation had mastered jump-1 but not jump-2, the language would have spread to neighbouring systems that can be reached with their ships, independently of whether the economics later warrant trade and communications?

Words for certain products like tea in our world have spread far and wide. Thus, is trade the most important aspect? It’s a good point. As a counter point I can only offer that languages often seem to be contiguous areas in the world, both rich and poor, and that the major trading centres of the world don’t all speak the same language (even if the merchant class would speak Roman, or English, or Portuguese). So the names of new products might travel with products, but language itself seems to spread organically, from family to family, as people slowly move from place to place.

I guess it also depends on whether you think that the sophonts present are there due to local evolution or due to settlement from nearby systems. If nearby systems, then the first language group to arrive is simply going to dominate, even if trade later fails, I’d assume? So, I’d argue that easy of travel is irrelevant as long as somebody did the actual travelling. Perhaps isolated worlds should simply get their own languages.

I think I need to avoid diving into this rabbit hole! No overthinking! Just focus on making a nice map that serves to inspire a referee.


Comments on 2018-10-27 Names in Traveller

New features:

  • Named the cultures in the UWP instead of simply numbering them.
  • Added more colours.
  • Colours are used in random order.

Example: subsector 1285109285.

Ruquo            0101  C546512-6     SRP   Ag Ga NI
Luphijo          0102  D363437-4       S   Lt NI
Thepru           0104  C3508A9-7     SCG   De Po A            [Kudruje]
Drufidro         0106  D544666-3      SG   Ag Ga Lt NI        [Kudruje]
Ngipe            0109  B34268C-10    SCG   NI Po A            [Kudruje]
Kudro            0110  A697435-8    SRTG   Ga NI              [Kudruje]
Lujedro          0203  C7A0887-10      S   De A               [Kudruje]
Peku             0204  E628969-7       G   Hi In A            [Kudruje]
Drupha           0205  E555367-2       G   Ga Lo Lt           [Kudruje]
Phathe           0206  B768344-6      NC   Ga Lo              [Kudruje]
Drongi           0207  C775000-0    STCG   Ba Ga              [Kudruje]
Zafi             0208  D354333-5       S   Lo Lt              [Kudruje]
Ngipha           0210  A77576B-9      TG   Ag Ga A            [Kudruje]
Zhaghe           0301  A3439EF-8    RTCG   Hi In Po A
Shewhi           0303  D659411-5           Lt NI              [Whih]
Zatheqo          0305  E864233-2       G   Ga Lo Lt           [Kudruje]
Drupe            0307  B76778A-8      NT   Ag Ga Ri A         [Kudruje]
Phaza            0308  C759664-4     SCG   Lt NI              [Kudruje]
Zaspoi           0310  D577100-7      SG   Ga Lo A            [Kudruje]
Shepru           0402  B400368-12     NT   Ht Lo Va           [Whih]
Shidu            0403  C482851-9      SC   Ri                 [Whih]
Kuiku            0406  C537510-6       G   NI A               [Kudruje]
Zazafi           0408  C644652-8      RG   Ag Ga NI           [Kudruje]
Kuiza            0409  C548510-8      TG   Ag Ga NI A         [Kudruje]
Drolu            0410  D676555-3      SG   Ag Ga Lt NI        [Kudruje]
Stili            0501  E020774-10      G   De Na Po A
Sheshe           0503  B524115-11    TCG   Lo                 [Whih]
Drodro           0505  E750788-2       G   De Lt Po           [Kudruje]
Zadrungi         0507  C656000-0       G   Ba Ga              [Kudruje]
Pruku            0510  AAA6ABC-11    RTC   Fl Hi In A         [Kudruje]
Ngicha           0604  E666210-2       G   Ga Lo Lt A         [Kudruje]
Chadru           0607  C558778-7      CG   Ag Ga A            [Kudruje]
Wraghe           0701  X94A414-5       G   Lt NI Wa           [Quughe]
Zaspo            0704  D331355-10     SG   Lo Po              [Kudruje]
Qopha            0705  C436754-11     RG                      [Kudruje]
Kujelu           0706  C100536-9      SG   NI Va              [Kudruje]
Phangi           0708  B9A0220-8      NS   De Lo A            [Kudruje]
Whoghe           0801  C000645-12      G   As Ht Na NI Va     [Quughe]
Quutra           0802  B440544-13   STCG   De Ht NI Po        [Quughe]
Ghetho           0803  D446553-6       G   Ag NI              [Quughe]
Mostughe         0805  E86A355-8       G   Lo Wa
Deprui           0807  D758102-8      SG   Ga Lo A            [Kudruje]
Druza            0809  B242453-13   NSTG   Ht NI Po           [Kudruje]
                       ||||||| |
Ag Agricultural        ||||||| |            In Industrial
As Asteroid            ||||||| +- Tech      Lo Low Population
Ba Barren              ||||||+- Law         Lt Low Technology
De Desert              |||||+- Government   Na Non-Agricultural
Fl Fluid Oceans        ||||+- Population    NI Non-Industrial
Ga Garden              |||+- Hydro          Po Poor
Hi High Population     ||+- Atmosphere      Ri Rich
Ht High Technology     |+- Size             Wa Water World
IC Ice-Capped          +- Starport          Va Vacuum

Bases: Naval – Scout – Research – TAS – Consulate – Pirate – Gas Giant

Subsector 1285109285

– Alex Schroeder 2018-10-28 22:04 UTC

And a Mastodon bot: @traveller!

– Alex Schroeder 2018-10-29 09:15 UTC

The thing I like about this is that it provides a sort of backstory inspiration. “After the fall, the Kudruje resettled most of the subsector. Their superior ships allowed them to spread far and wide. Towards the core, their progress was checked, however. The Whih cluster proved hard to penetrate and the frequent uprisings of the Quughe and their spiritualism have made any attempts at a take-over too costly. Their systems continue to languish in poverty.”

– Alex Schroeder 2018-10-29 15:50 UTC

Hm, need to think about the Trader Format. This doesn’t seem to work.

– Alex Schroeder 2018-10-29 20:22 UTC

Sector Generator/Mapper:

One thing I noticed: If I provide coordinates all within a subsector, but not starting at 0101, it expands to a portion of a sector so that it can show the subsector one was describing... but that leaves whitespace. It would be nice to be able to say ’subsector A’ ’subsector C’ etc. and then have just a subsector map showing the hexes that would be in that subsector (for instance, 0911 to 1620 would be subector E if I have that right.

I mean, having blank space and my subsector in the bottom right is okay, it just looks odd and I’ll need to manually GIMP it to trim it.

Also, how/where are the routes defined? I’ve changed the UPPs of many of the systems, but the trade routes remain (skipping some very high value locations). Is there a way to allow one to either A) have some control over trade route creation or B) have a checkbox for ’no routes please’ (I can add them later in GIMP where I want them).

Just some suggestions. I like the look of what you’ve done.

I used to use Universe (BITS) and love it, but the author isn’t ready to release an updated version yet that will run on Win 10. It made amazing maps too. The planet icons that app used were amazing.

Nice work you’ve done. I salute your efforts.

Tom B (kaladorn on COTI and other spots) 2020-04-08 07:47 UTC

Definitely good ideas. In order to remove the routes, all I have right now is a workaround: if you have Inkscape, you can load the map into Inkscape and easily delete the maps. All the trade routes are in one group and all the communication routes are in one group, so you just need to select one of each and delete them and they’re all gone.

The algorithm used to draw them are based on how I read the rules in the Mongoose 1st ed rules. The code in the comment says the following:

Communication routes

  • connect all the class A starports, naval bases, and Imperial consulates
  • only within two hexes
  • eliminate all but the best connections if the system has amber or red travel zone

Trade routes

  • connect trade codes In or Ht with As, De, Ic, Ni
  • connect trade codes Hi or Ri with Ag, Ga, Wa
  • skip systems without fuel (no starport A–D, no gas giant, no trade code Wa)
  • skip systems with travel code R
  • create a minimal spanning tree based on that graph (see 2010-05-20 Updated Traveller Mapping)

– Alex Schroeder 2020-04-08 11:33 UTC

I have Inkscape (I was using it to help me with a fantasy mapping issue - existing raster map (paper map originally) that I wanted to import to Profantasy and Inkscape if I did a bit of work with the raster, could use its powers to create a path for me for the landmass boundaries with the seas and then I could export them). That project is at about the 55% mark but it got parked due to real life. I’m far more familiar with Gimp than Inkscape though. But deleting some stuff sounds manageable if I can find it.

I understand following the rules, but I have a hard to fathom example:

Sotretre         0101  D7A0000-0       G   Ba De A            [Sopr]
Rhetre           0102  B592468-9     NTG   Ni                 [Sopr]
Qahofli          0105  D544445-4       G   Ga Lt Ni
Flitu            0106  X464130-2       G   Lo Lt A
Trihoqo          0108  C584689-3     CPG   Ag Ga Lt Ni Ri R
Dradra           0110  EAB3000-0       G   Ba Fl A
Scaru            0201  C110589-12     SG   Ht Ni A            [Sopr]
Flitu            0205  A4945AF-12  NRTCG   Ag Ht Ni A
Kihotri          0207  D9A0000-0       G   Ba De A
Qaki             0208  B2227BB-8    SRTG   Na Po A
Prpr             0302  X9C1000-0       G   Ba Fl A            [Sopr]
Flisci           0307  E544575-6       P   Ag Ga Ni R
Wriqo            0308  E302000-0       G   Ba Ic Va
Qotri            0309  D84A100-6       G   Lo Wa A
Yatre            0401  C455653-10     SG   Ag Ni              [Sopr]
Qofli            0403  E849786-5       G   Lt
Qoqo             0404  C58299A-8    SRTG   Hi A
Qotridra         0406  C0009A7-12     SG   As Hi Ht In Na Va A
Hoho             0407  C210878-8     STG   Na A
Tridra           0408  E2009A9-8       G   Hi In Na Va A
Qodrasci         0409  DA89673-6      SG   Ni Ri A
Mesca            0501  C010559-12    RPG   Ht Ni R            [Sopr]
Sotre            0502  D200000-0      SG   Ba Va              [Sopr]
Fliho            0504  C402000-0    RTPG   Ba Ic Va
Flizi            0506  D6A0000-0      SG   Ba De A
Sitri            0507  E220856-8       G   De Na Po
Qomepr           0601  D636000-0      SG   Ba                 [Sopr]
Rustu            0602  C22037B-9       G   De Lo Po A         [Sopr]
Tusiki           0603  A664510-8    STCG   Ag Ga Ni A
Tuho             0605  C639220-7       S   Lo A
Trisci           0607  B796214-10   STCG   Ga Lo
Dratri           0608  C8B0211-11    TPG   De Lo R
Draki            0609  C130945-12    SCG   De Hi Ht Na Po
Sitri            0610  B451300-8      TG   Lo Po A
Prme             0702  D575875-7       G   Ga A               [Sopr]
Drasci           0704  C4016BC-10      S   Ic Na Ni Va A
Ziqaqo           0707  C98A59C-10     CG   Ni Wa A
Sikiho           0801  C8A078D-9       G   De A
Qofli            0803  E6568BD-2       G   Ga Lt A
Siqa             0805  C470203-9       G   De Lo A
Drakudra         0806  E675000-0       G   Ba Ga
Tuqawri          0807  C75A232-8       G   Lo Wa
Qotuqo           0809  C140878-13      G   De Ht Po A
Kuqotri          0810  D473778-4      SG   Lt A

If you pop that in and map it, you’ll notice trade routes go to Prpr (0302) which has a starport type X (nothing) and to get there is a J-1, then a J-3 out of there. If you instead went to Yatre, Sotre or Rustu, a more sensible launch point to get to Quofli would happen. A lot of ship designs don’t have skimmers and purification gear and thus having trade routes that go through places with no gas to buy seems a bit wrong.

What would really be a neat feature (yes, I love suggesting work for other people... lol), if it were possible, before you generate, as we can provide a sector data which is parsed to draw the map, it would be nice for us to have another box to provide some sort of formatted routes information (if you do that, good to know if a route is communication or trade... many would be both). And export that formatted information when you generate from scratch a sector (as an example and also to keep so that one could handraulically modify it and then put it back in with the sector data to adjust the routes).

It’s a really nice tool you’ve got here.

My usage right now is a bit non-standard. Traveller’s variety of tech and populations that exist in a vacuum (and I don’t mean space here) with respect to nearby planets is unlikely. Populations will tend (if possible) to head to more prosperous, less oppressive, more economically active areas. Technology will tend to flow to lower tech places and drag them up faster than high tech places can advance. Trade will bring things from other planets - even ones without much industry or a lower tech - to higher centers which will in turn build relationships and drag up the tech in the lower ones and facilitate people movement. This will also affect Starport types/sizes. And with that, you’d get a much more logical net of trade routes (trade routes would tend to define communication routes except where strategic situations forced routes of communication through places trade isn’t likely).

With that in mind, the sector I’m hand building now tends to have most planets in a polity at about the same tech (a 3-4 TL difference at most, 1-2 being more common). Even ones outside of a polity will tend to be impacted by their neighours. And even the need for labour (see North America and Europe needing immigration for many jobs to get done) and the humanitarian aspect (people living on crappy planets and suffering) would tend to result in population size being closely related to how great (weather, atmo, water, gov’t, law level, crowding, tech level, security, etc) a planet has.

I want to try to build sectors that make sense, polities that make sense, and planets that are hard to fathom being next to one another.

In the long run, My goal is to pick a collection of planets (physical) and start from a first arrival point or homeworld, then gradually have some software model early exploration, outcomes, and further movements of people every year from planet to planet (plus natural increase/decrease/war effects/plagues/etc) to finally have a sector (or cluster let’s call it) that has sensible population modelling and tech and trade will flow from that.

I did some moderately extensive population modelling of my last D&D campaign to determine what populations could be expected where and what migrations would tend to occur over time. It was quite interesting and made a lot more sense (though hard to get setup).

Anyway, in the short run, it would be great to be able to feed in formatted route data and have that displayed instead of the stuff MgT provided. Some might just want a sector (and your generator that simulates expansions of cultures through areas is really cool) but it would be nice to be able to feed in routes to the display.

Thanks, stay safe, nice talking to you.

TomB (kaladorn on COTI and other places) 2020-04-11 01:37 UTC

Just realized one way to approach the population modelling is to generate a sector with no population/govt/law/tech data - just the physical, then pick an initial population and go from there to see where expansion would naturally flow. One would need rules based on tech (which is a determiner of jump ranges) and exploration followed by colonization of the more promising places. One would suspect that valuable resources might need to be a factor and thus be defined for worlds as resource exploitation could well drive (or at least support or preclude) populations situation on different planets.

There’s too much there to do all once. But it is a recurrent idea to build an ATU that is different than the 3rd Imperium OTU. Something that likely would look more (in the long run) like the 2300 AD setting than Traveller’s 3rd Imperium - more technical homogenaeity and more sensible population locations.

TomB (kaladorn on COTI and other places) 2020-04-11 01:43 UTC

Looking at the result of the trade routes is interesting. Scaru (C110589-12 SG Ht Ni A) to Prpr (0302 X9C1000-0 G Ba Fl A) looks like a bug, actually! Prpr really has nothing to offer. I added some debugging code and here’s the result of the trade routes established by the algorithm:

  Scaru → Sotretre
  Scaru → Rhetre
  Scaru → Yatre
  Scaru → Prpr → Qofli → Fliho
  Scaru → Yatre → Rustu
  Flitu → Qahofli
  Flitu → Kihotri
  Flitu → Kihotri → Wriqo
  Flitu → Qotridra
  Flitu → Qoqo → Fliho
  Flitu → Qoqo → Flizi
  Flitu → Qotridra → Sitri
  Flitu → Qoqo → Tusiki
  Qoqo → Flitu → Qahofli
  Qoqo → Flitu
  Qoqo → Qofli → Yatre
  Qoqo → Tusiki
  Qoqo → Qotridra → Trisci
  Qoqo → Tusiki → Prme
  Qoqo → Flizi → Ziqaqo
  Qoqo → Tusiki → Qofli
  Qoqo → Tuho → Drakudra
  Qotridra → Flitu → Qahofli
  Qotridra → Flitu
  Qotridra → Kihotri
  Qotridra → Wriqo
  Qotridra → Wriqo → Qodrasci
  Qotridra → Qoqo → Fliho
  Qotridra → Flizi
  Qotridra → Sitri
  Qotridra → Qoqo → Tusiki
  Qotridra → Tridra → Draki
  Qotridra → Tuho → Drasci
  Qotridra → Flizi → Ziqaqo
  Qotridra → Tuho → Siqa
  Tridra → Kihotri → Flitu
  Tridra → Kihotri
  Tridra → Wriqo
  Tridra → Qotridra
  Tridra → Qodrasci
  Tridra → Qotridra → Flizi
  Tridra → Sitri
  Tridra → Draki
  Tridra → Sitri → Ziqaqo
  Tridra → Draki → Qotuqo
  Qodrasci → Qotri
  Qodrasci → Hoho → Trisci
  Qodrasci → Tridra → Trisci → Ziqaqo
  Draki → Tridra → Kihotri
  Draki → Tridra → Wriqo
  Draki → Tridra → Qotridra
  Draki → Qodrasci
  Draki → Trisci → Flizi
  Draki → Tridra → Sitri
  Draki → Trisci → Ziqaqo
  Draki → Qotuqo
  Qotuqo → Draki → Qodrasci
  Qotuqo → Draki
  Qotuqo → Tuqawri → Ziqaqo
  Qotuqo → Tuqawri → Siqa

Thus, Prpr is simply on the route Scaru (Ht) → Prpr (G) → Qofli (G) → Fliho (Ic). It’s a terrible run via two systems with gas giants, but it sort of makes sense, I guess? What the map doesn’t say is that the traders probably simply skip visiting Prpr and Qofli... Harsh!

I guess for documentation purposes I need to ammend my formulation of the algorithm:

Trade routes

  • connect trade codes In or Ht with As, De, Ic, Ni, if within 4 jumps
  • connect trade codes Hi or Ri with Ag, Ga, Wa, if within 4 jumps
  • connect intermediarey systems, if they have a source of fuel (A–D, G, or Wa)
  • skip systems with travel code R
  • create a minimal spanning tree based on that graph (see 2010-05-20 Updated Traveller Mapping)

I think that alternative systems of generating trade and communication routes automatically would be interesting options, if well reasoned and not too hard to implement. The kind of thing you describe is of course a labour of love that is currently incompatible with “not too hard to implement” (for me) ... 😀

It does sound interesting, but my impression from reading two Dumarest books was that the Traveller universe is probably a decaying system: there were probably other empires in the past, what we are given is simply the ruins, the remants of all that history. When you say that “Traveller’s variety of tech and populations that exist in a vacuum (and I don’t mean space here) with respect to nearby planets is unlikely,” then I think you’re expecting a far to rational setup (which might also be boring), or you’re imagining a for more complex setup (which might also be hard to fathom), and so that’s why I suspect that this a labour of love that you need to do for your own happiness, it’s not something need. It is simply that: the backstory to your campaign, it’s personal, it’s specific. But this generator is ... simply faking it, I guess. It adds details without really understanding anything and leaves it up to the table to “make sense” of it all. Part of the fun is then to rationalize the seemingly random facts. How can we explain it all? And by engaging in that, we make the subsector our own, make the setting our own, make it our personal campaign.

If you ever make a PDF or some other sort of shareable document, I’d love to read it, just so I can see how other people prepare for their games. I suspect, however, that I’m far less into the sort of setting rationalization than you appear to be. 🙂

– Alex Schroeder 2020-04-11 13:49 UTC

I guess part of it is that I studied Human Geography in University. There are a lot of models of migration and of population growth (basic models then tempered with a lot of complexity as you start to cover all the factors) and even in an universe with a patchwork of planets, some of the configurations just would not sustain for very long (and yet only small changes happen in most places, even the unlikely ones, if you look at different generations of the documented systems - until at least Rebellion + Virus).

A lot depends on your view of the Imperium. If you view the Imperium literally as a low-impact overlay on a whole bunch of otherwise independent planets (’We only police commerce and borders’), then a patchwork could exist. But trade would be far more brutal and far less common than it could be with a more integrated set of economies and since that usually means prosperity increases overall, that’s how it would tend to go naturally. And even then, there have to be a lot of do-gooders that would be trying to address disparities in wealth and tech. That would be easier to do with some places having the tech that could easily begin to boost other places.

We have a patchwork situation in our world principally for a small range of primary reasons:

1) Capitalism and the rich want to keep disparity and place because they can leverage cheap labour (once automation gets cheap enough, that argument vanishes)

2) Racial strife, religious strife, national strife - but these all come from individual regionalism or national visions. Traveller would have some of them, but again, most of them in our world do not cede the rights for foreign militaries or to acknowledge a higher level of governance like the 3I displays. Those things would actively threaten many planets in the Imperium with separatist movements. That doesn’t sound like a stable empire to me, but rather a powder keg where the Empire must continually suppress (by means of force - political, covert, or military). That too is a different view of the 3I than the stable 3I.

3) Lack of education or resources - but that only lasts decades once people start to make serious efforts to start to change and it is likely within our lifetimes that we’ll see a lot more advancement out of even places like Africa (still not sure about M.E.) - witness how Asia has moved form a third world stature to doing work on par with anything in the west in many places. And that’s in 40-60 years mostly.

Within our planet, between nations, we see movements all the time of people fleeing wars, oppression, and even more heading to the perceived better life/opportunity. This happens in quite large numbers now. I suspect we’d see this from any crappy planet where a) the planet has access to space travel and a better place to reach or b) people from a better planet setup a pipeline (think escaped Slaves from the Civil War).

I think the reason the 3I looks like it does is because: a) It models a certain point in history (which is the 1600-1800s. It has Empires that are decadent or just bloated and of limited effect (unless you get their dander up then they can bring massive local power to bear), where wars are an ongoing thing, where there are nobles and the rich, where corporations had limited checks, and where the fringes and the colonies were where most small conflagrations happened, but once in a while even the major powers would get torn up by larger scale or internal conflicts. b) The map looks as it does because it’s cool to have 11000 planets (and you can’t do that by hand, not then anyway) and because its a staple of some types of gaming (note CT was really sandboxy) to be able to do hard science, soft science, space opera, or even ’visit the barbarians using swords’ - a lot of colonial fiction too just with a sci-fi veneer. c) Practically - even back in the late 1970s, you could write code with a simple set of charts and limited die rolls to generate individual systems. You could not hope to do massive simulations well - given the constraints of hardware and software back then - unless you were NASA or the like.

You know your software best. Do you feel like it would be a fair bit of work to allow manual entry of trade routes? (for the map display)

I’m going to do some thinking about how best to determine trade routes in an alternative way (and comms routes). Maybe I can create some software that will take a sector or subsector or list of planets and do some different calculations and spit out trade routes. If I was doing it in Java, I’d use an interface so that one could plug in and out different route generating modules (then I could have one that embodied the same logic you use for instance).

The only part I don’t feel competent to do (without the large volume of work) might be the map display part.

Nice talking to you about this stuff anyway. Beats watching the news...

TomB (kaladorn on COTI and other places) 2020-04-11 19:44 UTC

Haha, sure beats the news!

If you can describe an algorithm to create a sector or subsector in text, with no external input, I’d be interested in adding it. Essentially, though, it would have to be something that one could at least in theory, write down and do by hand. I don’t actually want to write something like a Dwarf Fortress World Generation with a past history, empires expanding and collapsing, and all of that. It would have to be simpler. 🙂

I’ll see about a simple trade-route and comm-route manual entry. Perhaps it can be done in a short time.

– Alex Schroeder 2020-04-11 21:36 UTC

OK, for now: you can use the following notation to define communication and trade routes. Doing that will prevent the automatism from jumping in.

Inedgeus     0101 D7A5579-8        G  Fl Ni          A
Geaan        0102 E66A999-7        G  Hi Wa          A
Orgemaso     0103 C555875-5       SG  Ga Lt
Solacexe     0810 D342635-4  P    S   Lt Ni Po       R
0101-0102 C
0102-0103 T

The format is FROM-TO TYPE where FROM and TO are coordinates and TYPE is either C or T. Hope that helps. 🙂

– Alex Schroeder 2020-04-11 22:58 UTC

Wow, that’s amazing. I’ll try that out! Simple and effective.

Also, thanks for that Dwarf Fortress link. That’s awesome. I have no idea how I’ve never heard of it before...

When I get a chance (if this lockdown carries on), I will revisit trade in GT, MgT 1, CT & Merchant Prince, plus some other sources. I’ll see if that can be boiled down to a simple algorithm for figuring out where they would likely put the routes. Comms are a bit more finicky because those routes can exist where no merchantile sanity exists. That could serve a key utility for mail or for movement of people in non-valuable areas on the way to valuable areas.

I think it’s hard to not have to tweak this manually at some point though.

Really, what a full map (thinking of it now in a magical world that we don’t inhabit) would ideally have would be layers - a layer for physical (stars/systems), a layer for civilian facilities of different types, a layer of military facilities of different types, a layer for X-boat (mail/comms) routes, a layer for trade routes (which would tend to follow money, pop, and jump limits), and a layer for military routes (which wouldn’t necessarily be known by civilians, but would link key strategic points including bases, caches, etc and some of those might be in open space hexes).

That’d be fun knowledge to have, but anybody trying to create that themselves manually for a large area would be investing some time and to do that and output a layered format of image/doc automatically with software would also have a different, large task.

Anyway, see what I can do and thanks for the change!


TomB (kaladorn on COTI and other places) 2020-04-11 23:45 UTC

I’m working on my sector using your little route hack.

I did look at the source and I want to ask a couple of things in that vein first: a) Am I right in thinking it is Perl? or Javascript? b) How hard for you (how much energy) would it be to make a source version that removes all generation (or at least comments it out) so that it would only do the parsing of a sector, then draw the map? (There’s a lot of code i there and those are the pieces I am really using)

As to the app itself based on my usage:

  1. I’m having colour issues (green next to slightly green next to the other green....). It it possible that we could have a shorthand added into or added onto the end of the allegiance tag in which we could provide a string RGB value (#ff3377 example) and that would be what the rendering displays? That kills two stones : 1) I can tailor the colours so we don’t get conflicts or just plain fugly colours, and 2) it may be possible to use different colours even within a polity if it makes sense.

(If I get to hacking the code, having it use some of the algorthms for picking a color set for a website so colours work harmoniously mmight be good to but you don’t need to do this).

  1. Can you possibly give size 0 planets an asteroid field representation vs a single round dot? That’s standard on traveller maps.
  2. I know this thing is an SVG image. I don’t know if you can embed another SVG or a PNG? (Thinking of colourful map icons like little class M green/blue, etc.)
  3. With the idea of colour tagging hexes in the allegiance tag or next to it... how about letting me colour for routes? And perhaps a weight (from 1 to 5 or something like that giving increasing line weights from a small line to a fatter one).

Ex: 2012-2014 T 2 #aa7799 2014-2015 T 2 #aa7799 2114-2214 C 1 #cc990b

Those are my requests. An awesome tool.


TomB 2020-04-28 03:51 UTC

The code is written in Perl 5. There’s a free PDF of Modern Perl available somewhere on the book’s site. You know where this is going... I’m busy enough with other projects right now, so I think you’d have to do it. I’m happy to help, and happy to incorporate changes back into the code, but I’m probably not going to spend any time on it, at least until summer.

Here are some suggestions: If you look for “sub background” you’ll find the code that distributes colour codes. Based on the culture’s name, it generates CSS classes named culture1, culture2, etc. If you then search for culture1, you’ll get to the CSS itself, where every culture number gets a colour code. And there are 28 of them.

So, if you wanted to reduce or increase the number of colours, and change the colours used, this is where you would start: define the number and colours in the CSS, then change the number in “sub background” as appropriate.

And if you would want to change how the culture codes get computed (right now it’s basically 1 + a checksum of the culture’s name, modulo the number of colours, then that’s the place to do it.

If you want to provide some information from the input to “sub background”, you need to look at “sub initialize_map” – that’s where the map gets parsed. Write some code to parse a new style of line, and store the info in a member variable. Declare those up there where “package Traveller::Mapper" starts.

Something like that. 🙂

– Alex Schroeder 2020-04-28 06:31 UTC

Add Comment

2017-07-14 Name Generator

I was wondering how to give each random Traveller sector or subsector generated its own “touch” and I remembered the notes on generating names for the Twitter bot @unchartedatlas.

My generator uses a digraph based random generator, an idea going to back to the original Elite. What I’m doing now is randomly generating the list of digraphs to use for each sector or subsector, thus making the generated names more or less similar to each other. If you want to experiment with the name generator on its own, I installed it as a separate web application. Perhaps it can be useful to generate random names in fantasy languages. The Help page shows how to start with lists of digraphs based on the Japanese and Hawaiian language.

Who knows, it might be useful for your orc needs...

I then added code to parse multiple characters as one – moving from code digraphs to linguistic digraphs like “ch” or “th”. These can then be counted as a single consonant.

The Traveller generator now picks a random subset of English consonants and vowels, including some digraphs, as I said, and I think it works rather well.


Add Comment

2017-07-11 Traveller vs. Traveller

I’ve been comparing the subsector generation of Mongoose Traveller (MGT) and Classic Traveller (CT) in the incarnation of The Traveller Book.

Here’s what I noticed:

The distribution of starports is different. Note how Classic Traveller has only a bit less D and a lot more A starports.


Bases are different: Mongoose Traveller has Research, Traveller Association, Imperial Consulate and Pirate bases; Classic Traveller only has Naval and Scout bases.

Temperature is different: Classic Traveller does not have it. Then again, I was always confused by the fact that it doesn’t show up in the Mongoose Traveller Universal World Profile (UWP).

Hydro is different: Mongoose Traveller has a modifier for temperature; Classic Traveller does not. That explains why temperature doesn’t appear in the UWP: it wasn’t used by CT.

Population is the same and limited to a maximum of A when rolling, but the table in Mongoose Traveller also describes B and C. Perhaps this is a nod to Coruscant, the world city in Star Wars?

Government is the same and produces a range of -4 to 15 (F) when rolling. Both only describe governments 0 to 13 (D), however. How strange.

But reddit has the answer:

E Religious Autocracy. Government by a single religious leader having absolute power over the citizenry

F Totalitarian Oligarchy. Government by an all-powerful minority which maintains absolute control through widespread coercion and oppression

– MegaTraveller Referee’s Manual, apparently

Law is similar in that the dice throw produces a range of -5 to 15 when rolling, assuming we limit Government to 0 to 10 (A). Mongoose Traveller only describes Law 0 to 9; Classic Traveller describes Law 0 to 10 (A).

Tech is different. Mongoose Traveller has modifiers in the table for populations B and C, but you can’t get more than A so this is a bit strange. Mongoose Traveller increases Tech by +1 if you have Hydro 0. Mongoose Traveller increases Tech by +2 if you have Government 7 (Balkanisation), which is weird. Mongoose Traveller decreases Tech by -2 for Government 12 and 13 (charismatic oligarchy and religious dictatorship); Classic Traveller only does this for Government 12. No penalties for religious dictators, I guess.

Trade is also different, mainly in that some codes are missing in Classic Traveller: Barren (Ba), Fluid Oceans (Fl), Garden (Ga), High Population (Hi), High Technology (Ht), Low Population (Lo), Low Technology (Lt).

Travel Codes (Red, Amber) are not codified in Classic Traveller; Mongoose Traveller suggests when to use the Amber code.

Routes appear only in Mongoose Traveller.

The pirate bases, the travel codes, and the routes sure make the maps generated for Mongoose Traveller more interesting to look at.

Here is an example subsector generated. Notice the limited bases created.

Traveller Subsector UWP List Generator (1619343301)

Tizita           0102  C41058A-11          NI A
Vibannare        0105  D7A38A6-3           A
Nafaxe           0204  E447301-4           NI A
Zititu           0207  B648663-7       S   Ag NI
Mavifainti       0208  X3016AB-3           Na NI Va IC A
Pavima           0210  D200103-6           NI Va A
Vinxena          0301  D88A644-8       S   NI Ri Wa
Zoziq            0302  B454842-8          
Tituteluzi       0305  A310420-12          NI A
Rabama           0306  B545412-8       N   NI
Totamavi         0310  B678563-7       N   Ag NI
Zon              0401  E88A522-7           NI Wa
Qnq              0410  C87997A-11          In A
Mavota           0504  A99A977-12          In Wa A
Razutife         0505  B754867-8       S  
Zomanzi          0507  D67A355-10      S   NI Wa
Vizoetuvo        0508  B120510-12          NI Po De A
Lurinan          0509  C4555A8-9           Ag NI A
Zotato           0510  A66A632-9           NI Wa
Lunainrina       0601  B747564-6       N   Ag NI
Rizo             0604  B77A7BF-8       S   Wa A
Lutomata         0605  C9769CF-6           In A
Patoin           0607  A436784-13         
Ineratu          0608  A978753-11      S   Ag
Zozota           0610  C220202-10          NI Po De A
Femavita         0701  A302666-10          Na NI Va IC
Titutemana       0703  BA9A796-12     NS   Wa
Titezofa         0705  C99A543-6       S   NI Wa
Favorivi         0709  C130383-11          NI Po De
Qtelu            0710  AAA9000-0           NI A
Nnafema          0802  C5376B9-5           NI A
Tuzinare         0803  A564304-12          NI A
Zupaezi          0804  B210964-12      N   Na In
Zoreluzu         0805  C78A589-6           NI Wa A
Tofevomaq        0806  A200756-10      N   Na Va
Texebain         0807  C4428AE-7           Po A
Favifabafa       0808  B99A88C-11      N   Wa A
Reinxenazi       0809  B401588-8           NI Va IC
Zufate           0810  B9C8644-8           NI A
                       ||||||| |
Ag Agricultural        ||||||| |            In Industrial
As Asteroid            ||||||| +- Tech      Lo Low Population
Ba Barren              ||||||+- Law         Lt Low Technology
De Desert              |||||+- Government   Na Non-Agricultural
Fl Fluid Oceans        ||||+- Population    NI Non-Industrial
Ga Garden              |||+- Hydro          Po Poor
Hi High Population     ||+- Atmosphere      Ri Rich
Ht High Technology     |+- Size             Wa Water World
IC Ice-Capped          +- Starport          Va Vacuum

Bases: Naval – Scout – Research – TAS – Consulate – Pirate

I’ve left the Mongoose Traveller suggestions for routes in place and this is what we get:

Classic Subsector

On G+, I got linked to TRAVELLER: Out of the Box – Interlude: Two Points Where I Prefer the 1977 Edition Over the 1981 Edition talking about the old 1977 trade routes. When I tried it, not bad! (Also note this forum thread, Default CT 1977 and CT 1981, comparing the 1977 and 1981 editions; log in to see more than just the first message of the thread.)

Classic Subsector

(Classic Traveller map, with minimal spanning tree)

I decided to drop the optimising I had been doing, to get a feel for the “raw” data. This also required some rewriting and this always messes with the random number generator. That’s why this map cannot be easily compared to the one above.

Classic Subsector

I did some rewriting and added the minimal spanning tree algorithm again. It looks less busy, the clusters are still clusters. But there are some drawbacks. Take a look at the top right corner: 0802 and 0703 are connected (distance 1, shorter connections go first), 0701 and 0703 are connected (distance 2), and thus 0701 and 0802 cannot be connected because that would introduce a loop.

Classic Subsector

(Classic Traveller map, with minimal spanning tree)

I think for the time being I’ll remove the minimal spanning tree optimisation again.


Comments on 2017-07-11 Traveller vs. Traveller

There should be a space lane between 0601 and 0701 by the 1977 rules (A-B J-1 is 1+ to have a space lane). Also 0504-0505 and 0508-0607, hmm and a bunch more...

– Frank Filz 2017-07-13 07:31 UTC

Indeed! A bug!

– Alex Schroeder 2017-07-13 09:25 UTC

New code produces:


– Alex Schroeder 2017-07-13 09:35 UTC

Highlighting jump-1 routes:


Not sure about the colour scheme. And the legend at the bottom needs fixing.

– Alex Schroeder 2017-07-13 10:59 UTC

Nice, I like the red to highlight the J-1. When I did my subsectors, I ended up not rolling for the J-3 and J-4 routes. I also didn’t bother with a J-2 route that was already connected by J-1 (for example 0604-0804 above, there’s already an implied J-2 route as 0604-0705-0804). Similarly you could remove the 0305-0604 J-3 route (unless there isn’t a J-2 between 0305-0505 and that blue line is actually JUST a J-4 route 0305-0705...).

– Frank Filz 2017-07-13 16:28 UTC

Hm... Isn’t that a bit like the minimum spanning tree optimisation? As Ian Borchardt said on G+:

One problem with your optimised paths is that you are assuming that space == time, which isn’t the case with Traveller jumps, because any jump takes two weeks, regardless of distance. [IIRC]

Which means it’s not cheaper (time wise) for a starship to call in at an intermediate port. So given a choice between A-B-A and A-A most people will still choose A-A by preference because it gets there in half the time. It has a greater efficiency.

I responded with the following:

As for trade route optimisation: one might say that the trade routes indicate the most popular trade routes and thus two jump-2 segments will be more popular than a single jump-4 segment because there will be more ships that can handle it, even if that makes the route take twice the time. Well, that was my argument when I realised that too many routes just made for an ugly map.

So basically the jump-2 route 0604-0804 says that ships can and will make this jump directly – unlike the jump 0604-0703, which is also a jump-2 but somehow the dice have decided that it’s not profitable enough to do. It’s up to the referee to explain the difference. At least, that’s Ian’s argument.

For myself, I’m still undecided. All I can say is that it looks busy and messy and I don’t like it too much.

As for distance, I guess from a player perspective, at the beginning of a typical campaign all we care about are jump-1 and jump-2 routes. Perhaps I should just use a third colour for jump-2 routes.

– Alex 2017-07-13 16:52 UTC

Support for sectors, click to zoom. Note how I used a third color for jump-2 routes.

Click to zoom!

– Alex 2017-07-13 18:03 UTC

D’oh. I just noticed that my generator never generated any gas giants. Fixed!

This also means that all the random seeds will now generate different maps. Nooooo!

– Alex 2017-07-13 18:33 UTC

As for picking a subsector capital, Ian Borchardt says:

Definitely an A class spaceport (and it will have an attached Imperial naval and scout base). It probably should be a Rich world (Atmosphere 6-8, Population 6-8), and I’d assign it a Government Type of 8. The TL should be amongst the highest in the subsector (and a minimum of 12).

And regarding trade routes, he says:

This is the approach I would take.

First generate the main routes.

(1) Connect all Starport A within Jump 2 of each other.
(2a) Connect all Starport B within Jump 2 of a Starport A.
(2b) Connect all Starport B within Jump 1 or each other.
(2c) Connect an unconnected Starport B to another Starport B within Jump 2.

If a connection in step 2 connects Starport A to the sector capital then upgrade it to a main route.

Next comes the feeder routes.

(3a) Connect Starport C to a single Starport A within 1 jump.
(3b) If not connected, connect Starport C to a single Starport B within Jump 1.
(3c) If not connected, connect Starport C to a single Starport A within Jump 2.
(3d) If not connected, connect Starport C to a single Starport A within Jump 2.
(4a) Connect Starport D to a single Starport A within 1 Jump. (optional)
(5) Class E starports are never connected by a trade route.

If in need of direction, assume the shortest path to the subsector capital.

This defines the regular services (for various definitions of regular). Everything else relies on tramp freighters.

[In your example map the small disconnected group of systems to coreward might have better trade connections to coreward than it does with the subsector it is technically a part of. Or it may be a different polity. And yes, I cheated with the rosette of class A and C starports to rimward, because of a fondness for benzene rings...]

– Alex Schroeder 2017-07-13 22:31 UTC

One thing I did to simplify my route maps is that if you have three worlds, One, Two, and Three, and there is a J-1 route from One to Two, and a J-1 route from Two to Three, I also assume the J-2 route from One to Three is also regularly travelled. I also in a few places, having rolled just the J-2 route, assumed that the J-1 routes were thus also regularly travelled (this makes a world that might otherwise have had less access have more, I’m not that bothered by that, and would rather have a simpler map).

– Frank Filz 2017-07-31 16:02 UTC

Add Comment

2017-07-11 Tales to Astound

With my renewed interest in Traveller comes a new blog, Tales to Astound!

Some samples!

«And I type all this up to say–the game was written and designed to play this easy, fast, and loose play–and you can play this way too. No long, detailed introduction from the Referee about politics that the Player Characters can’t influence anyway. No thoughtfully pre-planned adventure the Player Characters are supposed to follow. No expectations of what the Players will do.» – An Improvised Classic Traveller Convention Game

«Why van Rijn, let alone anyone, would be hauling around whisky between the stars and assume to make a profit is insane, of course. But that’s exactly what the trade rules in Traveller model.» (Comes with some interesting quotes from books that are said to have inspired Marc Miller as he wrote Traveller in 1977 and 1981.) – TRAVELLER and “Hard Science Fiction” — I don’t think so…

«It really reinforces the nature of the Referee as impartial judge, the dice as oracles, and the rolls not as “skill rolls” but as impartial tools to determine outcomes. The point of the roll is not to see “How well the character did,” but to see what happened when the character did something, which in turn leads to the character having to do the next thing, based on the outcome of the roll.» – TRAVELLER: Out of the Box-An Approach to Refereeing and Throws in Original Traveller (Part I)

«It has long been noted that the Classic Traveller does not have a unified task resolution system. Instead it has an ad hoc system of Throws, with different Throws for different skills, and many of the rolls left without any sort of specific procedure or definition. For many, many people this is a problem. People want to know how the game works in a simple, consistent manner.» – TRAVELLER: Out of the Box–An Approach to Refereeing and Throws in Original Traveller (Part II)

«The dense layer of procedural generation of Worlds, Encounters (NPCs, Animals, Legal, Patron), Encounter Range, and NPC Reaction lets me generate content on the fly and help me come up with new ideas, locals, and situations I would never come up with on my own.» – My Favorite SF RPG…


Add Comment

2017-06-30 Traveller Subsector Generator

Yesterday I posted some Traveller links. Today I refactored my Traveller Subsector Generator and moved to a new web framework. I also merged my UWP Generator and my SVG Mapper for Traveller into a single web app, the Traveller Subsector Generator. I hope it’s pretty obvious how to use it, but I know that sometimes I get confused myself so here’s what it can do:

You start with an editable example UWP:

  • Generate Map gives you the SVG map
  • Communication and Trade Routes gives you a list (text)
  • Random Map gives you a random SVG map

If you’re looking at an SVG map and you got here via Random Map:

  • UWP in the bottom right gets you the read-only UWP that generated the map
  • if you do that you can click on Generate Map and get the same SVG map
  • this works because the random map has a unique id

If you’re looking at an SVG map and you got here via Generate Map:

  • since you might have edited the UWP, it doesn’t have a unique id
  • and thus you don’t get the UWP link

If you’re looking an a read-only UWP:

  • Random UWP generates a new, random, read-only UWP
  • Generate Map takes you to the SVG map, as I said
  • Edit Map takes you back to the edit screen for this UWP
  • this works because the read-only UWP has a unique id

OK, so the only weird thing is that sometimes there is no UWP link back from the map, right? Well, if you’re looking at and click on Generate Map then you can always use that id in the URL and type into the address bar of your browser. And now the missing UWP link appears!

I don’t even know why I’m posting all this. I makes me realise that the user interface needs more tinkering and I’m tired. If you have an idea for how to make it more obvious, specially if you haven’t used it before and you’re confused, I’d like to hear about it. Perhaps we can improve the web app together.


Comments on 2017-06-30 Traveller Subsector Generator

Made some changes, and added random sector generation (32x40 instead of 8x10).

– Alex 2017-07-05 06:07 UTC

How to get a random UWP from the command line:

perl get /uwp/874568503 2>/dev/null | xmllint --html --xpath '//pre/text()' - | perl -MHTML::Entities -pe 'decode_entities($_);'

– Alex Schroeder 2017-07-05 14:57 UTC

How to generate a SVG file from the command line:

perl get /map/874568503 2>/dev/null > 874568503.svg

– Alex Schroeder 2017-07-05 14:58 UTC

Generating a simple SVG file from a map on the command line (URL-escaped):

perl get --header 'Content-Type:application/x-www-form-urlencoded' --method POST --content "map=Rezufa%200101%20E310000-0%20Ba" /map 2>/dev/null

– Alex Schroeder 2017-07-05 15:09 UTC

Generating an SVG map from UWP in a text file:

perl get --header 'Content-Type:application/x-www-form-urlencoded' --method POST --content map=$(cat 874568503.txt|encodeURIComponent) /map

This assumes you defined the following alias:

alias encodeURIComponent='perl -pe '\''s/([^a-zA-Z0-9_.!~*()'\''\'\'''\''-])/sprintf("%%%02X",ord($1))/ge'\'

– Alex Schroeder 2017-07-05 15:21 UTC

Amazing! I am doing a piece on my podcast discussing Traveller maps and will def be mentioning this. What a gift!

Froth 2019-03-12 16:05 UTC

Hah, cool! Please link instead of this blogpost, though. I don’t think most people would want to know how to generate maps on the commandline using Perl, haha. 🙂

– Alex Schroeder 2019-03-12 16:09 UTC

Add Comment



Please make sure you contribute only your own work, or work licensed under the GNU Free Documentation License. Note: in order to facilitate peer review and fight vandalism, we will store your IP number for a number of days. See Privacy Policy for more information. See Info for text formatting rules. You can edit the comment page if you need to fix typos. You can subscribe to new comments by email without leaving a comment.

To save this page you must answer this question:

Just say HELLO