Traveller Subsector Generator

This page collects the most recent blog posts about the Traveller Subsector Generator.

The Traveller page might have more stuff for you.

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.

Tags:

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:
  Scaru → Sotretre
  Scaru → Rhetre
  Scaru → Yatre
  Scaru → Prpr → Qofli → Fliho
  Scaru → Yatre → Rustu
Flitu:
  Flitu → Qahofli
  Flitu → Kihotri
  Flitu → Kihotri → Wriqo
  Flitu → Qotridra
  Flitu → Qoqo → Fliho
  Flitu → Qoqo → Flizi
  Flitu → Qotridra → Sitri
  Flitu → Qoqo → Tusiki
Qoqo:
  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:
  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:
  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:
  Qodrasci → Qotri
  Qodrasci → Hoho → Trisci
  Qodrasci → Tridra → Trisci → Ziqaqo
Draki:
  Draki → Tridra → Kihotri
  Draki → Tridra → Wriqo
  Draki → Tridra → Qotridra
  Draki → Qodrasci
  Draki → Trisci → Flizi
  Draki → Tridra → Sitri
  Draki → Trisci → Ziqaqo
  Draki → Qotuqo
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!

Tom

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

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-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 https://campaignwiki.org/traveller/edit/344450615 and click on Generate Map then you can always use that id in the URL and type https://campaignwiki.org/traveller/map/344450615 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.

Tags:

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 traveller.pl 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 traveller.pl 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 traveller.pl 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 traveller.pl 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 campaignwiki.org/traveller 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

2015-09-13 Highgate

Brett Simpson used my SVG Mapper for Traveller to generate a little booklet for the subsector he’s been working on.

https://alexschroeder.ch/pics/21376960225_7e5848c6aa_c.jpg
Highgate by Brett Simpson

Brett says: “There is no need to add a link to a page, as the only pages I have are unrelated to role-playing.”

Tags:

Comments on 2015-09-13 Highgate

Frorha             0102 B100440-A M Ni Va Ic          804 Re A7 III
Canton             0103 D355868-5 M O:0102            624 Re G1 V M5 V
Lusitania          0104 X885500-9   Ag Ni Ep St      R810 Re G5 V
Oakhurst           0105 C889598-6   Ni Ep             703 Re K8 V M7 V
Thorpe             0109 B434323-A   Lo Ni             901 Re G6 V
Westcott           0201 C130311-A   Lo Ni Po          634 Re G6 V
Osumi              0204 B676359-8   Lo Ni Ep          523 Re K9 V
Afars              0207 D200AE2-C   Na Hi In Va Ic    513 Re G7 V
Belep              0210 C234547-B M Ni                301 Re G6 V
Bayou System       0304 C78189D-6   Ri Co             313 Re M4 V M0 V
Devix              0307 A7A248B-A   Fl Ni             202 Re M5 V
Espana             0308 B300679-7 J Na Ni Va Ic      B702 Re A3 V
Caribbean          0402 B9896Y8-8   Ni Ri Ep          512 Re G6 V M4 V M3 V
Tardino            0403 C4307A8-7   Na Po             801 Re K4 V K3 V
Androxis           0409 A460784-C   Ri Cp             602 Re K9 V
Gwun               0502 B739445-9   Ni                523 Re F5 II
Iorillo            0503 D573556-5   Ni                200 Re F5 V K2 D
Leeman             0505 D99369E-3 M Ni Gl             213 Re M5 V
Osasesh            0705 X211168-9   Lo Ni Ic O:0804  A303 Re F3 D
Quelaa             0804 B665333-B   Lo Ni Ep          802 Re G8 V
Rothe              0805 D100734-4   Na Va Ic          123 Re K4 V
Triperrat          0806 B8A4778-7   Fl               B713 Re K4 III
Abu Musa           0809 C847844-6 M Ep                404 Re G5 V

– Damon 2016-09-29

Add Comment

2013-06-27 Text Mapper for Traveller

A few years ago I was working on Traveller Subsector Mapper. As I was thinking about the new Text Mapper, I wondered how feasible it would be to generate a Traveller subsector using Text Mapper. I know, it’s a stupid waste of time because I already have the Traveller Subsector Mapper. But I couldn’t resist the lure of showing off how flexible Text Mapper could be. And it works!

Subsector created using Traveller Subsector Mapper:

Subsector created using Text Mapper:

In order to reproduce it, use the following input:

include https://campaignwiki.org/contrib/traveller-example.txt

The example file traveller-example.txt uses the library traveller.txt defining everything it requires.

Tags:

Comments on 2013-06-27 Text Mapper for Traveller

Nice curved routes! I like it.

BeRKA 2013-06-27 21:38 UTC


Looks gorgeous, actually.

noisms 2013-06-27 21:49 UTC


Thanks!

AlexSchroeder 2013-06-28 07:18 UTC


I like the new version better (-:

– Harald Wagener 2013-07-01 12:08 UTC


I love your random generators (the idea behind TextMapper is fantastic), but as I know next to nothing about programming, I can’t do one thing I’d like: change your Traveller map to generate a larger subsector. The reason is I’d like to use it with your “wilderness” generator. Let me explain. The “travel” and “communication” routes on your Traveller generator could be used to trace important locales in a point-crawl node-crawl path-crawl. Expanding those to cover a larger map (let’s say 30x40 hexes) would be a great way to indicate the point of interests in a given region. I hope it’s not too confusing to understand what I’m trying to say.

Marcelo Paschoalin 2015-10-09 14:46 UTC


Yeah, the problem is that the UWP Generator doesn’t produce the output format necessary for Text Mapper. You need to create the Text Mapper input manually. The easiest solution would be to just print out multiple subsectors and connect them manually. For my own Fantasy mapping needs, I often find that placing roads and rivers between settlements is a manual process (example, data with trails and streams at the end).

– AlexSchroeder 2015-10-09 15:09 UTC

Add Comment

2009-09-11 Traveller Map Based on UWP

There is an amazing Traveller Map API available out there. Specifically, there’s a service that will produce a PDF based on your UWP list. But you know how it is. I bet half the Traveller referees are trying to code up subsector generators and mappers. Me too!

Here’s my SVG Mapper for Traveller. It comes with example data so you can figure out what format it expects by looking at it. Just click the Submit button! Remember, you need a browser that knows how to deal with SVG files – Firefox will do.

Source code is available. I got to reuse some of my abandoned Old School Hex Mapper. And figuring out the trigonometry stuff is fun. :)

Tags:

Comments on 2009-09-11 Traveller Map Based on UWP

Very nice! :-)

It looks very nice, and has a simple interface. This is a very good tool to quickly make a subsector.

You are very generous to release this with the GNU General Public License. This means that I might use it together with my random subsectror generator (that is also written in perl).

I have been thinking of doing my own mapper, (other than the ascii one I have made). My plan was to use GD or ImageMagick.

BeRKA 2009-09-11 05:51 UTC


Heh. I come from a FreeSoftware background. Sharing’s the ethical thing to do. ;)

Is your random subsector generator based on the Mongoose rules, or are they the same as for previous editions? I noticed that the generator I had used for my subsector produced strange trade codes and had to write a Perl script to fix them.

Also, Mongoose Traveller doesn’t say how UWP codes for the various based look like. They just provide Scout and Navy as examples. Do you know of a site that defines it?

AlexSchroeder 2009-09-11 07:21 UTC


My generator is based on previous editions? You can select to use book-3 or book-6 rules, that are slightly different when calculating hydrographics. My trade codes are from book-7.

Base codes can differ depending on the version you use. One common version is found on traveller map.

For Naval and Scout base “2” is also commonly used instead of “A”.

BeRKA 2009-09-11 08:25 UTC


Oh wow. Thanks for the link. This was new to me: “special codes deal with the presence of more than one type of base within the same system in order to maintain a single base code letter per system.”

I think I’m going to focus on the rules I have or I’ll go mad. :)

AlexSchroeder 2009-09-11 08:36 UTC


Excellent!

greywulf 2009-09-11 09:35 UTC

Add Comment

Comments


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:

Please say HELLO.