Cthulhu WebRing (Fans Of H.P. Lovecraft)Next SiteThe Cthulhu WebRing.
Everything Cthulhu & H.P.Lovecraft.
Come Browse Some Cthulhu Today!
Want to join the Cthulhu WebRing?

Currently Featured Members
[ Web of Tentacles ]
[Skip Prev][Prev][Next][Skip Next][Random][Next 5][List Sites]

Presented here is a template to help you make some of the decisions related to your character concept, as well as give the GM an idea of what your investigator is about. Be as brief or verbose as you desire. If you can't think of something for a particular entry, go ahead an skip it. No pressure.\n\n----\n\n''Name'' (character and player)\n''Team role(s):'' Basically, how you might describe your job on the team, e.g., Researcher, Mother, Ass kicker, Leader, Spirit Guide. You name it, literally. \n''Basic concept'' (in 10 words or less): If you had to try and describe your character as fully as possible in ten words or less, what would they be? \n''Nationality:'' Pick a nation, probably American unless we have worked something out. \n''Ethnicity:'' You can be creative; there are a lot of variations on Caucasian and "black" or "asian" are also too vague. \n''Hometown:'' Pick one. The campaign will start in the the Chicago area.\n''Profession:'' Your regular job. (Probably derived from the occupation chosen during [[character creation|Creation]].)\n''Age:'' No annoying child prodigies, please, and no bed-ridden characters. \n''Gender:'' As you like.\n''Marital Status:'' Single is easier and you are more likely to be recruited for field work. Dealing with the horrors of the Unknown is bad enough without having family members that can be taken advantage of. If you are married, then that would need to be addressed in your character concept. An especially useful ability might cause the SAVE to bend the rules. Special precautions to keep the family uninvolved would be appropriate, unless of course the whole family is in the Society . . . \n''Physical Description:'' Including physical features, clothes, visible equipment, typical disposition, etc. \n''Creed:'' A significant value and/or belief. \n''Motto:'' A catch phrase that typifies the PC's outlook and/or approach to life. \n''Religion:'' Yes, you can opt for no preference. \n''Date you joined SAVE:'' We can work this out. Preferably not too long before the campaign starts. \n''Why you joined SAVE:'' This is important to decide so that the character's motivation is clearly understood \n''Your Story''\nMaybe around 500 words describing the event or circumstances got you into SAVE, your current job, use/outlook of the Art, and where your skills and attributes came from.
Is it truly better to light a single candle than to curse the darkness, or would the things illuminated by a lone, guttering flame be enough to have us screaming in terror, trying to extinguish our feeble light? And what if that brief candle was enough catch the eyes of those unspeakable //things//, drawing them to us, rather than our occasional stumbling across them by horrible accident?\n\nThere are those know the answers to these questions, often to their own detriment, and possibly to that of all of humanity. In the blackness, beings beyond our imagining have noticed our brief points of light, lit by madmen and by fools, and they are coming. \n\nThis is the story of those who understand, to the best that mankind can do so, what moves toward us through the dark. Some have chosen to do what they can to hold the shadows back, while others openly invite the inevitable. Will their efforts hold the unnatural tide at bay a little longer, or will they hasten our destruction?\n\nLight your candle. Gaze upon what your faint circle of illumination reveals to you, and hope that your mind does not shatter from that mere glimpse of the shapes of things to come.\n\n----\n\n''The Dark Between the Stars'' is a roleplaying campaign using rules primarily from Chaosium's //Call of Cthulhu// and playtesting the forthcoming //Chill// 3rd edition rules, by Otherworld Creations. Background material is also drawn from ~WotC's //Dark•Matter// setting. The campaign itself incorporates material from the //Nocturnum// series of adventures from Fantasy Flight Games.
Players are members of an occult investigative organization known as SAVE, working out of the Chicago Regional Office. A member of SAVE is referred to as an "[[envoy|Envoys]]". All envoys are individuals who have had some sort of experience with the supernatural, often a malevolent encounter, and having exhibited a high level of resourcefulness or talent with regard to their exposure to the [[Unknown|The Unknown]], they have been recruited into the secret battle against transcendent evil.
Current roster:\n\n{{moveover{\n• Malcolm O'Brien\n• Sadako Yoshida \n• William Peterson\n• Jake Malone\n}}}\nFormer members:\n\n{{moveover{\n• Jimmy Endde\n• Jake \n• Rita Johnson\n}}}
Background: #000\nForeground: #f1fff1\n\nPrimaryPale: #000\nPrimaryLight: #9f8\nPrimaryMid: #8f9\nPrimaryDark: #cfd\n\nSecondaryPale: #333\nSecondaryLight: #666\nSecondaryMid: #ccc\nSecondaryDark: #ddd \n\nTertiaryPale: #000\nTertiaryLight: #000\nTertiaryMid: #000\nTertiaryDark: #6fd\n\nError: #f88\n\n|>|>|!Samples |\n|Background |@@bgcolor(#000): - ABCDEF - @@ |Background |\n|Foreground |@@bgcolor(#cec): - ABCDEF - @@ |Foreground |\n|~PrimaryPale |@@bgcolor(#697): - ABCDEF - @@ |Section Header bg |\n|~PrimaryLight |@@bgcolor(#285): - ABCDEF - @@|Gradient |\n|~PrimaryMid |@@bgcolor(#5b5): - ABCDEF - @@|Tiddler Links |\n|~PrimaryDark |@@bgcolor(#6a6): - ABCDEF - @@|Bar Links |\n|~SecondaryPale |@@bgcolor(#333): - ABCDEF - @@|Plain text bg |\n|~SecondaryLight |@@bgcolor(#666): - ABCDEF - @@|Plain text border |\n|~SecondaryMid |@@bgcolor(#999): - ABCDEF - @@||\n|~SecondaryDark |@@bgcolor(#ccc): - ABCDEF - @@||\n|~TertiaryPale |@@bgcolor(#258): - ABCDEF - @@||\n|~TertiaryLight |@@bgcolor(#258): - ABCDEF - @@||\n|~TertiaryMid |@@bgcolor(#379): - ABCDEF - @@||\n|~TertiaryMid |@@bgcolor(#69a): - ABCDEF - @@||\n|Error |@@bgcolor(#f88): - ABCDEF - @@||
Investigators will be created using primarily the //Chill// Third Edition playtest rules, which are available in the files section of Crystalmarch Yahoo group. For ease of reference, the majority of the Chill Character Creation Walkthrough document is presented here.\n\n{{ moveover {\n''Step 1:'' Think about your role in the party. Since there are no classes in Chill, characters can sometimes become students of everything, masters of nothing. Deciding on the role you play in the party can help alleviate this. \n\n''Step 2:'' Decide your character’s age. Age in Chill is both an Edge (you get stuff) and a Flaw (it "hurts" you). As Envoys age, they gain bonus skill points, balanced by the loss of Trait points and or the acquisition of Flaws. Any Edges gained through Age ignore any Prerequisites.\n\n''Step 3:'' Most starting Envoys will have 300 points to divide among Traits, although an Envoy’s age can raise or lower this. At character creation, Traits are capped at 75 and each Trait must have a minimum score of 10.\n\n''Step 4:'' Envoys rely on a wide range of skills to accomplish their missions. Skills range from 0 to 100, with a 0 representing no experience and a 100 equating the highest talent in the field. Characters begin play with a number of skill points equal to: 50 + Willpower + Perception. Remember to purchase both skill ranks and skill mastery levels. Both are required for truly effective characters. Also, remember that your envoy starts with a score of 50 in one skill for free, and gains benefits of the Professional edge for it. This free edge does not count towards your limit of edges and flaws.\n\n''Step 5:'' Once you’ve settled on traits and skills, you can pick a special quality for your envoy. Qualities represent particular bonuses or hindrances. Some qualities (edges) are good, and provide you with an advantage during play. Others are bad (flaws), and cause you problems. You can choose one edge for free. If you take a flaw, you can choose an extra edge as well. You can’t start with more than three edges and two flaws, but you might gain more later during play.\n}}}\n\n''Sanity:'' The //Call of Cthulhu// [[Sanity]] rules will be used. A character's starting Sanity score is equal to his Willpower + 20. For general idea on how sanity works, see the non-Cthulhu specific version of these rules in the [[SRD Online - Sanity| http://www.systemreferencedocuments.org/35/sovelior_sage/unearthedSanity.html]] section, or check with the gamemaster.\n\n''Equipment:'' Each envoy of SAVE begins with a standard [[field kit |Field Kit]].
[[Campaign]]\n[[What's New]]\n[[Links]]
//{{{\n// This script is (C) Copyright 2004 Jim Tucek\n// Leave these comments alone! For more info, visit\n// www.jracademy.com/~jtucek/email/ \n\nfunction forego(agility,atmosphere,biologist) {\nagility += ' ';\nvar camera = agility.length;\nvar component = 0;\nvar thing = '';\nfor(var body = 0; body < camera; body++) {\ncomponent = 0;\nwhile(agility.charCodeAt(body) != 32) {\ncomponent = component * 10;\ncomponent = component + agility.charCodeAt(body)-48;\nbody++;\n}\nthing += String.fromCharCode(say(component,atmosphere,biologist));\n}\nparent.location = 'm'+'a'+'i'+'l'+'t'+'o'+':'+thing;\n}\n\nfunction put(goodbye,distance,experiment) {\ngoodbye += ' ';\nvar fraction = goodbye.length;\nvar gesture = 0;\nfor(var historian = 0; historian < fraction; historian++) {\ngesture = 0;\nwhile(goodbye.charCodeAt(historian) != 32) {\ngesture = gesture * 10;\ngesture = gesture + goodbye.charCodeAt(historian)-48;\nhistorian++;\n}\n//document.write('&');\n//document.write('#');\n//document.write(say(gesture,distance,experiment));\ndocument.write(String.fromCharCode(say(gesture,distance,experiment)));\n}\n}\n\nfunction say(language,image,impression) {\nif (impression % 2 == 0) {\nhieroglyphic = 1;\nfor(var mark = 1; mark <= impression/2; mark++) {\nwood = (language*language) % image;\nhieroglyphic = (wood*hieroglyphic) % image;\n}\n} else {\nhieroglyphic = language;\nfor(var computer = 1; computer <= impression/2; computer++) {\nwood = (language*language) % image;\nhieroglyphic = (wood*hieroglyphic) % image;\n}\n}\nreturn hieroglyphic;\n}\n// \n//}}}
Before joining the [[SAVE]] organization, envoys typically have had a harrowing experience with the unexplainable, may have been an armchair student of the occult for years, or perhaps both. Individuals displaying a high level of resourcefulness or talent with regard to their exposure to the Unknown will receive a letter from a local representative from SAVE, explaining that he/she requests to talk to the individual in person. Upon meeting the representative, they are asked various questions about their experiences and delving into their past. Persons exhibiting both the imagination and moral stamina sought by the organization are then asked if they'd be willing to join SAVE in its quest to find exhaustive evidence of the Unknown and to counter its machinations. It is made clear that these endeavors, while possibly sounding romantic and exciting, will go unsung and are dangerous in the extreme.
[[SAVE]] provides its envoys with a package of items to assist in their scientific investigation as well as an address for the local branch office representative in case investigators have something conclusive. The kit also includes a writeup of SAVE's [[Rules of Conduct]].\n\n{{moveover{\n1 [[PDA with built-in GPS, Voice-recorder, Cellphone|http://www.pharosgps.com/products/all-in-one/PTL525E.htm]]; attachments include camera, homing device receiver, GPS beacon\n4 Homing devices - 2 magnetic, 2 tape backed \n2 Long Range Listening Devices and receiver\n1 Set of Night Vision Goggles w/ Magnification, Low Light, and IR \n1 First Aid Kit\n1 7" Halogen Flashlight\n1 Swiss Army Knife \n1 ballpoint pen and pencil\n1 note pad\n20 sheets of stationary and envelopes\n\nAlso available for those so skilled and inclined:\n\nStandard professional references\nMedical bag for doctors\nElectronics kit for those skilled in electronics }}}
A few points regarding the use of guns which I think should be clarified in the Chill rules.\n\n• ''Switching Targets:'' Firing a weapon at more than one target in the same round adds a minor difficulty to aiming. The first shot at a new target incurs a -20 penalty; subsequent shots at the same target do not suffer this modifier. This penalty does not apply to changing targets at the beginning of a round.\n\n• ''Multiple Targets:'' Firing at two separate targets simultaneously, such as when wielding two pistols, is also a minor difficulty, and the shooter receives a -20 penalty to hit each target. This modifier remains as long as the attacker continues to fire at different targets, and is in addition to any modifiers for using the offhand and doing a task with both hands at once. It also stacks with the modifier for switching targets, even if the attacker he is merely bringing both guns to bear on a target he was previously shooting at. In this case the penalty is only applied to a single attack. When firing this way, you may only aim and/or strike for effect against one target.\n\n• ''Pop-up attacks:'' While hiding behind cover, a character expose himself briefly to make quick ranged attacks. A successful REF roll means he retains most of the cover's benefit (-50 modifier against attacks), while a failed roll halves this modifier. Attacks taken in this way cannot benefit from aiming or striking for effect, and they also suffer a -20 modifer.
[[SAVE]] began in 1843 with a single man: Professor Charles O’Boylan. Living in Dublin, Ireland, O’Boylan was fascinated with the possibilities of the brain. Not content to deal with dabblers of “occult mumbo jumbo,” he was convinced that there was a scientific explanation for psychic phenomenon, and he set his mind to finding it. What he found instead was something entirely different.\n\nO’Boylan had experimented with his own seemingly supernatural powers of perception to a small degree, but he insisted on making his experiments “things of Pure Science,” and so, for almost a year, he carried out extensive, objective studies on psychic phenomenon, or "the Art" as he referred to it.\n\nNo one is really sure of the outcome of these studies, because at the end of the year, O’Boylan destroyed all of his notes and abandoned his studies. “I have found a new and more worthy cause to champion,” he wrote in his new journal. “And my Enemy will regret showing His face to me.”\n\nThe “Enemy” O’Boylan wrote about was a seemingly intelligent and malevolent force he dubbed “the Unknown.” He wrote:\n\n{{moveover{ //"It is from this Source of Darkness that all Evil flows. It is not from Here, but from There, that dark place where mine eyes peered, my magical eyes that made me so proud… So vain."//}}}\n!!!The Founding of SAVE\nIn 1844, O’Boylan recruited two other men – Henry Boulton and Richard Arthur (Lord Strange) – to create the societal organization of SAVE devoted to fighting this enemy. O’Boylan’s scientific knowledge coupled with Lord Strange’s occult understanding and Henry Boulton’s skills at gentlemanly combat formed a perfect circle to study and do battle with the Unknown.\n\nAt first SAVE was a bit of an adventurer's club, collecting anecdotal stories of the activities on the Unknown from a growing net of acquaintances world wide. Finally, however, O'Boylan decided to face the Enemy head on, uncover empirical proof, and launched a series expeditions in the fashion of the time. Their first few endeavors reportedly met with success in defeating the Unknown, lack of evidence coupled with seemingly fantastical documented exploits turned scientific skepticism and public opinion against the organization. The world closed the book on SAVE as a reckless and deluded group when O'Boylan and his entire twelve man party went missing during the now infamous Memphis expedition in 1846.\n!!!Richard O'Boylan's SAVE\nIn 1847, Richard O'Boylan, the son of Charles, a barrister and skeptic of SAVE's activities, had a brutal introduction to the realities of the Unknown in the form of an attack by his father's animated corpse. With the other founding members, Boulton and Strange, Richard reshaped the organization to shake off the merely curious dilettantes and socialites, focusing on acquiring members who had direct experience with the Unknown. Removed from the scrutiny of scientific and polite society, expeditions became more aggressive about defeating the Unknown, not proving its existence. Dublin became a true headquarters and repository of knowledge for the organization, and O'Boylan, along with the other Dublin members, established trusts and investments to ensure the financial stability of the organization. \n!!!Michael O'Boylan\nWhen Richard O'Boylan retired in 1889, he passed leadership of SAVE onto his second son, Michael O'Boylan. While neither the scientist his grandfather was or a rationalist or organizer as his father, Michael, a moderately accomplished poet and author, provided the greatest contribution to SAVE up to that point in the form of his book //Devices of the Enemy.// In this seminal work he was able to quantify the nature of the Unknown in a poetic way that was clear to all envoys that his logical father and grandfather couldn't have. In the book he wrote:\n\n{{moveover{ //"I have seen our Enemy, and I think, at last, I know what it might be. Our Enemy is ourselves. It is our own fears, our own darkness. The Unknown is formless Hate. It is we who give our Enemy its shape."//}}}\nIn 1908, Michael led one of the largest expedition to date, returning to the scene of his grandfather's disappearance. The group defeated a powerful mummy by the name of Bataphut, but Michael was haunted by the adventure, perhaps literally, throughout the years of the First World War until he died, unpeacefully, in his bed in 1923.\n!!!The Twentieth Century\nSAVE's experiences have been varied since the turn of the twentieth century. Some of the highlights since then are listed in the time line below.\n\n{{moveover{• ''1923'' Benjamin Wellborn, a Colonel in Her Majesty’s Army, holds SAVE together through procedure and discipline after Michael O'Boylan's death.\n• Dramatically increased activity of the Unknown in America during the early decades of the century\n• ''1929'' Stock Market Crash causes four of the the seven American SAVE bureaus to go under\n• ''1939'' Wellborn is called back to service during WWII, suspending his SAVE leadership. He is wounded in battle in 1944, leaving SAVE without direct leadership; European and American divisions split over internal politics\n• ''1946'' the New York office becomes the new World Headquarters under the leadership of Reginald Baxter\n• ''1947'' Baxter launches an aggressive, even militant, campaign against the Unknown. His early efforts actually reduced the number of Unknown incidents by over thirty percent\n• ''1950'' Pandora's Box, a fortified repository for dangerous artifacts of the Unknown, is created in Colorado\n• ''1951'' Baxter comes under scrutiny of Sen. Joseph ~McCarthy, forcing SAVE to go more underground. Unknown activity begins to rise once more.\n• ''1958'' Reginald Baxter throws himself off the San Francisco bay bridge\n• ''1958-81'' Most SAVE bureaus operate autonomously; second biggest expansion in envoy growth since turn of the century, but attrition is high\n• ''1975'' Lykos Project, aka "[[The Den]]", is established to study the disease of lycanthropy\n• ''1978'' Relations officially established with the [[Wilmarth Foundation]]\n• ''1981'' Robert Davidson is named the first World Coordinator in over twenty years. Davidson names Dr. Desmond Kearny Senior Archivist, and Kearny effectively runs organizational tasks of the World Headquarters while Davidson "leads from the field"\n• ''1986-87'' Largest attrition of SAVE envoys in the organization's history\n• ''1988'' Davidson returns from Sydney to O'Boylan estate with "something that will change the SAVE's war against the Unknown forever." He does not file a report at the Sydney office, or share his findings even with Kearny\n• ''1989'' An explosion at the O'Boylan estate destroys the SAVE Central Archives. Twenty envoys killed, five missing, including Robert Davidson. Similar fires and outright attacks occur at SAVE offices all over the world. Surviving envoys suspect the Unknown is responsible. Dr. Kearny encourages envoys to leave their offices, taking on new identities if possible. SAVE becomes a clandestine, decentralized organization, small groups of individuals cut off from their greatest weapon - knowledge - in their fight against the Unknown.}}}\n!!!Recent Years\nDuring ‘cleanup’ of the O'Boylan estate after the fire, a hidden vault in the basement yielded artifacts from SAVE’s first expeditions and the secret journals of Charles O'Boylan, relating the true events which led to the creation of SAVE. In these writings, O'Boylan revealed that much of his learning and experimentation regarding his psychic powers was gained under the tutelage of someone he refers to as only "Mr N.", an Egyptian man of apparently a strangely dark complexion. \n\nO'Boylan's notes explained that beings and powers from the Unknown had crossed over into our world throughout history, but such were rare occasions, giving rise to many of the legends we know today. However, during his rigorous experiments and investigations into the Art, done at times with the aid of occult artifacts provided by Mr N., he had peered across the boundary into the Unknown, and had caused "a door to be thrown wide open." His formation of SAVE was not just motivated by a noble sentiment to protect the world from these dark forces, but to battle what he himself had helped let loose. The professor stated that he believed this was what his malefactor Mr. N. had sought from the beginning.\n\nDr. Kearny of the organization sought to keep this information concealed. However, word eventually leaked out. A sense of betrayal over the organization's charter and newly found distrust of the Art caused the remainder of SAVE to fall into a shambles. The various Continental Headquarters tried to maintain control, but absence of support from lower levels hindered their progress. \n\nIn 1991, the remaining members of the infrastructure have a new World Headquarters established in Paris, France. Kearny began work on putting back together the Central Archives, both on paper and electronically, and creating a backup site. He is aided greatly by the computer skills of Rachel Fortenbaugh, a young envoy from America.\n\nBy 1996, SAVE branches were starting to get back on their feet, beginning to form up from individuals into branch offices and tentatively approaching inter-branch communication. Some, like Boston, had retained a good semblance of order throughout, and these were the first to lead the period of regrowth.\n\nUnfortunate news came in 1999, when Dr. Kearny was diagnosed with liver cancer. Within two weeks of this news, three descendants of the original founders - O'Boylan, Strange and Boulton - were found carrying out their own, independent crusades against the Unknown, ignorant of the existence of SAVE. Seeing this as a sign of hope and too unlikely to be a coincidence, the three were quickly recruited into the organization. They met with Dr Kearny before he passed away in December of that year.\n\nNow, just over seven years later, Gordon Pym serves as the World Coordinator from the headquarters which have been moved back to New York. Rachel Fortenbaugh, after her experiences and mentoring under Dr. Kearny, is the current SAVE Central Archivist. Dr. O'Boylan now serves as the European Regional Coordinator, operating out of her restored ancestral home in Dublin. She still works along side Henri Boulton and William Walker (a direct descendant of Lord Strange) in the field, and if their record for battling the Unknown and leading the organization continues, many expect to see the three of them helming SAVE just as their ancestors did..
Ostensibly a think-tank for researching alternative fuel and energy sources, the majority of the Hoffman Institute's research is focused on supernatural phenomena in the field. \n[>img[images/hoffmanInstitute.gif]] \nFrom what little information [[SAVE]] has been able to ascertain, the Institute appears to be gathering information on what it refers to as "dark matter", which it believe fuels such paranormal episodes. According to the Hoffman, dark matter appears to be increasing in the universe, and will reach a critical peak in the year 2012 (according to predictions based off of the Mayan calendar.) What they're doing with this information is not clear, and some SAVE envoys have raised accusations of Hoffman agents' inaction or even interference with SAVE missions where lives were at stake. \n\nThe Institute is well funded and well equipped, and has a wealth of special knowledge with regard to alien species in particular. This information is why the SAVE organization has maintained informal relations with the Institute despite some envoy objections. Their information on the activities of the race commonly referred to as "the Grays" is notably extensive, though SAVE maintains that the Grays are not extra-terrestrial in origin, but agents of the [[Unknown|The Unknown]], perhaps introduced to take advantage of changing trends in modern paranormal sensibilities.\n\nIn occult circles, the Hoffman Institute is well known for their outspoken opinion of [[Majestic 12|http://en.wikipedia.org/wiki/Majestic_12]], calling them collaborators, or at best misguided idiots in their attempts to influence the rising tide of dark matter. Interestingly, it has been reported that Arthur Meyer of the [[Wilmarth Foundation]] referred to this as a prime example of the pot calling the kettle black, without further elaboration.\n\nThe Hoffman Institute is currently headed up by //TBD//. No official channels exist between SAVE and the Institute, but some envoys, including branch and regional heads, have maintained personal contacts, exchanging information on a //quid pro quo// basis.
Addendum to the playtest rules\n\n<<tiddlerList tags:"HouseRules" order:"+title">>
Stuff being worked on
/***\n|''Name:''|LegacyStrikeThroughPlugin|\n|''Description:''|Support for legacy (pre 2.1) strike through formatting|\n|''Version:''|1.0.1|\n|''Date:''|Jul 21, 2006|\n|''Source:''|http://www.tiddlywiki.com/#LegacyStrikeThroughPlugin|\n|''Author:''|MartinBudden (mjbudden (at) gmail (dot) com)|\n|''License:''|[[BSD open source license]]|\n|''CoreVersion:''|2.1.0|\n|''Browser:''|Firefox 1.0.4+; Firefox 1.5; InternetExplorer 6.0|\n\n***/\n\n//{{{\n\n// Ensure that the LegacyStrikeThrough Plugin is only installed once.\nif(!version.extensions.LegacyStrikeThroughPlugin)\n {\n version.extensions.LegacyStrikeThroughPlugin = true;\n\nconfig.formatters.push(\n{\n name: "legacyStrikeByChar",\n match: "==",\n termRegExp: /(==)/mg,\n element: "strike",\n handler: config.formatterHelpers.createElementAndWikify\n});\n\n} // end of "install only once"\n//}}}\n
<html>\n<div class="chill_ring" style="float: left; width: 230px; margin: -5px 30px 0 0;">\n <div>\n <img src="images/chillbanners.gif" ALT="Join the Circle" height=161 width=149 style="float: right; ">\n <div style="padding-top: 35px;">\n <div class="ring_link"><a href="http://N.webring.com/go?ring=chillrpg;sid=5;id=5;next" target="_top">&gt; Next</a></div>\n <div class="ring_link"><a href="http://N.webring.com/wrman?ring=chillrpg;sid=5;addsite" target="_top">&nbsp• Join</a></div>\n <div class="ring_link"><a href="http://N.webring.com/hub?ring=chillrpg" target="_top">&nbsp• List</a></div>\n <div class="ring_link"><a href="http://N.webring.com/go?ring=chillrpg;sid=5;id=5;home" target="_top">&nbsp• Home</a></div>\n <div class="ring_link"><a href="http://N.webring.com/go?ring=chillrpg;sid=5;id=5;random" target="_top">&nbsp• Random</a></div>\n <div class="ring_link"><a href="http://N.webring.com/go?ring=chillrpg;sid=5;id=5;prev" target="_top">&lt; Prev</a></div> \n </div>\n </div>\n</div>\n<br>\n<ul style="margin-top: 25px;" >\n<li><a href="http://www.chillrpg.com/">Chill</a> - the forthcoming new edition to be published by Other World Creations, which is being playtested for this campaign\n<li><a href="http://catalog.chaosium.com/default.php">Chaosium</a> - makers of the original <em>Call of Cthulhu</em> game\n<li><a href="http://www.wizards.com/default.asp?x=d20modern">d20 Modern</a> - the new edition of Chill plans on dipping into this rule set somewhat, including a d20 conversion chapter. Material from supplements such as the <em>Dark•Matter</em> setting is also being used for Dark Between the Stars campaign\n<li><a href="http://www.crystalmarch.com/forum/viewforum.php?f=12">Campaign Forum</a> - at Crystalmarch.com\n</ul>\n</html>
In the Dice Rolls chapter, under "Using Luck", just before "Adjusting a roll costs you Luck points [...]" sentence in the second paragraph, consider the following wording to be in effect:\n\n{{ moveover {\n"For Specific rolls, when using Luck to lower a dice roll so it is no longer a bust, the result is always treated as a Light Success." \n}}}
*[[Campaign]] \n*[[Characters]] \n*HouseRules\n\n\n\n
[<img[images/xukko.gif]]
As in the //Call of Cthulhu// game, this skill allows envoys to gain knowledge of the sanity-ripping nature of the Mythos. Characters may gain ranks in this skill only through encounters with eldritch books and tomes, or contact with mythos creatures themselves. Beginning characters have zero ranks in this skill, and it is not elgible for selection with the Professional Edge. \n\nA character's maximum [[Sanity]] score possible is equal to 99 minus his ranks in the Mythos Skill.\n
These InterfaceOptions for customising TiddlyWiki are saved in your browser\n\nYour username for signing your edits. Write it as a WikiWord (eg JoeBloggs)\n\n<<option txtUserName>>\n<<option chkSaveBackups>> SaveBackups\n<<option chkAutoSave>> AutoSave\n<<option chkRegExpSearch>> RegExpSearch\n<<option chkCaseSensitiveSearch>> CaseSensitiveSearch\n<<option chkAnimate>> EnableAnimations\n\n----\nAdvancedOptions\nPluginManager\nImportTiddlers
[[SAVE]] has relationships with several different groups interested in their investigations into the [[Unknown|The Unknown]], though many envoys find the motives of these organizations suspect.
<!--{{{-->\n\n<div class='header'>\n <div class='headerLeft'>&nbsp;</div>\n <div class='headerRight'>&nbsp;</div>\n <div class='headerTitle'>&nbsp;</div>\n <div class='headerForeground'>\n <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>\n </div>\n</div>\n\n<div id='sidebar'>\n <div id='sidebarTop'>&nbsp;</div>\n <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>\n <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>\n <div id='sidebarBottom'>&nbsp;</div>\n</div>\n\n<div id='displayArea' >\n <div id='messageArea'></div>\n <div id='tiddlerDisplay'></div>\n</div>\n<!--}}}-->
Core d20 Modern base classes do not show progressions of their level dependent features past 10th level, so use the following table for progressions of class features and bonus feats up to 20th.\n\n|! Level |! Good BAB |! Poor BAB |! Good Save |! Poor Save |! Bonus Feats |\n| ''1'' | +0 | +0 | +2 | +0 | |\n| ''2'' | +1 | +1 | +3 | +0 | B* |\n| ''3'' | +2 | +1 | +3 | +1 | |\n| ''4'' | +3 | +2 | +4 | +1 | |\n| ''5'' | +3 | +2 | +4 | +1 | B |\n| ''6'' | +4 | +3 | +5 | +2 | |\n| ''7'' | +5 | +3 | +5 | +2 | |\n| ''8'' | +6/+1 | +4 | +6 | +2 | |\n| ''9'' | +6/+1 | +4 | +6 | +3 | |\n| ''10'' | +7/+2 | +5 | +7 | +3 | B |\n| ''11'' | +8/+3 | +5 | +7 | +3 | |\n| ''12'' | +9/+4 | +6/+1 | +8 | +4 | |\n| ''13'' | +9/+4 | +6/+1 | +8 | +4 | |\n| ''14'' | +10/+5 | +7/+2 | +9 | +4 | |\n| ''15'' | +11/+6/+1 | +7/+2 | +9 | +5 | B |\n| ''16'' | +12/+7/+2 | +8/+3 | +10 | +5 | |\n| ''17'' | +12/+7/+2 | +8/+3 | +10 | +5 | |\n| ''18'' | +13/+8/+3 | +9/+4 | +11 | +6 | |\n| ''19'' | +14/+9/+4 | +9/+4 | +11 | +6 | |\n| ''20'' | +15/+10/+5 | +10/+5 | +12 | +6 | B |\n<html><div align="center"> * <sub>Bonus Feat for Strong Heroes only</sub></html>\n
Beyond simply fighting the [[Unknown|The Unknown]], [[SAVE]] has initiated several projects to study it in an effort to find better ways to combat it.
The Psychic File Project, based in Europe, has noted occultist and psychic Dr. Jergen Reinhart as its Project Co-ordinator. Not much is referenced about the project, except insinuations of ties to [[GemeinKrugge Corporation]] and an obvious hint (it’s title) at the Psychic nature of its research. It is presumed that the corp is investigating the use of the Art for possible commercial benefit. The continued existence of the project given the revelations in O'Boylan's recovered journals was often cited as reason many envoys turned their back on [[SAVE|SAVE]] in the early 90's.
/***\n|Purpose:|Makes tag links into a Taggly style open tag plus a normal style drop down menu|\n|Creator:|SimonBaird|\n|Source:|http://simonbaird.com/mptw2/#QuickOpenTag|\n|Requires:|TW 2.x|\n***/\n//{{{\n\n//⊻ ⊽ ⋁ ▼ \n\nvar dropdownchar = (document.all?"►":"►"); // the fat one is the only one that works in IE\n\nvar createTagButton_orig_mptw = createTagButton;\nwindow.createTagButton = function(place,tag,excludeTiddler) {\n var sp = createTiddlyElement(place,"span",null,"quickopentag");\n createTiddlyLink(sp,tag,true,"button");\n var theTag = createTiddlyButton(sp,dropdownchar,config.views.wikified.tag.tooltip.format([tag]),onClickTag);\n theTag.setAttribute("tag",tag);\n if(excludeTiddler)\n theTag.setAttribute("tiddler",excludeTiddler);\n return(theTag);\n}\n\nconfig.macros.miniTag = {handler:function(place,macroName,params,wikifier,paramString,tiddler) {\n var tagged = store.getTaggedTiddlers(tiddler.title);\n if (tagged.length > 0) {\n var theTag = createTiddlyButton(place,dropdownchar,config.views.wikified.tag.tooltip.format([tiddler.title]),onClickTag);\n theTag.setAttribute("tag",tiddler.title);\n theTag.className = "miniTag";\n }\n}};\n\n\nconfig.macros.allTags.handler = function(place,macroName,params)\n{\n var tags = store.getTags();\n var theDateList = createTiddlyElement(place,"ul",null,null,null);\n if(tags.length == 0)\n createTiddlyElement(theDateList,"li",null,"listTitle",this.noTags);\n for (t=0; t<tags.length; t++)\n {\n var theListItem =createTiddlyElement(theDateList,"li",null,null,null);\n var theLink = createTiddlyLink(theListItem,tags[t][0],true);\n var theCount = " (" + tags[t][1] + ")";\n theLink.appendChild(document.createTextNode(theCount));\n\n var theDropDownBtn = createTiddlyButton(theListItem," "+dropdownchar,this.tooltip.format([tags[t][0]]),onClickTag);\n theDropDownBtn.setAttribute("tag",tags[t][0]);\n }\n}\n\n\nsetStylesheet(\n ".quickopentag { margin-right:1.2em; border:1px solid #eee; padding:2px; padding-right:0px; padding-left:1px; }\sn"+\n ".quickopentag .tiddlyLink { padding:2px; padding-left:3px; }\sn"+\n ".quickopentag a.button { padding:1px; padding-left:2px; padding-right:2px;}\sn"+\n "a.miniTag {font-size:150%;}\sn"+\n "",\n"QuickOpenTagStyles");\n\n//}}}\n\n/***\n<html>&#x22bb; &#x22bd; &#x22c1; &#x25bc; &#x25be;</html>\n***/
Included with each [[field kit|Field Kit]], envoys will find a document outlining the [[SAVE]] guidelines and rules of conduct. They are as follows:\n\n#All activities, envoys, goals, and locations of SAVE are to be kept secret at all costs. If any envoy is put under arrest, or detained for any reason whatsoever, SAVE will not publicly acknowledge the situation but will do what it can to help the individual secretly or under false pretenses.\n#The highest ethical principles are to be maintained at all times. The purpose of SAVE is to rid the world of evil. Since envoys will be traveling throughout the world, respect for customs and cultural differences is to be maintained.\n#Any and all information regarding the [[Unknown|The Unknown]] is to be noted and sent to the closest headquarters of SAVE as soon as possible. SAVE will always provide its envoys with the most recent and correct information available. But this network is dependent upon envoys supplying information to SAVE.\n#Envoys are the guardians of the world. Nobody but SAVE envoys will ever know of their success or their failure. But an envoy must be willing at all time to lay down whatever he is doing and fight the Unknown.\n#Most communication to take place between envoys and other members of SAVE is to take place via letters sent through the physical mail system. Telephone conversations are to be restricted to emergency-only situations, members of the Unknown are more likely to notice spoken messages.
''SAVE'' (//Societas Argenti Viae Eternitata//, or, //The Eternal Society of the Silver Way//) is a secret society dedicated to protecting the world from the creatures of the [[Unknown|The Unknown]]. (Originally, SAVE stood for the //Societas Albae Viae Eternitata// - The Eternal Society of the White Way. In the 1980's, this was modified to the current version, ostensibly to avoid charges of racism.) Agents of SAVE are called //[[envoys|Envoys]]//. [<img[images/Inaldo.gif]]\n\nSAVE has a main headquarters and central archive located in Paris, France, with continental and regional headquarters scattered in several countries around the world. Regional headquarters oversee branches in their area, usually locations where three or more envoys live within a couple hundred miles of each other. In the United States New York is home to the Continental Headquarters, with Regional Headquarters in Chicago, Atlanta, Dallas, San Francisco, Montreal and Mexico City.\n\nThough it is a global organization, in the past SAVE has been able to offer only minimal support to its envoys, beyond pointing them toward incidents warranting investigation and providing the occasional bit of additional research material. However, with the turn of the century this is beginning to change as SAVE has regrouped and reformed, ready to bring the fight back to the supernatural's doorstep.
Knowledge of the true nature of the universe is almost more than the human mind can stand. In addition to Willpower, the campaign will also use the //Call of Cthulhu// Sanity rules. These will interact with the core //CHILL// rules as follows:\n\n''Sanity Stats:'' Characters begin with a number of Sanity points equal to their Willpower + 20, with a maximum of 99. This value is referred to as SAN, and does not change. Maximum Sanity is equal to 99 - [[Mythos Skill]] Ranks. Current Sanity is the statistic which will fluctuate the most, beginning equal to SAN and raising or lower based upon creatures encountered, forbidden tomes read and story rewards.\n\n''Sanity Checks:'' When confronting Mythos creatures, a standard Fear Check will also serve as a Sanity Check, with failure causing a loss of Willpower //and// Sanity points. \n\n''Temporary Insanity:'' If a character suffers a Sanity loss equal to 1/10 SAN (rounded down) in a single roll, a Perception check is made. If this check is //made//, the character will go mad for a short period of time. In addition, if a character becomes Broken under the //Chill// rules and has experienced any mythos related Sanity loss during the preceding encounters which cost him his Willpower, a check for Temporary Insanity is made then as well.\n\n''Indefinite Insanity:'' A character becomes Indefinitely Insane if he suffers a loss of more than 20% of his current Sanity points //in a single roll//. This modification is due to the fact that, during the course of a single session, Willpower/Fear checks will become quickly more difficult to make than a normal Sanity check, leading to a slightly increased rate of Sanity loss than a standard //Call of Cthulhu// game.\n\n''Psychology Skill:'' This skill can be used to treat Temporary or Indefinite Insanity. To calm a temporarily insane character, this is considered part of the normal Psychology roll made to calm a character who has failed a Fear Check. Long term care of insane characters is handled per the //Call of Cthulhu// rules.\n\n''Insane Insight:'' After an episode of Temporary Insanity, a character may make a Perception check to reflect a sudden realization about the current situation which only a moment of madness could bring about.\n\n''High Skill:'' If a character gains 90 ranks in a skill, they are awarded 1d10 Sanity points.\n\n''Character Advancement:'' In addition to the other reward options available, a player may increase Sanity by 3 as one of his 2 choices for improving his character.
With one player absent, the session consists primarily of the finalizing of characters, particularly Equipment. \n\n----\n\nRecently, the members of [[Chicago Team 37]] received the following letter in the mail:\n\n''Date:'' Feb 13th, 2006\n\n''To:'' Team #37\n''From:'' [[Michael Sobel]], [[SAVE]] [[Chicago Local Office]] Coordinator\n''RE:'' A little trip\n\nMy fellow envoys,\n\nIt's been a few weeks, or perhaps longer, since most of you have been asked to join our little organization. Thankfully, things have not been too busy here around the Windy City.\n\nSomething from one of our other divisions has come up, however, and they have asked for our help. The [[Lykos Project|The Den]], affectionately known as "The Den" by the researchers there, have some reports of lycanthrope activity just outside of Boulder, Colorado. They are, unfortunately, a little shorthanded (as SAVE is often wont to be), and have asked if we could send a team out west for some preliminary investigation. If the reports turn out to be accurate, the Den specialists can then fly out to handle matters. The team's purpose will be merely fact-finding and evidence gathering, and no-one should engage the Enemy if at all possible.\n\nAs this will be a relatively low-key expedition, I thought it would make a good training mission for Team 37, to learn some of the more procedural aspects of assignments, before we throw you into the deep end on a more dangerous one in the future.\n\nOne of the Lykos Project's [[sniffers|Sniffer]], Matt Becker, is currently assigned to the Glen Canyon area to the south west in Arizona. He will be able to meet you on-site in Snowflake Valley, and will be expecting you by nine P.M. on the 24th of this month. One of your fellow teammates, Malcolm O'Brien, also has some mission experience and should be helpful to you newcomers.\n\nEnclosed you'll find round trip tickets to Boulder, car rental information and directions to Snowflake Valley. Also, those of you who use firearms, please let us know what caliber, and Matt will have appropriate silver ammunition for you when you arrive. Hopefully you won't be needing it.\n\nGood luck, envoys. Happy hunting.\n\nRespectfully,\nMichael\n\nP.S.: Whoever signs for the rental car, please take insurance out on it. Thanks.
//"Why, sometimes I've been a suspect in as many as six impossible murders before breakfast."//\n\n''Feb 24th'' - In the midst of a blizzard, the envoys travel up to Miner's Folly, which lies at the east end of Snowflake Valley. Their SUV accidentally hits an older Native American man (Luke Leaping Deer) on the road, who dies before they can get him into the Clearwater Hotel. The sheriff's deputy seems unconcerned. Matt Becker, a sniffer for The Den, is waiting for them. It's close to midnight.\n\nBefore retiring, the party discovers a murder scene in the room next to them. The victim was apparently an industrial spy who was tortured and thrown out the window by persons unknown. The sheriff shows up on the scene this time, none too happy.\n\n''Feb 25th'' - Just as breakfast is ending, another corpse is found in the hotel, this one appearing to be the victim of some vicious animal attack. The group suspects a werewolf, but how he got up to the victim's window is unclear. The sheriff is back, further displeased and suspicious of the envoys, though he reluctantly accepts the likelihood that it was an animal.\n\nA supply run and brief tour of the town turns up little, but the party notices they are being watched. Back at the hotel, Malcolm is supernaturally warned off by Maximillian Delaney, owner of DMI, the older of the two mining companies in town. They also question one of the Native American mine workers at the restaurant. Later in the afternoon, the party follows tracks they suspect belong to a werewolf, but lose them soon enough. It's beginning to get dark.
A brief summary of events for each session.\n\n<<tiddlerList tags:"Session" order:"+title">>\n
[[Home|Campaign]]\n[[What's New]]\n[[Links]]\n<<search>>\n<<newTiddler>>\n<<closeAll>>\n<<slider chkSliderOptionsPanel OptionsPanel options 'Change TiddlyWiki advanced options'>>\n<<tableOfContents sort:system hidelist>>\n<html>\n <div class="countertext"> times viewed:</div>\n <div class="counter" style="margin: 15px 35px;">\n <img src="/cgi-bin/counter.gif?fg=148,220,185">\n</div>\n<br>\n<a href='javascript:forego("3646 1776 3045 671 1776 1776 887 3511 2490 2768 1776 671 2768 1081 1727 17 2735 887 3045 17 935 1727 2041 3036 3646 3045 2768 17 853 768 1776 887 17 1081 2768 17 1907 671 3045",4181,1613)'><b>email me</b></a>\n<br>\n<a href='http://www.tiddlywiki.com/' target='_blank'>TiddlyWiki ©<br>osmosoft 2006</a>\n<br>&nbsp;\n<br>&nbsp;\n</html>
a Chill of Cthulhu campaign site
The Dark Between the Stars
Sniffers are SAVE envoys highly skilled in the Sense Unknown discipline of the Art. Depending on the size of the local office, a sniffer may be a typical, on-call envoy, or a salaried SAVE employee. Sniffers are normally used to scope out areas of suspected supernatural activity before a full investigative team is sent in. A full-time sniffer will also proactively check out crime scenes, especially those of a violent nature, even if there is no initial indication of Unknown activity.\n\nSniffers Chicago Team 37 are aquainted with include [[Joanne Rosenthal]] (dedicated envoy of the Chicago office) and Matt Becker (sniffer for [[The Den]] project.)
/*{{{*/\n\n/* REMOVE PADDING AND MARGIN VALUES */\nhtml, body, h1, h2, h3, h4, h5, h6, p, ul, ol, dl, li, dd, dt, img, hr, float,\nblockquote, q, table, thead, tbody, tfoot, caption, th, tr, td, a, form,\ninput, textarea, fieldset, pre, p\n{margin: 0; padding: 0;}\n\nbody { background: black url('images/EyeStars.gif') no-repeat 0 0; }\n\n#contentWrapper { margin: 0; padding: 0; }\n\nh1,h2,h3,h4,h5 {background-color: transparent; color: #80ff89; margin: 10px 0 10px -12px; border-topstyle: dashed; border-height: 1px;}\n\nhr { border: 0;\n border-top: 1px dashed #5c5;\n height: 1px;\n width: 80%; }\n\n.header { \n position: absolute; \n top: 10px; left: 175px; margin-right: 25px; \n height: 125px;\n background-image: url('images/h_bg.gif');\n background-color: black;\nborder: 1px solid none;\n z-index: 10;}\n\n.headerForeground { \n margin-top: 37px; \n margin-left: 220px;\n font-family: Arial Narrow, Times New Roman; color: #ccc; font-weight: bold;\n text-align: center;\nheight: 1px;}\n\n.headerShadow { font-family: Arial Narrow, Times New Roman; visibility: hidden; }\n\n.SiteTitle { visibility: hidden; }\n\n.headerLeft { \n width: 144px;\n height: 125px;\n background: url('images/h_stars.gif') no-repeat;\n z-index: 99;\nfloat: left;}\n\n.headerRight { \n float: right;\n width: 108px;\n height: 125px;\n background: url('images/h_end.gif') no-repeat;\n z-index: 99;}\n\n.headerTitle { \n top: 25px; \n margin: 20px 0 0 190px;\n width: 473px;\n height: 74px;\n background: url('images/darkness.gif') no-repeat;\n z-index: 99;}\n\n#sidebar { \n position: absolute; \n top: 170px; \n text-align: left;\n left: 15px;\n width: 150px;\n height: auto;\n background-color: transparent;\n }\n\n#sidebarTop { \n width: 150px;\n height: 30px;\n background: url('images/v_stars.gif') no-repeat;}\n\n#sidebarOptions { \n padding-left: 15px;\n margin-top: -10px;\n font-family: Times New Roman;\n font-size: 1.2em;\n background: url('images/v_bg.gif') repeat-y; \n background-color: transparent;\n z-index: 1; }\n\n#sidebarBottom { \n width: 150px;\n height: 135px;\n margin-top: -10px;\n background: url('images/v_end.gif') no-repeat;}\n\n#sidebar .TOC { margin: 7px 0 0 3px;; padding: 0; width: 120px;}\n#sidebar .TOC a { width: auto; }\n#sidebar .button { width: 110px; }\n#sidebar a { width: 105px; padding: 0; }\n#sidebar .txtOptionInput {margin: 0px 0 10px 7px; background-color: #254; \n color: #ddd; width: 100px; border: 1px solid #495; \n padding-left: 3px;}\n#sidebar select { background-color: #254; color: #ddd; border: 1px solid #374;}\n\n.countertext {margin: 5px 0 0 5px; }\n\n#displayArea { margin: 150px 45px 0 175px; }\n\n/* #displayArea .tiddler {background-color: #001500; margin-bottom:10px; padding: 1em; border: 1px solid #374; } */\n#displayArea .tiddler {margin-bottom:10px; padding: 1em; }\n#displayArea .button {background-color: #253; border: 1px solid #374;}\n\n.toolbar {float: right;}\n.toolbar .button {background-color: #253; border: 1px solid #374; margin: 0 3px 10px 3px;}\n\n.popup { background-color:#374; border: 1px solid green; } \n.popup li a, .popup li a:visited { color: #dfd; } \n\n.title { font-family: Arial Narrow, Times New Roman; color: #3d3; z-index: 10; }\n.title_eye { float: left; margin: -2px 5px 0px -10px; z-index: 11; }\n\n.viewer { margin-top: 2px; padding-left: 10px;} \n.viewer img { margin: 10px 10px 5px 0; } \n.viewer strong { color: #4c4; } \n.viewer:first-letter { \n font: normal 28px/24px Times New Roman, serif; \n color: #8f9; \n float: left; margin-right: 1px;}\n\n.moveover { margin: 0 20px; width: 90%; display: block;}\n\n.viewer table { border: 2px solid green; margin-left: auto; margin-right: auto; }\n\n.viewer th, thead td {\n background-color: #253;\n border: 1px solid green;\n color: #dff2df;\n}\n\n.viewer td, .viewer tr { border: 1px solid green; }\n.viewer caption { margin-left: auto; margin-right: auto; font-size: 1.1em; color: red;}\n\n.chill_ring { margin-top: 20px; font: 12px normal Verdana, Arial, Helvetica, sans-serif; float: left; }\n\n.cthulhu_ring { margin: 50px auto; \n width: 365px; \n height: 70px;\n padding-top: 31px; \n background: url( 'images/ring_titlebar.gif') no-repeat; }\n.cthulhu_ring img { margin: 0; padding: 0; } \n\n.d20_ring { margin-top: 20px; width: 30%; font:12px normal Verdana, Arial, Helvetica, sans-serif; float: right; }\n\n.ring_link { margin-bottom: 5px; }\n\n/*}}}*/\n\n\n/***\n!!~TagglyTagging /%==================================================%/\n***/\n/*{{{*/\n.tagglyTags { display: inline; }\n.tagglyTagged { display: inline; margin-top: 5px; }\n.tagglyTagged .tiddlyLink { }\n.tagglyTagged li.listTitle { display:none; }\n.tagglyTagged li { display: inline; font-size: 11px; }\n.tagglyTagged ul { display:inline; padding-left: 0; margin-left: 7px;}\n.tagglyTagged .tiddlyLink { color: #dfd; }\n.tagglyTagging { display: inline; font-size: 11px;}\n.tagglyTagging li.listTitle { display:none;}\n.tagglyTagging li { display:inline; margin-right: 5px; border-left: 1px dotted; padding-left: 5px; margin-left: 5px;}\n.tagglyTagging ul { display:inline; padding-left: 0; margin-left: 5px;}\n\n.miniTag .miniTag { margin: 0 0 7px 5px; border: 1px solid meduimslateblue; font-size: 10px; padding: 0 2px;}\n\n.miniTag .button:hover { font-style: none;}\n\n/* .tagglyTagging .tghide { display:inline; } */\n\n.tagglyTagging .button { display:none; margin:5px 3px 0 3px;}\n.tagglyTagging .button, .hidebutton { color:#aaa; font-size:90%; border:0px; padding-left:0.3em; padding-right:0.3em;}\n.tagglyTagging .button:hover, .hidebutton:hover { background:#eee; color:#888; }\n.selected .tagglyTagging .button { display:inline; clear: right; }\n\n.quickopentag {border: none; }\n.tagglyLabel { color:#aaa; font-size:90%; }\n\n.editLabel { font-size:90%; padding-top:0.5em; }\n/*}}}*/\n/***\n!!~HorizontalMainMenuStyles/%==================================================%/\n***/\n/*{{{*/\n#topMenu br {display:none; }\n#topMenu { position: absolute;\n top: 15px; \n left: 500px;\nbackground: transparent;}\n#topMenu .button, #topMenu .tiddlyLink, #topMenu li {\n margin: 10px 0; \n padding-left:3px; padding-right:3px;\n color:#adb; }\n\n#topMenu .button:hover, #topMenu .tiddlyLink:hover { background:#bdc; color:#020;}\n\n/*#displayArea { margin: 1em 15.7em 0em 1em; } so we use the freed up space */ \n\n/* just in case want some QuickOpenTags in your topMenu */\n#topMenu .quickopentag { padding:0px; margin:0px; border:0px; }\n#topMenu .quickopentag .tiddlyLink { padding-right:1px; margin-right:0px; }\n#topMenu .quickopentag .button { padding-left:1px; margin-left:0px; border:0px; }\n/*}}}*/\n
/*{{{*/\nbody {\n background: [[ColorPalette::Background]];\n color: [[ColorPalette::Foreground]];\n}\n\na{\n color: [[ColorPalette::PrimaryMid]];\n}\n\na:hover{\n background: [[ColorPalette::PrimaryMid]];\n color: [[ColorPalette::Background]];\n}\n\na img{\n border: 0;\n}\n\nh1,h2,h3,h4,h5 {\n color: [[ColorPalette::SecondaryDark]];\n background: [[ColorPalette::PrimaryPale]];\n}\n\n.button {\n color: [[ColorPalette::PrimaryDark]];\n border: 1px solid [[ColorPalette::Background]];\n}\n\n.button:hover {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::SecondaryLight]];\n border-color: [[ColorPalette::SecondaryMid]];\n}\n\n.button:active {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::SecondaryMid]];\n border: 1px solid [[ColorPalette::SecondaryDark]];\n}\n\n.header {\n background: [[ColorPalette::PrimaryMid]];\n}\n\n.headerShadow {\n color: [[ColorPalette::Background]];\n}\n\n.headerShadow a {\n font-weight: normal;\n color: [[ColorPalette::Background]];\n}\n\n.headerForeground {\n color: [[ColorPalette::PrimaryPale]];\n}\n\n.headerForeground a {\n font-weight: normal;\n color: [[ColorPalette::PrimaryPale]];\n}\n\n.tabSelected{\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::TertiaryPale]];\n border-left: 1px solid [[ColorPalette::TertiaryLight]];\n border-top: 1px solid [[ColorPalette::TertiaryLight]];\n border-right: 1px solid [[ColorPalette::TertiaryLight]];\n}\n\n.tabUnselected {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::TertiaryMid]];\n}\n\n.tabContents {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::TertiaryPale]];\n border: 1px solid [[ColorPalette::TertiaryLight]];\n}\n\n.tabContents .button {\n border: 0;}\n\n#sidebar {\n}\n\n#sidebarOptions input {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel {\n background: [[ColorPalette::PrimaryPale]];\n}\n\n#sidebarOptions .sliderPanel a {\n border: none;\n color: [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel a:hover {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n}\n\n#sidebarOptions .sliderPanel a:active {\n color: [[ColorPalette::PrimaryMid]];\n background: [[ColorPalette::Background]];\n}\n\n.wizard {\n background: [[ColorPalette::SecondaryLight]];\n border-top: 1px solid [[ColorPalette::SecondaryMid]];\n border-left: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.wizard h1 {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.wizard h2 {\n color: [[ColorPalette::Foreground]];\n}\n\n.wizardStep {\n background: [[ColorPalette::Background]];\n border-top: 1px solid [[ColorPalette::SecondaryMid]];\n border-bottom: 1px solid [[ColorPalette::SecondaryMid]];\n border-left: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.wizard .button {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n border-top: 1px solid [[ColorPalette::PrimaryLight]];\n border-right: 1px solid [[ColorPalette::PrimaryDark]];\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n border-left: 1px solid [[ColorPalette::PrimaryLight]];\n}\n\n.wizard .button:hover {\n color: [[ColorPalette::PrimaryLight]];\n background: [[ColorPalette::PrimaryDark]];\n border-color: [[ColorPalette::PrimaryLight]];\n}\n\n.wizard .button:active {\n color: [[ColorPalette::Background]];\n background: [[ColorPalette::PrimaryMid]];\n border-top: 1px solid [[ColorPalette::PrimaryLight]];\n border-right: 1px solid [[ColorPalette::PrimaryDark]];\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n border-left: 1px solid [[ColorPalette::PrimaryLight]];\n}\n\n#messageArea {\n border: 1px solid [[ColorPalette::SecondaryDark]];\n background: [[ColorPalette::SecondaryMid]];\n color: [[ColorPalette::PrimaryDark]];\n}\n\n#messageArea .button {\n padding: 0.2em 0.2em 0.2em 0.2em;\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::Background]];\n}\n\n.popup {\n background: [[ColorPalette::PrimaryLight]];\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n.popup hr {\n color: [[ColorPalette::PrimaryDark]];\n background: [[ColorPalette::PrimaryDark]];\n border-bottom: 1px;\n}\n\n.listBreak div{\n border-bottom: 1px solid [[ColorPalette::PrimaryDark]];\n}\n\n.popup li.disabled {\n color: [[ColorPalette::PrimaryMid]];\n}\n\n.popup li a, .popup li a:visited {\n color: [[ColorPalette::TertiaryPale]];\n border: none;\n}\n\n.popup li a:hover {\n background: [[ColorPalette::PrimaryDark]];\n color: [[ColorPalette::Background]];\n border: none;\n}\n\n.tiddler .defaultCommand {\n font-weight: bold;\n}\n\n.shadow .title {\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.title {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n.subtitle {\n color: [[ColorPalette::TertiaryDark]];\n}\n\n.toolbar {\n color: [[ColorPalette::PrimaryMid]];\n}\n\n.tagging, .tagged {\n border: 1px solid [[ColorPalette::TertiaryPale]];\n background-color: [[ColorPalette::TertiaryPale]];\n}\n\n.selected .tagging, .selected .tagged {\n background-color: [[ColorPalette::TertiaryLight]];\n border: 1px solid [[ColorPalette::TertiaryMid]];\n}\n\n.tagging .listTitle, .tagged .listTitle {\n color: [[ColorPalette::PrimaryDark]];\n}\n\n.tagging .button, .tagged .button {\n border: none;\n}\n\n.footer {\n color: [[ColorPalette::TertiaryLight]];\n}\n\n.selected .footer {\n color: [[ColorPalette::TertiaryMid]];\n}\n\n.sparkline {\n background: [[ColorPalette::PrimaryPale]];\n border: 0;\n}\n\n.sparktick {\n background: [[ColorPalette::PrimaryDark]];\n}\n\n.error, .errorButton {\n color: [[ColorPalette::Foreground]];\n background: [[ColorPalette::Error]];\n}\n\n.warning {\n color: [[ColorPalette::Foreground]];\n background: [[ColorPalette::SecondaryPale]];\n}\n\n.cascade {\n background: [[ColorPalette::TertiaryPale]];\n color: [[ColorPalette::TertiaryMid]];\n border: 1px solid [[ColorPalette::TertiaryMid]];\n}\n\n.imageLink, #displayArea .imageLink {\n background: transparent;\n}\n\n.viewer .listTitle {list-style-type: none; margin-left: -2em;}\n\n.viewer .button {\n border: 1px solid [[ColorPalette::SecondaryMid]];\n}\n\n.viewer blockquote {\n border-left: 3px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer table {\n border: 2px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer th, thead td {\n background: [[ColorPalette::SecondaryMid]];\n border: 1px solid [[ColorPalette::TertiaryDark]];\n color: [[ColorPalette::Background]];\n}\n\n.viewer td, .viewer tr {\n border: 1px solid [[ColorPalette::TertiaryDark]];\n}\n\n.viewer pre {\n border: 1px solid [[ColorPalette::SecondaryLight]];\n background: [[ColorPalette::SecondaryPale]];\n}\n\n.viewer code {\n color: [[ColorPalette::SecondaryDark]];\n}\n\n//.viewer hr {\n// border: 0;\n// border-top: dashed 1px [[ColorPalette::TertiaryDark]];\n// color: [[ColorPalette::TertiaryDark]];\n//}\n\n.highlight, .marked {\n background: [[ColorPalette::SecondaryLight]];\n}\n\n.editor input {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n}\n\n.editor textarea {\n border: 1px solid [[ColorPalette::PrimaryMid]];\n width: 100%;\n}\n\n.editorFooter {\n color: [[ColorPalette::TertiaryMid]];\n}\n\n/*}}}*/
/***\n''Table of Contents Plugin for TiddlyWiki version 1.2.x and 2.0''\n^^author: Eric Shulman - ELS Design Studios\nsource: http://www.TiddlyTools.com/#TableOfContentsPlugin\nlicense: [[Creative Commons Attribution-ShareAlike 2.5 License|http://creativecommons.org/licenses/by-sa/2.5/]]^^\n\nWhen there are many tiddlers in a document, the standard 'tabbed list of tiddlers' in the right-hand sidebar can become very long, occupying a lot of page space and requiring a lot scrolling in order to locate and select a tiddler.\n\nThe TableOfContentsPlugin addresses this problem by replacing the standard tabbed list display with a single listbox/droplist control that uses a very small amount of page space, regardless of the number of tiddlers in the document.\n\n!!!!!Usage\n<<<\nTo view a tiddler, simply select (or double-click) its title from the listbox and it will automatically be displayed on the page. The listbox also includes special 'command' items that determine the order and type of tiddlers that are shown in the list:\n\n''[by title]'' displays all tiddlers in the document.\n''[by date/author/tags]'' displays indented sections, sorted accordingly, with headings (indicated by a '+') that can be expanded, one at a time, to view the list of tiddlers in that section.\n''[missing]'' displays tiddlers that have been referenced within the document but do not yet exist.\n''[orphans]'' displays tiddlers that do exist in the document but have not been referenced by a link from anywhere else within the document.\n''[system]'' displays special tiddlers that are used by TiddlyWiki to configure built-in features and add-on macros/extensions. The list includes all tiddlers tagged with <<tag systemTiddlers>> ("templates") or <<tag systemConfig>> (plug-in extensions), plus any 'shadow tiddlers' (built-in default systemTiddlers) that have not been over-ridden by custom tiddler definitions.\n\nThe current list ''display setting is indicated by an arrow (">")'' symbol to the left of command item. Selecting a command item causes the listbox to be reloaded with the appropriate contents and sort order.\n\nWhen you are viewing a list of tiddlers by date/author/tags, ''shift-clicking'' on a section heading or command item causes the listbox display to ''toggle between "show-one-section-at-a-time" and "expand-all-sections"'' display options, allowing you to quickly see all tiddler titles at once without having to view individual indented sections one at a time.\n\nThe ''size of the listbox can be adjusted'' so you can view more (or less) tiddler titles at one time. Select ''[-]'' to reduce the size by one line, ''[+]'' to increase the size by one line, or ''[=]'' to autosize the list to fit the current contents (toggles on/off). //Note: If the listbox is reduced to a single line, it displayed as a droplist instead of a fixed-sized listbox.// You can ''show/hide the entire listbox'' by selecting the "contents" label that appears above the listbox.\n<<<\n!!!!!Control Panel\n<<<\nBy default, tiddlers tagged with <<tag excludeLists>>, are omitted from the TableOfContents so that 'system' tiddlers (e.g. MainMenu, SiteTitle, StyleSheet, etc.) can be hidden, reducing "information overload" and making it easier to select relevant tiddlers when reading your document. However, when //editing// your document, including these hidden tiddlers in the list can be more helpful, so that changes to the menus, titles, styles, etc. can be more quickly accomplished.\n----\n''To include hidden tiddlers in the TableOfContents display, select the following option:''\n<<option chkTOCIncludeHidden>> include hidden tiddlers in TableOfContents(ignores <<tag excludeLists>> tag)\n^^note: this setting is ignored when ''<<option chkHttpReadOnly>> HideEditingFeatures when viewed over HTTP'' is enabled^^\n<<<\n!!!!!Parameters\n<<<\nThe macro accepts optional parameters to control various features and functions:\n* ''label:text''\nReplace the default text ("contents") that appears above the TableOfContents listbox. //Note: to include spaces in the label text, you must enclose the entire parameter in quotes// (e.g., {{{"label:my list of tiddlers"}}})\n* ''sort:fieldtype''\nSets the initial display order for items in the listbox. 'fieldtype' is one of the following pre-defined keywords: ''title'', ''modified'' //(date)//, ''modifier'' //(author)//, ''tags'', ''missing'', ''orphans'', or ''system''\n* ''date:format''\nControls the formatting of dates in TableOfContents display. 'format' is a text-substitution template containing one or more of the following special notations.\n** DDD - day of week in full (eg, "Monday")\n** DD - day of month, 0DD - adds leading zero\n** MMM - month in full (eg, "July")\n** MM - month number, 0MM - adds leading zero\n** YYYY - full year, YY - two digit year\n** hh - hours\n** mm - minutes\n** ss - seconds\n//Note: to include spaces in the formatting template, you must enclose the entire parameter in quotes// (e.g., {{{"date:DDD, DD/MM/YY"}}})\n* ''size:nnn''\nSets the initial number of lines to display in the listbox. If this parameter is omitted or "size:1" is specified, a single-line droplist is created. When a size > 1 is provided, a standard, fixed-size scrollable listbox is created. You can use "size:0" or "size:auto" to display a varible-height listbox that automatically adjusts to fit the current list contents without scrolling.\n* ''width:nnn[cm|px|em|%]''\nSets the width of the listbox control. Overrides the built-in CSS width declaration (=100%). Use standard CSS width units (cm=centimeters, px=pixels, em=M-space, %=proportional to containing area). You can also use a ".TOCList" custom CSS class definition to override the built-in CSS declarations for the listbox.\n* ''hidelist''\nHides the listbox when the TableOfContents is first displayed. Initially, only the listbox label and size controls will appear. Clicking on the listbox label text will alternately show/hide the listbox display. //Note: this setting does not affect the content of the listbox, only whether or not it is initially visible.//\n* ''prompt''\nSets the non-selectable prompt text that is displayed as the first line of the listbox //(note: this feature is not supported by the listbox control on all browsers)//. Let's you include a short text message (such as "select a tiddler"), even when displaying a compact single-line droplist.\n* ''padding:nnn[cm|px|em|%]''\nOverrides default listbox control padding. Sets the CSS padding style.\n* ''margin:nnn[cm|px|em|%]''\nOverrides default listbox control spacing. Sets the CSS margin style.\n* ''inline''\nNormally, the TableOfContents plugin is contained inside a {{{<div>}}} element. This setting causes the plugin to use a {{{<span>}}} instead, allowing for more flexible 'inline' placement when embedded within other content.\n<<<\n!!!!!Examples\n<<<\n<<tableOfContents "label:all tiddlers" sort:title width:40% size:1>>\n<<tableOfContents "label:by date" sort:modified size:1 width:40%>>\n<<tableOfContents "label:tagged tiddlers" sort:tags size:1 width:40%>>\n<<tableOfContents "label:system tiddlers" sort:system size:1 width:40%>>\n<<<\n!!!!!Installation\n<<<\nimport (or copy/paste) the following tiddlers into your document:\n''TableOfContentsPlugin'' (tagged with <<tag systemConfig>>)\n^^documentation and javascript for TableOfContents handling^^\n\ncreate/edit ''SideBarOptions'': (sidebar menu items) \n^^Add {{{<<tableOfContents>>}}} macro^^\n\n<<<\n!!!!!Revision History\n<<<\n''2006.02.14 [2.2.6]''\nFF1501 fix: add 'var r' and 'var k' to unintended global variable declarations in refreshTOCList() and getTOCListFromButton(). Thanks for report from AndreasHoefler.\n''2006.02.04 [2.2.5]''\nadd 'var' to unintended global variable declarations to avoid FireFox 1.5.0.1 crash bug when assigning to globals\n''2005.12.21 [2.2.2]''\nin onClickTOCList() and onDblClickTOCList(), prevent mouse events from 'bubbling' up to other handlers\n''2005.10.30 [2.2.1]''\nin refreshTOCList(), fixed calculation of "showHidden" to check for 'readOnly' (i.e., "via HTTP") flag\nbased on a report from LyallPearce\n''2005.10.30 [2.2.0]''\nhide tiddlers tagged with 'excludeLists' (with option to override, i.e., "include hidden tiddlers")\n''2005.10.09 [2.1.0]''\ncombined documentation and code in a single tiddler\nadded click toggle for expand-all vs. show-one-branch\n''2005.08.07 [2.0.0]''\nmajor re-write to not use static ID values for listbox controls, so that multiple macro instances can exist without corrupting each other or the DOM. Moved HTML and CSS definitions into plugin code instead of using separate tiddlers. Added macro parameters for label, sort, date, size, width, hidelist and showtabs\n''2005.08.03 [1.0.3]''\nadded "showtabs" optional parameter\n''2005.07.27 [1.0.2]''\ncore update 1.2.29: custom overlayStyleSheet() replaced with new core setStylesheet(). Added show/hide toggle (click on 'contents' link)\n''2005.07.23 [1.0.1]''\nadded parameter checks and corrected addNotification() usage\n''2005.07.20 [1.0.0]''\nInitial Release\n<<<\n!!!!!Credits\n<<<\nThis feature was developed by EricShulman from [[ELS Design Studios|http:/www.elsdesign.com]]\n<<<\n!!!!!Code\n***/\n//{{{\nversion.extensions.tableOfContents = {major: 2, minor: 2, revision: 6, date: new Date(2006,2,14)};\n//}}}\n\n// // 1.2.x compatibility\n//{{{\nif (!window.story) window.story=window;\nif (!store.getTiddler) store.getTiddler=function(title){return store.tiddlers[title]}\nif (!store.addTiddler) store.addTiddler=function(tiddler){store.tiddlers[tiddler.title]=tiddler}\nif (!store.deleteTiddler) store.deleteTiddler=function(title){delete store.tiddlers[title]}\n//}}}\n\n//{{{\n// define defaults for cookie-based option values\nif (config.options.txtTOCSortBy==undefined) config.options.txtTOCSortBy="modified";\nif (config.options.txtTOCListSize==undefined) config.options.txtTOCListSize=12;\nif (config.options.chkTOCShow==undefined) config.options.chkTOCShow=true;\nif (config.options.chkTOCIncludeHidden==undefined) config.options.chkTOCIncludeHidden=false;\n\nconfig.shadowTiddlers.AdvancedOptions += "\sn<<option chkTOCIncludeHidden>> include hidden tiddlers in TableOfContents";\n\n// define macro "tableOfContents" to render controls\nconfig.macros.tableOfContents = { label: "contents" };\nconfig.macros.tableOfContents.cmdMax=7;\n\nconfig.macros.tableOfContents.css = '\s\n.TOC { padding:0.5em 1em 0.5em 1em; }\s\n.TOC a { padding:0em 0.25em 0em 0.25em; color:inherit; }\s\n.TOCList { width: 100%; font-size:8pt; margin:0em; }\s\n';\n\nconfig.macros.tableOfContents.html = '\s\n<div style="text-align:right">\s\n <span style="float:left">\s\n <a href="JavaScript:;" id="TOCMenu" style="padding: 0em;"\s\n onclick="onClickTOCMenu(this)" title="show/hide table of contents">%label%</a>\s\n </span>\s\n <a href="JavaScript:;" id="TOCSmaller" style="display:inline"\s\n onclick="resizeTOC(this)" title="reduce list size">&#150;</a>\s\n <a href="JavaScript:;" id="TOCLarger"style="display:inline"\s\n onclick="resizeTOC(this)" title="increase list size">+</a>\s\n <a href="JavaScript:;" id="TOCMaximize"style="display:inline"\s\n onclick="resizeTOC(this)" title="maximize/restore list size">=</a>\s\n</div>\s\n';\n\nconfig.macros.tableOfContents.handler = function(place,macroName,params) { \n var parsedParams = new Array();\n parsedParams['label']=this.label;\n parsedParams['inline']=false;\n while (params.length>0) {\n if (params[0]=="label:none")\n parsedParams['label']="";\n else if (params[0].substr(0,6)=="label:")\n parsedParams['label']=params[0].substr(6);\n if (params[0].substr(0,7)=="prompt:")\n parsedParams['prompt']=params[0].substr(7);\n if (params[0].substr(0,8)=="padding:")\n parsedParams['padding']=params[0].substr(8);\n if (params[0].substr(0,7)=="margin:")\n parsedParams['margin']=params[0].substr(7);\n if (params[0].substr(0,5)=="sort:")\n parsedParams['sortby']=params[0].substr(5);\n if (params[0].substr(0,5)=="date:")\n parsedParams['date']=params[0].substr(5);\n if ((params[0]=="size:auto")||(params[0]=="size:0"))\n parsedParams['autosize']=true;\n else if (params[0] && (params[0].substr(0,5)=="size:"))\n parsedParams['requestedSize']=params[0].substr(5);\n if (params[0].substr(0,6)=="width:")\n parsedParams['width']=params[0].substr(6);\n if (params[0]=="hidelist")\n parsedParams['hidelist']=true;\n if (params[0]=="inline")\n parsedParams['inline']=true;\n params.shift(); \n }\n setStylesheet(config.macros.tableOfContents.css,"tableOfContents");\n var newTOC=createTiddlyElement(place,parsedParams['inline']?"span":"div",null,"TOC",null)\n if (parsedParams['margin']) { newTOC.style.margin=parsedParams['margin']; }\n if (parsedParams['padding']) { newTOC.style.padding=parsedParams['padding']; }\n if (parsedParams['label']!="") newTOC.innerHTML=config.macros.tableOfContents.html.replace(/%label%/,parsedParams['label']);\n var newTOCList=createTOCList(newTOC,parsedParams)\n refreshTOCList(newTOCList);\n store.addNotification(null,reloadTOCLists); // reload listbox after every tiddler change\n}\n\n// IE needs explicit global scoping for functions/vars called from browser events\nwindow.onChangeTOCList=onChangeTOCList;\nwindow.onClickTOCList=onClickTOCList;\nwindow.onDblClickTOCList=onDblClickTOCList;\nwindow.reloadTOCLists=reloadTOCLists;\nwindow.refreshTOCList=refreshTOCList;\nwindow.onClickTOCMenu=onClickTOCMenu;\nwindow.resizeTOC=resizeTOC;\n \nfunction createTOCList(place,params)\n{\n var theList = createTiddlyElement(place,"select",null,"TOCList",params['prompt'])\n theList.onchange=onChangeTOCList;\n theList.onclick=onClickTOCList;\n theList.ondblclick=onDblClickTOCList;\n theList.style.display=config.options.chkTOCShow ? "block" : "none" ;\n theList.sortBy=config.options.txtTOCSortBy;\n theList.dateFormat="DD MMM YYYY";\n theList.requestedSize=config.options.txtTOCListSize;\n theList.expandall=false;\n if (params['sortby'])\n { theList.sortBy=params['sortby']; theList.noSortCookie=true; }\n if (params['date'])\n { theList.dateFormat=params['date']; }\n if (params['autosize'])\n { theList.autosize=true; theList.noSizeCookie=true; }\n if (params['requestedSize'])\n { theList.requestedSize=params['requestedSize']; theList.noSizeCookie=true; }\n if (params['width'])\n { theList.style.width=params['width']; }\n if (params['hidelist'])\n { theList.style.display ="none" ; theList.noShowCookie=true; }\n if (params['expandall'])\n { theList.expandall=true; }\n return theList;\n}\n\nfunction onChangeTOCList()\n{\n var thisTiddler=this.options[this.selectedIndex].value;\n if ((this.size==1)&&(thisTiddler!='')) story.displayTiddler(null,thisTiddler,1);\n refreshTOCList(this);\n return false;\n}\n\nfunction onClickTOCList(e)\n{\n\n if (!e) var e = window.event;\n if (this.size==1)\n return; // don't toggle display for droplist\n if (e.shiftKey)\n { this.expandall=!this.expandall; refreshTOCList(this);}\n e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation();\n return true;\n}\n\nfunction onDblClickTOCList(e)\n{\n if (!e) var e = window.event;\n var thisTiddler=this.options[this.selectedIndex].value;\n if (thisTiddler!='') story.displayTiddler(null,thisTiddler,1);\n e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation();\n return false;\n}\n\nfunction reloadTOCLists()\n{\n var all=document.all? document.all : document.getElementsByTagName("*");\n for (var i=0; i<all.length; i++)\n if (all[i].className=="TOCList")\n { all[i].selectedIndex=-1; refreshTOCList(all[i]); }\n}\n\nfunction refreshTOCList(theList)\n{\n // DEBUG var starttime=new Date();\n var selectedIndex = theList.selectedIndex;\n if (selectedIndex==-1) selectedIndex=0;\n var sortBy = theList.sortBy;\n var showHidden = config.options.chkTOCIncludeHidden\n && !(config.options.chkHttpReadOnly && readOnly);\n\n if (selectedIndex==0) sortBy=theList.sortBy; // "nnn tiddlers" heading\n if (selectedIndex==1) sortBy='title';\n if (selectedIndex==2) sortBy='modified';\n if (selectedIndex==3) sortBy='modifier';\n if (selectedIndex==4) sortBy='tags';\n if (selectedIndex==5) sortBy='missing';\n if (selectedIndex==6) sortBy='orphans';\n if (selectedIndex==7) sortBy='system';\n if (selectedIndex>config.macros.tableOfContents.cmdMax)\n {\n if (theList.options[theList.selectedIndex].value=='')\n expandTOC(theList);\n return;\n }\n theList.sortBy = sortBy;\n if (!theList.noSortCookie)\n { config.options.txtTOCSortBy=sortBy; saveOptionCookie("txtTOCSortBy"); }\n\n // get the list of tiddlers and filter out 'hidden' tiddlers (i.e., tagged with "excludeLists")\n var tiddlers = [];\n switch (sortBy) {\n case "missing":\n tiddlers = store.getMissingLinks();\n break;\n case "tags":\n tiddlers = store.getTags();\n break;\n case "orphans":\n var titles = store.getOrphans();\n for (var t = 0; t < titles.length; t++)\n if (showHidden || store.getTiddler(titles[t]).tags.find("excludeLists")==null)\n tiddlers.push(titles[t]);\n break;\n case "system":\n var temp = store.getTaggedTiddlers("systemTiddlers");\n for (var t = 0; t < temp.length; t++)\n if (showHidden || temp[t].tags.find("excludeLists")==null)\n tiddlers.pushUnique(temp[t].title,true);\n var temp = store.getTaggedTiddlers("systemConfig");\n for (var t = 0; t < temp.length; t++)\n if (showHidden || temp[t].tags.find("excludeLists")==null)\n tiddlers.pushUnique(temp[t].title,true);\n for (var t in config.shadowTiddlers) tiddlers.pushUnique(t,true);\n tiddlers.sort();\n break;\n default:\n var temp = store.getTiddlers(sortBy);\n for (var t = 0; t < temp.length; t++)\n if (showHidden || temp[t].tags.find("excludeLists")==null)\n tiddlers.push(temp[t]);\n }\n\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n theList.saved=null;\n\n // add heading and control items to list\n var i=0;\n var theHeading=tiddlers.length+' tiddlers:';\n if (sortBy=='missing') theHeading=tiddlers.length+' missing tiddlers:';\n if (sortBy=='orphans') theHeading=tiddlers.length+' orphaned tiddlers:';\n if (sortBy=='tags') theHeading=tiddlers.length+' tags:';\n if (sortBy=='system') theHeading=tiddlers.length+' system tiddlers:';\n var indent=String.fromCharCode(160)+String.fromCharCode(160);\n var sel=">";\n theList.options[i++]=new Option(theHeading,'',false,false);\n theList.options[i++]=new Option(((sortBy=="title")?sel:indent)+' [by title]','',false,false);\n theList.options[i++]=new Option(((sortBy=="modified")?sel:indent)+' [by date]','',false,false);\n theList.options[i++]=new Option(((sortBy=="modifier")?sel:indent)+' [by author]','',false,false);\n theList.options[i++]=new Option(((sortBy=="tags")?sel:indent)+' [by tags]','',false,false);\n theList.options[i++]=new Option(((sortBy=="missing")?sel:indent)+' [missing]','',false,false);\n theList.options[i++]=new Option(((sortBy=="orphans")?sel:indent)+' [orphans]','',false,false);\n theList.options[i++]=new Option(((sortBy=="system")?sel:indent)+' [system]','',false,false);\n // output the tiddler list\n switch(sortBy)\n {\n case "title":\n for (var t = 0; t < tiddlers.length; t++)\n theList.options[i++] = new Option(tiddlers[t].title,tiddlers[t].title,false,false);\n break;\n case "modified":\n // sort descending for newest date first\n tiddlers.sort(function (a,b) {if(a['modified'] == b['modified']) return(0); else return (a['modified'] > b['modified']) ? -1 : +1; });\n // continue with same logic as for 'modifier'...\n case "modifier":\n var lastSection = "";\n for (var t = 0; t < tiddlers.length; t++)\n {\n var tiddler = tiddlers[t];\n var theSection = "";\n if (sortBy=="modified") theSection = tiddler.modified.formatString(theList.dateFormat);\n if (sortBy=="modifier") theSection = tiddler.modifier;\n if (theSection != lastSection)\n {\n theList.options[i++] = new Option('+ '+theSection,"",false,false);\n lastSection = theSection;\n }\n theList.options[i++] = new Option(indent+indent+tiddler.title,tiddler.title,false,false);\n }\n expandTOC(theList);\n break;\n case "tags":\n // tagged tiddlers, by tag\n var tagcount=0;\n var lastTag = null;\n for (var t = 0; t < tiddlers.length; t++) // actually a list of tags, not tiddlers...\n {\n var theTag = tiddlers[t][0];\n var tagged = new Array();\n var temp = store.getTaggedTiddlers(theTag);\n for(var r=0; r<temp.length; r++)\n if (showHidden || temp[r].tags.find("excludeLists")==null)\n tagged.push(temp[r]);\n if (tagged.length)\n {\n tagcount++;\n theList.options[i++]= new\n Option('+ '+theTag+" ("+tagged.length+")","",false,false);\n for(var r=0; r<tagged.length; r++)\n theList.options[i++] = new\n Option(indent+indent+tagged[r].title,tagged[r].title,false,false);\n }\n }\n // count untagged tiddlers\n var temp = store.getTiddlers("title");\n var c=0; for (var r=0; r<temp.length;r++) if (!temp[r].tags.length) c++;\n // create 'pseudo-tag' listing untagged tiddlers (if any)\n if (c>0)\n {\n theList.options[i++] = new Option("+ untagged ("+c+")","",false,false);\n for (var r=0; r<temp.length;r++) if (!temp[r].tags.length)\n theList.options[i++] = new\n Option(indent+indent+temp[r].title,temp[r].title,false,false);\n }\n theList.options[0].text=tagcount+' tags:';\n expandTOC(theList);\n break;\n case "missing":\n case "orphans":\n case "system":\n for (var t = 0; t < tiddlers.length; t++)\n theList.options[i++] = new Option(tiddlers[t],tiddlers[t],false,false);\n break;\n }\n theList.selectedIndex=selectedIndex; // select current control item\n theList.size = (theList.autosize)?theList.options.length:theList.requestedSize;\n // DEBUG var endtime=new Date();\n // DEBUG alert("refreshTOC() elapsed time: "+(endtime-starttime)+" msec");\n}\n\n// show/hide branch of TOCList based on current selection\nfunction expandTOC(theList)\n{\n var selectedIndex = theList.selectedIndex;\n if (selectedIndex==-1) selectedIndex=0;\n var sortBy = theList.sortBy;\n\n // don't collapse/expand list for alpha-sorted "flatlist" TOC contents\n if ((sortBy=="title")||(sortBy=="missing")||(sortBy=="orphans")||(sortBy=="system"))\n return;\n // or list control items\n if ((selectedIndex>0)&&(selectedIndex<=config.macros.tableOfContents.cmdMax))\n return;\n\n var theText = theList.options[selectedIndex].text;\n var theValue = theList.options[selectedIndex].value;\n // save fully expanded list contents (if not already saved)\n if (!theList.saved)\n {\n theList.saved = new Array();\n for (var i=0; i < theList.length; i++)\n {\n opt = theList.options[i];\n theList.saved[i] = new Option(opt.text, opt.value, opt.defaultSelected, opt.selected);\n }\n }\n // clear current list contents\n while (theList.length > 0) { theList.options[0] = null; }\n\n // put back all items \n if (theList.expandall)\n {\n var i=0;\n for (var t=0; t<theList.saved.length; t++)\n {\n var opt=theList.saved[t];\n theList.options[i++] = new Option(opt.text,opt.value,opt.defaultSelected,opt.selected);\n if (opt.text==theText) selectedIndex=i-1;\n }\n theList.selectedIndex = selectedIndex;\n theList.size = (theList.autosize)?theList.options.length:theList.requestedSize;\n return;\n }\n\n // put back heading items until item text matches current selected heading\n var i=0;\n for (var t=0; t<theList.saved.length; t++)\n {\n var opt=theList.saved[t];\n if (opt.value=='')\n theList.options[i++] = new Option(opt.text,opt.value,opt.defaultSelected,opt.selected);\n if (opt.text==theText)\n break;\n }\n selectedIndex=i-1; // this is the NEW index of the current selected heading\n // put back items with value!='' until value==''\n for ( t++; t<theList.saved.length; t++)\n {\n var opt=theList.saved[t];\n if (opt.value!='')\n theList.options[i++] = new Option(opt.text,opt.value,opt.defaultSelected,opt.selected);\n if (opt.value=='')\n break;\n }\n // put back remaining items with value==''\n for ( ; t<theList.saved.length; t++)\n {\n var opt=theList.saved[t];\n if (opt.value=='')\n theList.options[i++] = new Option(opt.text,opt.value,opt.defaultSelected,opt.selected);\n }\n theList.selectedIndex = selectedIndex;\n theList.size = (theList.autosize)?theList.options.length:theList.requestedSize;\n}\n\n// these functions process clicks on the 'control links' that are displayed above the listbox\nfunction getTOCListFromButton(which)\n{\n var theList = null;\n switch (which.id)\n {\n case 'TOCMenu':\n var theSiblings = which.parentNode.parentNode.parentNode.childNodes;\n var thePlace=which.parentNode.parentNode.parentNode.parentNode.parentNode.id;\n break;\n case 'TOCSmaller':\n case 'TOCLarger':\n case 'TOCMaximize':\n var theSiblings = which.parentNode.parentNode.childNodes;\n var thePlace=which.parentNode.parentNode.parentNode.parentNode.id;\n break;\n }\n for (var k=0; k<theSiblings.length; k++)\n if (theSiblings[k].className=="TOCList") { theList=theSiblings[k]; break; }\n // DEBUG if (theList) alert('found '+theList.className+' for '+which.id+' button in '+thePlace);\n return theList;\n}\n\nfunction onClickTOCMenu(which)\n{\n var theList=getTOCListFromButton(which);\n if (!theList) return;\n var opening = theList.style.display=="none";\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(theList,opening,false,"none"));\n else\n theList.style.display = opening ? "block" : "none" ;\n if (!theList.noShowCookie)\n { config.options.chkTOCShow = opening; saveOptionCookie("chkTOCShow"); }\n return(false);\n}\n\nfunction resizeTOC(which)\n{\n var theList=getTOCListFromButton(which);\n if (!theList) return;\n\n var size = theList.size;\n if (theList.style.display=="none") // make sure list is visible\n if(config.options.chkAnimate)\n anim.startAnimating(new Slider(theList,true,false,"none"));\n else\n theList.style.display = "block" ;\n switch (which.id)\n {\n case 'TOCSmaller': // decrease current listbox size\n if (theList.autosize) { theList.autosize=false; size=config.options.txtTOCListSize; }\n if (size==1) break;\n size -= 1; // shrink by one line\n theList.requestedSize = theList.size = size;\n break;\n case 'TOCLarger': // increase current listbox size\n if (theList.autosize) { theList.autosize=false; size=config.options.txtTOCListSize; }\n if (size>=theList.options.length) break;\n size += 1; // grow by one line\n theList.requestedSize = theList.size = size;\n break;\n case 'TOCMaximize': // toggle autosize\n theList.autosize = (theList.size!=theList.options.length);\n theList.size = (theList.autosize)?theList.options.length:theList.requestedSize;\n break;\n }\n if (!theList.noSizeCookie && !theList.autosize)\n { config.options.txtTOCListSize=size; saveOptionCookie("txtTOCListSize"); }\n}\n//}}}\n
/***\n!Setup and config\n***/\n//{{{\nconfig.macros.tagglyList = {};\nconfig.macros.tagglyList.listFormat = "*[[%0]]\sn";\nconfig.macros.tagglyList.label = "Tagged as %0:";\n\nconfig.macros.tagglyListControl = {};\nconfig.macros.tagglyListControl.tags = {\n title:"sortByTitle", \n modified: "sortByModified", \n created: "sortByCreated",\n asc:"sortAsc", \n desc:"sortDesc",\n hide:"hideTagged", \n show:"showTagged"\n};\n\nconfig.macros.tagglyListWithSort = {};\nconfig.macros.tagglyListWithSort.defaults = {\n sortBy:"title",\n sortOrder: "asc",\n hideState: "show"\n};\n\nconfig.macros.hideSomeTags = {};\n// note: should match config.macros.tagglyListControl.tags\nconfig.macros.hideSomeTags.tagsToHide = [\n "sortByTitle",\n "sortByCreated",\n "sortByModified",\n "sortDesc",\n "sortAsc",\n "hideTagged",\n "showTagged"\n];\n \n\n\n//}}}\n/***\n\n!Utils\n***/\n//{{{\n// from Eric\nfunction isTagged(title,tag) {\n var t=store.getTiddler(title); if (!t) return false;\n return (t.tags.find(tag)!=null);\n}\n\n// from Eric\nfunction toggleTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n if (t.tags.find(tag)==null) t.tags.push(tag);\n else t.tags.splice(t.tags.find(tag),1);\n}\n\nfunction addTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n t.tags.push(tag);\n}\n\nfunction removeTag(title,tag) {\n var t=store.getTiddler(title); if (!t || !t.tags) return;\n if (t.tags.find(tag)!=null) t.tags.splice(t.tags.find(tag),1);\n}\n\n// from Udo\nArray.prototype.contains = function(item) {\n return (this.indexOf(item) >= 0);\n}\n//}}}\n/***\n\n!tagglyList\ndisplays a list of tagged tiddlers. \nparameters are sortField and sortOrder\n***/\n//{{{\nconfig.macros.tagglyList.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n var sortBy = params[0] ? params[0] : "title"; \n var sortOrder = params[1] ? params[1] : "asc";\n\n var result = store.getTaggedTiddlers(tiddler.title,sortBy);\n if (sortOrder == "desc")\n result = result.reverse();\n\n var markup = "";\n for (var i=0;i<result.length;i++)\n markup += this.listFormat.format([result[i].title]);\n\n wikify(markup,place);\n};\n\n\n//}}}\n\n/***\n\n!tagglyListControl\nUse to make the sort control buttons\n***/\n//{{{\n\nfunction getSortBy(title) {\n var tiddler = store.getTiddler(title);\n var defaultVal = config.macros.tagglyListWithSort.defaults.sortBy;\n if (!tiddler) return defaultVal;\n var usetags = config.macros.tagglyListControl.tags;\n if (tiddler.tags.contains(usetags["title"])) return "title";\n else if (tiddler.tags.contains(usetags["modified"])) return "modified";\n else if (tiddler.tags.contains(usetags["created"])) return "created";\n else return defaultVal;\n}\n\nfunction getSortOrder(title) {\n var tiddler = store.getTiddler(title);\n var defaultVal = config.macros.tagglyListWithSort.defaults.sortOrder;\n if (!tiddler) return defaultVal;\n var usetags = config.macros.tagglyListControl.tags;\n if (tiddler.tags.contains(usetags["asc"])) return "asc";\n else if (tiddler.tags.contains(usetags["desc"])) return "desc";\n else return defaultVal;\n}\n\nfunction getHideState(title) {\n var tiddler = store.getTiddler(title);\n var defaultVal = config.macros.tagglyListWithSort.defaults.hideState;\n if (!tiddler) return defaultVal;\n var usetags = config.macros.tagglyListControl.tags;\n if (tiddler.tags.contains(usetags["hide"])) return "hide";\n else if (tiddler.tags.contains(usetags["show"])) return "show";\n else return defaultVal;\n}\n\nfunction getSortLabel(title,which) {\n var by = getSortBy(title);\n var order = getSortOrder(title);\n var hide = getHideState(title);\n if (which == "hide") return (hide == "show" ? "−" : "+"); // 0x25b8;\n else if (by == which) return which + (order == "asc" ? "↓" : "↑"); // &uarr; &darr;\n else return which;\n}\n\nfunction handleSortClick(title,which) {\n var currentSortBy = getSortBy(title);\n var currentSortOrder = getSortOrder(title);\n var currentHideState = getHideState(title);\n\n var tags = config.macros.tagglyListControl.tags;\n\n // if it doesn't exist, lets create it..\n if (!store.getTiddler(title))\n store.saveTiddler(title,title,"",config.options.txtUserName,new Date(),null);\n\n\n if (which == "hide") {\n // toggle hide state\n var newHideState = (currentHideState == "hide" ? "show" : "hide");\n removeTag(title,tags[currentHideState]);\n if (newHideState != config.macros.tagglyListWithSort.defaults.hideState)\n toggleTag(title,tags[newHideState]);\n }\n else if (currentSortBy == which) {\n // toggle sort order\n var newSortOrder = (currentSortOrder == "asc" ? "desc" : "asc");\n removeTag(title,tags[currentSortOrder]);\n if (newSortOrder != config.macros.tagglyListWithSort.defaults.sortOrder)\n toggleTag(title,tags[newSortOrder]);\n }\n else {\n // change sortBy only\n removeTag(title,tags["title"]);\n removeTag(title,tags["created"]);\n removeTag(title,tags["modified"]);\n\n if (which != config.macros.tagglyListWithSort.defaults.sortBy)\n toggleTag(title,tags[which]);\n }\n\n story.setDirty(title,true); // not sure about this..??\n story.refreshTiddler(title,false,true); // force=true\n}\n\nconfig.macros.tagglyListControl.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n var onclick = function(e) {\n if (!e) var e = window.event;\n handleSortClick(tiddler.title,params[0]);\n e.cancelBubble = true;\n if (e.stopPropagation) e.stopPropagation();\n return false;\n };\n createTiddlyButton(place,getSortLabel(tiddler.title,params[0]),"Click to change sort options",onclick,params[0]=="hide"?"hidebutton":"button");\n}\n//}}}\n/***\n\n!tagglyListWithSort\nput it all together..\n***/\n//{{{\nconfig.macros.tagglyListWithSort.handler = function (place,macroName,params,wikifier,paramString,tiddler) {\n if (tiddler && store.getTaggedTiddlers(tiddler.title).length > 0)\n wikify(\n "<<tagglyListControl hide>>"+\n (getHideState(tiddler.title) != "hide" ? \n '<html><span class="tagglyLabel">'+config.macros.tagglyList.label.format([tiddler.title])+' </span></html>'+\n "<<tagglyListControl title>><<tagglyListControl modified>><<tagglyListControl created>>\sn" + \n "<<tagglyList "+getSortBy(tiddler.title)+" "+getSortOrder(tiddler.title)+">>"\n : ""),\n place,null,tiddler);\n}\n\n//}}}\n/***\n\n!hideSomeTags\nSo we don't see the sort tags.\n(note, they are still there when you edit. Will that be too annoying?\n***/\n//{{{\n\n// based on tags.handler\nconfig.macros.hideSomeTags.handler = function(place,macroName,params,wikifier,paramString,tiddler) {\n var theList = createTiddlyElement(place,"ul");\n if(params[0] && store.tiddlerExists[params[0]])\n tiddler = store.getTiddler(params[0]);\n var lingo = config.views.wikified.tag;\n var prompt = tiddler.tags.length == 0 ? lingo.labelNoTags : lingo.labelTags;\n createTiddlyElement(theList,"li",null,"listTitle",prompt.format([tiddler.title]));\n for(var t=0; t<tiddler.tags.length; t++)\n if (!this.tagsToHide.contains(tiddler.tags[t])) // this is the only difference from tags.handler...\n createTagButton(createTiddlyElement(theList,"li"),tiddler.tags[t],tiddler.title);\n\n}\n\n//}}}\n/***\n\n!Refresh everything when we save a tiddler. So the tagged lists never get stale. Is this too slow???\n***/\n//{{{\n\nfunction refreshAllVisible() {\n story.forEachTiddler(function(title,element) {\n story.refreshTiddler(title,false,true);\n });\n}\n\nstory.saveTiddler_orig_mptw = story.saveTiddler;\nstory.saveTiddler = function(title,minorUpdate) {\n var result = this.saveTiddler_orig_mptw(title,minorUpdate);\n refreshAllVisible();\n return result;\n}\n\nstore.removeTiddler_orig_mptw = store.removeTiddler;\nstore.removeTiddler = function(title) {\n this.removeTiddler_orig_mptw(title);\n refreshAllVisible();\n}\n\n//}}}\n\n// // <html>&#x25b8;&#x25be;&minus;</html>
The Den Project, out of Ganstrom's Creek, Maine, specializes in all forms of lycanthropy. The Project is guarded by GemeinKrugge security and involves such researchers as German Occultist Dr. Jergen Reinhart (part-time), Telepathic psychologist Dr. Kim Anders, Deputy Project Co-ordinator and nature writer Dr. Edison Scott, Project Co-ordinator and proven field envoy Richard Mason, and until recently, Astral Transformer George Nash.\n\n[[Chicago Team 37]] met one of the Den's sniffers, Matt Becker, in Snowflake Valley in February 2006.
The "Unknown" is the term used by Charles O'Boylan to describe the domain from which evil supernatural entities seem to emanate. His poetic waxings on the subject imply that the Unknown itself, not just the creatures it contains, is sentient and willfully evil. It appears that creatures draw their power, consciously or not, from it for their inhuman abilities to operate. \n\nIn recent years, [[SAVE]] believes it has come closer to a metaphysical definition of what exactly the Unknown is, with the aid of an organization known as the [[Wilmarth Foundation]]. According to Wilmarth, a dimension exists where psychic energy takes form, shaped by the unconscious thoughts of individuals and the human populace at large. They refer to this as the Dreamlands, a place where the collective unconsciousness becomes manifest.\n\nTravel between this dimension and ours is possible, though very difficult. Throughout history, things conjured from humanity's shared nightmares and superstitions have, on occasion, found their way from that other realm into our world: vampires, ghosts, demons and the like. These rare appearances help spread belief in the actual existence of these creatures, creating a feedback loop within the Dreamlands, as the possiblity of such things existing infected the public imagination.\n\nThe Wilmarth Foundation, working with SAVE in recent years, thinks that portions of the Dreamlands were reaching a psychic "critical pressure", which O'Boylan's experiments (see [[History of SAVE|History]]) released. Creatures and phenomena "gushed" forward as a result, though that gushing has seemed to our world's perspective to be more of a slow but steady increase of supernatural activity over a period of several decades.\n\nIf this theory is correct, then it has become even more imperative that SAVE keep their activities hidden from the public, as awareness simply fuels the fearful imaginations which allow the creaturesof the Unknown to spawn in the Dreamlands in the first place. SAVE has noticed that, despite a high rate of attrition, it's numbers of envoys, in particular ones who have had direct contact with supernatural events, continue to grow. They take this as a sign that the feedback loop within the Dreamlands is truly in effect, which SAVE and its own campaign against the Unknown is contributing to some extent. Many believe the only way out of this vicious circle is to somehow close the doorway which Charles O'Boylan opened a century and a half ago. Even if this task were somehow accomplished, the organization recognizes it would still have to deal with creatures of the Unknown which remained in this world for years to come.\n\nThe exact nature of the events leading up O'Boylan's disasterous experiments are still not entirely agreed upon between the Wilmarth Foundation and SAVE scholars. The director of the Central Archives has stated SAVE's official position is that the dark man who assisted Prof. O'Boylan was a manifestation of the intelligence behind the Unknown, or an emissary for it, manipulating the professor into unleashing it.\n\nThe Wilmarth Foundation, however, claim that the dark man was part of the "CCD", or a "Cthulhu Cycle Deity", who often delivers tools of destruction in the form of knowledge to the willing and unwitting. Wilmarth's claim is that there is a "true Unknown", formed of races, dimensions and god-like entities which are so removed from human experience that our psyches could not have imagined them into existence within the Dreamlands. Their reality is so utterly alien that the Foundation has lost as many investigators to insanity as it has to death. There is some division within SAVE as to the validity of the Foundation's point of view, but most members agree that SAVE may not have the whole picture.\n\nThe [[Hoffman Institute]], an organization SAVE has crossed paths with in the past and occasionally shared resources, refer to the supernatural presences in our world as "dark matter". They have also acknowledged that the level of paranormal activity appears to be on the rise across the globe, but according to their research, this matches events predicted by the aztec calendar. They expect this activity to reach its peak in the year 2012. However, the exact nature of their investigation into the occult is not entirely clear. As SAVE has not made the Institute privy to the O'Boylan papers, they do not know what their take on those events would be.
/***\n|''Name:''|TiddlerListMacro|\n|''Version:''|2.0.10 (01-May-2006)|\n|''Source''|http://jackparke.googlepages.com/jtw.html#TiddlerListMacro ([[del.icio.us|http://del.icio.us/post?url=http://jackparke.googlepages.com/jtw.html%23TiddlerListMacro]])|\n|''Author:''|[[Jack]]|\n|''Type:''|Macro|\n|''Documentation:''|TiddlerListMacroDocumentation|\n!Usage\n{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}\nSee TiddlerListMacroDocumentation and TiddlerListMacroExamples\n!Code\n***/\n//{{{\nversion.extensions.tiddlerList = {major: 2, minor: 0, revision: 10, date: new Date("May 2, 2006")};\n// template = [header, item, separator, group, footer]\nconfig.macros.tiddlerList={\n formats : {list:true, nlist:true, span:true, stack:true, csv:true, table:true},\n templates : {\n list : [ "%0\sn", "* %0\sn", "", "%group\sn", "%0\sn"],\n nlist : [ "%0", "# %0\sn", "", "%group\sn", "%0\sn"],\n span : [ "%0", "%0", " ", "%group", "%0"],\n stack : [ "%0", "%0", "\sn", "%group", "%0"],\n csv : [ "%0", "%0", ", ", "%0", "%0\sn"],\n table : ["|!%0|\sn", "|%0|\sn", "", "|%group|\sn", "|%0|\sn"]\n },\n dateFormat : "DD MMM YYYY"\n}\n\nif (!gCurrentTiddler)\n var gCurrentTiddler;\n\nconfig.macros.tiddlerList.handler = function(place,macroName,params,wikifier,paramString,tiddler)\n{\n // Some globals\n var count=0, groupCount=0, theGroup="", lastGroup="";\n var currentTiddler = tiddler;\n gCurrentTiddler = tiddler;\n var listWikiText="";\n var formats = this.formats;\n \n // SQL-Like parameters\n var parameters = paramString.parseParams("name",null,true);\n var pTags = parameters[0]["tags"]?parameters[0]["tags"][0].split(","):[];\n var pOrder = parameters[0]["order"]?parameters[0]["order"][0]:"title";\n var pTop = parameters[0]["top"]?parameters[0]["top"][0]:-1;\n var pText = parameters[0]["text"]?parameters[0]["text"][0]:"";\n var pTitle = parameters[0]["title"]?parameters[0]["title"][0]:"";\n var pSearch = parameters[0]["search"]?parameters[0]["search"][0]:"";\n var pFilter = parameters[0]["filter"]?parameters[0]["filter"][0]:"";\n var pHeader = parameters[0]["header"]?paramFormat(parameters[0]["header"][0]):"";\n var pFooter = parameters[0]["footer"]?paramFormat(parameters[0]["footer"][0]):"";\n var pGroup = parameters[0]["group"]?parameters[0]["group"][0]:"";\n var pDateFormat = parameters[0]["dateFormat"]?parameters[0]["dateFormat"][0]:this.dateFormat;\n var pCustomParameter = parameters[0]["customParameter"]?parameters[0]["customParameter"][0]:"";\n var pFormat = parameters[0]["format"]?parameters[0]["format"][0]:"list";\n pFormat = formats[pFormat]?pFormat:"list"\n \n // Separator\n var pSeparator = parameters[0]["separator"]?paramFormat(parameters[0]["separator"][0]):(parameters[0]["seperator"]?paramFormat(parameters[0]["seperator"][0]):this.templates[pFormat][2])\n\n // Template for group\n var pGroupTemplate = this.templates[pFormat][3];\n if (parameters[0]["groupTemplate"])\n pGroupTemplate = paramFormat(parameters[0]["groupTemplate"][0])\n pGroupTemplate = pGroupTemplate.replace("$))", ">>")\n \n // Template for group footer\n var pGroupFooterTemplate = "";\n if (parameters[0]["groupFooterTemplate"])\n pGroupFooterTemplate = paramFormat(parameters[0]["groupFooterTemplate"][0])\n pGroupFooterTemplate = pGroupFooterTemplate.replace("$))", ">>")\n \n // Template for item\n var pItemTemplate = this.templates[pFormat][1];\n if (parameters[0]["itemTemplate"])\n pItemTemplate = paramFormat(parameters[0]["itemTemplate"][0])\n pItemTemplate = pItemTemplate.replace("$))", ">>").replace("%link", "%0").replace("%item", "%1").replace("%abstract", "%2").replace("%text", "%3").replace("%created", "%4").replace("%modified", "%5").replace("%modifier", "%6").replace("%group", "%7").replace("%title", "%8").replace("%tags", "%9").replace("%nolink", "%10").replace("%custom", "%11")\n // Template for footer\n var pFooterTemplate = this.templates[pFormat][4].replace("%count", "%1")\n\n // Get all tiddlers\n var tiddlers = store.reverseLookup("tags","excludeLists",false);\n\n // Sorting\n if(!pOrder)\n pOrder = "title";\n if (pOrder.match(/^\s-/i)) {\n pOrder = pOrder.substr(1)\n var sortDesc = true;\n }\n if (sortDesc)\n tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] > b[pOrder]) ? -1 : +1; });\n else\n tiddlers.sort(function (a,b) {if(a[pOrder] == b[pOrder]) return(0); else return (a[pOrder] < b[pOrder]) ? -1 : +1; });\n\n // Header\n if (pHeader)\n listWikiText += formatItem(this.templates[pFormat][0], [pHeader], pFormat)\n \n for(var t=0; t<tiddlers.length; t++) {\n tiddler = tiddlers[t];\n if (pTop==-1 || count<pTop) {\n if (pText=="" || tiddler.text.match(pText)) {\n if (pTitle=="" || tiddler.title.match(pTitle)) {\n if (pSearch=="" || (tiddler.title.match(pSearch) || tiddler.text.match(pSearch))) {\n if (pFilter=="" || eval(pFilter)) {\n if (pTags.length==0 || compareArrays(tiddler.tags, pTags, "all")) {\n count++;\n // Grouping\n if (pGroup) {\n theGroup = eval(pGroup);\n if(theGroup != lastGroup) {\n groupCount++;\n if (pGroupFooterTemplate && groupCount>1)\n listWikiText += pGroupFooterTemplate.replace("%group", theGroup)\n listWikiText += pGroupTemplate.replace("%group", theGroup)\n lastGroup = theGroup;\n }\n }\n // Separators\n if (count>1) listWikiText += pSeparator;\n //Plaintext title\n var noLink = tiddler.title.match(config.textPrimitives.wikiLink)?"~" + tiddler.title:tiddler.title;\n // Custom parameter\n if (pCustomParameter)\n var custom="";\n try {\n custom = eval(pCustomParameter)\n } catch (e) {}\n // List individual tiddler\n listWikiText += formatItem(pItemTemplate,["[[" + tiddler.title + "]]",count,tiddler.text.substr(0,100),tiddler.text,tiddler.created.formatString(pDateFormat),tiddler.modified.formatString(pDateFormat),tiddler.modifier,theGroup,tiddler.title,tiddler.tags.join(" "),noLink,custom], pFormat)\n }\n }\n }\n }\n }\n }\n }\n \n // Last group footer\n if (pGroup && pGroupFooterTemplate && count>0)\n listWikiText += pGroupFooterTemplate.replace("%group", theGroup)\n\n // Footer\n if (pFooter) {\n pFooter = pFooter.replace("%count", count)\n listWikiText += formatItem(pFooterTemplate, [pFooter], pFormat)\n }\n \n // Render result\n if (!parameters[0]["debug"])\n wikify(listWikiText,place, null, currentTiddler)\n else\n place.innerHTML = "<textarea style=\s"width:100%;\s" rows=30>" + listWikiText + "</textarea>"\n \n \n // Local functions\n \n function paramFormat(param) {\n // Allow "\sn" in non evalled parameters\n return param.replace(/\s\sn/g, "\sn");\n }\n \n function formatItem(template, values, format) {\n // Fill template with values (depending on list format)\n if (format.match(/table/) && values[0].match(/\s|/))\n return ("%0\sn").format(values)\n else\n return template.format(values)\n }\n \n function compareArrays(array, values, logic) {\n // Compare items in array with AND("all") or OR("any") logic\n var matches=0;\n for(var v=0; v<values.length; v++)\n if(values[v].match(/^\s-/) && !array.contains(values[v].substr(1)))\n matches++;\n else if (array.contains(values[v]))\n matches++;\n return ((logic=="all" && matches==values.length) || (logic!="all" && matches>0))\n }\n \n}\n\nString.prototype.prettyTrim = function(len,prefix,postfix) {\n var result = this.trim().replace(/\sr\sn/g,' ').replace(/\sn/g,' ');\n if (!prefix) prefix = '';\n if (!postfix) postfix = '';\n if (result.length > len - 3)\n return prefix + result.substr(0,len) + '...' + postfix;\n else if (result.length > 0)\n return prefix + result + postfix;\n else\n return result;\n}\n\n//}}}
!Description\nThe TiddlerListMacro lists tiddlers with ~SQL-Like features:\n* List tiddlers containing a word in the title or text (case-sensitive)\n* List tiddlers tagged with given tags or exclude certain tags\n* Ascending and descending sorting of single fields\n* Limit number of tiddlers displayed\n* Specify different HTML formats for the lists\n* Grouping of items in a list\n* Customizable wiki templates\n* Numbering and totals\n!Revision History\n* Original by [[Jack]] 17-Apr-2006\n* Added formatting (v2.0.1 18-Apr-2006)\n* Added grouping (v2.0.2 18-Apr-2006)\n* Added flexible filtering (v2.0.3 19-Apr-2006)\n* Added custom item templates (v2.0.4 20-Apr-2006)\n* Added custom templates (v2.0.5 21-Apr-2006)\n* Allow evalled parameters (v2.0.7 23-Apr-2006)\n* Allow groupFooterTemplate (v2.0.9 30-Apr-2006)\n* Added the customParameter (v2.0.10 2-May-2006)\n!To Do\n* Case-insensitive searching\n* Sorting on multiple fields\n!Usage\n{{{<<tiddlerList parameter1:"value1" parameter2:"value2" ...>>}}}\n!Examples ([[TiddlerListMacroExamples]])\nList all tiddlers tagged with "Plugin"\n{{{<<tiddlerList tags:Plugin>>}}}\nList newest 3 plugins which are not templates:\n{{{<<tiddlerList tags:"Plugin,-Template" top:3 order:"-created">>}}}\nList all tiddlers containing "Jack" in their title or text (last modified first):\n{{{<<tiddlerList search:"Jack" order:"-modified">>}}}\nList all tiddlers starting with "T" in a table:\n{{{<<tiddlerList title:"^T" format:"table" header:"Tiddlers beginning with T" footer:"%count items listed">>}}}\nGroup tiddlers by first letter\n{{{<<tiddlerList top:"15" group:"tiddler.title.substr(0,1)" groupTemplate:"''%group''">>}}}\nShow a list of all tiddlers with creation date (overrides default item template)\n{{{<<tiddlerList itemTemplate:"* %link (%created)\sn">>}}}\nShow all tiddlers that have the host's tiddler title in their tag list\n{{{<<tiddlerList filter:"tiddler.tags.contains(currentTiddler.title)">>}}}\n!Parameters\n|!Parameter|!Type|!Meaning|!Example|\n|top|Integer|Number of tiddlers to display|"10"|\n|tags|String|List tiddlers with matching tags (AND Logic). Leading - to exclude.|"~ToDo,Urgent,-Done"|\n|title|~RegEx|List tiddlers with matching title|"^[Pp]"|\n|text|~RegEx|List tiddlers with matching text|"Searchtext"|\n|search|~RegEx|List tiddlers with matching title OR text|"Problem"|\n|filter*|~JavaScript|List tiddlers according to boolean expression)|"tiddler.title.length<4 && tiddler.tags.contains('Idea')"|\n|format|String (fixed list)|HTML formatting of list. list (ul, default), nlist (ol), span, stack (div), csv, table.|"list"|\n|order|String|Sort order of tiddlers. - is descending, + ascending|"-created"|\n|group*|~JavaScript|Grouping field|tiddler.title.substr(0,1)|\n|customParameter*|~JavaScript|Custom parameter to be evalled for use in the itemTemplate|tiddler.text.match(/Version: (.*)/)[1]|\n|header|String|Top caption|"Tiddlers beginning with T"|\n|footer|String|Bottom caption|"End of list"|\n|itemTemplate|~WikiTemplate|~WikiText with %placeholders|"%link\sn%abstract\sn%modified"|\n|groupTemplate|~WikiTemplate|~WikiText with %placeholders for the start of each group|"!!%group"|\n|groupFooterTemplate|~WikiTemplate|~WikiText with %placeholders for the end of each group|"----\sn"|\n|dateFormat|String|Date formatting string when displaying dates|~YYYY-MM-DD|\n|separator|String|Define a string or character to be inserted between items listed|" "|\n|debug|Boolean|Set to 1 or true for debug mode where only wikitext will be output|debug:1|\n{{{*}}} Parameter will be evalled (do not pass with {{{{{ }} }}} unless you want it evalled twice!)\n!Template Placeholders\nPlaceholder values for itemTemplate parameter\n|!Placeholder|!Field|\n|%item|List item number|\n|%link|Link to Tiddler {{{[[MyTiddler]]}}}|\n|%title|Tiddler Name {{{MyTiddler}}}|\n|%nolink|Unlinked Tiddler Title {{{~MyTiddler}}}|\n|%abstract|First 100 chars of tiddler text|\n|%text|All tiddler text|\n|%tags|Tags separated by space|\n|%created|Creation date|\n|%modified|Modified date|\n|%modifier|Last modifier|\n|%group|Name of group field|\n|%custom|The result of your evalled customParameter|\n|%count|Number of items listed (footer only)|\n!Variables\n{{{{{currentTiddler}} }}}refers to the current (host) tiddler in function scope (i.e. within the filter or group parameters)\n{{{{{gCurrentTiddler}} }}}refers to the current (host) tiddler in global scope (i.e. within{{{ {{}} }}}evalled parameters. Example:\n{{{<<tiddlerList tags:{{gCurrentTiddler.title}}>>}}}\n!Style\nNo styles are pre-assigned to the lists. Use {{{@@}}} notation to define custom styles in the header, footer, groupTemplate and itemTemplate parameters.
<!--{{{-->\n<div class="toolbar" macro="toolbar -closeTiddler closeOthers +editTiddler permalink jump"></div>\n<img src="images/sm_eye.gif" class="title_eye" >\n<div style="display: inline;"><span class='title' macro='view title'></span></div>\n<div class="tagglyTags">\n <div class="tagglyTagging" macro="tagglyList"></div>\n <div class="tagglyTagged" macro="tags"></div>\n</div>\n<div class="viewer" macro="view text wikified"></div>\n<div style="clear: both;"></div>\n<!--}}}-->
Notes on updates to rules, campaign background or recent sessions.\n\n''Feb 16th '07''\nSummary is up for [[Session 2|Session 2: 02/11/07]]\n\n''Jan 26th '07''\nThe campaign is going to be trying out the //Chill// playtest rules rather than d20 Modern. Made updates to the site to reflect the change, including notes on [[Sanity]]
The Wilmarth Foundation was started by Albert N. Wilmarth, a professor of English at Miskatonic University in 1937. The original purpose of the Foundation was the study and collection of folklore. Though a part of the university, the Foundation receives most of its funding from its members, giving it a certain degree of autonomy from Miskatonic, and freeing it from the "publish or perish" paradigm for its continued existence, as well as being able to choose its own projects. \n\nOne distinct aspect of the Foundation, compared to other similar literary research groups, is their working principal that almost all folklore has some basis in fact. With this premise, members will often go to great lengths researching the historical events which gave rise to the stories they record. What is unknown to the public, indeed to even some of its members, is that these investigations often brought researchers into direct conflict with supernatural entities that did in fact form the basis of a good deal of folklore regarded by most as superstition.\n\nThe Wilmarth Foundation's primary supposition is that there is a group of entities, the "Cthulhu Cycle Deities", or CCD, which exist in higher dimensions than our own. Earth unfortunately serves as a natural multidimensional crossroads for these beings. However, the vagaries of movement through such complex, interacting realities has left some trapped or stranded here. Most of these beings have little or no interest in humanity, though their mere presence is often enough to endanger us. They also will not hesitate to use or squash us, as it suits their alien, unfathomable needs. In addition, there are persons of questionable mental stability that, upon learning of the existence of the CCD, will try to manipulate or gain favor with them, committing horrific acts in the process, and drawing the dangerous attention of these beings to our world. The Foundation's true goal is to understand and thwart the plans of the Cthulhu Cycle Deities and their followers whenever possible.\n\nIn the late 70's, after years of envoys bumping into Wilmarth Foundation members doing "research" in the field, [[SAVE]] finally had enough evidence to conclude Wilmarth was pursuing many of the same goals as itself. Communications where officially opened between the two organizations in November of 1978. While SAVE and Wilmarth have shared research resources on occasion since then, philosophical differences both in priorities and theories regarding the nature of the supernatural have kept them from collaborating in the field, except on rare occasions. \n\nRelationships between both paranormal investigative groups remained scholarly and polite but cool for several years. However, following the collapse of SAVE's internal hierarchy with the revelation of the true nature of Charles O'Boylan's [[psychic experiments|History]], the Boston chapter of SAVE reached out to Wilmarth for assistance. Together they came up with a unifying theory which addressed both groups' models of the [[Unknown|The Unknown]]. Armed with at least what they felt was a clearer understanding of the nature of the problem, the Boston branch held together better than most in the last decade of the twentieth century, as they strove to find a way to stop the hemorrhage of nightmares O'Boylan had started.\n\nThough isolated from most other envoys, Team 37 of the Chicago branch had several missions which produced a large amount of apparent evidence supporting the theory which came out of the Wilmarth and Boston office cooperative effort. Most of the documents discovered by them are now in the Wilmarth archives, and several arcane artifacts, including a onyx globe capable of allowing travel to the Dreamlands, have been sent to a secure SAVE vault in Montreal.\n\nIn the new millennium Wilmarth still pursues the same agenda, and some SAVE branches and envoys have come to accept their explanation of the Unknown. Others, though, still consider their pursuits misguided, especially with the descendents of the original SAVE founders now back at the helm of the organization. Many find sufficient evidence that creatures of the Unknown are still the primary threat to humanity, and that the CCD are simply another addition to the Unknown's repertoire of horrors. Even if the Wilmarth Foundation is right, they ask, which is worse, beings of incomprehensible minds that might destroy us simply because we are in their way, or those that seek to do so knowingly because they are pure reflections of the evil within our own dreams?