Tuesday, January 30, 2018
Sunday, January 28, 2018
Monday, January 22, 2018
The Holmes Edit History
The Lost Book of Holmes was written to be used with the 2nd and 3rd editions of the Holmes rulebook. Earlier editions have different monsters and wandering monster tables.
There are five versions of the Holmes rulebook.
The 1st printing cover is the only one with a F116-R product code in the upper right.
Only the 1st and 2nd printing covers have a "*T.M. Reg. app. for" notice in the upper right.
The 1st, 2nd, and 3rd printing covers have the lizardman logo; the 2nd and 3rd edition covers have the wizard logo.
The 2nd and 3rd editions have identical front covers.
The 1st, 2nd, and 3rd printings have blank back covers. The 2nd and 3rd printings have TSR product lists. Only the 2nd edition back cover product list includes the AD&D manuals. Only the 3rd edition back cover product list includes B2: The Keep on the Borderlands.
2nd edition: entry for Encumbrance is added.
2nd edition: the page numbers for all sections after Monsters are increased by 1.
2nd edition: entries for these monsters are added: Giant Ant, Giant Centipede, Giant Rats, Gnoll, Shrieker, Spider, Troglodyte.
Although early versions do not have the Gnoll entry, they mention that a kobold chieftain fights like a gnoll.
2nd edition: this text is removed from the Giant entry:
2nd edition: in the entry for Mummy the text "although it only does half-damage to them" is inserted in regards to damage from fire.
2nd edition: the entry for Nixie is removed.
2nd edition: this cross-reference is removed: "Werewolf, etc.—see Lycanthrope".
2nd edition: adds art for Harpy, Hydra, Manticore, and Skeleton.
2nd edition: removes art for Gray Ooze and Purple Worm.
There are five versions of the Holmes rulebook.
- 1st printing, 1977
- 2nd printing, January 1978
- 3rd printing, May 1978
- 2nd edition, November 1978
- 3rd edition, December 1979
Identifying the Versions
All of the versions, except for the 1st printing, identify themselves on the title page below the copyright notice. The 1st printing has no printing or edition information on the title page.The 1st printing cover is the only one with a F116-R product code in the upper right.
Only the 1st and 2nd printing covers have a "*T.M. Reg. app. for" notice in the upper right.
The 1st, 2nd, and 3rd printing covers have the lizardman logo; the 2nd and 3rd edition covers have the wizard logo.
The 2nd and 3rd editions have identical front covers.
The 1st, 2nd, and 3rd printings have blank back covers. The 2nd and 3rd printings have TSR product lists. Only the 2nd edition back cover product list includes the AD&D manuals. Only the 3rd edition back cover product list includes B2: The Keep on the Borderlands.
Text and Art Changes
Preface (p. 2)
2nd edition: the page number is removed.
Table of Contents (p. 4)
2nd edition: the page number for the Languages is corrected from 8 to 9.2nd edition: entry for Encumbrance is added.
2nd edition: the page numbers for all sections after Monsters are increased by 1.
Introduction (p. 5)
2nd printing: a reference to "hobbits" is replaced with "halflings". References to "hobbit" or "hobbits" are replaced in this manner by my count at 21 places in the book; subsequent places will not be noted.
See First Level Clerical Spells p. 17 for a reference to "hobbits" that is never replaced in any version.
See First Level Clerical Spells p. 17 for a reference to "hobbits" that is never replaced in any version.
3rd edition: the text "by rolling special polyhedral 20-sided dice" is emended to "by rolling special polyhedral dice".
Adjusting Ability Scores (p. 6)
2nd edition: this text about dwarves is deleted: "They are the only ones who can wield the +3 Magic War Hammer (described later)".
The +3 Magic War Hammer is not, in fact, described later in any version of the Holmes rulebook. It is described on p. 31 of OD&D Vol. 2 Monsters & Treasure.
Additional Character Classes (p. 7)
2nd printing: a reference to "hobbitish" is replaced with "halflingish".
Non-Player Characters (p. 8)
2nd edition: the text "Only the lowest level of character types can be hired" is emended to "Generally, only the lowest level of character types can be hired".
Character Alignment (p. 8)
2nd edition: the alignment chart is updated from the old chart on the left to the new chart on the right:
The old chart refers to apes, beholders, blue dragons, demons, and lammasus which are not described in any version of the Holmes rulebook.
Languages (p. 9)
2nd edition: this text is added: "Any languages should be selected before the character begins play".
Encumbrance (p. 9)
2nd edition: this item is removed from Malchor's list of equipment: "1 10' pole (right hand)".
Wandering Monster Table (p. 10)
The wandering monster table from the 1st printing contains monsters not described in the Monsters section:
These monsters were not described in this 1st printing: Giant Rats, Centipedes, Large Spiders, Gnolls, Giant Toads, Huge Spiders, Leprechauns, Troglodytes, Piercers, Shriekers, Giant Snakes, Giant Spiders, Giant Weasels, and Giant Lizards.
The 2nd printing updates the wandering monster table. Monsters not described in the Monsters section are removed:
Experience Points for Monsters Overcome (p. 11)
2nd edition: the value and bonus for a 2 + 1 hit dice monster, previously blank, are added. They are 25 and 10 respectively.
2nd edition: the text "For example, if a third level fighting man killed the first level orc" is emended to "For example, if a third level fighting man killed a first level orc".
2nd edition: the text "For example, if a third level fighting man killed the first level orc" is emended to "For example, if a third level fighting man killed a first level orc".
Fighting Men, Elves, Halflings and Dwarves (p. 11)
2nd edition: formerly, the "spells" column for cleric had the values "0", "1", and "2". These are emended to "0", "1 first level spell", and "2 first level spells".
Explanation of Thief's Abilities (p. 12)
2nd edition: adds a column for "climb sheer surfaces".
2nd edition: this text is added: "(Note: When a thief of any level strikes a blow from behind, a bonus of +4 to hit is given, and double damage is done.)"
2nd edition: this text is added: "(Note: When a thief of any level strikes a blow from behind, a bonus of +4 to hit is given, and double damage is done.)"
Clerical Abilities (p. 12)
2nd edition: the text "When a cleric of the first three levels confronts one or more of the undead, consult the table below" is emended to "When a cleric confronts one or more of the undead, consult the table below" .Monster Saving Throws (p. 14)
2nd edition: this text is removed: "(except zombies who are poisoned by salt)"
Magic User Spells (p. 14)
2nd edition: in the description for Enlargement, this text is added: "(example: a 6' man would become 9' tall)".Magic User Spells (p. 16)
2nd edition: in the description for Levitate, the text "Range: 20 feet × level of spell caster in 10's of feet" is emended to "Range: 20 feet × level of spell caster".
Clerical Spells (p. 17)
2nd edition: this text is added: "Second level spells are not available to clerics of below fourth level, and are included for use with non-player characters and scrolls."
The spell Cure Light Wounds references "hobbits". This reference was not updated to "halflings" in the 2nd printing or any later version.
Combat Melee (p. 19)
3rd edition: this text is removed: "A 20-sided die must be marked or colored so that one set of sides 0-9 is different from the other set. Count 0 as a 10. The marked set is then read as if 10 had been added to the roll (11-20), treating 0 as 10 or 20. This die is used for all combat resolution."
The removed text was redundant; there is already a description of how to mark a 20-sided die on p. 14.
Monsters (p. 22)
The 2nd edition replaces this text:
If the monster's alignment is given here, then there follows a brief description which should include any special powers and attributes of the creatures.
with this text:
If the monster's alignment is not given, it may be assumed to be an unintelligent beast that will attack anyone who comes near. "Attacks" means the number of blows, bites, etc. the creature can deliver in a single melee round. "Damage" gives the effect of these attacks. Then there follows a brief description which includes any special powers and attributes of the creature.The 2nd edition replaces this text:
A good guide to the amount of treasure any given monster should be guarding is given in the MONSTER & TREASURE ASSORTMENTS which are included in the game.with this text:
A good guide to the amount of treasure any given monster should be guarding is given in the MONSTER & TREASURE ASSORTMENTS (available from TSR or your retailer).
Monster List (p. 22-33/34)
2nd edition: this text is added: "Monsters hit dice are 8-sided".2nd edition: entries for these monsters are added: Giant Ant, Giant Centipede, Giant Rats, Gnoll, Shrieker, Spider, Troglodyte.
Although early versions do not have the Gnoll entry, they mention that a kobold chieftain fights like a gnoll.
2nd edition: this text is removed from the Giant entry:
Giants in castles usually have other monsters there—a hydra, wolves, bears or referee's choice. Giants encountered outside their lair carry 1000 to 6000 gold pieces as well as rocks for throwing in their capacious shoulder sack.2nd edition: in the entry for Horse the lines "Attack: 2 hooves, 1 bite" and "Damage: 1–6/hoof, 1–4/bite" are inserted.
2nd edition: in the entry for Mummy the text "although it only does half-damage to them" is inserted in regards to damage from fire.
2nd edition: the entry for Nixie is removed.
2nd edition: this cross-reference is removed: "Werewolf, etc.—see Lycanthrope".
2nd edition: adds art for Harpy, Hydra, Manticore, and Skeleton.
2nd edition: removes art for Gray Ooze and Purple Worm.
Base Treasure Values (p. 33/34)
2nd edition: this text is added: "50 CP = 10 SP = 2 EP = 1 GP = 1/5 PP".
2nd edition: this text is added: "All coins are roughly equal in size and weight, being approximately the circumference and thickness of a quarter and weighing about twice as much as a quarter."
A quarter weighs an eighth of an ounce, so the added text is inconsistent with the Encumbrance section on p. 9, where a gold piece weighs a tenth of a pound.
2nd edition: the list giving the value of each type of coin in gold pieces is removed.
2nd edition: in the random magical item generation chart, the potion "Speed" is renamed "Haste" so that it now matches its name in the description on the following page.
Explanation of Magical Items (p. 37/38)
The 2nd edition changes the Ring of Protection +1 entry from:
serves as plate armor +1, and adds +1 to all saving throws.to this:
adds +1 to armor class; i.e., a magic-user with no armor (armor class 9) would be treated as if he had armor class 8. Also, +1 is added to all saving throws."
Dungeon Mastering as a Fine Art (p. 38/39)
The 2nd edition replaces this text:
The geomorphic dungeon levels provided with this game
with this text:
The geomorphic dungeon levels (available from TSR or your retailer)
2nd edition: this text is added:
The Basic Set of DUNGEONS & DRAGONS includes the introductory module "In Search of the Unknown", which will be usable for initial adventuring as well as provide ideas for dungeon construction.
Illustration of Sample Floor Plan (p. 41/42)
The 2nd printing adds the text "START" under the stairs.
The 2nd edition adds add an arrow pointing north.
The 2nd edition adds add an arrow pointing north.
Sample Dungeon (p. 43/44)
The 2nd edition replaces the this text in room J:
An enormous spider lurks in the darkness of the roof, thirty-five feet above. He will drop on unwary adventurers. He is armor class 3 (plate mail), has 6 hit dice (31 hit points), and his bite causes 1-8 points of damage and is poisonous (-1 on saving throw dice because it is so strong).to read as follows:
A giant spider lurks in the darkness of the roof, thirty-five feet above. He will drop on unwary adventurers. He is armor class 3 (plate mail), has 4 + 4 hit dice (21 hit points), and his bite causes 2-8 points of damage and is poisonous.
The 2nd edition replaces the this text in room L describing a giant crab:
It strikes with its giant claws one at a time as fast as a man.
to read as follows:
It strikes with its giant claws one at a time as fast as a man, doing 2-12 points of damage per hit.
Using the Dice (p. 45/46)
The 2nd edition adds this text:
In some places the reader will note an abbreviated notation for the type of die has been used. The first number is the number of dice used, the letter "d" appears, and the last number is the type dice used. Thus, "2d4" would mean that two 4-sided dice would be thrown (or one 4-sided dice would be thrown twice); "3d12" would indicate that three 12-sided dice are used, and so on.
The 3rd edition replaces the text "By using the assortment of 4-, 6-, 8-, 12-, and 20-sided dice" with "By using the assortment of 4-, 6-, 8-, 10-, 12-, and 20-sided dice".
The 3rd edition replaces this text:
For example: to generate 1-20, roll the 20-sided die and 6-sided die, and if the 6-sided die comes up 1-3, the number shown on the 20-sider is 1-10 (1-0), and if the 6-sider comes up 4-6, add 10 to the 20-sided die and its numbers become 11-20 (1-0). This application is used with the 12-sided die to get 1-24.with this:
For example: to generate 1-24, roll the 12-sided die and 6-sided die, and if the 6-sided die comes up 1-3, the number shown on the 12-sider is 1-12, and if the 6-sider comes up 4-6, added 12 to the 12-sided die and its numbers become 13-24.
About the Editor (p. 45/46)
This section is added in the 3rd printing.
Other Swords & Sorcery, Fantasy, and Science Fiction Titles from TSR (p. 45–46)
The entire section, a product list, is replaced by a Gen Con advertisement in the 2nd edition.
Thursday, January 18, 2018
Sunday, January 14, 2018
Friday, January 5, 2018
Monday, January 1, 2018
Sunday, December 31, 2017
Friday, December 29, 2017
Maximally Separated Points on a Sphere
One of the designs for a seven-sided die is a sphere truncated at 7 points as far apart from each other as possible. The die doesn't have opposite and parallel sides so there isn't a face for writing the result on. Still the technique is general and could be used to create dice with anywhere between 5 and 100 sides.
How do we find points as far apart as possible from each other? For most values of n the problem is hard. One approach is to sum the pairwise distances of the points and use gradient ascent to find a maximum. The objective function is not convex and has local maxima, but if you think a local maximum is better than nothing, here is code find one. The code uses Euclidean distance, though I wonder if using the angle between two points would work better. The partial derivatives are with respect to the θ and φ of spherical coordinates since we are constrained to the surface of the sphere.
Running the code:
The output contains the coordinates of the 7 points found and the value of the objective function at those points. A convex polytope can be defined in polymake using a set of points—in which case it finds the convex hull—or a set of half spaces—in which case it finds the intersection. Polymake requires homogeneous coordinates.
Polymake tells us the polyhedron has ten faces. This website says there are 5 topologically different polyhedra with 7 vertices and 10 faces. Since polymake tells us which vertices belong to which faces, we can use Blender to visualize the polyhedron.
Following the instructions above yields this picture:
Our polyhedron is topologically equivalent to a pentagonal bipyramid. The figure is the dual of the 7-sided polyhedron we would like to make a die out of. The dual can be found in polymake using polarize:
Polymake lists the vertices in a face in ascending order. Blender requires that we list the vertices in the order they occur as we travel around the polygon—otherwise the wireframe will have extra edges in the faces. Trial and error was used to find the correct order:
The polyhedron is topologically equivalent to a pentagonal prism.
How do we find points as far apart as possible from each other? For most values of n the problem is hard. One approach is to sum the pairwise distances of the points and use gradient ascent to find a maximum. The objective function is not convex and has local maxima, but if you think a local maximum is better than nothing, here is code find one. The code uses Euclidean distance, though I wonder if using the angle between two points would work better. The partial derivatives are with respect to the θ and φ of spherical coordinates since we are constrained to the surface of the sphere.
Running the code:
$ ./maximally_separated_points_on_sphere.py -n 7
(0.139, -0.576, -0.805)
(-0.191, 0.963, 0.191)
(-0.608, 0.338, -0.718)
(0.173, 0.142, 0.975)
(0.884, 0.38, -0.273)
(-0.855, -0.418, 0.308)
(0.458, -0.828, 0.322)
31.530926
The output contains the coordinates of the 7 points found and the value of the objective function at those points. A convex polytope can be defined in polymake using a set of points—in which case it finds the convex hull—or a set of half spaces—in which case it finds the intersection. Polymake requires homogeneous coordinates.
$ polymake
polytope > $p = new Polytope(POINTS =>
[[1, 0.139, -0.576, -0.805],
[1, -0.191, 0.963, 0.191],
[1, -0.608, 0.338, -0.718],
[1, 0.173, 0.142, 0.975],
[1, 0.884, 0.38, -0.273],
[1, -0.855, -0.418, 0.308],
[1, 0.458, -0.828, 0.322]]);
polytope > print $p->VERTICES_IN_FACETS;
{1 2 5}
{0 2 5}
{0 2 4}
{1 3 5}
{1 3 4}
{1 2 4}
{3 4 6}
{3 5 6}
{0 5 6}
{0 4 6}
Polymake tells us the polyhedron has ten faces. This website says there are 5 topologically different polyhedra with 7 vertices and 10 faces. Since polymake tells us which vertices belong to which faces, we can use Blender to visualize the polyhedron.
Following the instructions above yields this picture:
Our polyhedron is topologically equivalent to a pentagonal bipyramid. The figure is the dual of the 7-sided polyhedron we would like to make a die out of. The dual can be found in polymake using polarize:
polytope > $dual = polarize($p);
polytope > print convert_to<Float>(
dehomogenize($dual->VERTICES));
1.455537382 -0.7147719412 -0.1762669144
1.083809015 0.804520317 0.8537214292
-0.4415750134 -0.506366941 1.52830861
1.059871785 -0.6049596605 -1.125593382
-0.8893855532 -1.073711966 -0.7114555899
-0.2646212759 -1.291044842 1.009076016
-1.423698754 0.1131924589 -0.7895112253
0.2939932965 0.9002156047 -1.208914314
0.4841557507 1.557693116 0.211262627
-1.274046573 0.7045065006 0.518151282
polytope > print $dual->VERTICES_IN_FACETS;
{1 2 8 9}
{0 3 4 5}
{0 1 2 5}
{3 4 6 7}
{2 4 5 6 9}
{0 1 3 7 8}
{6 7 8 9}
Polymake lists the vertices in a face in ascending order. Blender requires that we list the vertices in the order they occur as we travel around the polygon—otherwise the wireframe will have extra edges in the faces. Trial and error was used to find the correct order:
Tuesday, December 26, 2017
Polyhedral Duality
Blender is 3D modeling software. It has an operation called bevel which can be used to convert a cube into an octahedron. When you are in Edit Mode, type w to bring up the Specials menu.
The operation converts each face of the cube into a vertex and each vertex of the cube into a face. Edges become edges, although the orientation of each edge rotates by 90º.
The f-vector of a polyhedron is a triple containing the number of vertices, edges, and faces. The f-vector of the cube is (8, 12, 6) and the f-vector of the octahedron is (6, 12, 8). If a polyhedron can be converted to another polyhedron by the bevel operation, the f-vector of the first must be the same as the f-vector of the second reversed.
An icosahedron has f-vector (12, 30, 20) . The bevel operation converts it to a dodecahedron with f-vector (20, 30, 12).
The face lattice of a polyhedron shows which edges belong to which faces, and which vertices belong to which edges. Since the cube and the octahedrons are dual polyhedra, the face lattice of an octahedron
is an upside down version of the face lattice of a cube.
For the labels to agree we must map the faces, edges, and vertices of the first lattice to the vertices, edges, and faces second respectively. The mapping should match the way the bevel operation maps them.
The bevel operation converts a tetrahedron into tetrahedron. The f-vector of the tetrahedron is a palindrome: (4, 6, 4). The tetrahedron is said to be self-dual.
One last note about duality. Dual polyhedra have isomorphic symmetry groups and isomorphic alternating groups.
The operation converts each face of the cube into a vertex and each vertex of the cube into a face. Edges become edges, although the orientation of each edge rotates by 90º.
The f-vector of a polyhedron is a triple containing the number of vertices, edges, and faces. The f-vector of the cube is (8, 12, 6) and the f-vector of the octahedron is (6, 12, 8). If a polyhedron can be converted to another polyhedron by the bevel operation, the f-vector of the first must be the same as the f-vector of the second reversed.
An icosahedron has f-vector (12, 30, 20) . The bevel operation converts it to a dodecahedron with f-vector (20, 30, 12).
The face lattice of a polyhedron shows which edges belong to which faces, and which vertices belong to which edges. Since the cube and the octahedrons are dual polyhedra, the face lattice of an octahedron
is an upside down version of the face lattice of a cube.
For the labels to agree we must map the faces, edges, and vertices of the first lattice to the vertices, edges, and faces second respectively. The mapping should match the way the bevel operation maps them.
The bevel operation converts a tetrahedron into tetrahedron. The f-vector of the tetrahedron is a palindrome: (4, 6, 4). The tetrahedron is said to be self-dual.
One last note about duality. Dual polyhedra have isomorphic symmetry groups and isomorphic alternating groups.
Sunday, December 24, 2017
Monday, December 18, 2017
Sunday, December 10, 2017
How to Draw Platonic Solids
I've been held back from posting more about polyhedra by my inability to create the necessary graphics. A picture is worth a thousand words, and if it's a picture of a polyhedron use 3D modeling software to create it. I used Blender to create the above image. I made a screencast of how I did it:
Sunday, November 26, 2017
Thursday, November 23, 2017
Difficult Rolls
Here are the dice I keep behind the screen:
The d20 can simulate a d4 by taking the result modulo 4, treating 0 as 4.
The d20 can simulate a d8 or a d12 with the help of a d6. Take the result of the d20 modulo 4, treating 0 as 4. Roll a d6 and add 4 if the result is 4, 5, or 6. Or add 4 if the result is 3, 4 and add 8 if the result is 5, 6.
This DM is a minimalist and only uses a single d6 and a d20 when running a game. Perhaps he uses the techniques above. Maybe he runs an old version of the game where everyone has d6 hit dice and does d6 damage. The DM could ask a player to make a roll.
If we are using the above dice, it is sensible to stick to dice rolls in the ranges 1–4, 1–6, 1–8, 1–10, 1–12, 1–20, and 1–100. But if we could generate an integer randomly from any range, then any list could be used as a random generation table.
The Holmes rulebook lists 14 1st level magic-user spells, 18 2nd level magic-user spells, and 18 3rd level magic-user spells. What if we need to determine a spell randomly, say because a scroll is found or an NPC spell caster is encountered? Small wonder the spell lists were truncated to 12 per level in the Moldvay rulebook.
To get a d2 or a d3 we can use the d6 and apply integer division and rounding up. When rolling a d6 with pips I like to use ⌈d6/3⌉ or ⌈d6/2⌉.
For a d5, I use d20 % 5, replacing 0 with 5.
As discussed previously one could use modular arithmetic to get the d2 and d3 rolls. Why the inconsistency? I prefer modular arithmetic nowadays, but the group has a tradition going back to childhood for how a d2 or d3 is rolled.
Back when icosahedral dice were numbered 0 to 9 twice, grognards would roll them with a helper d6 to determine whether the result was in the range 1–10 or 11–20. Specifically the formula d10 × (d2 – 1) × 10 was used. The technique generalizes:
d18: d6 × (d3 – 1) × 6
d24: d12 × (d2 – 1) × 12
d30: d10 × (d3 – 1) × 10
d36: d12 × (d3 – 1) × 12
d40: d20 × (d2 – 1) × 20
d60: d20 × (d3 – 1) × 20
I use a d6 with pips as the helper. When rolling a d18 I combine it with the d6 with digits.
A truly uniform result for most of the other ranges is not possible, at least not with a single roll. We use the "if high, then low" technique to get a near uniform approximation. To get a d7, one rolls a d8 and a d6. If the d8 is too high the result on the d6 is used. In general we find the next higher and next lower ranges that we can roll exactly and use those.
To get a d17 a d16 and a d20 are rolled. I don't use a d16 and a d18 because both need a helper d6; there would be ambiguity if the dice are rolled at the same time.
Gaming has gotten by with uniform (e.g. d20) and normal (e.g. 3d6) distributions. Both of these are symmetric distributions with expected values at the center of the distribution.
When world-building, an asymmetric distribution in which small values are more likely than large values is desirable. We should use a distribution whose probabilities fall in this way to determine the level of an NPC if we want low-level characters to be common and high-level characters to be rare. It could also be used to determine the number of humans in a settlement or the number of orcs in a war party, since populations tend to follow a Pareto distribution.
I know about exploding rolls and penetrating rolls, but they are close to uniform in practice.
One gets a geometric distribution by rolling repeatedly until a certain value is obtained and counting the number of rolls that is needed. Although strictly decreasing, it is a slow method which requires a lot of re-rolling.
Update: I've found a better way.
This interview mentions a promising technique, which is to roll the same dice twice and apply the absolute value function to the difference:
Because of the zero value, this isn't a perfect falling distribution, but if one is willing to re-roll until the result is not zero a falling distribution is achieved.
An exponential distribution was used with the parameter chosen so 12 is the highest possible value. The distribution looks like this:
Making Do With a d20 and a d6
In a pinch I could get by with the two d20s and three d6s with pips. The d20s can be used for a percentile roll with the convention that pink is tens and white is ones.The d20 can simulate a d4 by taking the result modulo 4, treating 0 as 4.
The d20 can simulate a d8 or a d12 with the help of a d6. Take the result of the d20 modulo 4, treating 0 as 4. Roll a d6 and add 4 if the result is 4, 5, or 6. Or add 4 if the result is 3, 4 and add 8 if the result is 5, 6.
This DM is a minimalist and only uses a single d6 and a d20 when running a game. Perhaps he uses the techniques above. Maybe he runs an old version of the game where everyone has d6 hit dice and does d6 damage. The DM could ask a player to make a roll.
Discrete Uniform Distributions
How many discrete uniform distribution are needed?If we are using the above dice, it is sensible to stick to dice rolls in the ranges 1–4, 1–6, 1–8, 1–10, 1–12, 1–20, and 1–100. But if we could generate an integer randomly from any range, then any list could be used as a random generation table.
The Holmes rulebook lists 14 1st level magic-user spells, 18 2nd level magic-user spells, and 18 3rd level magic-user spells. What if we need to determine a spell randomly, say because a scroll is found or an NPC spell caster is encountered? Small wonder the spell lists were truncated to 12 per level in the Moldvay rulebook.
Integer Division and Round Up or Modular Arithmetic
Two techniques for getting a smaller roll from a larger rollTo get a d2 or a d3 we can use the d6 and apply integer division and rounding up. When rolling a d6 with pips I like to use ⌈d6/3⌉ or ⌈d6/2⌉.
For a d5, I use d20 % 5, replacing 0 with 5.
As discussed previously one could use modular arithmetic to get the d2 and d3 rolls. Why the inconsistency? I prefer modular arithmetic nowadays, but the group has a tradition going back to childhood for how a d2 or d3 is rolled.
d6 Helper
Getting a larger roll from two smaller rollsBack when icosahedral dice were numbered 0 to 9 twice, grognards would roll them with a helper d6 to determine whether the result was in the range 1–10 or 11–20. Specifically the formula d10 × (d2 – 1) × 10 was used. The technique generalizes:
d15: d5 + (d3 – 1) × 5
d16: d8 + (d2 – 1) × 8d18: d6 × (d3 – 1) × 6
d24: d12 × (d2 – 1) × 12
d30: d10 × (d3 – 1) × 10
d36: d12 × (d3 – 1) × 12
d40: d20 × (d2 – 1) × 20
d60: d20 × (d3 – 1) × 20
I use a d6 with pips as the helper. When rolling a d18 I combine it with the d6 with digits.
If High Then Low
Interpolating a roll in between a smaller and a larger rollA truly uniform result for most of the other ranges is not possible, at least not with a single roll. We use the "if high, then low" technique to get a near uniform approximation. To get a d7, one rolls a d8 and a d6. If the d8 is too high the result on the d6 is used. In general we find the next higher and next lower ranges that we can roll exactly and use those.
To get a d17 a d16 and a d20 are rolled. I don't use a d16 and a d18 because both need a helper d6; there would be ambiguity if the dice are rolled at the same time.
Falling Distributions
Motiving the falling distributionGaming has gotten by with uniform (e.g. d20) and normal (e.g. 3d6) distributions. Both of these are symmetric distributions with expected values at the center of the distribution.
When world-building, an asymmetric distribution in which small values are more likely than large values is desirable. We should use a distribution whose probabilities fall in this way to determine the level of an NPC if we want low-level characters to be common and high-level characters to be rare. It could also be used to determine the number of humans in a settlement or the number of orcs in a war party, since populations tend to follow a Pareto distribution.
I know about exploding rolls and penetrating rolls, but they are close to uniform in practice.
One gets a geometric distribution by rolling repeatedly until a certain value is obtained and counting the number of rolls that is needed. Although strictly decreasing, it is a slow method which requires a lot of re-rolling.
Update: I've found a better way.
Absolute Value of the Difference of Two Rolls
A linear falling distribution with a single roll of two dice—almostThis interview mentions a promising technique, which is to roll the same dice twice and apply the absolute value function to the difference:
Because of the zero value, this isn't a perfect falling distribution, but if one is willing to re-roll until the result is not zero a falling distribution is achieved.
Tables
Falling distributions and in general any distribution using percentiles
Here is code for generating a d100 table which approximates an arbitrary distribution. It was used to make this table:
Here is code for generating a d100 table which approximates an arbitrary distribution. It was used to make this table:
| d100 | level |
|---|---|
| 01-33 | 1 |
| 34-55 | 2 |
| 56-70 | 3 |
| 71-80 | 4 |
| 81-86 | 5 |
| 87-91 | 6 |
| 92-94 | 7 |
| 95-96 | 8 |
97
| 9 |
98
| 10 |
99
| 11 |
00
| 12 |
Tuesday, November 14, 2017
Sunday, November 12, 2017
Giant Hit Points
To get the hit points of a monster with a lot of hit dice, you have to roll the d8—or d6 if playing the old way—repeatedly and add them up.
This is similar to rolling fireball damage. An earlier post shows how to approximate the results of fireball damage using just two d6 rolls. The goal in the earlier post was to reduce the amount of calculation while preserving the original distribution.
The same could be done for hit dice. But do we want to preserve the original distribution? As noted in the previous post the result will usually be within 5 hit points of the mean. If a more uniform distribution is desired, we could replace an nd8 roll with an (n-1)×d8 + d8 roll.
Here are the distributions for a hill giant using 8d8 and 7×d8+d8:
A few values: 15, 22, 29, 36, 43, 50, and 57, are twice as likely as the others. If we were using 8×d8+d8 to roll hit points for a stone giant the distribution would be perfectly uniform.
When n is greater than 9, some values have a probability of zero. We could use an (n–2)×d8+2d8 roll so that all values are still possible, at least as long as n isn't greater than 17. Here is a comparison of using 15d8 and 13×d8+2d8 for storm giant hit points:
You might ask how hit points are distributed in the old modules. Let's take a look at the adult male hill giants in the steading:
Also see an earlier post for the distribution of goblin hit points in Little Keep on the Borderlands.
This is similar to rolling fireball damage. An earlier post shows how to approximate the results of fireball damage using just two d6 rolls. The goal in the earlier post was to reduce the amount of calculation while preserving the original distribution.
The same could be done for hit dice. But do we want to preserve the original distribution? As noted in the previous post the result will usually be within 5 hit points of the mean. If a more uniform distribution is desired, we could replace an nd8 roll with an (n-1)×d8 + d8 roll.
Here are the distributions for a hill giant using 8d8 and 7×d8+d8:
When n is greater than 9, some values have a probability of zero. We could use an (n–2)×d8+2d8 roll so that all values are still possible, at least as long as n isn't greater than 17. Here is a comparison of using 15d8 and 13×d8+2d8 for storm giant hit points:
You might ask how hit points are distributed in the old modules. Let's take a look at the adult male hill giants in the steading:
Also see an earlier post for the distribution of goblin hit points in Little Keep on the Borderlands.
Friday, November 10, 2017
Wednesday, November 8, 2017
Polyhedra
We make use of in-game puzzles. To prosper in the Athenopolis campaign, familiarity with a fair amount of polyhedra lore is necessary.
The five Platonic solids are the only convex regular polyhedra. Euclid seems to argue something to this effect in Book XIII, Proposition 18 of The Elements (c. 300 BCE). One translation of his claim is:
The polyhedron is edge-transitive if we can place any edge of the polyhedron to any inside angle of the case and it still fits. A consequence of being edge transitive is that every edge is the same length.
The polyhedron is vertex-transitive if we can place any vertex of the polyhedron to any corner of the case and it still fits. A consequence of being vertex transitive is that every vertex touches the same number of faces and edges.
Alternative names for face-transitive, edge-transitive, and vertex-transitive are isohedral, isotoxsal, and isogonal, respectively.
A polyhedron which is face, edge, and vertex-transitive is called a regular polyhedron.
The symmetric group allows for reflections as well as rotations. If the mirror image of a polyhedron also fits in its case, its symmetric group is twice the size of its alternating group.
The symmetry groups of the cube and octohedron are the same size. They are in fact isomorphic. The same is true of the dodecahedron and the icosahedron.
A polyhedron must have at least 4 vertices since any 3 points are contained in a plane.
We can rule out a polyhedron with 3 faces by noting that an edge must have exactly two faces. For the polyhedron to have a vertex on the edge, the third face must intersect the vertex but not the rest of the edge. It follows the polyhedron doesn't have any additional vertices, but this contradicts the fact that a polyhedron must have at least 4 vertices.
Each edge belongs to exactly two faces, but each face has three or more edges. The constraint 2E ≥ 3F follows, and because a polyhedron must have at least 4 faces it must also have at least 6 edges.
For every value of F ≥ 4 we can construct a polyhedron called a pyramid with F faces by starting with a (F – 1)-polygon and connecting each vertex with a point not in the plane of the polygon. The f-vector of the polyhedron is (F, 2F – 2, F). A tetrahedron is triangular pyramid and the Great Pyramid of Giza is a square pyramid. The formula for the f-vector shows that we have also constructed a polyhedron for every V ≥ 4.
A pyramid is right if the line connecting the center of the polygon to the off vertex is perpendicular to the plane of the polygon. Otherwise the pyramid is oblique.
Similarly a prism is a way of constructing a polyhedron for each F ≥ 5 with an f-vector of (2F – 4, 3F – 6, F). The cube is a square prism. Note that a decagon prism has an f-vector of (20, 30, 12) which is the same as the f-vector of a dodecahedron. The example shows that the f-vector of a polyhedron doesn't necessarily tell us the number of edges each face has.
A prism is right if the off-polygon faces are perpendicular to the polygon faces. Otherwise the prism is oblique.
There is a type of polyhedron called a bipyramid which yields an infinite family of face transitive polyhedra. The vertices of a regular n-polygon is connected to two vertices off the plane of the polygon on opposite sides. For the polyhedron to be face transitive, the vertices must be equidistant from and perpendicular to the center of the n-polygon. The figure is (n + 2, 3n, 2n) for n ≥ 3. The octohedron is a bipyramid.
The pentagonal bipyramid gives us a way to construct a 10-sided die, but most 10-sided dice are a different polyhedron called the pentagonal trapezohedron. The faces are quadrilaterals and in particular kites. The f-vector is (2n + 2, 4n, 2n) for n ≥ 3. The triangular trapezohedron has a f-vector of (8, 12, 6) which is the same as the cube.
The trapezohedron shows that face transitive does not imply edge transitive or vertex transitive. Bipyramids other than the square bipyramid or octahedron also show this.
The tetrahedron notwithstanding, for a polyhedron to be useful as a die we want each face to be parallel to a face on the opposite side so that there is always a clear "up". Insisting that a bipyramid or trapezohedron have parallel faces places a constraint on the distance of the off-polygon vertices from the polygon. Update: or so I thought, but in fact the trapezohedron or bipyramid can have parallel faces regardless of the ratio of off-polygon vertex distance to polygon side length. And it should be emphasized that for a bipyramid to have parallel faces the polygon must have an even number of sides. The trapezohedron does not have this limitation.
The Catalan solids are another set of 13 face transitive polyhedra. One of these, the rhombic triacontahedron is used for 30-sided dice.
Polytopes generalize polygons (in two dimensions) and polyhedra (in three dimensions) to n-dimensions.
A 4-polytope has 0-dimensional vertices, 1-dimensional edges, 2-dimensional faces, and 3-dimensional cells. The number of each can be represented by a f-vector with four elements: (V, E, F, C).
An n-polytope has n – 1 dimensional facets, n – 2 dimensional ridges, n – 3 dimensional peaks.
Sub-polytopes of any dimension can be called faces. If necessary to indicate the dimension they are called j-faces.
The extended f-vector of a polytope includes extra values on either end. One value, for dimension –1, represents the empty set. The other value, for dimension n, represents the polytope itself. These values are always 1. The cube has extended f-vector (1, 8, 12, 6, 1).
The formula for Euler's characteristic extends to convex polytopes and motivates our use of extended f-vectors. If fi is the number of faces of dimension t, then
$$ \sum_{i=–1}^n (–1)^i f_i = 0$$
At the top of the graph we put the entire polyhedron and at the bottom we put the empty set. This makes the graph a mathematical lattice. Every two elements in the lattice have a unique least element which contains both of them and a unique greatest element contained by both of them. The extended f-vector is the number of elements in each row of the lattice from the bottom up.
Two polyhedra are combinatorially equivalent if their face lattices are isomorphic. The cube and the triangular trapezohedron are examples of combinatorially equivalent polyhedra. The dodecagon prism and the dodecahedron are not combinatorially equivalent even though their f-vectors are the same.
A flag is a sequence of "faces" of an n-polytope of increasing dimension: F- 1, F0, F1, ..., Fn, where each face is contained in the face that follows it in the sequence. The F-1 face is the "empty face" and the Fn face is the entire n-polytype.
A regular polytope is one where the symmetry group of the polytope acts transitively on the flags. This implies that the polytope is face, edge, and vertex transitive.
Six-sided dice are often numbered with the constraint that opposite sides must add to 7. With this constraint there are only two ways to number a six-sided die. If you hold a six-sided die so that the sides for 1, 2, and 3 are showing, if the numbers increase in a counter-clockwise direction the die is said to be right-handed, which is the way Western dice are numbered.
Platonic Solids
- tetrahedron or triangular pyramid
- hexahedron or cube
- octahedron
- dodecahedron
- icosahedron
In the original edition of the game the colors of the dice were yellow, orange, green, blue, and white respectively.
How many vertices does an icosahedron have? You can pull out a die and try to count them, but it is better to observe that there 20 faces, and each has 3 vertices, for a total of 60 (vertex, face) pairs. However, each vertex is shared by 5 faces, so the number of vertices is 60 / 5 = 12.
A similar line of reasoning can be used to show the number of edges is 30.
In the Timaeus (c. 360 BCE), Plato associates the tetrahedron, octahedron, icosahedron, and cube with classical elements fire, air, water, and earth respectively. The dodecahedron is said to be the shape of the universe. Aristotle later associates the dodecahedron with the element aether.
A similar line of reasoning can be used to show the number of edges is 30.
In the Timaeus (c. 360 BCE), Plato associates the tetrahedron, octahedron, icosahedron, and cube with classical elements fire, air, water, and earth respectively. The dodecahedron is said to be the shape of the universe. Aristotle later associates the dodecahedron with the element aether.
The five Platonic solids are the only convex regular polyhedra. Euclid seems to argue something to this effect in Book XIII, Proposition 18 of The Elements (c. 300 BCE). One translation of his claim is:
No other figures, besides the five said figures, can be constructed which is contained by equilateral and equiangular figures equal to one another.
Face, Edge, and Vertex Transitive
Imagine we had a case for the model of a polyhedron that fit it snugly. The polyhedron is face-transitive if we can place any face of the polyhedron to any face of the case and it still fits. A consequence of being face transitive is that every face is the same shape and size.The polyhedron is edge-transitive if we can place any edge of the polyhedron to any inside angle of the case and it still fits. A consequence of being edge transitive is that every edge is the same length.
The polyhedron is vertex-transitive if we can place any vertex of the polyhedron to any corner of the case and it still fits. A consequence of being vertex transitive is that every vertex touches the same number of faces and edges.
Alternative names for face-transitive, edge-transitive, and vertex-transitive are isohedral, isotoxsal, and isogonal, respectively.
A polyhedron which is face, edge, and vertex-transitive is called a regular polyhedron.
Alternating Groups and Symmetry Groups
Let's reserve the letters V, E, and F for the number of vertices, edges, and faces of a polyhedron, respectively. The vector (V, E, F) is called the face counting vector or f-vector of a polyhedron. For example the f-vector of the cube is (8, 12, 6).
Returning to the model of a polyhedron and its case, each way we can put the polyhedron in its case represents an element of the alternating group of the polyhedron.
Since Platonic solids are vertex transitive there is at least one group element for each of the V vertices. Each vertex is connected to 2 × E / V edges, and if we assign one of the model edges to a case edge the positions of the rest of the vertices and edges is determined. Thus the size of the alternating group is V × (2 × E / V) = E × 2.
The symmetric group allows for reflections as well as rotations. If the mirror image of a polyhedron also fits in its case, its symmetric group is twice the size of its alternating group.
| V | E | F | |A| | |S| | |
|---|---|---|---|---|---|
| tetrahedron | 4 | 6 | 4 | 12 | 24 |
| cube | 8 | 12 | 6 | 24 | 48 |
| octohedron | 6 | 12 | 8 | 24 | 48 |
| dodecahedron | 20 | 30 | 12 | 60 | 120 |
| icosahedron | 12 | 30 | 20 | 60 | 120 |
The symmetry groups of the cube and octohedron are the same size. They are in fact isomorphic. The same is true of the dodecahedron and the icosahedron.
Other Polyhedra
Let's show that the tetrahedron with an f-vector of (4, 6, 4) has the smallest possible number of vertices, edges, and faces for a polyhedron.A polyhedron must have at least 4 vertices since any 3 points are contained in a plane.
We can rule out a polyhedron with 3 faces by noting that an edge must have exactly two faces. For the polyhedron to have a vertex on the edge, the third face must intersect the vertex but not the rest of the edge. It follows the polyhedron doesn't have any additional vertices, but this contradicts the fact that a polyhedron must have at least 4 vertices.
Each edge belongs to exactly two faces, but each face has three or more edges. The constraint 2E ≥ 3F follows, and because a polyhedron must have at least 4 faces it must also have at least 6 edges.
For every value of F ≥ 4 we can construct a polyhedron called a pyramid with F faces by starting with a (F – 1)-polygon and connecting each vertex with a point not in the plane of the polygon. The f-vector of the polyhedron is (F, 2F – 2, F). A tetrahedron is triangular pyramid and the Great Pyramid of Giza is a square pyramid. The formula for the f-vector shows that we have also constructed a polyhedron for every V ≥ 4.
A pyramid is right if the line connecting the center of the polygon to the off vertex is perpendicular to the plane of the polygon. Otherwise the pyramid is oblique.
Similarly a prism is a way of constructing a polyhedron for each F ≥ 5 with an f-vector of (2F – 4, 3F – 6, F). The cube is a square prism. Note that a decagon prism has an f-vector of (20, 30, 12) which is the same as the f-vector of a dodecahedron. The example shows that the f-vector of a polyhedron doesn't necessarily tell us the number of edges each face has.
A prism is right if the off-polygon faces are perpendicular to the polygon faces. Otherwise the prism is oblique.
Polyhedral Dice
If we want the die to be fair, then the die should be face transitive. The Platonic solids are face transitive, but pyramids and prisms in general are not. Recall that a triangular pyramid is a tetrahedron and a square prism can be a cube.There is a type of polyhedron called a bipyramid which yields an infinite family of face transitive polyhedra. The vertices of a regular n-polygon is connected to two vertices off the plane of the polygon on opposite sides. For the polyhedron to be face transitive, the vertices must be equidistant from and perpendicular to the center of the n-polygon. The figure is (n + 2, 3n, 2n) for n ≥ 3. The octohedron is a bipyramid.
The pentagonal bipyramid gives us a way to construct a 10-sided die, but most 10-sided dice are a different polyhedron called the pentagonal trapezohedron. The faces are quadrilaterals and in particular kites. The f-vector is (2n + 2, 4n, 2n) for n ≥ 3. The triangular trapezohedron has a f-vector of (8, 12, 6) which is the same as the cube.
The trapezohedron shows that face transitive does not imply edge transitive or vertex transitive. Bipyramids other than the square bipyramid or octahedron also show this.
The tetrahedron notwithstanding, for a polyhedron to be useful as a die we want each face to be parallel to a face on the opposite side so that there is always a clear "up". Insisting that a bipyramid or trapezohedron have parallel faces places a constraint on the distance of the off-polygon vertices from the polygon. Update: or so I thought, but in fact the trapezohedron or bipyramid can have parallel faces regardless of the ratio of off-polygon vertex distance to polygon side length. And it should be emphasized that for a bipyramid to have parallel faces the polygon must have an even number of sides. The trapezohedron does not have this limitation.
The Catalan solids are another set of 13 face transitive polyhedra. One of these, the rhombic triacontahedron is used for 30-sided dice.
Euler's Characteristic
For a convex polyhedron, the following formula for the number of vertices, edges, and faces holds:V – E + F = 2
Polytope
A regular polygon is a two dimensional analog of a Platonic solid.Polytopes generalize polygons (in two dimensions) and polyhedra (in three dimensions) to n-dimensions.
A 4-polytope has 0-dimensional vertices, 1-dimensional edges, 2-dimensional faces, and 3-dimensional cells. The number of each can be represented by a f-vector with four elements: (V, E, F, C).
An n-polytope has n – 1 dimensional facets, n – 2 dimensional ridges, n – 3 dimensional peaks.
Sub-polytopes of any dimension can be called faces. If necessary to indicate the dimension they are called j-faces.
The extended f-vector of a polytope includes extra values on either end. One value, for dimension –1, represents the empty set. The other value, for dimension n, represents the polytope itself. These values are always 1. The cube has extended f-vector (1, 8, 12, 6, 1).
The formula for Euler's characteristic extends to convex polytopes and motivates our use of extended f-vectors. If fi is the number of faces of dimension t, then
$$ \sum_{i=–1}^n (–1)^i f_i = 0$$
Lattices and Flags
When studying a polyhedron such as the cube above we can create a graph called the face lattice of the polyhedron which shows which edges belong to which faces and which vertices belong to which edges.At the top of the graph we put the entire polyhedron and at the bottom we put the empty set. This makes the graph a mathematical lattice. Every two elements in the lattice have a unique least element which contains both of them and a unique greatest element contained by both of them. The extended f-vector is the number of elements in each row of the lattice from the bottom up.
Two polyhedra are combinatorially equivalent if their face lattices are isomorphic. The cube and the triangular trapezohedron are examples of combinatorially equivalent polyhedra. The dodecagon prism and the dodecahedron are not combinatorially equivalent even though their f-vectors are the same.
A flag is a sequence of "faces" of an n-polytope of increasing dimension: F- 1, F0, F1, ..., Fn, where each face is contained in the face that follows it in the sequence. The F-1 face is the "empty face" and the Fn face is the entire n-polytype.
A regular polytope is one where the symmetry group of the polytope acts transitively on the flags. This implies that the polytope is face, edge, and vertex transitive.
Ways to Number a Platonic Solid
The number of ways we can put n different numbers on the n faces of a Platonic solid is n! divided by the size of the alternating group of the solid.
| tetrahedron | 2 |
| cube | 30 |
| octohedron | 1680 |
| dodecahedron | 7,983,360 |
| icosahedron | 40,548,366,802,944,000 |
Six-sided dice are often numbered with the constraint that opposite sides must add to 7. With this constraint there are only two ways to number a six-sided die. If you hold a six-sided die so that the sides for 1, 2, and 3 are showing, if the numbers increase in a counter-clockwise direction the die is said to be right-handed, which is the way Western dice are numbered.
Net
A polyhedron net is a set of edge-connected polygons, which can be folded into a polyhedron. Polyhedra can be constructed by printing a net on paper, cutting it out, and then folding the edges to create the shape.
Assigned Reading
"Convex Polyhedra" by Alexandrov. The reader is allowed to consult an English translation.
Monday, October 30, 2017
Using Blogger
We might see posts from some of the other Bookhouse Boys eventually. To that end, here are few fine points on using Blogger.
Put this at the bottom of the post:
CSS
To tweak the CSS, go to
Theme | Customize | Advanced | Add CSS
Whitespace
Avoid putting two spaces after a period. The Blogger line-breaking algorithm might put one of the spaces at the beginning of a line.
Fonts
The Compose editor is convenient for the most part, but don't use the font or the text size drop downs. They insert inline styles, making it impossible to control the look of the site with CSS.
Code
The Compose editor does not provide a way to insert a code block. You could set the font to Courier to get a monospace font, but this uses inline styles and Courier isn't the monospace font you want to use.
A better method is to insert the text in the Compose editor. Then switch to the HTML editor; surround inline code with
<code>...</code> tags and blocks with <pre><code>...</code></pre> tags. Indent the code by adding two spaces to the front of each line.LaTeX
To enable LaTeX, switch to the HTML editor and insert this snippet:
Mark off math equations from the rest of the text with doubled dollar signs: $$.
For inline math, set the text off with single dollar signs: \$ \$. Use a backslash to escape two dollar signs in a line.
<script type="text/x-mathjax-config">MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']], processEscapes: true}});</script>
<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"></script>
Mark off math equations from the rest of the text with doubled dollar signs: $$.
For inline math, set the text off with single dollar signs: \$ \$. Use a backslash to escape two dollar signs in a line.
Links
When creating a link, check the "open this link in a new window" box.Footnotes
Switch to the HTML editor. Put this after the text to be footnoted:
<a href="#1" name="top1"><sup>1</sup></a>
Put this at the bottom of the post:
<a name="1">1.</a> Gary Gygax, <i>Dungeon Masters Guide</i> (TSR Games: 1979), p. 10<a href="#top1"><sup>↩</sup></a>
Labels
Labels are used to categorize posts. Separate multiple labels with commas.Stray Whitespace
When editing, be careful not to add extra blank lines to the end of the post. They will be rendered when the post goes live.
Subscribe to:
Posts
(
Atom
)


































