Your browser lacks required capabilities. Please upgrade it or switch to another to continue.
Loading…
<style>#posttop { display:none; }</style>
<div class="splash">
<img src="images/flowercrown.png">
<div class="splashtitle">hollowsheart</div>
<div class="splashflex">
<<if Save.autosave.ok() and Save.autosave.has()>><<link '<span>Resume game</span>'>><<script>>Save.autosave.load()<</script>><</link>><</if>>
<<link '<span>New game</span>' "ch1p1">><</link>>
<<link '<span>Load game</span>'>><<script>>UI.saves()<</script>><</link>>
</div>
</div><<set $imgurl = "compass">>
<<set $passageheader = "the wanderer">>
A low fog is rolling in over the valley as you make your approach. The sky above is dark and sunless, clouds heavy with the promise of rain.<br><br>
Your mount trudges forward without enthusiasm, head lowered and ears flattened against her skull. The ground is slippery underfoot, soft mud giving way beneath her feet, and she swings around every so often to regard you with a baleful yellow eye. <br><br>
You can't blame her. You don't often face conditions like this in…<br><br>
<div class="choice-table">
<<link '<div class="choice-option"><b>Background: The Silvercall Forest</b>The Silvercall forest teems with untamed life, restlessly testing the boundaries of their reality. You have lived long enough at the periphery of it to know when something is amiss.</div>' 'ch1p1a'>><<set $acuity += 2>><<set $journal.push('bg-silvercall')>><</link>>
<<link '<div class="choice-option"><b>Background: The Verdant Bay</b>Only the bold or foolish insist on staying where the sea sates its hunger with the bones of its travellers. Your time there has granted you a certain appetite for life seldom found elsewhere.</div>' 'ch1p1b'>><<set $daring += 2>><<set $journal.push('bg-verdantbay')>><</link>>
<<link '<div class="choice-option"><b>Background: The Howling Cliffs</b>The treacherous mountainside of the Howling Cliffs sing with the voices of the dead by night. Few choose to live at the foot of the mountain, and fewer still can brave their endless caverns and return in one piece.</div>' 'ch1p1c'>><<set $heart += 2>><<set $journal.push('bg-howlingcliffs')>><</link>>
</div><<set $imgurl = "compass">>
<<set $passageheader = "wyvern's eyes">>
<div class="choice-option nohov"><b>Origin: The Silvercall</b>The Silvercall forest teems with untamed life, restlessly testing the boundaries of their reality. You have lived long enough at the periphery of it to know when something is amiss.</div>
You have honed your blade against nebulous creatures born of aether and shadow, and trained your eye to spot a glimmer of something ghastly in the curve of a smile.<br><br>
<div class="updates"><span class="notif">You start with +2 to <b><<link 'Acuity' 'journal'>><</link>></b>.</span></div>
<<link '<div class="btnnext">continue</div>' 'ch1p2'>><</link>><<set $imgurl = "compass">>
<<set $passageheader = "stormchaser's spine">>
<div class="choice-option nohov"><b>Origin: The Verdant Bay</b>Only the bold or foolish insist on staying where the sea sates its hunger with the bones of its travellers. Your time there has granted you a certain appetite for life seldom found elsewhere.</div>
When lightning strikes, you make like the gulls and seek shelter under roof or rock. Adversity makes for strange bedfellows — or easy prey.<br><br>
<div class="updates"><span class="notif">You start with +2 to <b><<link 'Daring' 'journal'>><</link>></b>.</span></div>
<<link '<div class="btnnext">continue</div>' 'ch1p2'>><</link>><<set $imgurl = "compass">>
<<set $passageheader = "lionheart's legacy">>
<div class="choice-option nohov"><b>Origin: The Howling Cliffs</b>The treacherous mountainside of the Howling Cliffs sing with the voices of the dead by night. Few choose to live at the foot of the mountain, and fewer still can brave their endless caverns and return in one piece.</div>
The key to traversing the cliffs at night, you learn, is to sing with them. You add your voice to theirs as your tools clink against crystal. They are only lonely, after all.<br><br>
<div class="updates"><span class="notif">You start with +2 to <b><<link 'Heart' 'journal'>><</link>></b>.</span></div>
<<link '<div class="btnnext">continue</div>' 'ch1p2'>><</link>><<set $imgurl = "rabbits">>
<<set $passageheader = "correspondence">>
With a careful hand, you pry it open. The parchment emanates a strange heat, warm under your hand. The words are nothing you can understand, but you recognise them nonetheless — words from a dream-song, sung by your sibling. El had never been able to write them down. How is it that you know what you are looking at?<br><br>
<<set $inventory.push('letter')>>
<svg viewBox="0 0 900 50">
<symbol id="s-text">
<text text-anchor="middle" x="50%" y="80%">meet me by the river at dusk. </text>
</symbol>
<g class = "g-ants">
<use xlink:href="#s-text" class="text-copy"></use>
<use xlink:href="#s-text" class="text-copy"></use>
<use xlink:href="#s-text" class="text-copy"></use>
<use xlink:href="#s-text" class="text-copy"></use>
<use xlink:href="#s-text" class="text-copy"></use>
</g>
</svg>
<div class="updates"><span class="notif"><b><<link 'THE LETTER' 'inventory'>><</link>></b> added to inventory.</span>
</div>
<<link '<div class="btnnext">continue</div>' 'ch1p2'>><</link>><<set $passageheader = 'the journey onwards'>>
<<set $imgurl = 'compass'>>
You offer her a scratch on the shoulder and a murmured apology. If memory serves you right, the tavern's stables are warm and their beds blessedly soft — a nice and welcome change from nights on the road. Still, it <i>has</i> been a long time. Who's to say anything remains the same?<br><br>
Or, who's to say anything has changed?<br><br>
You certainly haven't.<br><br>
The dreambeast sidesteps a puddle with as much contempt as she can muster. She isn't a fan of the terrain, nor is she thrilled by the prospect of venturing further into the fog.<br><br>
The fog has reached you by now, its white, wispy arms folding you into a ghostly embrace. You loosen your grip on the reins and sink your hands into the fur of the dreambeast's ruff instead; she feels as warm as a fireplace.<br><br>
You remember when your sibling had first summoned one of these creatures. El had woken you up in the dead of night, clutching a smudge of something imprecise in their arms. You asked them what it was.<br><br>
"A dream from a dream," they replied, and they sounded as though they were still asleep.<br><br>
It wriggled in their grasp. You had named it, then, and given it a shape.<br><br>
Back in the present, you spy the dim green glow of aether-lamps in the distance. The town bids you a cold, silent welcome. The prodigal child, finally returning home.<br><br>
People like you aren't supposed to come back. Never like this; not wearing the same face, riding in with the fog. It's unheard of. But you aren't here for yourself — El had left you a letter.<br><br>
A letter, mind you, and a dozen more unanswered. They had vanished with little warning, leaving the <<if hasVisited("ch1p1a")>>Forest<<elseif hasVisited("ch1p1c")>>Cliffs<<else>>Bay<</if>> bereft of a bard and its people thoroughly confused.<br><br>
<i>Just up and left</i>, a fellow minstrel laments when you ask, <i>like they were never there.</i><br><br>
<<link '<div class="btnnext">continue</div>' 'ch1p3'>><</link>><<set $passageheader = 'of hearth and home'>>
<<set $imgurl = 'flowers2'>>
Rain begins to fall as soon as you reach the tavern.<br><br>
From the outside, the building is a dreary old thing. You can hear it groan from here, wooden beams almost bowing in the wind as you approach. It's been the subject of many a rebuilding effort throughout the years, you reckon, but no one's ever had the heart to properly tear it down and start anew.<br><br>
The dreambeast stalks off in search of a warm corner to curl up in as soon as you dismount, leaving you to enter the tavern alone. You warn her not to disturb the horses; she flicks her tail in response.<br><br>
To your relief, it is warmer on the inside, though a stubborn, cloying humidity hangs in the air. The tavernkeeper — a tall, broad-shouldered man with a mane of brown hair and a gnarled scar running from cheek to jaw — scarcely looks up as you approach.<br><br>
"What brings you here?" Ah, so he has noticed you.<br><br>
But he doesn't <i>recognise</i> you. Too much time has passed; you are little more than a blurry <i>something</i> in someone's story, dream, or memory. Perhaps if he had paid closer attention to his grandfather's tales, or listened more closely to the wailing of the winds, he might have thought you familiar. <br><br>
"Travel," you answer vaguely, an elbow carefully situated between dark stains on the countertop. A wooden bucket nearby begins to collect rainwater leaking from a crack in the roof. "Do you have a room available?"<br><br>
"One left. Been busy, with the storm coming in."<br><br>
The tavernkeeper accepts coin as payment and offers you a key, giving you directions to your room with as much accuracy one can possibly muster while continuing to work their way down of glasses that need cleaning.<br><br>
You thank him and head to your room, hoping that the roof holds up through the night.<br><br>
<<link '<div class="btnnext">continue</div>' 'ch1p4'>><</link>><span style="font-family:var(--serif);font-style:italic;">"Where the dream goes, I too, will follow."</span><br><br>
You run your fingers along the edges of your sibling's letter, the parchment already fraying into ragged strands. They have been like this for as long as you can remember, easily ensnared by whimsical imaginations. It is to be expected, of course, but El is impulsive even by your standards, more attuned to the nebulous tongue of visions than the world they inhabited.<br><br>
There are only two rules, that you remember. <i>Don't go into the fog alone. Don't come back.</i> These are warnings writ into your bones. And yet, you are here, because El is out there, so mired in the fog that even dreams cannot reach them.<br><br>
You slip the letter back into your bag. Come daybreak, the sun will pierce the fog and allow you to travel more freely.<br><br>
Until then, you rest.<br><br>
<<link '<div class="btnnext">continue</div>' 'ch1p5'>><<set $horror += 2>><</link>><<set $passageheader = 'storm in the night'>>
<<set $imgurl = 'moon2'>>
The storm wakes you. Or perhaps it is a nightmare, though it releases you from its grasp so swiftly that nothing more than a vague sense of discomfort remains.<br><br>
Outside, the rain pelts against the windows. It batters the walls, shrieks across the tiled roof. A droplet of water crawls along the ceiling board and lands squarely on your pillow.<br><br>
You sit up. It's cold. Unease gnaws at your heels, drives you into standing up abruptly. Another droplet falls behind you. <br><br>
Maybe it's the weather. Maybe it's knowing that you aren't really supposed to be here. Maybe it's the fact that this building knows your nature better than its keeper. Was that a face in the window? <br><br>
No, just lightning.<br><br>
<div class="updates"><span class="notif">You gain +2 <b><<link 'Horror'>><<dialog 'about: horror' 'inventorypopup'>>\
<span style="font-family:var(--serif);font-style:italic;">It is humming against your skin. What scares you more — that you do not understand, or that you do?</span> <br><br>
Horror is one of the four main attributes in the game. You can view your attributes at any time by looking at the [[journal|journal]]. <br><br>
A high Horror stat will result in a penalty to other statistics and may reduce the amount of choices the Wanderer has available. Be careful! If unaddressed, a high Horror stat may lead to your companions turning against you — if you don't raise your blade against them first.<br><br>
Certain interactions will raise the Horror stat, while others will reduce it. Manage this wisely.
<</dialog>><</link>></b>.</span></div>
<<link '<div class="btnnext">continue</div>' 'ch1p6'>><</link>>You can't rest like this. Drawing your robes closer around you, you venture back downstairs instead.<br><br>
The fire flickers dimly in the hearth. The tavernkeeper is still awake, poking stubbornly at the flames. He grimaces when he sees you, almost apologetic.<br><br>
"Worse than expected," he says. <br><br>
You nod politely in agreement, watching as the fire sputters and grows. Apparently satisfied, the tavernkeeper returns behind the counter. "Can I get you anything, while you're here? Could fix up something warm." <br><br>
<div class="choice-table">
<<link '<div class="choice-option"><b>Accept</b>Perhaps it will set you at ease.</div>' 'ch1p6a'>><<set $acuity += 2>><<set $horror -= 1>><</link>>
<<link '<div class="choice-option"><b>Decline</b>It\'\s a kind offer, but you doubt it will help.</div>' 'ch1p6b'>><<set $horror -= 1>><</link>>
</div><<set $passageheader = 'staving off the cold'>>
<<set $imgurl = 'flowers2'>>
He brings you a bowl of soup, warm and hearty. You sip at it restlessly. Your appetite isn't there, but the act of it soothes your nerves somewhat.<br><br>
<div class="updates"><span class="notif">You reduce <b>Horror</b> by 1.</span></div>
<<link '<div class="btnnext">continue</div>' 'ch1p7'>><</link>><<set $passageheader = 'staving off the cold'>>
<<set $imgurl = 'flowers2'>>
You stay by the hearth instead, hands buried deep in your pockets. If the tavernkeeper minds your restless pacing, he says nothing, just watches carefully until the warmth melts enough anxiety away that you finally take a seat.<br><br>
<div class="updates"><span class="notif">You reduce <b>Horror</b> by 1.</span></div>
<<link '<div class="btnnext">continue</div>' 'ch1p7'>><</link>><<set $passageheader = 'what the fox drags in'>>
<<set $imgurl = 'fox'>>
The tavern's door swings open without warning. <br><br>
Lightning renders the unexpected visitor a stark silhouette for a brief moment — a lean figure dressed in fine leathers and fabrics, a longbow across their back. A noble who fancies themself a hunter, you surmise, but of what? The only thing to chase out there is the storm itself.<br><br>
"How fortunate it is that your tavern was nearby, dear Keeper! I fear my horse may have considered throwing me off if I continued riding through the storm—" <br><br>
The noble pauses, their gaze flicking belatedly from the bemused tavernkeeper to you, surprised to see a guest awake at this hour. "Oh, where are my manners!"<br><br>
You find your hands clasped between dark gloves in a brief handshake. <br><br>
"Noah Foxborne," they say, flashing a sharp, bone-white smile. "A pleasure to meet you."<div id="container"><div id="navbar"><div id="navbarinner"><button id="navBtn">navigation.</button> </div></div>
<!-- The Modal -->
<div id="navModal" class="modal">
<!-- Modal content -->
<div class="modal-content">
<div class="modal-header">
<h2>navigation.</h2> <span class="close">×</span>
</div>
<div class="modal-body" data-passage="modalbody">
</div>
</div>
</div>
<div id="story">
<div id="posttop">
<div id="posttopinner" data-passage="posttopinner">
</div>
</div>
<div id="passages">
</div>
</div>
</div><<link 'journal' 'journal'>><</link>><br>
<<link 'inventory' 'inventory'>><</link>><br>
<<link 'settings'>><<run UI.settings()>><</link>><br>
<<link 'saves'>><<run UI.saves()>><</link>><br>
<<link 'go back'>><<run Engine.backward()>><</link>><div class="postav" @style="'background-image: URL(images/' + $imgurl + '.png)'"></div>
/*<<link '<div class="postuser">$passageheader</div>'>><<toggleclass "#posttop" "postscroll">><</link>>*/
<div class="postuser"><<link $passageheader>><<toggleclass "#posttop" "postscroll">><</link>></div>
/*<div class="postuser">$passageheader</div>*/
<div id="line2"></div><script>var myDiv = document.getElementById('story');
myDiv.scrollTop = 0;
</script><<updatecomtrait>>
<<getgraphpercents>>
<<set $imgurl = "book">>
<<set $passageheader = "journal">>
/* ================================
PLAYER NAME
================================ */
<<if $name == "">>
What use does a wanderer have for a name? <i>You have not yet chosen a name.</i>
<<else>>
They know you as $name.
<</if>>
<br><br>
/* ================================
JOURNAL ENTRIES
================================ */
/* ========= BACKGROUND ========= */
<<if $journal.includes('bg-silvercall')>>
<<link '<span class="notif">background: the silvercall forest</span>'>>
<<dialog 'background' 'inventorypopup'>>\
You lived by the Silvercall Forest for a while. <i>You start with a bonus to <b>Acuity</b></i>.<br><br>
The Silvercall forest teems with untamed life, restlessly testing the boundaries of their reality. You have lived long enough at the periphery of it to know when something is amiss.<br><br>
You have honed your blade against nebulous creatures born of aether and shadow, and trained your eye to spot a glimmer of something ghastly in the curve of a smile.
<</dialog>>
<</link>>
<<elseif $journal.includes('bg-howlingcliffs')>>
<<link '<span class="notif">background: the howling cliffs</span>'>>
<<dialog 'background' 'inventorypopup'>>\
You lived by the Howling Cliffs for a while. <i>You start with a bonus to <b>Heart</b></i>.<br><br>
The treacherous mountainside of the Howling Cliffs sing with the voices of the dead by night. Few choose to live at the foot of the mountain, and fewer still can brave their endless caverns and return in one piece.<br><br>
The key to traversing the cliffs at night, you learn, is to sing with them. You add your voice to theirs as your tools clink against crystal. They are only lonely, after all.
<</dialog>>
<</link>>
<<elseif $journal.includes('bg-verdantbay')>>
<<link '<span class="notif">background: the verdant bay</span>'>>
<<dialog 'background' 'inventorypopup'>>\
You lived by the Verdant Bay for a while. <i>You start with a bonus to <b>Daring</b></i>.<br><br>
Only the bold or foolish insist on staying where the sea sates its hunger with the bones of its travellers. Your time there has granted you a certain appetite for life seldom found elsewhere.<br><br>
When lightning strikes, you make like the gulls and seek shelter under roof or rock. Adversity makes for strange bedfellows — or easy prey.
<</dialog>>
<</link>>
<<else>>
You have no notable journal entries. <i>The road ahead beckons.</i>
<</if>><br><br>
/* ========= MORE JOURNAL ENTRIES ========= */
<<if $journal.includes('entry1')>>
stuff goes here.
<<else>>
Continue on your journey to unlock more entries. <i>The road ahead beckons.</i>
<</if>>
<br><br>
/* ================================
GAME STATISTICS
================================ */
<div id="profstats">
<<= '<div class="profstatflex"><b>ACUITY</b> <div class="bar"><div class="barfill" style="width: ' + $acuitygraph + '%;"></div></div></div>' >>
<<= '<div class="profstatflex"><b>DARING</b> <div class="bar"><div class="barfill" style="width: ' + $daringgraph + '%;"></div></div></div>' >>
<<= '<div class="profstatflex"><b>HEART</b> <div class="bar"><div class="barfill" style="width: ' + $heartgraph + '%;"></div></div></div>' >>
<<if $horror >= 50>>
<<= '<div class="profstatflex horrorgraph"><b>HORROR</b> <div class="bar"><div class="barfill" style="width: ' + $horror + '%;"></div></div></div>' >>
<<else>>
<<= '<div class="profstatflex lowhorrorgraph"><b>HORROR</b> <div class="bar"><div class="barfill" style="width: ' + $horror + '%;"></div></div></div>' >>
<</if>>
</div>
<<link '<div class="btnreturn">return</div>' $return>><</link>><<set $imgurl = "dice">>
<<set $passageheader = "inventory">>
<<if $inventory.includes('letter')>>
<<link '<span class="notif">a letter sealed with crimson wax.</span>'>>
<<dialog 'you reach into your bag.' 'inventorypopup'>>\
the letter is short and written in familiar, shifting glyphs.<br><br>
<div class="glyph">meet me by the river at dusk. i suspect you have questions, and i believe i may have answers.</div><br>
you can read it, though only if you do not think too closely. <br><br>
<i>meet me by the river at dusk,</i> it reads. <i>i suspect you have questions, and i believe i may have answers.</i>
<</dialog>>
<</link>>
<<else>>
you are not carrying anything of note.
<</if>>
<<link '<div class="btnreturn">return</div>' $return>><</link>><<set $imgurl = "rabbits">>
<<set $passageheader = "header">>
<<set $inventory = []>>
<<set $journal = []>>
<<set $horror = 1>>
<<set $acuity = 5>>
<<set $daring = 5>>
<<set $heart = 5>>
<<set $comtrait = "unknown">>
<<set $highstat = 5>>
<<set $name = "">>
<<set $acuitygraph = 5>>
<<set $daringgraph = 5>>
<<set $heartgraph = 5>><<widget "updatecomtrait">>
<<set _comtraitarray to [ ["acuity",$acuity], ["daring",$daring], ["heart",$heart] ]>>
<<set _comtraithighest = $acuity>>
<<set _comtraithighname = "acuity">>
<<for _i = 0; _i lt _comtraitarray.length; _i++>>
<<if _comtraitarray[_i][1] >= _comtraithighest>>
<<set _comtraithighest = _comtraitarray[_i][1]>>
<<set _comtraithighname = _comtraitarray[_i][0]>>
<</if>>
<</for>>
<<set $highstat = _comtraithighest>>
<<set $comtrait = _comtraithighname>>
<<unset _comtraitarray>>
<<unset _comtraithighest>>
<</widget>>
<<widget "getgraphpercents">>
<<set $acuitygraph = ($acuity/$highstat)*100>>
<<set $daringgraph = ($daring/$highstat)*100>>
<<set $heartgraph = ($heart/$highstat)*100>>
<</widget>>