# 2018-03-15 How to Describe Hexes

How do you get started writing a table for Hex Describe? This page is my attempt at writing a tutorial.

First, let’s talk about random tables to generate text. Abulafia uses the following format:

1. each table starts with a semicolon and the name of the table
2. each entry starts with a number, a comma and the text

Let’s write a table for some hills.

```;hills
1,The hills are covered in trees.
1,An orc tribe is camping in a ruined watch tower.```

If we use this table to generate random text, then half the hills will be covered in trees and the other half will be covered in orc infested watch tower ruins. What we want is for orcs to be rare. We can simply make the harmless entry more likely:

```;hills
5,The hills are covered in trees.
1,An orc tribe is camping in a ruined watch tower.```

Now five in six hills will be harmless.

We could have chosen a different approach, though. We could have written more entries instead.

```1,The hills are covered in trees.
1,Many small creeks separated by long ridges make for bad going in these badlands.
1,An orc tribe is camping in a ruined watch tower.```

Now every line has a one in three chance of being picked. I like almost all the hexes to have lairs in them. In my game, people can still travel through these regions with just a one in six chance of an encounter. That’s why I’m more likely to just write a table like this:

```;hills
1,Many small creeks separated by long ridges make for bad going in these badlands.
1,An *ettin* is known to live in the area.
1,A *manticore* has taken over a ruined tower.
1,A bunch of *ogres* live in these hills.
1,An *orc tribe* is camping in a ruined watch tower.```

Now only one in five hexes has nothing to offer.

We can be more specific because we can include dice rolls in square brackets. So let’s specify how many ogres you will encounter:

```;hills
1,Many small creeks separated by long ridges make for bad going in these badlands.
1,An *ettin* is known to live in the area.
1,A *manticore* has taken over a ruined tower.
1,[1d6] *ogres* live in these hills.
1,An *orc tribe* is camping in a ruined watch tower.```

Then again, it makes me sad when the generated text then says “1 ogres”. It should say “1 ogre!” We can do that by creating a separate table for ogres. Separate tables come in square brackets, like dice rolls.

```;hills
1,Many small creeks separated by long ridges make for bad going in these badlands.
1,An *ettin* is known to live in the area.
1,A *manticore* has taken over a ruined tower.
1,[1d6 ogres live] in these hills.
1,An *orc tribe* is camping in a ruined watch tower.

;1d6 ogres live
1,An *ogre* lives
5,[1d5+1] *ogres* live```

Now if there are ogres in these hills, there is a one in six chance for an “ogre” living in these hills and a five in six chance for two to six “ogres” living in these hills.

How about we name the most important ogre such that players have an ogre to talk to?

```;hills
1,Many small creeks separated by long ridges make for bad going in these badlands.
1,An *ettin* is known to live in the area.
1,A *manticore* has taken over a ruined tower.
1,[1d6 ogres live] in these hills.
1,An *orc tribe* is camping in a ruined watch tower.

;1d6 ogres live
1,An *ogre* named [ogre] lives
5,[1d5+1] *ogres* led by one named [ogre] live

;ogre
1,Big Tooth
1,Much Pain
1,Bone Crusher```

As you can see, these three tables can already generate a lot of different descriptions. For example:

1. An ettin is known to live in the area.
2. An ogre named Mad Eye lives in these hills.
3. 4 ogres led by one named Big Tooth live in these hills.

Notice how the ogre names are all just two words. How about splitting them into tables?

```;hills
1,Many small creeks separated by long ridges make for bad going in these badlands.
1,An *ettin* is known to live in the area.
1,A *manticore* has taken over a ruined tower.
1,[1d6 ogres live] in these hills.
1,An *orc tribe* is camping in a ruined watch tower.

;1d6 ogres live
1,An *ogre* named [ogre] lives
5,[1d5+1] *ogres* led by one named [ogre] live

;ogre
1,[ogre 1] [ogre 2]

;ogre 1
1,Big
1,Much
1,Bone

;ogre 2
1,Eye
1,Tooth
1,Pain
1,Crusher```

Now we will see such fantastic names as Big Pain, Bone Eye and Mad Tooth.

And now you just keep adding. Take a look at the default table if you want to see more examples.

But now you might be wondering: how does Hex Describe know which table to use for a map entry like the following?

`0101 dark-green trees village`

The answer is simple: Hex Describe will simply try every word and every two word combo. If a table for any of these exists, it will be used.

Thus, the following tables will be used, if they exist:

```;dark-green
;dark-green trees
;dark-green village
;trees dark-green
;trees
;trees village
;village dark-green
;village trees
;village```

Not all of them make sense. I usually try to stick to single words. I needed this feature, however, because I wanted to provide different tables for “white mountain” and “light grey mountain”. Just look at the example:

The mountains in the bottom left corner at (01.09) and (01.10) just feel different. I guess you could say that the two swamps in (05.07) and (06.08) also feel different. In that case you might opt to provide different tables for “grey swamp” and “dark-grey swamp”. Up to you!

As far as I am concerned, however, I recommend to start with the following tables for the Alpine maps.

```;water
;mountains
;white mountain
;light-grey mountain
;forest-hill
;bushes
;swamp
;trees
;forest
;fir-forest
;firs
;thorp
;village
;town```

This will have you covered for all these hexes:

You’re good to go! Write those tables and share them.

Hopefully this also makes it easier to understand the default table that comes with Hex Describe. Above, we saw that the first hex is described using the line `0101 dark-green trees village`. If you look through the default table, you should be able to find a table called “trees” and a table called “village”. And at the time of this writing, this is the table for “trees”:

```;trees
1,Tall trees cover this valley.
1,There are traces of logging activity in this light forest.
1,[2d4] *harpies* sing in the tree tops, luring men into the depths of the forest and to their death.
1,There is a cave in this forest housing the *ettin* called [ettin].

;ettin
1,Bert and Bob
1,Smasher and Gnawer
1,Death and Pain
1,Club and Nail
1,Bone and Marrow
1,Punch and Break```

And now you know how to read it. It’s simple, once you know how to pull it apart.

If you’re more interested in the Smale maps, I recommend you start with the following tables. Sadly, I haven’t worked on these. If you do, please share!

```;water
;swamp
;marsh
;desert
;grass
;trees
;forest
;fir-forest
;forest-mountain
;forest-mountains
;forest-hill
;mountain
;hill
;bush
;bushes
;thorp
;village
;town
;large-town
;city
;keep
;tower
;castle
;shrine
;law
;chaos
;fields```

And if you want to split them up: instead of “desert” use “sand desert” and “dust desert”; instead of “fir-forest” use “green fir-forest” and “dark-green fir-forest”; instead of “hill” use “light-grey hill” and “dust hill”; instead of “forest-hill” use “light-grey forest-hill” and “green forest-hill”; instead of “forest-mountains” use “green forest-mountains” and “grey forest-mountains”.

Tags:

Hi: This thing is marvelous. Is there a way to format tables with more than just bold face? I’m having a hard time finding that, but probably just missing it.

– Hans Messersmith (aka skalchemist) 2018-03-21 23:06 UTC

For now, just use HTML. There is no sanitizing. Anything goes. The bold code is in `parse_rable` (look for “strong”).

The only magic I currently do is moving images around after the description is done. See `process`.

– Alex 2018-03-22 06:27 UTC

Excellent stuff!

– Ben Miller 2018-04-23 15:31 UTC

Thanks.

– Alex Schroeder 2018-04-23 15:56 UTC

Is there a way that I specify that a particular trail has a particular name in my Text-Mapper input text? I tried...

1208-1207-1107-0906-0805-0706-0505-0604-0603-0302-0301 trail “The Stoneway”

...and a couple of other similar things, but couldn’t get it to work.

– Ben Miller 2018-04-29 20:18 UTC

Not yet. But it’s a good point. I’ve started working on it...

– Alex Schroeder 2018-04-29 21:00 UTC

Current status:

1. Labels will get added at the head.
2. Labels will use the label and glow attributes as for hex labels.
3. Labels will get added above things (e.g. forests) and below hex labels.
4. Labels will not be shifted. I think this would be nice, but I’m not quite sure how to do it.
5. As it is, labels will not tell you what the name of a river is after a merge.
6. Labels supposedly figure out whether to be shown on the left or the right side of a line, but the documentation for textPath says that support for the side attribute only exists in Firefox 61.

What do you think?

Please note that Hex Describe will happily ignore existing labels...

– Alex Schroeder 2018-04-29 21:27 UTC

So now I’m looking at a path like `M255.0,892.0 C225.0,909.3 255.0,892.0 225.0,909.3 S105.0,978.6 75.0,995.9 L45.0,1013.2` and thinking: there must be a simple way, something about a matrix operation, which can convert this path to a path that runs 10 “to the left” of it. But I’ve been staring at the screen and little doodles on paper for an hour and I’ve got nothing.

I did find the following on Math Stack Exchange: Control points of offset bezier curve. And now I’m reading Qualitative and Quantitative Comparisons of Offset Curve Approximations.

– Alex Schroeder 2018-05-01 15:34 UTC

My wife tells me that surely improving the river name placement isn’t worth it... And perhaps she’s right. I’ve spent far too much time on offsetting Bezier curves.

– Alex Schroeder 2018-05-02 19:55 UTC

I tried adding labels to rivers and trails in #textmapper as these features get names in #hexdescribe. For a few days now I was trying to improve label placement on those lines. Only now did it occur to me that maybe I should check how busy the entire map would get. As it turns out, pretty busy and I don’t think that improved placement of labels on those lines would help at all. These labels would have to be much smaller, or the map much bigger, for this to work.

– Alex Schroeder 2018-05-04 08:30 UTC

Sorry for the delay in replying. This is ace stuff! Yes, it’s getting a little busy... I wonder, could it perhaps only show the names for trails/rivers that have a certain length (say, 4 hexes)? And when using Hex Describe we could see see all the trail and river names as per usual?

– Ben Miller 2018-05-14 19:37 UTC

Yeah, maybe... for now I think I’m not going to a-end more time on the labeling of rivers. So many unsolved problems:

1. offset curves to add a small space between label and river
2. direction of the text
3. placing the label “above” the river

I think I need to focus on adding more text and “setting” material instead of working on features.

– Alex Schroeder 2018-05-14 19:57 UTC

Fair enough. What I’d like more than my chosen trail/river name appearing on the hex grid, is for it to show up in the Hex Describe text descriptions. At the moment, even though the same trail name is automatically applied across multiple hexes, I can’t provide my own name. Unless I can and just haven’t realised it.

– Ben Miller 2018-05-15 19:33 UTC

Fair enough. What I’d like more than my chosen trail/river name appearing on the hex grid, is for it to show up in the Hex Describe text descriptions. At the moment, even though the same trail name is automatically applied across multiple hexes, I can’t provide my own name. Unless I can and just haven’t realised it.

– Ben Miller 2018-05-15 19:33 UTC

I suppose what I’m hankering after is a way to alter parts of what Hex Describe comes out with by putting custom values in the map data. Or, I suppose, putting something in the random tables such that a specific trail/river mentioned in the map data is attached to a certain result specified in the random tables.

– Ben Miller 2018-05-15 19:38 UTC

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.