<h1>TO BEHOLD THE BLOOD STONE</h1><h3><em>A Solo DnD Text Adventure</em></h3><img width=100px src="bloodstone images/icons/blood stone.png">
Character statistics (Strength, Dexterity, Constitution, etc.), classes (Druid, Rogue, and so on.), and dice rolls are based on Dungeons and Dragons Fifth Edition, but have been simplified to fit into a piece of interactive fiction. If you are interested in Dungeons and Dragons, or would otherwise like to review the basic rules, follow the link below:
<a href="https://www.dndbeyond.com/sources/dnd/basic-rules-2014" target="_blank">DnD 2014 Basic Rules</a>
You can also download a copy of the System Reference Document for free. It's in creative commons!
<a href="https://www.dndbeyond.com/srd" target="_blank">DnD 5.1 and 5.2 SRD's</a>
<strong>What you Won't Need:</strong>
You won't need a character sheet or dice to play this c-rpg. Everything is handled in-engine.
No need for other players. This game is a solo adventure, meaning it only needs 1 player and you won't typically have allies. Solo campaigns "can" budget for hirelings or a companion, but those haven't been implemented yet.
<<button "New Game">><<goto "Tutorial Ask">><</button>>
<<if not tags().includes("noheader")>><div id="stats-bar">
\\
<<if not tags().includes("onlystats")>><strong class="player-name"><<print $playerName>></strong> |
\\
LV: <span class="level"><<print $level>></span> <<if $level < 20>><span class="xp-bar">X</span> <</if>><span class="class"><<print $classChoice>></span> |
\\
HP: <span class="hp-val"><<print $hp>></span>/<span class="maxhp-val"><<print $maxHP>></span> |
\\
<<if $spellcasting == true>>MP: <span class="mp-val"><<print $mp>></span>/<span class="maxmp-val"><<print $maxMP>></span> | <</if>>
\\
AC: <span class="ac"><<print $armorClass>></span> |
\\
Gold: <span class="gold-val"><<print $gold>></span><</if>>
\\
</div>Strength: <span class="str-score"><<print $abilityScores["str"]["score"]>></span>(<span class="str-mod"><<print $abilityScores["str"]["mod"]>></span>)<span class="str-prof"><<print $abilityScores["str"]["prof"]>></span>,
\\
Dexterity: <span class="dex-score"><<print $abilityScores["dex"]["score"]>></span>(<span class="dex-mod"><<print $abilityScores["dex"]["mod"]>></span>)<span class="dex-prof"><<print $abilityScores["dex"]["prof"]>></span>,
\\
Constitution: <span class="con-score"><<print $abilityScores["con"]["score"]>></span>(<span class="con-mod"><<print $abilityScores["con"]["mod"]>></span>)<span class="con-prof"><<print $abilityScores["con"]["prof"]>></span>,
\\
Intelligence: <span class="int-score"><<print $abilityScores["int"]["score"]>></span>(<span class="int-mod"><<print $abilityScores["int"]["mod"]>></span>)<span class="int-prof"><<print $abilityScores["int"]["prof"]>></span>,
\\
Wisdom: <span class="wis-score"><<print $abilityScores["wis"]["score"]>></span>(<span class="wis-mod"><<print $abilityScores["wis"]["mod"]>></span>)<span class="wis-prof"><<print $abilityScores["wis"]["prof"]>></span>,
\\
Charisma: <span class="cha-score"><<print $abilityScores["cha"]["score"]>></span>(<span class="cha-mod"><<print $abilityScores["cha"]["mod"]>></span>)<span class="cha-prof"><<print $abilityScores["cha"]["prof"]>></span><hr><</if>><<if not tags().includes("nofooter")>><hr><img style="vertical-align: middle;" width=50px src="bloodstone images/icons/health potion.png"><<button "Potion">><<run setup.useHealthPotion()>><</button>> X <span class="potion-num">$potions.Potion</span> ,
\\
<img style="vertical-align: middle;" width=50px src="bloodstone images/icons/mana potion.png"><<button "Elixir">><<run setup.useManaPotion()>><</button>> X <span class="mana-potion-num">$potions.Elixir</span> ,
\\
<img style="vertical-align: middle;" width=50px src="bloodstone images/icons/fate potion.png"><<button "Quicksilver">><<run setup.useFatePotion()>><</button>> X <span class="fate-potion-num">$potions.Quicksilver</span>
\\
<<if $classChoice == "Bard">>, <<button "Inspire">><<run window.useInspiration()>><</button>> X <span class="mp-val"><<print $mp>></span>/<span class="maxmp-val"><<print $maxMP>></span><</if>>
\\
<hr><span class="inventory-stash">Inventory Here</span><</if>><<set $playerName = "Sel">>
<<set $classChoice to "Commoner">>
<<set $raceChoice to "Human">>
<<set $level = 1>>
<<set $xp = 0>>
<<set $tnl = 300>>
<<set $prevTnl = 0>>
<<set $armorClass = 9>>
<<set $hitDie = 6>>
<<set $hp = 4>>
<<set $maxHP = 4>>
<<set $mp = 5>>
<<set $maxMP = 5>>
<<set $abilityPoints = 27>>
<<set $abilityScores = {
"str": {
"score": 8,
"mod": -1,
"prof": "",
"bonus": 0
},
"dex": {
"score": 8,
"mod": -1,
"prof": "",
"bonus": 0
},
"con": {
"score": 8,
"mod": -1,
"prof": "",
"bonus": 0
},
"int": {
"score": 8,
"mod": -1,
"prof": "",
"bonus": 0
},
"wis": {
"score": 8,
"mod": -1,
"prof": "",
"bonus": 0
},
"cha": {
"score": 8,
"mod": -1,
"prof": "",
"bonus": 0
}
}>>
<<set $upgradeShopMain = {
"Weapon Improvement": {
"Base Cost": 300,
"Level": 1,
"Max Uses": 3,
"Increase": 1,
},
"Potion Potency": {
"Base Cost": 300,
"Level": 1,
"Max Uses": 3,
"Increase": 1,
},
"Elixir Potency": {
"Base Cost": 600,
"Level": 1,
"Max Uses": 3,
"Increase": 1,
},
"Proficiency Training": {
"Base Cost": 1500,
"Level": 1,
"Max Uses": 2,
"Increase": 1,
},
"Special Training (Str)": {
"Base Cost": 2000,
"Level": 1,
"Max Uses": 3,
"Increase": 1,
},
"Special Training (Dex)": {
"Base Cost": 2000,
"Level": 1,
"Max Uses": 3,
"Increase": 1,
},
"Special Training (Con)": {
"Base Cost": 2000,
"Level": 1,
"Max Uses": 3,
"Increase": 1,
},
"Special Training (Int)": {
"Base Cost": 2000,
"Level": 1,
"Max Uses": 3,
"Increase": 1,
},
"Special Training (Wis)": {
"Base Cost": 2000,
"Level": 1,
"Max Uses": 3,
"Increase": 1,
},
"Special Training (Cha)": {
"Base Cost": 2000,
"Level": 1,
"Max Uses": 3,
"Increase": 1 ,
},
}>>
<<set $profBonus = 2>>
<<set $spellcasting = false>>
<<set $attackStat = "str">>
<<set $attackMod = "">>
<<set $attackDie = 6>>
<<set $attackDieNum = 1>>
<<set $hasAdvantage = false>>
<<set $spellDie = 4>>
<<set $spellDieNum = 2>>
<<set $armorBonus = 0>>
<<set $skillBonus = 0>>
<<set $speakWithAnimals = false>>
<<set $gold = 5>>
<<set $potions = {
"Potion": 2,
"Elixir": 1,
"Quicksilver": 1
}>>
<<set $potionPotency = 6>>
<<set $elixirPotency = 4>>
<<set $inventory = {
"Clothes": "These protect little more than your modesty.",
"Pendant": "A gift from your parents."
}>>
<<set $pronouns = {
"He/Him": {
"he": "he",
"him": "him",
"his": "his",
"man": "man"
},
"She/Her": {
"he": "she",
"him": "her",
"his": "hers",
"man": "woman"
},
"They/Them": {
"he": "they",
"him": "them",
"his": "their",
"man": "person"
},
}>>
<<set $p ="He/Him">>
<<set $hubTownPassage = "Mining Town">>
<<set $sceneProgression = 0>>
<<set $dungeonFloor = 1>>
<<set $maxDungeonFloor = 1>>
<<set $allDungeonFloors = [
1,
2,
3,
4,
6,
7,
8,
9,
11,
12,
13,
14
];>>
<<set $cappedFloors = $allDungeonFloors.filter(floor => floor <= $maxDungeonFloor)>>
<<set $monsterName = "">><<run setup.fullRecovery()>><h1>ASSIGNING ABILITY SCORES</h1><em>Ability scores are perhaps the most fundamental aspect of your character's abilities and traits. Are they strong, fast, tough, or smart?
Your ability scores begin at 8 and receive a modifier increase for every 2 points put into a score.
When assigning scores, you can go as high as 15, but the last 2 values will cost you 2 points instead of 1, so choose wisely when assigning points into scores. You begin with 27.
A score of 10 is considered average.</em>
<<button "-">>
<<run setup.sellScore("str")>>
<<run setup.exitOnPointsSpent()>>
<</button>> <<button "+">>
<<run setup.buyScore("str")>>
<<run setup.exitOnPointsSpent()>>
<</button>> <span class="str-score"></span> (<span class="str-mod"></span>) STRENGTH: Warrior attacks and physical skills.
<<button "-">>
<<run setup.sellScore("dex")>>
<<run setup.exitOnPointsSpent()>>
<</button>> <<button "+">>
<<run setup.buyScore("dex")>>
<<run setup.exitOnPointsSpent()>>
<</button>> <span class="dex-score"></span> (<span class="dex-mod"></span>) DEXTERITY: Rogue attacks and dodging (like dodging traps).
<<button "-">>
<<run setup.sellScore("con")>>
<<run setup.exitOnPointsSpent()>>
<</button>> <<button "+">>
<<run setup.buyScore("con")>>
<<run setup.exitOnPointsSpent()>>
<</button>> <span class="con-score"></span> (<span class="con-mod"></span>) CONSTITUTION: Adds to HP (hit points), also skills of toughness.
<<button "-">>
<<run setup.sellScore("int")>>
<<run setup.exitOnPointsSpent()>>
<</button>> <<button "+">>
<<run setup.buyScore("int")>>
<<run setup.exitOnPointsSpent()>>
<</button>> <span class="int-score"></span> (<span class="int-mod"></span>) INTELLIGENCE: Mage attacks, knowledge skills, and disarming traps.
<<button "-">>
<<run setup.sellScore("wis")>>
<<run setup.exitOnPointsSpent()>>
<</button>> <<button "+">>
<<run setup.buyScore("wis")>>
<<run setup.exitOnPointsSpent()>>
<</button>> <span class="wis-score"></span> (<span class="wis-mod"></span>) WISDOM: Druid attacks, speaking with animals (Druids only), and intuition skills.
<<button "-">>
<<run setup.sellScore("cha")>>
<<run setup.exitOnPointsSpent()>>
<</button>> <<button "+">>
<<run setup.buyScore("cha")>>
<<run setup.exitOnPointsSpent()>>
<</button>> <span class="cha-score"></span> (<span class="cha-mod"></span>) CHARISMA: Bard attacks and social skills.
<strong>Ability Points: <span class="ability-points"><<print $abilityPoints>></span></strong>
<span class="hide-on-load">[[Character Info]]</span><<run setup.fullRecovery()>><h1>DESCRIPTIVE INFO</h1><em>This section handles all the special bits of character information that grant depth and special options. Review this section and choose the options that best fit your character build.</em>
<<link "What is your name?">>
<<set $playerName = prompt("What is your name?", "Sel")>>
<<replace "#player-name">>$playerName<</replace>>
<</link>>
Your name is <span id="player-name">$playerName</span>.
<h2>GENDER</h2><em>NPC's, bad guys, and monsters that can speak will need to know how to refer to you without knowing your name.
They may choose to use your race, but may also regard you by your gender.
How your character identifies may also serve to open up new conversation options.</em>
<<listbox "$p" autoselect>>
<<option "He/Him">>
<<option "She/Her">>
<<option "They/Them">>
<</listbox>>
<h2>RACE</h2><em>Same as with gender, your character's race may open up dialogue options.
Primarily, however, your race grants you ability score bonuses. Remember those from the previous passage? Choosing a race gives you even more bonuses.</em>
<ul><li>Human: +1 to all scores.</li>
<li>Elf: +2 Dex, +1 Wis</li>
<li>Dwarf: +2 Con, +1 Str</li>
<li>Halfling: +2 Cha, +1 Dex</li>
<li>Catfolk: +2 Dex, +1 Cha</li>
<li>Lizardfolk: +2 Con, +1 Str</li>
<li>Devilfolk: +2 Str, +1 Cha</li></ul>
<<listbox "$raceChoice" autoselect>>
<<option "Human">>
<<option "Elf">>
<<option "Dwarf">>
<<option "Halfling">>
<<option "Catfolk">>
<<option "Lizardfolk">>
<<option "Devilfolk">>
<</listbox>>
<h2>CLASS</h2><em>Your class grants you a number of mechanical benefits. Some affect dice rolls, while others open up special options not granted by other classes.
Each class has a specific attack score that adds its modifier to attack rolls and spells (if they have spells)</em>
<ul><li>Warrior (Str): +1 to Armor Class (AC) and highest HP.</li>
<li>Rogue (Dex): +2 Expertise in all Ability Checks.</li>
<li>Mage (Int): Spellcasting (Powerful), but low HP.</li>
<li>Druid (Wis): Spellcasting (Moderate) and speak with animals.</li>
<li>Bard (Cha): Spellcasting (Weak), but spells grant inspiration.</li></ul>
<<listbox "$classChoice" autoselect>>
<<option "Warrior">>
<<option "Rogue">>
<<option "Mage">>
<<option "Druid">>
<<option "Bard">>
<</listbox>>
<<button "Confirm?">>
<<run setup.updateInfo()>>
<<run setup.updateStats()>>
<<run setup.fullRecovery()>>
<<goto "Profs">>
<</button>><<if $hp > 0>><<run setup.hideOnLoad();>><<run setup.updateStats();>><<run setup.updateInventory();>><<run window.updateShopItems();>><</if>><h1>CHARACTER SUMMARY</h1><em>You've gone through the rigorous process of building your character from the ground up. Hopefully you like $pronouns[$p]["him"], because you'll be spending some time with the $pronouns[$p]["man"]. Regardless, here's a small summary of your character options ...</em>
<strong>NAME</strong>: $playerName.
<strong>RACE</strong>: $raceChoice.
<strong>CLASS</strong>: $classChoice.
Your pronouns are: $p. Also written as $pronouns[$p]["he"], $pronouns[$p]["him"], and $pronouns[$p]["man"] when referring to you by your gender itself.
Are you sure this is the character you want to build?
<<button "Yes">>
<<goto "Winding Road">>
<</button>> <<button "No, Start Over">>
<<if confirm("Are you sure you want to restart?")>>
<<run State.reset(); Engine.play("Start");>>
<<include "StoryInit">>
<</if>>
<</button>><h1><em>!IMPORTANT!</em></h1>
A C-RPG involves things like ability checks and dice rolls. Twine is also a unique engine capable of creating interactive fiction (IF) experiences.
If you are new to RPG's or interactive fiction in general, it is suggested you take the tutorial.
<<button "Take the Tutorial">>
<<goto "Tutorial">>
<</button>>
<<button "Skip">>
<<goto "Character Stats">>
<</button>><h1>PROFICIENCIES</h1><em>The system that many of this engine's rules refer to has a robust skill system, which has been simplified for this adventure by adding proficiencies to ability scores themselves.
If you want to do something that requires social skills, you roll a Charisma ability check and add a modifier, plus any proficiency bonus.
You may have proficiency in 2 ability scores.</em>
Because you are a $classChoice, your modifier for <<if $spellcasting == true>>spells and <</if>>attacks is $attackStat.
<strong>It is recommended that one of your proficiencies should be applied to your attack score</strong> <em>(but you may find other styles of play rewarding).</em>
<<button "-">>
<<run setup.removeProf("str")>>
<<run setup.exitOnProfsSpent()>>
<</button>> <<button "+">>
<<run setup.addProf("str")>>
<<run setup.exitOnProfsSpent()>>
<</button>> STRENGTH <span class="str-prof"><<print $abilityScores["str"]["prof"]>></span>
<<button "-">>
<<run setup.removeProf("dex")>>
<<run setup.exitOnProfsSpent()>>
<</button>> <<button "+">>
<<run setup.addProf("dex")>>
<<run setup.exitOnProfsSpent()>>
<</button>> DEXTERITY <span class="dex-prof"><<print $abilityScores["dex"]["prof"]>></span>
<<button "-">>
<<run setup.removeProf("con")>>
<<run setup.exitOnProfsSpent()>>
<</button>> <<button "+">>
<<run setup.addProf("con")>>
<<run setup.exitOnProfsSpent()>>
<</button>> CONSTITUTION <span class="con-prof"><<print $abilityScores["con"]["prof"]>></span>
<<button "-">>
<<run setup.removeProf("int")>>
<<run setup.exitOnProfsSpent()>>
<</button>> <<button "+">>
<<run setup.addProf("int")>>
<<run setup.exitOnProfsSpent()>>
<</button>> INTELLIGENCE <span class="int-prof"><<print $abilityScores["int"]["prof"]>></span>
<<button "-">>
<<run setup.removeProf("wis")>>
<<run setup.exitOnProfsSpent()>>
<</button>> <<button "+">>
<<run setup.addProf("wis")>>
<<run setup.exitOnProfsSpent()>>
<</button>> WISDOM <span class="wis-prof"><<print $abilityScores["wis"]["prof"]>></span>
<<button "-">>
<<run setup.removeProf("cha")>>
<<run setup.exitOnProfsSpent()>>
<</button>> <<button "+">>
<<run setup.addProf("cha")>>
<<run setup.exitOnProfsSpent()>>
<</button>> CHARISMA <span class="cha-prof"><<print $abilityScores["cha"]["prof"]>></span>
<span class="hide-on-load">[[Character Confirm]]</span><script>
generateDungeon();
</script><div id="dungeon-text"></div>
<div id="dungeon" style="white-space: pre; font-family: monospace;"></div>
<div class="directional-buttons">
<button onclick="movePlayer(0,-1)" class="up">↑</button>
<button onclick="movePlayer(-1,0)" class="left">←</button>
<button onclick="movePlayer(1,0)" class="right">→</button>
<button onclick="movePlayer(0,1)" class="down">↓</button>
</div>
<div id="combat" style="display:none; margin-top:10px;">
<strong>Combat!</strong><br>
<button onclick="attackMonster(window.playerDamageRoll(), false)">Attack</button> <button onclick="attackMonster(window.playerMagicDamageRoll(), true)" id="magicBtn">Magic</button>
</div><div id="trap" style="display:none; margin-top:10px;">
<strong>Trap!</strong><br>
<button onclick="disarmTrap(window.abilityCheckRoll('int'))">Disarm</button> <button onclick="evadeTrap(window.abilityCheckRoll('dex'))">Evade</button>
</div><div id="animal" style="display:none; margin-top:10px;">
<strong>Stray Animal!</strong><br>
<button onclick="petAnimal()">Pet Stray</button> <button onclick="leaveAnimal()">Let it Go</button> <button onclick="speakWithAnimal(window.abilityCheckRoll('wis'))" id="speakWithAnimalsBtn">Pet and Speak</button>
</div>
<h1>GAME OVER</h1><em>And you were never heard from again ...</em>
<img width=100px src="bloodstone images/icons/blood stone.png">
<<button "Return to Title">>
<<run State.reset(); Engine.play("Start");>>
<<include "StoryInit">>
<</button>><<set $hubTownPassage = "Mining Town">><<if visited() is 1>>You and Carmine make way into the washed up mining hamlet of Gravenmire. There are a handful of shoddy tin houses on either side of the road. Residents regard you both with an air of caution and mysticism.
Gravenmire is a rusty, spitbucket of a settlement. The houses are in disrepair and the dirt path that leads down to the mines bears sparse traffic. You may be the only adventurer to come through in the last month.
You're starting to believe that Carmine's reward may be your only means of acquiring coin in this corner of the isles.
A general store with a rotten wooden signpost stands directly across from the entrance to the town with a few more shops and an inn further down. An old human man wheels a carriage filled with driftwood up the road and past you, barely recognizing your presence.
Carmine places a hand on your shoulder. "I'll be in the town square handling some research business. If you ever need to talk to me, you can find me in the state's office."
She slips a piece of paper out of her purse. "Here," she says, placing the slip in your hand. "This is a pass to get into the mines. You'll need it to get past the guards."<<run window.addTrinket("Mine Pass","A writ issued from the states office of Gravenmire granting entry to the abandoned mines.");>>
And with that, Carmine wanders off.<<else>>You return to the town square in Gravenmire. The streets are fair, but the hamlet is anything but lively. You have some options on where to venture from here ...<</if>>
<<link "Inn">>
<<goto "MT Inn">>
<</link>>
<<link "Potion Shop">>
<<goto "MT Potion Shop">>
<</link>>
<<link "Supplies Shop">>
<<goto "MT Trinket Shop">>
<</link>>
<<link "Upgrade Shop">>
<<goto "MT Upgrade Shop">>
<</link>>
<<linkappend "Talk to Carmine">>
<<if $sceneProgression == 0>>
Carmine flags you down near the entrance to the state's office in Gravenmire.
"You won't believe it, but this place actually keeps records. I'll need to do some browsing to find what I'm looking for, but it's a start at least."
She pauses. "I have a feeling that the cultures and factions surrounding Gravenmire were much more lively prior to 5 years ago. Why don't you explore the mines for a bit. The floors beyond level 5 have been closed off permanently, so that's the deepest I suspect you'll need to delve to find something."<<elseif $sceneProgression == 1>>
Carmine flags you down by the state's office. Her arms are filled with musty ledgers.
"Did you find anything magical?" she asks.
<<linkappend "Tell her about the figure.">>
Carmine nods in thought. "I see. Well, that bodes ill. I'd heard of cult activity in Gravenmire's recent past, but I assumed that had all dried up with the silver. Maybe there's a connection. Why don't you go deeper? Maybe you'll find our new friend."<</linkappend>>
<<linkappend "Tell her about drill.">>
Carmine listens to what you have to say. "Interesting," she says. "This person must have been here before, possibly even worked in the mines, to have such knowledge of the artifice instrument. At any rate, the path beyond the fifth floor is opened. I suspect our friend is looking for something a bit deeper."<</linkappend>><<elseif $sceneProgression == 2>>
Carmine flags you down from the state's office. She has a giant book tightly wrapped in one arm. It's big enough that just holding it is throwing off her balance.
"You look worse for wear," she exclaims, nudging her glasses. "Did you find out anything about that person?"
<<linkappend "Tell her about the Ritual">>
She listens to your recount. "Green light, eh? Green's the color usually associated with spells in the necromancy domain. This person's part of a cult for certain."
She opens the comically-sized tome.
"See?" she says. "This settlement had some run-ins with a cult called the Earthen Maw, a necromancy cult that the capital dealt with a few years back. I thought they'd all been killed or captured. Most likely, our friend is trying to continue their work."<</linkappend>><<if $knowledge_summoningCircle == true>>
<<linkappend "Tell her about the summoning circle.">>
"I see," Carmine replies. "That's definitely a necromancy ritual for summoning skeletons. A few people must've died in the mines over the decades-long run. It's sad, but expected truth."
She pauses.
"Our friend must be getting desperate ... or close."<</linkappend>><</if>><<if $knowledge_bloodStone == true>>
<<linkappend "Tell her about the Blood Stone">>
Carmine's eyes perk up. "Blood Stone?! Did I hear myself correctly?" She clears her throat. "That's a highly dangerous magic item. You should be very careful, $playerName. Even being close to it can turn you to evil if you lack the willpower."<</linkappend>><</if>><<elseif $sceneProgression == 3>>
Carmine says scene 3 text.<</if>><<if $knowledge_spellRunes == true>>
<<linkappend "Show her the spell runes you recorded.">>
"Oh my!" she exclaims. "You're quite the recorder."
She pulls out a scroll from her pocket and begins scribbling down similar, but different sets of runes. The process takes several minutes, but you wait patiently.
Carmine finishes her scroll and hands it to you, nudging her glasses.
<<run window.addTrinket("Anti-Spell Scroll","May offer some protection against necromancy spells.");>>"Here, this scroll may offer some resistance to the necromancer's spells. Think of it as a spell absorber. It has glyphs specifically made to counter their own. I can't guarantee it'll work against everything, but for their spells specifically, it'll do the job."<</linkappend>><</if>><</linkappend>>
<<link "Go to Mines">>
<<set $dungeonExit = $hubTownPassage>>
<<goto "Dungeon Post">>
<</link>>
<<if $sceneProgression < 1>><<set $sceneProgression = 1>><<else>><<goto "InitDungeon">><</if>>You use the lift to set foot onto the fifth floor of the Gravenmire Mines. You step off the lift and saunter out into a clearing.
The air is still and a gentle hum of something deeper inside the darkness beckons you. It sounds like a piece of machinery, a rattling and grinding dust and rock. Faint whispers trail your senses.
<<linkappend "Someone else is here.">>
Cautiously, you make your way around an outcropping of rock and gravel tossed aside. In the distance, you catch the face of a hooded figure standing next to a drilling machine of unknown artifice.
<span id="option-1"><<linkappend "Listen in. (Wisdom DC 10)">>
<<if window.abilityCheckRoll("wis") >= 10>>
(Success) The figure sounds frustrated. You overheard them cursing and talking about some kind of stone.<<else>>
(Failure) The figure sounds frustrated, but that's all you can make out.<</if>><</linkappend>>
</span><span id="option-2"><<linkappend "Get a closer look. (Wisdom DC 10)">>
<<if window.abilityCheckRoll("wis") >= 10>>
(Success) The figure is too far to get a good look at, but you spy them holding a black book. The tome is thick with ruffled pages. You'd guess they're a mage of some kind.<<else>>
(Failure) The figure is too far to get a good look at. You watch and wait.<</if>><</linkappend>>
</span><<linkappend "Approach the figure">><<replace "#option-1">><</replace>><<replace "#option-2">><</replace>>
You approach the hooded figure stealthily. Your footsteps are difficult to mask while walking over gravel and stone, but you manage, or at least you think.
The machine they are using is some kind of drill. It's much too big to have been carried in here, so it's likely a remnant of the old mining days of Gravenmire. The grinding grows louder as you approach, which serves to aid your stealth.
The hooded figure raises a hand and chants words of an unknown language. The speech is deep and guttural, filling you with dread. In a flash of crimson, the wall bursts and the figure steps through.
<<linkappend "Investigate the area. (Intelligence DC 10)">>
<<if window.abilityCheckRoll("int") >= 10>>
(Success) You spot the drill and note that it was recently fueled and oiled. Machinery such as this requires special training to operate.<<else>>
(Failure) You find nothing of note.<</if>>
As you finish your inspection, you note the massive hole the drill and the figure caused together. The fifth floor of the mines are sealed, so this may be the only way deeper inside.
You peer inside and your eyes are met with only darkness. The figure is long departed, but you have some information to share with Carmine.
[[Return to Gravenmire|Mining Town]]
<</linkappend>>
<</linkappend>><</linkappend>><<button "Buy Potion">>
<<run window.buyPotion("Potion");>>
<</button>> Cost: <span class="potion-sale-num"></span>
<<button "Buy Elixir">>
<<run window.buyPotion("Elixir");>>
<</button>> Cost: <span class="elixir-sale-num"></span>
<<button "Buy Quicksilver">>
<<run window.buyPotion("Quicksilver");>>
<</button>> Cost: <span class="quicksilver-sale-num"></span><<button "Weapon Improvement + 1">>
<<run window.issueUpgrade("Weapon Improvement");>>
<</button>> X <span class="weapon-upgrade-level"></span> <em>(Improves Weapon Damage by 1)</em>
<<button "Potion Potency + 1">>
<<run window.issueUpgrade("Potion Potency");>>
<</button>> X <span class="potion-upgrade-level"></span> <em>(Improves potion potency by 1)</em>
<<button "Elixir Potency + 1">>
<<run window.issueUpgrade("Elixir Potency");>>
<</button>> X <span class="elixir-upgrade-level"></span> <em>(Improves elixir potency by 1)</em>
<<button "Proficiency + 1">>
<<run window.issueUpgrade("Proficiency Training");>>
<</button>> X <span class="prof-upgrade-level"></span> <em>(Improves proficiency bonus by 1)</em>
<<button "Strength + 1">>
<<run window.issueUpgrade("Special Training (Str)");>>
<</button>> X <span class="ability-str-upgrade-level"></span> <em>(Improves ability score by 1)</em>
<<button "Dexterity + 1">>
<<run window.issueUpgrade("Special Training (Dex)");>>
<</button>> X <span class="ability-dex-upgrade-level"></span> <em>(Improves ability score by 1)</em>
<<button "Constitution + 1">>
<<run window.issueUpgrade("Special Training (Con)");>>
<</button>> X <span class="ability-con-upgrade-level"></span> <em>(Improves ability score by 1)</em>
<<button "Intelligence + 1">>
<<run window.issueUpgrade("Special Training (Int)");>>
<</button>> X <span class="ability-int-upgrade-level"></span> <em>(Improves ability score by 1)</em>
<<button "Wisdom + 1">>
<<run window.issueUpgrade("Special Training (Wis)");>>
<</button>> X <span class="ability-wis-upgrade-level"></span> <em>(Improves ability score by 1)</em>
<<button "Charisma + 1">>
<<run window.issueUpgrade("Special Training (Cha)");>>
<</button>> X <span class="ability-cha-upgrade-level"></span> <em>(Improves ability score by 1)</em><<button "Buy a Room">>
<<run window.useInn()>>
<</button>> Cost: <span class="inn-sale"></span>
<span class="inn-desc">Rooms are available ...</span><<if visited() is 1>>You pass through a set of hanging beads and into "Gravenmire's General Goods", a general store near the entrance of the hamlet. The aroma of incense fills your nose and odd bottles and tinctures hang on the shelves behind an elf with thick glasses examining an alchemical ingredient.
She lifts her head and gestures to her potion supplies. "Ah, I see you have an interest in my potions. Take a look. If you want a sip, you need to pay for it."<<else>>
\\
You pass through the beaded gateway and into "Gravenmire's General Goods". Incense still hangs in the air. The elf woman raises her head and gestures to her potions.
"Back for more?" she asks. "You're quite the adventurer."<</if>>
<<include "Potion Shop">>
[[Leave Shop|Mining Town]]<<if visited() is 1>>You press open the rickety doors to the "Gravenmire Inn", a single-story establishment. A set of bedrolls lay strewn out over the communal hall. An older, dwarven gentleman, the inn keeper, is seen dozing off on a stool against a bar that hasn't seen use in ages.
He props up and regards you with some amusement.
"What can I do you for, my good $pronouns[$p]["man"]?" he says. "I should have a room if you want one. We don't get many travelers through these parts."<<else>>
\\
You press open the rickety doors to the "Gravenmire Inn". Glancing across the unused bar, you spot the older dwarven innkeeper with his nose in a book.
He pops up and gestures to the rooms.
"Care for a stay?" he says. "I'm sure I can find something."<</if>>
<<include "Inn">>
[[Leave Inn|Mining Town]]<<if visited() is 1>>You enter what may be the best kept shop of this hamlet. The walls are lacquered, and a fresh, oily scent fills the air. The sound of grinding stone echoes from the other side of the shop where you see an old, gray bearded dwarf sharpening a sword. His goggles protect his eyes from the sparks.
The dwarf eventually stops and stands up from his wheel to meet your gaze.
"Aye, there," he says. "An adventurer, eh? If it's something you need made better, I have a variety of books and upgrading tools for your weapons, potions, and skills."
He pauses.
"I ain't cheap, though. But if you got the gold, I got a better you around the corner."<<else>>
\\
You enter the upgrade shop and realize in hindsight that there was no legible sign. The old, gray bearded dwarf you met earlier is sitting across the shop inspecting a weapon with a careful eye. He notices you and sets the weapon down.
"Aye," he says. "Just let me know what you need. Training, a better blade? My prices aren't cheap, but they are fair."<</if>>
<<include "Upgrade Shop">>
[[Leave Shop|Mining Town]]Welcome to the prelude before your story begins in earnest.
Twine separates different passages via links. In a passage, you may need to click on links to reveal new story elements and options.
<<linkappend "Why not try it now?">>
See, isn't that neat? Twine supports a variety of link changes, such as completely replacing the link with the new text or executing any kind of command.
However, for ease of reading, the one you just clicked on will be the most common.
Let's try something different. How about a dice roll?
<<linkappend "Click here to roll a D20 (A 20-sided die).">>
<<set $tempRoll = setup.rollDice(20,1)>>You got a <<print $tempRoll>>! <<if $tempRoll > 10>>And that's better than the average!<</if>>
Many times, the dice rolling is done behind the scenes, but you'll also add character modifiers into your rolls, so your build will often make the difference between a success and failure.
<<linkappend "So, let's talk about the UI.">>
The info bits at the top are your statistics. You can keep track of your character's progress there.
There are 2 sections below the main text of any passage.
The very bottom is a list of all the mundane items you have in your inventory. Right now, you don't have much more than the clothes on your back.
You can mouse over an item and reveal its description as a tool tip in your browser.
<<linkappend "What about those potion buttons?">>
The section directly above your general inventory contains your potion belt ...
<img style="vertical-align: middle;" width=20px src="bloodstone images/icons/health potion.png">Potions: Restore HP when used.
<img style="vertical-align: middle;" width=20px src="bloodstone images/icons/mana potion.png">Elixirs: Restore MP when used.
<img style="vertical-align: middle;" width=20px src="bloodstone images/icons/fate potion.png">Quicksilver: Rare and expensive potions that give you advantage on your next roll.
<<linkappend "What's advantage?!">>
Advantage is a special condition granted by the Dungeon Master that lets you roll 2 dice instead of 1, keeping the higher roll.
Any attack roll or ability check rolls a D20 (20-sided die).
Rolling with advantage is almost like adding a +5 bonus to the result (If you roll a 10, you actually rolled a 15!).
This effect applies to attacks and other ability checks, but not damage rolls.
Okay, so you're probably ready to start making your character.
<<button "Build a Character">>
<<goto "Character Stats">>
<</button>>
<<button "Replay Tutorial">>
<<goto "Tutorial">>
<</button>>
<</linkappend>><</linkappend>><</linkappend>><</linkappend>><</linkappend>><h1>WINDING ROAD</h1>The Three Moon Isles are a small territory west of Crescent Cove, separated by a bit of ocean waves and nasty beasts that lurk beneath the watery depths. Dangers and pirates lurk on the horizon.
Your tale brings you to a tiny village not quite labeled on the map, near the base of the western Greyrock mountains, north of Apple Town. The hamlet goes by the name of Gravenmire, a small mining settlement with a silver vein that has all but dried up.
The people there have little idea exactly why the mines stopped producing metals, but rumor has it that dark magic played a part.
Your name is $playerName, $raceChoice adventurer traveling the roads looking for quest, coin, and a warm bed to pass the time away. The road to Gravenmire is a long one. The dirt kicks up at your feet as you saunter down a beaten path. Poorly kept fields run side by side along the road. The grass is patchy and worn, not by treading boots, but by lack of life.
<<linkappend "Can you sense the mana? (Wisdom DC 10)">><<if window.abilityCheckRoll("wis") >= 10>>
(Success) You feel a sense, not of unease, but of absence. There is little presence in this patch of land.<<else>>
(Failure) You feel lonely here, as if nobody is there to watch you, not even the insects.<</if>><</linkappend>>
Maybe this tiny hamlet has some coin to spare? Maybe not. It's worth a look at anyrate.
...
[[Something's not right|Noisy Disturbance]]<strong>Unique Encounter!</strong><div id="dungeon-text"></div><div id="combat" style="display:none; margin-top:10px;">
<strong>Combat!</strong><br>
<button onclick="attackUniqueMonster(window.playerDamageRoll(), false)">Attack</button> <button onclick="attackUniqueMonster(window.playerMagicDamageRoll(), true)" id="magicBtn">Magic</button>
</div><<linkreplace "Begin Encounter">><<include "Encounter">><<done>><<run window.spawnUniqueMonster("Skeleton", 20)>><</done>><span id="after-combat">
<<linkappend "Continue">>
Here is some extra text<</linkappend>></span><</linkreplace>>A woman's scream resonates around the bend of the road obscured by some shrubs.
<<linkappend "What's she saying? (Wisdom DC 10)">><<if window.abilityCheckRoll("wis") >= 10>>
(Success) There's a fight happening. She's yelling "Let go of that!".<<else>>
(Failure) There's too much commotion to tell for sure.<</if>><</linkappend>>
<<linkappend "Call out to her.">>
You ask if everything's okay, and she replies in kind, "If you're in a spot to help, I'd really appreciate it!"<</linkappend>>
<<link "Rush Around">>
<<set $sneakyEntry = false>>
<<goto "Save the Woman">><</link>>
<<link "Sneakily Approach">>
<<set $hasAdvantage = true>>
<<set $sneakyEntry = true>>
<<goto "Save the Woman">><</link>><<linkappend "Try for a skill? (Wisdom DC 10)">><<if window.abilityCheckRoll("wis") >= 10>>
(Success) Your action succeeds.<<else>>
(Failure) Your action fails.<</if>><</linkappend>><<if $sneakyEntry == true>>You patiently creep around the bend to see a more than finely dressed half-elven woman trying to pry her purse from a nasty little shrub. Her gloves are practically slipping from her fingers as she grasps against the shrub's miniature might. Neither seem to notice you yet.
(Advantage) Your next attack will have advantage.<<else>>You rush around the bend to encounter a half-elven woman, far more properly dressed than a villager from these parts would be, wrestling her purse from a mouthy shrub.<</if>>
<<linkreplace "Attack!">><<include "Encounter">><<done>><<run window.spawnUniqueMonster("Awakened Shrub", 1)>><</done>><span id="after-combat">
<<linkappend "Continue">>
The shrub withers into a husk before flopping to the soil.
The half-elf woman lies back on the road, heaving from having wrestled the thing. She regards you with a smile, then picks herself up and dusts off her blouse.
Now that you have a better look at her, the half-elf is fair skinned, with deep walnut hair that flows down mid-length. She sports a pair of round glasses, which she adjusts before extending a gloved hand. Her dress is soft and ornate. She's either rich or a traveler from the bigger city on some excursion.
"Well," she says. "Are you going to stop staring and shake my hand? It's not polite for a $pronouns[$p]["man"] not to introduce $pronouns[$p]["him"]self."
[[Shake her Hand|Introductions]]<</linkappend>></span><</linkreplace>>The two of you shake hands.
You introduce yourself as $playerName, $raceChoice $classChoice looking to make some coin along the road.
The woman introduces herself as Carmine, and she's been contracted by Apple Town to investigate the mines here.
"Rumor is that some kind of spell or cursed item caused the mines over there to dry up and there's been some blights on the apple orchards down south," she says. "Folks wanted me to look into it. I'm a talented mage, but I'm no dungeoneer. I think I may be in over my head."
<<linkappend "Can magic really spread that far underground?">>
She nods. "Well, I've never heard of a spell with that range, but magic offers the only explanation I can see. There's a lot of levels to the mines. Maybe someone stuck something down there."
She pauses, rifling into her purse and pulling out a scroll. "I've done a bit of research on the town. Apparently, the mines started showing signs about five years ago. I was going to ask the townsfolk if there were any strange persons coming through around then."<</linkappend>>
<<linkappend "Would you like some help?">>
"I'd be glad to have it," she says. "You seem capable, at least more than me. I'd love to compensate you."
She rifles through her purse. "I have a contract here somewhere. I can split the earnings with you. I have to pay the taxes on the whole, so maybe 80/20?"
<span id="option-1"><<linkappend "That sounds fair.">><<set $mainQuestReward = 100>><<replace "#option-2">><</replace>><<replace "#option-3">><</replace>>
\\
<<run $("#secret-link").wiki('[[Head to Gravenmire|Mining Town]]')>>
\\
Carmine accepts your offer. "Happy to work with you, $playerName!"<</linkappend>>
</span><span id="option-2"><<linkappend "I think 50/50 is more appropriate. (Charisma DC 10)">>
<<replace "#option-1">><</replace>><<replace "#option-3">><</replace>><<if window.abilityCheckRoll("cha") >= 10>>
\\
<<run $("#secret-link").wiki('[[Head to Gravenmire|Mining Town]]')>>
\\
<<set $mainQuestReward = 250>>(Success) Carmine nods in agreement. "Perhaps. I can work with that as long as you get the results I need."<<else>>
<<set $mainQuestReward = 100>><<run $("#secret-link").wiki('[[Head to Gravenmire|Mining Town]]')>>(Failure) Carmine shakes her head. "No, I can't stand to lose that much. 80/20 is more than fair. Besides, my butt is on the line if you fail to find whatever's causing the trouble."<</if>><</linkappend>>
</span><span id="option-3"><<linkappend "If anything, it should be the other way around. (Charisma DC 15)">>
\\
<<replace "#option-1">><</replace>><<replace "#option-2">><</replace>><<if window.abilityCheckRoll("cha") >= 15>>
\\
<<run $("#secret-link").wiki('[[Head to Gravenmire|Mining Town]]')>>
\\
<<set $mainQuestReward = 400>>(Success) Carmine hesitantly nods in agreement. "I can see the worth of a good dungeoneer. Just don't let me down. I have a lot riding on this."<<else>>
<<set $mainQuestReward = 100>><<run $("#secret-link").wiki('[[Head to Gravenmire|Mining Town]]')>>(Failure) Carmine stammers. "I'm offended you'd ask for that kind of cut. My offer is final. 80/20."<</if>><</linkappend>>
</span><span id="secret-link"></span><</linkappend>><<button "Stock Rope">>
<<run window.buyTrinket("Rope");>>
<</button>> Cost: <<print window.getTrinketCost("Rope");>>
<<button "Stock Torch">>
<<run window.buyTrinket("Torch");>>
<</button>> Cost: <<print window.getTrinketCost("Torch");>>
<<button "Stock Bedroll">>
<<run window.buyTrinket("Bedroll");>>
<</button>> Cost: <<print window.getTrinketCost("Bedroll");>>
<<button "Stock Rations">>
<<run window.buyTrinket("Rations");>>
<</button>> Cost: <<print window.getTrinketCost("Rations");>>
<<button "Stock Waterskin">>
<<run window.buyTrinket("Waterskin");>>
<</button>> Cost: <<print window.getTrinketCost("Waterskin");>>
<<button "Stock Lantern">>
<<run window.buyTrinket("Lantern");>>
<</button>> Cost: <<print window.getTrinketCost("Lantern");>>
<<button "Stock Oil Flask">>
<<run window.buyTrinket("Oil Flask");>>
<</button>> Cost: <<print window.getTrinketCost("Oil Flask");>><<if visited() is 1>>You tug open a thick door to "Sonny's Sundries", a quaint shop of adventuring gear and supplies. A sudden mildew musk assails you as you enter the shop. Items of every kind are loaded in boxes and crates. Some containers are placed on tables, while others sit on the rickety, hardwood floor.
A moustached human man tips his hat to you and gestures to the various boxes.
"Greetings," he says, taking a bow. "Pick your poison. If you want to know how much something is, it's all in here." As he says the last part, he points to his noggin.<<else>>
\\
You tug open the thick door to "Sonny's Sundries" and immediately are assailed by the odor of mildew.
As you glance around at the items packed into crates and bins, the moustached human across the store room waves at you.
"Greetings again," he says. "Take what you wish and I'll let you know the price."<</if>>
<<include "Trinket Shop">>
[[Leave Shop|Mining Town]]<<if $sceneProgression < 2>><<set $sceneProgression = 2>><<else>><<goto "InitDungeon">><</if>>You hop onto the lift down to the 10th floor. The descent is eerily calming, almost unnerving. Tiny blips of light make way on the floor below. The subtle shape of a circle is illuminated by sickly green candelabra flames. The same hooded figure you saw several floors back is standing near the circle, chanting some deeply guttural speech.
As the lift touches the ground, you step off and a massive, booming voice rushes in from every direction ...
"ARISE!!!"
A gust of air shakes you and throws off your balance. Due to the walls surrounding the site, you can no longer see the figure or the magic circle. The lights that once cast an eerie glow begin to dim until they lose their luster entirely.
You have two routes ...
<span id="option-1"><<linkappend "Try to find the site of the circle. (Wisdom DC 10)">><<replace "#option-2">><</replace>><<if window.abilityCheckRoll("wis") >= 10>><<set $undeadEncounterLocation = "Circle">>
(Success) You make your way, hugging the walls, until you find yourself upon the site the figure was using to cast their spell. It's a magic circle, green in color. You are ready when bony hands claw out from the soil.<<set $hasAdvantage = true>>
[[They Rise|Undead Encounter]]<<else>>
(Failure) You make your way, but the path is winding and it takes a while. As the trail grows cold, you hear the rumbling of earth and what sounds like digging. By the time you round the final corner and glimpse the sight of a green magic circle etched into the ground, a skeleton warrior slashes out at you.
[[They Rise|Undead Encounter]]<</if>><</linkappend>>
</span><span id="option-2"><<linkappend "Track down the figure. (Wisdom DC 15)">><<set $undeadEncounterLocation = "Lift">><<replace "#option-1">><</replace>><<if window.abilityCheckRoll("wis") >= 15>>
(Success) You ignore the circle for now, instead choosing to track the mage who set it up. Their footsteps echo softly through the mines, allowing you to track down their exact location.
You meet them at the lift to the next floor. The figure pauses, then turns to face you.
"I see I'm not the only one looking for the Blood Stone."<<set $knowledge_bloodStone = true>>
The figure pulls down their mask, revealing the face of a humanoid, their skin wrinkled, coarse and grey. Potmarks appear along their cheeks.
"You'd do best to leave this place," they say. "Magic affects us all in different ways. I must have it ..."
They pause. "But you can deal with my minion."
She hops on the lift before you can make a move and a bony claw swipes at you from behind.
[[A Skeleton Attacks|Undead Encounter]]<<else>>
(Failure) You ignore the circle for now, instead choosing to track the mage who set it up. Their footsteps echo softly through the mines, but the sounds of your own footsteps and the gnawing earth drown them out.
You meet the hooded mage at the lift to the next floor, but you are too late, as they've already begun their descent. You barely glimpse the figure as the lift vanishes into the dark.
Dim torchlight illuminates the area, but you don't have long to think on your failures before a bony hand swipes at you.
[[A Skeleton Attacks|Undead Encounter]]<</if>><</linkappend>></span><<if $sceneProgression < 3>><<set $sceneProgression = 3>><<else>><<goto "InitDungeon">><</if>>The lift that heads down to the 15th floor is rickety. It feels like the rope pulley could snap at any given moment. There's a reason the mines were closed off past the fifth floor.
You bide your time as the lift descends into the void. A soft chant of whispered curses lingers in the air. You can't help but shake the feeling that somebody wants you dead.
And then, a single word grips you tightly, uttered by the whims of a spell from across a great distance.
"JUMP!!"
You recognize the spell as 'Command', in which the caster utters a single word and the target must obey. It's a long way down. You feel your legs tense as the command takes hold.
<<linkappend "Save vs. Command (Wisdom DC 10)">><<if window.abilityCheckRoll("wis") >= 10>>
(Success) You force your legs down through sheer force of will. After a moment, the spell's effect passes and the lift reaches the ground.
[[Step off the Lift|Final Floor]]<<else>>
<<set $fallDamage = setup.rollDice(6,2)>><<set $hp -= $fallDamage>><<if $hp < 1>><<set $hp = 1>><</if>><<run setup.updateStats();>>(Failure) You try to force your legs down through sheer force of will, but it isn't enough. You rise to your feet and jump, tumbling through the air. You land with a crude duck and roll to soften the fall, but you end up taking some fall damage.<<set $rockyLanding = true>>
[[Pick Yourself Up|Final Floor]]<</if>><</linkappend>><<if window.hasTrinket("Anti-Spell Scroll");>>
<<linkappend "Pull out Anti-Spell Scroll (Wisdom DC 5)">><<if window.abilityCheckRoll("wis") >= 5>>
(Success) You pull out the scroll and raise it into the air. A magical harmony wisps out in strands of purple hue and you feel the strength of the command spell wane. It is enough for you to come to your senses and resist the urge to jump.
After a moment, the spell's effect passes and the lift reaches the ground.
[[Step off the Lift|Final Floor]]<<else>>
<<set $fallDamage = setup.rollDice(6,2)>><<set $hp -= $fallDamage>><<if $hp < 1>><<set $hp = 1>><</if>><<run setup.updateStats();>>(Failure) You hastily pull out the scroll and raise it into the air. A magical harmony wisps out in strands of purple hue and you feel the strength of the command spell wane. However, it is not enough. You still feel your legs rise as you stand tall and leap from the lift.
You tumble through the air, landing with a crude duck and roll to soften the fall, but you end up taking some fall damage.<<set $rockyLanding = true>>
[[Pick Yourself Up|Final Floor]]<</if>><</linkappend>><</if>>The angry claws of a dwarven skeleton reach out to you ...
<<linkreplace "Begin Encounter">><<include "Encounter">><<done>><<run window.spawnUniqueMonster("Skeleton", 8)>><</done>><span id="after-combat">
<<linkappend "Continue">>
The bones of the skeleton lie broken at your feet.
<<if $undeadEncounterLocation == "Circle">><<set $knowledge_summoningCircle = true>>You examine the magic circle, its runes fading in their illumination. The hooded mage is nowhere to be seen, but remnants of their casting are present here.
<<linkappend "Record whatever you can. (Intelligence DC 10)">><<if window.abilityCheckRoll("int") >= 10>>
<<set $knowledge_spellRunes = true>>(Success) You scribe down a portion of the ritual into a notebook. You figure you might be able to talk to Carmine about it and get some information.<<else>>
(Failure) The many arcane runes are too numerous to decipher. Your efforts are wasted as you frantically scribble down runes.<</if>><</linkappend>><<else>>You examine the lift. It will take some time before it comes back up again. By that time, the mage will be gone, but you have learned quite a few things in your endeavor.<<if $knowledge_bloodStone == true>>
They are seeking some kind of magical item they called a Blood Stone.<</if>><</if>>
Carmine will want to know more.
[[Return to Gravenmire|Mining Town]]<</linkappend>></span><</linkreplace>><<if $rockyLanding == true>>With much discomfort, you pick yourself up from the ground. Everything aches, but you can't stop now.
<</if>>This area of the mine is wide and open, with little to obscure your vision besides the ever-encroaching darkness. There are no machines, no humming of drills nor grinding of stone. A single rhythmic clang of a pickaxe clammers a short distance from here.
<<linkappend "Proceed">>
You make your way down the mine's loose corridors, keeping low to obscure yourself behind the various crates and tool implements in this down-to-earth dungeon of sorts. The resounding clack of the pickaxe grows ever louder until a great cracking snap.
"Yes! Yes, yes, yes! Come to me!!!!" the mage exclaims.
You perch behind a crate filled with digging tools, eyeing the mage. They're fishing through a large crate, a subtle red glow bathing their pustuled face.
<img width=100px src="bloodstone images/icons/blood stone.png">
The figure lifts a large ruby-red gemstone from the rubbish.
Its glow is mesmerising, radiant, divine ...
You shake your head.
The distance between you and the stone is far enough that it merely gives you the temptation. Even now, you feel drawn towards wanton murder and things much worse.
You can go about this numerous ways:
<span id="option-1"><<linkappend "The direct approach. Strike first.">><<replace "#option-2">><</replace>><<replace "#option-3">><</replace>>
Fortune favors the bold. You gain advantage on your next attack or ability check.<<set $hasAdvantage = true>><<set $necroHasStone = true>><<set $necroLevel = 20>>
[[Battle the Necromancer|Necromancer Boss]]<</linkappend>>
</span><span id="option-2"><<linkappend "Get that stone out of their hands.">><<replace "#option-1">><</replace>><<replace "#option-3">><</replace>>
You aim for the stone, with a sling. Stone against stone. You bide your time and wait until the figure raises their prize above their head. The hood of their robe slips down, revealing a scarred face of grayed skin and marks all around.
<<linkappend "Sling it! (Dexterity DC 15)">><<if window.abilityCheckRoll("dex") >= 15>>
<<set $necroHasStone = false>><<set $necroLevel = 20>>(Success) You strike true and manage to smack the stone from the Necromancer's palms. They hiss in reaction and move to cast a spell.
[[Battle the Necromancer|Necromancer Boss]]<<else>>
<<set $necroHasStone = true>><<set $necroLevel = 20>>(Failure) You do your best to strike true, but the mage is quick to spot your attempt. They grasp the stone tightly, then turn to face you.
[[Battle the Necromancer|Necromancer Boss]]<</if>><</linkappend>><</linkappend>>
</span><span id="option-3"><<linkappend "Deal with their spellbook.">><<replace "#option-1">><</replace>><<replace "#option-2">><</replace>>
You move into an advantageous position. The plan is to smack the spellbook from their belt with a good swing of your weapon. You wait until the necromancer raises the stone above their head. The hood of their robe slips down, revealing a scarred face of gray skin and pustules.
<<linkappend "Strike for the book! (Strength DC 15)">><<if window.abilityCheckRoll("str") >= 15>>
<<set $necroHasStone = true>><<set $necroLevel = 10>>(Success) You rush in and catch them off guard, swinging to knock the book from their belt. They turn to face you, ready to cast a spell, but the spell fizzles. The mage draws a ceremonial dagger and prepares to fight.
[[Battle the Necromancer|Necromancer Boss]]<<else>>
<<set $necroHasStone = true>><<set $necroLevel = 20>>(Failure) You rush in to catch them off guard, but to no avail. The necromancer sees your swing just as you make it, swerves to avoid your blow, and raises their hand to cast a spell in response.
[[Battle the Necromancer|Necromancer Boss]]<</if>><</linkappend>><</linkappend>></span><</linkappend>>You leap out from behind the crate and engage with the Necromancer.
<<linkreplace "Begin Encounter">><<include "Encounter">><<done>><<run window.spawnUniqueMonster("Necromancer", $necroLevel)>><</done>><span id="after-combat">
<<linkappend "Continue">>
With a final blow, you fell the dark mage. They fall to the ground, their blood running rubies into the soil of these forgotten mines.<<if $necroHasStone == true>>
<img width=100px src="bloodstone images/icons/blood stone.png">
[[Reach for the Stone|Risen Necromancer Boss]]<<else>>
<img width=100px src="bloodstone images/icons/blood stone.png">
The stone pulses with an awesome power. Its aura is incredible and you feel a prominent urge to grasp it. But you know better.
You cover the Blood Stone with several layers of rags to avoid touching it and make your way back through the Gravenmire Mines.
[[Return to Carmine|Epilogue]]<</if>><</linkappend>></span><</linkreplace>>You return to the town square in Gravenmire. The streets are worn and the residents have come out to see what you brought with you. A shimmering glow emits from the rags between your hands. It is a warm light, wild and untamed.
Carmine rushes out from the states office, dropping her scrolls on the ground and whipping up her purse.
"Quick!" she says. "Put it in here!"
<<linkappend "Hand her the Blood Stone">>
You hand off the stone and it falls into her purse, disappearing into a maelstrom-like void. You'd never seen her purse empty before.
"It's a bag of holding. I can't imagine you'd never noticed." She smiles. "Pocket dimensions are tough to break out of ... or into. I can take this the rest of the way back to the capital and assure."
Carmine pauses, looking at her purse. "So, this is the Blood Stone, huh? I never thought I'd lay eyes on something so dangerous."
<<linkappend "Will Gravenmire recover? What about Apple Town?">>
Carmine adjusts her glasses. "Well, I'm sad to say that rocks don't normally grow back, so the mines won't be back in business anytime soon. But the people here have likely been affected by the stone's aura for some time. I think they'll appreciate the peace."
She looks out to the main gate. "As for Apple Town, I think by next season, the issue will have gone away."
She gasps. "Oh, I almost forgot, how about that mage?! Did you get 'em?"
<<linkappend "The mage is dead.">>
"That's sad to hear. It's unfortunate to lose a life. This one may have been an apprentice. I should ask the capital to look into other sightings. There may be others."
Carmine clears her throat. "Anyway, here you are, as promised: $mainQuestReward Gold. Don't spend it all in one place!"
Carmine hands you a note worth $mainQuestReward Gold.<<run window.giveGOLD($mainQuestReward);>>
"Look, I'm a very busy woman, so I'll need to get going. My boots are tracking mud and I need a bath. Next time you're in the capital, you should stop by and say hi. I work in the mage's college."
...
And with that, the half-elf you saved from an awakened shrub picks up a ride on a carriage bound for Grey Rock Castle. She grows ever distant as she disappears past the main gate.
You look at the note in your hand. Can't cash it here. The nearest bank is south of here in Mill Stone.
[[Time to Head Out|Credits]]<</linkappend>><</linkappend>><</linkappend>><h1>CREDITS</h1><em>Thanks for playing this game!!!</em>
<strong>Lead Developer</strong>
Brett Sawyer
<strong>Playtesters</strong>
Ellie Logie
A. D. Grayson
<strong>Special Thanks</strong>
Scott Rhine
<<button "Return to Title">>
<<run State.reset(); Engine.play("Start");>>
<<include "StoryInit">>
<</button>><<set $cappedFloors = $allDungeonFloors.filter(floor => floor <= $maxDungeonFloor)>>
\\
<<if visited() is 1>>You approach the disheveled mines of Gravenmire. A single guardsman halts your progress with a raised spear.
"Stop right there, adventurer," he says. "These mines are off limits to everyone with a ..."
He glances at your slip. "Ah, right. You must be one of them folks the mayor spoke of."
He lowers his spear, allowing you to pass.
"A word of caution, adventurer ... these mines are dangerous. You can start on level 1. Going deeper will clear you access to more floors."
<strong>Select a Starting Floor</strong>
<<listbox "$dungeonFloor" autoselect>>
<<optionsfrom $cappedFloors>>
<</listbox>>
<<link "Descend via Lift">><<run window.setDungeonFloor($dungeonFloor);>><<goto "InitDungeon">><</link>><<else>>The guardsman nods at your entry and lowers his spear.
"Be careful, adventurer," he says.
<strong>Select a Starting Floor</strong>
<<listbox "$dungeonFloor" autoselect>>
<<optionsfrom $cappedFloors>>
<</listbox>>
<<link "Descend via Lift">><<run window.setDungeonFloor($dungeonFloor);>><<goto "InitDungeon">><</link>><</if>>
[[Return to the Square|Mining Town]]The stone pulses in the necromancer's hands. Their fingers tightly wrap the stone, clutching it like a precious keepsake. A violent gust of aura emits from the Blood Stone as the necromancer groans. Their jaw contorts and their legs snap as they rise once more, their deeds not yet finished ...
<img width=100px src="bloodstone images/icons/blood stone.png">
<<linkreplace "Begin Encounter">><<include "Encounter">><<done>><<run window.spawnUniqueMonster("Risen Necromancer", 15)>><</done>><span id="after-combat">
<<linkappend "Continue">>
The once living, now undead necromancer from a long-forgotten cult, collapses for the final time. Their body turns to ash and dissipates into aether.
You cover the Blood Stone with several layers of rags to avoid touching it and make your way back through the Gravenmire mines.
[[Return to Carmine|Epilogue]]<</linkappend>></span><</linkreplace>>