Tuesday, July 16, 2019

Misc. Notes

It's been a while, and I don't have any large projects to share, but I'd like to keep up the habit of writing here. So I'm writing up some notes I have lying around.

What's That Island

Another island generator in my growing collection.

Where to get it

The Oddvent Oddpendium

What is it

A pair of d100 tables for "Landmark" and "Twist" (38 entries each).

Sample Output

Island 1

Landmark: Blue Grass
Twist: Crashed Sky-Boat

Island 2

Landmark: Gusts of Wind
Twist: Metal Skeletons

Island 3

Landmark: Lone Mountain
Twist: No Time Passes Here

Island 4

Landmark: Huge Waterfall
Twist: Whispering Wind

Island 5

Landmark: Dense Cacti
Twist: Doomsday Device

Island 6

Landmark: Blue Grass
Twist: Metal Skeletons

Notes

This table uses the same type of terse entries as Chris McDowall's Spark Tables, but is just a little more specific. There is the obligatory "Island is a Turtle" entry, which should have been its own point in these roundups. Some things like "Misty" or "Underwater" aren't exactly "Landmarks", but they're evocative so I'll let it go.

Magic Mouth Mishaps

Currently I'm favoring simpler magic systems, but one thing I liked about the revised Lamentations spellcasting rules was that it made you consider a minimum number of distinct miscasts. I made a table of them for Magic Mouth. I tried to make them sufficiently LotFP-ish, but I'm still not sure if I got the timing of the miscasts right, as I have yet to actually play with the revised rules.

  1. Continued recording for double duration.
  2. No volume control. Playback causes sonic damage.
  3. Backmasked. Voice sounds demonic and words are gibberish.
  4. Fourth wall-breaking. Spell captures the caster's player's most recent voicemail.
  5. There is no trigger, the spell just plays on loop and can't be stopped.
  6. The intent of the recording is inverted (e.g. "not" is added in front of the right words).
  7. Actually records the caster confessing a secret.
  8. Actually records a secret about the campaign world, or a heresy. 50% chance true.

What is the volume of a gaseous human?

Assumptions:

  • A "standard" adult is 70 kg.
  • Standard temperature and pressure.
  • 68% of the body is water, and the remaining molecules are large enough to be relatively few in number and therefore negligible.
  • If the previous assumption is one extreme, then the other is that the body is 100% water. This will let us bound the possible values.

Then we do some dimensional analysis and bad math (18 ≈ 22.4, 68% ≈ 50%):

70 kg kg⋅mol 22.4 m3
18 kg kg⋅mol
70 kg kg⋅mol 22.4 m3 ≈ 70 m3
18 kg kg⋅mol

So if a human is 100% water,then they will take up ~70 m3 as a gas, but at the other extreme, they'll be about ~35 m3.

Spark Tables

I've become enamored of Into the Odd's spark tables (above). And I've been looking for them pre-assembled because I'm lazy. I was pleasantly surprised to find this list of 100 Adjectives Used in Basic English, and sad to discover that it only has 99 adjectives in it. I added the ubiquitous "roll twice and combine" to round it out to a d100 table, but this doesn't feel great if you were already rolling twice to find unexpected combinations. I might consider subsetting this list as a starting point for my own spark tables.

  1. able
  2. acid
  3. angry
  4. automatic
  5. beautiful
  6. black
  7. boiling
  8. bright
  9. broken
  10. brown
  11. cheap
  12. chemical
  13. chief
  14. clean
  15. clear
  16. common
  17. complex
  18. conscious
  19. cut
  20. deep
  21. dependent
  22. early
  23. elastic
  24. electric
  25. equal
  26. fat
  27. fertile
  28. fixed
  29. flat
  30. free
  31. frequent
  32. full
  33. general
  34. good
  35. great
  36. gray
  37. hanging
  38. happy
  39. hard
  40. healthy
  41. high
  42. hollow
  43. important
  44. kind
  45. like
  46. living
  47. long
  48. male
  49. married
  50. material
  51. medical
  52. military
  53. natural
  54. necessary
  55. new
  56. normal
  57. open
  58. parallel
  59. past
  60. physical
  61. political
  62. poor
  63. possible
  64. present
  65. private
  66. probable
  67. quick
  68. quiet
  69. ready
  70. red
  71. regular
  72. responsible
  73. right
  74. round
  75. same
  76. second
  77. separate
  78. serious
  79. sharp
  80. smooth
  81. sticky
  82. stiff
  83. straight
  84. strong
  85. sudden
  86. sweet
  87. tall
  88. thick
  89. tight
  90. tired
  91. true
  92. violent
  93. warm
  94. wet
  95. wide
  96. wise
  97. white
  98. yellow
  99. young
  100. roll twice, combine

Thursday, April 11, 2019

The Journey of the Grand Myconautical Society

I made a traincar for Skerples' indefinite train project. After all that brainstorming, I didn't use any of it directly, but I got to use this illustration from Rattlemayne, which was the reward for entering the ItO pocketmod contest. Traincar linked from the image below.

Tuesday, April 9, 2019

Mad With Power in the Gardens of Ynn

The Gardens of Ynn is one of the most immediately exciting RPG books that I've read in a long time. In general, Cavegirl is a brilliant and exciting writer, and you can give her money if you'd like to support her work (outside of buying her other things, which are also brilliant). But man, that book could really use an editor, and the PDF has some weirdness. Now that I've been playing with Ghostscript, I thought I'd try my hand at solving one of the more egregious problems (IMO).

Problem

The layout of Ynn is roughly like this: there's a handful of tables in the beginning of the book, and to generate locations you roll on them. Each of the results on those tables is expanded upon, usually at about a page-length, later in the book. But the real problem is flipping around the book: the tables don't have page numbers, nor are they cross-referenced. Changing the text of the book or adding cross references are possibly too advanced at the moment, but I can add a table of contents, and hopefully this will make the PDF more useful at the table.

Solution

I copied-and-pasted the table of contents in Ynn, and lightly edited it (for example, "Chronological Abberations" is now "Shepherd of the Trees"). Then I went through and converted it to pdfmark format. This process was unfortunately not very automated, excepting some find-and-replace tools. Finally, I ran a command that looks like:

$ gs -o Ynn.ann.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress Ynn.pdf Ynn.toc.pdfmark

Results

Now I get this nice sidebar on my PDF and I'm happy:

As a detail-oriented person, there are still lots of things in the book that bother me a little. But it's much more usable now.

Sunday, April 7, 2019

Hapaxes in Context

My last post about Hapaxes in the Ultraviolet Grasslands was well received, even though I was not satisfied with the strength of its conclusions. Here, I attempt to add context to the hapaxes through the use of some inadvisable perl scripts.

Process

Again, I'll assume some familiarity with bash. I'm also using a pair of perl scripts I wrote which probably don't generalize well, but which were fit for purpose. If I'd planned ahead, I'd have written them both as one script.

First, we'll do some very similar things to what we did last time:

$ python3-pdf2txt.py -o UVG.txt UVG.pdf
$ cat UVG.txt |
tr A-Z a-z |
sed -E "s/\s+|['‘’]s\s+|[–—-]+/\n/g" |
sed -E 's/[][<>.,();:+?!%/©&“”"#*]//g' |
sed -e "s/^['’‘]//g" |
sed -e "s/['’‘]$//g" |
grep -Ev "^[0-9d]+$" |
sort | uniq -u > UVG.hapax
$ /bin/diff -i /usr/share/dict/words UVG.hapax |
grep ">" |
cut -d " " -f2 > UVG.hapax.new

As before, linebreaks have been added for clarity, but you'll have to escape them to use this code directly. Also note that this time we remove the possessive "s" from the ends of strings, and we split on hyphens as well as spaces.

Next, we go back to the PDF, but we extract it as XML to access the character position data:

$ python3-pdf2txt.py -t xml -o UVG.xml UVG.pdf
$ cat UVG.xml | ./xml2tsv.pl > UVG.tsv
$ cat UVG.hapax.new | ./pdfmarker.pl UVG.tsv > UVG.pdfmark

The scripts I mentioned earlier are xml2tsv.pl and pdfmarker.pl. The former (very naively) strips extraneous markup, leaving each line with a character, four coordinates, and a page number. The latter reads that tsv file (given as an argument) and locates the coordinates of each word piped to it. (As each word only appears once, this is straightforward.) It outputs these coordinates in pdfmark format, a way to annotate PDFs.

Finally, we merge the annotations back into the original PDF as highlights:

$ gs -o UVG.ann.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress UVG.pdf UVG.pdfmark

Results

This method is much pickier, in part because of the difficulty of parsing a PDF consistently. From the text file, we extracted 164 words of interest, but there are only 139 annotations in the final count. I expect that the difference is words that are represented differently between the txt and xml formats. For example, if the space between two words isn't represented by a whitespace character in the xml, it does not detect as a word boundary when we look for it. But the heuristics that build the text output may still correctly "add" the space back in. This method also considers each half of a hyphenated word separately, so they are more likely to appear multiple times or to be in the dictionary.

These numbers are smaller than before for a different reason also: I have been using the free sample version, so that I can share the results. This is 78 pages, down from 158 pages in the backer version I was using before. So while we can still get a list of the output as before:

rewatch
pusca
eskatin
ashwhite
demiwarlock
vidy
engobes
tollmistress
dejus
orangeware

We can also then go find where these words are highlighted in the PDF:

In the highlighted PDF, it's easier to see that the majority of the hapaxes are proper names and normal words that my dictionary doesn't contain, like "lunchbox" and "calcinous". There are still lots of gems though, like a sign that reads No Lones to Adventerers, Frybooters or Wagonbonds, the goddess Hazmaat, and zombastodon lair. You can take a look here:

Disclaimer & Plug

I still back Luka on Patreon, and I have backed his Kickstarter as well. The Kickstarter campaign is now in its final week, and I'm very excited for it.

The free version of the PDF (available unannotated in the Kickstarter description), is licensed under a CC By-NC-ND 4.0 license. Arguably, because all the changes I have made to it were procedural, maybe this still complies with the "NoDerivatives" part of that. But I don't actually know, so I went ahead and asked Luka and he said this was ok anyway.

Monday, March 25, 2019

The Mummy (1999) as Dungeon

The Mummy (1999) is not a good movie, and I rewatched it about a week ago. Although it is not good, it has some elements of a good dungeon in it. Here I have outlined what I can recall, at least without having to do any further research, and with some interjections.

"*" denotes elements drawn from The Mummy Returns (2001), which was also not a good movie.

Getting There

  • Map to dungeon inside Puzzle Box. (meh)
  • Condemned man also knows the way. (cool)
  • Path illuminated by a mirage at sunrise. (meh)

There

  • Front door unlocked by Puzzle Box. (cool)
  • Stone tablet that says:
    • the Book of Life is below the statue of Anubis.
    • the Book of Death is below the status of Toth.
  • The Book of Life is below the statue of Toth. (nice)
  • The Cursed Box is below the statue of Anubis.
  • Imhotep is trapped and inanimate in a sarcophagus.
  • Dormant mummies entombed behind figures on the walls.
  • Jewels set in the walls are actually flesh-eating scarabs.
  • The river of death flows through the lowest level.
  • A Sacrificial Altar next to the river of death.
  • A treasure room containing lots of stuff and also the Rod of Osiris. Except for the trouble of hauling it, it is unprotected.
  • A big crocodile-headed self-destruct lever closes off all exits and sinks the dungeon into the sand.
  • Location in the desert makes hauling loot inconvenient.

Items

Puzzle Box

  • contains the map.
  • opens the front door.
  • opens the Book of Death. (meh)

Cursed Box

  • curse is written on it, roughly:
    1. If you open the box
    2. And Imhotep wakes up & is free
    3. He will kill you and maybe take your organs
    4. And cause bad things like plagues.
  • contains Book of Death and Canopic Jars.

Book of Life

  • made of gold.
  • incantation 1: control mummies (not Imhotep).
  • incantation 2: make Imhotep mortal.

Book of Death

  • locked, key is Puzzle Box. (lame)
  • incantation 1: raise Imhotep.
  • incantation 2: reincarnate Imhotep's lover.

Canopic Jars

  • gold.
  • contain organs of Imhotep's lover.

Rod of Osiris*

  • a golden scepter.
  • becomes a spear.
  • the only weapon capable of killing Dwayne "The Rock" Johnson in his final form.

Imhotep

Imhotep's Goals

  1. Kill all who opened the cursed box. Take organs as needed.
  2. Reincarnate his lover. Requires:
    • a woman sacrifice.
    • the Book of Death.
    • the Sacrificial Altar.
    • the Canopic Jars.
  3. Bad things?
  4. Hates and fears cats. Will flee in their presence.

Imhotep's Abilities

  • Assimilate organs
  • Cause plagues (blood, frogs, gnats, beasts, pestilence, boils, hail, locusts, darkness, death of firstborn)
  • Summon meteors
  • Turn into sand
  • Command undead
  • Wall of Sand with his face on it. He looks really dumb while doing it. Also works with water.*
  • Speak Ancient Egyptian and Hebrew (after taking a tongue).
  • Rally a mob of locals.
  • Immortality, more or less.

Factions

  • Americans—basically a rival adventuring party.
  • Magi—honor bound to keep Imhotep dead. Apparently Muslim?
  • Locals—probably want to be left alone, but also apparently love Imhotep.

Summary

There are really only two ways to mess this up: self-destruct the dungeon or awaken Imhotep. Awakening Imhotep requires (1) opening his sarcophagus, and (2) reading from the book of death. This means that if it were run straight, paranoid players might not even interact with most of the stuff outlined in the movie, and instead they'd just haul off as much treasure as possible. This need not be disappointing: the mummy is bound to hunt those who opened the Cursed Box, a likely occurrence when looting. So if some scholar somewhere reads from the Book of Death (having been sold), and some archaeologist later opens up the sarcophagus (having been made aware of its location), then the mummy will start hunting the players. Alternatively, the mummy will just start messing stuff up on a regional scale via plagues. To force interactivity while the party is in the dungeon, just have the Americans make poor decisions while the party is there I guess.

Sunday, March 24, 2019

Quick "Trainstorm"

Skerples proposes a collaborative dimension-hopping train. This is a quick brainstorm about trains, to help myself and others get started.

Image Source

Plan

  1. Listen to Steve Reich.
  2. Read Wikipedia.
  3. Discuss on Chris McDowall's OSR Discord server.

Types of Railcar

and maybe some thoughts about how they exist in an interdimensional infinite train that never stops (unless it does sometimes).

  • Refrigerator cars. Unirionically called "reefers".
  • Various maintenance cars. The clean the ballast, rearrange the ballast, clear the snow, distribute lubricant and herbicide, and measure the track geometry. Consider how these tasks change when the ground underneath the ballast is unknown and can change suddenly.
  • Rail ambulances. Provide services to remote areas, but on an endless non-stop train, they more likely act as hospitals.
  • Specialized cargo cars. Coil cars are designed specifically to carry rolled-up sheet metal. Slate waggons are designed specifically to carry slate. On a train that could be carrying any kind of exotic material, what considerations would the car carrying it need?
  • Stock cars. Carrying a bunch of exotic animals across dimensions doesn't really need much explanation I think. It raises the same questions as all cargo does, but is more immediately gameable. Possibly it would act more like a zoo or a farm though, given the circumstances.
  • Schnabel cars. The cargo forms an integral part of these cars, without it they're just "ends". Use this as an excuse to make the middle of a car be anything you want.
  • There are all kinds of tanks and hoppers and boxcars for general cargo. Other than the futility of regularly transporting cargo on the Indefinite Express, I'm not sure what to do with these. I guess instead of regular shipping from one location to another, you might have powerful dimensional merchants who trade their wares as they can, possibly lording over several cars just for cargo. This all presupposes that the train will make stops though.
  • Railroad cranes. Ostensibly used for maintenance, these ones could easily be used to snatch interesting things while thundering past them.
  • Mail cars. I did not realize that the mail is actively sorted while in transit, so that it's ready to ship out when it arrives. I don't know what to do with this though.
  • Dining cars. Probably more like farms or shopping malls here.
  • Sleeping cars. Where people live? Possibly unremarkable.

See Also

I would like to be sure that nobody thinks this is final in any way. I'm just trying to pretend that my Wikipedia binge was useful. I would hate for my interpretation of something to step on the toes of anyone else's great idea.

Tuesday, March 19, 2019

Hapaxes in the Ultraviolet Grasslands

At the beginning of the glossary of the Ultraviolet Grasslands (UVG), Luka asks: What have I missed? What needs more details? One way to find things that might be missing is to look for hapaxes in the work. This is not a good plan, but I tried anyway.

Process

The following stuff was done in bash. I assume some familiarity with the commands, but comment on particular decisions that I made. It could be cleaned up.

First, we need the corpus as text so that we can work with it:

> python3-pdf2txt.py -o UVG.txt UVG.pdf

Then we clean up the text, and select all the words that only appear once:

> cat UVG.txt |
tr A-Z a-z |
sed -e 's/\s/\n/g' |
sed -E 's/[][<>.,();:+?!%/©&]//g' |
sed -e "s/[‘’]/'/g" |
sed -e 's/[“”"]//g' |
sed -e 's/[–—]/-/g' |
sed -e 's/[-"'\'']$//g' |
sed -e 's/^[-"'\'']//g' |
grep -Ev "^[-0-9'd]+$" |
sort | uniq -u > UVG.hapax

Line breaks have been added for clarity. Parts of this bear closer examination:

sed -e 's/[“”"]//g' |

This could be folded into the second sed statement, but it might be useful to keep but normalize double quotes for some purposes.

sed -e 's/[-"'\'']$//g' |
sed -e 's/^[-"'\'']//g' |

Quotes and hyphens at the beginning or end of a word are unlikely to carry much information, so they are stripped. This must happen after all the dash and quote characters have been "normalized".

Lots of the words that only appear once (6832 now) are not exciting. So we'll remove all the dictionary words:

> /bin/diff -i /usr/share/dict/words UVG.hapax |
grep ">" |
cut -d " " -f2 > UVG.hapax.new

Again, line breaks have been added for clarity. The full path to diff is specified because I've otherwise aliased diff to colordiff.

Results

Of the 1612 hapaxes now left, it might be interesting to see how the characters are distributed.

> cat UVG.hapax.new | fold -c1 | sort | uniq -c | sort -gr

This gives a table of character frequency:

3223
1647e
1295a
1155i
1106o
1097r
1016s
1010n
916t
877l
837-
. . .
   43
3 
38
2ô
2ç
29
27
1Ö
1ñ
1ë
1â

The most common "character" is blank, and I suspect this is related to newlines (3223=2*1612-1). The other "blank" character appears to be a space that did not get stripped out initially, or which was later re-introduced. Perhaps it is some kind of other whitespace.

The most exciting thing in this table (I think) is the high occurrence of the hyphen. This means that roughly half of the "hapaxes" are likely composite words, and worth considering separately. For example:

sub-node
six-lives
noble-pillared
mercy-is-weakness
marrow-beet
curse-maddened
six-limbed
force-glass
stock-piled
self-regenerating

Disregarding hyphens, these are all words a dictionary knows, but which Luka may be using in novel ways.

The remaining (unhyphenated) words, are a mixed bag. Take this random sampling:

pyrokinetic
skalin
psionics
dustland
irshe
replicator
10x
visec
mearls
mirodar

Many of these just show the limitations of my dictionary ("pyrokinetic", "replicator"). Some of them show the limitations of the process ("10x", "jrientsblogspotcom"). Some are ad-hoc compound words ("dustland", "malicereflective"). The rest are either made-up, proper nouns, or typos, and I don't have a way to distinguish between them. It's possible that some of these were "created" by pdf2txt, which uses tunable heuristics to decide where to draw word boundaries.

If you're interested in playing with the lists, I've uploaded them here. They are split into "hyphen" and "nohyphen", and should be alphabetical.

Disclaimer & Plug

I back Luka on Patreon at the $1/mo level, which grants me access to early drafts of his projects. The version used for this project was the most recent version available to backers, but it has not been edited.

UVG is currently running a Kickstarter for a fancy printed version with editing and more art. There's a link to a free version of the manuscript there too.