Your browser lacks required capabilities. Please upgrade it or switch to another to continue.
Loading…
,,,,,,,,,/* https://intfiction.org/t/passing-the-output-of-a-passage-into-a-variable-in-sugarcube-2-33/47725/11 */
<<set setup.lamp = function () { return "The lamp is <<if $lampOn>>on<<else>>off<</if>>."; }>>
<<set setup.lamp2 = function (passin) { return "The lamp is " + passin + "."; }>>
<<= setup.lamp()>>
<<= setup.lamp2("green")>>
Things to implement!
Misc tasks:
-Make sure reagent initialization has all the data it needs
-Better comment formatting everywhere :)
-Add individual potion notes (wand, extra effects, etc)
-Search options for sweet, poison
Future plans:
-Account for wildcard reagents
-Show which recipes can be made with shelf contents
-Show which ailments a recipe can cure
-Merge extra effects added by ingredients, detect whether they are accounted for by the potion
-Remove ingredients from shelf when crafting
Rework the shelf:
-Div that's always visible regardless of current passage (not built into the filter/brew/etc pages)
-Tall vertical on left like original UI?
-Can be expanded or collapsed
-When adding/removing items on shelf, set reagent.quantity++/-- (allowing duplicate ingredients in the shelf)
-Potentially display effects/potency too?
-Buttons to increase/decrease quantity of existing items in shelf
-
<<button "Save Recipe">>
<<set _newPotion = {
details : clone($currPotion),
ingredients : clone($benchContents)
}>>
<<if _newPotion.details.desc == "Enter your own name and description for this potion here.">>
<<set _newPotion.details.desc = "">>
<</if>>
<<set $potionList.push(_newPotion)>>
<<dialog "Recipe Saved">>
_newPotion.details.name has been added to the Recipes tab.
<div @class = "'bottle-sprite ' + setup.lists.bottleStyles[$currPotion.style] + '-flask'" @style = "'margin: auto; width: 100px; height: 100px; background-color: ' + setup.lists.bottleColors[$currPotion.color]"></div>
<</dialog>>
<<unset _newPotion>>
<</button>>
<<button "Reset">>
<<include "Potion Initialization">>
<<set $benchContents = {}>>
<<printPotion>>
<</button>>
<div id = "shelf-brew" class = "clearfix" style = "float: left; width: 250px; overflow-y: auto">
<<printShelfBrewing>>
</div>
<div id = "potion-info" style = "float: left; width: 780px">
<div id = "potion-header" class = "clearfix"></div>
<div class = "clearfix">
<div style = "float: left; width: 30%">
<div id = "potion-effects">''Effects:''<br/></div>
</div>
<div style = "float: left; width: 70%">
<div id = "potion-ingredients">''Ingredients:''<br/></div>
</div>
</div>
<div id = "potion-notes" style = "width: 50%; margin-top: 20px">''Notes:''<br/></div>
</div>
<<done>>
<<printPotion>>
<</done>>
/* ------------------------------------------------------------------------ */
/* UNLOCK SETUP */
/* Recall whether unlocks have been achieved */
/* ------------------------------------------------------------------------ */
<<set setup.unlocks = {}>>
<<set setup.unlocks.core = "">>
<<set setup.unlocks.tinker = recall("tinkerUnlock", "blurred")>>
<<set setup.unlocks.guest = recall("guestUnlock", "blurred")>>
<<set setup.unlocks.delve = recall("delveUnlock", "blurred")>>
/* ------------------------------------------------------------------------ */
/* LIST SETUP */
/* Defines the basic lists of data used throughout the game. */
/* ------------------------------------------------------------------------ */
<<include "StoryInit - List Setup">>
/* ------------------------------------------------------------------------ */
/* IMAGE SETUP */
/* Syntax: [img[$imgPath + "filename" + ".png"]] */
/* <img src = $imgPath + "filename" + ".png" class = "foo"> */
/* Published path: ./images/ */
/* Local path: file:///Users/wes/Documents/Twine/demo/ */
/* ------------------------------------------------------------------------ */
<<set $imgPath = "file:///Users/wes/Documents/Twine/demo/">>
<<set $bottleStyle = ["bubbly", "bulb", "heart", "label", "spiral", "standing"]>>
<<set $bottleColor = ["aliceblue", "coral", "darkorchid", "forestgreen", "wheat", "crimson"]>>
/* ------------------------------------------------------------------------ */
/* REAGENT AND AILMENT INITIALIZATION */
/* Lists of reagents and ailments are stored as temporary arrays. Later */
/* these are looped into setup object to create data objects. */
/* ------------------------------------------------------------------------ */
<<include "StoryInit - Reagent Library">>
<<include "StoryInit - Reagent Setup">>
<<include "StoryInit - Ailment Library">>
<<include "StoryInit - Ailment Setup">>
/* Find all tags on all reagents, add them to an array, and alphabetize */
<<set _tempEffects = []>>
<<for _reagent range setup.reagents>>
<<for _tag range _reagent.tags>>
<<set _tempEffects.pushUnique(_tag)>>
<</for>>
<</for>>
<<set setup.lists.effects = _tempEffects.sort(function (a, b){return (a > b) ? 1 : ((b > a) ? -1 : 0);})>>
<<set setup.lists.effects.delete("ANYTHING")>>
<<unset _reagent, _tempEffects, _tag>>
/* Set "wildcard reagents" to have all effects as their tags. */
<<set setup.reagents.signalsalve.tags = clone(setup.lists.effects)>>
<<set setup.reagents.wyrdwater.tags = clone(setup.lists.effects)>>
/* ------------------------------------------------------------------------ */
/* FILTER UI SETUP */
/* Full filter, empty shelf */
/* ------------------------------------------------------------------------ */
<<resetSearch>>
<<getAilment>>
<<set $currentAilment = "">>
<<set $currentPatient = {}>>
/* ------------------------------------------------------------------------ */
/* POTION SETUP */
/* Initialize a blank empty potion */
/* ------------------------------------------------------------------------ */
<<include "Potion Initialization">>
/* Empty list setup */
<<set $searchResults = []>>
<<set $shelfContents = {}>>
<<set $benchContents = {}>>
<<set $potionList = []>>
<<set _reagentsInit = [
{
"id" : "kittysnot",
"name" : "Kitty Snot",
"type" : "Animal",
"potency" : 1,
"desc" : "This is seriously gross. Why are you harvesting this?",
"source" : "core",
"locales" : {"dwarf" : 3, "village" : 1, "strange" : 2},
"seasons" : {},
"methods" : [ ["raw"] ],
"effects" : [ ["PARASITE", "MAGIC"] ],
"prep" : ["Add a little dollop for "],
},
{
"id" : "loversrose",
"name" : "Lover's Rose",
"type" : "Plant",
"potency" : 2,
"desc" : "Pluck it for the one you love the most but beware its thorns.",
"source" : "core",
"locales" : {"forest" : 3, "village" : 4, "dungeon" : 2},
"seasons" : {"summer" : -3},
"methods" : [ ["raw"], ["crush", "boil"] ],
"effects" : [ ["MAGIC", "PAIN"], ["CURSE"] ],
"prep" : ["Add raw petals to enchant with ", "Crush petals and boil them for "],
"sweet" : 1
},
{
"id" : "ettercapvenom",
"name" : "Ettercap Venom",
"type" : "Animal",
"potency" : 3,
"desc" : "A living nightmare to collect.",
"source" : "core",
"locales" : {"forest" : 7, "mountain" : 10},
"seasons" : {"winter" : 2, "autumn" : 1},
"methods" : [ ["distil"] ],
"effects" : [ ["RASH"] ],
"prep" : ["Distil venom for "],
"poison" : 2
},
{
"id" : "dandelionjuice",
"name" : "Dandelion Juice",
"type" : "Plant",
"potency" : 1,
"desc" : "Annoying yellow flowers that crop up everywhere. Very hardy! Tastes really bitter.",
"source" : "tinker",
"locales" : {"village" : 2, "mountain" : 5},
"seasons" : {},
"methods" : [ ["distil"], ["boil"] ],
"effects" : [ ["RASH"], ["PARASITE", "OBJECT"] ],
"prep" : ["Distil pollen for ", "Boil leaves for "],
"sweet" : -1
},
{
"id" : "eyeofnewt",
"name" : "Eye of Newt",
"type" : "Animal",
"potency" : 1,
"desc" : "You never forget the classics, but they're so unoriginal they'll put you to sleep.",
"source" : "guest",
"locales" : {"dungeon" : 2, "mountain" : 6},
"seasons" : {},
"methods" : [ ["raw"] ],
"effects" : [ ["COLD", "WOUND"] ],
"prep" : ["Add raw eye to produce "],
"potionNotes" : "Adds SLEEP ★ to the patient's effects. "
},
{
"id" : "sprocketdust",
"name" : "Sprocket Dust",
"type" : "Made",
"potency" : 3,
"desc" : "Magical shavings from the alchemical workshops in the village.",
"source" : "delve",
"locales" : {"village" : 8},
"seasons" : {},
"methods" : [ ["crush"] ],
"effects" : [ ["PAIN", "MAGIC"] ],
"prep" : ["Sprinkle crushed dust if you need "],
"sweet" : 2
},
{
"id" : "tinyman",
"name" : "Tiny Man",
"type" : "Made",
"potency" : 2,
"desc" : "This little dude just winds up and runs around. So silly! How could you put him into a potion, really?",
"source" : "delve",
"locales" : {"village" : 13, "dungeon" : 4},
"seasons" : {},
"methods" : [ ["boil"], ["crush", "distil"] ],
"effects" : [ ["HAIR"], ["LUNGS", "SKIN"] ],
"prep" : ["Boil the man's sweat for ", "Crush and distil his shoes for "],
"poison" : 3
}
]>>
/* ------------------------------------------------------------------------- */
/* REAGENT OBJECT SETUP */
/* Defines the setup.reagents object which is used with _reagentsInit to */
/* add objects to setup.reagents[id] using the 'id' property. */
/* */
/* ------------------------------------------------------------------------- */
<<set setup.reagents = {}>>
<<for _currReagent range _reagentsInit>>
<<set setup.reagents[_currReagent.id] = _currReagent>>
<<set setup.reagents[_currReagent.id].tags = setup.reagents[_currReagent.id].effects.flat()>>
<</for>>
<<unset _reagentsInit>><div id="interface" class = "UI clearfix">
<div id = "main-container" style = "width: 80%">
<div id = "notifications" data-passage = "Notifications"></div>
<div id = "menu" data-passage = "Menu"></div>
<div id = "passages"></div>
</div>
</div><div class = "menu-wrapper">
<<disable passage() == "Ailments">><<button [[Ailments]]>><</button>><</disable>>
<<disable passage() == "Reagents">><<button [[Reagents]]>><</button>><</disable>>
<<disable passage() == "Brew">><<button [[Brew]]>><</button>><</disable>>
<<disable passage() == "Recipes">><<button [[Recipes]]>><</button>><</disable>>
<<disable passage() == "About">><<button [[About]]>><</button>><</disable>>
</div>
<div class = "dropbtn ail-ribbon ribbon55">
<div id = "ailmentButton">
<<button "Diagnosis">>
<<toggleclass ".ail-dropdown" "hidden">>
<<toggleclass ".ail-ribbon" "ribbon350 ribbon55">>
<<ailmentRibbon>>
<</button>>
</div>
<div class = "ail-dropdown hidden" id = "ailmentDropdown"></div>
</div>
<div class = "dropbtn shelf-ribbon ribbon55">
<div id = "shelfButton">
<<button `"Saved (" + Object.keys($shelfContents).length + ")"`>> <<toggleclass ".shelf-dropdown" "hidden">>
<<toggleclass ".shelf-ribbon" "ribbon500 ribbon55">>
<<replace "#shelfDropdown">>
<<printShelfVertical>>
<</replace>>
<</button>>
</div>
<div class = "shelf-dropdown hidden" id = "shelfDropdown"></div>
</div>
/* This is the notifications passage. */<<if $potionList.length == 0>>
Create some potions on the [[Brew]] tab to view them here!
<</if>>
<<for _potion range $potionList>>
<<capture _potion>>
<div class = "clearfix" style = "border: 1px #eee dotted; width: 800px; margin-bottom: 10px">
<div style = "float: left; width: 200px">
<div @class = "'icon-sprite sprite-bottle ' + setup.lists.bottleStyles[_potion.details.style]" @style = "'width: 200px; height: 200px; background-color: ' + setup.lists.bottleColors[_potion.details.color]"></div>
@@margin:auto;
<<button [[Forget recipe|Recipes]]>>
<<set $potionList.delete(_potion)>>
<</button>>
@@
</div>
<div style = "float: left; width: 600px">
''_potion.details.name''<br/>
_potion.details.desc
<div class = "clearfix">
<div style = "float: left; width: 30%">
''Effects:''<br/>
<<for _tag, _strength range _potion.details.tags>>
<<= _tag + " ">>
<<for _star = 1; _star <= _strength; _star++>>★<</for>>
<br/>
<</for>>
</div>
<div style = "float: left; width: 70%">
''Ingredients:''<br/>
<<for _ingredient, _ingrQuant range _potion.ingredients>>
<<set _ingrPrep = _ingredient.slice(-1)>>
<<set _ingrID = _ingredient.slice(0, -1)>>
<<set _reagent = setup.reagents[_ingrID]>>
/* Single line with reagent icon, name, method, effects, potency */
<div style = "width: 100%">
<div @class = '"icon-sprite " + _ingrID + " sprite-" + _reagent.source' style = "width: 25px; height: 25px"></div>
<span><<= _reagent.name + " (" + _reagent.methods[_ingrPrep].join(", ") + ")">>
/* Display quantity if > 1, show link to decrement quantity */
<<if _ingrQuant > 1>>
<<= " (x" + _ingrQuant + ")">>
<</if>>
</span>
</div>
<</for>>
</div>
</div>
<p>
<<if _potion.details.sweet gt 0>>Sweet: _potion.details.sweet <br/><</if>>
<<if _potion.details.poison gt 0>>Poison: _potion.details.poison <br/><</if>>
<<if _potion.details.tips > 0>>Potion value increased by _potion.details.tips silver.<br/><</if>>
<<if _potion.details.tips < 0>>Potion value decreased by <<=_potion.details.tips * -1>> silver.<br/><</if>>
<<if def _potion.details.potionNotes>>//_potion.details.potionNotes//<</if>>
</p>
</div>
</div>
<</capture>>
<</for>>''How to Use This App''
<p>PotionBrew is an unofficial fan-created companion app for [[Apothecaria|https://blackwellwriter.itch.io/apothecaria]], a journal-writing game of cozy pastoral exploration and potion-making.</p>
<ul>
<li>Use the ''Ailments'' tab to select a random ailment affecting your patient. View its details later on the green "diagnosis" ribbon.</li>
<li>Use the ''Reagents'' tab to search for potion reagents or display a random reagent matching the current filters. Add reagents to the red "saved" ribbon for later use.</li>
<li>Use the ''Brew'' tab to take saved reagents and mix them into a new potion. Edit its name, description, and icon before saving it to your recipe book.</li>
<li>Use the ''Recipes'' tab to browse previously brewed potions for easy reference!</li>
<li>Remove the blur effect from bonus content by unlocking the Apothecaria expansions below.</li>
</ul>
''Credits''
<p>Sole credit and authorship of Apothecaria lie with Anna Blackwell, who wrote all ailment and reagent descriptions. (With guest content by Chris Bissette, Jack Harrison, and Matt Sanders.)</p>
<p>This app is created and maintained by Sophie Paige. Find me on the Blackwell Games [[Discord server|https://discord.gg/2NzbhYeuzN]] and send me a PM with your feedback, suggestions, bug reports, or cat pictures.</p>
<p>PotionBrew was written in [[Twine|http://twinery.org/]] and could not have been completed without the assistance (direct and indirect) of countless community members across various forums, discords, reddits, coding Q&A sites, tutorials, and beyond. Images are courtesy of [[game-icons.net|https://game-icons.net/]].</p>
<<set _tinkerCheck = "">>
<<set _delveCheck = "">>
<<set _guestCheck = "">>
''Unlocking Content''
<p>If you're reading this you probably already have the core ''Apothecaria'' book or else the app won't be much use to you! Content from that book is displayed but everything else is blurred by default, and you can remove the blur effect by demonstrating you have access to the expansions. All of them are available on the Blackwell Games [[Patreon|https://www.patreon.com/AnnaBlackwell/]].</p>
<p>
''Kickstarter Guest Content''<br/>
<<if setup.unlocks.guest == "blurred">>
What is the last word of the final sentence on the blue page (next to the bug)? <br/>
<<textbox "_guestCheck" "">> /* LIBRARY */
<<else>>
UNLOCKED
<</if>>
</p>
<p>
''Tinker's Troubles''<br/>
<<if setup.unlocks.tinker == "blurred">>
What is the heading at the top of page 10? <br/>
<<textbox "_tinkerCheck" "">> /* PROJECTS */
<<else>>
UNLOCKED
<</if>>
</p>
<p>
''Delve Crossover''<br/>
<<if setup.unlocks.delve == "blurred">>
What is the heading at the top of page 6? <br/>
<<textbox "_delveCheck" "">> /* TOOLS */
<<else>>
UNLOCKED
<</if>>
</p>
<<button [[Unlock|About]]>>
<<if _tinkerCheck.toUpperCase() == "PROJECTS">>
<<set setup.unlocks.tinker = "">>
<<run memorize("tinkerUnlock", "")>>
<</if>>
<<if _delveCheck.toUpperCase() == "TOOLS">>
<<set setup.unlocks.delve = "">>
<<run memorize("delveUnlock", "")>>
<</if>>
<<if _guestCheck.toUpperCase() == "LIBRARY">>
<<set setup.unlocks.guest = "">>
<<run memorize("guestUnlock", "")>>
<</if>>
<</button>>
<<button [[Reset|About]]>>
<<set setup.unlocks.tinker = "blurred">>
<<run memorize("tinkerUnlock", "blurred")>>
<<set setup.unlocks.guest = "blurred">>
<<run memorize("guestUnlock", "blurred")>>
<<set setup.unlocks.delve = "blurred">>
<<run memorize("delveUnlock", "blurred")>>
<</button>>
/* ------------------------------------------------------------------------- */
/* REAGENT LIST SETUP */
/* Defines the setup.lists object which holds all the lists of basic info. */
/* */
/* ------------------------------------------------------------------------- */
<<set setup.lists = {}>>
<<set setup.lists.seasons = ["spring", "summer", "autumn", "winter"]>>
<<set setup.lists.sources = ["core", "guest", "tinker", "delve"]>>
<<set setup.lists.types = ["Animal", "Made", "Magic", "Plant"]>>
<<set setup.lists.reps = ["Novice", "Intermediate", "Advanced", "Expert"]>>
<<set setup.lists.localesBySource = {
"core" : ["forest", "bog", "mountain", "isles", "loch", "depths", "dungeon", "strange", "village"],
"tinker" : ["workshop"],
"delve" : ["dwarf"]
}>>
<<set setup.lists.locales = []>>
<<for _value range setup.lists.localesBySource>>
<<set setup.lists.locales = setup.lists.locales.concat(_value)>>
<</for>>
<<set setup.lists.bottleStyles = ["apothecary", "vapors", "brandy-bottle", "bubbling-flask", "chalice-drops", "cloth-jar", "coffee-cup", "drink-me", "drinking", "fire-bottle", "fizzing-flask", "heart-bottle", "holy-water", "jug", "magic-potion", "pestle-mortar", "poison-bottle", "potion-ball", "round-bottom-flask", "snow-bottle", "spiral-bottle", "square-bottle", "standing-potion", "teapot", "teapot-leaves"]>>
<<set setup.lists.bottleColors = ["aliceblue", "coral", "darkorchid", "forestgreen", "wheat", "crimson"]>>/* ------------------------------------------------------------------------- */
/* REAGENT SEARCH PAGE */
<<link "Show/hide search options">>
<<toggleclass "#filter-options" "hidden">>
<</link>>
<<tempSearchButtons>>
<div class="row" id = "filter-options">
<div class="column3">
With any of these effects:
<<link "Check">>
<<for _tag range setup.lists.effects>>
<<set $filterOptions.effects[_tag] = true>>
<</for>>
<<unset _tag>>
<<replace "#search-tags">><<searchTags>><</replace>>
<</link>>
/
<<link "clear">>
<<for _tag range setup.lists.effects>>
<<set $filterOptions.effects[_tag] = false>>
<</for>>
<<unset _tag>>
<<replace "#search-tags">><<searchTags>><</replace>>
<</link>> all
<br/>
<div id = "search-tags">
<<searchTags>>
</div>
</div> /* end column 1 */
<div class="column3">
Reagent name: <br/>
<<textbox "$filterOptions.text" $filterOptions.text>><br/>
<br/>
From any of these sources:<br/>
<label><<checkbox "$filterOptions.sources.core" false true autocheck>> Core Book</label><br/>
<label><<checkbox "$filterOptions.sources.guest" false true autocheck>> Kickstarter Guests </label>
<<if setup.unlocks.guest == "blurred">><span title = "Expansion content locked" style = "user-select: none">🔒</span><</if>>
<br/>
<label><<checkbox "$filterOptions.sources.tinker" false true autocheck>> Tinker's Troubles</label>
<<if setup.unlocks.tinker == "blurred">><span title = "Expansion content locked" style = "user-select: none">🔒</span><</if>>
<br/>
<label><<checkbox "$filterOptions.sources.delve" false true autocheck>> Delve Crossover</label>
<<if setup.unlocks.delve == "blurred">><span title = "Expansion content locked" style = "user-select: none">🔒</span><</if>>
<br/><br/>
With any of these types:<br/>
<label><<checkbox "$filterOptions.types.Animal" false true autocheck>> Animal</label><br/>
<label><<checkbox "$filterOptions.types.Made" false true autocheck>> Made</label><br/>
<label><<checkbox "$filterOptions.types.Magic" false true autocheck>> Magic</label><br/>
<label><<checkbox "$filterOptions.types.Plant" false true autocheck>> Plant</label>
<br/><br/>
Potency at least: <br/>
<label><<radiobutton "$filterOptions.potency" 1 autocheck>> ★ </label><br/>
<label><<radiobutton "$filterOptions.potency" 2 autocheck>> ★★ </label><br/>
<label><<radiobutton "$filterOptions.potency" 3 autocheck>> ★★★ </label><br/>
<br/>
/* Potion flavorings: <br/>
<label><<checkbox "$filterOptions.flavor.sweet" false true autocheck>> Sweet</label>
<label><<checkbox "$filterOptions.flavor.poison" false true autocheck>> Poisonous</label>
<label><<checkbox "$filterOptions.flavor.none" false true autocheck>> No flavor</label> */
</div> /* end column 2 */
<div class = "column3">
From any of these locales:<br/>
//Basic//<br/>
<label><<checkbox "$filterOptions.locales.forest" false true autocheck>> Glimmerwood Grove</label><br/>
<label><<checkbox "$filterOptions.locales.loch" false true autocheck>> Meltwater Loch</label><br/>
<label><<checkbox "$filterOptions.locales.mountain" false true autocheck>> Moonbreaker Mountain</label><br/>
<label><<checkbox "$filterOptions.locales.dungeon" false true autocheck>> Hero's Hollow</label><br/>
<label><<checkbox "$filterOptions.locales.village" false true autocheck>> High Rannoc</label><br/>
<br/>
//Advanced//<br/>
<label><<checkbox "$filterOptions.locales.bog" false true autocheck>> Blastfire Bog</label><br/>
<label><<checkbox "$filterOptions.locales.depths" false true autocheck>> Dreamwater Depths</label><br/>
<label><<checkbox "$filterOptions.locales.isles" false true autocheck>> The Cloud Isles</label><br/>
<label><<checkbox "$filterOptions.locales.strange" false true autocheck>> The Strange</label><br/>
<br/>
//Expansion//<br/>
<label><<checkbox "$filterOptions.locales.workshop" false true autocheck>> The Workshop</label><br/>
<label><<checkbox "$filterOptions.locales.dwarf" false true autocheck>> Dwarven Hold</label>
<br/>
<br/>
Forage value in those locales:<br/>
Min: <<numberinput "$filterOptions.minValue" $filterOptions.minValue 1 13>><br/>
Max: <<numberinput "$filterOptions.maxValue" $filterOptions.maxValue 1 13>><br/><br/>
</div> /* end column 3 */
</div>
<div class = "row">
<div id = "display-panel1">
<<getSearchResults>>
<<printSearchResults>>
</div>
</div><<widget getSearchResults>>
<<set $searchResults = []>>
<<for _reagent range setup.reagents>>
<<set _filterMatch = {
source : false,
type : false,
locale : false,
effect : false,
value : false,
flavor : false
}>>
/* POTENCY */
<<if _reagent.potency < $filterOptions.potency>>
<<continue>>
<</if>>
/* NAME */
<<if !_reagent.id.includes($filterOptions.text.toLowerCase().replace(/[\W_]+/g,''))>>
<<continue>>
<</if>>
/* FLAVOR
<<if $filterOptions.flavor.sweet == true>>
<<if
<</if>>
<<if _filterMatch.flavor == false>>
<<continue>>
<</if>>
END FLAVOR */
/* SOURCE */
<<for _source, _value range $filterOptions.sources>>
<<if _value == true && _source == _reagent.source>>
<<set _filterMatch.source = true>>
<<break>>
<</if>>
<</for>>
<<if _filterMatch.source == false>>
<<continue>>
<</if>>
/* TYPE */
<<for _type, _value range $filterOptions.types>>
<<if _value == true && _type == _reagent.type>>
<<set _filterMatch.type = true>>
<<break>>
<</if>>
<</for>>
<<if _filterMatch.type == false>>
<<continue>>
<</if>>
/* EFFECTS */
<<for _effect, _value range $filterOptions.effects>>
<<if _value == true && _reagent.tags.includes(_effect)>>
<<set _filterMatch.effect = true>>
<<break>>
<</if>>
<</for>>
<<if _filterMatch.effect == false>>
<<continue>>
<</if>>
/* LOCALES */
<<for _locale, _value range $filterOptions.locales>>
<<if _value == true && _locale in _reagent.locales>>
<<set _filterMatch.locale = true>>
<<break>>
<</if>>
<</for>>
<<if _filterMatch.locale == false>>
<<continue>>
<</if>>
/* VALUES */
<<for _locale, _value range $filterOptions.locales>>
<<if _locale in _reagent.locales>>
<<if _reagent.locales[_locale] >= $filterOptions.minValue && _reagent.locales[_locale] <= $filterOptions.maxValue>>
<<set _filterMatch.value = true>>
<<break>>
<</if>>
<</if>>
<</for>>
<<if _filterMatch.value == false>>
<<continue>>
<</if>>
<<set $searchResults.pushUnique(_reagent.id)>>
<</for>>
/* Alphabetical sort, courtesy of these references:
https://stackoverflow.com/questions/1129216/sort-array-of-objects-by-string-property-value
https://twinery.org/forum/discussion/7526/sorting-object-by-their-properties
*/
<<set $searchResults = $searchResults.sort(function (a, b){return (a > b) ? 1 : ((b > a) ? -1 : 0);})>>
<<unset _reagent, _filterMatch, _source, _locale, _type, _effect>>
<</widget>>
<<widget printSearchResults>>
<h1>Search Results (<<=$searchResults.length>>)</h1>
<<for _id range $searchResults>><<capture _id>>
<<set _reagent = setup.reagents[_id]>>
<<set _blur = setup.unlocks[_reagent.source]>>
<div class="reagentDisplay clearfix column-shrink" @id = "_id + '-search'">
<div @class='"icon-sprite " + _id + " sprite-" +_reagent.source' style = "width: 85px; height: 85px" @title = '_reagent.name'></div>
<h2><<= _reagent.name>> <<stars _reagent.potency>></h2>
<div @class = "setup.unlocks[_reagent.source]"> /* blur effect */
<p>Type: <<=_reagent.type>></p>
<p><<for _locale, _time range _reagent.locales>>
<<= _locale.toUpperFirst() + " (" + _time + ") " >>
<</for>></p>
<<if def _reagent.seasons>>
<p><<for _season, _time range _reagent.seasons>>
<<= _season.toUpperFirst() + " (" + _time + ") " >>
<</for>></p>
<</if>>
<p><<= _reagent.desc>></p>
<p>''Preparation:''</p>
<<for _i, _method range _reagent.methods>>
<<capture _i>>
<p>Can be added _method for <<= _reagent.effects[_i]>>
</p>
<</capture>>
<</for>>
<p>
<<if def _reagent.sweet or def _reagent.poison or def _reagent.notes>>''Effects:''<br/><</if>>
<<if def _reagent.sweet>>Sweet: <<= _reagent.sweet>> <br/><</if>>
<<if def _reagent.poison>>Poison: <<= _reagent.poison>> <br/><</if>>
<<if def _reagent.potionNotes>>//<<= _reagent.potionNotes>>//<</if>>
</p>
</div> /* blur effect */
<<if setup.unlocks[_reagent.source] == "blurred">>
<p>[[Unlock more expansions|About]] to use this reagent!</p>
<<else>>
<<button "Save">>
<<if _id in $shelfContents>>
<<set $shelfContents[_id]++>>
<<else>>
<<set $shelfContents[_id] = 1>>
<</if>>
<<replace "#shelfDropdown">>
<<printShelfVertical>>
<</replace>>
<</button>>
<</if>>
</div>
<</capture>><</for>>
<<unset _id, _reagent, _blur>>
<</widget>><<set $currPotion = {
"name" : "Potion of " + either(["Novelty", "Tabula Rasa", "Emptiness", "Transparency", "Zero Opacity", "Potentiality", "Blank Slate", "Odorless Colorlessness", "Dubious Efficacy"]),
"desc" : "Enter your own name and description for this potion here.",
"color" : random(0, setup.lists.bottleColors.length - 1),
"style" : random(0, setup.lists.bottleStyles.length - 1),
"tags" : {},
"sweet" : 0,
"poison" : 0,
"notes" : "",
"tips" : 0,
"reagents" : []
}>>
<<widget getPotionStats>>
/* Calculate tags, sweetness, poison, and notes by looping through ingrs */
<<set $currPotion.tags = {}>>
<<set $currPotion.sweet = 0>>
<<set $currPotion.poison = 0>>
<<set $currPotion.potionNotes = "">>
<<set $currPotion.tips = 0>>
<<for _ingredient, _ingrQuant range $benchContents>>
<<set _ingrPrep = _ingredient.slice(-1)>>
<<set _ingrID = _ingredient.slice(0, -1)>>
<<set _reagent = setup.reagents[_ingrID]>>
/* (1) - Effect tags */
/* If tags don't exist or exist at a lower value, add at current value */
<<for _tag range _reagent.effects[_ingrPrep]>>
<<if ndef $currPotion.tags[_tag] or $currPotion.tags[_tag] lt _reagent.potency>>
<<set $currPotion.tags[_tag] = _reagent.potency>>
<</if>>
<</for>>
/* (2) - Sweetness and poison */
/* If current reagent is sweet/poisonous, add its values */
<<if def _reagent.sweet>>
<<set $currPotion.sweet += _reagent.sweet * _ingrQuant>>
<</if>>
<<if def _reagent.poison>>
<<set $currPotion.poison += _reagent.poison * _ingrQuant>>
<</if>>
/* (3) - Notes */
<<if def _reagent.potionNotes>>
<p><<set $currPotion.potionNotes += _reagent.potionNotes>></p>
<</if>>
<</for>>
/* Apply sweet and poison to potion $$$ value, but only if positive */
<<if $currPotion.sweet > 0>>
<<set $currPotion.tips += $currPotion.sweet * 4>>
<</if>>
<<if $currPotion.poison > 0>>
<<set $currPotion.tips -= $currPotion.poison * 4>>
<</if>>
<<unset _reagent, _ingredient, _ingrQuant, _ingrPrep, _ingrID>>
<</widget>><<widget printShelfBrewing>>
<<if Object.keys($shelfContents).length == 0>>
Save some ingredients on the [[Reagents]] tab to start brewing!
<</if>>
<<for _shelfID, _shelfQuant range $shelfContents>>
<<capture _shelfID>>
<<set _reagent = setup.reagents[_shelfID]>>
<div class = "ingredient-panel">
<div class = "clearfix">
<div @class = '"icon-sprite " + _shelfID + " sprite-" + _reagent.source' style = "width: 85px; height: 85px; float: left" @title = '_reagent.name'></div>
<div style = "float: left; width: 140px">
<<= _reagent.name>><br/>
Potency: <<stars _reagent.potency>><br/>
<<if def _reagent.sweet>>Sweet: <<= _reagent.sweet>> <br/><</if>>
<<if def _reagent.poison>>Poison: <<= _reagent.poison>> <br/><</if>>
</div>
</div>
<<for _i, _method range _reagent.methods>>
<<capture _i>>
<<button `_reagent.methods[_i].join(" & ")`>>
/* Add this preparation method to the potion bench */
<<set _prepID = _shelfID + _i>>
<<if _prepID in $benchContents>>
<<set $benchContents[_prepID]++>>
<<else>>
<<set $benchContents[_prepID] = 1>>
<</if>>
<<printPotion>>
<</button>>
<<= _reagent.effects[_i]>><br/>
<</capture>>
<</for>>
<<if def _reagent.potionNotes>>//_reagent.potionNotes//<</if>>
</div>
<</capture>>
<</for>>
<</widget>><<widget printPotionIngrs>>
<<for _ingredient, _ingrQuant range $benchContents>>
<<capture _ingredient>>
<<set _ingrPrep = _ingredient.slice(-1)>>
<<set _ingrID = _ingredient.slice(0, -1)>>
<<set _reagent = setup.reagents[_ingrID]>>
/* Single line with reagent icon, name, method, effects, potency */
<div style = "width: 100%">
<div @class = '"icon-sprite " + _ingrID + " sprite-" + _reagent.source' style = "width: 25px; height: 25px"></div>
<span><<= _reagent.name + " (" + _reagent.methods[_ingrPrep].join(", ") + "): ">>
<<if def _reagent.sweet>><<= _reagent.sweet + " sweet, ">><</if>>
<<if def _reagent.poison>><<= _reagent.poison + " poison, ">><</if>>
<<for _effect range _reagent.effects[_ingrPrep]>>
<<= _effect>> <<stars _reagent.potency>>
<</for>>
/* Display quantity if > 1, show link to decrement quantity */
<<if _ingrQuant > 1>>
<<set _removeLink = "(x" + _ingrQuant + ")">>
<<else>>
<<set _removeLink = "(remove)">>
<</if>>
<<link _removeLink>>
<<set $benchContents[_ingredient]-->>
<<if $benchContents[_ingredient] < 1>>
<<set delete $benchContents[_ingredient]>>
<</if>>
<<printPotion>>
<</link>>
</span>
</div>
<</capture>>
<</for>>
<<unset _reagent, _removeLink, _ingredient, _ingrQuant, _ingrPrep, _ingrID>>
<</widget>><<widget potionIcon>>
<div @class = "'icon-sprite sprite-bottle ' + setup.lists.bottleStyles[$currPotion.style]" @style = "'width: 200px; height: 200px; background-color: ' + setup.lists.bottleColors[$currPotion.color]"></div>
<</widget>>
<<widget printPotion>>
<<getPotionStats>>
<<replace "#potion-header">>
<div id = "potion-icon" style = "float: left"><<potionIcon>></div>
<div style = "float: left">
<<textbox "$currPotion.name" $currPotion.name>><br/>
<<textarea "$currPotion.desc" $currPotion.desc>><br/>
<<potionStyleButtons>>
</div>
<</replace>>
<<replace "#potion-effects">>
''Effects:''<br/>
<<for _tag, _strength range $currPotion.tags>>
<<= _tag + " ">> <<stars _strength>><br/>
<</for>>
<<potionCheck>>
<</replace>>
<<replace "#potion-notes">>
''Notes:''<br/>
<<if $currPotion.sweet gt 0>>Sweet: $currPotion.sweet <br/><</if>>
<<if $currPotion.poison gt 0>>Poison: $currPotion.poison <br/><</if>>
<<if $currPotion.tips > 0>>Potion value increased by $currPotion.tips silver. <br/><</if>>
<<if $currPotion.tips < 0>>Potion value decreased by <<=$currPotion.tips * -1>> silver. <br/><</if>>
<<if def $currPotion.potionNotes>>//$currPotion.potionNotes//<br/><</if>>
<</replace>>
<<replace "#potion-ingredients">>
''Ingredients:''<br/>
<<printPotionIngrs>>
<</replace>>
<</widget>><<widget resetSearch>>
<<set $filterOptions = {}>>
<<set $filterOptions.locales = {}>>
<<for _locale range setup.lists.locales>>
<<set $filterOptions.locales[_locale] = true>>
<</for>>
<<set $filterOptions.sources = {}>>
<<for _source range setup.lists.sources>>
<<if setup.unlocks[_source] == "blurred">>
<<set $filterOptions.sources[_source] = false>>
<<else>>
<<set $filterOptions.sources[_source] = true>>
<</if>>
<</for>>
<<set $filterOptions.types = {}>>
<<for _type range setup.lists.types>>
<<set $filterOptions.types[_type] = true>>
<</for>>
<<set $filterOptions.potency = 1>>
<<set $filterOptions.text = "">>
<<set $filterOptions.effects = {}>>
<<for _searchTag range setup.lists.effects>>
<<set $filterOptions.effects[_searchTag] = true>>
<</for>>
<<set $filterOptions.minValue = 1>>
<<set $filterOptions.maxValue = 13>>
<<set $filterOptions.reps = {}>>
<<for _rep range setup.lists.reps>>
<<set $filterOptions.reps[_rep] = true>>
<</for>>
<<set $filterOptions.flavor = {}>>
<<set $filterOptions.flavor.sweet = true>>
<<set $filterOptions.flavor.poison = true>>
<<set $filterOptions.flavor.none = true>>
<<unset _searchTag, _locale, _source>>
<</widget>><div class = "row">
<div style = "float: left; width: 30%">
Reputation level:<br/>
<label><<checkbox "$filterOptions.reps.Novice" false true autocheck>> Novice</label><br/>
<label><<checkbox "$filterOptions.reps.Intermediate" false true autocheck>> Intermediate</label><br/>
<label><<checkbox "$filterOptions.reps.Advanced" false true autocheck>> Advanced</label><br/>
<label><<checkbox "$filterOptions.reps.Expert" false true autocheck>> Expert</label><br/>
<br/>
From any of these sources:<br/>
<label><<checkbox "$filterOptions.sources.core" false true autocheck>> Core Book</label><br/>
<label><<checkbox "$filterOptions.sources.guest" false true autocheck>> Kickstarter Guests </label>
<<if setup.unlocks.guest == "blurred">><span title = "Expansion content locked" style = "user-select: none">🔒</span><</if>>
<br/>
<label><<checkbox "$filterOptions.sources.tinker" false true autocheck>> Tinker's Troubles</label>
<<if setup.unlocks.tinker == "blurred">><span title = "Expansion content locked" style = "user-select: none">🔒</span><</if>>
<br/>
<label><<checkbox "$filterOptions.sources.delve" false true autocheck>> Delve Crossover</label>
<<if setup.unlocks.delve == "blurred">><span title = "Expansion content locked" style = "user-select: none">🔒</span><</if>>
<br/><br/>
<<button "Random Ailment">>
<<getAilment>>
<<getPatient>>
<<printAilment>>
<<printPatient>>
<</button>>
</div>
<div style = "float: left; width: 38%">
<div id = "ailment-result" style = "border: 1px #eee dotted; padding: 10px; margin-right: 2%">
</div>
</div>
<div style = "float: left; width: 30%">
<div id = "patient-result">
</div>
</div>
</div>
<<done>><<printAilment>><<printPatient>><</done>><<set _tinkerCheck = "">>
<<set _delveCheck = "">>
<<set _guestCheck = "">>
''What's all this, then?''
<p>If you're reading this you probably already have the core ''Apothecaria'' book or else the app won't be much use to you! Content from that book is displayed but everything else is blurred by default, and you can remove the blur effect by demonstrating you have access to the expansions. All of them are available on the Blackwell Games [[Patreon|https://www.patreon.com/AnnaBlackwell/]].</p>
<p>
''Kickstarter Guest Content''<br/>
<<if setup.unlocks.guest == "blurred">>
What is the last word of the final sentence on the blue page (next to the bug)? <br/>
<<textbox "_guestCheck" "">> /* LIBRARY */
<<else>>
UNLOCKED
<</if>>
</p>
<p>
''Tinker's Troubles''<br/>
<<if setup.unlocks.tinker == "blurred">>
What is the heading at the top of page 10? <br/>
<<textbox "_tinkerCheck" "">> /* PROJECTS */
<<else>>
UNLOCKED
<</if>>
</p>
<p>
''Delve Crossover''<br/>
<<if setup.unlocks.delve == "blurred">>
What is the heading at the top of page 6? <br/>
<<textbox "_delveCheck" "">> /* TOOLS */
<<else>>
UNLOCKED
<</if>>
</p>
<<button [[Unlock]]>>
<<if _tinkerCheck.toUpperCase() == "PROJECTS">>
<<set setup.unlocks.tinker = "">>
<<run memorize("tinkerUnlock", "")>>
<</if>>
<<if _delveCheck.toUpperCase() == "TOOLS">>
<<set setup.unlocks.delve = "">>
<<run memorize("delveUnlock", "")>>
<</if>>
<<if _guestCheck.toUpperCase() == "LIBRARY">>
<<set setup.unlocks.guest = "">>
<<run memorize("guestUnlock", "")>>
<</if>>
<</button>>
<<button [[Reset|Unlock]]>>
<<set setup.unlocks.tinker = "blurred">>
<<run memorize("tinkerUnlock", "blurred")>>
<<set setup.unlocks.guest = "blurred">>
<<run memorize("guestUnlock", "blurred")>>
<<set setup.unlocks.delve = "blurred">>
<<run memorize("delveUnlock", "blurred")>>
<</button>>
<<widget searchTags>>
<<set _breakpoint = Math.round(setup.lists.effects.length/2)>>
<div class = "row">
<div class = "column">
<<for _i = 0; _i < _breakpoint; _i++>>
<<set _searchTag = setup.lists.effects[_i]>>
<<capture _searchTag>>
<label><<checkbox "$filterOptions.effects[_searchTag]" false true autocheck>> _searchTag </label><br/>
<</capture>>
<</for>>
</div>
<div class = "column">
<<for _i = _breakpoint; _i < setup.lists.effects.length; _i++>>
<<set _searchTag = setup.lists.effects[_i]>>
<<capture _searchTag>>
<label><<checkbox "$filterOptions.effects[_searchTag]" false true autocheck>> _searchTag </label><br/>
<</capture>>
<</for>>
</div>
</div>
<<unset _breakpoint>>
<</widget>>
<<widget printShelfVertical>>
/* Update text on ribbon button */
<<replace "#shelfButton>button">><<="Saved (" + Object.keys($shelfContents).length + ")">><</replace>>
/* Display a message when shelf is empty */
<<if Object.keys($shelfContents).length == 0>>
/* <div style = "width: 85px; background-color: black; text-align: center">
Select reagents on the
</div> */
Save reagents from search results to see them here!
<</if>>
<<for _shelfID, _shelfQuant range $shelfContents>>
<<capture _shelfID>>
<div @class = '"icon-sprite " + _shelfID + " sprite-" + setup.reagents[_shelfID].source' style = "width: 85px; height: 85px; float: none" @title = 'setup.reagents[_shelfID].name'>
/* Button to decrement quantity by 1
<span title = "Remove"><<button _shelfQuant>>
<<set $shelfContents[_shelfID]-->>
<<if $shelfContents[_shelfID] < 1>>
<<set delete $shelfContents[_shelfID]>>
<</if>>
<<if passage() == "Brew">>
<<replace "#shelf-brew">>
<<printShelfBrewing>>
<</replace>>
<</if>>
<<replace "#shelfDropdown">>
<<printShelfVertical>>
<</replace>>
<</button>></span>
*/
/* Button to remove reagent entirely */
<span title = "Remove"><<button "X">>
<<set delete $shelfContents[_shelfID]>>
<<if passage() == "Brew">>
<<replace "#shelf-brew">>
<<printShelfBrewing>>
<</replace>>
<</if>>
<<replace "#shelfDropdown">>
<<printShelfVertical>>
<</replace>>
<<if Object.keys($shelfContents).length == 0>>
<<toggleclass ".shelf-dropdown" "hidden">>
<<toggleclass ".shelf-ribbon" "ribbon500 ribbon55">>
<</if>>
<</button>></span>
</div>
<</capture>>
<</for>>
<<unset _shelfID, _shelfQuant>>
<</widget>><<widget potionStyleButtons>>
<<button "<">>
<<set $currPotion.style-->>
<<if $currPotion.style < 0>>
<<set $currPotion.style = setup.lists.bottleStyles.length - 1>>
<</if>>
<<replace "#potion-icon">>
<<potionIcon>>
<</replace>>
<</button>>
<span>Style</span>
<<button ">">>
<<set $currPotion.style++>>
<<if $currPotion.style == setup.lists.bottleStyles.length>>
<<set $currPotion.style = 0>>
<</if>>
<<replace "#potion-icon">>
<<potionIcon>>
<</replace>>
<</button>>
/* Bottle Color */
<<button "<">>
<<set $currPotion.color-->>
<<if $currPotion.color < 0>>
<<set $currPotion.color = setup.lists.bottleColors.length - 1>>
<</if>>
<<replace "#potion-icon">>
<<potionIcon>>
<</replace>>
<</button>>
<span>Color</span>
<<button ">">>
<<set $currPotion.color++>>
<<if $currPotion.color == setup.lists.bottleColors.length>>
<<set $currPotion.color = 0>>
<</if>>
<<replace "#potion-icon">>
<<potionIcon>>
<</replace>>
<</button>>
<<button "Random!">>
<<set $currPotion.color = random(0, setup.lists.bottleColors.length - 1)>>
<<set $currPotion.style = random(0, setup.lists.bottleStyles.length - 1)>>
<<replace "#potion-icon">>
<<potionIcon>>
<</replace>>
<</button>>
<</widget>><<set _ailmentsInit = [
{
id : "wounded",
level : "Novice",
name : "Wounded",
timer : 6,
tags : {WOUND: 1, PAIN: 1},
desc : "An extremely common occurrence. Whether it be by accident or from a duel, bandit ambush, or beast attack, the afflicted has a serious wound.",
consq : "They are rushed to the village doctor. Lose 1 Reputation.",
rep : 1,
source : "core"
},
{
id : "phodothropy",
level : "Novice",
name : "Phodothropy",
timer : 6,
tags : {CURSE: 1, HAIR: 1},
desc : "During the full moon, the afflicted turns into a monstrous hamster and scurries around their home and village, nibbling on carts and walls.",
consq : "They go on another rampage. Lose 1 Reputation. Describe the aftermath.",
rep : 1,
source : "core"
},
{
id : "wandskelf",
level : "Intermediate",
name : "Wand Skelf",
timer : 4,
tags : {OBJECT: 2, MAGIC: 2},
desc : "A piece of magic infused wood has become lodged deep inside the
afflicted’s skin, causing them to cast wild magic with every gesture.",
consq : "One of their accidental spells gets out of hand.
What was the spell? What was the outcome? Lose 1 Reputation.",
rep : 1,
source : "tinker"
}
]>>
/*
{
id : "",
level : "",
name : "",
timer : ,
tags : {},
desc : "",
consq : "",
rep : ,
source : ""
},
*/<<widget getAilment>>
<<set _ailmentResults = []>>
<<for _ailment range setup.ailments>>
<<set _filterMatch = {source: false, rep: false}>>
/* SOURCE */
<<for _source, _value range $filterOptions.sources>>
<<if _value == true && _source == _ailment.source>>
<<set _filterMatch.source = true>>
<<break>>
<</if>>
<</for>>
<<if _filterMatch.source == false>>
<<continue>>
<</if>>
/* REPUTATION LEVEL */
<<for _rep, _value range $filterOptions.reps>>
<<if _value == true && _rep == _ailment.level>>
<<set _filterMatch.rep = true>>
<<break>>
<</if>>
<</for>>
<<if _filterMatch.rep == false>>
<<continue>>
<</if>>
<<set _ailmentResults.pushUnique(_ailment.id)>>
<</for>>
<<unset _ailment, _filterMatch, _source, _rep, _value>>
<<set $currentAilment = _ailmentResults.random()>>
<</widget>>
<<widget printAilment>>
<<replace "#ailment-result">>
<<if ndef $currentAilment>>
Check some more boxes on the left to search for an ailment.
<<elseif $currentAilment.length == 0>>
Click the button on the left to diagnose a patient with a random ailment.
<<else>>
<<set _ailment = setup.ailments[$currentAilment]>>
<<set _blur = setup.unlocks[_ailment.source]>>
_ailment.name (_ailment.level)<br/>
<div @class = "setup.unlocks[_ailment.source]"> /* blur effect */
<<for _effect, _potency range _ailment.tags>>
_effect <<stars _potency>>
<</for>><br/>
_ailment.desc<br/>
<<if def _ailment.consq>>''Consequences<<if def _ailment.timer>> (Timer _ailment.timer)<</if>>:'' _ailment.consq<</if>>
</div>
<<if setup.unlocks[_ailment.source] == "blurred">>
<p>[[Unlock more expansions|About]] to treat this ailment!</p>
<<else>>
<<button [[Find Matching Reagents|Reagents]]>>
<<resetSearch>>
<<for _searchTag range setup.lists.effects>>
<<set $filterOptions.effects[_searchTag] = false>>
<</for>>
<<for _ailmentTag, _value range setup.ailments[$currentAilment].tags>>
<<set $filterOptions.effects[_ailmentTag] = true>>
<</for>>
<<unset _searchTag, _ailmentTag, _value>>
<</button>>
<</if>>
<</if>>
<</replace>>
<<unset _ailment, _effect, _potency>>
<<ailmentRibbon>>
<</widget>><<widget getPatient>>
<</widget>>
<<widget printPatient>>
<<if Object.keys($currentPatient).length == 0>>
Here's info about the patient suffering your current ailment.
<</if>>
<</widget>><<set setup.ailments = {} >>
<<for _ailment range _ailmentsInit>>
<<set setup.ailments[_ailment.id] = _ailment>>
<</for>>
<<unset _ailment, _ailmentsInit>><<widget stars>>
<<for _star = 1; _star <= $args[0]; _star++>>★<</for>>
<</widget>><<widget potionCheck>>
<<if def $currentAilment && $currentAilment.length > 0>>
<<set _tagMatch = true>>
<<for _tag, _value range setup.ailments[$currentAilment].tags>>
<<if ndef $currPotion.tags[_tag] || $currPotion.tags[_tag] < _value>>
<<set _tagMatch = false>>
<<break>>
<</if>>
<</for>>
<<if _tagMatch == true>>
<span style = "color: green">This potion can treat ''<<=setup.ailments[$currentAilment].name>>''</span><br/>
<</if>>
<<unset _tagMatch, _tag, _value>>
<</if>>
<</widget>><<widget ailmentRibbon>>
<<replace "#ailmentDropdown">>
<<if ndef $currentAilment || $currentAilment.length == 0>>
Select an ailment to see its description here!
<<else>>
<<set _ailment = setup.ailments[$currentAilment]>>
<<set _blur = setup.unlocks[_ailment.source]>>
''_ailment.name''<br/>
<div @class = "setup.unlocks[_ailment.source]">
<<if def _ailment.timer>>Timer: _ailment.timer<br/><</if>>
<br/>
<<for _effect, _potency range _ailment.tags>>
_effect <<stars _potency>><br/>
<</for>>
<br/>
_ailment.desc
</div>
<</if>>
<</replace>>
<<unset _ailment, _blur>>
<</widget>><<set _reagentsInit = [
{
id: "albatrossdandelions",
name: "Albatross Dandelions",
source: "guest",
type: "Magic",
potency: 3,
desc: "These dandelion seeds float twice round the world before finding their home and taking seed. Throughout this journey their potent healing abilities grow. Catching one requires standing on a tall hill at sunset with a net on a long pole.",
methods: [ ["RAW"] ],
effects: [ ["MAGIC", "CURSE"] ],
locales: {mountain: 8},
seasons: {spring: -2},
},
{
id: "alchemicalsalve",
name: "Alchemical Salve",
source: "delve",
type: "Made",
potency: 3,
desc: "Medicine is a common field for alchemists to dabble in and while their usual creations are bunk, this one actually is a useful curative.",
methods: [ ["RAW"] ],
effects: [ ["MAGIC", "CURSE"] ],
locales: {dwarf: 10, workshop: 10},
},
{
id: "ambergris",
name: "Ambergris",
source: "core",
type: "Animal",
potency: 3,
desc: "Found floating atop denser clouds or in the ponds of some floating islands, this skywhale excretion is incredibly valuable for perfume making and medicine.",
methods: [ ["CRUSHED"] ],
effects: [ ["COLD", "PAIN", "SENSES"] ],
locales: {isles: 9, loch: 13},
},
{
id: "amethystantlers",
name: "Amethyst Antlers",
source: "core",
type: "Animal",
potency: 3,
desc: "The deer of Glimmerwood are unique in many ways but their most unique trait is their antlers, from which dazzling crystals grow. Beautiful in the Summer but much easier to collect when they fall off in Winter.",
methods: [ ["CRUSHED"] ],
effects: [ ["CURSE", "MAGIC", "MOOD"] ],
locales: {bog: 8, forest: 11},
seasons: {summer: 2, winter: -4},
},
{
id: "badgerphlegm",
name: "Badger Phlegm",
source: "guest",
type: "Animal",
potency: 1,
desc: "These small black insects are spherical, but most people never see one. They create a thick morass of green sticky slime around themselves that few predators bother to chew their way through.",
methods: [ ["BOILED"] ],
effects: [ ["RASH"] ],
locales: {forest: 4},
seasons: {summer: -2},
},
{
id: "basilisksgaze",
name: "Basilisk's Gaze",
source: "core",
type: "Magic",
potency: 3,
desc: "Thankfully only exotic basilisks can petrify with a single look, the Rannoc variant is much weaker. Don’t be reckless though, sunglasses or a mirror are still important.",
poison: 1,
methods: [ ["DISTILLED"], ["RAW"] ],
effects: [ ["TIME"], ["BOILS", "WARTS"] ],
locales: {strange: 5, dungeon: 9},
},
{
id: "candyrock",
name: "Candy Rock",
source: "core",
type: "Magic",
potency: 1,
desc: "A sorcerer came through High Rannoc a few years back and tried to turn it into a desert. Thankfully he was both incompetent and illiterate so we got patches of dessert. Most of it’s been eaten by now but you can still find some bits out there.",
sweet: 4,
methods: [ ["RAW"] ],
effects: [ ["SWEET TOOTH"] ],
locales: {mountain: 9},
},
{
id: "capacitorjelly",
name: "Capacitor Jelly",
source: "tinker",
type: "Made",
potency: 3,
desc: "This thick jelly is made from the rare Fulgur Fungi. It is a staple of gnomish circuitry and baking!",
methods: [ ["BOILED"] ],
effects: [ ["ELECTRIC"] ],
locales: {workshop: 10, dungeon: 13},
},
{
id: "catswhisper",
name: "Cat's Whisper",
source: "core",
type: "Magic",
potency: 2,
desc: "If you’re fortunate enough to have a feline familiar, you’ll be able to get their help. Otherwise, you’ll have to sneak up on one of the forest cats or bribe a pampered puss from the village.",
methods: [ ["RAW"] ],
effects: [ ["PARASITE", "SLEEP"] ],
locales: {village: 2, forest: 6},
},
{
id: "cavegoatmilk",
name: "Cave Goat Milk",
source: "delve",
type: "Animal",
potency: 3,
desc: "While most of us wouldn’t consider these animals to be goats of any description, the dwarves seem to have a strange affinity with them.",
methods: [ ["BOILED"] ],
effects: [ ["PARASITE", "BONES"] ],
locales: {dwarf: 9, dungeon: 13},
},
{
id: "caveslime",
name: "Cave Slime",
source: "delve",
type: "Magic",
potency: 2,
desc: "Sentient slimes are a confusing byproduct of some pre-historic magical event that dwarves and other underground dwellers sadly have to deal with.",
methods: [ ["BOILED"] ],
effects: [ ["LUNGS", "SKIN"] ],
locales: {dwarf: 8, dungeon: 10},
},
{
id: "coffeecap",
name: "Coffee Cap",
source: "core",
type: "Plant",
potency: 1,
desc: "Kept on hand by guards and students, the coffee cap is full of quick release energy and can sharpen even the dullest senses. Also known as Drunkard’s Savior and Fool’s Friend.",
sweet: 1,
methods: [ ["CRUSHED", "BOILED"] ],
effects: [ ["SENSES"] ],
locales: {bog: 2, forest: 4},
},
{
id: "coldrust",
name: "Coldrust",
source: "core",
type: "Magic",
potency: 1,
desc: "Blue rust that eats its way through ancient magical artefacts, picking up the object’s power as it grows.",
methods: [ ["CRUSHED"] ],
effects: [ ["HOT", "MAGIC"] ],
locales: {dungeon: 2, strange: 3, mountain: 7},
},
{
id: "crowcoal",
name: "Crow Coal",
source: "core",
type: "Magic",
potency: 2,
desc: "A favourite among corvids who have eaten something foul, Crow Coal is a silvery coal that neutralises most ingested poisons. Getting it from the crows that guard it isn’t easy.",
methods: [ ["CRUSHED"] ],
effects: [ ["DEHYDRATION", "POISON", "STOMACH"] ],
locales: {bog: 4, dungeon: 7},
},
{
id: "cryocrystal",
name: "Cryo Crystal",
source: "tinker",
type: "Magic",
potency: 3,
desc: "Machines generate a lot of heat so to keep them from catching on fire all the time these crystals are inserted to cool them down.",
methods: [ ["CRUSHED"] ],
effects: [ ["HOT"] ],
locales: {workshop: 7, shimmersnow: 10},
},
{
id: "cynicivy",
name: "Cynic Ivy",
source: "core",
type: "Plant",
potency: 3,
desc: "A strange poison in this hanging ivy causes the afflicted to see everything in duller shades and to be impervious to joy, laughter, and surprise.",
methods: [ ["BOILED"] ],
effects: [ ["MAGIC", "SENSES"] ],
locales: {mountain: 9, bog: 10, forest: 13},
seasons: {summer: -3},
},
{
id: "darkwater",
name: "Darkwater",
source: "core",
type: "Magic",
potency: 2,
desc: "A favourite of the demons found in The Strange, darkwater is a sickly sweet soda that has some useful medicinal properties.",
sweet: 3,
methods: [ ["RAW"] ],
effects: [ ["COUGH", "HOT", "MAGIC"] ],
locales: {strange: 1, dungeon: 7, village: 13},
},
{
id: "deepreed",
name: "Deep Reed",
source: "core",
type: "Plant",
potency: 1,
desc: "These oily reeds are found in many bodies of still water, protruding high above the water to look almost like thin trees. The oil inside them is praised for its purity and flavour.",
methods: [ ["CRUSHED"] ],
effects: [ ["EAR", "STOMACH", "BLOOD"] ],
locales: {loch: 4, depths: 4, bog: 6},
seasons: {winter: 6},
},
{
id: "dentistcrab",
name: "Dentist Crab",
source: "core",
type: "Animal",
potency: 2,
desc: "Lots of fish visit these little crabs to clean out their mouths, gills, and fins. The crab gets to eat whatever it cleans out and with the anti-microbial gel that exudes from its claws, the fish gets lasting protection.",
methods: [ ["RAW"] ],
effects: [ ["LUNGS", "MOUTH", "TEETH"] ],
locales: {depths: 2, loch: 8},
},
{
id: "diamondoil",
name: "Diamond Oil",
source: "tinker",
type: "Made",
potency: 2,
desc: "Considered to be the purest oil in the world, this potent mixture can fix machine and muscle alike.",
methods: [ ["BOILED"] ],
effects: [ ["OBJECT"] ],
locales: {workshop: 8},
},
{
id: "driftwoodmemories",
name: "Driftwood Memories",
source: "core",
type: "Magic",
potency: 2,
desc: "The minds of trees are strange and alien things filled with thoughts that last longer than you and I will live. The peace found within those memories can be of great help.",
methods: [ ["DISTILLED"], ["RAW"] ],
effects: [ ["TIME"], ["MOOD", "SENSES"] ],
locales: {loch: 1},
},
{
id: "dwarvishfirewhisky",
name: "Dwarvish Fire Whisky",
source: "delve",
type: "Made",
potency: 3,
desc: "A potent curative in its own right, this drink burns on the way down and takes a particularly strong stomach to keep there.",
poison: 1,
methods: [ ["RAW"] ],
effects: [ ["INFECTION"] ],
locales: {dwarf: 5},
},
{
id: "fairydust",
name: "Fairy Dust",
source: "core",
type: "Magic",
potency: 2,
desc: "Difficult to get straight from the source, thankfully the little blighters don’t worry too much about cleaning up after themselves. Check toadstools or leave a fairy trap outside.",
methods: [ ["RAW"] ],
effects: [ ["CURSE", "MOOD"] ],
locales: {bog: 3, forest: 6},
},
{
id: "fentoadsscurf",
name: "Fentoad's Scurf",
source: "guest",
type: "Animal",
potency: 3,
desc: "These oily, flaky scales amass in fat clumps on the back of elder fentoads. When melted and clarified into an ointment, they are one of the most effective ways of removing unwelcome parasites. However, the scales quickly dry out and lose their potency, so the toad must be kept as a live specimen.",
methods: [ ["CRUSHED", "BOILED"] ],
effects: [ ["PARASITE"] ],
locales: {bog: 10},
},
{
id: "fleetfern",
name: "Fleet Fern",
source: "delve",
type: "Plant",
potency: 2,
desc: "Eons ago, a dwarvish wizard invented the Forest Seed in order to bring nature to the dark caves. It worked but the speed it grows at can be shocking.",
methods: [ ["CRUSHED"] ],
effects: [ ["MOOD"] ],
locales: {dwarf: 4},
},
{
id: "floodbulb",
name: "Flood Bulb",
source: "core",
type: "Plant",
potency: 2,
desc: "A staple trap component, flood bulbs are bulbous blue vegetables that, when burst, create a disproportionate volume of water.",
methods: [ ["CRUSHED"] ],
effects: [ ["DEHYDRATION", "POISON"] ],
locales: {isles: 4, dungeon: 6, loch: 10},
},
{
id: "foolsgrub",
name: "Fool's Grub",
source: "guest",
type: "Animal",
potency: 2,
desc: "Beetles the size of a thumb with a hard, jagged abdomen that almost perfectly resembles an uncut gemstone.",
methods: [ ["BOILED"] ],
effects: [ ["RASH"] ],
locales: {dungeon: 6},
},
{
id: "footfungus",
name: "Foot Fungus",
source: "core",
type: "Plant",
potency: 2,
desc: "Found in the spaces between Giant toes, this potent fungus might be disgusting to harvest and even worse to ingest but it is a powerful curative.",
poison: 2,
methods: [ ["BOILED"] ],
effects: [ ["BOILS", "BURN", "RASH"] ],
locales: {forest: 10},
seasons: {winter: 1},
},
{
id: "fossilfish",
name: "Fossil Fish",
source: "core",
type: "Magic",
potency: 3,
desc: "Fossils that have had a touch of magic, fossil fish don’t eat, breathe, or do much of anything except swim around which makes them great pets for busy witches.",
methods: [ ["CRUSHED"] ],
effects: [ ["MAGIC", "TIME"] ],
locales: {depths: 9, loch: 12},
},
{
id: "foxsocks",
name: "Foxsocks",
source: "guest",
type: "Plant",
potency: 2,
desc: "These long white flowers with orange tops earn their name in how many people they fool into seeing a running fox in the fringes of their vision. Whilst pretty to look at, they smell closer to a dead fox than a flower.",
poison: 1,
methods: [ ["CRUSHED"] ],
effects: [ ["PAIN"] ],
locales: {forest: 6, village: 12},
},
{
id: "gasweed",
name: "Gas Weed",
source: "core",
type: "Plant",
potency: 1,
desc: "A popular plant among diving enthusiasts, this bulbous seaweed is filled with oxygen rich gas. Very easy to find in the right season.",
methods: [ ["CRUSHED"] ],
effects: [ ["LUNGS"] ],
locales: {depths: 2, loch: 3},
seasons: {summer: -1, winter: 8},
},
{
id: "ghostgoo",
name: "Ghost Goo",
source: "core",
type: "Magic",
potency: 3,
desc: "Messy creatures by nature, ghosts leave a thick glowing goo behind whenever they touch certain objects. Usually those that in some way resonate with who they were when they were alive.",
methods: [ ["BOILED"] ],
effects: [ ["CURSE", "SPIRIT"] ],
locales: {dungeon: 6, strange: 6},
seasons: {winter: -2},
},
{
id: "giantspidervenom",
name: "Giant Spider Venom",
source: "core",
type: "Animal",
potency: 3,
desc: "A living nightmare to collect. Best method I’ve found is to make a fake deer, toss it into their lair and let them bite it and wrap it up, then go steal it when they’re asleep.",
poison: 1,
methods: [ ["DISTILLED"] ],
effects: [ ["NERVES", "PAIN"] ],
locales: {dungeon: 7, forest: 9},
},
{
id: "glaciermoss",
name: "Glacier Moss",
source: "core",
type: "Plant",
potency: 3,
desc: "This bright white moss grows on the sides of glaciers and looks at first glance like patches of snow. Experienced mountaineers chew it, as it slowly releases the water inside and tastes minty fresh.",
methods: [ ["CRUSHED"] ],
effects: [ ["DEHYDRATION", "LUNGS"] ],
locales: {isles: 6, mountain: 9},
},
{
id: "glittersnow",
name: "Glittersnow",
source: "core",
type: "Magic",
potency: 2,
desc: "When snow falls upon the ley-lines, it absorbs the latent magical energy. Dropping a bit of it into a potion is a sure-fire way of getting rid of unwated magical effects.",
methods: [ ["RAW"] ],
effects: [ ["CURSE", "MAGIC"] ],
locales: {forest: 9},
seasons: {summer: 5, winter: -5},
},
{
id: "goatsecho",
name: "Goat's Echo",
source: "core",
type: "Magic",
potency: 2,
desc: "If you’re lucky, the goat will already be in a spot with an echo. If not, well...good luck.",
methods: [ ["DISTILLED"], ["RAW"] ],
effects: [ ["MOOD"], ["LUNGS"] ],
locales: {mountain: 3},
},
{
id: "goldenscaleguppy",
name: "Golden Scale Guppy",
source: "core",
type: "Animal",
potency: 2,
desc: "Glittering and shimmering, these skittish fish are valued not just for their beautiful scales but also their blood-thickening poison that catches a fair share unaware.",
poison: 2,
methods: [ ["BOILED"] ],
effects: [ ["BLOOD"] ],
locales: {loch: 5, depths: 5},
},
{
id: "golemclay",
name: "Golem Clay",
source: "tinker",
type: "Magic",
potency: 2,
desc: "Uncooked golem clay is excellent at insulating and grounding those with electric personalities.",
poison: 2,
methods: [ ["CRUSHED"] ],
effects: [ ["ELECTRIC"] ],
locales: {workshop: 4},
},
{
id: "golemthoughts",
name: "Golem Thoughts",
source: "tinker",
type: "Magic",
potency: 3,
desc: "The words in a golem’s head give it form and allow it to control a target material. Very useful for removing splinters.",
methods: [ ["RAW"] ],
effects: [ ["OBJECT"] ],
locales: {workshop: 10},
},
{
id: "gremliteeggs",
name: "Gremlite Eggs",
source: "tinker",
type: "Animal",
potency: 1,
desc: "Somewhat like termites, these terrible little insects eat their way through metal machines to make their nests.",
methods: [ ["RAW"] ],
effects: [ ["OBJECT"] ],
locales: {workshop: 3},
},
{
id: "gulldrakeguano",
name: "Gull-Drake Guano",
source: "core",
type: "Animal",
potency: 1,
desc: "Freely and enthusiastically given when you’re not looking for it, a frightening climb up to their nests when you are. Another one of those “best not ask” reagents.",
methods: [ ["CRUSHED", "BOILED"] ],
effects: [ ["COUGH", "LUNGS"] ],
locales: {mountain: 4, loch: 7},
seasons: {spring: -2, winter: 4},
},
{
id: "hairofboar",
name: "Hair of Boar",
source: "core",
type: "Animal",
potency: 1,
desc: "Admittedly not that fun to collect, especially fresh, but if you earn their trust you’ll find it easy enough.",
methods: [ ["CRUSHED"] ],
effects: [ ["COUGH", "LUNGS"] ],
locales: {forest: 5, loch: 8},
},
{
id: "hermitsnail",
name: "Hermit Snail",
source: "core",
type: "Animal",
potency: 1,
desc: "The vacant shells of these ever-growing slugs can be found wherever the snails have been. The dried slime inside and the shells themselves have healing properties.",
methods: [ ["BOILED"], ["CRUSHED"] ],
effects: [ ["WOUND"], ["BONES"] ],
locales: {dungeon: 2, loch: 7},
},
{
id: "hikershelper",
name: "Hiker's Helper",
source: "core",
type: "Plant",
potency: 1,
desc: "A thick and leafy weed that grows wherever it can take root, which, thanks to hikers discarding the used leaves wherever they please, seems to be all over High Rannoc.",
methods: [ ["BOILED"] ],
effects: [ ["PAIN"] ],
locales: {village: 3, mountain: 4, isles: 7},
seasons: {winter: 4},
},
{
id: "innocentssuffering",
name: "Innocent's Suffering",
source: "core",
type: "Magic",
potency: 2,
desc: "This is one of those old school reagents that gave witches a bad name. Nowadays it’s much more efficient and pleasant to just find a hiker with sore feet to collect it.",
methods: [ ["RAW"] ],
effects: [ ["NERVES", "PAIN", "SLEEP", "WOUND"] ],
locales: {mountain: 9, bog: 9, dungeon: 11},
},
{
id: "jumpkin",
name: "Jumpkin",
source: "core",
type: "Plant",
potency: 3,
desc: "A mischievous species of pumpkin that some fairies planted in the foothills. Get too close to them and they lunge forward for a little jump scare. Good for gut health though.",
methods: [ ["BOILED"], ["CRUSHED"] ],
effects: [ ["STOMACH"], ["COLD"] ],
locales: {mountain: 8, village: 11},
seasons: {autumn: -6, winter: -2},
},
{
id: "lightninglobster",
name: "Lightning Lobster",
source: "tinker",
type: "Animal",
potency: 1,
desc: "Vibrant blue with yellow trim, these striking crustaceans live in the run-off from machines, eating the washed out gremlites and sprites.",
methods: [ ["CRUSHED"] ],
effects: [ ["ELECTRIC"] ],
locales: {workshop: 4, loch: 7},
},
{
id: "liquidfire",
name: "Liquid Fire",
source: "core",
type: "Magic",
potency: 2,
desc: "Not to be confused with lava, liquid fire can be harnessed for medicinal uses if you know how. Mostly used to kill off parasites and clean out the patient.",
methods: [ ["RAW"] ],
effects: [ ["INFECTION", "PARASITE"] ],
locales: {strange: 3, dungeon: 6},
},
{
id: "longfingers",
name: "Longfingers",
source: "guest",
type: "Animal",
potency: 3,
desc: "These pale, pinkish eelworms slither and burrow beneath the marsh, popping their heads above the fetid waters spasmodically to breathe. If you see one, grab it. Hold tight and keep pulling, call a friend if you can--the longest are almost a mile long and incredibly potent.",
methods: [ ["CRUSHED"] ],
effects: [ ["SKIN", "BOILS"] ],
locales: {bog: 8},
},
{
id: "machanterelle",
name: "Machanterelle",
source: "tinker",
type: "Plant",
potency: 3,
desc: "A rare and sought after fungus that only grows on certain types of magical wood or metal. A dwarven delicacy despite its oiliness.",
methods: [ ["CRUSHED"] ],
effects: [ ["OBJECT"] ],
locales: {workshop: 9},
},
{
id: "mermaidsgift",
name: "Mermaid's Gift",
source: "core",
type: "Plant",
potency: 2,
desc: "A type of poisonous algae, this age old cure for baldness is very effective if applied properly and prepared in such a way that its hair growth properties don’t end up giving people furry tongues.",
poison: 1,
methods: [ ["BOILED"] ],
effects: [ ["HAIR"] ],
locales: {loch: 5},
},
{
id: "midnightsmorsel",
name: "Midnight's Morsel",
source: "guest",
type: "Animal",
potency: 2,
desc: "The gronblut limpet anchors in large colonies at the base of waterlogged trees. They have shells so thick and gnarled they're impossible to prise open. In the depths of night, though, the shells unseal to bask in moonlight. Only then can intrepid gatherers access the fleshy morsel within.",
methods: [ ["BOILED"] ],
effects: [ ["MOOD", "STOMACH"] ],
locales: {bog: 6},
},
{
id: "milkroot",
name: "Milkroot",
source: "guest",
type: "Plant",
potency: 1,
desc: "Dig anywhere in Blastfire Bog and you'll have a good chance of discovering a clump of these tubers; grey, lumpy and covered in fine white matted hairs. They are generally boiled and squeezed to produce a thick, chalky liquid reminiscent of sour milk--often drunk with tea.",
methods: [ ["BOILED", "CRUSHED"] ],
effects: [ ["TEETH"] ],
locales: {bog: 3},
},
{
id: "milkstone",
name: "Milkstone",
source: "core",
type: "Magic",
potency: 2,
desc: "A popular cure for giant babies who have started teething, unfortunately not so easy for the rest of us to obtain without certain magical advantages.",
methods: [ ["BOILED"] ],
effects: [ ["PAIN", "TEETH"] ],
locales: {mountain: 1, village: 2, forest: 4},
},
{
id: "mimicmucus",
name: "Mimic Mucus",
source: "tinker",
type: "Animal",
potency: 3,
desc: "Mimics secrete a powerful paralytic in their saliva. Thankfully most of these mysterious monsters drool in their sleep.",
methods: [ ["BOILED"] ],
effects: [ ["NERVES", "SLEEP"] ],
locales: {workshop: 9, dungeon: 10},
},
{
id: "moonlotus",
name: "Moon Lotus",
source: "core",
type: "Plant",
potency: 2,
desc: "This sensitive plant stays shut during the day to protect itself from the sun’s harsh light. Hikers use the glowing pollen to soothe sunburn and friction burn.",
methods: [ ["RAW"] ],
effects: [ ["BURN", "HOT", "RASH", "SKIN"] ],
locales: {isles: 2, mountain: 7},
},
{
id: "moonmoss",
name: "Moon Moss",
source: "core",
type: "Plant",
potency: 3,
desc: "Grey-white moss that rumours say grows on the surface of the moon and was scraped off by Moonbreaker’s peak eons ago. It carries a touch of the moon’s magical energy.",
methods: [ ["CRUSHED"] ],
effects: [ ["CURSE", "BLOOD"] ],
locales: {isles: 6, mountain: 13},
},
{
id: "mountainmanselbowgrease",
name: "Mountain Man's Elbow Grease",
source: "tinker",
type: "Made",
potency: 1,
desc: "Packaged in a tartan container with an aggressive slogan, this medicinal ointment really boosts your “puny immune system”.",
methods: [ ["RAW"] ],
effects: [ ["INFECTION"] ],
locales: {workshop: 3},
},
{
id: "murdertoad",
name: "Murder Toad",
source: "delve",
type: "Animal",
potency: 2,
desc: "These little blighters might try to take a bite at you but that doesn’t mean you can be cruel. Just remember to wear a helmet and be sneaky.",
methods: [ ["BOILED"] ],
effects: [ ["SENSES"] ],
locales: {dwarf: 7, strange: 10},
},
{
id: "mysterymetals",
name: "Mystery Metals",
source: "tinker",
type: "Made",
potency: 1,
desc: "Usually dismissed as waste, the metal filings left by blacksmiths and tinkerers can be turned into a helpful alchemical slurry.",
methods: [ ["DISTILLED"] ],
effects: [ ["BONES", "BLOOD"] ],
locales: {workshop: 3},
},
{
id: "nestscraps",
name: "Nest Scraps",
source: "core",
type: "Animal",
potency: 1,
desc: "Nest-building birds, especially Rannoc Eagles, have quite particular tastes for their nests and have learned of a few special reagents that keep their eggs safe and sound. Don’t wreck the nests, please.",
methods: [ ["BOILED"], ["CRUSHED"] ],
effects: [ ["HOT"], ["COLD"] ],
locales: {forest: 4, mountain: 4},
seasons: {spring: -2, winter: 2},
},
{
id: "nimbusfish",
name: "Nimbus Fish",
source: "core",
type: "Animal",
potency: 3,
desc: "Each fish contains a tiny flight bladder that allows them to rise and sink through the water-filled clouds of High Rannoc. But all you need from them are some scales.",
methods: [ ["CRUSHED"] ],
effects: [ ["FEET", "INFECTION", "MOUTH"] ],
locales: {isles: 3, mountain: 13},
},
{
id: "oldblood",
name: "Old Blood",
source: "core",
type: "Magic",
potency: 2,
desc: "Vampire bats, ticks, spear tips, doesn’t really matter where it comes from all that matters is that the blood can’t be fresh.",
poison: 1,
methods: [ ["BOILED"] ],
effects: [ ["CURSE", "RASH"] ],
locales: {strange: 2, dungeon: 5, mountain: 9},
},
{
id: "pillarmushroom",
name: "Pillar Mushroom",
source: "guest",
type: "Plant",
potency: 2,
desc: "These mushrooms can reach well over the height of a man if left unattended. That rarely happens because they're delicious as well as medicinal.",
sweet: 1,
methods: [ ["BOILED"] ],
effects: [ ["MAGIC"] ],
locales: {bog: 5, forest: 10},
},
{
id: "pixiefur",
name: "Pixie Fur",
source: "core",
type: "Magic",
potency: 2,
desc: "Harsh as it sounds, don’t feel too sorry for the little blighters, you certainly won’t after your first run in with them. Rude, quick, and clever, Pixies are some of the worst fey.",
methods: [ ["CRUSHED"] ],
effects: [ ["RASH"] ],
locales: {mountain: 6, bog: 9},
},
{
id: "princesstoad",
name: "Princess Toad",
source: "core",
type: "Animal",
potency: 2,
desc: "An adorable little creature, the princess toad is a pinkish colour with red lips. If I had more space I would talk at lengths about their funny little courtship dance.",
methods: [ ["BOILED"], ["CRUSHED"] ],
effects: [ ["RASH", "WARTS"], ["MOOD"] ],
locales: {bog: 5, forest: 10},
},
{
id: "pristinepolish",
name: "Pristine Polish",
source: "tinker",
type: "Made",
potency: 2,
desc: "Jewellers and gem cutters use this secret recipe to ensure their creations shine the brightest by cleaning even the tiniest bit of dirt.",
methods: [ ["BOILED"] ],
effects: [ ["INFECTION"] ],
locales: {workshop: 6, village: 10},
},
{
id: "ratspit",
name: "Rat Spit",
source: "core",
type: "Animal",
potency: 1,
desc: "Yeah, not very appealing... I would recommend NOT telling the patient about this one.",
methods: [ ["BOILED"] ],
effects: [ ["TEETH"] ],
locales: {forest: 4},
},
{
id: "relic",
name: "Relic",
source: "delve",
type: "Made",
potency: 3,
desc: "Dwarves are always digging up ancient relics. Some end up in galleries, museums, or shrines while most get tossed somewhere and forgotten. Again.",
methods: [ ["RAW"] ],
effects: [ ["GHOUL", "CURSE"] ],
locales: {dwarf: 10, dungeon: 13, depths: 13},
},
{
id: "salamanderurine",
name: "Salamander Urine",
source: "core",
type: "Animal",
potency: 3,
desc: "These lava loving lizards live near rivers and lakes of the stuff. Be stealthy – if you’re too loud they’ll leap in and you’ll never get them.",
sweet: 1,
methods: [ ["BOILED"], ["RAW"] ],
effects: [ ["HOT"], ["COLD"] ],
locales: {strange: 5, dungeon: 8},
},
{
id: "scramblebramble",
name: "Scramble Bramble",
source: "core",
type: "Plant",
potency: 1,
desc: "This peculiar thorny bramble grows on steep hills and riverbanks. When it is disturbed, it can move water through itself to ‘run’ away. Wear thick gloves for this one.",
poison: 1,
methods: [ ["CRUSHED", "BOILED"] ],
effects: [ ["MOOD", "SENSES"] ],
locales: {forest: 3, loch: 5},
seasons: {autumn: 1, winter: 5},
},
{
id: "seabeastssaliva",
name: "Sea Beast's Saliva",
source: "core",
type: "Animal",
potency: 3,
desc: "Unique creatures like the one found in Meltwater are known for their magical properties. The saliva that comes from that thing is full of potential if you’re brave or foolish enough to get it.",
methods: [ ["BOILED"], ["DISTILLED"] ],
effects: [ ["PAIN", "WOUND"], ["NERVES", "SENSES", "BLOOD"] ],
locales: {depths: 4, loch: 13},
},
{
id: "serenestatic",
name: "Serene Static",
source: "tinker",
type: "Magic",
potency: 2,
desc: "Found on certain magical machinery, this static soothes the mind after the initial shock.",
methods: [ ["RAW"] ],
effects: [ ["SENSES"] ],
locales: {workshop: 6},
},
{
id: "shadowshark",
name: "Shadow Shark",
source: "core",
type: "Animal",
potency: 2,
desc: "Whenever this glowing eyed predator is injured it surrounds itself with a cloud of black ink that is nearly impossible to see through.",
sweet: -1,
methods: [ ["DISTILLED"], ["RAW"] ],
effects: [ ["PAIN"], ["BURN", "RASH"] ],
locales: {depths: 6, loch: 8},
},
{
id: "shieldcap",
name: "Shieldcap",
source: "core",
type: "Plant",
potency: 1,
desc: "A blue-steel coloured mushroom, the shieldcap is used by the smaller fae as a buckler thanks to its incredibly strong cap. Grows near the base of oak trees.",
methods: [ ["CRUSHED"], ["RAW"] ],
effects: [ ["BONES", "TEETH"], ["TEETH"] ],
locales: {bog: 1, forest: 2},
seasons: {autumn: -2},
},
{
id: "shimmerfly",
name: "Shimmerfly",
source: "guest",
type: "Animal",
potency: 2,
desc: "They appear like a floating oil slick--until you get too close and they rush you, seeking out the moisture in your eyes and throat.",
methods: [ ["CRUSHED"] ],
effects: [ ["DEHYDRATION"] ],
locales: {dungeon: 8},
},
{
id: "shockfish",
name: "Shock Fish",
source: "core",
type: "Animal",
potency: 2,
desc: "Yet another one that’s awful to collect, these nasty little buggers let out a cloud of electrically charged fluid that can make any part that touches it numb for hours.",
methods: [ ["BOILED"], ["DISTILLED"] ],
effects: [ ["NERVES", "PAIN"], ["BOILS"] ],
locales: {depths: 3, loch: 7},
},
{
id: "signalsalve",
name: "Signal Salve",
source: "tinker",
type: "Magic",
potency: 3,
desc: "Lost somewhere in The Workshop is a device that can heal via magical wavelengths. Luckily, you’ve found one of those signals.",
methods: [ ["RAW"] ],
effects: [ ["ANYTHING"] ],
locales: {workshop: 13},
},
{
id: "silverleaf",
name: "Silverleaf",
source: "core",
type: "Plant",
potency: 1,
desc: "Razor sharp leaves with similar qualities to actual silver, this plant straddles the line between plant and mineral. Grows in the dark.",
methods: [ ["CRUSHED"] ],
effects: [ ["INFECTION", "RASH"] ],
locales: {bog: 4, dungeon: 4},
seasons: {summer: 5},
},
{
id: "sirensong",
name: "Siren Song",
source: "core",
type: "Magic",
potency: 2,
desc: "Beautiful, calming, maddening, the siren song has been known to drive sailors to incredible feats up to, and including, sailing a galleon several miles inland. I’d recommend ear plugs for this one.",
methods: [ ["DISTILLED"] ],
effects: [ ["CURSE", "EAR"] ],
locales: {loch: 6, depths: 8},
seasons: {summer: -5, winter: 2},
},
{
id: "skeletondust",
name: "Skeleton Dust",
source: "core",
type: "Magic",
potency: 2,
desc: "While regular skeletons do work, those reanimated through necromantic rituals are better as the residual magic keeps their bones strong for longer which is what you want.",
methods: [ ["CRUSHED"] ],
effects: [ ["BONES", "HAIR", "TEETH"] ],
locales: {dungeon: 5},
},
{
id: "skullcap",
name: "Skullcap",
source: "core",
type: "Plant",
potency: 1,
desc: "These morbid little mushrooms look almost exactly like shrunken human skulls. When they spore, the jaw breaks open and releases the cloud like a cough.",
methods: [ ["BOILED"], ["CRUSHED"] ],
effects: [ ["PAIN"], ["POISON"] ],
locales: {dungeon: 2, bog: 4},
seasons: {winter: 3},
},
{
id: "slimeshell",
name: "Slime Shell",
source: "core",
type: "Animal",
potency: 2,
desc: "Found in shallow waters and rock pools these fist sized clams produce a handy slime that kills parasites and fights infection, keeping the frail mollusc safe and sound.",
methods: [ ["RAW"] ],
effects: [ ["INFECTION", "PARASITE", "BLOOD"] ],
locales: {loch: 4, depths: 9},
seasons: {summer: -2, winter: 2},
},
{
id: "slowsand",
name: "Slowsand",
source: "guest",
type: "Magic",
potency: 3,
desc: "These patches of earth have the texture and appearance of quicksand, but they siphon time from any creature unlucky enough to be caught in them.",
methods: [ ["RAW"] ],
effects: [ ["TIME"] ],
locales: {dungeon: 13, strange: 10},
},
{
id: "smoothcroak",
name: "Smooth-Croak",
source: "core",
type: "Animal",
potency: 1,
desc: "These colourful frogs are so unbelievably smooth that I had to put up signs reminding visitors not to stroke them. Sure, it makes your skin baby soft but it really hurts the frog. Use wet gloves for this one.",
methods: [ ["BOILED"], ["DISTILLED"] ],
effects: [ ["WARTS"], ["SKIN"] ],
locales: {loch: 2},
},
{
id: "snakespromise",
name: "Snake's Promise",
source: "core",
type: "Magic",
potency: 3,
desc: "Notoriously difficult to get and very easily broken, my recommendation is to bribe them with food and learn the difference between an adder and a python.",
poison: 2,
methods: [ ["RAW"] ],
effects: [ ["GHOUL", "SPIRIT"] ],
locales: {bog: 5, forest: 13},
},
{
id: "songberries",
name: "Songberries",
source: "core",
type: "Plant",
potency: 1,
desc: "Unique to Glimmerwood, these special berries can be found by listening for the singing fairies that flock to them. Good in jam and a staple of High Rannoc cakes.",
sweet: 1,
methods: [ ["CRUSHED"] ],
effects: [ ["MOOD"] ],
locales: {forest: 2},
seasons: {summer: 1, winter: -2},
},
{
id: "starshard",
name: "Star Shard",
source: "core",
type: "Magic",
potency: 2,
desc: "There are a lot of stories about these shards. That they grant wishes, that they glow when you see your true love. They’re fairly common up in The Cloud Isles and are everywhere you look after a Festival.",
methods: [ ["CRUSHED"] ],
effects: [ ["CURSE", "MAGIC"] ],
locales: {isles: 5},
},
{
id: "stonetongue",
name: "Stonetongue",
source: "guest",
type: "Plant",
potency: 1,
desc: "This flat, wide fungus works its way into the seams between rocks, burrowing deep into the earth. It is so named because the visible caps protrude from rock walls like long, lolling tongues.",
methods: [ ["CRUSHED"] ],
effects: [ ["MOUTH", "TEETH"] ],
locales: {dungeon: 5, mountain: 9},
},
{
id: "surgeonsap",
name: "Surgeon Sap",
source: "core",
type: "Plant",
potency: 2,
desc: "A staple of the Nurse Willow, this sticky sap actively encourages the healing process. Wounded animals often lick it straight from the tree which is an option if in need.",
sweet: 1,
methods: [ ["RAW"] ],
effects: [ ["BURN", "WOUND"] ],
locales: {bog: 3, forest: 8},
},
{
id: "vampirevenom",
name: "Vampire Venom",
source: "core",
type: "Animal",
potency: 3,
desc: "Used to be you’d get this by wearing a pig-skin neck with a skein underneath to catch the venom but they got wise to it. Now you have to extract it while they’re sleeping.",
methods: [ ["DISTILLED"], ["RAW"] ],
effects: [ ["CURSE"], ["MOOD", "PAIN"] ],
locales: {dungeon: 10},
},
{
id: "wigfish",
name: "Wigfish",
source: "core",
type: "Animal",
potency: 3,
desc: "Incredibly vain, the shiny-headed bald tuna creates a wig out of seaweed and to be perfectly honest, it does an amazing job. Sadly, the wigs are great reagents.",
methods: [ ["RAW"] ],
effects: [ ["HAIR", "MOOD", "SLEEP"] ],
locales: {depths: 1, loch: 3},
},
{
id: "wigweed",
name: "Wigweed",
source: "guest",
type: "Plant",
potency: 1,
desc: "These long, carnivorous plants grow from the roofs of caves, drooping down in long curtains of foliage that easily reach the ground if left unchecked. They look like willows dyed red, and on warmer days they ooze caustic, alkaline red sap that drips like blood.",
methods: [ ["BOILED"] ],
effects: [ ["PAIN"] ],
locales: {dungeon: 3},
},
{
id: "wildrose",
name: "Wild Rose",
source: "core",
type: "Plant",
potency: 2,
desc: "A beautiful plant that the people of High Rannoc have both tried to encourage and tried to stomp out. They grow where they can get sunlight, and are easy to find in Summer.",
methods: [ ["CRUSHED"] ],
effects: [ ["BONES", "SKIN"] ],
locales: {forest: 3, village: 4},
seasons: {summer: -3},
},
{
id: "wyrdwater",
name: "Wyrd Water",
source: "core",
type: "Magic",
potency: 3,
desc: "Glowing magical water native to The Strange that, if prepared properly, can fulfil any requirements.",
methods: [ ["RAW"] ],
effects: [ ["ANYTHING"] ],
locales: {strange: 10},
}
]>><<set _ailmentsInit = [
{
id: "wounded",
name: "Wounded",
source: "core",
level: "Novice",
tags: {WOUND: 1, PAIN: 1},
desc: "An extremely common occurrence. Whether it be by accident or from a duel, bandit ambush, or beast attack, the afflicted has a serious wound.",
timer: 6,
consq: "They are rushed to the village doctor. Lose 1 Reputation.",
},
{
id: "phodothropy",
name: "Phodothropy",
source: "core",
level: "Novice",
tags: {CURSE: 1, HAIR: 1},
desc: "During the full moon, the afflicted turns into a monstrous hamster and scurries around their home and village, nibbling on carts and walls.",
timer: 6,
consq: "They go on another rampage. Lose 1 Reputation. Describe the aftermath.",
},
{
id: "druidicmadness",
name: "Druidic Madness",
source: "core",
level: "Novice",
tags: {SENSES: 1, MAGIC: 1},
desc: "After spending too much time near active stone circles, the afflicted has become obsessed with creating standing circles everywhere, obstructing traffic and annoying family.",
},
{
id: "dragonsickness",
name: "Dragon Sickness",
source: "core",
level: "Novice",
tags: {SENSES: 1, WOUND: 1},
desc: "Named after the champion hoarders themselves, the afflicted becomes obsessed with a type of object and tries to accrue the greatest hoard of it. Gold, cups, trading cards, etc.",
timer: 4,
consq: "The afflicted steals 10 Silver and runs away.",
},
{
id: "yetichest",
name: "Yeti Chest",
source: "core",
level: "Novice",
tags: {HAIR: 1, LUNGS: 1},
desc: "The afflicted’s chest hair grows longer and thicker until it becomes a fur-like coating. They also speak with a much lower voice for some reason. Good in Winter though.",
},
{
id: "frogified",
name: "Frogified",
source: "core",
level: "Novice",
tags: {WARTS: 1, POISON: 1},
desc: "After some clever clog wrote a story about kissing a frog and getting a prince, witches have had to deal with a flood of hopeless romantics getting warty lips and poisoned.",
timer: 6,
consq: "They’re rushed to the village doctor. Lose 1 Reputation.",
},
{
id: "bakersblisters",
name: "Baker's Blisters",
source: "core",
level: "Novice",
tags: {BURN: 1, PAIN: 1},
desc: "Scalding hot sugar, time sensitive cakes, no oven gloves in sight, there’s a reason bakers say their blood, sweat, and tears went into their pastries.",
},
{
id: "drunk",
name: "Drunk",
source: "core",
level: "Novice",
tags: {BLOOD: 1, COLD: 1, SENSES: 2},
desc: "Struck by a vampire, the afflicted has been drunk down to quite dangerous levels. On top of that, they keep leaving their window open at night now and have caught a cold.",
timer: 8,
consq: "They run off with their vampiric lover. Write about how it goes for them and for you.",
},
{
id: "magneticthumb",
name: "Magnetic Thumb",
source: "core",
level: "Novice",
tags: {PAIN: 1, BLOOD: 1},
desc: "Caused by having too much iron in one’s diet, the afflicted’s hands attract metal. Not so bad for painters, a death sentence for builders and bakers.",
},
{
id: "cludgiemouth",
name: "Cludgie Mouth",
source: "core",
level: "Novice",
tags: {CURSE: 1, INFECTION: 1},
desc: "A curse from a bog goblin, this poor soul’s mouth reeks like a tavern privy. A single breath of theirs can empty a busy room.",
timer: 6,
consq: "They go to the village doctor instead. Lose 1 Reputation.",
},
{
id: "hangover",
name: "Hangover",
source: "core",
level: "Novice",
tags: {POISON: 1, STOMACH: 1},
desc: "After a rowdy night of reckless abandon, the afflicted has crawled to you with a stomach full of poison, a mouth like a desert, and a head as fragile as a sparrow’s egg.",
timer: 4,
consq: "They get better and go off grumbling. Lose 1 Reputation.",
},
{
id: "toadnose",
name: "Toad Nose",
source: "core",
level: "Novice",
tags: {WARTS: 1, MOOD: 1},
desc: "Used to be that they called it Witch’s Nose. Thankfully enough people got turned into pigs for them to change it. Essentially just a wart, the afflicted might have more if unlucky.",
},
{
id: "pollenpox",
name: "Pollen Pox",
source: "core",
level: "Novice",
tags: {RASH: 1, COUGH: 1},
desc: "Travellers from the cities often find that after spending a day in Glimmerwood Grove they’re suddenly itchy and sneezing. It’s always allergies.",
},
{
id: "adventurersrash",
name: "Adventurer's Rash",
source: "core",
level: "Intermediate",
tags: {RASH: 1, SENSES: 1},
desc: "A common ailment for farmhands and apprentices. After coming into contact with a carrier, the afflicted gets an itching in their feet and a (hopefully benign) twinkle in their eye.",
timer: 4,
consq: "They’ve set off on an epic quest. What was their goal? Do you think they’ll manage it? Lose 1 Reputation.",
},
{
id: "faewind",
name: "Fae Wind",
source: "core",
level: "Intermediate",
tags: {CURSE: 1, MOOD: 2},
desc: "A favourite among certain fairies, the afflicted has been cursed so that their... flatulence sounds like laughter or music. Physically harmless but very embarrassing to some.",
},
{
id: "dwarvenlung",
name: "Dwarven Lung",
source: "core",
level: "Intermediate",
tags: {COUGH: 1, LUNGS: 2},
desc: "A misnomer as dwarves are naturally immune, the afflicted has inhaled too much coal and stone dust and has developed a chesty cough.",
},
{
id: "restlessbones",
name: "Restless Bones",
source: "core",
level: "Intermediate",
tags: {MAGIC: 2, BONES: 1},
desc: "Usually caught from necromantic ritual sites, this disease causes the afflicted’s skeleton to try to escape. Thankfully they aren’t good at it so this mostly causes a tingling feeling.",
},
{
id: "lossofexperience",
name: "Loss of Experience",
source: "core",
level: "Intermediate",
tags: {MOOD: 2, MAGIC: 1},
desc: "Mostly a concern for adventurers, the afflicted feels sluggish and morose, as if they have lost a measure of their essence and are no longer good at things they once were.",
timer: 4,
consq: "They get frustrated and smash up your house. Lose 1 Upgrade.",
},
{
id: "sailorsstep",
name: "Sailor's Step",
source: "core",
level: "Intermediate",
tags: {INFECTION: 1, EAR: 1},
desc: "An inner ear infection that causes the afflicted to feel like they’re on a galleon in a storm.",
timer: 4,
consq: "They trip over and hurt themselves. If you can treat a [WOUND] right now, lose 1 Reputation. If you can’t, lose 2 Reputation.",
},
{
id: "potionpoison",
name: "Potion Poison",
source: "core",
level: "Intermediate",
tags: {MAGIC: 1, POISON: 2},
desc: "The afflicted figured they would trust the fast-talking merchant with the miracle cure rather than come to you, now they’ve gone green and their vomit just ran away.",
timer: 4,
consq: "A strange magical effect happens. Describe it and lose 2 Reputation.",
},
{
id: "hoverhives",
name: "Hover Hives",
source: "core",
level: "Intermediate",
tags: {SKIN: 2, PAIN: 1},
desc: "A dangerous ailment to those with less than solid roofs, tiny hives have appeared all over the afflicted that causes them to float. The more hives, the stronger the lift.",
timer: 6,
consq: "They float off into the sky and the Balloonist has to go fetch them. Lose 1 Reputation.",
},
{
id: "ventriloquistcough",
name: "Ventriloquist Cough",
source: "core",
level: "Intermediate",
tags: {MAGIC: 1, COUGH: 2},
desc: "A rare ailment that sees the poor afflicted coughing someone else’s cough. They make the motions, ending up with a sore throat and dry mouth. Worst though is the thrown sound.",
timer: 4,
consq: "The puppet master gets over their cold and the afflicted goes home to lie down. Lose 2 Reputation.",
},
{
id: "aterriblefright",
name: "A Terrible Fright",
source: "core",
level: "Intermediate",
tags: {HAIR: 1, PAIN: 1, MOOD: 2},
desc: "The afflicted has seen something so horrifying, so terrifying, so unbelievably scary that their hair has turned white and they’ve torn their throat from screaming.",
timer: 6,
consq: "They run off screaming. Are they ever found? Lose 1 Reputation.",
},
{
id: "silverburn",
name: "Silver Burn",
source: "core",
level: "Intermediate",
tags: {CURSE: 2, BURN: 2},
desc: "Silver is an irritant to more than just the stereotypical werewolf. The afflicted may have a form of lycanthropy, vampirism, or even a form of Giver’s Disease.",
},
{
id: "tonguestung",
name: "Tongue Stung",
source: "core",
level: "Intermediate",
tags: {MOUTH: 1, BOILS: 2, PAIN: 2},
desc: "The recent trend in ‘organic’ foods has led some clever clogs, the afflicted included, to try get their honey straight from the hive.",
},
{
id: "bardboils",
name: "Bard Boils",
source: "core",
level: "Intermediate",
tags: {BOILS: 2, PAIN: 1},
desc: "Look, you have a duty of care to all who come to you, even if the affliction is... unseemly. Witch Elders also recommend smacking the bard responsible with an oak spoon. If you make an extra potion and visit The Village within the Timer you may gain an extra 20 Silver from the bard.",
timer: 4,
consq: "They get embarrased and run off home to pretend this never happened. Lose 1 Reputation.",
},
{
id: "sporebreath",
name: "Spore Breath",
source: "core",
level: "Advanced",
tags: {PARASITE: 2, LUNGS: 2, MOUTH: 2},
desc: "The afflicted has eaten a mushroom that they really shouldn’t have. Now, when they breathe, the spores are released in a noxious cloud.",
timer: 6,
consq: "They’ve infected everyone else in the village forcing other witches to get involved. What do the witches do? Lose 3 Reputation.",
},
{
id: "giversdisease",
name: "Giver's Disease",
source: "core",
level: "Advanced",
tags: {SENSES: 3, HOT: 1, BURN: 2},
desc: "The afflicted has become allergic to material possessions and has started giving away all of their worldly goods. If left untreated, leads to hypothermia, starvation, and boredom.",
timer: 6,
consq: "You took too long and they gave away everything. Lose 2 Reputation.",
},
{
id: "candlesick",
name: "Candlesick",
source: "core",
level: "Advanced",
tags: {EAR: 2, BURN: 1, HOT: 2},
desc: "A nasty disease that causes the afflicted to produce half their weight in earwax each day. Burns go hand in hand with this affliction.",
timer: 6,
consq: "One of their earwax piles catches fire and burns something. What was it? Lose 2 Reputation.",
},
{
id: "shatteredtooth",
name: "Shattered Tooth",
source: "core",
level: "Advanced",
tags: {PAIN: 3, TEETH: 1, INFECTION: 2},
desc: "A fall, a punch, trying to open a tin with their teeth, the people of High Rannoc seem to be researching all the possible ways to break one’s teeth. The afflicted is just the latest.",
timer: 6,
consq: "They go to the village doctor instead. Lose 2 Reputation.",
},
{
id: "thunderstruck",
name: "Thunder Struck",
source: "core",
level: "Advanced",
tags: {PAIN: 2, NERVES: 2, BURN: 2},
desc: "Sometimes the gods get angry at certain people. Other times they were foolish enough to wear plate mail in a thunderstorm atop a mountain. Either way they’re in agony.",
timer: 6,
consq: "They pass on from their injuries. What were their last words? Lose 4 Reputation.",
},
{
id: "partialpetrification",
name: "Partial Petrification",
source: "core",
level: "Advanced",
tags: {MAGIC: 2, SKIN: 2, NERVES: 2},
desc: "Cursed object, gorgon’s gaze, or a spell gone wrong, whatever the cause, a portion of the afflicted is uncomfortably petrified.",
timer: 6,
consq: "The petrified portion breaks off. What do they do with it? How does this affect them? Lose 2 Reputation.",
},
{
id: "phantomlimb",
name: "Phantom Limb",
source: "core",
level: "Advanced",
tags: {SPIRIT: 3, SLEEP: 2},
desc: "A genetic disorder that affects those with The Gift. The afflicted sprouts the ghostly limb of a deceased relative that they have no control over.",
timer: 6,
consq: "They learn to live with it, as much as it annoys other people. Lose 3 Reputation.",
},
{
id: "readersdigestion",
name: "Reader's Digestion",
source: "core",
level: "Advanced",
tags: {STOMACH: 3, DEHYDRATION: 2},
desc: "Primarily the bane of student scholars using a ‘digest knowledge’ spell incorrectly, this ailment is characterised by word vomit, indigestion, and dehydration.",
timer: 6,
consq: "They write and publish a report on why you suck. Write an excerpt from that report in your journal. Lose 2 Reputation.",
},
{
id: "fairyfever",
name: "Fairy Fever",
source: "core",
level: "Advanced",
tags: {SENSES: 3, COLD: 2, BONES: 2},
desc: "Makes the afflicted believe they are a fairy. Usually accompanied by hypothermia and broken legs from the scant clothing and belief they can fly.",
timer: 8,
consq: "They escape from the village doctor and run off with the fairies. Are they happy? What is life like for them now? Lose 2 Reputation.",
sweet: 3,
},
{
id: "ashyfoot",
name: "Ashy Foot",
source: "core",
level: "Advanced",
tags: {CURSE: 2, RASH: 2, BURN: 2},
desc: "Thanks to a partial demonic possession, the afflicted’s feet take on an ashy texture, becoming very dry and sore, especially when they walk on hallowed ground.",
timer: 4,
consq: "Their foot draws a sigil and summons the demon to our world. How does the demon get on? What does it have planned? Lose 1 Reputation.",
poison: 2,
},
{
id: "liarslips",
name: "Liar's Lips",
source: "core",
level: "Advanced",
tags: {PAIN: 1, MOUTH: 3, CURSE: 3},
desc: "A fae curse, the afflicted is either unable to tell the truth or only able to tell the truth, often with hilarious results... at least for those watching.",
timer: 4,
consq: "An unfortunate lie or a harsh truth – what did they say to cause such a commotion? Lose 2 Reputation.",
},
{
id: "diversfee",
name: "Diver's Fee",
source: "core",
level: "Advanced",
tags: {PAIN: 1, BLOOD: 2, NERVES: 2, STOMACH: 2},
desc: "A common ailment among divers who have come up too quickly. Bubbles of gas form in the blood and play all sorts of havoc with the body. Take your time when diving.",
},
{
id: "grumblytums",
name: "Grumbly Tums",
source: "core",
level: "Advanced",
tags: {SPIRIT: 3, STOMACH: 2, SLEEP: 1},
desc: "A side-effect of accidentally eating a ghost is that the dearly departed sits in the afflicted’s stomach and complains, causing stomach irritation and insomnia. Doubly so if its a poultry-geist.",
timer: 8,
consq: "They manage to get the ghost out... in your bathroom. Describe the ghost. What do they do to haunt you? Lose 2 Reputation.",
},
{
id: "wrongform",
name: "Wrong Form",
source: "core",
level: "Expert",
tags: {MAGIC: 3, MOOD: 2, HAIR: 1, SKIN: 1},
desc: "A spell gone wrong, a curse, or even just a general feeling of dysphoria, the afflicted wants to change their body to reflect their true self.",
},
{
id: "botchedresurrection",
name: "Botched Resurrection",
source: "core",
level: "Expert",
tags: {GHOUL: 3, CURSE: 3, WOUND: 3, COLD: 2},
desc: "The afflicted recently passed on, only to have their soul brought back from the great beyond. However, as is usually the case, they’re more of an animated corpse than them.",
timer: 6,
consq: "You aren’t able to bring them back properly and have to put the corpse down. Write something about this experience. Lose 3 Reputation.",
},
{
id: "hearthheart",
name: "Hearth Heart",
source: "core",
level: "Expert",
tags: {SENSES: 3, HOT: 3, DEHYDRATION: 2},
desc: "The afflicted has such a tremendous fever its as if a fire’s burning in their chest. Annoyingly it also makes them want to hug friends, family, and strangers.",
timer: 6,
consq: "Everyone gets sick. You can’t visit the Village during the next Ailment. Lose 4 Reputation.",
},
{
id: "dragonmouth",
name: "Dragon Mouth",
source: "core",
level: "Expert",
tags: {MOUTH: 1, HOT: 3, DEHYDRATION: 3, MAGIC: 2},
desc: "Scaly lips and a burning hot tongue that evaporates almost everything they drink, this ailment tends to come from curses or the mucus of a sick dragon.",
timer: 6,
consq: "This one’s fatal. Left too long they passed on. Write something about this moment and lose 4 Reputation.",
},
{
id: "clockshock",
name: "Clock Shock",
source: "core",
level: "Expert",
tags: {TIME: 2, MAGIC: 3, MOOD: 1},
desc: "A side-effect to an anti-ageing cream, a dip in the Fountain of Youth, or a spell gone wrong. Whatever the cause, the afflicted is ageing in reverse. Serves the big babies right.",
timer: 6,
consq: "They de-age past their birth and disappear. Write something about this experience and lose 8 Reputation.",
sweet: 3,
},
{
id: "bansheesblessing",
name: "Banshee's Blessing",
source: "core",
level: "Expert",
tags: {EAR: 2, BLOOD: 3, MOOD: 3, MAGIC: 2},
desc: "A wrong number situation, the afflicted has heard a banshee’s wail. Their blood is running cold and they are sick with fright...they may also have a bit of hearing loss.",
timer: 6,
consq: "The link wasn’t severed in time and they shared the fate of the banshee’s target. Lose 8 Reputation.",
},
{
id: "temporalhiccups",
name: "Temporal Hiccups",
source: "core",
level: "Expert",
tags: {MAGIC: 3, PAIN: 2, TIME: 3, STOMACH: 2},
desc: "A very frustrating ailment that causes the afflicted to randomly jump backwards or forwards in time, leading to a collection of bruises.",
timer: 6,
consq: "They hiccup away to some other period of history. You find mention of them in a history book, what does it say? Lose 4 Reputation.",
},
{
id: "saturdaynightfever",
name: "Saturday Night Fever",
source: "core",
level: "Expert",
tags: {FEET: 3, PAIN: 3, NERVES: 2, HOT: 1},
desc: "A full body nerve dysfunction that makes it look like the afflicted is dancing... albeit terribly. Exhaustion, embarrassment, and aching feet are common.",
timer: 6,
consq: "A passing bard notices their moves and gives them a future in show business. What happens to them? Lose 4 Reputation.",
},
{
id: "vampirism",
name: "Vampirism",
source: "core",
level: "Expert",
tags: {BURN: 2, BLOOD: 3, CURSE: 3},
desc: "While quite content with the immortality and unholy powers, the afflicted has work in the morning and can’t afford a good cape anyway.",
timer: 6,
consq: "They warm up to the idea, so to speak and decide to stay as a vampire. What do they get up to that gets you in bother? Lose 4 Reputation.",
},
{
id: "astralrejection",
name: "Astral Rejection",
source: "core",
level: "Expert",
tags: {SPIRIT: 3, MAGIC: 2, SENSES: 2, BLOOD: 1},
desc: "Leaving one’s body to travel through the astral plane is quite the feat of magic and spirituality. Sadly, the spirit can change so much that the body rejects it.",
timer: 6,
consq: "Their spirit cannot rejoin their body so they stick around. What are they like? Is this a haunting or a house-mate scenario? Lose 2 Reputation.",
},
{
id: "portalpinch",
name: "Portal Pinch",
source: "core",
level: "Expert",
tags: {WOUND: 3, INFECTION: 2, MAGIC: 2, PAIN: 3},
desc: "The afflicted has been thinking with portals and thanks to a bit of botched math they’ve gotten a limb stuck in one realm while the rest of them is here. If you have a WAND you can keep the tiny portal open as a Decoration.",
timer: 6,
consq: "Something gets the limb. For a brief moment you got to see a whole new realm. Describe it. Lose 2 Reputation.",
},
{
id: "ghoulgnawed",
name: "Ghoul Gnawed",
source: "core",
level: "Expert",
tags: {WOUND: 2, GHOUL: 3, BLOOD: 3},
desc: "Common among adventurers, tomb raiders, and grave diggers, the afflicted has been bitten by a ghoul and will, if not treated, turn into one once the disease reaches the brain.",
timer: 6,
consq: "They bite someone. Start another Ghoul Gnawed potion. If you fail it again, the whole village gets bitten. Describe how you escape the localised ghoul apocalypse and how it all gets sorted out. Lose 15 Reputation. If you succeed on the second Ghoul Gnawed potion, only lose 4 Reputation.",
},
{
id: "doubletrouble",
name: "Double Trouble",
source: "core",
level: "Expert",
tags: {},
desc: "The afflicted has had the unfortunate luck of catching two things at once. Draw two Advanced Ailments to see what they’ve got.",
},
{
id: "clockjaw",
name: "ClockJaw",
source: "tinker",
level: "Novice",
tags: {NERVES: 1, MOUTH: 1},
desc: "The afflicted has picked up an unfortunate facial tic which makes their jaw open and close like the tick-tock of a clock.",
timer: 8,
consq: "Frustrated, they head to the village doctor instead. Lose 1 Reputation.",
},
{
id: "charged",
name: "Charged",
source: "tinker",
level: "Novice",
tags: {ELECTRIC: 2, SENSES: 1},
desc: "A constant electrical charge runs through the afflicted causing sparks to leap from their fingers and toes.",
timer: 6,
consq: "They ground themselves on something, venting the electricity completely. What do they break?",
},
{
id: "tannershands",
name: "Tanner's Hands",
source: "tinker",
level: "Novice",
tags: {SKIN: 2, RASH: 1},
desc: "A common effect from the products tanners use, this foul smelling rash can turn the stomachs of those unfamiliar with the craft.",
timer: 8,
consq: "Their ailment ruins an important moment for them. What was it? A social event? A romantic moment? Either way Lose 1 Reputation.",
},
{
id: "flattened",
name: "Flattened",
source: "tinker",
level: "Novice",
tags: {BONE: 2, PAIN: 2},
desc: "Take your eye off the machine for a second and you’ll find yourself paying the price. In this case, the price was a hand.",
timer: 6,
consq: "The hand needs to come off. What do they replace it with? Lose 1 Reputation.",
},
{
id: "wandskelf",
name: "Wand Skelf",
source: "tinker",
level: "Intermediate",
tags: {OBJECT: 2, MAGIC: 2},
desc: "A piece of magic infused wood has become lodged deep inside the afflicted’s skin, causing them to cast wild magic with every gesture.",
timer: 4,
consq: "One of their accidental spells gets out of hand. What was the spell? What was the outcome? Lose 1 Reputation.",
},
{
id: "grindergut",
name: "Grinder Gut",
source: "tinker",
level: "Intermediate",
tags: {STOMACH: 2, SENSES: 2},
desc: "The poor afflicted has started eating their tools, leaving themselves unable to work and with no appetite for real food.",
timer: 4,
consq: "The afflicted has to sell off a prized possession in order to keep their workshop. What was it? Lose 1 Reputation.",
},
{
id: "hattersquirk",
name: "Hatter's Quirk",
source: "tinker",
level: "Intermediate",
tags: {SENSES: 2, MOOD: 1},
desc: "A side effect of breathing chemicals all day, the afflicted has started acting strange and spouts nonsense poems at the drop of a hat.",
timer: 6,
consq: "They become certain their delusions are real and escape into the night. Lose 2 Reputation.",
},
{
id: "deadbattery",
name: "Dead Battery",
source: "tinker",
level: "Intermediate",
tags: {ELECTRIC: 3},
desc: "The dwarves of The Workshop have been known to fit themselves with powerful bits of technology that help keep their damaged organs going. Sometimes they forget to charge them...",
timer: 4,
consq: "Their life-supporting technology is off for too long and they are rushed too the village doctor. Lose 2 Reputation.",
},
{
id: "tooled",
name: "Tooled",
source: "tinker",
level: "Advanced",
tags: {CURSE: 3, OBJECT: 3},
desc: "Somehow, the afflicted has had part of their body replaced with one of their tools. A saw for teeth, hammer for a hand, or a brush beard.",
timer: 6,
consq: "The afflicted sets off to get revenge on the one who cursed them. How does that go? Lose 2 Reputation.",
},
{
id: "canvascurse",
name: "Canvas Curse",
source: "tinker",
level: "Advanced",
tags: {CURSE: 3, SKIN: 3},
desc: "Wherever the afflicted goes, they sap the colour from the world onto themselves leaving colourless places and furious faces in their wake.",
timer: 8,
consq: "You take too long and somewhere nearby has been drained of all its colour. The angry village folk chase the afflicted off. Lose 3 Reputation.",
},
{
id: "rejection",
name: "Rejection",
source: "tinker",
level: "Advanced",
tags: {INFECTION: 3, NERVES: 3, OBJECT: 2},
desc: "The afflicted has had a lost limb replaced with a golem prosthetic that ties into their nervous system but their body is rejecting it.",
timer: 6,
consq: "The prosthetic has to be removed and they have to learn to live without. How do they deal with the loss? Lose 1 Reputation.",
},
{
id: "heartseeker",
name: "Heart Seeker",
source: "tinker",
level: "Advanced",
tags: {OBJECT: 3, PAIN: 2, WOUND: 3},
desc: "After an accident with a machine, the afflicted has been left with a piece of metal working through their body towards their heart.",
timer: 6,
consq: "The piece of metal reaches its destination. Lose 3 Reputation.",
},
{
id: "staticghost",
name: "Static Ghost",
source: "tinker",
level: "Expert",
tags: {ELECTRIC: 3, MAGIC: 3},
desc: "The afflicted was working with strange technologies and vanished into thin air before returning as a glowing electrified spectre with knowledge of the future.",
timer: 6,
consq: "Something in the future catches them and prevents them from coming back. What did it look like? Lose 2 Reputation.",
},
{
id: "stolesoul",
name: "Stole Soul",
source: "tinker",
level: "Expert",
tags: {SPIRIT: 3, OBJECT: 3, CURSE: 3},
desc: "The afflicted has had the terrible misfortune of having their latest creation switch bodies with them, trapping their soul in the object while their own body ran off in the night. In order to treat this Ailment you must find the Afflicted’s original body by drawing a Face Card.",
timer: 8,
consq: "The original body has escaped making the switch permanent. What does the afflicted do now? Lose 2 Reputation.",
},
{
id: "glitchitch",
name: "Glitch Itch",
source: "tinker",
level: "Expert",
tags: {OBJECT: 3, RASH: 3, ELECTRIC: 3},
desc: "Sometimes the robots in The Workshop can get an electrical rash that causes them to behave... strangely. Poor little thing.",
timer: 6,
consq: "You take too long and the glitch becomes permanent. What weird quirk has it picked up? Lose 1 Reputation.",
},
{
id: "panaceaproblem",
name: "Panacea Problem",
source: "tinker",
level: "Expert",
tags: {ALL: 2},
desc: "Someone has had the clever idea of creating a machine that can cure everything but lacking the proper apothecarial resources, they’ve created something more akin to a disease bomb. You need to brew a Potion which has one of every [TAG] and put it into the machine.",
timer: 169,
consq: "You were too late and the machine sets off a pandemic. Describe what happens. The Workshop is Closed for a Year. You get no Downtime for a Season and instead draw two Ailments per Week. You receive no Reputation Loss during that time.",
},
{
id: "grozinsgarishgaze",
name: "Grozin's Garish Gaze",
source: "delve",
level: "Novice",
tags: {SENSES: 2, CURSE: 1},
desc: "The afflicted has been cursed with awful taste and wants to inflict their artistic vision on the rest of their hold.",
timer: 8,
consq: "The afflicted creates something functional but awful looking. What is it? Can it be removed? Lose 2 Reputation.",
},
{
id: "contagiouscowardice",
name: "Contagious Cowardice",
source: "delve",
level: "Intermediate",
tags: {SENSES: 2, MOOD: 2, LUNGS: 2},
desc: "A particularly troublesome affliction that has seen holds deserted and armies scattered. Spreads via screams and tears, which are in abundance.",
timer: 6,
consq: "The Dwarven Hold is evacuated, ignore any Event with a Dwarf in it until the end of the Season. Lose 2 Reputation.",
},
{
id: "funguy",
name: "Fun Guy",
source: "delve",
level: "Advanced",
tags: {GHOUL: 3, INFECTION: 3, PARASITE: 3},
desc: "An ironic name as the afflicted is anything but. Touched by the mycelium of some terrible fungus, they have become a spore-spreading ghoul. You may not use mushroom-based reagents.",
timer: 6,
consq: "The mycelium has done too much damage, they cannot be saved. What is done with the body to keep the hold safe? Lose 4 Reputation.",
},
{
id: "monstrousform",
name: "Monstrous Form",
source: "delve",
level: "Expert",
tags: {MAGIC: 3, CURSE: 3, SKIN: 3, BONES: 3, SENSES: 3},
desc: "Through a curse foul and ancient the afflicted has been transformed into a minor monstrosity. They are trapped for now but if they break out...",
timer: 10,
consq: "They escape and many die. Choose an event with a Dwarf in it and score it out. Lose 6 Reputation.",
},
{
id: "slumbererslungs",
name: "Slumberer's Lungs",
source: "guest",
level: "Intermediate",
tags: {LUNGS: 2, SLEEP: 2},
desc: "The afflicted's lungs are shutting down slowly, drawing less and less oxygen into their bloodstream until inevitable asphyxiation. The first sign is fatigue. By the time they're short of breath it's almost too late.",
timer: 8,
consq: "The growing fatigue causes them to make a terrible mistake. What did they do?",
},
{
id: "shadowdelirium",
name: "Shadow Delirium",
source: "guest",
level: "Advanced",
tags: {MOOD: 3, SPIRIT: 3},
desc: "The giveaway is behind the eyes. There's a darkness, a shimmer that says (I'm going nowhere). Slowly the vision fades, replaced only with shuddering dreamscapes and dull memories.",
timer: 6,
consq: "They descend into their delirious world. What strange things do they mutter about? What happens to them now? Can they be cured?",
},
{
id: "sleeplifeaway",
name: "Sleep Life Away",
source: "guest",
level: "Expert",
tags: {TIME: 2, PARASITE: 2, SPIRIT: 2},
desc: "The afflicted's dreams are filled with visions of many futures, as a ghostly presence leads them down all the possible roads their life might've taken, aging them as if they'd lived them themselves.",
timer: 6,
consq: "They slip away into a deathlike state. Their body still lives but their mind has permanently left to follow one of the possible lives. Lose 2 Reputation.",
},
{
id: "marshbloom",
name: "Marshbloom",
source: "guest",
level: "Novice",
tags: {PARASITE: 2, SKIN: 1},
desc: "This parasitic vine spreads across damp ground, sensing for bare ankles to latch upon. Once firmly established, it slowly snakes its way up the body over several days.",
timer: 8,
consq: "Once the host is drained of minerals, the vermillion flowers bloom and spread their spores. How do you remove the new growth?",
},
{
id: "brooksmaw",
name: "Brook's Maw",
source: "guest",
level: "Intermediate",
tags: {CURSE: 2, MOUTH: 2},
desc: "Cursed by a local water spirit, the afflicted becomes a part of the meandering river. Brackish water trickles from their mouth, algae clumps around their eyes and nose--even the occasional small fish makes an appearance.",
timer: 6,
consq: "They find it uncomfortable to be out of the water and move into a river or marsh. What is life life for them now? Lose 1 Reputation.",
},
{
id: "bogmalkinswhisker",
name: "Bogmalkin's Whisker",
source: "guest",
level: "Expert",
tags: {CURSE: 3, MAGIC: 3, HAIR: 2},
desc: "'Mistreat a mog, glower o' the Bog.' The bogmalkin is a feline trickster of the fae, the patron saint of cats everywhere. Those spiteful souls who attract the worst of her ire will feel themselves, first with a whisker or two, slowly turning into that which they have abused.",
timer: 6,
consq: "The transformation is steady but unerring, and eventually all that remains is a mewling little kitten. The change is irreversible, but the mind of the creature retains memories from its past life.",
},
{
id: "shepherdsbane",
name: "Shepherd's Bane",
source: "guest",
level: "Novice",
tags: {RASH: 1, PARASITE: 1},
desc: "So called because the itiching caused by these tiny burrowing mites has caused many a shepherd to abandon their flock and seek solace in a cooling river. Unfortunately, wet conditions are how the mites breed.",
timer: 169,
consq: "The shepherd's flock goes missing while they attend their itch. Gain 1 Reputation if you can find them before the end of the Season. Follow the same rules as the lost pigs quest (page 35).",
},
{
id: "atlasarse",
name: "Atlas Arse",
source: "guest",
level: "Intermediate",
tags: {CURSE: 2, MOOD: 1},
desc: "This bizarre condition renders the sufferer completely unable to locate their own posterior, even with a helpful diagram,. Symptoms include missing chairs when sitting down and wearing trousers backwards.",
timer: 6,
consq: "They are so embarrassed that they run away. What happens to them? Do they come back? Lose 1 Reputation.",
},
{
id: "chronicetheriality",
name: "Chronic Etheriality",
source: "guest",
level: "Expert",
tags: {MAGIC: 2, SLEEP: 2, MOOD: 2},
desc: "Having varying parts of your body in and out of the material plane sounds fun to begin with but once you had your hand stuck inside a table until it became ghostlike again you'll change your tune.",
timer: 8,
consq: "You took too long and they faded out of our plane completely, leaving just a grumpy ghost to haunt you. Lose 2 Reputation and enjoy your new housemate.",
}
]>><<widget tempSearchButtons>>
<div style = "border: 1px #eee solid; width: fit-content; padding: 5px 10px; margin-top: 10px">
<<link "Apply">>
<<getSearchResults>>
<<replace "#display-panel1">>
<<printSearchResults>>
<</replace>>
<</link>> filter for new results<br/>
<<link "Save">>
<<for _id range $searchResults>>
<<if _id in $shelfContents>>
<<set $shelfContents[_id]++>>
<<else>>
<<set $shelfContents[_id] = 1>>
<</if>>
<</for>>
<<replace "#shelfDropdown">>
<<printShelfVertical>>
<</replace>>
<<unset _id>>
<</link>> search results<br/>
<<link "Clear">>
<<set $shelfContents = {}>>
<<replace "#shelfDropdown">>
<<printShelfVertical>>
<</replace>>
<</link>> saved<br/>
<<link "Random">>
<<dialog "Random reagent" "class-a">>
<<set _randReagent = $searchResults.random()>>
<div @class='"icon-sprite " + _randReagent' style = "width: 85px; height: 85px"></div>
<<= setup.reagents[_randReagent].name>><br/>
<<button "Close">><<dialogclose>><</button>>
<</dialog>>
<</link>> reagent from results <br/>
<<link "Reset" "Reagents">>
<<resetSearch>>
<</link>> search terms
</div>
<</widget>><p>Welcome to PotionBrew! This tool will help you play ''Apothecaria'' by Anna Blackwell.</p>
<p>To get started:
<ul>
<li>Click ''Ailments'' to diagnose a patient with a random ailment from any Apothecaria expansion, or</li>
<li>Click ''Reagents'' to search for reagents to cure your patient.</li>
</ul>
</p>
<p>Once you have some reagents saved:
<ul>
<li>Click ''Brew'' to mix them up in a potion.</li>
<li>Click ''Recipes'' to see past potions you've concocted.</li>
</ul>
</p>
<p>Happy brewing!</p>