RPG

This page lists the most recent journal entries related to role-playing games (RPG). There are some more pages on the related German page (Rollenspiele).

Free web apps I wrote:

Free games I wrote:

Looking for gamers here in Switzerland? → SpielerZentrale, NearbyGamers, RPG Zürich on Facebook, and the Pen & Paper Schweiz Facebook Group. Networking is important so that people moving here can find D&D games in Zürich, Switzerland.

Logo for my RPG feed

2018-04-10 Updates

Not much to say. I’m enjoying my time in Japan. Sometimes, when we’re back at the hotel, I sit in my room and work on Hex Describe. Check out the activity on GitHub, if you’re interested.

If you want, reload the village description a few times. There’s more information for keeps, towers, and temples of Set, Orcus, and Thor. I still need to add more descriptions for the remaining major powers.

Tags:

Add Comment

2018-03-29 Generating Islands

Vague thoughts on randomly generating a map for a pirate campaign, or a colonialism, slavery, the spice trade, the silver train (and robbing it), and all that.

Think about the Haitian Revolution. Or Ching Shih. Pirates! The Philippines.

I think the first problem I usually have is island formation. Specially if we want atolls, or a chain of islands. Are we going to model a hot spot like Hawaii? Or something like the Caribbean, or the Pacific Rim? How many hexes per island are we going to aim for? If it is going to be just three or four per island, then questions of altitude are moot. But if we want to generate islands like Cuba and Tahiti, the result would be very different.

Tags:

Add Comment

2018-03-21 Adding Factions

I’ve added the naming of regional things to Hex Describe. Once again, it was a conversation with Paolo Greco that pushed me. Thanks!

Basically, the idea is that there are some regional things with names such as factions, dukes, and so on. In the following example, we have bugbears belonging to the Wolf Eyes tribe and I want to make sure that there are at most three tribes on the map, but I don’t want to use the same three names for every map. Thus, I need a table to generate bugbear band names, and there should be at most three of them.

0302: Hiding between the trees are watchful eyes in the service of the elves underground, 6 bugbears led by one they call Silent Paws belonging to the Wolf Eyes band. There is a town of 100 humans led by a necromancer (level 9) called Florina who lives in a keep with a retainer, the fighter (level 7) Shathviha and their whip, the knight Henna (level 6). The log cabins are protected by a town wall and the river. There is a market. Green Creek runs through here. Shady Road leads through here.

Image 1 for 2018-03-18 Adding Mushrooms

Here’s how to set it up:

;trees
...
1,Hiding between the trees are watchful eyes in the service of the elves underground, [1d8 bugbears].


;fir-forest
...
1,In this fir forest is a little campsite with [1d8 bugbears].

;1d8 bugbears
1,the *bugbear* [bugbear]
7,[1d7+1] *bugbears* led by one they call [bugbear] belonging to [a bugbear band]

;a bugbear band
1,[name for a bugbear band1]
1,[name for a bugbear band2]
1,[name for a bugbear band3]

;name for a bugbear band1
1,[bugbear band]

;name for a bugbear band2
1,[bugbear band]

;name for a bugbear band3
1,[bugbear band]

;bugbear band
1,[bugbear band 1] [bugbear band 2]

;bugbear band 1
1,Bear
1,Lynx
1,Cat
1,Wolf

;bugbear band 2
1,Claws
1,Ears
1,Teeth
1,Eyes

The pattern “name for a thing” is key, here. Whenever a table has this name, it will determine the result for the table and keep returning that. Thus, with the tables as they are, eventually all the bugbear bands will have one of three names as “name for a bugbear band1-3” are eventually determined.

Tags:

Add Comment

2018-03-20 Naming Rivers, Canyons, Trails

I’ve added the naming of linear things to Hex Describe. Rivers, trails, canyons, and any user-defined lines on the map can now have names. The default map implements this in a very simplistic manner, mostly just to show that it works.

0201: A ruined tower standing on a small island in this swamp is home to the ettin called Club and Nail. Brown Creek runs through here. Hollow Lane goes through here.

Image 1 for 2018-03-18 Adding Mushrooms

The basis of all this are the generated lines on the map. The Alpine maps usually come with things like the following at the end:

...
1704-1604-1505 canyon
1510-1610-1711 river
1609-1710-1810-1711 river
1310-1410-1511 river
...
0404-0302 trail
0709-0610 trail
0305-0302 trail
...

These can now be named. The default table has entries like the following:

;canyon
1,[name for river] has dug itself a deep gorge.
1,The gorge is wonderful and deep.
1,Crossing the canyon requires climbing gear.

;river
1,[name for river] flows through here.
1,[name for river] runs through here.

;name for river
1,[river 1] [river 2]

...

;trail
1,[name for trail] goes through here.
1,[name for trail] leads through here.

;name for trail
9,[trail 1] [trail 2]
1,[trail 1] [trail 1] [trail 2]

I like it, but perhaps it’s getting too verbose? This information should probably simple be on the map itself. But that’s harder to do...

Tags:

Comments on 2018-03-20 Naming Rivers, Canyons, Trails

From my G+ post:

I think this means that almost all of the code aspects I wanted to implement are now implemented. What’s missing is the naming of singular things, like “There are barracks with troops loyal to [name for a duke 1].” Whenever it would get used, the same name would get produced for the entire region. There would be no dependency on map features.

The big challenge that lies ahead is to improve the tables in order to maintain my vision of the “basic” and “boring” wilderness setup, with a better distribution of encounters, more and better names, more interesting settlements and lairs without going crazy. Should I add treasure?

Without going crazy is important to me. After all, this is supposed to create a mini-campaign setting for the referee to work on. Perhaps the most important change would be the addition of more whitespace between the hex descriptions! “Basic & Boring” is my motto. I would like to make it easy for people to take the default tables and add their own (taking tables from Abulafia, for example), and then republishing those.

– Alex Schroeder 2018-03-20 10:52 UTC


I always say: know your competition. Today I learned of an alternative to Abulafia and Hex Describe called Tracery. It’s a text generator written in Javascript.

An interesting feature it has: “Often you want to save information. [...] In their basic form, they create some new rules and push them onto a symbol, creating that symbol if it didn’t exist, or hiding its previous value if it did.”

And more, haha:

Oh, an Allison is on Mastodon, too: @aparrish.

– Alex Schroeder 2018-03-20 18:44 UTC


Christoper Week suggested a look at RandomGen, yet another random text driven generator. And it has context variables, too. The How To has so many good ideas!

  • automatic s for plurals
  • automatic an or a for the article
  • capitalization (first letter or all words)
  • identifiers (variables)
  • attributes (associated with identifiers)
  • variable repetitions
  • quick alternatives without subtables
  • including remote text files
  • using Pastebins

There is nothing new under the sun and all my generator does is retrace a path taken by plenty of others. Well, I connect it to a map, I guess that’s new. Maybe that tells me where I need to focus.

– Alex 2018-03-20 19:34 UTC

Add Comment

2018-03-19 Adding Faces

I’ve plugged my Face Generator into Hex Describe. Here is the output of a settlement governed by a bunch of humans, with faces.

Showing faces

The setup depends on the implementation details, sadly.

The default table has the following entry:

;human
1,[man]<img src="[[redirect https://campaignwiki.org/face/redirect/alex/man]]" />
1,[woman]<img src="[[redirect https://campaignwiki.org/face/redirect/alex/woman]]" />

As HTML gets passed through, this already adds the images to the output. Getting them to float in an acceptable manner took a bit more work. There is a post-processing step which rearranges the HTML: It moves all the images in a paragraph to the very beginning and into a span element with a class I can refer to in the CSS. With that, I can then size the faces using CSS, and float the images to the left.

What do you think?

The construct [[redirect URL]] should work for any web service that redirects to its result. Instead of following the redirect and retrieving the image, the construct just inserts the new location into the output. This makes sure that you can save the description to a file, reload it in the future, and you’ll still get the same faces.

In practice I think this will be hard for services not hosted on the same domain since campaignwiki.org is secured by HTTPS and I think most browsers will then refuse to load resources such as images from services that aren’t hosted on the same domain (same-origin policy).

I guess Hex Describe could proxy the resources. But perhaps that opens me up to abuse? I don’t know. We’ll see when somebody asks me to support something specific.

The human names are taken from my Halberds & Helmets Character Generator, by the way. Those were taken from the Zurich birth registers in 2012. Sadly, the original data is no longer available.

Tags:

Add Comment

2018-03-18 Adding Mushrooms

These days I try to write a table or two for Hex Describe every day.

Today I hopped on the RPG OSR Discord channel and asked: “Anybody interested in spending half an hour adding content to some random tables used to describe a mountainous region?” Tommi Brander spoke up and we expanded on the mushrooms together.

Image 1

This is what we came up with:

;forest
1,Tall trees and dense canopy keep the sunlight away. There are big mushrooms everywhere. [mushrooms]
...

;mushrooms
1,The mushrooms are guarded by [mykonids]
1,If eaten, [do something interesting]
1,These mushrooms are actually the antennaes and horns for the big sleeping supermushroom [name for forest/forest-hill/trees/fir-forest/firs] living beneath the forest. Around here, your sleep will be filled with mushroom dreams.

;mykonids
1,[3d6] *mykonids*.
1,[3d6] *mykonids* guarding a mushroom circle. On nights of the full moon, or on a 1 in 6, the portal to the fey realms opens. If so, [2d12] *elves* led by one they call [elf leader] (level [1d6+1]) will be visiting.

;do something interesting
1,save vs. poison or die. The locals use this to kill criminals.
1,save vs. poison or loose your voice for a week. The locals avoid doing this.
1,save vs. poison or be cursed to turn into a mykonid over the coming week.
1,save vs. poison or be paralysed for 1d4 hours. Local Set cultists will trade in these mushrooms.
1,gain telepathic powers for a week. The locals use them to spy on the thoughts of any foreigners.
1,enjoy wild and colorful visions for 1d20 hours. If you roll higher than your wisdom, see something relevant for the current campaign. The locals lead village idiots here to warn them of impeding danger.
1,heal 1d6+1. The locals assemble here after a fight to recuperate.

Tags:

Add Comment

2018-03-17 Random Goblins

Same procedure as yesterday but now I want to add goblins to my swamps.

A map

This is what my Halberds & Helmets Referee Guide has to say:

Numbers: 6d10, sometimes in the company of 2d6 giant animals. Roll 1d6: 1 = no giant animals, 2–3 = giant wolves, 4 = giant weasels, 5 = giant spiders, 6 = giant beetles.
Names: Death Rider, Man Killer, Eye Poker, Wolf King, Beetle Basher, The Impaler.

These are the tables I added:

;swamp
1,One of the islands of this swamp there is a huge mud mound. [goblins]
...

;goblins
1,[6d10] *goblins* live here, led by one they call [goblin].
5,[6d10] *goblins* live here, led by one they call [goblin]. The goblins have tamed [2d6] [goblin companions]. Goblins love to ride these into battle.

;goblin companions
2,*giant wolves*
1,*giant weasels*
1,*giant spiders*
1,*giant beetles*

;goblin
1,Death Rider
1,Man Killer
1,Eye Poker
1,Wolf King
1,Beetle Basher
1,The Impaler

Example output:

1202: On one of the islands of this swamp there is a huge mud mound. 40 goblins live here, led by one they call Man Killer. The goblins have tamed 6 giant wolves. Goblins love to ride these into battle.
2001: On one of the islands of this swamp there is a huge mud mound. 34 goblins live here, led by one they call The Impaler.

Success!

Tags:

Comments on 2018-03-17 Random Goblins

If you made two tables out of the goblin leader table, you could have “man king” or “the rider” etc.

Rorschachhamster 2018-03-18 23:22 UTC


Hilarious. Death Killer!

Done.

– Alex Schroeder 2018-03-19 09:50 UTC

Add Comment

2018-03-16 Adding Wights

OK, so I wanted to add wights to Hex Describe and I thought of bog graves.

A swamp in the west...

This is what my Halberds & Helmets Referee Guide has to say:

Names: Eilif, Kali, Kyran, Maura, Tariq, Thyia, usually King or Queen of something or other, mostly realms that have been forgot-ten a long time ago: Abilard, Erlechai, Merlen, Ouria, Yzarria.
Numbers: 1d8.

Using the tables below, this is the output you get:

0204: In the old days, this bog was used to drown evil necromancers. At night, 2 wights led by Old Maura of Merlen crawl out of their wet graves and roam the land in search of more followers.
0504: In the old days, this bog was used to drown evil necromancers. At night, the wight King Tariq of Ouria crawls out of a wet grave and roams the land in search of followers.

There’s still room for improvement. Does Old Maura lead one other wight or two other wights? Oh well.

Here’s how I did it:

;swamp
1,In the old days, this bog was used to drown evil necromancers. [bog wights]
...

;bog wights
1,At night, [wight crawls]

;wight crawls
1,the *wight* [wight leader] crawls out of a wet grave and roams the land in search of followers.
1,[1d7+1] *wights* led by [wight leader] crawl out of their wet graves and roam the land in search of more followers.

;wight leader
1,Old [wight name] of [wight realm]
1,[wight name] the Terrible of [wight realm]
1,[wight name] the Cruel of [wight realm]
1,King [king wight] of [wight realm]
1,Queen [queen wight] of [wight realm]

;wight name
1,[king wight]
1,[queen wight]

;king wight
1,Eilif
1,Kyran
1,Tariq

;queen wight
1,Kali
1,Maura
1,Thyia

;wight realm
1,Abilard
1,Erlechai
1,Merlen
1,Ouria
1,Yzarria

Tags:

Add Comment

2018-03-15 Regional Context in Maps

I had a chat with Paolo Greco today and he noted that the Abulafia grammar doesn’t have context. We talked about various ideas, for example tables that remembered their result and only produced a single result for every run. You could use it to generate the name of the local duke and then reuse it everywhere and wouldn’t get different dukes.

We talked about naming rivers, valleys, mountains, political boundaries, and how you could then reuse the name: for bridges, towns, fords, and so on.

I decided to tackle mountains, first. The idea I had was this: I wanted a table to produce a result and then all nearby hexes would share the name. But what would “nearby” mean in this context? Neighbours? No, I decided it was going to be all the hexes neighbouring hexes sharing a “type” (a word from the description).

Let’s take another look at the default map. See those four white hexes along the western edge, the four white hexes including the big mountains at 01.08? I wanted the name of the mountain to be available in all the white hexes.

Image 1 for 2018-03-12 Describing Hexes

I settled on the following convention: If a table is called “name for type something” then this table will apply for all the neighbouring hexes sharing this type.

Let’s look at the hexes I’m interested in:

0108 white mountains cliff1
0109 white mountain
0207 white mountain cliff1
0208 white mountain

The relevant tables:

;white mountain
1,The air up here is cold. You can see the [name for white big mountains] from here.
1,Snow fields make it impossible to cross without skis.
1,There is a hidden meadow up here, protected by the [name for white big mountains].
1,The glaciers need a local guide and ropes to cross.
1,The glacier ends at a small lake [maybe an ice cave].
1,A *white dragon* lives in a ruined mountain fortress on the highest peak around here.

;mountains
1,These mountains are called the [name for white big mountains]. [more mountains]

;name for white big mountains
1,[dreadful] [peaks]

The key is that the first time the table “name for white big mountains” is referred to, a name is generated and it will spread to all the white neighbouring hexes. That’s why you can “see” the named mountain from neighbouring hexes.

In the output, for example:

0108: These mountains are called the Dire Giants. They are impossible to climb.
0109: The air up here is cold. You can see the Dire Giants from here.

Tags:

Comments on 2018-03-15 Regional Context in Maps

This should also work for larger swamps, forests and the like.

– Alex Schroeder 2018-03-15 22:38 UTC


I don’t know how you’re producing content for the hex regions but I made a table for that recently based on terrain and you might find it useful. http://melancholiesandmirth.blogspot.com/2018/03/descriptions-of-terrain-hex-groupings.html?m=1

– Lungfungus 2018-03-15 23:56 UTC


Oh, I like it! May I reuse it in my tool? Credited to Lungfungus, URL being https://melancholiesandmirth.blogspot.com/ OK? The software itself uses GPLv3 but the icons use CC BY SA 3.0. The simplest would be one of these two, I guess. Or CC BY SA 4.0, more likely. What do you think?

– Alex Schroeder 2018-03-16 12:12 UTC


Please do so! I make all of my hex maps by hand so the icons themselves would be however you think is best.

– Lungfungus 2018-03-16 16:23 UTC

Add Comment

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,Mad Eye
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,Mad
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:

Image 1 for 2018-03-12 Describing Hexes

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:

Image 1

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:

Comments on 2018-03-15 How to Describe Hexes

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

Add Comment

More...

Comments


Please make sure you contribute only your own work, or work licensed under the GNU Free Documentation License. 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.

Referrers: Playtesting Four Against Darkness