Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';}
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 .3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0em 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0em;}
.wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em 0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0em 0em 0.5em;}
.tab {margin:0em 0em 0em 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0em 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0em 1em;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0em 0.25em; padding:0em 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0em; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;}
#backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which use a logographic writing system and need larger font sizes.

body {font-size:0.8em;}

#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}

.subtitle {font-size:0.8em;}

.viewer table.listView {font-size:0.95em;}

.htmlarea .toolbarHA table {border:1px solid ButtonFace; margin:0em 0em;}
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none ! important;}
#displayArea {margin: 1em 1em 0em 1em;}
/* Fixes a feature in Firefox where print preview displays the noscript content */
noscript {display:none;}
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
<div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers:
* SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* MainMenu: The menu (usually on the left)
* DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser

Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs)

<<option txtUserName>>
<<option chkSaveBackups>> SaveBackups
<<option chkAutoSave>> AutoSave
<<option chkRegExpSearch>> RegExpSearch
<<option chkCaseSensitiveSearch>> CaseSensitiveSearch
<<option chkAnimate>> EnableAnimations

Also see AdvancedOptions
All Henchmen will begin with an Adventurer's Pack (and most smart characters will buy one for the bargain price of 35 gold).

Adventurer’s Pack:

A special default bundle of gear sold through all outfitters in Solstice. PC’s and NPC’s alike normally carry one for dungeon delving. Standard cost is 35 gold, and when full it weighs 40 lbs.

Leather Backpack (2), Torch x6 (6), Tinderbox (-), Knife (1), Hatchet (3), Rations, 1 week (7), Wineskin (2), 50’ Rope (12), Grappling Hook (3), Iron Spikes x12 (4).

The Hatchet has a heavy, wide head-backing, intended for use as a hammering tool for spikes. The Knife is no more than a pocket knife; if used in combat it will only deal 1 damage. The Pack is stuffed full as is, and won't hold much of anything unless items are removed/expended.

The Delvers Guild of Abernal has been advocating some changes to this standard outfitter fare. For some reason, thay are trying to get the various merchants across the land to include Wolvesbane, Belladonna, Garlic and Silver Mirrors to the pack. The merchants are reluctant, as the extra 40 gold per pack would end up hurting sales in the long run, or so they believe. To quote one anonymous outfitter, "If we over prepare these greenhorns, our sales might plummet without the constant influx of new blood." Read into this what you might.
Welcome brave adventurers to Campaign Seven, ‘Of Fortunes and Fools‘.

Of Fortunes and Fools will follow your adventures here in Solstice. Solstice is the world in which your characters are setting out to find their fortunes. The town which you all call home is named Bend. Bend is a town on the banks of the River Shaelar in northern Nelthad.

The citizens of Bend are a staunch lot, protecting the neighboring city of Abernal by maintaining a constant guard over the Oxneir Bridge, which spans the River Shaelar. To the north west lies Ilmar Forest, a dark and dangerous, thickly wooded region known to be home to many vicious subhuman races. To the north and east loom the Elblach Mountains, ominous upon the horizon, and shrouded in mystery. 

Ilmar is well known as the location of the fabled dungeon, Ulin Uthor, with it’s notorious ‘City Below’, and exaggerated ‘Hundred Pits’.  Ulin Uthor is a place of legend, surrounded by stories of epic battles and tragic defeat. It is also whispered that the treasure of a thousand Kings is buried deep within that place.

One of the better known stories concerns  a particular adventurer who was able to extract from the deeper levels of Ulin Uthor some great relic of arcane power. Returning with this fabulous treasure to Bend, the adventurer also managed to bring half the dungeon with him, hot on his heels in desperate pursuit. The hapless delver was slain in the very streets of that small town, and the relic recovered by those foul denizens of the deep down. It was then that an order was sent down from Abernal, that the great shaft which connected to all of the dark regions of Ulin Uthor, the so called Ten Talons, was to be caved in and forever sealed shut.

A few years passed before reports came back that another entrance to the dungeon had been uncovered. None of the denizens have again emerged bent on chasing adventurers, and Ulin Uthor’s reputation has been reestablished slowly, and is now again considered a source of prosperity for both Abernal and Bend.

Ulin Uthor is known to be a vast underground labyrinth of undetermined size and scope. Rumors exist of journals, logs and maps from previous adventurers, but the contents and locations of these priceless documents is apparently very well guarded. What you have managed to learn from idle chat, local legend and from One Eyed Ned at the Crook and Cabbage, is that young willing adventurous types such as yourselves need to seek out the uppermost area of Ulin Uthor, known as Krawl's Pace. You have also read notices and warnings of this place, some calling it Krawlspace, or even Kraw's Place. It is known to hide many devious traps, strange tricks, secret temples, and most of all, gold and gems. It is a place plied by both Bendsfolk such as yourselves, and denizens from the lower levels of Ulin Uthor. It connects in some way or another to the infamous Lahromil's Demise, the name for the next region of Ulin Uthor. Other than that, the rest is for you to discover.

It is to this newer entrance that you and your brave band of adventurers has traveled, having departed on foot from the North Tower just over a half day ago. The sun is setting in the west, and you are following the instructions on the map you purchased back in town. It was cheaper than hiring one of the guides available at the North Tower, but unfortunately it took a few criss-crosses of the region before the poorly drawn map made any sense.

You now stand overlooking a small, shallow stretch of a valley, surrounded on both sides by pine trees. Ancient, crumbling steps of stone lead into the valley, some 20 or so, long and wide, curve down to a large hole in the ground. You’ve been told that a nice, safe entrance is to be found here. So far, that appears to be the case.

The hole in the ground is in fact a stone shaft some 15’ across, circular and rimmed inside with a crude winding stairwell of stone steps, leading down into what must be the upper most levels of Ulin Uthor, known as Krawl’s Pace. 

Filled with both relief at having finally found the entrance, and anticipation of the dangers that lie ahead, your band decides to forge on ahead into the dungeon. There will be no camping here tonight. 

This tiddler will be used for important information which the players might find useful.

Ulin Uthor is known to be a vast underground labyrinth of undetermined size and scope. Rumors exist of journals, logs and maps from previous adventurers, but the contents and locations of these priceless documents is apparently very well guarded. What you have managed to learn from idle chat, local legend and from One Eyed Ned at the Crook and Cabbage, is that young willing adventerous types such as yourselves need to seek out the uppermost area of Ulin Uthor, known as Krawl's Pace. You have also read notices and warnings of this place, some calling it Krawlspace, or even Kraw's Place. It is known to hide many devious traps, strange tricks, secret temples, and most of all, gold and gems. It is a place plied by both Bendsfolk such as yourselves, and denizens from the lower levels of Ulin Uthor. It connects in some way or another to the infamous Lahromil's Demise, the name for the next region of Ulin Uthor. Other than that, the rest is for you to discover.

Notable NPC's located at the North Tower of Bend:

Altor (Human), Inn Keeper and sometimes Bartender at the Crook and Cabbage.
Vak Shelak (Dwarf), Altor's silent partner, retired delver.
One Eyed Ned (Human), bartender at the Crook and Cabbage.
Mennaker (Human), Outfitter, basics, odds and ends, miscellaneous gear.
Lorech (Dwarf), Blacksmith, basic weapons, shields.
Silas (Elf), Bowyer/Fletcher.
Detmor (Hobbit), Leather Worker/Tailor, Sells Leather Armor, Animal Pelts.
Serge (Human), Alchemist, purveyor of oddities.
Fat Mandu (Human), Money Lender/Banker.
Mattie (Hobbit), Overland Guide.
Corwall (Human), Horse Merchant.
Terril (Human), Captain of the Guard, man in charge at North Tower, Champion.
Astell (Human), Cleric, Temple Bishop, Terril's advisor.
Polvail (Human), Cleric, Temple Vicar, retired delver.
Characters for OF&F will use the D&D Rules to start with. Later, supplemental races/classes will be available.

Each player rolls five potential characters (each is rolled using straight 3d6 in order), from that pool a beginning character is chosen.
[[Welcome to Solstice]]
[[Sham's Grog]]
The manner in which we will 'meet' for game sessions will hopefully evolve into a nice and easy solution for all players involved. At the outset, my plan is to direct players here to this tiddlywiki for initial information. Play will be conducted via online resources. 

I've been testing Screenmonkey, and it looks like a good option. It's a free program that only the DM needs to run. The players all just locate the game, once I have announced it, by going to the nbos screenmonkey planet links page. You join the game by going to the site with your web browser, clicking the announced game, and entering your last name and password.

Here's the link for finding the games I will host:

Normally the game name will be something like 'Solstice - OF&F' hosted by Sham.

To speed up play and make our sessions more chatting and less typing, we need to pick a good voip program, such as Team Speak, Ventrilo, or Skype. I still need to test these programs. Here's the link for Skype.

Players will need a functional microphone to talk, but even without one you will be able to listen if you join the chat.

Our first session will be one of trial and error, as we attempt to get everyone together online, socialize and see if the programs will work, and then roll up initial characters and discuss possible play schedules.

* Update for 1/18. Hartman and I tested Screenmonkey Lite tonight. If we can work out a few kinks it looks as though that will indeed be the program we use to host games. Only the GM needs the program, players simply need to visit screenmonkey planet on the net and play via browser. Next up will be choosing a VoIP program that's easy to use.

* Update for 2/13. Wow almost three weeks have passed since we addressed this. It seems that Jen was able to adjust my PC's settings as far as local network IP and firewall and routers etc etc and get this thing opened because Hartman was able to log into one of my SML (screenmonkey lite) games this past weekend!
Type the text for 'InterfaceOptions'
|''Name:''|LoadRemoteFileThroughProxy (previous LoadRemoteFileHijack)|
|''Description:''|When the TiddlyWiki file is located on the web (view over http) the content of [[SiteProxy]] tiddler is added in front of the file url. If [[SiteProxy]] does not exist "/proxy/" is added. |
|''Date:''|mar 17, 2007|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license| ]]|
version.extensions.LoadRemoteFileThroughProxy = {
 major: 1, minor: 1, revision: 0, 
 date: new Date("mar 17, 2007"), 
 source: ""};

if (!window.bidix) window.bidix = {}; // bidix namespace
if (!bidix.core) bidix.core = {};

bidix.core.loadRemoteFile = loadRemoteFile;
loadRemoteFile = function(url,callback,params)
 if ((document.location.toString().substr(0,4) == "http") && (url.substr(0,4) == "http")){ 
  url = store.getTiddlerText("SiteProxy", "/proxy/") + url;
 return bidix.core.loadRemoteFile(url,callback,params);
[[Campaign Introduction]]
[[Mini Intro]]
[[Ulin Uthor]] 
[[Game Sessions]]
[[Why Not AD&D?]]
[[OD&D FAQ]]
[[The Players]]
[[The Characters]]
[[Remember Dak!]]
[[Adventurer's Pack]]
[[Campaign Notes]]
[[Random Rubbish]]
[[Sham's Scrawlings]]
You find yourself at the entrance to a dungeon.

What do you do now?

edit: You can choose to do anything from here, as long as that choice is "We enter the dungeon". 
The following hirelings are available to add as Henchmen to an Entourage. All of them are looking for adventure and can oftimes be found at the Crook and Cabbage in The North Tower.

Weerwon Ilk, Dwarf FM
Kel Rinvel, Dwarf FM
Ghiragh, Dwarf FM
Max Mogh, Dwarf FM
Momindy, Dwarf-f FM
Melody of Iron, Dwarf-f FM
Ashwake, Elf FM/MU
Bogbreeze, Elf FM/MU
Duskdirge, Elf FM/MU
Fellwind, Elf FM/MU
Ravenwing, Elf-f FM/MU
Wee Wimley, Hobbit FM
Hamp Tiggle, Hobbit FM
Grimster, Hobbit FM
Scrimshaw, Hobbit-f FM
Bax Bramble, Hobbit Scout
Squeegles, Hobbit-f Scout
Tacto, Kobold FM
Scrunt, Kobold FM
Ratch, Kobold MU
Prodder, Kobold Shaman
Mighty Bucket, Human FM
Shahdrah, Human-f FM
Jack of the Axe, Human Barbarian
Gaylgorr, Human-f Barbarian
Zim of Windy Dale, Human Cleric
Wexwell, Human Cleric
Telltor, Human Cleric
Lesthelda, Human-f Cleric
Som-som, Human Shaman
Dam'Zylah, Human-f Shaman
Banjo Jim, Human MU
Iru'Gah, Human MU
Moximage, Human-f MU

All accept a minimum of 100 gold to hire, and one quarter share of plundered loot. Each is equipped with minimal arms and armor, and an Adventurer's Pack.

These section will serve as quick information in regard to major differences between OD&D and AD&D. It is not essential that the players in OF&F own the OD&D rule books, although it doesn't hurt. Even with the little brown books in hand, most of the information within is somewhat disorganized, and at times vague.

Q: What dice do I roll for Hit Points?

A: All Characters and Monsters use d6 for HP.

Q: What's this about Hit Points?

A: Your HP total is re-rolled every level, using the new total if it is higher, and the old total +1 if not.

Q: Clerics don't get a spell at 1st Level?

A: Nope. None. Clerics must reach 2nd Level to cast spells.

Q: Magic Shields do what?

A: Magic from Armor and Shields does not stack. Just take the highest bonus of the two.

Q: Why do you suggest using index cards instead of character sheets?

A: Because your characters will probably not live very long. Don't get too attached.

Q: How much damage do I do?

A: All weapons deal base 1d6 damage. Two-handed weapons add +1, certain other bonuses exist, but not many.

Q: What's with all the d6?

A: OD&D was based on minatures wargaming, before the advent of polyhedral dice. It can easily be changed to a pure d6 game. Besides, now those Fireballs and Lightning Bolts are much more potent. As a player, all you really need is a handful of d6, and a d20 (or even our old method of d6+d10 works).

Q: Criticals, Fumbles...are we using them?

A: For now, just natural 20's always hit, and deal double the damagage in dice, and 1's always miss. I am considering Arduin rules down the road. OD&D is dangerous enough without Critical Hits.

Q: Only three classes to choose from?

A: Yep, Fighting Man, Magic User or Cleric. Solstice does have rules for four Sublclasses, the Barbarian, Scout, Templar and Shaman. I encourage you to try these so I can alter them if needed. None of the classes are as powerful as a Celestial Crusader or Knight of Liberty!

Q: No Thief class?

A: Nope. OD&D didn't have the Thief until it was added via the Greyhawk Supplement. Any character may attempt to hide, sneak, search, climb, etc. 

Q: Why the sudden obsession with OD&D, Dave?

A: Because it's perfect for my home brew approach, and to quote a fellow OD&D fan: "Fun isn't a formula. Fun is what you bring to a game." 

Most of this information is located in the Solstice tiddlywiki, but these are some important differences between OD&D and AD&D.

Sham's info dump.

Ongoing Journal. Assign Journal duty to a player? 

Play Calendar/Schedule.

Player phone #'s/email list. I sent out invitations to a Yahoo! Groups site so we have a social message board and calendar.

Prepare Solstice booklet copies of the house rules for each player.
Develop Solstice Supplemental Rules. Races, Classes, Monsters and Treasure. Include light world info.
Solstice, Bloody Solstice log of deceased characters, including such information as date, manner and location of death.

Dak Shelak, Dwarf FM. February 2008. Lahromil's Demise Level 1. Fell to death in shaft. Buried by his brother, Vak.
As of 2/28/08 I have reached the decision that Solstice and the Of Fortunes and Fools campaign will use the original Dungeons and Dragons rules established in 1974 in Vol.s I, II and III, by Gary Gygax and Dave Arneson.

Original Dungeosn and Dragons (OD&D) is essentially a basic framework of rules which is perfect for my custom designing and home brewing tendencies. Certain aspects of OD&D might seem confusing at first for long time AD&D players such as ourselves. The actual Solstice rules are in this site's companion tiddlywiki found at

Be sure to read the first handful of sections at that site, concerning Character creation, and check out the Weapon, Armor and Combat sections so you have a basic understanding about melee.

If you want a copy of the OD&D volumes, it is available in PDF format at the below link for $5.99. Once purchased you can save it and print it as needed, and even dl it again at a future time for free.

I will provide the Solstice Core Rules and Supplements for each player in nice, neat booklet format. Most of those rules will also be copied to this tiddly
but the tables become off set with copy and paste. I have a nice Brother color laser printer which produces excellent copies. I simply print them in booklet duplex format, then fold and staple...viola! facsimile old school D&D booklets!
Dave aka Sham, author and Dungeon Master.

Long time D&D fanatic. Began playing with a homebrewed version of the Original D&D trilogy back in the late 70s. <edit> (and after 30 years had totally forgotten everything about those awesome little brown books. Now with PDF versions in hand, is moving into full-blown original D&D, home brewed the way it was meant to be.)

Quickly graduated to AD&D, entered High School, met a bunch of other addicts, and ran campaigns for them for over 18 or so years.

Then, Real Life took over. My D&D buddies moved away and began to behave like actual members of society.

Now, thanks to the wonderful world of interwebbed goodliness, I am striving to reunite the far flung cronies of old...'We're putting the Band back together!'

The author can be reached at

Disclaimer: The author's handle, 'Sham', is not to be confused with the actual sentient mini-golem Sham found in Illand'r. Such mistakes will likely incur the wrath of d00 Odin's Toes. You have been warned.
Visit my D&D Blog at

Who knows, you might even be mentioned in one of the posts!
6/5/08: It's been a couple months since I added anything here, and a lot has changed. I've decided to leave Solstice as is for now, until we actually play some. If I keep thinking about the rules, they will continue to evolve, and it's to the point now that it's ready (I could continue tinkering with the rules, but I think they've reached a semi-permanent state now). I have a ton of D&D projects I am involved with at this point. Not much will happen in regard to OF&F or Solstice until we play; I have a ton of dungeon material written up, and I've added a few twists to the D&D style that should prove to be fun (Entourage Approach and Style Points).

To date, I've finalized the D&D Group for emailing purposes.
Emailed everyone their personal 10 line Stat Block
Requested that everyone make two characters from that block, and name them
Bring a pencil on 6/28/08

What's left? We need to pick a time to play. We can do a rolling start as a lot of the first couple of hours will be socilaizing, rolling gold, buying gear, writing up index cards, and reviewing rules. 

I guess what I'm trying to say is that, other than buying food and drink, I am ready.

~Dave B

4/1/08: Solstice Tiddlywiki and OF&F Tiddlywiki are nearly 'complete' again, now that I have split this information into two sites, one for the Rules, and this one for OF&F campaign information.

I hope to be rolling dice before May, as the mega dungeon is finally approaching a more playable state as I had originally envisioned it.

Still no luck in contacting John, I hope all is well with him. Dave H mentioned that Dave S might be interested in playing as well, which is a bit of good news! Dave S participated in a few sessions towards the very end of our last long running campaign, and I think everyone except possibly Tom met him at that time, back when we played in Silver Spring. Has it really been nearly ten years?!?!

My number one priority is to reestabish our far flung gaming group, and to have actual live game sessions as often as possible. Given our divergent schedules and locations, though, I realize that online play will be needed in order to accomplish a sense of progression for the players in Solstice.

Hopefully my next update here will be the announcement of our fist meeting or session.


3/17/08: Happy St. Patrick's Day!

I have spent the past three weeks clarifying and home brewing the OD&D rules, and making the campaign based on the LBB only (That's little brown books, ie Vol.s I - III only).

I have been painstakingly seperating my mind from almost 30 years of playing AD&D in my interpretation of the OD&D rules. This means many of the rigid AD&D rules and flavor we have become accustomed to will not be used. Rather, I am putting together a true home brew old school 1970's D&D campaign. 

As of right now, I have clarified the races, classes and attributes based on information gleaned from other OD&D devotees at a few forums I frequent, and I have also home brewed three sub classes, and a dozen monsters (Gargoyles, Harpies, Gnomes, Trolls, etc) into an AD&D free interpretation. This should provide plenty of surprises for the players, and keep game play fresh and not simply a rehash of the rules we already all know like the back of our hands.

This long process has stalled some of my work on the Mega Dungeon, but I suspect if all goes well that it will still be ready to open it's doors by mid April. Before then, I hope to have contacted all of the players, have them up to speed on the rules and our method of play, have beginning characters written up, play test a session with screenmonkey, and work together to choose a play schedule. 

2/28/08: Hahaha call me crazy, but we are moving fast forward to using OD&D, clarified and home brewed into Solstice Core Rules for OF&F! This will require some light editing in the existing files, and many changes around here at the tiddly. Anyhow, after reading and considering OD&D, as it was meant to be played, I realize I was really missing the boat all those years. OD&D is clearly what inspired David Hargrave all those years ago. Just holding the little brown books brings back fond memories of the nostalgia and grass roots feel that Arduin, Booty and the Beast, The Necromicon, etc gave me back in the old days. Solstice will allow for limitless supplemental expansion upon the core rules while still maintaining that classic home brew 70s D&D feel. 

There's no need to bother getting the PDF and printing them as I have, I can supply everyone with the Solstice Core Rules, and I will have extra copies of the three little books for around the table at our gaming sessions.

For now it's back to work on conversion and finishing Ulin Uthor.

~Dave B

2/26/08: I blew the unearthly sum of <cough> $5.99 at to get the three volume OD&D set in PDF, and I printed them in Adobe booklet format, stapled the pages together, and made el cheapo versions of the original trilogy! So, suffice to say that OF&F will be just generic home brew FRPG rules, using OD&D, LL and whatever I feel like at the time. If I have time to really suss the OD&D trilogy before we start OF&F, we will use those rules. Some of it is, well...abstract (obtuse?). One aspect I really enjoy is the whole spirit of customizing, the authors are insisting that you play the game the way you want to, the very game begs to be interpreted by DMs into their own campaign/version.

Some aspects are vague or unclear, and I think some of it assumes that the reader owns the earlier rule book for miniatures, Chainmail. I don't and I won't incorporate that into this campaign. I'll just interpret the mish mash of rules as I feel best fits what I am trying to accomplish. If that means I end up with an incorrect interpretation, it can be amended later if needed (or taken as is). 

All of us are veterans of AD&D, so we understand the basic gaming conventions first introduced here with OD&D, and later refined (for better or worse) with 1st edition. 

Rather than use the authors' examples of campaign worlds (ie Greyhawk and Blackmoor supplements), we will make use of the (insert clever name here) supplement (either OF&F or Solstice, or some such name). This will interpret the OD&D rule set, and introduce home brewed races and classes.

For now, LL it is until I (IF I) become more comfortable with OD&D.

PS: Level 1 is essentially done, I've been working on various tables, and other meta dungeon aspects of Ulin Uthor. By Mid April I'll be ready to play full blown D&D, if we start before then we'll just roll characters and tackle the intro adventure. That would take up a few sessions more than likely.


2/13/08: As I said before, and what will probably be the theme of most of my updates here...progress is being made! ;-)

Finished a couple maps, added some rules, refined the weapons/armor table (and silly me left off Javelins: 1 hand melee: 1d3, 1 hand ranged to 60', 1d6.)

My reason for this scrawl tonight has been my reflection upon the whole LL vs 1st ed decision I made at the outset of OF&F's latest version.

As I 'house rule/fine tune' a few bits here and there of the LL rules, I realize that honestly, I could make this campaign run with just about any D&D rules version...OD&D, Holmes D&D, AD&D, Moldvay D&D, Mentzer D&D...maybe even 2nd ed. (definitely NOT 3rd ed or 3.5 though!).

If I had my old books I'd be tempted to go with OD&D for this campaign...but I feel Labyrinth Lord is a good, concise version of the classic rules I enjoyed almost thirty years ago as a teenager.

Once this campaign soars into full blown mode, I'm sure the 'rule set' will take a back seat to the world itself.

Honestly, the big difference is the characters themselves. In OD&D vs AD&D, the characters are much less relevant. Stats, skills, etc aren't as important as player decisions, player teamwork, player luck, and items. Obviously items can balance or unbalance any setting...but the thing about 'classic' is, the classes and skills aren't going to dominate the landscape. Decisions, teamwork and luck will play a huge role in whether or not a PC even makes it to the rarified air of say, level 6.

The whole theme of OF&F is the story of making it to level 6...the many character deaths along the way, the bad or good luck involved, the funny stories recounted over a round of pints, the unforgettable saving throw that meant the difference between total party kill, and total party wealth, the otherwise nondescript +1 axe that served as a valued sidearm and dealt the killing blow against a long time nemesis,...these things, these normally mundane details are what will make OF&F a great experience for all. It's not those things I am currently typing, collating, printing, drawing, designing, or otherwise fretting's the play itself, what you the players make of it. The classes and skills available to you...that's just a formality. Of Fortunes and Fools is for you...I am here to set the stage, provide the props, and draw forth the curtains, the opening act is yours to write...each and everyone of you are the true authors here! I am simply the producer.

~Dave B

2/8/08: Progress is being made. The bulk of the recent campaign design work has been expended on various tables and details of the archival version of Ulin Uthor. Nevertheless, the first level is nearly complete. I will feel comfortable running the dungeon soon. Many of the mechanics I will be using throughout Ulin Uthor were aspects of dungeoneering which we normally breezed over in the past. For example, wandering monsters are a big part of this dungeon crawl campaign. I never used them before, I always inserted keyed encounters, even if one felt like a random encounter, it was planned well beforehand. 

In our early campaigns, we also breezed through the entire process of exiting the dungeon. Not so with Ulin Uthor. The PC's will have to plan their explorations always keeping in mind that they will have to also extract themselves from the dungeon to rest and recharge. After any long dungeon session, there are likely monsters in pursuit, or at the very least, a chance for wandering monsters along the return route.

Mapping as we play online might be a real challenge, we will have to be patient as we get used to this style of gaming.

As a DM, I simply cannot resist the urge to tailor things to my style, thus the House Rules and Combat Rules pages continue to evolve. In addition, you can be sure that along the way in Ulin Uthor you will encounter many monsters, and discover many treasures which are not in the rule book.

I hope I can generate a level of excitement wihin you, the players, which I experience everytime I sit down to continue my campaign design work! I am looking forward to your first, tentative steps within the deep, dark depths of Ulin Uthor!

~Dave B

More meanderings: I know it won't feel as though we are playing a REAL game of D&D until we can roll actual dice and see painted miniatures and silly hand outs being passed around the table, not to mention secret hand written notes to the DM (I think we've all matured past that...right...RIGHT??). That said, I, like all of you, have a family that commands most of my weekends, BUT...if we have enough interest I know that we will eventually progress to real D&D if all goes well. That said, I can host sessions here at least once a month, and perhaps twice if we can swing it as a play group. I'm open to other host sites as well, schedule permitting.

Maybe we do live play a few times a year, and supplement that with short online sessions. I envision weekly online sessions, say about 4-5 hours a week, coupled with monthly, bi-monthly, semi-annual or whatever parties where we actually GET TOGETHER like the old days. My wife has been pushing for me to reestablish my ties with all of you, and (shocker) she might even want to play in some of the sessions. That said, I know she doesn't have the patience to actually hang out with us and play real D&D...but Derrick *might* (he's my 13 year old step son fyi).

Anyhooo, we need to just get this thing rolling ASAP, and the big hold up is my campaign prep, then contacting folks and getting a session style finalized (screenmonkey and voip looks promising to start). In the very near future I will be calling Claudy and Hartman, and emailing John, as well as tracking down Chris and Tom/Mike.

Whatever the outcome is, rest assured that I AM going to start DMing again. Whether it's our old group or new players, it's going to happen. I'm freakin' 41 years old and I have NOT made my perfect D&D campaign. This is IT. The years since we were playing regularly have FLOWN by. If I'm ever going to make a real campaign that I can hang my hat on, Of Fortunes and Fools is it. Dungeons are what I do well. Politics, stories, drama...I leave that stuff to you, the players, to propagate. The game is no bigger than the players. I learned long ago that involved plots and deep stories are lost upon the players. Rather, let the characters form the basis of the campaign. Thus, Ulin Uthor is YOUR sand box, to play in, to form lasting impressions. Let's be real, who can name more than two NPC's from any of my campaigns?

I've come to the realization that a big hole in my life is due to my lack of DMing D&D. Yeah 75% of that hole is filled with me designing campaigns, but I won't bother if I don't have players to adventure in them. 

Anyhow, hope to talk to all of ya in the next few weeks.

~Dave B

OK, so it's 12:15 AM on Saturday 1/26/08 and UU is off to a great start. This whole mega dungeon, and this actual campaign has been seething in my mind for about 7 years, since we last played as a group. Actually, our last half dozen or so sessions were with what I dubbed the 'classic campaign' which was pure AD&D 1st edition rules, and only Cupp and Hartman attended. That campaign was the intended to be a filler while I worked on Blackthorn, and Campaign Seven, Of Fortunes and Fools (yes that title has been in my head for a decade or so).

Anyway, the idea of those sessions was a huge dungeon, The Tower of the Overlord if anyone recalls, which would encompass the entire campaign. I think Chris and Dave had explored most of level five at one point. I still have the notes and maybe even the PC's. At the time I really enjoyed how that format allowed me to concentrate on the dungeon, and less on towns, NPCs, politics, back stories, motivations, etc. It was a big ass dungeon, and everytime the PC's returned, there were new monsters living on some of the levels. It had a lot of entrances though, allowing the group to bypass the low reward areas once they were higher level. 

This is the theme of OF&F. I never knew there was actually a genre for this style of campaign until a few weeks ago, it's called a Mega Dungeon. Apparently, many old school DMs like me, along with old school players like youse guys love this type of gaming. Well, at least I hope you do...I know I do.

Anyhoo, I'm down to maybe 20-30 hours of design work before I can really start the campaign, and allow a non linear feel to the dungeon. The whole dungeon will probably not be finished for ages, but that's not the point. It's a massive place, the initial plan calls for 40 maps and about 1,500 rooms. Yep. That's INITIAL plans. As soon as I complete the first two levels, and get levels 3+4 roughed out we can start. I'm into the room details for the first couple hundred rooms, so it's moving swiftly now. 

All I need is players! Once the first dice are rolled, I know my work will increase ten fold as I have to keep ahead of your progress. That said, rest assured that the theme, framework and basic history of the place is complete.

a mega dungeon campaign in Solstice
Of Fortunes and Fools

Solstice is a world or set of rules that has slowly grown from a collection of various campaigns I have hosted in the past. These past campaigns, six in all, spanned over a 20 year period. Each introduced new homebrewed rules, classes, monsters and treasures…but each was AD&D 1st edition at it’s core. The entire Arduin Grimoire collection was introduced into play in one form or another, and heavily influenced many of the customized rules which followed.

After Campaign Six ended (even though the story was never finished), my regular play group slowly disbanded. Toward the end of that 20 year era, I had begun an exhaustive treatment of the homebrew aspects of my campaigns. The result was a compendium of rules (supplanting AD&D altogether) which also introduced the world Illyr as a complete campaign world. The original version was titled The World of Blackthorn, or simply Blackthorn.

I gave copies of Blackthorn to my players just before we stopped playing Campaign Six. I stopped all gaming for a long period. During this time I worked on the upcoming Campaign Seven, and planned to play test Blackthorn at that time. After further research, I decided that Blackthorn was not a suitable name for my new rules. I redid many of the ideas contained therein, and planned on reworking and renaming the project Solstice.

Fast forward a few more years to the autumn of 2007. Solstice never got off the ground, although the continent upon which it was to be based had been worked out, named Varghalla. Along with my Campaign Six continent, Nelthad, I now had two somewhat fleshed out areas of Illyr (later renamed Illand’r). It was then that I decided my best approach would be to return to my roots. Campaign Seven will begin as original D&D, using Vol.s I-III as a basis, with customized Solstice information.

Solstice will debut with Campaign Seven in Nelthad. The continent of Varghalla is still there, with it’s many variant classses and races. Varghalla will be an ongoing project, with it’s shores not to be visited until later in Campaign Seven, and able to host further campaigns at a later date once the finishing touches have been made. I will eventually scan in the Illand’r World Map, and the detailed maps of both Nelthad and Varghalla. For now, Campaign Seven has been relocated to Bend, a small town east of Abernal near the River Shaelar in northern Nelthad.

Solstice Introduction:

The Solstice setting for D&D is not your typical high fantasy milieu. While it does have the trappings found in traditional fantasy, the overall mood and outlook is much more grim and gritty. This is not a world of damsels in distress and princes galloping to their rescue, this is a world where the cold harsh reality of evil and darkness pervade everyday life. Mankind is pitted against threats from within and without while the uncaring Fae look on, unconcerned with the meaningless, pitiful lives of mortals. Solstice is a world of ruthless dictators, murderous bandits, greedy merchants, power-hungry generals, corrupt clergymen, brutish lawmen and torch-bearing mobs. It’s a testament to mankind that it has not collapsed in upon itself. Were it not for the constant dangers presented by the monstrous beings of this world, perhaps mankind would have exterminated itself by now. 

Elves and Fauns, and the rest of the Fae of Solstice consider mankind the scourge of the world. Their fate is not linked with that of man, and Fae rarely enter into this realm of the mundane. Preferring to remain on the edges of civilization, the Fae pursue their own inexplicable and otherworldly endeavors. The only exceptions to this are those Elves and Fauns who have taken up the sword and the bow to further their own desire for riches and magical relics. These bold adventurers are often considered outcasts or loners by their own kind, and are truly the rarest of all Fae.

Dwarves rarely mingle with civilized man, due to their great and well earned distrust for any not of their own kind. Dwarves dwell in structured, rigid clan based settlements as old as history itself. Dwarves would be satisfied if they were the only living beings in Solstice, in order that they might master their crafts and trades without the unending interruptions from man and monster alike. 

Hobbits, on the other hand, are entirely concerned only with that which they themselves can experience. Their only cohesive efforts are those which ensure their comfortable, relaxed approach to life. Selfless and generous, Hobbits prefer their own kind but more than any other race in Solstice do in fact deal with mankind more readily. Hobbits have developed a certain crafty, shrewd nature in the face of the greed and avarice of mankind. Their kind is not taken advantage of easily.

Kobolds are the pitiful huddled masses of downtrodden, destitute cave dwelling, subhuman Goblin-kin. Their kind is not looked upon with pity in this dispassionate world. Kobolds have little to live for, and they know it. Having to work twice as hard to prove themselves and gain any form of success, Kobolds often end up following surface dwelling adventuring types. Those of their kind that do earn the respect of this normally heedless land are well-nigh mythical in Solstice. If nothing else, Kobolds are certainly the underdogs of this land.

Solstice is a land overrun by monstrous civilizations; mad wizards in lost towers; labyrinthine, inexplicable underworld dungeons; forgotten ziggurats of demon-worship; secret temples of forbidden rites; cities ruled by unprincipled despots; lost societies of Neolithic savages; vast unexplored wastelands; enigmatic ruins beneath the seas; frozen citadels atop colossal mountains; in short, a bleak, harrowing world of unreason, disorder and chaos.

It is within this world of Solstice that your tales of fortunes and fools shall be written. May your tales be remembered and retold.

This tiddler will be used to connect the various characters with their players, as well as notes on current locale/activity.

The Early Days

Two decades ago, a brave band of adventureres carved their names into the history of Ulin Uthor by being one of the first to rediscover Lahromil's Demise. The adventurers braved many of the dangers there, emerging with gold and magic, and retiring back in Bend wealthy, comfortable, and with many tales to tell of their exploits. It was a testament to the potential riches that were there in Ulin Uthor, even in the upper region of Lahromil's Demise. Soon, many more adventurers found there way there, but many, many more met thier untimely end deep in that dangerous dungeon. 

The first life lost within that dungeon, after it's rediscovery, was a Dwarf Fighting Man named Dak Shelak. Dak fell down a dead drop shaft, and was later buried with his ancestors by his younger brother, Vak. Dak was never forgotten, and over time his name would be remembered and used as an example for future delvers into this dungeon. The utterance "Remember Dak" is used with regularity when warning delvers of venturing too deep into the dungeon, or before descending into any of it's deeper pits and shafts. Remember Dak!

This Band took on the title 'Dak's Crew' afterwards, some say to 'cash in' on Dak's reputation, even though they were the ones who helped develop that very legend.

Dak's Crew, upon retiring, consisted of

Dimwell - Human Magic User. Nicknamed Dimwit by his fellows for his stubborness. Far from dim witted, though, Dimwell did often lose track of where he was. Current whereabouts unkown, but supposedly he is holed up in a secret tower somewhere.
Blake - Elf Fighting Man/Magic User. Also called Blake the Silent. Used her actions to do her talking. A master with swords and sleep spells. Left Bend after Dak's Crew split up. Rumor has it that she sailed for the far shores of Varghalla.
Polvail - Human Cleric. Polvail later rose to prominence in the Temple at the North Tower. Currently one of the three Vicars of the Temple.
Slinkin' Pete - Human Fighting Man. A self-professed dungeon crawler, Pete led many expeditions back to Ulin Uthor after Dak's Crew retired. An agile Fighting Man who excelled in dungeon delving tasks.
Vak Shelak - Dwarf Fighting Man. Became better known as 'Dak's Little Brother', much to his chagrin. Vak bought a share of the Crook and Cabbage, and in the years after Ulin Uthor was reopened, made a small fortune. He's still there sometimes, but prefers to stay behind the scenes. 

Beginning characters

Each player will have a stat block of 10 straight rolled characters. From this pool, the player will create both his Primary Character (s), and his Loyal Follower(s). Future characters will be created by using the remaining pre-rolls. Once these 10 have been killed, the player or myself will roll a new collection of 10 stat lines.

Remember to refer to the Prime Requisite method for increasing abilities.

Players may opt to declare that they are going to roll their own character. Exercising this option means the player MUST use that stat line to create the character. It is not added to the stat block, it is played immediately.

These are all rolled in the order of Strength, Intelligence, Wisdom, Constitution, Dexterity and Charisma.

Here's a edited Kobold Rule when using the 10 line Stat Blocks:

Kobolds use 2d8 instead of the standard 3d6 for their abilities.

The average of the two dice combinations is 1.5 points, with a -1 and a -2 variance at the extremes. So, I offer two options for beginning Kobolds:

1. Take a stat line, and subtract 9 points from the abilities. Each ability must lose at least 1 point, and 16 is the max for any ability. Remember you can adjust prime reqs with the OD&D method (if you have any points available after that). OR,

2. Name the class you want to play, and then roll a Kobold using the 2d8 method, in order. If you wish to play a Kobold Shaman, you need WIS 12, so option 1 might be better.

You'll notice I've been generous and rolling awful results over. Thus, there are few if any scores under 6. Why? I don't know, I guess I'm a softie. Derrick, who has now said he does want to play, has been added at the bottom. The lucky bum got two of the three 18's I rolled out of the 540 abilities. And no, I'm not playing favorites...I've already warned him I'll have to go out of my way to kill his characters frequently in order to prove that I don't play favorites! :-)

Dave H:

1: 9-11-9-6-9-6
2: 10-14-11-14-5-10
3: 9-8-10-11-12-11
4: 16-13-13-10-10-10
5: 14-8-17-14-13-11
6: 15-12-6-11-11-13
7: 6-15-9-12-16-11
8: 14-12-14-13-6-12
9: 12-9-16-11-10-13
10: 11-15-14-12-9-10

Dave C:

1: 15-8-7-12-12-13
2: 8-17-9-14-6-10
3: 12-13-8-11-7-9
4: 13-6-16-14-7-9
5: 9-13-10-8-15-9
6: 16-9-10-15-9-9
7: 6-11-14-14-8-13
8: 15-11-8-7-15-13
9: 6-13-16-16-11-8
10: 12-11-9-15-11-7

Thomas L:

1: 15-10-12-13-13-6
2: 16-9-6-10-10-8
3: 11-11-10-9-17-15
4: 15-11-11-13-15-16
5: 8-12-6-11-15-10
6: 6-18-10-12-15-12
7: 6-8-15-9-8-12
8: 9-11-16-12-11-15
9: 12-13-12-17-11-12
10: 12-10-11-8-7-13

Chris C:

1: 12-11-10-12-7-16
2: 16-8-9-7-16-8
3: 11-12-16-12-16-9
4: 12-13-7-8-9-14
5: 7-10-8-16-11-14
6: 13-12-6-11-9-12
7: 7-10-11-13-15-9
8: 12-9-15-7-13-8
9: 15-6-10-14-11-13
10: 9-15-9-17-11-11

John F:

1: 13-13-12-14-15-13
2: 13-6-13-13-8-15
3: 10-11-15-9-15-8
4: 13-17-12-13-8-8
5: 11-7-5-10-14-10
6: 10-9-12-12-12-13
7: 11-11-10-9-11-8
8: 16-9-7-18-14-11
9: 8-13-12-11-8-14
10: 11-16-10-9-11-11

Bill L:

1: 12-7-9-7-12-15
2: 6-10-16-9-12-15
3: 10-14-5-9-7-14
4: 10-8-6-14-13-12
5: 15-14-7-16-13-15
6: 11-10-13-5-9-12
7: 8-9-15-7-11-9
8: 14-13-13-11-15-12
9: 10-8-15-11-12-13
10: 9-15-11-15-7-9

Dave S:

1: 9-11-6-8-12-11
2: 9-12-13-10-16-14
3: 12-10-13-9-6-10
4: 12-13-13-14-10-6
5: 13-15-15-13-14-12
6: 12-13-13-8-8-10
7: 15-12-9-9-16-11
8: 13-10-13-11-16-12
9: 8-13-8-9-9-13
10: 10-11-7-10-15-15

Mike L:

1: 11-13-8-17-7-15
2: 8-10-7-11-13-10
3: 13-6-14-9-15-9
4: 11-7-9-11-12-13
5: 15-14-8-7-14-14
6: 6-7-13-16-13-12
7: 9-11-12-12-7-12
8: 12-9-13-7-9-9
9: 10-13-11-10-7-9
10: 14-11-16-14-9-11


1: 12-8-13-14-13-9
2: 9-13-12-18-7-12
3: 8-11-9-6-9-9
4: 14-7-13-11-11-13
5: 7-18-9-15-9-11
6: 12-11-12-11-6-7
7: 13-13-14-11-8-7
8: 12-7-8-16-10-11
9: 10-15-12-9-12-13
10: 7-7-14-9-8-11

I will be attempting to involve our old 'core players' in this new campaign. Session 1 has been scheduled for 6/28/08, time to be announced. 

Dave C - on board for session 1, 6/28/08
Chris C - on board for session 1, 6/28/08
John F - tentative for session 1, 6/28/08
Dave H - on board for session 1, 6/28/08
Mike L - on board for session 1, 6/28/08
Tom L - on board for session 1, 6/28/08
Bill L - possibility per John F
Dave S - will miss 6/28/08

and Myself (aka Sham) hosting session 1, 6/28/08

Contains the stuff you need to use Tiddlyspot
Note you must also have UploadPlugin installed

// edit this if you are migrating sites or retrofitting an existing TW
config.tiddlyspotSiteId = 'of.fortunes.and.fools';

// make it so you can by default see edit controls via http
config.options.chkHttpReadOnly = false;
window.readOnly = false; // make sure of it (for tw 2.2)

// disable autosave in d3
if (window.location.protocol != "file:")
	config.options.chkGTDLazyAutoSave = false;

// tweak shadow tiddlers to add upload button, password entry box etc
with (config.shadowTiddlers) {
	SiteUrl = 'http://'+config.tiddlyspotSiteId+'';
	SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>");
	OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>");
	DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[WelcomeToTiddlyspot]] ");
	MainMenu = MainMenu.replace(/^/,"[[WelcomeToTiddlyspot]] ");

// create some shadow tiddler content

 "This document is a ~TiddlyWiki from  A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.",
 "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// &nbsp;&nbsp;@@ Before you can save any changes, you need to enter your password in the form below.  Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + "]] (your control panel username is //" + config.tiddlyspotSiteId + "//).",
 "<<tiddler TspotControls>>",
 "See also GettingStarted.",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// &nbsp;&nbsp;@@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// &nbsp;&nbsp;@@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick.  You can make changes and save them locally without being connected to the Internet.  When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// &nbsp;&nbsp;@@ Find out more about ~TiddlyWiki at [[|]].  Also visit [[TiddlyWiki Guides|]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|]], which is an excellent place to ask questions and get help.  If you have a tiddlyspot related problem email [[tiddlyspot support|]].",
 "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// &nbsp;&nbsp;@@ We hope you like using your site.  Please email [[|]] with any comments or suggestions."

 "| tiddlyspot password:|<<option pasUploadPassword>>|",
 "| site management:|<<upload http://" + config.tiddlyspotSiteId + " index.html . .  " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<<br>>[[control panel|http://" + config.tiddlyspotSiteId + "]], [[download (go offline)|http://" + config.tiddlyspotSiteId + "]]|",
 "| links:|[[|]], [[FAQs|]], [[announcements|]], [[blog|]], email [[support|]] & [[feedback|]], [[donate|]]|"

 "<<upload http://" + config.tiddlyspotSiteId + " index.html . .  " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + "' class='button'>download</a></html>"

 "tiddlyspot password:",
 "<<option pasUploadPassword>>",

Of Fortunes and Fools
An Ulin Uthor primer for players.

Ulin Uthor is a mysterious, arcane labyrinth of unknown, ancient construction. Some say it has no end, that it’s lower levels stretch into the vast, unknown regions of Night, with powers fueled there by the nightmares of men. Some say it is the work of a long lost race, which predates the existence of Man. Others insist it is the playground of Demons, set to lure mortal man into damnation. Whatever the case may be, it is certain that there are dangers to face, foes to defeat, traps to avoid, riddles to solve and riches to be sought. In other words, a dungeon which beckons and invites the adventurous spirit within us all.

Ulin Uthor is an archetypal dungeon of immense proportions. It is not a place where one can conquer it’s challenges, or defeat the boss, or purge it’s evilness. It is a vital, changing environment of constant peril. As such, adventurers delving into these treacherous pits should keep their wits about them. Death lurks in these deep halls, possibly behind the next door, around the next corner, or beyond the next passage. The players should realize that there is a risk for every reward, and that almost all of the rewards within are far beyond their reach, currently. With this mindset, the players should cautiously guide their characters through the obstacles presented, never afraid to make a hasty retreat in order to return another day should the dangers prove too much to handle at the present time.

The dungeon invites brave, or even reckless adventurers to forge deeper and deeper, where the rewards are increased, but the risk is greater. Use caution, and only descend into the lower levels when you feel it is time to face stiffer competition, or heed the call and plunge into the more dangerous areas whenever the opportunity presents itself. The decisions you make are yours, and the risks they incur are yours to deal with as well, if you can.

The very notion of a vast, labyrinthine subterranean construction is, in itself, illogical. What forces or powers or even hands would attempt such an undertaking, to what end and for what purpose? Rational thought must be discarded when conceiving of a place such as Ulin Uthor. More specifically, upon entering Ulin Uthor, reason and meaning are lost, as the players and their characters enter a realm of illogic and magic. Far from the upper world, far from their homes, far from rational thought the adventurers will find themselves entering a world of unexplained terrors and inexplicable sorceries. The dungeon is not a simple hide-out for evil monsters, no it is a place where sanity and reason become more and more distant with each deeper level. A place where mortal man can indeed lose his way.

Those that embrace these notions and are able to outwit and defeat some of the perils within might one day etch their names in the pages of history. Those that do not will meet a hollow ending deep within Ulin Uthor, far away from our own world of logic and reason. Of Fortunes and Fools indeed.

Player Concerns - Dungeoneering

Getting lost in Ulin Uthor is always a possibility. With that in mind, players should take care to record their steps along the way, taking notes and making maps that will help them navigate and enable them to return home as needed.

Resource management is important during forays into the underworld. Food, drink and  light sources are vital to successful exploring. Gear for climbing or descending, for poking or prodding, for prying or loosening, and other mundane tasks is also helpful, if not downright essential for survival.

Time management is important. Time spent in the dungeon is a facet of resource management. If resources are running low, it may not be prudent to delve deeper into the unknown. One unlucky misstep might tax waning resources. There is no worse death than that met by starving, lost adventurers wandering about with no light amidst ferocious monsters and hidden traps.

Encumbrance is a necessary evil of dungeoneering. It is important that the players keep track of their characters encumbrance at all times. Deciding what to leave behind deep in the dungeon is never fun, but is often an awful truth…especially upon the death of a fellow character.

Forward bases can act as supply and resting safe areas. Setting up and protecting such camps can be challenging, but can spell the difference between being able to restock and heal at a nearby location, or having to travel all the way back to The North Tower, facing potential dangers while low on supplies and injured. 

Bases/Camps also serve as a holding area for such items that are impossible to take into the dungeon. Mules, horses, extra resources, chests, crates, bags and the like can often prove too cumbersome for dungeon delving adventures, but are helpful for adventurers for obvious reasons.

Protecting bases while the characters are in the dungeon should be handled by retainers. Retainers can be hired from town, and can be paid to manage camps while the PC’s are exploring…and hopefully returning with gold and treasure for all to share.

Successfully exploring a dark and dangerous dungeon like Ulin Uthor requires cooperative play, and teamwork. The skills of both the player and the character will be needed in order to make any progress in such a place. Due to the nature of the challenges within, a party of adventurers should have a well balanced mix of classes. A minimum party should be four or five complimentary characters.

Methods for dividing treasure will be determined by the players. It should be fair and equitable for all involved (including potential NPC’s). Greed and selfishness can destroy a party as quickly as the best laid traps.

Death is inevitable. It is possible that each and every beginning character will meet his demise within Ulin Uthor. Character death is a part of the game, and should be viewed as such. Death is not an end, but rather a way for the player to learn from his possible mistakes, and emerge a wiser player. With that in mind, remember that even the most cautious and experienced player can certainly be killed within Ulin Uthor, such is the roll of the dice. Of Fortunes and Fools indeed.

| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |
| 02/06/2008 11:54:02 | Sham | [[/|]] | [[store.cgi|]] | . | [[index.html |]] | . |
| 02/06/2008 12:02:55 | Sham | [[/|]] | [[store.cgi|]] | . | [[index.html |]] | . |
| 04/06/2008 23:57:20 | Sham | [[/|]] | [[store.cgi|]] | . | [[index.html |]] | . | ok |
| 05/06/2008 00:21:44 | Sham | [[/|]] | [[store.cgi|]] | . | [[index.html |]] | . | ok |
| 05/06/2008 00:37:04 | Sham | [[/|]] | [[store.cgi|]] | . | [[index.html |]] | . | ok |
| 05/06/2008 00:44:51 | Sham | [[/|]] | [[store.cgi|]] | . | [[index.html |]] | . |
| 13/06/2008 20:12:29 | Sham | [[/|]] | [[store.cgi|]] | . | [[index.html |]] | . |
| 14/06/2008 01:41:09 | Sham | [[/|]] | [[store.cgi|]] | . | [[index.html |]] | . |
| 16/06/2008 11:49:43 | Sham | [[/|]] | [[store.cgi|]] | . | [[index.html |]] | . |
| 24/06/2008 10:39:13 | Sham | [[/|]] | [[store.cgi|]] | . | [[index.html |]] | . |
|''Description:''|Extends TiddlyWiki options with non encrypted password option.|
|''Date:''|Apr 19, 2007|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license| ]]|
|''~CoreVersion:''|2.2.0 (Beta 5)|
version.extensions.PasswordOptionPlugin = {
	major: 1, minor: 0, revision: 2, 
	date: new Date("Apr 19, 2007"),
	source: '',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	license: '[[BSD open source license|]]',
	coreVersion: '2.2.0 (Beta 5)'

config.macros.option.passwordCheckboxLabel = "Save this password on this computer";
config.macros.option.passwordInputType = "password"; // password | text
setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle");

merge(config.macros.option.types, {
	'pas': {
		elementType: "input",
		valueField: "value",
		eventName: "onkeyup",
		className: "pasOptionInput",
		typeValue: config.macros.option.passwordInputType,
		create: function(place,type,opt,className,desc) {
			// password field
			// checkbox linked with this password "save this password on this computer"
			// text savePasswordCheckboxLabel
		onChange: config.macros.option.genericOnChange

merge(config.optionHandlers['chk'], {
	get: function(name) {
		// is there an option linked with this chk ?
		var opt = name.substr(3);
		if (config.options[opt]) 
		return config.options[name] ? "true" : "false";

merge(config.optionHandlers, {
	'pas': {
 		get: function(name) {
			if (config.options["chk"+name]) {
				return encodeCookie(config.options[name].toString());
			} else {
				return "";
		set: function(name,value) {config.options[name] = decodeCookie(value);}

// need to reload options to load passwordOptions

if (!config.options['pasPassword'])
	config.options['pasPassword'] = '';

		pasPassword: "Test password"

|''Description:''|Save to web a TiddlyWiki|
|''Date:''|May 5, 2007|
|''Author:''|BidiX (BidiX (at) bidix (dot) info)|
|''License:''|[[BSD open source license| ]]|
|''~CoreVersion:''|2.2.0 (#3125)|
version.extensions.UploadPlugin = {
	major: 4, minor: 1, revision: 0,
	date: new Date("May 5, 2007"),
	source: '',
	author: 'BidiX (BidiX (at) bidix (dot) info',
	coreVersion: '2.2.0 (#3125)'

// Environment

if (!window.bidix) window.bidix = {}; // bidix namespace
bidix.debugMode = false;	// true to activate both in Plugin and UploadService
// Upload Macro

config.macros.upload = {
// default values
	defaultBackupDir: '',	//no backup
	defaultStoreScript: "store.php",
	defaultToFilename: "index.html",
	defaultUploadDir: ".",
	authenticateUser: true	// UploadService Authenticate User
config.macros.upload.label = {
	promptOption: "Save and Upload this TiddlyWiki with UploadOptions",
	promptParamMacro: "Save and Upload this TiddlyWiki in %0",
	saveLabel: "save to web", 
	saveToDisk: "save to disk",
	uploadLabel: "upload"	

config.macros.upload.messages = {
	noStoreUrl: "No store URL in parmeters or options",
	usernameOrPasswordMissing: "Username or password missing"

config.macros.upload.handler = function(place,macroName,params) {
	if (readOnly)
	var label;
	if (document.location.toString().substr(0,4) == "http") 
		label = this.label.saveLabel;
		label = this.label.uploadLabel;
	var prompt;
	if (params[0]) {
		prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0], 
			(params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]);
	} else {
		prompt = this.label.promptOption;
	createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey);

config.macros.upload.action = function(params)
		// for missing macro parameter set value from options
		var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl;
		var toFilename = params[1] ? params[1] : config.options.txtUploadFilename;
		var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir;
		var uploadDir = params[3] ? params[3] : config.options.txtUploadDir;
		var username = params[4] ? params[4] : config.options.txtUploadUserName;
		var password = config.options.pasUploadPassword; // for security reason no password as macro parameter	
		// for still missing parameter set default value
		if ((!storeUrl) && (document.location.toString().substr(0,4) == "http")) 
			storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript;
		if (storeUrl.substr(0,4) != "http")
			storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl;
		if (!toFilename)
			toFilename = bidix.basename(window.location.toString());
		if (!toFilename)
			toFilename = config.macros.upload.defaultToFilename;
		if (!uploadDir)
			uploadDir = config.macros.upload.defaultUploadDir;
		if (!backupDir)
			backupDir = config.macros.upload.defaultBackupDir;
		// report error if still missing
		if (!storeUrl) {
			return false;
		if (config.macros.upload.authenticateUser && (!username || !password)) {
			return false;
		bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password); 
		return false; 

config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir) 
	if (!storeUrl)
		return null;
		var dest = bidix.dirname(storeUrl);
		if (uploadDir && uploadDir != '.')
			dest = dest + '/' + uploadDir;
		dest = dest + '/' + toFilename;
	return dest;

// uploadOptions Macro

config.macros.uploadOptions = {
	handler: function(place,macroName,params) {
		var wizard = new Wizard();
		var markList = wizard.getElement("markList");
		var listWrapper = document.createElement("div");
		var uploadCaption;
		if (document.location.toString().substr(0,4) == "http") 
			uploadCaption = config.macros.upload.label.saveLabel;
			uploadCaption = config.macros.upload.label.uploadLabel;
				{caption: uploadCaption, tooltip: config.macros.upload.label.promptOption, 
					onClick: config.macros.upload.action},
				{caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel}
	refreshOptions: function(listWrapper) {
		var uploadOpts = [
		var opts = [];
		for(i=0; i<uploadOpts.length; i++) {
			var opt = {};
			opt.option = "";
			n = uploadOpts[i]; = n;
			opt.lowlight = !config.optionsDesc[n];
			opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n];
		var listview = ListView.create(listWrapper,opts,this.listViewTemplate);
		for(n=0; n<opts.length; n++) {
			var type = opts[n].name.substr(0,3);
			var h = config.macros.option.types[type];
			if (h && h.create) {
	onCancel: function(e)
		return false;
	wizardTitle: "Upload with options",
	step1Title: "These options are saved in cookies in your browser",
	step1Html: "<input type='hidden' name='markList'></input><br>",
	cancelButton: "Cancel",
	cancelButtonPrompt: "Cancel prompt",
	listViewTemplate: {
		columns: [
			{name: 'Description', field: 'description', title: "Description", type: 'WikiText'},
			{name: 'Option', field: 'option', title: "Option", type: 'String'},
			{name: 'Name', field: 'name', title: "Name", type: 'String'}
		rowClasses: [
			{className: 'lowlight', field: 'lowlight'} 

// upload functions

if (!bidix.upload) bidix.upload = {};

if (!bidix.upload.messages) bidix.upload.messages = {
	//from saving
	invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki",
	backupSaved: "Backup saved",
	backupFailed: "Failed to upload backup file",
	rssSaved: "RSS feed uploaded",
	rssFailed: "Failed to upload RSS feed file",
	emptySaved: "Empty template uploaded",
	emptyFailed: "Failed to upload empty template file",
	mainSaved: "Main TiddlyWiki file uploaded",
	mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved",
	//specific upload
	loadOriginalHttpPostError: "Can't get original file",
	aboutToSaveOnHttpPost: 'About to upload on %0 ...',
	storePhpNotFound: "The store script '%0' was not found."

bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password)
	var callback = function(status,uploadParams,original,url,xhr) {
		if (!status) {
		if (bidix.debugMode) 
		// Locate the storeArea div's 
		var posDiv = locateStoreArea(original);
		if((posDiv[0] == -1) || (posDiv[1] == -1)) {
	if(onlyIfDirty && !store.isDirty())
	// save on localdisk ?
	if (document.location.toString().substr(0,4) == "file") {
		var path = document.location.toString();
		var localPath = getLocalPath(path);
	// get original
	var uploadParams = Array(storeUrl,toFilename,uploadDir,backupDir,username,password);
	var originalPath = document.location.toString();
	// If url is a directory : add index.html
	if (originalPath.charAt(originalPath.length-1) == "/")
		originalPath = originalPath + "index.html";
	var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir);
	var log = new bidix.UploadLog();
	log.startUpload(storeUrl, dest, uploadDir,  backupDir);
	if (bidix.debugMode) 
		alert("about to execute Http - GET on "+originalPath);
	var r = doHttp("GET",originalPath,null,null,null,null,callback,uploadParams,null);
	if (typeof r == "string")
	return r;

bidix.upload.uploadRss = function(uploadParams,original,posDiv) 
	var callback = function(status,params,responseText,url,xhr) {
		if(status) {
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
		} else {
	// do uploadRss
	if(config.options.chkGenerateAnRssFeed) {
		var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml";
		var rssUploadParams = Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]);
	} else {

bidix.upload.uploadMain = function(uploadParams,original,posDiv) 
	var callback = function(status,params,responseText,url,xhr) {
		var log = new bidix.UploadLog();
		if(status) {
			// if backupDir specified
			if ((params[3]) && (responseText.indexOf("backupfile:") > -1))  {
				var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:")));
			var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:")));
		} else {
	// do uploadMain
	var revised = bidix.upload.updateOriginal(original,posDiv);

bidix.upload.httpUpload = function(uploadParams,data,callback,params)
	var localCallback = function(status,params,responseText,url,xhr) {
		url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1));
		if (xhr.status == httpStatus.NotFound)
		if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) {
			if (responseText.indexOf("Debug mode") >= 0 )
				responseText = responseText.substring(responseText.indexOf("\n\n")+2);
		} else if (responseText.charAt(0) != '0') 
		if (responseText.charAt(0) != '0')
			status = null;
	// do httpUpload
	var boundary = "---------------------------"+"AaB03x";	
	var uploadFormName = "UploadPlugin";
	// compose headers data
	var sheader = "";
	sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\"";
	sheader += uploadFormName +"\"\r\n\r\n";
	sheader += "backupDir="+uploadParams[3] +
				";user=" + uploadParams[4] +
				";password=" + uploadParams[5] +
				";uploaddir=" + uploadParams[2];
	if (bidix.debugMode)
		sheader += ";debug=1";
	sheader += ";;\r\n"; 
	sheader += "\r\n" + "--" + boundary + "\r\n";
	sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n";
	sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n";
	sheader += "Content-Length: " + data.length + "\r\n\r\n";
	// compose trailer data
	var strailer = new String();
	strailer = "\r\n--" + boundary + "--\r\n";
	data = sheader + data + strailer;
	if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... ");
	var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null);
	if (typeof r == "string")
	return r;

// same as Saving's updateOriginal but without convertUnicodeToUTF8 calls
bidix.upload.updateOriginal = function(original, posDiv)
	if (!posDiv)
		posDiv = locateStoreArea(original);
	if((posDiv[0] == -1) || (posDiv[1] == -1)) {
	var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" +
				store.allTiddlersAsHtml() + "\n" +
	var newSiteTitle = getPageTitle().htmlEncode();
	revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " ");
	revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead");
	revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead");
	revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody");
	revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody");
	return revised;

// UploadLog
// config.options.chkUploadLog :
//		false : no logging
//		true : logging
// config.options.txtUploadLogMaxLine :
//		-1 : no limit
//      0 :  no Log lines but UploadLog is still in place
//		n :  the last n lines are only kept
//		NaN : no limit (-1)

bidix.UploadLog = function() {
	if (!config.options.chkUploadLog) 
		return; // this.tiddler = null
	this.tiddler = store.getTiddler("UploadLog");
	if (!this.tiddler) {
		this.tiddler = new Tiddler();
		this.tiddler.title = "UploadLog";
		this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |";
		this.tiddler.created = new Date();
		this.tiddler.modifier = config.options.txtUserName;
		this.tiddler.modified = new Date();
	return this;

bidix.UploadLog.prototype.addText = function(text) {
	if (!this.tiddler)
	// retrieve maxLine when we need it
	var maxLine = parseInt(config.options.txtUploadLogMaxLine,10);
	if (isNaN(maxLine))
		maxLine = -1;
	// add text
	if (maxLine != 0) 
		this.tiddler.text = this.tiddler.text + text;
	// Trunck to maxLine
	if (maxLine >= 0) {
		var textArray = this.tiddler.text.split('\n');
		if (textArray.length > maxLine + 1)
			this.tiddler.text = textArray.join('\n');		
	// update tiddler fields
	this.tiddler.modifier = config.options.txtUserName;
	this.tiddler.modified = new Date();
	// refresh and notifiy for immediate update
	store.notify(this.tiddler.title, true);

bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir,  backupDir) {
	if (!this.tiddler)
	var now = new Date();
	var text = "\n| ";
	var filename = bidix.basename(document.location.toString());
	if (!filename) filename = '/';
	text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | ";
	text += config.options.txtUserName + " | ";
	text += "[["+filename+"|"+location + "]] |";
	text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | ";
	text += uploadDir + " | ";
	text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | ";
	text += backupDir + " |";

bidix.UploadLog.prototype.endUpload = function(status) {
	if (!this.tiddler)
	this.addText(" "+status+" |");

// Utilities

bidix.checkPlugin = function(plugin, major, minor, revision) {
	var ext = version.extensions[plugin];
	if (!
		(ext  && 
			((ext.major > major) || 
			((ext.major == major) && (ext.minor > minor))  ||
			((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) {
			// write error in PluginManager
			if (pluginInfo)
				pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision);
			eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined"

bidix.dirname = function(filePath) {
	if (!filePath) 
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(0, lastpos);
	} else {
		return filePath.substring(0, filePath.lastIndexOf("\\"));

bidix.basename = function(filePath) {
	if (!filePath) 
	var lastpos;
	if ((lastpos = filePath.lastIndexOf("#")) != -1) 
		filePath = filePath.substring(0, lastpos);
	if ((lastpos = filePath.lastIndexOf("/")) != -1) {
		return filePath.substring(lastpos + 1);
	} else
		return filePath.substring(filePath.lastIndexOf("\\")+1);

bidix.initOption = function(name,value) {
	if (!config.options[name])
		config.options[name] = value;

// Initializations

// require PasswordOptionPlugin 1.0.1 or better
bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1);

// styleSheet
setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles");

	txtUploadStoreUrl: "Url of the UploadService script (default: store.php)",
	txtUploadFilename: "Filename of the uploaded file (default: in index.html)",
	txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))",
	txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))",
	txtUploadUserName: "Upload Username",
	pasUploadPassword: "Upload Password",
	chkUploadLog: "do Logging in UploadLog (default: true)",
	txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)"

// Options Initializations

/* don't want this for tiddlyspot sites

// Backstage
	uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'}


Welcome to the "Of Fortunes and Fools" Solstice campaign tiddlywiki site.

The "Solstice Rules" tiddly is found here:

This site is maintained by Sham aka Dave.

Click on the tiddler links to the left to find out more information about this D&D campaign.

This tiddler will be used to announce upcoming game session dates, and whether these are live or online.

Session 1: Scheduled for 6/28/08:

Notice to players: OF&F will kick-off using some new house rules not covered in the Solstice site.


Hit Points




Roll To Hit

Staggering Blows


These individual house rules will be detailed in the What Price Glory site found here (some of which are simply clarifications of Solstice house rules).

Follow the link for more nformation.
While 1st Edition AD&D was always our default rules base, we certainly didn't ever use every rule, or rules variant of 1st Edition during our many years of play. Further, we (me being the main culprit) used many outside rules sources, house rules, and tons of custom features (classes, spells, items, artifacts). Rather than be bogged down by the vast collection of AD&D rule books, I felt it would be easier to embrace the classic original D&D rules, Vol.s I - III.

All AD&D features which we might come to expect are available for translation to OD&D, specifically the spells, items and monsters, should we so choose to use them. At the outset, the core rules will suffice. The purpose of OF&F is to embrace the purest form of D&D, the Mega Dungeon setting. I feel that the OD&D rules allow me to emphasize the most important feature of the campaign, the Mega Dungeon itself, Ulin Uthor. The OD&D rules also place an emphasis on actual gameplay and having fun working as a team, rather than power mongering, min-maxing, rules lawyering or getting too upset at the death of a character. Characters WILL keep those d6's ready.

Once Solstice is completed, it will open up many new options for races and classes, but for now my workload is filled with Mega Dungeon design and not worrying about obscure rules or lost notebooks from 1989.