The Biblyon Broadsheet

Gods & Monsters Fantasy Role-Playing

Beyond here lie dragons
Biblyon, Highland
Wednesday, November 1, 1989
Jerry Stratton, Ed.
An IP lawyer talks about role-playing and copyrights—Saturday, November 9th, 2019

“WotC has a history of taking advantage of gamers’ ignorance of contract and intellectual property law and lack of wealth when making similar demands, thus harming the gaming community and industry, so it’s time those issues are addressed.”

It’s been a long time since I wrote my series on gaming copyright and why, and what kind of, open source licenses are useful and what are merely backdoor attempts to bar people from doing what they’re legally entitled to do under copyright law. As I stated regularly, I am not a lawyer, just an interested amateur. Frylock, as his name might suggest to you if you’re up on your Shakespeare, is a lawyer. He’s just started a series on copyrightability in RPGs, specifically stat blocks, at Frylock’s Gaming & Geekery.

His inspiration is very similar to my initial inspiration for writing Gods & Monsters: a threat from Wizards of the Coast. His came directly, however; mine only came obliquely through Ryan Dancey on Usenet. Keep an eye on his series—the first installment is very informative—and keep an eye on whether there’s a legal battle at all, or WotC/Hasbro just ignores him.

House on Crane Hill at North Texas 2019—Wednesday, February 13th, 2019
Belle Grove through cypress

The sky is grey toward the sea. The water beats steadily against the high grass, and a low mist rolls across the waves toward you.

Tell me if you’ve heard this one before:

Recently, you have each been contacted by Dr. Jean deMontagne, some of you directly, some of you after a friend recommended you, to take a seaside vacation at Delarosa Manor, which the locals call Crane House, forty miles up the coast from Crosspoint between King’s Head and Jackson Village. You should set out on Monday, November 2, and thus arrive on November 3 or 4.

This is a working vacation. Dr. deMontagne asks that you search the house for a small, brass coffer once owned by Louis Merrikitt and marked with two strange symbols. He offers you ten shillings each to compensate you for that small task, and he offers another hundred for the coffer, should you find it. He tells you that the manor is yours for the month of November as you wish, although the actual task should take no more than a day or two.

House on Crane Hill is a haunted house adventure inspired not just by Shirley Jackson’s amazing story but also by her many imitators1, some good, some bad, and some horrorble. I have been fascinated by haunted house stories ever since I read the Hell House rip-off in Werewolf by Night back in the seventies—a comic I still read from time to time. These stories don’t just hint at a fundamental weakness in reality. They shove it down our throats. It took a long time for me to get around to reading the source for them all, but once I read The Haunting of Hill House I was hooked on Shirley Jackson, too.

Was table-top gaming inevitable?—Monday, October 22nd, 2018
Runequest cover

Today, Gods & Monsters in its public form turned 18. On October 22, 2000, I posted a link to “The Game” on asking for Blues Brothers-style constructive criticism. Eighteen, of course, is only significant in gaming terms or adulthood, and in the former case only for those games that use 3d6 for stats. Combined with a sad event from two weeks ago, it has me thinking again about role-playing history and how lucky we are to have had Dungeons & Dragons in particular and tabletop fantasy roleplaying in general.

The other event is that Greg Stafford died on October 12. He founded the Chaosium in 1975 to publish his fantasy board game. Through it he published, in 1978, the highly influential RuneQuest game, set in the highly influential Glorantha world, which used the same world that his earlier board game did.

It is hard for someone who wasn’t quite there—I started gaming in 1981—to describe just how influential Glorantha and RuneQuest was, the idea of basing the rules on the setting.

In his tribute to Stafford, Zenopus relates a fascinating and telling story about how Greg Stafford was introduced to D&D:

I used to work for Bergamot Brass Works, a belt buckle company out of Lake Geneva, WI after high school. Real hippy job. I'd take buckles, hitch hike around and sell them to shops, etc. After a while, though, I moved to California. My friend of the time remained there, selling buckles (we were called Buckle-itis).

Through various circumstances I'd decided to publish my first boardgame, White Bear & Red Moon, on my own. As I was finishing up work on it, I got a package in the mail from my old partner Jeff. His cover letter said, "I was picking up my catalogues from the printer the other day and there was this guy waiting for his stuff. I asked what it was, and he said it was a fantasy game. I said, 'Hey, my buddy in California is doing one too! Can I buy one from ya?'"

Of course the guy was happy to, and so Jeff sent me this strange little booklet called Dungeons & Dragons.

Command-line Die Square—Wednesday, June 27th, 2018
Skull d6

Is it any surprise that a die covered in skulls is biased?

Because Pythonista does not contain scipy, calculating chi-square values using it can have trouble on edge cases. This command-line script can run on data files created by the DieSquare mobile app, and uses scipy to make more reliable calculations.

Specify the DieSquare data file on the command line.

  • $ ~/bin/diesquare "Bronze d20.diesquare"
  • Degrees of freedom: 19.0 X-square: 20.6
  • p-value: 0.359317617197
  • d20 bias is unlikely.

You can also specify the die size and a file of tab-delimited or colon-delimited data. The file should contain two columns: the result, and how many of those results occurred.

The DieSquare file format is:

  • d6
  • 1: 3
  • 2: 16
  • 3: 9
  • 4: 8
  • 5: 6
  • 6: 18

That is, any line beginning with a lower-case “d” is assumed to be specifying the die size; any line with a number followed by a colon and space followed by a number is assumed to be a result. You can also put comments in by preceding the line with a pound symbol (#).

And as you might guess, this die is almost certainly biased.

  • $ ~/bin/diesquare "Skull d6.diesquare"
  • Degrees of freedom: 5.0 X-square: 17.0
  • p-value: 0.00449979697797
  • d6 bias is probable.

The code itself (Zip file, 1.6 KB) is very simple.

[toggle code]

  • #!/usr/bin/python
  • #
  • import argparse
  • import scipy.stats
  • parser = argparse.ArgumentParser(description='Calculate Chi Square p-value using DieSquare data files.')
  • parser.add_argument('--die', type=int, help='die size')
  • parser.add_argument('data', type=argparse.FileType('r'), nargs=1)
  • parser.add_argument('--verbose', action='store_true')
  • args = parser.parse_args()
  • class ChiSquare():
    • def __init__(self, die, rolls):
      • self.die = die
      • self.parseRolls(rolls)
    • def parseRolls(self, rolls):
      • self.rollCount = 0
      • self.rolls = {}
      • for roll in rolls:
        • if not roll:
          • continue
        • if roll.startswith('d'):
          • self.die = int(roll[1:])
          • continue
        • if roll.startswith('#'):
          • continue
        • if "\t" in roll:
          • separator = "\t"
      • if args.verbose:
        • print(self.rollCount)
        • print(self.rolls)
    • def calculate(self):
      • if args.verbose:
        • print '\n# ', self.die
      • expected = float(self.rollCount)/float(self.die)
      • freedom = float(self.die - 1)
      • observed = self.rolls.values()
      • expected = [expected]*self.die
      • chisquare, pvalue = scipy.stats.chisquare(observed, expected)
      • print "Degrees of freedom:", freedom, "X-square:", chisquare
      • print "p-value:", pvalue
  • calculator = ChiSquare(args.die,[0])
  • calculator.calculate()

Half of the code is just parsing the datafile; the actual calculation is a couple of lines using scipy:

  • observed = self.rolls.values()
  • expected = [expected]*self.die
  • chisquare, pvalue = scipy.stats.chisquare(observed, expected)

The variable “observed” is the list of observed result counts. The variable “expected” is the list of expected result counts. For example, rolling a d6 60 times, the expected result count is 10 for each result, so expected will equal “[10, 10, 10, 10, 10, 10]”. And observed will be the actual results; for example, in the above data the die face 1 was rolled three times, 2 sixteen times, 3 nine times, 4 eight times, 5 six times, and 6 eighteen times. This is the list “[3, 16, 9, 8, 6, 18]”. The script, of course, uses the lists it constructed by reading the datafile.

Surprise and initiative in Advanced Dungeons & Dragons—Wednesday, June 13th, 2018
Charles Marion Russell

Initiative, surprise, who knows?

Last weekend I ran an AD&D game at the North Texas RPG Convention, a run through Karl Merris’s Fell Pass from Dragon Magazine 32. Fortunately, I also ran a playtest with my local group, because I’ve forgotten a lot about how AD&D worked. Much of what I didn’t forget was wrong. I’m pretty sure we always used d10 for initiative, for example.

When I started using Gods & Monsters, I planned never to run AD&D again; preparing for this game I began to remember why. It’s not that the rules are overly complex; it’s that they’re explained in bits and pieces, scattered throughout the text, with strangely-ignored edge cases.

Take surprise, for example. Surprise is basically very easy. Roll a d6 for the entire group. If you roll a 1 or 2, the group is surprised, and that’s the number of segments they’re surprised. Individuals with high dexterity can adjust that up or down.

That some characters are surprised only on a 1 on d6 isn’t a big deal either, because the group uses their most advantageous member for the surprise roll. And that some creatures (and characters) have specific rules for when they cause surprise also works surprisingly simply, though it could have been worded better. When a group with special surprise rules meets a group with special not-surprised rules, the range needs to be converted to a modifier from the standard, and then applied to the die roll. It seems like it would have made more sense to have it be a modifier to begin with, but that’s D&D.

But no mention is made of characters who roll a percentile die to be surprised. If their most advantageous character is a Monk, and they roll 19 on d100, this means they’re surprised. It cannot possibly mean that they are surprised for 19 segments, however.

I chose to read the Monk surprise as basically a 1 in d4 chance, so that if the most advantageous party member is a Monk, the party will only be surprised for one segment.

Well-behaved deities seldom make history—Wednesday, June 6th, 2018

I was inspired a few weeks ago to make a Gods & Monsters t-shirt out of Doré’s engraving of Moses breaking the tablets of the law. After a minor issue with the first batch, they are ready. I have one in white and one in ash grey.

It looks nice enough that it inspired me to finally open the Zazzle store I started back when I first published Gods & Monsters back in 2000. This means you can also purchase an “I survived Illustrious Castle” with the completely esoteric symbol of Eliazu on the front. I made up those shirts for the first group to go through Illustrious Castle in its Gods & Monsters form. I also made up shirts that said “I died in Illustrious Castle”. I don’t know what happened to them.

This page should automatically update with the latest Zazzle products, should there be any more.

Well-behaved deities (ash)
Well-behaved deities seldom make history, a t-shirt in ash.
Well-behaved deities (white)
Well-behaved deities seldom make history. A t-shirt in white.
I survived Illustrious Castle t-shirt
From the time capsule, a never-before-released shirt from 2000 or so. I distributed these to the first players who went through Illustrious Castle (and survived).
DieSquare for iOS—Wednesday, May 16th, 2018
DieSquare chi-square test on d20

Well, the die is apparently okay. That means it’s intelligent and it hates me.

Ole Zorn’s Pythonista for iOS is an amazing mobile development environment. If you can do it in base Python, you can do it, inside a GUI, on your iPhone or iPad. This makes it a great tool for gamers who are also programmers.

My dice always seem to be conspiring against me, which is a big reason I’m interested in running chi-square tests. R is an amazing tool for doing so, but it isn’t an amazing tool for entering the data. Last week, after yet another accusation from my teammates that my die is clearly biased to roll low—in a D&D 5 game, where high is better—I started to think they might be right. The first time the accusation was made, I said, look, it’s just because the die knows I’m attacking. I’m going to roll it right now for no reason whatsoever, and the die will come up 20. It did. The die isn’t biased to roll low, it’s biased against me. But it just kept failing.

I thought I’d better double check. Because I am a typical superstitious gamer, I have different dice for different purposes, and this is in fact the first time I’ve used this die—I had it reserved for playing rather than gamemastering. It occurred to me that, since I wrote Are my dice random? in 2006, I have acquired both a great mobile device and a great development environment for it. Wouldn’t it be nice to be able to bring up a table of possible rolls, and tap on each possibility when it came up on the die so as to keep track of each count? That would make rolling through a chi-square test dead easy.

I wrote it this weekend in Pythonista. The basic idea is that you choose the die size, and then each possible die roll shows up in a table as a row. Tap the row to add one hit to that result. Slide to remove if you accidentally tapped the wrong row.1 Give the die a name if you want the results saved, and there is an icon to (a) share, for example, copy, the data or results, (b) trash the data and start over, (c) load previously-saved data. Data is automatically saved if you give the die a name. Once you hit a minimum of ten rolls per face on the die (with an absolute minimum of 50 rolls), it calculates the p-value for that data.

Combining damage dice into attack roll—Wednesday, April 18th, 2018

In Gods & Monsters, as in many role-playing games, the damage roll is completely separate from the attack roll. Dungeons and Dragons, historically, has had the same behavior: rolling a 20 is the same as rolling a 10, as long as both hit, with the caveat that a 1 always misses. The current edition, fifth edition, mixes things up a little by offering critical hits on a roll of 20, but a roll of 19 is still the same as any other roll.

This clearly goes against the grain for some players. You can see it in their eyes when they make a great attack roll and then roll a one or two for damage.

Because of this, I have occasionally considered making the damage roll somehow part of the attack roll, so that high attack rolls do more damage than low ones. The sticking point has always been that I’ve always thought about it in terms of the quality of the success, which would make such a rule more complex than it’s worth. It would also make it very difficult to damage opponents that were very difficult to hit, since the quality of success against an opponent that requires a 20 to hit, for example, will always be the minimum.

It occurred to me, though, that just using the raw attack roll wouldn’t be a big deal. While it’s true that, if you have to roll a 20 to hit and you’re doing, say, d8 damage, this would mean that you always do 8 points instead of 4.5, the real increase is from an average of .225 points per attack to .4 points per attack, since you’re almost never hitting anyway. Sure, it’s a big increase percentage-wise, but it really isn’t that big of an increase.

Using the raw attack roll makes the calculations much easier. There’s no adjustment for “how much did you make it by”. It removes agility, strength, and any situational modifiers from affecting damage unless you want them to, in which case just add it to the final damage.

Here’s how the common damage rolls in Gods & Monsters turn out in such a system:

Older posts