diff options
authorAndrew Murrell <>2017-12-26 08:43:24 +0000
committerAndrew Murrell <>2017-12-26 08:43:24 +0000
commitbc78567716a106042356053d556f57c1ddc13cfc (patch)
parentdb410594baa4bb507aaa23ff98bf8853056b0823 (diff)
parent50830151e8168b8be0100da349ba7e3576054dc3 (diff)
Merge branch 'master' of
-rw-r--r--src/dnd/Collaborative_Gestalt_Leveling_v0.1.pdfbin0 -> 708275 bytes
-rw-r--r--src/dnd/Learning_a_Language_v1.0.pdfbin0 -> 669530 bytes
-rw-r--r--src/dnd/OracleSorc1_0.pdfbin0 -> 5346704 bytes
-rw-r--r--src/dnd/ThePatron_1.1.pdfbin0 -> 3330156 bytes
-rw-r--r--src/dnd/YARV_Ranger_1.2_with_Community_Subclasses_1.1.pdfbin0 -> 35153491 bytes
-rw-r--r--src/dnd/drews_rules.pdfbin0 -> 715540 bytes
-rw-r--r--src/writing/ (renamed from src/dnd/
38 files changed, 1055 insertions, 959 deletions
diff --git a/Makefile b/Makefile
index 96e0fdf..f61c4c3 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,9 @@
+pdfjs =
# Default target
-all: out/index.html out/main.css
+all: out/index.html out/main.css out/pdfjs
phony += all
# Boilerplate
@@ -25,7 +27,13 @@ out/%.css: src/%.scss
@mkdir -p $(@D)
scss --stdin < $< > $@
-targets = $(phony) %.css
+out/$(notdir $(pdfjs)):
+ wget -c --no-use-server-timestamp -O $@ $(pdfjs)
+out/pdfjs: out/$(notdir $(pdfjs))
+ rm -rf -- $@
+ mkdir -- $@ && bsdtar -xf $(abspath $<) -C $@ --exclude '*.pdf' || { rm -rf -- $@; false; }
+targets = $(phony) %.css out/pdfjs%
$(sort $(filter-out $(targets),out/index.html $(MAKECMDGOALS))): FORCE
diff --git a/ b/
index 6d27dc4..e95aff5 100644
--- a/
+++ b/
@@ -54,20 +54,29 @@ Those dependencies are:
* Authoring pages
-Currently supported are Markdown ( and Org-mode ( files.
-Each of these format supports embedding metadata in the document
-(well, Markdown doesn't really, but the Pandoc syntax extension
-~yaml_metadata_block~ adds it).
+If you drop a file in the ~src/~ folder, the site generator will try
+to turn it into usable HTML. The big caveat is that files *MUST* to
+be in all lower case (this is to efficiently handle the requirement
+that URLs be case-insensitive)!
-In Org-mode, this looks like
+Currently supported formats are:
-#+KEY: value
+ - Markdown ( : converted with Pandoc
+ - Org-mode ( : converted with Pandoc
+ - PDF (~.pdf~) : embedded with PDF.js of document...
+I don't need to tell you how to make these types of files.
+In addition to the raw content of the files, you'll want/need to set
+metadata about the page. Each of these format supports embedding
+metadata in the document.
-In Markdown, this looks like
+** Setting metadata: Markdown
+Metadata for Markdown files can be set by adding a block of YAML at
+the beginning of the document, terminated with "---". This isn't
+"standard" markdown, but is a common syntax extension (Pandoc calls it
@@ -79,16 +88,47 @@ key2: of document...
+Pandoc may make use of some of these metadata attributes internally
+when converting to HTML. See the Pandoc documentation.
+** Setting metadata: Org-mode
+Metadata for Org-mode files can be set by adding ~#+KEY: value~ lines
+at the beginning of the document.
+#+KEY: value
+ of document...
+Pandoc may make use of some of these metadata attributes internally
+when converting to HTML. See the Org-mode and Pandoc documentation.
AFAIK, unfortunately Org-mode only has values as strings, no
structured data.
-Pandoc may make use of some of these values internally when converting
-to HTML. See the Org-mode and Pandoc documentation.
+** Setting metadata: PDF
+PDF files natively support embedding certain bits of metadata. The
+bits that we use are:
+ - title
+ - author
+ - creation date
+ - modification date
+If you need to set any other metadata attributes, or want to override
+the values in the PDF (since setting them can be difficult), create
+YAML file with the same name as the PDF file, but with the ~.yaml~
+file extension instead of ~.pdf~.
+** Metadata attributes that are handles specially
-However, there are some of these that are used specially by the site
+There are some metadata attributes that are used specially by the site
-| attribute | default | standard | format |
+| attribute | default value | standard | format |
| title | the first line of the file | Pandoc | string |
| author | ~config.yaml:default_author~ | Pandoc | string +or list+ [fn:1] |
@@ -98,16 +138,16 @@ generator:
| html_head_extra | "" | Org-mode | string |
| class | "" | no | string (CSS class to apply to ~<body>~) |
| categories[fn:2] | "" | no | string ("ES HB") or list (["ES", "HB"]) |
-| published[fn:2] | most recent git commit for file | no | string (Ruby ~DateTime::parse()~) or date[fn:3] |
-| updated[fn:2] | first git commit for file | no | string (Ruby ~DateTime::parse()~) or date[fn:3] |
+| published[fn:2] | first git commit for file | no | string (Ruby ~DateTime::parse()~) or date[fn:3] |
+| updated[fn:2] | most recent git commit for file | no | string (Ruby ~DateTime::parse()~) or date[fn:3] |
[fn:1] We don't support lists of authors, though the Pandoc "standard"
[fn:2] The "published"/"updated"/"categories" terminology is borrowed
from the Atom specification (RFC 4287), and I intend them to have the
-same semantics. For "published"/"updated", there is a "standard"
-variable name is "date", but I thought that was dreadfully ambiguous
+same semantics. For "published"/"updated", the Pandoc "standard"
+variable name is "date"; but I thought that was dreadfully ambiguous
and confusing when the site generator deals with two distinct dates.
[fn:3] At various times there have been bugs in the YAML parser
@@ -134,7 +174,7 @@ files:
In the directory you wish for the externally hosted pages to appear
in, add the metadata to the page to external list.
-For example, adding "356 Tomorrows: A Simple Lament" to the "writing"
+For example, adding "365 Tomorrows: A Simple Lament" to the "writing"
@@ -155,7 +195,7 @@ attributes for local pages, but with fewer defaults:
| title | mandatory | string |
| author | ~config.yaml:default_author~ | string |
| categories | "" | string ("ES HB") or list (["ES", "HB"]) |
-| published | value of ~updated~ [fn:4] | string (Ruby ~DateTime::parse()~) or date[fn:b3] |
+| published | value of ~updated~ [fn:4] | string (Ruby ~DateTime::parse()~) or date[fn:3] |
| updated | value of ~published~ [fn:4] | string (Ruby ~DateTime::parse()~) or date[fn:3] |
[fn:4] It is mandatory to set at least one of ~published~ or
diff --git a/bin/auto-changelog b/bin/auto-changelog
index 64d15e9..b374fda 100755
--- a/bin/auto-changelog
+++ b/bin/auto-changelog
@@ -14,11 +14,18 @@ should-insert() {
generate-entry() {
- git log -n1 --stat --date='format:%Y-%m-%d' --format=$'## %ad %an <%ae>\n\n%B' | cat -s
+ git log -n1 --date='format:%Y-%m-%d' --format=$'## %ad %an <%ae>\n\n%B' | cat -s
html_escape() {
- sed -e 's/&/\&amp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g' -e 's/^ \S/ &/'
+ sed '
+/^\S/ {
+ s/&/\&amp;/g
+ s/</\&lt;/g
+ s/>/\&gt;/g
+s/^ \S/ &/
insert() {
diff --git a/config.yaml b/config.yaml
index 267ccb0..daf9625 100644
--- a/config.yaml
+++ b/config.yaml
@@ -1,8 +1,7 @@
url: ""
-html_suffixes: ["md", "org"]
# Licenses
-default_license: "CC BS-SA-3.0"
+default_license: "CC BY-SA-3.0"
"CC BY-SA-3.0": ""
"WTFPL-2": ""
@@ -13,7 +12,7 @@ person_uris:
"Luke Shumaker": ""
"Andrew Murrell": ""
- "Luke Shumaker": ""
+ "Luke Shumaker": ""
"Andrew Murrell": ""
# Categories
@@ -24,3 +23,8 @@ categories:
"HB": "Homebrew"
"SS": "Short Story"
"WP": "WIP"
+ "WB": "Worldbuilding Prompt"
+ "AP": "Apocrypha"
+ "FR": "Forgotten Realms"
+ "PF": ".PDF"
+ "LD": "Lore Doc" \ No newline at end of file
diff --git a/lib/category.rb b/lib/category.rb
index e0ed8e0..8f14153 100644
--- a/lib/category.rb
+++ b/lib/category.rb
@@ -9,7 +9,7 @@ class Category
def name
- Config::get.category_name(@abbr)
+ Config::get.category_name(abbr)
def html
return "<a class=\"tag #{abbr}\" href=\"/tags/#{abbr}.html\">#{name}</a>"
diff --git a/lib/config.rb b/lib/config.rb
index 4690559..944acc3 100644
--- a/lib/config.rb
+++ b/lib/config.rb
@@ -21,11 +21,7 @@ class Config
return @default_license ||= @data['default_license']
def license_uri(name)
- str = @data['license_uris'][name]
- if str.nil?
- return nil
- end
- return URI::parse(str)
+ return URI::parse(@data['license_uris'][name])
# People
def default_author
@@ -42,10 +38,8 @@ class Config
return @data['person_emails'][name]
# Categories
- def categories
- return @data['categories'].keys
- end
def category_name(abbr)
- return @data['categories'][abbr]
+ @categories ||= (@data['categories'] || {}).map{|k,v|[k.downcase,v]}.to_h
+ return @categories[abbr.downcase]
diff --git a/lib/page.rb b/lib/page.rb
index b349dc8..ebc123b 100644
--- a/lib/page.rb
+++ b/lib/page.rb
@@ -91,11 +91,11 @@ class Page
def index_link(cururl, depth)
# FIXME: This code is super gross.
- ret = " * <span><a class=\"#{index_class}\" href=\"#{cururl.route_to(url)}\" title=\"Published on #{atom_published.strftime('%Y-%m-%d')}"
+ ret = " * <span class=link-main><a class=\"#{index_class}\" href=\"#{cururl.route_to(url)}\" title=\"Published on #{atom_published.strftime('%Y-%m-%d')}"
if atom_updated != atom_published
ret += " (updated on #{atom_updated.strftime('%Y-%m-%d')})"
- ret += "\">#{atom_title}</a></span><span>"
+ ret += "\">#{atom_title}</a></span><span class=link-categories>"
atom_categories.each do |t|
ret += t.html
diff --git a/lib/page_index.rb b/lib/page_index.rb
index 43bf367..31d4682 100644
--- a/lib/page_index.rb
+++ b/lib/page_index.rb
@@ -28,13 +28,15 @@ class IndexPage < LocalPage
@ls ||= Dir::entries(local_infile)
.select{|fname|not fname.start_with?(".")}
- .select{|path|Dir::exist?(path) or Config::get.html_suffixes.include?(File::extname(path).gsub(/^[.]/, ''))}
def index_pages
if @pages.nil?
@pages = Set[]
for path in _ls
- @pages.add( Dir::exist?(path) ? IndexPage::new(path) : LocalPage::new(path) )
+ page = LocalPage::load(path)
+ unless page.nil?
+ @pages.add(page)
+ end
for data in (_metadata['external'] || [])
@@ -57,9 +59,9 @@ class IndexPage < LocalPage
def index_link(cururl, depth)
ret = ''
unless depth <= 1
- ret += "<h#{depth}>[#{atom_title}](#{cururl.route_to(url)})</h#{depth}>\n\n"
+ ret += "<section><h#{depth}>[#{atom_title}](#{cururl.route_to(url)})</h#{depth}>\n\n"
- for page in{|page|not page.is_a?(IndexPage)}.sort_by{|page|page.atom_published}
+ for page in{|page|not page.is_a?(IndexPage)}.sort_by{|page|page.atom_updated}.reverse
ret += page.index_link(cururl, depth+1)
ret += "\n"
@@ -67,6 +69,9 @@ class IndexPage < LocalPage
ret += page.index_link(cururl, depth+1)
ret += "\n"
+ unless depth <= 1
+ ret += "</section>\n\n"
+ end
return ret.gsub(/\n\n+/, "\n\n")
def index_title
diff --git a/lib/page_local.rb b/lib/page_local.rb
index e13fa33..6c70ac3 100644
--- a/lib/page_local.rb
+++ b/lib/page_local.rb
@@ -9,6 +9,21 @@ require 'pandoc'
require 'person'
class LocalPage < Page
+ def self.load(inpath)
+ case
+ when Dir::exist?(inpath)
+ require 'page_index'
+ return IndexPage::new(inpath)
+ when [".md", ".org"].include?(File::extname(inpath))
+ return LocalPage::new(inpath)
+ when ".pdf" == File::extname(inpath)
+ require 'page_pdf'
+ return PdfPage::new(inpath)
+ else
+ return nil
+ end
+ end
def initialize(infile)
@infile = infile
diff --git a/lib/page_pdf.rb b/lib/page_pdf.rb
new file mode 100644
index 0000000..e70c887
--- /dev/null
+++ b/lib/page_pdf.rb
@@ -0,0 +1,62 @@
+# coding: utf-8
+require 'erb'
+require 'open3'
+require 'yaml'
+require 'page_local'
+class PdfPage < LocalPage
+ def initialize(filename)
+ super(filename)
+ end
+ def pdf_metadata
+ if @metadata.nil?
+ stdout, stderr, status = Open3::capture3("pdfinfo", "--", local_infile)
+ unless stderr.empty?
+ raise stderr
+ end
+ unless status.success?
+ raise status
+ end
+ raw_metadata = stdout.split("\n").map{|l|l.split(":", 2).map{|c|c.strip}}.to_h
+ # Transform the PDF property names to match our metadata names
+ key_map = {
+ "Title" => "title",
+ "Author" => "author",
+ "CreationDate" => "published",
+ "ModDate" => "updated",
+ # "Keywords" => "categories",
+ }
+ @metadata ={|k,v|[key_map[k]||k,v]}.to_h
+ yamlfile = local_infile.sub(/\.pdf$/, '.yaml')
+ if File::exist?(yamlfile)
+ @metadata = @metadata.merge(YAML::load(File::read(yamlfile)))
+ end
+ end
+ @metadata
+ end
+ def pdf_js_url
+ @@pdjfs ||= Config::get.url + 'pdfjs/web/viewer.html'
+ end
+ def pdf_viewer_url
+ @viewer_url ||= pdf_js_url + ('?file=' + URI::encode_www_form_component(pdf_js_url.route_to(local_srcurl)))
+ end
+ def local_intype
+ return 'markdown'
+ end
+ def local_depends
+ if @depends.nil?
+ yamlfile = local_infile.sub(/\.pdf$/, '.yaml')
+ metafile = File::exist?(yamlfile) ? yamlfile : File::dirname(yamlfile)
+ tmplfile = "tmpl/"
+ @depends ={|k,v|[k,v.merge([metafile, tmplfile])]}.to_h
+ end
+ @depends
+ end
+ERB::new(File::read("tmpl/")).def_method(PdfPage, 'local_input()', "tmpl/")
diff --git a/lib/sitegen.rb b/lib/sitegen.rb
index 78222a3..4a3dd48 100644
--- a/lib/sitegen.rb
+++ b/lib/sitegen.rb
@@ -40,7 +40,7 @@ module Sitegen
- def self.Makefile()
+ def self.Makefile
str = ''
dependencies.each do |target, deps|
str += "#{target.to_s}: #{deps.sort.join(' ')}\n"
diff --git a/src/ b/src/
index ddca263..8385ffe 100644
--- a/src/
+++ b/src/
@@ -1,10 +1,54 @@
-Hello Internet Person!
-I'm Andrew D. Murrell, and I'm a DM.
+Every great adventure begins with a departure.
-Though I hold a degree in Physics, am currently working as a manager
-and editor at a small tech firm. I write, mostly to teach my players
-about the whatever they want to know about the Forgotten Realms, but
-also because I think stories make the world a better place. I can be
-contacted at and would love to hear from you!
+The young hero, the country lass,<br>
+the bored noble, each is called to<br>
+leave home and step into the wider<br>
+world beyond.
+These untested newcomers are<br>
+confronted by the winds and wilds,<br>
+by highwaymen and heathens, and by the<br>
+deeper dangers of their own making.
+They may fall.<br>
+They most certainly will fail.<br>
+And yet they fight,<br>
+taking strides ever forward,<br>
+ever farther from the places they called home.
+But should they rise,<br>
+and so defeat their enemies<br>
+as they do their insecurities,<br>
+they shall rise as heroes.
+And as the bard weaves their tales of fortune and of fate—<br>
+of voyages, departures, and returns—<br>
+we listen to their stories,<br>
+and are likewise taken far, far, from home.
+Come with me then,<br>
+upon a great adventure,<br>
+a great departure,<br>
+and a new beginning.
+—Andrew Murrell (/u/ImFromNASA on reddit).
+Welcome wanderers!
+This site is a resource for all you wanderers, seeking your place
+among immortal wonders, your eyes filled deep with dreams and souls
+set on seeking larger purpose. May you here find a window into worlds
+and a invitation into imagination.
+My name is Andrew Murrell (/u/ImFromNASA on Reddit), currently most
+well known for YARV, Dynamic Initiative (Drew's Rules), and the Patron
+prestige class on /r/UnearthedArcana and its discord, the DoMT.
+I make D&D 5e homebrew, write short stories, build worlds, and also
+haphazardly design heartbreaker TRPGs.
+I know more than any sane person should about the Forgotten Realms. \ No newline at end of file
diff --git a/src/apocrypha/ b/src/apocrypha/
new file mode 100644
index 0000000..a850552
--- /dev/null
+++ b/src/apocrypha/
@@ -0,0 +1,86 @@
+title: "An Introduction to Apocrypha"
+updated: "2017-12-25 Mon 14:22"
+categories: AP
+Apocrypha is a world of mystery and forgotten history, built from
+first principles and the realization that even simple truths have
+My goal with building the world of Apocrypha is to create a generic
+fantasy world which is both suitable for books and for use with TRPGs,
+and is designed somewhere on the coherency spectrum between the
+Forgotten Realms and Discworld.
+Though it is being designed to function with the 5th edition of <a
+href="">Dungeons &
+Dragons</a> in mind, I am also haphazardly designing a TRPG of my own
+which may be abandoned along the way, but draws inspiration from
+Apocrypha as well as breathing life back into it. Over the last 2
+months, I've found that working on one usually generates ideas that
+are applicable to the other, and overall energy for both projects
+benefits from this dynamic.
+Occasionally Asked Questions
+1. From a Forgotten Realms standpoint, "does the Weave still matter?"
+There is no Weave, nor are gods' domains delineated in the same way as FR.
+3. "Why in a D&D 5e-esque world have the elves and spellcasters not
+ taken over despite the advanced age of the former and the quadratic
+ power curve of the latter?"
+My previous answer to this was chopped up and dumped in several
+dumpsters in several different states, so I'll expand below.
+Creatures don't have DNA. Alchemy is not chemistry because there are
+no chemicals. Plutonium isn't an element: fire is.
+All creatures share a common ancestry. From the primal elementals, to
+the mischievous fey, to the inscrutable nim, all are born by the
+spontaneous generation of the physical from an immortal and unchanging
+essence. I'm working on how they are all related, but their forms are
+determined by their essential natures.
+The "planes" are just reality through a broken prism (in that they
+started out with a common starting place for the condition of the
+world, but since each has slightly different properties, due to the
+absence of certain things (like say, gravity) or their distortion
+(like the duration of magical effects lingering twice as long), they
+each have developed differently (and different kinds of creatures have
+been born there).
+Magic comes in as many forms as creatures do.
+Since creatures and magic and the elements and planes all have the
+same ancestry in the grand scheme of things.
+Wizardry, specifically, is the capturing of a specific magical essence in the form of a spell.
+This 'bottling' allows you to take magic with you from place to
+place. and release it. But the power of most non-wizardry magic ebbs
+and flows based on large geographical region (which I'm still working
+out, since I don't have most of the other magic systems worked out
+yet). For example, druids can produce effects much more powerful than
+those of a wizard if they are within their grove. So high level
+wizards trying to take over an area and being repulsed by the locals
+is a fairly common trope.
+As is practitioners of various regional magics attempting t extend
+their influence by changing the lands around them. The Song of
+Conquest is a kind of regional magic (or more like ancestral magic,
+because it comes from the people, not the land), that has spread quite
+far and is the power behind the empire (in addition to them
+discovering wizardry and having a big army and the largest navy).
+So, the reason that elves/wizards haven't taken over the Empire is
+because of the Song of Conquest (which only
+humans/halflings/faunus/orcs have access to) and the nation state
+(because it's a #human empire which isn't racist towards elves per se,
+but you know).
+Also, "there's always a bigger fish." There are dragons and nim and
+patrons and icons that are more powerful than wizards, and gods above
diff --git a/src/apocrypha/index.yaml b/src/apocrypha/index.yaml
new file mode 100644
index 0000000..e54860e
--- /dev/null
+++ b/src/apocrypha/index.yaml
@@ -0,0 +1 @@
+title: "Apocrypha" \ No newline at end of file
diff --git a/src/apocrypha/ b/src/apocrypha/
new file mode 100644
index 0000000..be49016
--- /dev/null
+++ b/src/apocrypha/
@@ -0,0 +1,13 @@
+title: "Regions of the Center Sea"
+updated: "2017-12-25 Mon 00:13"
+categories: AP LD
+# The Center Sea
+The Center Sea is the beating heart of the civilized world.
+Tributaries from all directions meet and mix here, bringing ships
+together from all the nations of the world, laden with goods and with
diff --git a/src/apocrypha/ b/src/apocrypha/
new file mode 100644
index 0000000..bc269f3
--- /dev/null
+++ b/src/apocrypha/
@@ -0,0 +1,153 @@
+title: "Regions of the Empire"
+updated: "2017-12-24 Mon 00:14"
+categories: AP LD
+# A Brief Overview of the Empire
+The Etracian Empire is the largest empire in the world, and the second
+largest in history (only falling behind that of the dominion of the
+giants during the Days of Thunder).
+Though in past ages, the empire grew through conquest, in the modern
+days, the holdings and influence of the empire expand primarily
+through colonization and diplomacy.
+#### Q & A
+>How long has the Empire been around?
+The current count places the empire's history into 111 ages, but how
+many is that? The current age has lasted 62 years, but some have been
+less than a year, and some longer than a century.
+The best tax records in the oldest provinces say the empire is about
+30 generations of elves (or 3000 years) old. The average length of an
+'age' is therefore, about 100 years.
+>What is the General Edict?
+The General Edict is a system of laws and codes given by Josef IV. It
+has been in place for a little over 60 years.
+As a legal system, the GE has done a better job of keeping the nation
+running than the previous code did (the previous Emperor's reign was
+rife with civil war, do in large part to the Emperor's power to easily
+disenfranchise noble families that "showed disloyalty").
+>Who is the current Emperor?
+Emperor Josef IV is the official name for Lady Lizbeth Yates, the
+eldest daughter and only remaining survivor of the Yates line. Though
+technically, only a man may claim the title of Emperor [what kind of
+primogeniture is this?], few complain that the Lady Lizbeth legally
+declared herself a man (or rather, few who complained about the matter
+remain among the living).
+## Regions of the Empire
+The Empire is a massive, powerful, and infinitely subdivided nation
+with an exceptional record for stability matched only by its
+inimitable bureaucracy.
+It contains three major geographic and political classifications for
+its lands: states, provinces, and colonies.
+### The Continental States
+[I don't the upper bound on states, but there are at least three,
+known collectively as the Midlands]
+#### The Midlands
+North of the Marble Isle
+[I need to figure out the bodies of water to get more details.]
+Etra, Vala, Isla [transcribe from notebooks]
+### The Provinces
+There are several provinces which are much less wealthy than the
+central states, but contain the majority of the empire's population.
+#### The North
+There is a great difference between the area of the north claimed by
+the Empire, and that controlled by the Empire. The only area of the
+North from which the Empire has ever successfully collected taxes is
+the southernmost border settlements in the Chill-Lands (of which there
+are 12) and the narrow strip of land directly surrounding Fort North.
+It is often said that a single southern town could more than match the
+value of the entire Northern province of the Empire, and that may be
+true in terms of wealth or resources, but in reality few forts
+anywhere in the Empire can brag the same quality of recruits brought
+into the Imperial Legion as from the tiny northern province and
+outlying regions.
+The occasional goliath barbarian or glacier dwarf fighter making their
+way south and wanting to try their hands (and axes) at Legion life is
+more than enough incentive to keep the Empire's northern holdings
+fully staffed, supplied, and cared for.
+#### The Midwood
+The Northwestern-most stretch of the Deepwood, this is the most
+'civilized' area of that great forest, or at least that most citizens
+of the Empire could ever hope to reach.
+Full of elves, gnomes, florans, faunus, halflings, and their kin, the
+Midwood is one of the most ethically non-human locations in the
+empire. Regiments of the Empire's military raised from the Midwood
+are often called 'menageries' and use strange, but undoubtedly
+effective, tactics in combat.
+[The ghostwise halflings come from an ancient ruin just outside the
+### The Colonies
+Colonization is the empire's newest tool for expansion.
+#### Cover Islands
+Oft beset by pirates and even more often by deadly storms, the Covers
+are an expensive and dangerous colony to keep. That said, the islands
+remain one of the few places for the empire to acquire rare volcanic
+minerals and alchemical agents useful in the development of magical
+After the Black Tongues were disbanded in the Empire, many fled to the
+islands, where they find, fewer and more lax regulations on their
+### The Golden Road
+Running from the Citadel of Ice in the North to the Feet of the Last
+King in the South and twisting, diverging, merging, and turning around
+all sorts of places in between, the Gold Road is revered as sacred,
+and it's tireless, invisible creator worshiped by those who would
+seek safety traveling along its many gleaming golden cobblestones.
+The Golden Road belongs to the Golden God, though it is claimed by the
+Empire where it overlaps land claimed by the Empire. That said, the
+Golden Guides maintain control of the road regardless of the claims.
+You need a Golden Guide for the golden road, or you'll travel 100
+miles and never lose sight of where you started, or worse, you'll go
+90 miles to see your destination right ahead of you, then 90 more
+without it seeming to get any closer.
+The Golden Guides are either Travel Domain Clerics or (Fiend or
+Celestial) Warlocks. Despite the ambiguity, the Golden God himself is
+actually an Icon and a Fiend, a powerful one at that, and was involved
+in the discovery of the spell which created the tiefling pact. Once a
+gnome, the Golden God can be built as a [Gnome (Fine) Wizard 15
+(Transmutation)/Patron 5/Icon 5].
+The Golden God always needs more gold for the road, and the standing
+orders of the Golden Guides are to find and aid parties that can
+supply large quantities of gold. The Golden God builds the road
+daily, moving it slowly towards an unknown end.
+#### Lair
+The whole of the Golden Road is the Golden God's Lair. The gnome
+himself is cloaked in a Perpetual Greater Invisibility spell (via
+level 5 Icon power) and can cast *fabricate* at will.
diff --git a/src/apocrypha/ b/src/apocrypha/
new file mode 100644
index 0000000..d9423a5
--- /dev/null
+++ b/src/apocrypha/
@@ -0,0 +1,91 @@
+title: "Regions of the North"
+updated: "2017-12-23 Sat 14:21"
+categories: AP LD
+## Regions of the North
+The North is comprised of seven major areas, the White, the Wall, the
+Wastes (or Spiritlands), the Chill-Lands, Fort North, the Vast, and
+the Sunpeaks.
+### The White
+The White is a region of bitter cold at the northern edge of the
+world. It is constantly snowing from an eternal blizzard that swirls
+around the edge of the world. It's chilling winds and subzero
+temperatures make the White one of the most inhospitable places in
+existence. But it is not empty.
+Ice wights roam the icy plane, remnants of those who knew the land
+before the coming of the storm. But even these are benign compared to
+the greatest danger of the frozen north, The White Death.
+Her lair lies hidden in mountain crag, covered deep with snow. The
+greatest of her kind, the White Death is an ice dragon of unspeakable
+size and power. It is said that she has seen beyond the boundary of
+the world and glimpsed the great beyond. She wants to forget.
+Her presence in the cavern inadvertently protects one of the eight
+Shadefalls (the permanent anchor and gateway to one of the eight
+shades, in this case, the Icebright), from which she also is able to
+draw energy to heal herself and power her Icy Breath, which magnified
+by the power of the Shadefall, has the ability to turn creatures fully
+caught in it to ice.
+### The Wall
+TODO - Goblins, Giants, and the Throne on the Golden Road
+### The Wastes (the Spiritlands)
+Roving tribes of frost goliath and half-frost goliath barbarians roam
+the area known as the Wastes. Drawn to the area by the presence of
+the Giants to the north, the barbarians are always alert to the
+dangers of the Frozen Throne and regularly form war parties to destroy
+whatever designs or advances are made by the Frost Giant kingdom.
+They do not do so out of any loyalty to the empire, but out of a sense
+of reverence to the land itself and for some, a sense of paternalist
+duty towards the unknowing smallfolk to the south.
+The tribes come together for the biennial meeting at the ancient
+circle of stone known as 'gianthome'. It is a sacred location and is
+said to be the location of the ancient ritual which created the first
+TODO - Gianthome Circle, non-goliath inhabitants, faunus, spirits
+### The Chill-Lands
+TODO - Twelve-Towns
+### Fort North
+The only part of the north which can accurately be described as being
+controlled by the Empire.
+TODO - Fort North
+### The Vast
+The mountain plateau of swirling frozen wind and thousands of natural
+shifting gateways into the Icebright. The entire area is suffused
+with magic, which causes creatures that spend too long inside the area
+to grow in size and risk becoming shaded.
+A creature shaded by the Icebright, cannot leave the Icebright or the
+Vast without suffering penalties [???]. A creature born in the Vast
+which has resistance to either Radiant or Cold damage may be able to
+gain the benefits to size given by the Vast without becoming shaded.
+TODO - magic of the vast, geography, peoples
+#### Cities in the Vast:
+##### Monastery of the North Wind
+##### City of Glass
+Home to a powerful sorcerer [Air Genasai Frozen Heart Sorcerer 18/Patron 5] who TODO
+### The Sunpeaks
+Huge mountains. Connected to the Upperlight. Sun-soul monks and
+clerics of Tabor. Conflict with the Coastal Colonies (and Black
+Tongues, who have tried to take it over) . Not officially part of the
+empire, though not for lack of trying on the part of the Emperor and
+the nearby barons.
+TODO - Description of warming due to gateway, sunlight, constant daytime
diff --git a/src/apocrypha/ b/src/apocrypha/
new file mode 100644
index 0000000..17387a6
--- /dev/null
+++ b/src/apocrypha/
@@ -0,0 +1,133 @@
+title: "The Gournal of Geographic Affairs: The Sun-Touched Mountain"
+updated: "2017-12-23 Sat 14:20"
+categories: AP WB
+# The Gournal of Geographic Affairs: The Sun-Touched Mountain
+Welcome Readers, to the second Special Edition of our illustrious
+catalog of facts and figures.
+Last year, after our exploration of the Lowerdark's Cragmag Caverns
+proved such a fantastic success, we set our sights higher: to answer a
+[nagging] reader's question. Lola, age 8, from the Valanacian city of
+Florora, has been sending us letters. Over two hundred letters to be
+precise. Each has asked the same question,
+"Deer GGE, what is the talest mowntun [sic] in the world?"
+And while we don't usually reward improper spelling, her insistence,
+and the fact that no expert in the world seemed to know a precise
+answer, convinced us to settle it once and for all. Who knew that
+simple question one year ago would spark a fantastic journey of
+discovery and collaboration that may have ramifications beyond what we
+dreamed possible. Returning laden with treasures only one month ago,
+the GEE (& co.) Expedition has brought us the greatest treasure of
+all: an answer.
+Dear Lola,
+The greatest mountain in the world stands atop the far-northern range
+of snowy mountains known as the Sunpeaks.
+Since the entire northern ridge is filled with enormous mountains
+dwarfing (or maybe even gnoming) all other mountains found elsewhere,
+it was rather difficult for our sages here at the Imperial Center for
+Geographical Excellence to locate the general area of the range in
+which the peak might exist, much less its correlative parallel, and
+the sheer size of the range combined with its namesake ever-present
+blinding sunlight made clairvoyance and scrying spells of little use
+above 50,000 ft.
+Yes, you read that right. 50,000. That's almost three times the
+height of Mount Pang and twice that of the Skyknife, but in the
+Sunpeaks, that's barely passing for average.
+But fear not dear readers. The Geournal for Geographical Excellence
+is here to quench your thirst for knowledge. For comparing the several
+dozen peaks which form the Upper Cluster, we had to go to extreme
+lengths (and heights). Simply put, we had to go there.
+With our collaborative sponsors, The Community Climber, Aerial
+Affairs, Snowpeak Tea, and a grant from the Ministry of Maps, we
+raised 1.3 million Imperial silver swans (a little more than the
+monthly taxpayer cost to support an entire legion of cavalry), to
+finance a voyage into the unknown, staking both our reserves and our
+reputation on the Expedition.
+We spared no cost, hiring only the best of the best. Trackers,
+weatherworkers, guards, and guides, we set out into the Plateau of the
+Sun to find our answer.
+Six months we searched the pockets of mountains that exceeded our
+50,000 mark, listening to local legends, sending up balloons, and
+using a combination of our savvy and our ability to take small arcane
+gateways to cross from peak to peak. And those were fruitful months,
+even though we had yet to locate our quarry, days spent mapping and
+drawing, nights spent gazing into the clearest sky anywhere in the
+world (and then mapping and drawing it too)!
+We had found mountains. Tall ones. But had we found the tallest?
+We wouldn't know for almost three more months. The answer, it seemed,
+was always no. We would crest a peak, only to find another rising
+above us on the horizon. We had to to maintain a constant litany of
+darksight spells to see (without going blind) and frost spells to
+avoid melting (while in the sun) and fire spells to avoid freezing
+(while in the shade).
+We had to conjure air to breathe.
+And it was in these inhospitable conditions that we found them. Not
+mountains, those would come later, but our guides and our salvation.
+We were somewhere precisely north of the 47th parallel, when one of our
+forward seers called for a halt. He had found a body. We assumed the
+worst, and began to prepare a frost-bag for storing it to take back
+with us when we came down the mountain (as we'd had to do with most of
+our veritable zoo of animals by this point).
+Imagine our surprise when the body rose to greet us with a smile.
+He was a bald human man, and no more than a few years into his young
+adulthood, and was absolutely blind, and fairly near naked. He led us
+to his small mountain abode, filled with others like him. They called
+themselves monks, but when I asked them about their order, they had
+Though I would have offered the poor unregistered fellows use of my
+official quill and Imperial ink (had it not been alternatively frozen
+and then boiled) to register with an approved order, they assured me
+that they had no interest in the ways of the 'folk from down
+below'. Upon our request (and a few oddities accepted in exchange,
+namely a small bowl made of True Timber and a pair of hollow diamonds)
+the unregistered 'monks' agreed to aid us towards our goal (though I
+gathered the distinct impression that they very much acquiesced
+primarily in order to rid themselves of us).
+Two weeks after meeting with the 'monks' we had found it.
+The Sun-Touched Mountain.
+So, Lola, I'm sure you're lost interest by now, being the petulant and
+insistent child that you are, but deep within the Sunpeaks, beyond the
+ken of the civilized peoples, stands the tallest mountain in the
+We didn't climb it; we didn't dare. And our humble guides requested
+that we saved ourselves the trouble. For we had found it. High above
+the world, on a ridge of mountains the locals call 'The Edge' stands
+the impossibly massive peak.
+Shrouded from below by almost constant cloud-cover and the jutting
+cliffs of that massive ridge, we only dared observe it from afar. The
+expanse between the ridge and the cluster we found ourselves on was
+measured in miles.
+Our best calculations put the height of the Sun-Touched Mountain at a
+staggering 179,400 ft. And at it's peak, a brilliant day's Sun.
+I'll never forget the sight.
+Thank you Lola. Now please stop writing us.
diff --git a/src/ b/src/
index 8b2becd..8cd5ee5 100644
--- a/src/
+++ b/src/
@@ -1,37 +1,95 @@
+## 2017-12-26 AndrewMurrell &lt;;
+Added PDFs, moved tastavi to writing, and added more apocrypha worldbuilding docs
+## 2017-12-25 AndrewMurrell &lt;;
+converted org to md
+## 2017-12-24 AndrewMurrell &lt;;
+started the center sea and the empire
+ config.yaml | 4 +-
+ src/apocrypha/ | 8 +++
+ src/apocrypha/ | 120 +++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 130 insertions(+), 2 deletions(-)
+## 2017-12-23 AndrewMurrell &lt;;
+link fix
+ src/apocrypha/ | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+## 2017-12-23 AndrewMurrell &lt;;
+Region: The North
+ src/apocrypha/ | 85 ++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 85 insertions(+)
+## 2017-12-23 AndrewMurrell &lt;;
+Fix a 404.
+ src/apocrypha/{ =>} | 0
+ .../{ =>} | 0
+ 2 files changed, 0 insertions(+), 0 deletions(-)
+## 2017-12-23 AndrewMurrell &lt;;
+updated the categories for the apocrypha items
+ src/apocrypha/ | 12 ++++++++++++
+ src/apocrypha/ | 12 ++++++++++++
+ 2 files changed, 24 insertions(+)
+## 2017-12-23 AndrewMurrell &lt;;
+removed some janky psionics
+ src/dnd/ | 220 -------------------
+ src/dnd/ | 570 -------------------------------------------------
+ 2 files changed, 790 deletions(-)
+## 2017-12-23 AndrewMurrell &lt;;
+Added the start of the apocrypha.
+ src/apocrypha/ | 17 +++++
+ src/apocrypha/ | 125 +++++++++++++++++++++++++++++++
+ src/apocrypha/index.yaml | 1 +
+ 3 files changed, 143 insertions(+)
+## 2017-12-23 AndrewMurrell &lt;;
+Updated the About with an Epigraph
+ src/ | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++-------
+ 1 file changed, 51 insertions(+), 7 deletions(-)
## 2017-01-24 AndrewMurrell &lt;;
remove unfinished sources
- src/dnd/ | 1504 -------------------------------
- src/dnd/{ =&gt;} | 0
- src/dnd/ | 683 --------------
- 3 files changed, 2187 deletions(-)
## 2017-01-14 Andrew Murrell &lt;;
updated Psionist Title page
- bin/pre-generate | 2 ++
- src/dnd/{ =&gt;} | 4 ++++
- 2 files changed, 6 insertions(+)
## 2017-01-14 Andrew Murrell &lt;;
Added an updated Psionist class with more complete domains, but no mind powers yet.
- src/dnd/ | 566 ++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 566 insertions(+)
-## 2017-01-04 Luke Shumaker &lt;;
+## 2017-01-04 Luke Shumaker &lt;;
Change the title of "Psionist" -&gt; "Psionist Class [5e]"
- src/dnd/ | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
## 31 August 2016
Decided that the 1/5th of 'Magic is Magic' that was 'finished' was
diff --git a/src/dnd/Collaborative_Gestalt_Leveling_v0.1.pdf b/src/dnd/Collaborative_Gestalt_Leveling_v0.1.pdf
new file mode 100644
index 0000000..d9bea85
--- /dev/null
+++ b/src/dnd/Collaborative_Gestalt_Leveling_v0.1.pdf
Binary files differ
diff --git a/src/dnd/Collaborative_Gestalt_Leveling_v0.1.yaml b/src/dnd/Collaborative_Gestalt_Leveling_v0.1.yaml
new file mode 100644
index 0000000..2e90f01
--- /dev/null
+++ b/src/dnd/Collaborative_Gestalt_Leveling_v0.1.yaml
@@ -0,0 +1,4 @@
+author: "Andrew Murrell"
+title: "Collaborative Gestalt Leveling"
+categores: "HB" \ No newline at end of file
diff --git a/src/dnd/Learning_a_Language_v1.0.pdf b/src/dnd/Learning_a_Language_v1.0.pdf
new file mode 100644
index 0000000..e79ab04
--- /dev/null
+++ b/src/dnd/Learning_a_Language_v1.0.pdf
Binary files differ
diff --git a/src/dnd/Learning_a_Language_v1.0.yaml b/src/dnd/Learning_a_Language_v1.0.yaml
new file mode 100644
index 0000000..23fef4d
--- /dev/null
+++ b/src/dnd/Learning_a_Language_v1.0.yaml
@@ -0,0 +1,4 @@
+author: "Andrew Murrell"
+title: "Learning a Language"
+categores: "HB" \ No newline at end of file
diff --git a/src/dnd/OracleSorc1_0.pdf b/src/dnd/OracleSorc1_0.pdf
new file mode 100644
index 0000000..375a105
--- /dev/null
+++ b/src/dnd/OracleSorc1_0.pdf
Binary files differ
diff --git a/src/dnd/OracleSorc1_0.yaml b/src/dnd/OracleSorc1_0.yaml
new file mode 100644
index 0000000..0828e54
--- /dev/null
+++ b/src/dnd/OracleSorc1_0.yaml
@@ -0,0 +1,5 @@
+author: "Andrew Murrell"
+title: "Sorcererous Origin: Oracle"
+categores: "HB"
+--- \ No newline at end of file
diff --git a/src/dnd/ThePatron_1.1.pdf b/src/dnd/ThePatron_1.1.pdf
new file mode 100644
index 0000000..5a4fb79
--- /dev/null
+++ b/src/dnd/ThePatron_1.1.pdf
Binary files differ
diff --git a/src/dnd/ThePatron_1.1.yaml b/src/dnd/ThePatron_1.1.yaml
new file mode 100644
index 0000000..fac431c
--- /dev/null
+++ b/src/dnd/ThePatron_1.1.yaml
@@ -0,0 +1,4 @@
+author: "Andrew Murrell"
+title: "The Patron Prestige Class"
+categores: "HB"
diff --git a/src/dnd/YARV_Ranger_1.2_with_Community_Subclasses_1.1.pdf b/src/dnd/YARV_Ranger_1.2_with_Community_Subclasses_1.1.pdf
new file mode 100644
index 0000000..68db5ef
--- /dev/null
+++ b/src/dnd/YARV_Ranger_1.2_with_Community_Subclasses_1.1.pdf
Binary files differ
diff --git a/src/dnd/YARV_Ranger_1.2_with_Community_Subclasses_1.1.yaml b/src/dnd/YARV_Ranger_1.2_with_Community_Subclasses_1.1.yaml
new file mode 100644
index 0000000..a6a0670
--- /dev/null
+++ b/src/dnd/YARV_Ranger_1.2_with_Community_Subclasses_1.1.yaml
@@ -0,0 +1,4 @@
+author: "Andrew Murrell"
+title: "Yet Another Ranger Variant (YARV)"
+categores: "HB" \ No newline at end of file
diff --git a/src/dnd/drews_rules.pdf b/src/dnd/drews_rules.pdf
new file mode 100644
index 0000000..65ffb89
--- /dev/null
+++ b/src/dnd/drews_rules.pdf
Binary files differ
diff --git a/src/dnd/drews_rules.yaml b/src/dnd/drews_rules.yaml
new file mode 100644
index 0000000..70a57e6
--- /dev/null
+++ b/src/dnd/drews_rules.yaml
@@ -0,0 +1,4 @@
+author: "Andrew Murrell"
+title: "Drew's Rules"
+categories: "HB"
diff --git a/src/dnd/ b/src/dnd/
deleted file mode 100644
index 9f71b15..0000000
--- a/src/dnd/
+++ /dev/null
@@ -1,220 +0,0 @@
-#+TITLE: Schools of Psionics
-#+CLASS: dnd
-From what I've seen, the most recent few 5e Unearthed Arcana dealing
-with "Psionics and the Mystic" have been getting somewhat mixed
-reviews. I don't think this is because of the mechanics--or rather
-not COMPLETELY because of the mechanics. Mechanics for psionics have
-always been weird, and the 5e style is good for D&D, so maintaining
-that is good and won't get any gripes from me.
-But I think that no matter what purely mechanical tweaks the UA team
-has planned for the Mystic, the general lukewarm reception isn't going
-to change unless we get something else squared away first. Something
-a little deeper--something that helps us grasp Psionics in the same
-way we grasp Magic: with a complete and intuitive system.
-With Weave-based magic there are schools which somewhat delineate
-magical effects (conjuration, divination, etc), but that's not exactly
-what I mean. Not to bash the magical schools (any system will have
-inconsistencies--mine notwithstanding), but few people really
-understand what it means to be a wizard by what school of magic they
-specialize in. An enchantment wizard isn't fundamentally different
-from an evocation one. But a wizard is different than a bard or a
-warlock. These "Schools of Psionics" are as much about the state of
-mind of the manifester and the method for manifestation as they are
-about the outcome of the manifestation (there are several of my
-Psionic "schools" that may each manifest effects in the transmutation
-school of magic for instance, but each according to its own particular
-What I mean is this:
-| | Introvertion (a) | Extroversion (b) |
-| Mind (1) | Cogitation | Domination |
-| Body (2) | Sympathy | Manifestation |
-| Time (3) | Prescience | Anticipation |
-| Space (4) | Metapsionics | Apportation |
-There are eight categories split into two primary focuses and four
-topical domains, and each of the eight describes HOW a power is
-manifested. It tells us what our character is DOING to get the
-blasted power to work. As a D&D culture, we know how wizards do it,
-careful study and recitation, memorization, etc. We know how Bards do
-it, they hear the music of creation and wrap their words in it. All
-these effects are propagated through Mystra's Weave and are bound by
-it's limitations. But nobody has a clue how Psionics works. Or
-rather, we all have half-baked ideas that don't jive.
-In order for this to work, we need to know in canon, what it means to
-BE A PSIONIST and manifest powers. I'm probably no different than
-anybody else in my half-baked understanding, but as a Physicist and an
-editor I feel it is my duty to try to make sense of this mess.
-First off, since we don't have a Weave, but all magic needs a medium,
-lets make one. Lets call it the Psionic Field. Created spontaneously
-from the first thinking being (or Source), the Psionic Field exists on
-any plane containing thought. Some sources of psionic power are
-stronger than others, but all thinking things produce some connection
-to the field (some might wonder if magic and the Weave itself is
-naught but an echo of Mystra's or Auppenser's mind--and in that light
-perhaps the Psionic Field is not so foreign after all).
-With that medium in place, the world of Psionics slowly falls into
-place as well. Detailed descriptions of the eight schools follow:
-1a) Cogitation - Clarity of thought, memory, action, and connection to
-the Psionic Field.
-Cogitation is often one's first exposure to Psionics. It's a
-clear-mindedness that opens up your own mind to see itself for the
-first time, and beyond that, to sense the edges of the minds of
-others. It includes the stereotypical bloody-nosed mind reading,
-mimicry, and perfect recall.
-Examples of Cogitation include "Detect Thoughts" and "Mind Meld" and
-the ability to learn or borrow skills and proficiencies directly from
-the minds of others.
-1b) Domination - Exert dominating willpower over other minds.
-Once you've encountered sources outside yourself it is only natural to
-try to influence or even dominate them. Exerting your will into the
-minds of others isn't the same as reading their thoughts, you might
-not know what your target is thinking, only that it will succumb.
-Examples of Domination include "Command", "Suggestion", and "Dominate
-2a) Sympathy - Exerting influence upon sympathetic objects.
-The Psionic Field is produced by thinking creatures, but it can leave
-an imprint on even mundane objects and materials. Objects may be
-imbued with Psionic energy to produce a variety of effects, and may
-soak up ambient energy by just sitting within the Psionic Field which
-can be later be discerned by a Psionist to know about an object's
-history. This is done by expanding your sense of self outward from
-your mind and body and into the object.
-Examples of Sympathy include "Psychometry", "Animate Objects", and
-"Guards and Wards".
-2b) Manifestion - Creating both illusory and physically manipulable
-constructs of pure thought.
-By focusing and condensing ideas down to their most concrete forms,
-Psionists can manifest the essence of a thing as either an illusion or
-as a real physical object made of Astral matter (ectoplasm). Astral
-matter is most commonly associated with the Astral plane (or plane of
-thought) where it occurs naturally, but can exist anywhere with a
-sufficient psionic field for a Psionist to conjure it.
-Examples of Manifestation include "Mage Hand", "Conjure Astral
-Construct", and "Programmed Illusion"
-3a) Prescience - See and feel other places and times.
-Because the actions of thinking things (sources of psionics) are not
-stagnant, their movements create ripples in the Psionic Field.
-Births, deaths, and exchanges of knowledge leave their marks. By
-studying these echos and patterns, Psionists can discern events that
-occurred in distant parts of the world or even in the past or future.
-Examples of Prescience include "Detect Poison and Disease", "Scrying",
-and "Foresight".
-3b) Anticipation - Solidify expectation and possibility into reality.
-In many ways the Universe itself is just composed of the interactions
-of groups of sources of psionism and the objects being pulled in their
-wake (albeit a rather large number of each). With an awareness of the
-way ripples propagate in the Psionic Field and by using the techniques
-of Sympathy but directing them outwards, a Psionist can begin to
-subtly manipulate expectation and the laws of Physics themselves.
-Examples of Anticipation include "Heat Metal", "Telekinesis", "Reverse
-Gravity", and "Time Stop".
-4a) Metapsionics - Manipulating sources of Psionism and their direct
-The way that thinking creatures interact with the Psionic Field is
-complicated and diverse, just as the creatures which produce it are
-themselves. By studying how the minds of Psionically-attuned
-creatures create Psionic and even Magical Weave-based effects, a
-Psionist can learn to imitate or manipulate psionic effects as they
-see them (and sometimes use what they've learned to imbue limited
-psionic potential into others).
-Examples of Metapsionics include "Detect Magic", "Counterspell", and
-4b) Apportation - Pulling and pushing on planar boundaries with the
-Psionic Field.
-Since the material plane is not the only one with thinking creatures,
-some far-minded Psionists can detect the Psionic Field existing on
-other planes of existence and pull on these remote fields of power.
-Doing so can banish alien creatures, abjure harmful elemental effects,
-or even tear open portals to distant planes and places.
-Examples of Apportation include "Dimension Door", "Banishment", and
-"Whitefire Portal"
-== Post Script ==
-Q: Specifics (where do these fit in?) - A: Answer
-What about Soul Knives??? - A soul knife is just an adept who uses a
-combination of Manifestation and Sympathy to conjure a blade and imbue
-it with different Sympathetic effects. In a similar way, you can use
-these eight to extend specific domains on to different classes.
-Psionic warrior? Uses Sympathy to strengthen his body and Prescience
-to predict the strikes of his enemy. Psionic rogue? Apportation to
-teleport around or Cogitation to read minds to cheat at cards (or
-memorize the deck). Once the system is in place, the variations build
-themselves because you know what's possible and what isn't.
-Restriction breeds Creativity. You gotta know the rules to use them.
-What's all this about "Psionist?" Isn't it "Psion" - In my
-understanding a "Psion" is a mystic who uses metapsionics to
-manipulate her own mind into casting spells with the Weave. It is
-also a term that gets some use for a general practitioner of psionics.
-It is also one of those 4e tattoo addicts... just a really overloaded
-term really. Psionist sounds the best to me as a general term like
-What's the difference between Sympathy and Anticipation when
-moving/lifting things? - In Sympathy, you convince the object to move
-by extending your sense of self into it and lifting it yourself, in
-Anticipation, it moves because you trick the Universe into thinking
-the object should already be moving and so the Universe does it for
-you. Expanding self is all monk-like vs. essentially casting Luck
-Bending spells.
-Apportation includes an allusion to "Whitefire Portal". What's that? -
-Oh, just this cool thing I made:
-*Whitefire Portal*: You burn a temporary hole through the Astral Plane
-and into another plane of your choice. Once per long rest, centered on
-a point within 300 ft of you, you summon raw Astral ectoplasm which
-burns with hellish, white-hot fury. Any creature standing within 20
-feet of the whitefire must make a Dexterity saving throw or take 12d10
-fire damage or half on a successful save. Inanimate objects in the
-area also take the damage and flammable objects may catch on fire. A
-portal then opens to the chosen plane as with a Gate spell and remains
-open for 1 minute as the planes slowly knit themselves back
-together. Alternatively, instead of a specific location on a plane of
-your choice, you may choose to have your portal open into a generally
-inhospitable location in one of the elemental planes or the planes of
-positive or negative energy. If you do so, creatures who enter or
-begin their turns within 20 feet of the portal take 6d10 damage of the
-appropriate elemental or energy type.
-I'm actually working on an entire Psionist class for eventual
-publication on the Dungeon Master's Guild (or as part of my
-"MagnumOpis-MagicOfTheMultiverse" which covers EVERYTHING magical as I
-understand it). Of course if somebody #wotcstaff wants to buy it
-and/or hire me, I'd be totally up for #theorycrafting for a living.
diff --git a/src/dnd/ b/src/dnd/
deleted file mode 100644
index accd563..0000000
--- a/src/dnd/
+++ /dev/null
@@ -1,570 +0,0 @@
-#+TITLE: [5e] Psionist Class - Rewrite [ALPHA]
-#+CLASS: dnd
-#+HTML_HEAD_EXTRA: <style type="text/css">#content { padding: 0px 16%; width: 68%; } body { background: url(Background3.png) repeat-y; background-size: 100%;} </style>
-* Introduction to the Psionist Class [5e]
-* The Psionist
- As a Psionist, you gain the following class features.
-** Hit Points
- * *Hit Dice*: 1d6 per psionist level
- * *Hit Points at 1st Level*: 6 + your Constitution modifier
- * *Hit Points at Higher Levels*: 1d6 (or 4) + your Constitution modifier per psionist level after 1st
-** Proficiencies
- * *Armor*: Light armor
- * *Weapons*: Simple Weapons
- * *Tools*: None
- * *Saving Throws*: Intelligence, Wisdom
- * *Skills*: Choose two skills from History, Insight, Investigation,
- Medicine, Perception, or Religion
-** Equipment
-You start with the following equipment, in addition to the equipment
-granted by your background:
- * (a) a spear or (b) a mace
- * (a) leather armor
- * (a) light crossbow and 20 bolts or (b) any simple weapon
- * (a) a scholar's pack or (b) an explorer's pack
-** Psionist Class Progression Table
-| | Prof. | | | Max | | |
-| Level | Bonus | Features | Psi | Power | Cantrips | Powers |
-| | | | Points | Level | Known | Known |
-| 1 | +2 | [[Mind Powers][Mind Powers]], [[Thought Sensitivity][Thought Sensitivity]] | 4 | 1st | 3 | 2 |
-| 2 | +2 | [[Psionic Focus][Psionic Focus]] | 6 | 1st | 3 | 3 |
-| 3 | +2 | Psionic Discipline Feature | 14 | 2nd | 3 | 4 |
-| 4 | +3 | Ability Score Improvement | 17 | 2nd | 3 | 4 |
-| 5 | +3 | | 27 | 3rd | 4 | 5 |
-| 6 | +3 | Psionic Discipline Feature | 32 | 3rd | 4 | 6 |
-| 7 | +3 | | 38 | 4th | 4 | 7 |
-| 8 | +3 | Ability Score Improvement | 44 | 4th | 4 | 7 |
-| 9 | +4 | | 57 | 5th | 4 | 8 |
-| 10 | +4 | [[Psionic Domain][Psionic Domain]] | 64 | 5th | 5 | 9 |
-| 11 | +4 | | 73 | 6th | 5 | 10 |
-| 12 | +5 | Ability Score Improvement | 73 | 6th | 5 | 10 |
-| 13 | +5 | | 83 | 7th | 5 | 11 |
-| 14 | +5 | Psionic Discipline Feature | 83 | 7th | 5 | 12 |
-| 15 | +5 | | 94 | 8th | 5 | 13 |
-| 16 | +5 | Ability Score Improvement | 94 | 8th | 5 | 13 |
-| 17 | +6 | | 107 | 9th | 5 | 14 |
-| 18 | +6 | Psionic Discipline Feature | 114 | 9th | 5 | 15 |
-| 19 | +6 | Ability Score Improvement | 123 | 9th | 5 | 16 |
-| 20 | +6 | [[Perfect Mind][Perfect Mind]] | 133 | 9th | 5 | 17 |
-** Mind Powers
-All Psionic abilities except those that cast spells are mind
-powers. Intelligence is your psionic ability for your mind
-powers. Your intellect determines the strength of the psionic effects
-you manifest. In addition, you use your Intelligence modifier when
-setting the saving throw DC for a mind power or when making an attack
-roll with one. Manifesting mind powers does not require verbal,
-somatic, or material components unless those components have an
-explicit cost associated with them or are consumed.
- * *Restriction on High Level Powers*: Psionic Powers of sixth level
- and higher take a drastic mental toll when manifested. You may only
- manifest one sixth, one seventh, one eighth, and one ninth level
- power per day.
-*** Psi Points
-Psi points represent a Psionist's pool of mental energy. It expands as
-she gains levels in the Psionist class and becomes more powerful. When
-manifesting powers, she uses a number of psi points according to the
-table below.
-| Power Level | Point Cost |
-| 1 | 2 |
-| 2 | 3 |
-| 3 | 5 |
-| 4 | 6 |
-| 5 | 7 |
-| 6 | 9 |
-| 7 | 10 |
-| 8 | 11 |
-| 9 | 13 |
-All spent psi points are recovered after a long rest.
-*** Psionic Ability
-*Mind Powers Save DC* = 8 + your proficiency bonus + your Intelligence
-*Mind Power Attack Modifier* = your proficiency bonus + your
-Intelligence modifier
-** Thought Sensitivity
-As a Psionist, you are attuned to the thoughts and feelings of
-others, as well as the concentration of psionic energy in an area.
- * It is more difficult for a group of people to surprise you. If
- you enter an area with a group of five or more hidden creatures,
- you feel their presence and cannot be surprised by them. You can
- not determine their location relative to you or where they are
- hiding.
- * As an action you can examine an object or creature within 10 feet
- of you to psionically determine whether or not it has a mind. You
- cannot determine this if it is shielded or immune to having its
- mind read.
-** Psionic Focus
-When you reach 2nd level, you may choose to focus your psionic
-potential in one of two directions: inward or outward.
-*** Internal Focus
-*Psionic Recovery*: Once per day when you finish a short rest you may
-regain a number of psi points equal to your Psionist level (up to 9).
-*** External Focus
-*Force of Will*: Once per short rest when manifesting a mind power you
-may add your proficiency bonus to your Mind Power Attack Modifier or
-Mind Power Save DC. You must choose to do so before the roll is made.
-** Psionic Domain
-When you reach 10th level, you may choose to focus your psionic
-potential towards an aspect of reality: mind, body, time, or space.
-*** Mind Domain
-*Psionic Restoration*: Once per short rest on your turn you may remove
-a mind-altering condition from yourself. Alternatively, you may use an
-action to end a mind-altering condition from a creature you
-touch. These may be Charmed or Frightened.
-*** Body Domain
-*Psychoportation*: Your movement speed is increased by 10 ft and you
-gain proficiency in dexterity saving throws.
-*** Time Domain
-*Chronostutter*: Once per short rest on your turn you gain an
-additional bonus action.
-*** Space Domain
-*Far Manifestation*: The max range of your psionic powers with ranges
-greater than self is increased by 20 ft.
-** Perfect Mind
-Over years of study and experience in the Hidden Art, you have
-mastered the use of your most powerful psionic powers. Upon reaching
-20th level, the restriction on manifesting high level powers no longer
-applies to sixth and seventh level powers.
-** Psionic Disciplines
-Psionic Disciplines represent the ways in which Psionists interact
-with the Psionic Field and manifest their powers. You select a
-discipline at 3rd level and it grants abilities at 3rd, 6th, 14th, and
-18th levels.
-| | Internal | External |
-| Mind | Cogitation | Domination |
-| Body | Sympathy | Manifestation |
-| Time | Prescience | Anticipation |
-| Space | Metapsionics | Apportation |
-*** Cogitation [4/4]
-Clarity of thought, memory, action and connection to thinking creatures.
-*Mimic Skill*: At 3rd level, you learn to tap into the minds of those
-around you to temporarily mimic their skills. As an action, you may
-target a creature within 30 feet of you. An unwilling creature makes
-an wisdom saving throw or is affected. You may learn a skill, armor,
-weapon, or tool proficiency from the targeted creature. You may only
-mimic one proficiency with this ability at a time, but may target a
-new creature at will. The targeted creature must have the chosen
-proficiency for you to gain it. You retain the proficiency while in
-the presence of the mimicked creature, but the proficiency disappears
-when the creature moves more than 30 feet from you.
-*Touch of Tongues*: If a creature speaks at least one language, as an
-action you may concentrate to translate their intentions, though not
-their exact wording, into a language you know. This uses your
-concentration for manifesting mind powers or casting spells and the
-effect ends when you cease concentrating on it.
-*Tactician*: You learn to use sensory information from those around
-you when aiming your manifestations. When determining if you can see a
-creature or object for a spell, mind power, or other ability, you may
-use the senses of any creatures within 60 feet of you instead of your
-own. An unwilling creature makes a wisdom saving throw or is
-*One With All*: You thrive in areas of high density psionic
-energy. Once per long rest, you may enter a psionic trance which
-provides a variety of benefits. While in the trance you gain
-proficiency in all skills, languages, and saving throws, automatically
-succeed concentration checks, and any psionic abilities that you
-manifest or spells you cast are considered to be manifested or cast
-from one level higher (maximum of 9th level). This effect lasts a
-number of minutes equal to the number of thinking creatures within 60
-feet of you when you enter the trance (maximum 10 minutes). Your own
-senses are considered blinded and deafened for the duration. After
-the trance ends you gain 1 level of exhaustion.
-*** Sympathy [4/4]
-*Psionic Blade Ward*: You learn to ready your body to withstand
-damaging strikes. As a bonus action, you may spend a psi point to
-manifest the psionic cantrip Blade Ward (you don't have to be able to
-manifest that cantrip normally).
-*Empower Object*: You learn to imbue objects with psionic energy to
-produce a minor effect. As a bonus action, you may touch an object of
-size small or smaller and choose to imbue it with one of the following
-effects until the beginning of your next turn:
- * Light: The object gives off a faint glow which illuminates 30
- feet of the surrounding area in dim or bright light (your choice).
- * Heat: The object gives off extreme heat. Touching the object deals
- 2d8 fire damage.
- * Silence: All sounds within 5 feet of the object are silenced as
- with a Silence spell.
- * Pain: Touching the object produces an illusory sense of pain which
- deals 3d4 psychic damage.
- * Weight: The object's weight is reduced by 10 pounds. If this would
- reduce the object's weight to 0, the object floats in the air.
-If a chosen affect applied to an object would deal damage, you and any
-number of chosen creatures are immune to taking that damage from that
-*Reliable Psychometry*: You may manifest the 2nd level mind power
-Psychometry at will without spending psi points. Additionally, while
-in the attunement trance you may choose to move to the perspectives of
-nearby objects within line of sight of the object you hold. The effect
-ends if your chosen object ever leaves line of sight of the original
-*Kinetic Avatar*: You extend your sense of self into the world around
-you, animating and controlling objects and structures in your
-vicinity, then pulling them around you in a swirling cocoon of
-armor. The effect lasts for 1 minute. After the effect ends, you gain
-one level of exhaustion.
- * You gain a flying speed equal to your normal speed for the
- duration.
- * Your armor class increases by 10 for the duration, though this
- bonus decays as parts of your Avatar armor are destroyed.
- * You gain a number of temporary hit points equal to your Psionist
- level for the duration. Whenever you take damage your bonus armor
- class decreases by 1 as part of the armor is sheared away.
- * As an action you may shed 5 points of bonus AC to manifest the 5th
- level psionic power Animate Objects without spending psi
- points. The animated objects can fly. Maintaining control of the
- animated objects requires concentration.
-*** Prescience [4/4]
-*Detect Strike*: You sense when an opponent decides to strike you and
-can mentally prepare yourself. When you are attacked by a creature you
-can see, you may use your reaction to get a +2 bonus to armor class
-against that creature until your next turn. At 14th level, this
-increases to a +4 bonus. You may use this feature a number of times
-equal to your Intelligence modifier (minimum 2) per short rest.
-*Predict Disaster*: Once per short rest, when you make a roll at
-disadvantage, you may choose to roll normally instead.
-*Read the Past*: If you would roll less than a 20 on a History check,
-you roll a 20 instead. If a person you hear makes a statement about a
-past event, you can tell if they are lying.
-*Grand Oracle*: The Myriad possibilities of time: past, present, and
-future are laid bare before you. Through communing with the remnant
-collective consciousnesses present within the Psionic Field, you gain
-the following features:
- * You cannot be surprised.
- * You may manifest the 2nd level mind power Augury at will without
- requiring components or spending psi points. The cumulative 25%
- change of failure does not apply for the first manifestation of
- this power each day via this feature.
- * You may manifest the 5th level mind power Commune once per day
- without spending any psi points.
- * You may manifest the 6th level mind power Truesight once per day
- without spending any psi points.
-*** Metapsionics [4/4]
-*Extended Focus*: You may choose both options of the Psionic Focus
-feature (both Internal and External).
-*Diminish/Enhance Psionics*: You have learned the deep secrets of the
-Hidden Art. Once per short rest, when you or a creature you can see
-manifests a psionic power or you encounter an existing psionic effect,
-you may choose to apply one of the following effects to modify it as a
- * _Fork/Merge_: You may increase or decrease the number of affected
- creatures by 1 (this may not reduce the number of affected
- creatures to 0).
- * _Expand/Contract_: You may enlarge or reduce the area of effect by 5
- feet.
- * _Extend/Curtail_: You may increase or decrease the duration by 1
- minute (this doesn't apply to instantaneous effects).
- * _Shape_: You may change the shape of the area of effect (but not
- the direction). For example you could change a line to a cone.
-*Advanced Metapsionics*: You gain an additional use of your
-Diminish/Enhance Psionics feature per short rest and the following
-additional options.
- * _Counter_: You may make an Intelligence (Psionics) check against
- 10 + the power's level to end the effect.
- * _Splice_: When you manifest a psionic effect or see one being
- manifested, as a reaction, you may to choose a psionic power of 2nd
- level or lower that you know and add its effects (choosing targets
- separately within the area of effect or list of targets if
- applicable) to the manifestation. Doing so requires spending an
- appropriate number of psi points as if you were manifesting that
- power normally. You may not manifest that power at a level higher
- than its level.
- * _Reflect_: If a psionic effect would target just you, you may have
- it target the originator of the effect instead.
-*Unleash Potential*: Once per long rest as an action you plant a seed
-of psionic ability in a willing creature you touch. For 24 hours they
-gain the ability to manifest a psionic power of your choice of 2nd
-level or lower (or a cantrip) and gain 6 psi points. If you manifest
-this ability on the same target every day for a month (30 days), the
-change becomes permanent and the creature is considered to be able to
-innately manifest that ability. You may not grant more than one
-ability to a creature, nor can you target a creature that already can
-manifest psionic abilities. It's Mind Power Save DC and Attack
-Modifier are determined by its Intelligence.
-*** Domination [4/4]
-*Deep Suggestion*: You may manifest the second level mind power
-Suggestion once per long rest without expending any psi points. When
-you do, the creature you target has disadvantage on the saving throw.
-*Psychic Potency*: When you deal psychic damage to a target that is
-stunned, you may deal damage as though it were a critical strike.
-*Psychic Entity*: When you die, you may attempt to force your way into
-another creature's body to continue living. To do so, a target
-creature within 30 feet of you makes a Charisma saving throw. On a
-success, you die, otherwise, you take control of the target's body and
-force their consciousness into dormancy. You gain their physical
-features (Strength, Dexterity, Constitution) but retain all of your
-other traits. Once every 24 hours, or whenever you take damage greater
-than 50% of your max hit points, the dormant consciousness may attempt
-to resume control of the body by making a Charisma saving throw. On a
-success, you are forced out of the body and must either attempt to use
-this feature again on a different target or die.
-*Enslave*: Once per long rest as an action you may target a creature
-you can see within 30 feet of you. The target must succeed on a Wisdom
-saving throw or be charmed by you until you die or are on a different
-plane of existence from it. The charmed target is under your control
-and can't take reactions, and you and the target can communicate
-telepathically with each other over any distance. Whenever the charmed
-target takes damage, it can repeat its saving throw. On a success, the
-effect ends. No more than once every 24 hours, the target can also
-repeat the saving throw when it is at least one mile away from you.
-*** Manifestation [4/4]
-*Astral Armor*: As an action, you may conjure a coating of astral
-matter which covers the skin. This coating lasts for 1 hour and
-radiates dim light. Your AC becomes 13 + your Dexterity modifier for
-the duration. As a reaction, you may explicitly harden the coating,
-which temporarily increases your AC to 15 + Dex, but destroys the
-armor afterwards in a flash of bright light. Creatures within 5 feet
-of you when the armor is destroyed must make a Constitution saving
-throw or be blinded until your next turn.
-*Astral Weapon*: You learn to emulate the effects of the 2nd level
-Cleric spell Spiritual Weapon as a 2nd level mind power except the
-conjured weapon is considered to be made of Astral matter and radiates
-dim light. Additionally, the first time you manifest your Astral
-weapon each day, you may do so without spending psi points.
-*Durable Manifestation*: When you create or conjure a creature it
-gains 20 temporary hit points. While you are wearing your Astral
-Armor, you gain 20 temporary hit points.
-*Astral Affinity*: Powers and effects that create creatures or
-manifestations made of astral matter cost half as much to manifest and
-last twice as long (this includes those created by your Astral Armor
-and Astral Weapon features).
-*** Anticipation [4/4]
-*Force Repulsion*: As an action you may have target creature within 60
-feet of you makes a Strength saving throw. If it fails, it is pushed
-up to 30 feet away from you and requires spending twice its movement
-to approach you until your next turn.
-*Kinematics*: You learn the Minor Kinematics Cantrip with the slight
-differences noted below.
- * It does not count against the number of Cantrips known.
- * The number of objects or creatures that can be levitated is doubled.
- * The maximum weight of an object or creature that can be levitated is doubled.
- * When lifting objects with the Minor Kinematics psionic cantrip, you
- may attempt to attack a creature in range that you can see with
- those objects. This attack can be made as either an action or a
- bonus action using your Int modifier + your proficiency bonus to
- hit. You are considered proficient with these attacks and their
- damage is determined by the statistics of the objects being
- levitated (e.g. a longsword would deal 1d8 + your Intelligence
- modifier slashing damage and a levitated metal bucket would deal
- 1 + Intelligence bludgeoning damage). Floating objects can be
- attacked or pulled downwards, which causes the cantrip's effect
- holding them aloft to fail. If you attempt to make a ranged attack
- with a floating object, it must have the loading property and be
- loaded and such an attack may not be performed as a bonus
- action. You cannot load a weapon or activate a magic item using the
- Minor Kinematics cantrip.
-*Phasing*: Once per short rest, as an action on your turn, you may
-become intangible until your next turn. You may pass through solid
-objects and are invulnerable to nonmagical bludgeoning, slashing, and
-piercing damage, but not structures, boundaries, or weapons created by
-magical force. Your gear may become intangible with you. If you would
-end your turn inside an object, you take 6d8 bludgeoning damage and
-are ejected to the nearest unoccupied space. If you end your turn
-inside another creature, you both take this damage.
-*Time Skip*: Once per long rest you may target a creature within 60
-feet of you. That creature makes a Charisma saving throw. If it
-fails, that creature skips its next round of combat.
-*** Apportation [4/4]
-*Call Energy*: You feel the cosmic pull of the planes of Positive and
-Negative Energy. Once per long rest, as an action you may cover an
-20-ft radius sphere centered at a point you can see in planar
-energy. Choose either a) the Positive Energy Plane or b) the Negative
-Energy Plane. The covered area is either a) bathed in a dull glow or
-b) shrouded in a misty shadow which a) heals each living creature in
-range by 1 hp at the end of each creature's turn or b) deals 1 damage
-per turn to all living things in range and the end of each creature's
-turn. Maintaining this effect requires concentration and may last no
-longer than a minute.
-*Planar Abjuration*: Once per short rest, as a reaction to a spell or
-effect within 30 ft of you that would deal fire, cold, lightning,
-thunder, radiant, or necrotic damage, you channel the powers of the
-elemental and outer planes to reduce the damage dealt by an amount
-equal to your Intelligence modifier + your Psionist level. If the
-spell or effect has an area of effect, the damage each affected
-creature takes is reduced by this much. Damage reduction is applied
-before applying resistances.
-*Banishing Blasts*: Once per short rest, when a creature native to a
-different plane of existence than the one it is on takes damage from
-one of your mind powers, you may have it make a Charisma saving
-throw. If it fails this saving throw, it is banished to its plane of
-origin sound for 1 minute with a faint popping sound. While there, the
-target is incapacitated. When the minute is finished, it returns to
-the nearest unoccupied space from where it left.
-*Whitefire Portal*: You burn a temporary hole through the Astral Plane
-and into another plane of your choice. Once per long rest, centered on
-a point within 300 ft of you, you summon raw Astral ectoplasm which
-burns with hellish, white-hot fury. Any creature standing within 20
-feet of the whitefire must make a Dexterity saving throw or take 12d10
-fire damage or half on a successful save. Inanimate objects in the
-area also take the damage and flammable objects may catch on fire. A
-portal then opens to a plane of your choice as with a Gate spell and
-remains open for 1 minute as the planes slowly knit themselves back
-together. Alternatively, instead of a specific location on a plane of
-your choice, you may choose to have your portal open into a general
-location in one of the elemental planes or the planes of positive or
-negative energy. If you do so, creatures who enter or begin their
-turns within 20 feet of the portal take 6d10 damage of the appropriate
-elemental or energy type.
-*Mind Blast*: You magically emit psychic energy in a 60-foot cone.
-Each creature in that area must succeed on a Intelligence saving throw
-or take 5d8 psychic damage and be stunned for 1 minute. A creature may
-repeat the saving throw at the end of each of its turns, ending the
-effect on itself on a success.
-*Mind Meld*: As an action, you may touch a creature with an
-Intelligence of 5 or greater and attempt to meld your consciousnesses
-together. Doing so can be dangerous. If you attempt to meld with an
-unwilling creature, it makes a Wisdom saving throw to block the mental
-intrusion, otherwise a link is established. While the link is active,
-thoughts, emotions, and memories are shared freely between yourself
-and the creature. During a mind meld, since your minds are linked, it
-is more difficult to lie or to hide information. To do so requires a
-Concentration (Intelligence) contest for each lie or omission. Either
-party may attempt to leave the mind meld by repeating the wisdom
-saving throw (if you attempt to leave, you must also make a wisdom
-saving throw against your Mind Power save DC). If the link is broken
-in this way, or in any other way (such as the death of one of its
-participants or being physically torn from touching one another)
-before both parties explicitly agree to do so, both parties take 10d6
-psychic damage. You may only use this feature once per long rest.
-*Conjure Astral Construct*: Once per long rest, as an action, you may
-create an Astral construct from Astral matter pulled from the Astral
-Though you may customize the exact form of the construct to your
-liking, the statistics for the Astral Construct are the same as that
-of the Helmed Horror (page 183 in the Monster Manual) with the
-following exceptions:
-It gains up to three additional options from the list below (you may
-choose the same option more than once):
- * Extra Attack
- * See Invisibility
- * Flash and Bellow Attack (Creatures within 30 ft make DC 15 Con
- saves or are blinded and deafened for 1 minute. They may repeat the
- saving throw at the end of each of their turns. Once a creature
- succeeds, it cannot be affected again.)
- * 5d8 (22) Extra Hit Points
- * Extra Spell Immunity (Two additional spells)
- * +3 Damage on Hit
- * +1 AC
-*Imprisonment*: You learn the 9th level Wizard spell Imprisonment as a
-ninth level mind power. It does not count against the number of powers
-known, but costs the normal number of psi points to manifest. As a
-Mind Master, Imprisonment gains an additional option: Mind Prison. You
-may choose to Imprison the creature directly in your mind. There is no
-material component needed for this option. If you die or your
-consciousness leaves your body for a period longer than 8 hours (as
-with an Astral Projection spell), the prisoner is released. While
-imprisoned in your mind, the creature may sense what you allow it to
-sense and you may read the creature's surface thoughts as with a
-Detect Thoughts spell. No more than one creature may be imprisoned
-this way at a time.
-*Impose Will*: Once per short rest, you may cause a creature making a
-saving throw against one of your mind powers, abilities, or your
-psionic blast to have disadvantage on that saving throw. You must do
-so before the roll is made. Once you've used this feature on a
-creature, you may not do so again on that same creature until you
-finish a long rest.
diff --git a/src/feed.svg b/src/feed.svg
new file mode 100644
index 0000000..f12aab2
--- /dev/null
+++ b/src/feed.svg
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "">
+ This file was downloaded from The contents of this
+ file originally appeared as part of Firefox and are owned by
+ Mozilla. This license header was inserted by Luke Shumaker, as to
+ be in compliance with the original license.
+ The contents of this file are subject to the Mozilla Public License Version
+ 1.1 (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+ Alternatively, the contents of this file may be used under the terms of
+ either the GNU General Public License Version 2 or later (the "GPL"), or
+ the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ in which case the provisions of the GPL or the LGPL are applicable instead
+ of those above. If you wish to allow use of your version of this file only
+ under the terms of either the GPL or the LGPL, and not to allow others to
+ use your version of this file under the terms of the MPL, indicate your
+ decision by deleting the provisions above and replace them with the notice
+ and other provisions required by the GPL or the LGPL. If you do not delete
+ the provisions above, a recipient may use your version of this file under
+ the terms of any one of the MPL, the GPL or the LGPL.
+<svg xmlns="" version="1.1" width="128px" height="128px" id="RSSicon" viewBox="0 0 256 256">
+<linearGradient x1="0.085" y1="0.085" x2="0.915" y2="0.915" id="RSSg">
+<stop offset="0.0" stop-color="#E3702D"/><stop offset="0.1071" stop-color="#EA7D31"/>
+<stop offset="0.3503" stop-color="#F69537"/><stop offset="0.5" stop-color="#FB9E3A"/>
+<stop offset="0.7016" stop-color="#EA7C31"/><stop offset="0.8866" stop-color="#DE642B"/>
+<stop offset="1.0" stop-color="#D95B29"/>
+<rect width="256" height="256" rx="55" ry="55" x="0" y="0" fill="#CC5D15"/>
+<rect width="246" height="246" rx="50" ry="50" x="5" y="5" fill="#F49C52"/>
+<rect width="236" height="236" rx="47" ry="47" x="10" y="10" fill="url(#RSSg)"/>
+<circle cx="68" cy="189" r="24" fill="#FFF"/>
+<path d="M160 213h-34a82 82 0 0 0 -82 -82v-34a116 116 0 0 1 116 116z" fill="#FFF"/>
+<path d="M184 213A140 140 0 0 0 44 73 V 38a175 175 0 0 1 175 175z" fill="#FFF"/>
diff --git a/src/main.scss b/src/main.scss
index d32d6ee..0c5f0d5 100644
--- a/src/main.scss
+++ b/src/main.scss
@@ -1,159 +1,229 @@
+@import url(|Patrick+Hand+SC);
+* {
+ box-sizing: border-box;
body {
margin: 0;
padding: 0;
- font-family: Baskerville, "Goudy Old Style", "Palatino", "Book Antiqua", "Warnock Pro", serif;
+ background: rgb(255,255,240);
+ a {
+ text-decoration: none;
+ color: #1963b6;
+ &:hover, &:focus {
+ text-decoration: underline;
+ }
+ &:visited {
+ color: #460fb3;
+ }
+ &.external {
+ background-position: center right;
+ background-repeat: no-repeat;
+ background-image: url(external.svg);
+ background-size: 12px 12px;
+ padding-right: 13px;
+ }
+ &.feed {
+ background-position: center left;
+ background-repeat: no-repeat;
+ background-image: url(feed.svg);
+ background-size: 0.65em 0.65em;
+ padding-left: 0.8em;
+ }
+ }
header {
- width: 100%;
+ width: 20%;
+ position: fixed;
+ height: 100%;
+ left: 0;
+ top: 0;
+ display: flex;
+ flex-direction: column;
+ text-align: center;
+ font-family: 'Patrick Hand SC', sans-serif;
+ background-color: rgb(200,200,160);
h1 {
+ background-color: #ce795e;
+ padding: 0.5em 0;
margin: 0;
- background-color: rgba(0, 0, 0, 0.6);
- padding: 4px;
- padding-bottom: 0;
- text-align: middle;
- a:first-child {
- font-size: 50px;
- color: white;
- }
- &, a:not(:first-child) {
- color: white;
- font-size: 15px;
- color: white;
- }
a {
- text-decoration: none;
- }
- a:hover, a:focus {
- text-decoration: underline;
+ color: black !important;
nav {
- /* layout */
- line-height: 1;
- width: 100%;
ul {
- padding: 0;
+ display: flex;
+ flex-direction: column;
margin: 0;
- list-style: none;
- }
- li {
- display: inline-block;
- }
- a {
- display: block;
- }
- /* pretty */
- background-color: Maroon;
- a {
- padding: 0.2em 1em;
- font-size: 40px;
- color: GoldenRod;
- text-decoration: none;
+ padding: 0;
+ li {
+ display: block;
+ font-size: 2em;
+ margin: 0.25em 0.5em;
- &:hover, &:focus {
- background-color: white;
- }
- &:hover, &:visited {
- color: GoldenRod;
- }
- &:active {
- color: Black;
- }
- }
+ border: 2px solid #41403e;
+ border-top-left-radius: 255px 15px;
+ border-top-right-radius: 15px 225px;
+ border-bottom-right-radius: 225px 15px;
+ border-bottom-left-radius: 15px 255px;
- form {
- padding: 0.2em 0;
- font-size: 40px;
- display: block;
+ background-color: rgb(240,240,240);
+ transition: background-color 0.5s ease;
+ &:hover {
+ background-color: rgb(200,200,200);
+ }
- input {
- font-size: 25px;
- border: solid 1px #333333;
- vertical-align: middle;
- }
- input[type="search"] {
- max-width: 10em;
- }
- input:first-child {
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
- }
- input:not(:last-child) {
- border-right: 0;
- }
- input:last-child {
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
+ form {
+ display: inline-block;
+ width: calc(100% - 0.5em);
+ line-height: 0;
+ margin: 0.25em 0;
+ input {
+ width: 100%;
+ }
+ }
+article, footer {
+ width: 80%;
+ margin-left: 20%;
+ font-family: 'Neucha', sans-serif;
+ padding: 1em;
article {
- max-width: 6.5in;
- margin: 0 auto;
+ overflow: hidden;
.tag {
font-size: 60%;
- // this should work!
- font-family: Baskerville, "Goudy Old Style", "Palatino", "Book Antiqua", "Warnock Pro", serif;
- color: white;
- text-decoration: none;
+ color: white !important;
text-align: center;
+ margin-left: 2px;
padding: 4px 7px 5px 7px;
- border-radius: 2px;
+ border-top-left-radius: 255px 15px;
+ border-top-right-radius: 15px 225px;
+ border-bottom-right-radius: 225px 15px;
+ border-bottom-left-radius: 15px 255px;
.tag.ff { background: FireBrick; } { background: SeaGreen; } { background: DarkViolet; }
.tag.hb { background: DimGray; } { background: DarkSlateGray; }
- .tag.wp { background: GhostWhite; color: black; }
+ .tag.wp { background: GhostWhite; color: black !important; border-color: Gray; border: solid 1.2px LightGray; }
+ .tag.ap { background: #C00000; }
+ .tag.wb { background: #CC3399; }
+ { background: #003300; }
+ { background: #FF0000; }
+ .tag.ld { background: #CCCC00; }
- border-bottom: solid 1px #333333;
+ border-bottom: solid 1px #c9cacc;
footer {
- max-width: 6.5in;
- margin: 0 auto;
- padding: 1em 0;
- font-size: 60%;
+ font-size: 70%;
p {
margin: 0;
+/* Index pages ****************************************************************/
body.index {
+ @mixin card-container {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: flex-start;
+ }
+ @mixin card {
+ display: block;
+ background-color: white;
+ border: 2px solid #e6e7e9;
+ padding: 1em;
+ margin: 1em;
+ box-shadow: 15px 28px 25px -18px rgba(0,0,0,.2);
+ transition: box-shadow .5s ease;
+ &:hover {
+ box-shadow:2px 8px 4px -6px rgba(0,0,0,.3)
+ }
+ }
article {
- ul {
- list-style: none;
- display: table;
+ @include card-container;
+ font-family: 'Patrick Hand SC', sans-serif;
+ & > h1 {
+ display: block;
+ width: 100%;
+ text-align: center;
+ margin: 0;
+ }
+ & > ul {
+ @include card-container;
+ width: 100%;
padding: 0;
+ margin: 0;
li {
- display: table-row;
- line-height: 1.3em;
- & > * {
- display: table-cell;
- padding-right: 0.1em;
- }
+ @include card;
- a.external {
- background-position: center right;
- background-repeat: no-repeat;
- background-image: url(external.svg);
- background-size: 12px 12px;
- padding-right: 13px;
+ & > section {
+ @include card;
+ h2 {
+ margin-top: 0;
+ }
+ ul {
+ display: flex;
+ flex-direction: column;
+ padding: 0;
+ margin: 0;
+ li {
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ padding: 0.5em 0;
+ border-top: 1px dashed #d9d9d8;
+ .link-main {
+ display: inline-block;
+ max-width: 12em;
+ line-height: 1.5em;
+ }
+ .link-categories {
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ justify-content: flex-end;
+ align-items: flex-start;
+ }
+ }
+ }
+/* D&D-style pages ************************************************************/
body.dnd {
background: url(dnd/background.png) repeat-y;
background-size: 100%;
@@ -222,3 +292,33 @@ body.dnd {
font-weight:bold; }
+/* D&D-style pages ************************************************************/
+body.pdf {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ bottom: 0;
+ display: flex;
+ flex-direction: column;
+ article {
+ flex-grow: 2;
+ padding: 0;
+ p {
+ float: left;
+ margin: 0.25em -100% 0.25em 0.25em;
+ }
+ h1 {
+ text-align: center;
+ margin: 0.25em 0;
+ }
+ iframe {
+ width: 100%;
+ height: 100%;
+ }
+ }
diff --git a/src/dnd/ b/src/writing/
index 77efda6..d499fdb 100644
--- a/src/dnd/
+++ b/src/writing/
@@ -2,7 +2,7 @@
title: "Tastavi D'Maelnor of Llolethane"
updated: "2016-08-30 Tue 23:56"
class: "dnd"
-categories: SS
+categories: SS FR
diff --git a/tmpl/page.html.erb b/tmpl/page.html.erb
index 883ce9e..9d265e5 100644
--- a/tmpl/page.html.erb
+++ b/tmpl/page.html.erb
@@ -9,7 +9,7 @@
<body class="<%= html_class %>">
- <h1 class=breadcrumbs><%= Sitegen::breadcrumbs(url) %></h1>
+ <h1><a href="/"></a></h1>
<li><a href="/">Projects</a>
@@ -19,6 +19,7 @@
<form method="GET" action="/search.html">
<input type=search name="s" placeholder="Search" /><input type=submit value="🔍" />
+ <li><a class=feed href="/index.atom">Feed</a>
diff --git a/tmpl/ b/tmpl/
new file mode 100644
index 0000000..2ce7327
--- /dev/null
+++ b/tmpl/
@@ -0,0 +1,5 @@
+<%= pdf_metadata.to_yaml %>
+class: pdf
+<iframe src="<%= url.route_to(pdf_viewer_url) %>" ></iframe>