Dungeons & Dragons players spend a lot of time rolling 20-sided polyhedral dice, known as D20s.
In general, they’re looking to roll as high as possible to successfully stab a wyvern, jump a chasm, pick a lock, charm a Duke1,
or whatever.
Roll with advantage
Sometimes, a player gets to roll with advantage. In this case, the player rolls two dice, and takes the higher roll. This really boosts their chances of not-getting a
low roll. Do you know by how much?
I dreamed about this very question last night. And then, still in my dream, I came up with the answer2.
I woke up thinking about it3
and checked my working.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
2
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
3
3
3
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
4
4
4
4
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
5
5
5
5
5
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
6
6
6
6
6
6
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
7
7
7
7
7
7
7
7
8
9
10
11
12
13
14
15
16
17
18
19
20
8
8
8
8
8
8
8
8
8
9
10
11
12
13
14
15
16
17
18
19
20
9
9
9
9
9
9
9
9
9
9
10
11
12
13
14
15
16
17
18
19
20
10
10
10
10
10
10
10
10
10
10
10
11
12
13
14
15
16
17
18
19
20
11
11
11
11
11
11
11
11
11
11
11
11
12
13
14
15
16
17
18
19
20
12
12
12
12
12
12
12
12
12
12
12
12
12
13
14
15
16
17
18
19
20
13
13
13
13
13
13
13
13
13
13
13
13
13
13
14
15
16
17
18
19
20
14
14
14
14
14
14
14
14
14
14
14
14
14
14
14
15
16
17
18
19
20
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
15
16
17
18
19
20
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
17
18
19
20
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
17
18
19
20
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
19
20
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
19
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
Table illustrating the different permutations of two D20 rolls and the “advantage” result (i.e. the higher of the two).
The chance of getting a “natural 1” result on a D20 is 1 in 20… but when you roll with advantage, that goes down to 1 in 400: a huge improvement! The chance of rolling a 10 or 11 (2 in
20 chance of one or the other) remains the same. And the chance of a “crit” – 20 – goes up from 1 in 20 when rolling a single D20 to 39 in 400 – almost 10% – when rolling with
advantage.
You can see that in the table above: the headers along the top and left are the natural rolls, the intersections are the resulting values – the higher of the two.
The nice thing about the table above (which again: was how I visualised the question in my dream!) is it really helps to visualise why these numbers are what they are. The
general formula for calculating the chance of a given number when rolling D20 with advantage is ( n2 – (n-1)2 ) / 400. That is, the square of the number
you’re looking for, minus the square of the number one less than that, over 400 (the total number of permutations)4.
Why roll two dice when one massive one will do?
Knowing the probability matrix, it’s theoretically possible to construct a “D20 with Advantage” die5. Such a tool would
have 400 sides (one 1, three 2s, five 3s… and thirty-nine 20s). Rolling-with-advantage would be a single roll.
This is probably a totally academic exercise. The only conceivable reason I can think of would be if you were implementing a computer system on which generating random numbers
was computationally-expensive, but memory was cheap: under this circumstance, you could pre-generate a 400-item array of possible results and randomly select from it.
But if anybody’s got a 3D printer capable of making a large tetrahectogon (yes, that’s what you call a 400-sided polygon – you learned something today!), I’d love to see an “Advantage
D20” in the flesh. Or if you’d just like to implement a 3D model for Dice Box that’d be fine too!
Footnotes
1 Or throw a fireball, recall an anecdote, navigate a rainforest, survive a poisoning,
sneak past a troll, swim through a magical swamp, hold on to a speeding aurochs, disarm a tripwire, fire a crossbow, mix a potion, appeal to one among a pantheon of gods, beat the
inn’s landlord at an arm-wrestling match, seduce a duergar guard, persuade a talking squirrel to spy on some bandits, hold open a heavy door, determine the nature of a curse, follow a
trail of blood, find a long-lost tome, win a drinking competition, pickpocket a sleeping ogre, bury a magic sword so deep that nobody will ever find it, pilot a spacefaring rowboat,
interpret a forgotten language, notice an imminent ambush, telepathically commune with a distant friend, accurately copy-out an ancient manuscript, perform a religious ritual, find
the secret button under the wizard’s desk, survive the blistering cold, entertain a gang of street urchins, push through a force field, resist mind control, and then compose a ballad
celebrating your adventure.
2 I don’t know what it says about me as a human being that sometimes I dream in
mathematics, but it perhaps shouldn’t be surprising given I’m nerdy enough to have previously recorded instances of dreaming in (a) Perl, and (b) Nethack (terminal mode).
3 When I woke up I also found that I had One Jump from Disney’s Aladdin stuck in my head, but I’m not sure
that’s relevant to the discussion of probability; however, it might still be a reasonable indicator of my mental state in general.
4 An alternative formula which is easier to read but harder to explain would be ( 2(n
– 1) + 1 ) / 400.
5 Or a “D20 with Disadvantage”: the table’s basically the inverse of the advantage one –
i.e. 1 in 400 chance of a 20 through to 39 in 400 chance of a 1.
FoundryVTT is a fantastic Web-based environment for tabletop roleplaying adventures1 and something I
particularly enjoy is the freedom for virtually-unlimited scripting. Following a demonstration to a fellow DM at work last week I
promised to throw together a quick tutorial into scripting simple multi-phase maps using Foundry.2
Why multi-phase maps?
You might use a multi-phase map to:
Allow the development and expansion of a siege camp outside the fortress where the heroes are holed-up.3
Rotate through day and night cycles or different times of day, perhaps with different things to interact with in each.4
Gradually flood a sewer with rising water… increasing the range of the monster that dwells within.5
Re-arrange parts of the dungeon when the characters flip certain switches, opening new paths… and closing others.
I’ll use the map above to create a simple linear flow, powered by a macro in the hotbar. Obviously, more-complex scenarios are available, and combining this approach with a plugin like
Monk’s Active Tile Triggers can even be used to make the map appear to dynamically change in response to the movement
or actions of player characters!
Setting the scene
Create a scene, using the final state of the map as the background. Then, in reverse-order, add the previous states as tiles above it.
Make a note of the X-position that your tiles are in when they’re where they supposed to be: we’ll “move” the tiles off to the side when they’re hidden, to prevent their ghostly
half-hidden forms getting in your way as game master. We’ll also use this X-position to detect which tiles have already been moved/hidden.
Also make note of each tile’s ID, so your script can reference them. It’s easiest to do this as you go along. When you’re ready to write your macro, reverse the list, because
we’ll be hiding each tile in the opposite order from the order you placed them.
Writing the script
Next, create a new script macro, e.g. by clicking an empty slot in the macro bar. When you activate this script, the map will move forward one phase (or, if it’s at the end, it’ll
reset).
Here’s the code you’ll need – the 👈 emoji identifies the places you’ll need to modify the code, specifically:
const revealed_tiles_default_x = 250 should refer to the X-position of your tiles when they’re in the correct position.
const revealed_tiles_modified_x = 2825 should refer to the X-position they’ll appear at “off to the right” of your scene. To determine this, just move one tile right
until it’s sufficiently out of the way of the battlemap and then check what it’s X-position is! Or just take the default X-position, add the width of your map in pixels, and then add
a tiny bit more.
const revealed_tiles = [ ... ] is a list of the tile IDs of each tile what will be hidden, in turn. In my example there are five of them (the sixth and final image being
the scene background).
const revealed_tiles_default_x =250; // 👈 X-position of tiles when displayedconst revealed_tiles_modified_x =2825; // 👈 X-position of tiles when not displayedconst revealed_tiles = [
'2xG7S8Yqk4x1eAdr', // 👈 list of tile IDs in order that they should be hidden'SjNQDBImHvrjAHWX', // (top to bottom)'tuYg4FvLgIla1l21',
'auX4sj64PWmkAteR',
'yAL4YP0I4Cv4Sevt',
].map(t=>canvas.tiles.get(t));
/*************************************************************************************************/// Get the topmost tile that is still visible:const next_revealed_tile_to_move = revealed_tiles.find(t=>
t.position.x == revealed_tiles_default_x
);
// If there are NO still-visible tiles, we must need to reset the map:if( ! next_revealed_tile_to_move ) {
// To reset the map, we go through each tile and put it back where it belongs -for(tile of revealed_tiles){
canvas.scene.updateEmbeddedDocuments("Tile", [ {
_id: tile.id,
x: revealed_tiles_default_x,
hidden:false
} ]);
}
} else {
// Otherwise, hide the topmost visible tile (and move it off to the side to help the GM) -
canvas.scene.updateEmbeddedDocuments("Tile", [ {
_id: next_revealed_tile_to_move.id,
x: revealed_tiles_modified_x,
hidden:true
} ]);
}
I hope that the rest of the code is moderately self-explanatory for anybody with a little JavaScript experience, but if you’re just following this kind of simple, linear case then you
don’t need to modify it anyway. But to summarise, what it does is:
Finds the first listed tile that isn’t yet hidden (by comparing its X-position to the pre-set X-position).
If there aren’t any such tiles, we must have hidden them all already, so perform a reset: to do this – iterate through each tile and set its X-position to the pre-set X-position,
and un-hide it.
Otherwise, move the first not-hidden tile to the alternative X-position and hide it.
4 If you’re using Dungeon
Alchemist as part of your mapmaking process you can just export orthographic or perspective outputs with different times of day and your party’s regular inn can be
appropriately lit for any time of day, even if the party decides to just “wait at this table until nightfall”.
I’ve been GMing/DMing/facilitating1 roleplaying games for nearby 30 years, but I only
recently began to feel like I was getting to be good at it.
The secret skill that was hardest for me to learn? A willingness to surrender control to the players.
Karma, Drama, Fortune
I could write a lot about the way I interpret the K/D/F model, but for today here’s a quick primer:
The K/D/F model describes the relationship between three forces: Karma (player choices), Drama
(story needs) and Fortune (luck, e.g. dice rolls). For example,
When the lich king comes to the region to provide a villainous plot hook, that’s Drama. Nobody had to do anything and no dice were rolled. The story demanded a “big
bad” and so – within the limitations of the setting – one turned up.
When his lucky critical hit kills an ally of the adventurers, that’s Fortune. That battle could have gone a different way, but the dice were on the villain’s side and
he was able to harm the players. When we don’t know which way something will go, and it matters, we hit the dice.
When one of the heroes comes up with a clever way to use a magical artefact from a previous quest to defeat him, that’s Karma. It was a clever plan, and the players
were rewarded for their smart choices by being able to vanquish the evil thing.
And elsewhere on their quest they probably saw many other resolutions. Each of those may have leaned more-heavily on one or another of the three pillars, or balanced between them
equally.
Disbalancing drama
For most of my many years of gamemastering, I saw my role as being the sole provider the “drama” part of the K/D/F model. The story
comes from me, the choices and dice rolls come from the players, right?
Nope, I was wrong. That approach creates an inevitable trend, whether large or small, towards railroading: “forcing” players down a particular path.
A gamemaster with an inflexible and excessively concrete idea of the direction that a story must go will find that they become unable to see the narrative through any other lens. In
extreme examples, the players are deprotagonised and the adventure just becomes a series of set pieces, connected by the gamemaster’s idea of how things should play out. I’ve seen this
happen. I’ve even caused it to happen, sometimes.2
A catalogue of failures
I’ve railroaded players to some degree or another on an embarrassing number of occasions.
In the spirit of learning from my mistakes, here are three examples of me being a Bad GM.
Quantum Ogre
Scenario: In a short-lived high fantasy GURPS
campaign, I wanted the party to meet a band of gypsies and have their fortune told, in order to foreshadow other parts of the story yet to come.
What I did: I pulled a quantum ogre (magician’s choice) on them: whether
they travelled by road, or water, or hacked their way through the forest, they were always going to meet the gypsies: their choice of route didn’t really matter.
Why that was wrong: I’d elevated the value of the encounter I’d planned higher than the importance of player agency. The more effort it took to write something, the
more I felt the need to ensure it happened!
Two things I could’ve done: Reassessed the importance of the encounter. Found other ways to foreshadow the plot that didn’t undermine player choices, and been
more-flexible about my set pieces.
Fudging
Scenario: In a Spirit of the Century one-shot an antagonist needed to kidnap a NPC from aboard an oceanbound ship. To my surprise – with some very lucky rolls – the players foiled the plot!
What I did: I used a fudge – an exploit based on the fact
that in most games the gamemaster controls both the plot and the hidden variables of the game mechanics – to facilitate the antagonist kidnapping a different
NPC, and adapted the story to this new reality.
Why that was wrong: It made the players feel like their choices didn’t matter. I justified it to myself by it being a one-shot, but that undermines the lesson: I
could’ve done better.
Two things I could’ve done: Used the failed attack as a precursor to a later renewed offensive by a villain who’s now got a personal interest in seeing the party
fail. Moved towards a different story, perhaps to a different element of the antagonist’s plan.
Ex Machina
Scenario: In a long-running Warhammer Fantasy Roleplay (1st edition!) campaign, a series of bad choices and terrible luck left the party trapped and unable
to survive the onslaught of a literal army of bloodthirsty orcs.
What I did: I whipped out a deus spiritus ex machina, having a friendly ghost NPC
basically solve for them a useful puzzle they’d been struggling with, allowing them to escape alive (albeit with the quest truly failed).
Why that was wrong: It deprotagonised the adventurers, making them unimportant in their own stories. At the time, I felt that by saving the party I was “saving” the
game, but instead I was undermining its value.
Two things I could’ve done: TPK: sometimes it’s the right thing to allow everybody to die! Pivot the plot to
facilitate their capture (e.g. the arch-nemesis can’t solve the puzzle either and wants to coerce them into helping), leading to new challenges and interesting moral choices.
Those examples are perhaps extreme, but I’m pretty sure I’ve set up my fair share of lesser sins too. Like chokepoints that strongly encourage a particular direction: do that
enough and you train your players to wait until they identify the chokepoint before they take action! Or being less invested in players’ plans if those plans deviate from what
I anticipated, and having a convenient in-party NPC prompting players with what they ought to do next. Ugh.3
The good news is, of course, that we’ve all always got the opportunity for growth and self-improvement.
The self-improvement path
I’ve gotten better at this in general over the years, but when I took over from Simon at DMing for The Levellers in July, I decided that I was going to try to push myself harder than ever to avoid railroading. Simon was always especially good at
promoting player freedom and autonomy, and I wanted to use this inspiration as a vehicle to improve my own gamemastering.
What does that look like within the framework of an established campaign?
Well: I ensure there are clues (usually three of them!) to
point the players in the “right” direction. And I’ll be on hand to give “nudges” if they’re truly stuck for what to do next, typically by providing a “recap” of the things
they’ve previously identified as hooks that are worth following-up (including both the primary plotline and any other avenues they’ve openly discussed investigating).
But that’s the limit to how I allow Drama to control the direction of the story. Almost everything else lies in the hands of Karma and Fortune.
Needless to say, opening up the possibility space for my players makes gamemastering harder4!
But… not by as much as I expected. Extra prep-work was necessary, especially at the outset, in order to make sure that the world I was inheriting/building upon was believable and
internally-consistent (while ensuring that if a player decided to “just keep walking East” they wouldn’t fall off the edge of the world). But mostly, the work did itself.
Because here’s the thing I learned: so long as you’re willing to take what your players come up with and run with it, they’ll help make the story more
compelling. Possibly without even realising it.5
The Levellers are a pretty special group. No matter what the situation, they can always be relied upon to come up with a plan that wasn’t anywhere on their DM‘s radar. When they needed to cross a chasm over their choice of one of two bridges, each guarded by
a different variety of enemy, I anticipated a few of the obvious options on each (fighting, magic, persuasion and intimidation, bribery…) but a moment later they were talking
about having their druid wildshape into something easy-to-carry while everybody else did a group-spider climb expedition down the chasm edge and along the underside of a bridge. That’s thinking outside the box!
But the real magic has come when the party, through their explorations, have unlocked entirely new elements of the story.
Player-driven content
In our campaign, virtually all of the inhabitants of a city have inadvertently sold their immortal souls to a Archduchess of Hell by allowing, over generations, their declaration of
loyalty to their city to become twisted away from their gods and towards their mortal leader, who sold them on in exchange for a sweet afterlife deal. The knights of the city were
especially-impacted, as the oath they swore upon promised their unending loyalty in this life as well. When the fiendish pact was made, these knights were immediately possessed
by evil forces, transforming into horrendous creatures (who served to harass the party for some time).
But there’s a hole in this plot7.
As-written, at least one knight avoided fiendish possession and lived to tell the tale! The player characters noticed this and latched on, so I ran with it. Why might the survivor knights
be different from those who became part of the armies of darkness? Was there something different about their swearing-in ceremony? Maybe the reasons are different for different survivors?
I didn’t have answers to these questions to begin with, but the players were moving towards investigating, so I provided some. This also opened up an entire new possible “soft” quest
hook related to the reason for the discrepancy. So just like that, a plothole is discovered and investigated by a player, and that results in further opportunities
for adventure.
As it happens, the party didn’t even go down that route at all and instead pushed-on in their existing primary direction, but the option remains. All thanks to player
curiosity, there’s a possible small quest that’s never been written down or published, and is unique to our group and the party’s interests. And that’s awesome.
In Conclusion
I’m not the best GM in the world. I’m not even the best GM I know. But I’m getting
better all the time; learning lessons like how to release the reins a little bit and see where my players can take our adventures.
And for those lessons, I’m grateful to those same players.
Footnotes
1 I’m using the terms GM, DM, and facilitator interchangeably, and damned if I’m writing them all out every single time.
2 A gamemaster giving all of the narrative power to any one of the three elements
of K/D/F breaks the game, but in different ways. 100% karma and what you’ve got is a storytelling game, not a roleplaying game:
which is fine if that’s what everybody at the table thinks they’re playing: otherwise not. 100% drama gives you a recital, not a jam session: the gamemaster might as well just be
writing a book. 100% fortune leads to unrealistic chaos: with no rules to the world (either from the plot or from the consequences of actions) you’re just imagining all possible
outcomes in your universe and picking one at random. There’s a balance, and where it sits might vary from group to group, but 100% commitment to a single element almost always breaks
things.
3 A the “lesser sins” I mention show, the edges of what construes railroading and what’s
merely “a linear quest” is a grey area, and where the line should be drawn varies from group to group. When I’m running a roleplaying session for my primary-school-aged kids, for
example, I’m much more-tolerant of giving heavy-handed nudges at a high-level to help them stay focussed on what their next major objective was… but I try harder than ever to
encourage diverse and flexible problem-solving ideas within individual scenes, where childish imagination can really make for memorable moments. One time, a tabaxi warrior,
on fire, was falling down the outside of a tower… but his player insisted that he could shout a warning through the windows he passed before landing in flawless catlike
fashion (albeit mildly singed). My adult players would be rolling athletics checks to avoid injury, but my kids? They can get away with adding details like that by fiat. Different
audience, see?
4 A recent session took place after a hiatus, and I wasn’t confident that – with the
benefit of a few months’ thinking-time – the party would continue with the plan they were executing before the break. And they didn’t! I’d tried to prep for a few other
eventualities in the anticipation of what they might do and… I guessed wrong. So, for the first time in recorded history, our session ended early. Is that the end of
the world? Nope.
5 Want a really radical approach to player-driven plot development? Take a look at
this video by Zee Bashew, which I’m totally borrowing from next time I start running a new campaign.
6 You know what I miss? Feelies. That’s probably why I try to provide so many “props”, whether physical or digital, in my
adventures.
7 The plothole isn’t even my fault, for once: it’s functionally broken as-delivered in the
source book, although that matters little because we’ve gone so-far outside the original source material now we’re on a whole different adventure, possibly to reconvene later on.
Do you play in your daily life? What says “playtime” to you?
How do I play? Let me count the ways!
RPGs
I’m involved in no fewer than three different RPG campaigns (DMing the one for
The Levellers) right now, plus periodic one-shots. I love a good roleplaying game, especially one that puts character-building and storytelling
above rules-lawyering and munchkinery, specifically because that kind of collaborative, imaginative experience feels more like the kind of thing we call “play” when
done it’s done by children!
Videogames
I don’t feel like I get remotely as much videogaming time as I used to, and in theory I’ve become more-selective about exactly what I spend my time on1.
Board Games
Similarly, I don’t feel like I get as much time to grind through my oversized board games collection as I used to2,
but that’s improving as the kids get older and can be roped-into a wider diversity of games3.
Escape Rooms
I love a good escape room, and I can’t wait until the kids are old enough for (more of) them too so I’ve an excuse to do more of them. When we’re not playing conventional escape rooms,
Ruth and I can sometimes be found playing board game-style boxed “kit” ones (which have very variable quality, in my experience) and we’ve
recently tried a little Escape Academy.
They’re not the only satnav-based activities I do at least partially “for fun” though! I contribute to OpenStreetMap, often through the
“gamified” experience of the StreetComplete app, and I’m very slowly creeping up the leader board at OpenBenches. Are these “play”? Sure, maybe.
And all of the above is merely the structured kinds of play I engage in. Playing “let’s pretend”-style games with the kids (even when they make it really, really
weird) adds a whole extra aspect. Also there’s the increasingly-rare murder mystery parties we sometimes hold: does that count as roleplaying, or some other kind of play?
Suffice to say, there’s plenty of play in my life, it’s quite varied and diverse, and there is, if anything, not enough of it!
Footnotes
1 I say that, and yet somehow Steam tells me that one of my most-played games this year
was Starfield, which was… meh? Apparently compelling enough
that I’ve “ascended” twice, but in hindsight I wish I hadn’t bothered.
2 Someday my group and I will finish Pandemic Legacy: Season 2 so we can get
started on Season 0 which has sat
unplayed on my shelves since I got it… oooh… two or three years ago‽
3 This Christmas, I got each of them their first “legacy” game: Zombie Kids for the younger one, My City for the elder. They both seem pretty good.
4Geocaching is where you use military satellite networks to find lost tupperware. Geohashing uses the same technology but what you find is a whole
lot of nothing. I don’t think I can explain why I find the latter more-compelling.
Foundry is a wonderful virtual tabletop tool well-suited to playing tabletop roleplaying games with your friends, no
matter how far away they are. It compares very favourably to the market leader Roll20, once you
get past some of the initial set-up challenges and a moderate learning curve.
You can run it on your own computer and let your friends “connect in” to it, so long as you’re able to reconfigure your router a little, but you’ll be limited by the speed of your home
Internet connection and people won’t be able to drop in and e.g. tweak their character sheet except when you’ve specifically got the application running.
A generally better option is to host your Foundry server in the cloud. For most of its history, I’ve run mine on Fox, my NAS, but I’ve recently set one up on a more-conventional cloud virtual machine too. A couple of
friends have asked me about how to set up their own, so here’s a quick guide:
You will need…
A Foundry license ($50 USD / £48 GBP, one-off payment1)
A domain name for which you control the DNS records; you’ll need to point a domain, like “danq.me” (or a subdomain of it, e.g.
“vtt.danq.me”), at an IP address you’ll get later by creating an “A” record: your domain name registrar can probably help with this –
I mostly use Gandi and, ignoring my frustration with
recent changes to their email services, I think they’re great
An account with a cloud hosting provider: this example uses Linode but you can adapt for any of them
A basic level of comfort with the command-line
1. Spin up a server
Getting a virtual server is really easy nowadays.
You’ll need:
The operating system to be Debian 12 (or else you’ll need to adapt the instructions below)
The location to be somewhere convenient for your players: pick a server location that’s relatively-local to the majority of them to optimise for connection speeds
An absolute minimum of 1GB of storage space, I’d recommend plenty more: The Levellers’ campaign currently uses about 10GB for all of its various maps, art, videos,
and game data, so give yourself some breathing room (space is pretty cheap) – I’ve gone with 80GB for this example, because that’s what comes as standard with the 2
CPU/4GB RAM server that Linode offer
Choose a root password when you set up your server. If you’re a confident SSH user, add your public key so you can log in easily (and then
disable password authentication
entirely!).
For laziness, this guide has you run Foundry as root on your new server. Ensure you understand the implications of this.2
2. Point your (sub)domain at it
DNS propogation can be pretty fast, but… sometimes it isn’t. So get this step underway before you need it.
Your newly-created server will have an IP address, and you’ll be told what it is. Put that IP address into an A-record for your domain.
3. Configure your server
In my examples, my domain name is vtt.danq.me and my server is at 1.2.3.4. Yours will be different!
Connect to your new server using SSH. Your host might even provide a web interface if you don’t have an SSH client installed: e.g. Linode’s “Launch LISH Console” button will do pretty-much exactly that for you. Log in as root using the password you chose
when you set up the server (or your SSH private key, if that’s your preference). Then, run each of the commands below in order (the full script is available as a single file if you
prefer).
3.1. Install prerequisites
You’ll need unzip (to decompress Foundry), nodejs (to run Foundry), ufw (a firewall, to prevent unexpected surprises), nginx (a
webserver, to act as a reverse proxy to Foundry), certbot (to provide a free SSL certificate for Nginx),
nvm (to install pm2) and pm2 (to keep Foundry running in the background). You can install them all like this:
By default, Foundry runs on port 30000. If we don’t configure it carefully, it can be accessed directly, which isn’t what we intend: we want connections to go through the webserver
(over https, with http redirecting to https). So we configure our firewall to allow only these ports to be accessed. You’ll also want ssh enabled so we can remotely connect into the
server, unless you’re exclusively using an emergency console like LISH for this purpose:
Putting the domain name we’re using into a variable for the remainder of the instructions saves us from typing it out again and again. Make sure you type your domain name (that
you pointed to your server in step 2), not mine (vtt.danq.me):
DOMAIN=vtt.danq.me
3.4. Get an SSL certificate with automatic renewal
So long as the DNS change you made has propogated, this should Just Work. If it doesn’t, you might need to wait for a bit then try
again.
3.5. Configure Nginx to act as a reverse proxy for Foundry
You can, of course, manually write the Nginx configuration file: just remove the > /etc/nginx/sites-available/foundry from the end of the printf line to see
the configuration it would write and then use/adapt to your satisfaction.
set +H
printf "server {\n listen 80;\n listen [::]:80;\n server_name $DOMAIN;\n\n # Redirect everything except /.well-known/* (used for ACME) to HTTPS\n root /var/www/html/;\n if (\$request_uri !~ \"^/.well-known/\") {\n return 301 https://\$host\$request_uri;\n }\n}\n\nserver {\n listen 443 ssl http2;\n listen [::]:443 ssl http2;\n server_name $DOMAIN;\n\n ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem;\n ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem;\n\n client_max_body_size 300M;\n\n location / {\n # Set proxy headers\n proxy_set_header Host \$host;\n proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto \$scheme;\n\n # These are important to support WebSockets\n proxy_set_header Upgrade \$http_upgrade;\n proxy_set_header Connection \"Upgrade\";\n\n proxy_pass http://127.0.0.1:30000/;\n }\n}\n" > /etc/nginx/sites-available/foundry
ln -sf /etc/nginx/sites-available/foundry /etc/nginx/sites-enabled/foundry
service nginx restart
3.6. Install Foundry
3.6.1. Create a place for Foundry to live
mkdir {vtt,data}
cd vtt
3.6.2. Download and decompress it
Substitute in your Timed URL in place of <url from website> (keep the quotation marks – " –
though!):
wget -O foundryvtt.zip "<url from website>"
unzip foundryvtt.zip
rm foundryvtt.zip
3.6.3. Configure PM2 to run Foundry and keep it running
Now you’re finally ready to launch Foundry! We’ll use PM2 to get it to run automatically in the background and keep running:
You can watch the logs for Foundry with PM2, too. It’s a good idea to take a quick peep at them to check it launched okay (press CTRL-C to exit):
pm2 logs 0
4. Start adventuring!
Provide your license key to get started, and then immediately change the default password: a new instance of Foundry has a blank default password, which means that
anybody on Earth can administer your server: get that changed to something secure!
Now you’re running on Foundry!
Footnotes
1Which currency you pay in, and therefore how much you pay, for a Foundry license depends on where in the world you are
where your VPN endpoint says you are. You might like to plan accordingly.
2 Running Foundry as root is dangerous, and you should consider the risks for yourself.
Adding a new user is relatively simple, but for a throwaway server used for a single game session and then destroyed, I wouldn’t bother. Specifically, the risk is that a vulnerability
in Foundry, if exploited, could allow an attacker to reconfigure any part of your new server, e.g. to host content of their choice or to relay spam emails. Running as a non-root user
means that an attacker who finds such a vulnerability can only trash your Foundry instance.
There’s a perception that a blog is a long-lived, ongoing thing. That it lives with and alongside its author.1
But that doesn’t have to be true, and I think a lot of people could benefit from “short-term” blogging. Consider:
Photoblogging your holiday, rather than posting snaps to social media
You gain the ability to add context, crosslinking, and have permanent addresses (rather than losing eveything to the depths of a feed). You can crosspost/syndicate to your favourite
socials if that’s your poison..
Blogging your studies, rather than keeping your notes to yourself
Writing what you learn helps you remember it; writing what you learn in a public space helps others learn too and makes it easy to search for your discoveries later.2
Recording your roleplaying, rather than just summarising each session to your fellow players
My D&D group does this at levellers.blog! That site won’t continue to be updated forever – the party will someday retire or, more-likely, come to a glorious but horrific end – but
it’ll always live on as a reminder of what we achieved.
One of my favourite examples of such a blog was 52 Reflect3 (now integrated into its successor The Improbable Blog). For 52 consecutive weeks my partner‘s brother Robin
blogged about adventures that took him out of his home in London and it was amazing. The project’s finished, but a blog was absolutely the right medium for it because now it’s got a
“forever home” on the Web (imagine if he’d posted instead to Twitter, only for that platform to turn into a flaming turd).
I don’t often shill for my employer, but I genuinely believe that the free tier on WordPress.com is an excellent
way to give a forever home to your short-term blog4.
Did you know that you can type new.blog (or blog.new; both work!) into your browser to start one?
What are you going to write about?
Footnotes
1This blog is, of course, an example of a long-term blog. It’s been going in
some form or another for over half my life, and I don’t see that changing. But it’s not the only kind of blog.
2 Personally, I really love the serendipity of asking a web search engine for the solution
to a problem and finding a result that turns out to be something that I myself wrote, long ago!
4 One of my favourite features of WordPress.com is the fact that it’s built atop the
world’s most-popular blogging software and you can export all your data at any time, so there’s absolutely no lock-in: if you want to migrate to a competitor or even host your own
blog, it’s really easy to do so!
Last night I had a nightmare about Dungeons & Dragons. Specifically, about the group I DM for on alternate Fridays.
In their last session the
party – somewhat uncharacteristically – latched onto a new primary plot hook rightaway. Instead of rushing off onto some random side quest threw themselves directly into this new
mission.
This effectively kicked off a new chapter of their story, so I’ve been doing some prep-work this last week or so. Y’know: making battlemaps, stocking treasure chests with mysterious and
powerful magical artefacts, and inventing a plethora of characters for the party to either befriend or kill (or, knowing this party: both).
Anyway: in the dream, I sat down to complete the prep-work I want to get done before this week’s play session. I re-checked my notes about what the adventurers had gotten up to
last time around, and… panicked! I was wrong, they hadn’t thrown themselves off the side of a city floating above the first layer of Hell at all! I’d mis-remembered completely
and they’d actually just ventured into a haunted dungeon. I’d been preparing all the wrong things and now there wasn’t time to correct my mistakes!
This is, of course, an example of the “didn’t prepare for the test” trope of dreams. Clearly I’m still feeling underprepared for this week’s game! But probably a bigger reason for the
dream, and remembering it, was that I’ve had a cold and kept waking up to cough.
I really love Dungeondraft, an RPG battle map generator. It’s got great compatibility with
online platforms like Foundry VTT and Roll20, but if you’re looking to make maps for tabletop play,
there’s a few tips I can share:
Planning and designing
Dungeondraft has (or can be extended with) features to support light levels and shadow-casting obstructions, openable doors and windows, line-of sight etc… great to have when you’re
building for Internet-enabled tabletops, but pointless when you’re planning to print out your map! Instead:
Think about scale: I’m printing to A4 sheets and using inch-size squares, so every 11 x 8 squares equates to one sheet of paper. Knowing this, I can multiply-up to a
whole number of sheets of paper and this informs my decisions about how to best make use of the maps (and what will and won’t fit on my dining table!).
Focus on legibility: Your printer probably won’t have the same kind of resolution as your screen, and your players can’t “zoom in” to get details. Play with the grid
styles (under Map Settings) to find what works best for you, and try not to clash with your floor patterns. If you’re printing in monochrome, use the “Printer-Friendly” camera filter
(also under Map Settings, or in the Export Options dialog) to convert to gorgeous line-art. Make sure critical elements have sufficient contrast that they’ll stand out when printed or
your players might walk right over that chest, campfire, or bookshelf.
Think about exposure: You don’t get digital “fog of war” on the tabletop! Think about how you’re going to reveal the map to your players: plan to print in multiple
sections to put together, jigsaw style, or have card to “cover” bits of the map. Think about how the tool can help you here: e.g. if you’ve got multiple buildings the players can
explore, use a higher “level” or roof layer to put roofs on your buildings, then print the relevant parts of that level separately: now you’ve got a thematic cover-up that you can
remove to show the insides of the building. Go the other way around for secret doors: print the empty wall on your main map (so players can’t infer the location of the secret door by
the inclusion of a cover-up) and the secret door/passage on the overlay, so you can stick it onto the map when they find it.
Printing it out
There’s no “print” option in Dungeondraft, so – especially if your map spans multiple “pages” – you’ll need a multi-step process to printing it out. With a little practice, it’s not too
hard or time-consuming, though:
Export your map (level by level) from Dungeondraft as PNG files. The default settings are fine, but pay attention to the
“Overlay level” setting if you’re using smart or complex cover-ups as described above.
To easily spread your map across multiple pages, you’ll need to convert it to a PDF. I’m using Gimp to do this. Simply open the PNG in Gimp, make any post-processing/last minute changes that you couldn’t manage in Dungeondraft, then click File >
Export As… and change the filename to have a .pdf extension. You could print directly from Gimp, but in my experience PDF reader software does a much better job at multi-page printing.
Open your PDF in an appropriate reader application with good print management. I’m using Foxit, which is… okay? Print it, selecting “tile large pages” to tell it to print across multiple sheets. Assuming you’ve produced a map an appropriate size
for your printer’s margins, your preview should be perfect. If not, you can get away with reducing the zoom level by up to a percent or two without causing trouble for your miniatures.
If you’d like the page breaks to occur at specific places (for exposure/reveal reasons), go back to Gimp and pad one side of the image by increasing the canvas size.
Check the level of “overlap” specified: I like to keep mine low and use the print margins as the overlapping part of my maps when I tape them together, but you’ll want to see how your
printer behaves and adapt accordingly.
If you’re sticking together multiple pages to make a single large map, trim off the bottom and right margins of each page: if you printed with cut marks, this is easy enough even
without a guillotine. Then tape them together on the underside, taking care to line-up the features on the map (it’s not just your players who’ll appreciate a good, visible grid: it’s
useful when lining-up your printouts to stick, too!).
I keep my maps rolled-up in a box. If you do this too, just be ready with some paperweights to keep the edges from curling when you unfurl them across your gaming table. Or cut into
separate rooms and mount to stiff card for that “jigsaw” effect! Whatever works best for you!
Different games in the same style (absurdle plays adversarially like my cheating hangman
game, crosswordle involves reverse-engineering a wordle colour grid into a crossword, heardle
is like Wordle but sounding out words using the IPA…)
But you know what hasn’t been seen before today? A Wordle clone where you have to guess a creature from the Dungeons & Dragons (5e) Monster Manual by putting numeric values into a
character sheet (STR, DEX, CON, INT, WIS, CHA):
What are you waiting for: go give DNDle a try (I pronounce it “dindle”, but you can pronounce it however you like). A new monster
appears at 10:00 UTC each day.
And because it’s me, of course it’s open source and works offline.
The boring techy bit
Like Wordle, everything happens in your browser: this is a “backendless” web application.
I’ve used ReefJS for state management, because I wanted something I could throw together quickly but I didn’t want to drown myself (or my players)
in a heavyweight monster library. If you’ve not used Reef before, you should give it a go: it’s basically like React but a tenth of the footprint.
A cache-first/background-updating service worker means that it can run completely offline: you can install it to your homescreen in the
same way as Wordle, but once you’ve visited it once it can work indefinitely even if you never go online again.
I don’t like to use a buildchain that’s any more-complicated than is absolutely necessary, so the only development dependency is rollup. It
resolves my import statements and bundles a single JS file for the browser.
Following the success of our last game of Dialect the previous month and once again in a one-week hiatus of our usual Friday
Dungeons & Dragons game, I hosted a second remote game of this strange “soft” RPG with linguistics and improv drama elements.
Thieves’ Cant
Our backdrop to this story was Portsmouth in 1834, where we were part of a group – the Gunwharf Ants – who worked as stevedores and made our living (on top of the abysmal wages for
manual handling) through the criminal pursuit of “skimming a little off the top” of the bulk-break cargo we moved between ships and onto and off the canal. These stolen goods would be
hidden in the basement of nearby pub The Duke of Wellington until they could be safely fenced, and this often-lucrative enterprise made us the envy of many of the docklands’ other
criminal gangs.
I played Katie – “Kegs” to her friends – the proprietor of the Duke (since her husband’s death) and matriarch of the group. I was joined by Nuek (Alec), a Scandinavian friend with a wealth of criminal experience, John “Tuck” Crawford (Matt), adoptee of the gang and our aspiring quartermaster, and
“Yellow” Mathias Hammond (Simon), a navy deserter who consistently delivers better than he expects to.
While each of us had our stories and some beautiful and hilarious moments, I felt that we all quickly converged on the idea that the principal storyline in our isolation was that of
young Tuck. The first act was dominated by his efforts to proof himself to the gang, and – with a little snuff – shake off his reputation as the “kid” of the group and
gain acceptance amongst his peers. His chance to prove himself with a caper aboard the Queen Anne went proper merry though after she turned up tin-ful and he found
himself kept in a second-place position for years longer. Tuck – and Yellow – got proofed eventually, but the extra time spent living hand-to-mouth might have been what first
planted the seed of charity in the young man’s head, and kept most of his numbers out of his pocket and into those of the families he supported in the St. Stevens area.
The second act turned political, as Spiky Dave, leader of the competing gang The Barbados Boys, based over Gosport way, offered a truce between the two rivals in exchange for sharing
the manpower – and profits – of a big job against a ship from South Africa… with a case of diamonds aboard. Disagreements over the deal undermined Kegs’ authority over the Ants, but
despite their March it went ahead anyway and the job was a success. Except… Spiky Dave kept more than his share of the loot, and agreed to share what was promised only in
exchange for the surrender of the Ants and their territory to his gang’s rulership.
We returned to interpersonal drama in the third act as Katie – tired of the gang wars and feeling her age – took perhaps more than her fair share of the barrel (the gang’s
shared social care fund) and bought herself clearance to leave aboard a ship to a beachside retirement in Jamaica. She gave up her stake in the future of the gang and
shrugged off their challenges in exchange for a quiet life, leaving Nuek as the senior remaining leader of the group… but Tuck the owner of the Duke of Wellington. The gang split into
those that integrated with their rivals and those that went their separate ways… and their curious pidgin dissolved with them. Well, except for a few terms which hung on in dockside
gang chatter, screeched amongst the gulls of Portsmouth without knowing their significance, for years to come.
Playing Out
Despite being fundamentally the same game and a similar setting to when we played The Outpost the previous month, this game felt very different. Dialect is
versatile enough that it can be used to write… adventures, coming-of-age tales, rags-to-riches stories, a comedies, horror, romance… and unless the tone is explicitly set out at the
start then it’ll (hopefully) settle somewhere mutually-acceptable to all of the players. But with a new game, new setting, and new players, it’s inevitable that a different kind of
story will be told.
But more than that, the backdrop itself impacted on the tale we wove. On Mars, we were physically isolated from the rest of humankind and living in an environment in which the
necessities of a new lifestyle and society necessitates new language. But the isolation of criminal gangs in Portsmouth docklands in the late Georgian era is a very different
kind: it’s a partial isolation, imposed (where it is) by its members and to a lesser extent by the society around them. Which meant that while their language was still a defining aspect
of their isolation, it also felt more-artificial; deliberately so, because those who developed it did so specifically in order to communicate surreptitiously… and, we
discovered, to encode their group’s identity into their pidgin.
While our first game of Dialect felt like the language lead the story, this second game felt more like the language and the story co-evolved but were mostly unrelated. That’s
not necessarily a problem, and I think we all had fun, but it wasn’t what we expected. I’m glad this wasn’t our first experience of Dialect, because if it were I think
it might have tainted our understanding of what the game can be.
As with The Outpost, we found that some of the concepts we came up with didn’t see much use: on Mars, the concept of fibs was rooted in a history of of how our medical
records were linked to one another (for e.g. transplant compatibility), but aside from our shared understanding of the background of the word this storyline didn’t really come up.
Similarly, in Thieves Cant’ we developed a background about the (vegan!) roots of our gang’s ethics, but it barely got used as more than conversational flavour. In both cases
I’ve wondered, after the fact, whether a “flashback” scene framed from one of our prompts might have helped solidify the concept. But I’m also not sure whether or not such a thing would
be necessary. We seemed to collectively latch onto a story hook – this time around, centred around Matt’s character John Crawford’s life and our influences on it – and it played out
fine.
And hey; nobody died before the epilogue, this time!
I’m looking forward to another game next time we’re on a D&D break, or perhaps some other time.
Dialect could be described as a rules-light, GM-less (it has a “facilitator” role, but they have no more authority than any player on
anything), narrative-driven/storytelling roleplaying game based on the concept of isolated groups developing their own unique dialect and using the words they develop as a vehicle to
tell their stories.
This might not be the kind of RPG that everybody likes to play – if you like your rules more-structured, for example, or
you’re not a fan of “one-shot”/”beer and pretzels” gaming – but I was able to grab a subset of our usual roleplayers – Alec, Matt R, Penny, and
I – and have a game (with thanks to Google Meet for videoconferencing and Roll20 for the virtual tabletop: I’d have used Foundry but its card support is still pretty terrible!).
The Outpost
A game of Dialect begins with a backdrop – what other games might call a scenario or adventure – to set the scene. We opted for The Outpost, which put the four of us
among the first two thousand humans to colonise Mars, landing in 2045. With help from some prompts provided by the backdrop we expanded our situation in order to declare the “aspects”
that would underpin our story, and then expand on these to gain a shared understanding of our world and society:
Refugees from plague: Our expedition left Earth to escape from a series of devastating plagues that were ravaging the planet, to try to get a fresh start on another
world.
Hostile environment: Life on Mars is dominated by the ongoing struggle for sufficient food and water; we get by, but only thanks to ongoing effort and discipline and
we lack some industries that we haven’t been able to bootstrap in the five years we’ve been here (we had originally thought that others would follow).
Functionalist, duty-driven society: The combination of these two factors led us to form a society based on supporting its own needs; somewhat short of a caste system,
our culture is one of utilitarianism and unity.
It soon became apparent that communication with Earth had been severed, at least initially, from our end: radicals, seeing the successes of our new social and economic systems,
wanted to cement our differences by severing ties with the old world. And so our society lives in a hub-and-spoke cave system beneath the Martian desert, self-sustaining except for the
need to send rovers patrolling the surface to scout for and collect valuable surface minerals.
In this world, and prompted by our cards, we each developed a character. I was Jeramiah, the self-appointed “father” of the expedition and of this unusual new social order, who
remembers the last disasters and wars of old Earth and has revolutionary plans for a better world here on Mars, based on controlled growth and a planned economy. Alec played Sandy –
“Tyres” to their friends – a rover-driving explorer with one eye always on the horizon and fresh stories for the colony brought back from behind every new crater and mountain. Penny
played Susie, acting not only as the senior medic to the expedition but something more: sort-of the “mechanic” of our people-driven underground machine, working to keep alive the
genetic records we’d brought from Earth and keep them up-to-date as our society eventually grew, in order to prevent the same kinds of catastrophe happening here. “Picker” Ben was our
artist, for even a functionalist society needs somebody to record its stories, celebrate its accomplishments, and inspire its people. It’s possible that the existence of his position
was Jeramiah’s doing: the two share a respect for the stark, barren, undeveloped beauty of the Martian surface.
We developed our language using prompt cards, improvised dialogue, and the needs of our society. But the decades that followed brought great change. More probes began to land from
Earth, more sophisticated than the ones that had delivered us here. They brought automated terraforming equipment, great machines that began to transform Mars from a barren wasteland
into a place for humans to thrive. These changes fractured our society: there were those that saw opportunity in this change – a chance to go above ground and live in the sun, to expand
across the planet, to make easier the struggle of our day-to-day lives. But others saw it as a threat: to our way of life, which had been shaped by our challenging environment; to our
great social experiment, which could be ruined by the promise of an excessive lifestyle; to our independence, as these probes were clearly the harbingers of the long-promised second
wave from Earth.
Even as new colonies were founded, the Martians of the Hub (the true Martians, who’d been here for yams time, lived and defibed here, not these tanning desert-dwellers that
followed) resisted the change, but it was always going to be a losing battle. Jeramiah took his last breath in an environment suit atop a dusty Martian mountain a day’s drive from the
Hub, watching the last of the nearby deserts that was still untouched by the new green plants that had begun to spread across the surface. He was with his friend Sandy, for despite all
of the culture’s efforts to paint them as diametrically opposed leaders with different ideas of the future, they remained friends until the end. As the years went by and more and more
colonists arrived, Sandy left for Phobos, always looking for a new horizon to explore. Sick of the growing number of people who couldn’t understand his language or his art, Ben
pioneered an expedition to the far side of the planet where he lived alone, running a self-sustaining agri-home and exploring the hills until his dying day. We were never sure where
Susie ended up, but it wasn’t Mars: she’d talked about joining humanity’s next big jump, to the moons of Jupiter, so perhaps she’s out there on one of the colonies of Titan or Europa.
Maybe, low clicks, she’s even keeping our language alive out there.
Retrospective
The whole event was a lot of fun and I’m keen to repeat it, perhaps with a different group and a different backdrop. The usual folks know who they are, but if you’re not one of
those and you want in next time we play, drop me a message of some kind.
I’ve been watching the output that people machines around the Internet have been producing using GPT-3 (and its cousins), an AI model that can produce long-form “human-like”
text. Here’s some things I’ve enjoyed recently:
I played for a bit with AI Dungeon‘s (premium) Dragon engine, which came up with Dan and the
Spider’s Curse when used as a virtual DM/GM. I pitched an idea to Robin lately that one could run a vlog series based on AI Dungeon-generated adventures: coming up with a “scene”, performing it, publishing it, and taking
suggestions via the comments for the direction in which the adventure might go next (but leaving the AI to do the real
writing).
Today is Spaceship Day is a Plotagon-powered machinama based on a script written by Botnik‘s AI. So not technically GPT-3 if you’re being picky but still amusing to how and
what the AI‘s creative mind has come up with.
Language contains the map to a better world. Those that are most skilled at removing obstacles, misdirection, and lies from language, that reveal the maps that are hidden within, are
the guides that will lead us to happiness.
Yesterday, The Guardian published the op-ed piece A robot wrote this entire article.
Are you scared yet, human? It’s edited together from half a dozen or so essays produced by the AI from the same
starting prompt, but the editor insists that this took less time than the editing process on most human-authored op-eds. It’s good stuff. I found myself reminded of Nobody Knows You’re A Machine, a short story I wrote about eight years ago and was never entirely happy with but which I’ve put online in
order to allow you to see for yourself what I mean.
But my favourite so far must be GPT-3’s attempt to write its own version of Expert judgment on markers to
deter inadvertent human intrusion into the Waste Isolation Pilot Plant, which occasionally circulates the Internet retitled with its line This place is not a place of
honor…no highly esteemed deed is commemorated here… nothing valued is here. The original document was a report into how humans might mark a nuclear waste disposal site in order to
discourage deliberate or accidental tampering with the waste stored there: a massive challenge, given that the waste will remain dangerous for many thousands of years! The original
paper’s worth a read, of course, but mostly as a preface to reading a post by Janelle Shane (whose work I’ve mentioned before) about teaching GPT-3 to write nuclear waste site area denial strategies. It’s pretty special.
As effective conversational AI becomes increasingly accessible, I become increasingly convinced what we might eventually see
a sandwichware future, where it’s cheaper for an appliance developer to install an AI
into the device (to allow it to learn how to communicate with your other appliances, in a human language, just like you will) rather than rely on a static and universal underlying
computer protocol as an API. Time will tell.
Meanwhile: I promise that this post was written by a human!
The BEST THING I’ve seen on Twitter this week (month?) is Justin Alexander’s thread documenting “The Dungeon of Drezzar,” Peter Heeringa and Troy Wilhelmson’s spectacular multilevel
dungeon built into a series of dresser drawers.
…
Well now I feel like my DM isn’t trying hard enough. Move aside, Roll20!