<<gg>> I am $name, King of Dreonnis, a sovereign who once believed in the strength of the sword and the steadfastness of his people. My kingdom stood at the crossroads of lands and trade, rich and proud, surrounded by oak forests and endless fields. The towers of our castles pierced the sky like lances thrust into the heavens, and our walls were said to be unbreakable. We lived in the certainty that no power could ever bring us low.
But behind that pride, fear always lingered.
To the east rose another realm—Kardest. A cruel land, where stones are blacker than coal, where the very winds smell of smoke and ash, and where men bow only to strength, not to law. Their king was Aravel, a man without a heart, born of war, in whose veins nothing flowed but cold iron. His people did not sow, they did not build; they only plundered and burned. Their cavalry raided neighbors, and villages disappeared as though erased from the world by the shadow of his banners.
For years we watched him, fortified our borders, gathered taxes, built new walls. Yet when Kardest finally moved, we discovered the bitter truth: walls are only stone, and stone can be broken.
<</gg>>
<br><br><br><br>
<<gg>>
The first tidings of invasion came in the early spring. At first, villages on the frontier were razed. Then, entire towns were burned to the ground. Prisoners were sent back mutilated—tongues torn out, eyes gouged—so they might serve as living omens of horror. Still, we believed we could endure. I raised my armies, and thousands of knights and peasants marched beneath my banner. They looked upon me with hope, as if I were a shield to turn back the black tide.
We fought. By the gods, we fought until breath itself betrayed us. The fields of Dreonnis became graveyards. Our spears splintered, shields shattered, armor turned into coffins. Yet still they came—again and again—like waves crashing against rock.
The capital endured for a month. Hunger gnawed at the people, rats became food, the water from our wells turned foul. And still, the walls stood.
Aravel knew he could not break us by strength alone. So he found the one weapon stronger than stone—treachery. One of my own lords, whose very name I will curse in the afterlife, opened a hidden gate in the night. And at the hour when we thought darkness had brought a moment’s reprieve, the black banners of Kardest rose over my towers.
<</gg>>
<br><br><br><br>
<<gg>>
I remember the smoke, the screams, the clash of steel, the weeping of women and the shrieks of children. I remember my knights dying one by one, holding the last roads to the palace. I remember the flames devouring roofs and the laughter of the enemy echoing through the streets as though the city itself were their banquet.
I myself took up my sword, for the last time in the name of Dreonnis, and fought until my arms were little more than bleeding wounds and my vision drowned in blood. But the sword was struck from my hand, I was cast down, shackled in chains, and dragged to the square.
And then I understood—death would have been a gift. But Aravel was not a man who dealt in gifts. He dealt in spectacles. <br> <br>
<</gg>>
<br><br><br><br>
<<gg>>
They dragged me through the streets like carrion. My crown was gone, my armor shattered, my garments torn and soaked in blood and filth. Once, the people of Dreonnis had knelt before me in reverence—now they watched from the shadows of burning houses, their eyes hollow with despair. Some wept. Others turned away, unable to bear the sight of their fallen king.
At the center of the square they threw me down upon the stones. Shackles bit into my wrists and ankles, the cold iron tearing skin already raw from battle. They made me kneel, though my legs shook with weakness.
<</gg>>
<br><br><br><br>
<<gg>>
Then came Aravel.
He rode at the head of his host, clad in blackened steel, his banner trailing behind him like the wing of some carrion bird. He dismounted slowly, savoring the silence that spread like poison through the crowd.
I had imagined him many times during the war—a brute, a savage beast. But no. He was worse. His eyes were calm, his voice measured, his presence deliberate. This was not a monster ruled by rage, but a man who wielded cruelty as a craftsman wields a blade.
<</gg>>
<br><br><br><br>
<<gg>>
“Behold,” he said, his words carrying across the square, “the mighty King of Dreonnis. Look well upon him, for this is what becomes of pride when it stands against Kardest.”
The soldiers jeered, spitting at me, striking me with gauntleted fists. My vision blurred, but I forced myself to meet his gaze. I thought to spit back in defiance, to curse him. But before I could speak, one of his men struck me across the mouth with the hilt of a sword, splitting my lip and filling my mouth with blood. The taste was hot, metallic, humiliating.
Aravel crouched before me, his face level with mine. His breath smelled of wine and ashes.
“You will not die,” he whispered, so low that only I could hear. “No… death would make you a martyr. I will make you something worse. You will live, and your people will see what remains of their king when Kardest is finished with him.”
He rose, and with a signal, the torment began.
<</gg>>
<br><br><br><br>
<<gg>>
They dragged me through the filth of my own city, parading me before the starving, beaten citizens. Children were made to laugh at me. Old women spat curses. My own knights—those who yet lived—were forced to watch as I was stripped of dignity piece by piece. And when the spectacle grew dull, they bound me in chains upon the steps of my ruined palace, leaving me to the cold and the scorn of the crowd.
Hours turned into days. They gave me no water, save for what was poured into the mud at my feet. Food came in scraps—molded bread, gnawed bones tossed like scraps for a dog. Sleep was stolen by the boots and fists of passing soldiers who found amusement in tormenting the “fallen king.”
And always, above it all, I felt Aravel’s eyes upon me. Patient. Calculating. As if every humiliation, every lash, every drop of spit was not the chaos of soldiers but a design—his design.
<br><br>
<</gg>>
<br><br><br><br>
<<gg>>
Days bled into nights, and nights into something darker still. I was no longer King Edmar of Dreonnis. To them, I was nothing more than a spectacle.
They made a theater of my suffering. Each morning, soldiers dragged me from whatever pit of exhaustion I had collapsed into, chaining me upright in the square. Townsfolk were forced to gather. Some came in silence, heads bowed in shame; others, broken by fear and hunger, mocked me at their captors’ command.
Aravel sat upon a dais, draped in banners of black and crimson, as though presiding over a festival. Only this was no celebration—it was the slow dissection of a man’s dignity.
<</gg>>
<br><br><br><br>
<<gg>>
They crowned me with iron, a crude circlet hammered with jagged edges. Each time it was pressed onto my skull, fresh rivulets of blood traced down my face, mingling with the dirt. They called it the Crown of Shame. When I faltered beneath its weight, the crowd was ordered to laugh.
My meals were tossed to me like scraps to a dog. Molded bread, bones stripped of flesh. Once, they brought a bucket of swill—rotting scraps, crawling with maggots—and commanded me to eat it before all. I hesitated, and a soldier’s lash tore open my back until the blood mingled with filth. And so I ate, choking down every mouthful to the roar of laughter.
Water, when they gave it, was poured into the dust at my feet. I licked mud like an animal, my lips cracked, my tongue swollen. Soldiers found joy in kicking it away just as I bent low to drink.
<</gg>>
<br><br><br><br>
<<gg>>
At night they left me shackled in the open air, the cold gnawing at my bones. Sleep came in broken moments, shattered by boots striking ribs, or stones hurled by those too afraid to defy Aravel’s will.
But the worst was his voice.
Aravel did not always strike, nor shout. He would stand before me, calm, his words cold as winter. “Do you hear them, Edmar? Your people laugh at you. They spit upon you. What king has subjects who do not weep for him?” He leaned close, his shadow consuming me. “You are mine. Every gasp, every tear, every wound—you belong to me now.”
And so he wore me down. Not only my body, but my spirit. He wanted me hollow. He wanted me broken, so that when he discarded me, I would be less than nothing.
<</gg>>
<br><br><br><br>
<<gg>>
At last, when I had become too frail to entertain them further, they dragged me through the streets one final time. My body was gaunt, my face hollowed, my beard matted with blood and grime. I no longer resembled a king, or even a man—only a shadow.
With a soldier’s laugh, they tore the rusted shackles from my wrists and cast me into the gutter. Children threw stones. Men spat. Women turned away.
No one saw a sovereign in those broken rags. I was refuse, cast aside like a shattered toy.
<</gg>>
<br><br><br><br>
<<gg>>
I crawled, limbs trembling, through the filth of streets slick with ash and sewage. At last, I found a grate wrenched open, a hole descending into the underbelly of the city. The stench was unbearable, but it was darker there, quieter. Forgotten.
Down in the sewers, among the rats and dripping water, I found my throne: a rotting scrap of cloth, sodden and reeking, abandoned in the slime. I wrapped it around myself as though it were royal mantle, shivered in the damp, and listened to the steady drip of water echoing in the tunnels.
There, in the bowels of the city, discarded and broken, I lay still.
But in the silence, hatred burned.
<</gg>>
<br><br>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Try to wake up" Sewers>><</button>>
</span>
</div>
</div>
<<set $name to "Edmar">>
<<set $rank = 0>>
<<set $playerXP = 0>>
<<set $SytoglasInfluence = 1>>
<<set $IronjawInfluence = 1>>
<<set $TrilikInfluence = 1>>
<<set $SerellaInfluence = 1>>
<<set $InkfallInfluence = 1>>
<<set $RaveneyeInfluence = 1>>
<<set $MiraInfluence = 1>>
<<set $GuardsNo to false>>
<<set $GuardTalk to false>>
<<set $SmuglerSpoken to false>>
<<set $influenceFind to false>>
<<set $marisSex to false>>
<<set $churchInfo to false>>
<<set $churchRitual to false>>
<<set $masksRitual to false>>
<<set $forgedaughter = 0>>
<<set $prisonCheck to false>>
<<set $LabelSytoglasInfluence = $SytoglasInfluence * 100>>
<<set $LabelIronjawInfluence = $IronjawInfluence * 100>>
<<set $LabelTrilikInfluence = $TrilikInfluence * 100>>
<<set $LabelSerellaInfluence = $SerellaInfluence * 100>>
<<set $LabelInkfallInfluence = $InkfallInfluence * 100>>
<<set $LabelRaveneyeInfluence = $RaveneyeInfluence * 100>>
<<set $LabelMiraInfluence = $MiraInfluence * 100>>
<<set $treeChopProgress = 0>>
<<newcycle 'time' 1 1 suspend>>
<<phase 'daytime' 'nighttime'>>
<</newcycle>>
<<newcycle 'weekdays' 1 1 suspend>>
<<phase 'Sunday' 'Monday'>>
<<phase 'Tuesday' 'Wednesday'>>
<<phase 'Thursday' 'Friday' 'Saturday'>>
<</newcycle>>
<<set $forestXp to $forestXpNow / $neededForestXp>>
<<set $neededForestXp to $currentForestLvlXp >>
<<character 'gg' '$name' 'images/characters/maincharacter.jfif'>>
<<character 'smuggler' 'Smuggler' 'images/characters/Smugler.jpg'>>
<<character 'maris' 'Lady Maris' 'images/characters/maris.jpg'>>
<<character 'priest' 'Priestess' 'images/characters/priestess.jpg'>>
<<character 'cultist' 'Cultist' 'images/characters/ordermember.jpg'>>
<<character 'gg1' '$name' 'images/characters/maincharacterorder.jpg'>>
<<character 'cultist1' 'Female cultist' 'images/characters/ordermember1.jfif'>>
<<character 'dessil' 'Dessil The Alchemist' 'images/characters/dessil2.jpg'>>
<<character 'olrik' 'Olrik Chief Judge' 'images/characters/olrik.jfif'>>
<<character 'madam' 'Madam Isolde' 'images/characters/Isolde.jpg'>>
<<character 'ellin' 'Ellin' 'images/characters/Ellin.jpg'>>
<<character 'blacksmith' 'Blacksmith' 'images/characters/smith.jpg'>>
<<set $wealthProgress = Math.floor(($gold / $wealthNeeded) * 100)>>
<<set $xpProgress = Math.floor(($playerXP / $playerNeededXp) * 100)>>
<<newmeter "forestXp">>
<<colors "#444c5c" "#444c5c">> <!-- full / empty -->
<<sizing 100% 1rem>> <!-- width / height -->
<<animation 400ms swing>>
<<label " XP : $forestXp / $forestryNeededXp" 'black' center>>
<</newmeter>>
<<newmeter "miningXp">>
<<colors "#444c5c" "#444c5c">> <!-- full / empty -->
<<sizing 100% 1rem>> <!-- width / height -->
<<animation 400ms swing>>
<<label " XP : $miningXp / $miningNeededXp" 'black' center>>
<</newmeter>>
<<newmeter "moneyXP">>
<<colors "#ffbf00" "#ffcf40">> <!-- full / empty -->
<<sizing 100% 1rem>> <!-- width / height -->
<<animation 400ms swing>>
<</newmeter>>
<<newmeter "playerXP">>
<<colors "#444c5c" "#444c5c">> <!-- full / empty -->
<<sizing 100% 1rem>> <!-- width / height -->
<<animation 400ms swing>>
<</newmeter>>
<<newmeter "craftingXp">>
<<colors "#444c5c" "#444c5c">> <!-- full / empty -->
<<sizing 100% 1rem>> <!-- width / height -->
<<animation 400ms swing>>
<</newmeter>>
<<newmeter "SytoglasInf">>
<<colors "#444c5c" "#444c5c">> <!-- full / empty -->
<<sizing 100% 1rem>> <!-- width / height -->
<<animation 400ms swing>>
<<label "$LabelSytoglasInfluence %" 'black' center>>
<</newmeter>>
<<newmeter "IronjawInf">>
<<colors "#444c5c" "#444c5c">> <!-- full / empty -->
<<sizing 100% 1rem>> <!-- width / height -->
<<animation 400ms swing>>
<<label "$LabelIronjawInfluence %" 'black' center>>
<</newmeter>>
<<newmeter "TrilikInf">>
<<colors "#444c5c" "#444c5c">> <!-- full / empty -->
<<sizing 100% 1rem>> <!-- width / height -->
<<animation 400ms swing>>
<<label "$LabelTrilikInfluence %" 'black' center>>
<</newmeter>>
<<newmeter "SerellaInf">>
<<colors "#444c5c" "#444c5c">> <!-- full / empty -->
<<sizing 100% 1rem>> <!-- width / height -->
<<animation 400ms swing>>
<<label "$LabelSerellaInfluence %" 'black' center>>
<</newmeter>>
<<newmeter "InkfallInf">>
<<colors "#444c5c" "#444c5c">> <!-- full / empty -->
<<sizing 100% 1rem>> <!-- width / height -->
<<animation 400ms swing>>
<<label "$LabelInkfallInfluence %" 'black' center>>
<</newmeter>>
<<newmeter "RaveneyeInf">>
<<colors "#444c5c" "#444c5c">> <!-- full / empty -->
<<sizing 100% 1rem>> <!-- width / height -->
<<animation 400ms swing>>
<<label "$LabelRaveneyeInfluence %" 'black' center>>
<</newmeter>>
<<newmeter "MiraInf">>
<<colors "#444c5c" "#444c5c">> <!-- full / empty -->
<<sizing 100% 1rem>> <!-- width / height -->
<<animation 400ms swing>>
<<label "$LabelMiraInfluence %" 'black' center>>
<</newmeter>>
///math
<<set $forestLevel = 1>>
<<set $forestXp = 0>>
<<set $forestryNeededXp = Math.floor(100 * Math.pow(1.5, $forestLevel - 1))>>
<<set $miningLevel = 1>>
<<set $miningXp = 0>>
<<set $miningNeededXp = Math.floor(100 * Math.pow(1.5, $miningLevel - 1))>>
<<set $playerNeededXp = Math.floor(100 * Math.pow(1.7, $rank - 1))>>
<<set $collected = {}>>
<<set $rankNames to [
"Slave","Beggar","Servant","Citizen","Merchant",
"Noble","Lord","Baron","Duke","King"
]>>
<<set $rankGoldReq to [0, 50, 100, 300, 800, 2000, 5000, 10000, 20000, 50000]>>
<<set $rankXpReq to [0, 100, 400, 800, 1500, 3000, 6000, 12000, 25000, 50000]>>
// Инициализация уровня крафтинга
<<set $craftingLevel to 1>>
<<set $craftingXp to 0>>
<<set $craftingNeededXp to 100>>
// Создание предметов древесины
<<newinv $materials>>
// Инвентарь для крафченых предметов
<<newinv $tools>>
// Рецепты крафтинга (структура: название -> требования и результат)
<<if !$recipes>>
<<set $recipes = new Map([
["Copper axe", { ash: 15, copper: 12 }],
["Iron axe", { beech: 3, iron: 1 }],
["Steel axe", { maple: 20, steel: 5 }],
["Gold axe", { ironwood: 25, gold: 20 }],
["Mithril axe", { ebony: 30, mithril: 25 }],
["Adamantite axe", { silent: 40, adamantite: 30 }],
["Unique key", { key_recipe: 1, iron: 4 }],
["Stone pickaxe", { oak: 15, stone: 10 }],
["Copper pickaxe", { ash: 10, copper: 8 }],
["Iron pickaxe", { beech: 15, iron: 12 }],
["Silver pickaxe", { maple: 20, silver: 15 }],
["Gold pickaxe", { ironwood: 25, gold: 20 }],
["Mithril pickaxe", { ebony: 30, mithril: 25 }],
["Adamantite pickaxe", { silent: 40, adamantite: 30 }]
])>>
<</if>>
<<set $sellPrices = {
oak: 1,
ash: 2,
beech: 3,
maple: 5,
ironwood: 8,
ebony: 12,
silent: 20,
stone:1,
copper: 2,
iron: 5,
silver: 8,
gold: 10,
steel: 3,
mithril: 20,
adamantite: 27,
aetherium: 34
}>>
<<if !$quests>>
<<set $quests = new Map()>>
<<set $questsData = {
add: function(id, title, desc, reward, image) {
$quests.set(id, {
title: title,
desc: desc,
reward: reward,
status: "active",
progress: 0,
image: image || "images/default_quest.png"
});
},
remove: function(id) { $quests.delete(id); },
setStatus: function(id, status) {
if ($quests.has(id)) { $quests.get(id).status = status; }
},
updateProgress: function(id, value) {
if ($quests.has(id)) { $quests.get(id).progress = value; }
}
}>>
<<set $questsData.addRumor = function(id, title, fragments, reward, image, linkedEnemy, tier) {
$quests.set(id, {
title: title,
desc: "Gather all the fragments to use this rumor.",
type: "rumor",
fragments: fragments.map(f => ({ text: f, found: false })),
reward: reward,
status: "active",
progress: 0,
image: image || "images/rumors/default.png",
linkedEnemy: linkedEnemy,
tier: tier || 1
});
}>>
<<set $questsData.addFragment = function(id, fragmentText) {
if ($quests.has(id)) {
let rumor = $quests.get(id);
if (rumor.type !== "rumor") return;
let frag = rumor.fragments.find(f => f.text === fragmentText);
if (frag && !frag.found) frag.found = true;
let foundCount = rumor.fragments.filter(f => f.found).length;
rumor.progress = foundCount + " / " + rumor.fragments.length;
if (foundCount === rumor.fragments.length) {
rumor.status = "completed";
}
}
}>>
<</if>>
<<set $lastPassage = "Start">>
<<script>>
State.variables.rank = Number(State.variables.rank) || 0;
State.variables.gold = Number(State.variables.gold) || 0;
State.variables.playerXP = Number(State.variables.playerXP) || 0;
$(document).on(':passagedisplay', function (ev) {
// каждый раз, когда показывается новый passage, запоминаем предыдущий
if (typeof State.variables !== "undefined") {
State.variables.lastPassage = ev.passage.title;
}
});
<</script>>
<div class="startScreen2">
<div class="centered">
<h1> Lord of the Lost throne </h1>
</div>
</div>
<div class="startScreen">
<div class="centered">
Enter your name:
<div class="royal-textbox-wrap">
<br> <<textbox "$name" "">>
</div>
<br>
<span class="royal-button">
<<button "Enter">>
<<replace "#displayName">>
Your name is: $name
<</replace>>
<<replace "#nextBtn">>
<span class="prologue">
[[Continue to Prologue|prologue1]]</span>
<</replace>>
<</button>>
</span>
<div id="displayName"></div>
<div id="nextBtn"></div>
</div>
</div>
<style>
/* === Основной стиль === */
.royal-textbox-wrap input[type="text"] {
background: radial-gradient(circle at top left, rgba(70,50,30,0.95), rgba(30,20,10,0.9));
border: 2px solid rgba(255,215,100,0.5);
border-radius: 12px;
padding: 10px 14px;
color: #f8e7b5;
font-family: 'Garamond', 'Times New Roman', serif;
font-size: 1.1em;
box-shadow: 0 0 10px rgba(255,215,100,0.2);
transition: all 0.3s ease;
width: 260px;
outline: none;
max-width: 90vw; /* защита от выхода за экран */
box-sizing: border-box;
}
.royal-textbox-wrap input[type="text"]:focus {
border-color: rgba(255,235,160,0.8);
box-shadow: 0 0 18px rgba(255,235,160,0.3);
background: radial-gradient(circle at top left, rgba(80,60,35,0.95), rgba(25,15,8,0.9));
color: #ffecb3;
}
.royal-textbox-wrap input[type="text"]::placeholder {
color: rgba(255,240,180,0.6);
font-style: italic;
}
.royal-textbox-wrap {
display: flex;
justify-content: center;
align-items: center;
margin: 20px 0;
width: 100%;
}
/* === Мобильная адаптация === */
@media (max-width: 600px) {
h1 {
font-size: 0.8em;
text-align: center;
margin: 0.6em 0;
}
.startScreen {
margin-top: 0vh;
font-family: blackchancery;
font-size: 100%;
}
.royal-textbox-wrap {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
margin: 20px 0;
}
.royal-textbox-wrap input[type="text"] {
width: 85vw; /* теперь строго по экрану */
max-width: 85vw;
font-size: 1em;
padding: 9px 12px;
border-radius: 10px;
}
.centered {
padding: 10px;
}
.royal-button {
font-size: 0.95em;
}
}
.prologue a {
display: inline-block;
background: radial-gradient(circle at top left, rgba(80,60,30,0.9), rgba(40,25,10,0.85));
border: 2px solid rgba(255,215,120,0.6);
border-radius: 10px;
padding: 10px 18px;
font-family: 'Garamond', 'Times New Roman', serif;
color: #f8e7b5;
font-size: 1.1em;
text-decoration: none;
text-shadow: 0 0 6px rgba(255,240,160,0.4);
box-shadow: 0 0 10px rgba(255,215,100,0.2);
transition: all 0.3s ease;
}
.prologue a:hover {
border-color: rgba(255,235,160,0.9);
box-shadow: 0 0 15px rgba(255,235,160,0.4);
color: #fff3c2;
transform: scale(1.03);
}
</style>
<<done>>
<<script>>
/* If the game is restarting, skip autosave loading. */
if (State.metadata.has("Restarting")) {
State.metadata.delete("Restarting");
}
/* Otherwise, check if an autosave exists & load it */
else if (Save.browser.size > 0) {
Save.browser.continue()
.then(() => {
/* Success - load the passage */
Engine.show();
})
.catch(error => {
/* Failure. Handle the error */
console.error(error);
UI.alert(error);
});
} else {
/* No browser saves exist. Start new game */
}
<</script>>
<</done>><div class="resizable imageMapObserve">
<img src="images/Backs/Sewers.jpg"
alt="Sewers"
usemap="#sewer-image-map"
style=" width:100vw; min-height:auto; max-width: 100%; object-fit:cover; display:block; margin:0; padding:0; overflow:hidden;"
>
</div>
<map name="sewer-image-map">
<area data-passage="sleep" alt="bed" title="bed"
coords="903,536,1175,533,1344,665,1349,832,947,835,903,715" shape="poly">
<area data-passage="streets" alt="exit" title="exit"
coords="516,560,499,273,681,149,896,250,891,558" shape="poly">
<area data-passage="status" alt="table" title="table" coords="326,648,189,779,199,1056,567,1054,644,993,630,647" shape="poly">
<<= ($rank <= 0)
? ($GuardsNo
? ''
: '<area data-passage="GuardsNo" alt="no map" title="no map" coords="1470,350,1449,535,1626,579,1655,345" shape="poly">')
: ($GuardsNo
? '<area data-passage="Map" alt="map" title="map" coords="1470,350,1449,535,1626,579,1655,345" shape="poly">'
: '<area data-passage="Map" alt="map" title="map" coords="1470,350,1449,535,1626,579,1655,345" shape="poly">')
>>
</map>
<div class="resizable imageMapObserve">
<img src="images/Backs/streets.jpg"
alt="streets"
usemap="#streets-image-map"
style=" width:100vw; min-height:auto; max-width: 100%; object-fit:cover; display:block; margin:0; padding:0; overflow:hidden;"
>
</div>
<map name="streets-image-map">
<area data-passage="shop" alt="shop" coords="1210,642,1208,872,1470,923,1466,609" shape="poly">
<area data-passage="Bazaar" alt="Bazaar" coords="9,555,272,620,479,686,479,838,299,878,276,1073,14,1073" shape="poly">
<area data-passage="rightCity" alt="Right city" coords="952,664,944,816,1081,850,1078,659" shape="poly">
<area data-passage="leftCity" alt="Left city" title="workshop" coords="622,623,810,621,808,798,615,796" shape="poly">
<area data-passage="castle" alt="castle" coords="737,150,783,103,968,47,1044,67,1080,83,1115,108,1137,152,1137,273,949,260,734,300" shape="poly">
<area data-passage="Sewers" alt="Sewers" title="Sewers" coords="532,964,1129,913,1493,1083,601,1088" shape="poly">
<area data-passage="Beggar" alt="beg" title="beg" coords="1532,611,1906,570,1909,1088,1895,1086,1538,1013" shape="poly">
</map>
<<script>>
// Apply maphilight to all images that have a usemap attribute, e.g.
// all the maps that are in this twine. This sets the default styling
// for all the maps. These are all the possible styling options.
// Note: for picking colors, check out http://hslpicker.com/. You can
// copy the HEX value as long as you leave off the "#".
$("img[usemap]").maphilight({
fill: false, // Fill the area?
fillColor: 'ffffff', // HEX format without the starting "#"
fillOpacity: 0.1, // Opacity of the filled area
stroke: true, // Outline the area?
strokeColor: '8fb996',
strokeOpacity: 0.2,
strokeWidth: 3, // Outline width
fade: false, // Animate when hovered with a fade?
alwaysOn: false, // Always show the areas?
neverOn: false,
groupBy: false,
wrapClass: true,
shadow: false,
shadowX: 0,
shadowY: 0,
shadowRadius: 6,
shadowColor: '000000',
shadowOpacity: 0.8,
shadowPosition: 'outside',
shadowFrom: false
});
<</script>><<do tag "forest">>
<<run
while ($forestXp >= $forestryNeededXp) {
$forestXp -= $forestryNeededXp;
$forestLevel++;
$forestryNeededXp = Math.floor(100 * Math.pow(1.5, $forestLevel - 1));
}
>>
<div class="forest-status">
<p>🌲 Forestry level: <<print $forestLevel>></p>
<<set _forestxpp to $forestXp / $forestryNeededXp>>
<<showmeter "forestXp" _forestxpp >>
</div>
<div class="collected-woods">
<h3>Collected Wood</h3>
<div class="materials-grid">
<<if $materials.count('oak') > 0>>
<div class="wood-item">
<img src="images/Icons/oak.png" alt="Oak Wood" class="wood-icon">
<span>Oak: <<print $materials.count('oak')>></span>
</div>
<</if>>
<<if $materials.count('ash') > 0>>
<div class="wood-item">
<img src="images/Icons/ash.png" alt="Ash Wood" class="wood-icon">
<span>Ash: <<print $materials.count('ash')>></span>
</div>
<</if>>
<<if $materials.count('beech') > 0>>
<div class="wood-item">
<img src="images/Icons/beech.png" alt="Beech Wood" class="wood-icon">
<span>Beech: <<print $materials.count('beech')>></span>
</div>
<</if>>
<<if $materials.count('maple') > 0>>
<div class="wood-item">
<img src="images/Icons/maple.png" alt="Maple Wood" class="wood-icon">
<span>Maple: <<print $materials.count('maple')>></span>
</div>
<</if>>
<<if $materials.count('ironwood') > 0>>
<div class="wood-item">
<img src="images/Icons/ironwood.png" alt="Ironwood" class="wood-icon">
<span>Ironwood: <<print $materials.count('ironwood')>></span>
</div>
<</if>>
<<if $materials.count('ebony') > 0>>
<div class="wood-item">
<img src="images/Icons/ebony.png" alt="Ebony" class="wood-icon">
<span>Ebony: <<print $materials.count('ebony')>></span>
</div>
<</if>>
<<if $materials.count('silent') > 0>>
<div class="wood-item">
<img src="images/Icons/silent.png" alt="Silent Tree" class="wood-icon">
<span>Silent Tree: <<print $materials.count('silent')>></span>
</div>
<</if>>
</div>
</div>
<<set $woodCount = random(1, 4)>>
<</do>>
<!-- OAK -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/oak.png" alt="Oak Wood" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>1</strong></p>
<p>🪓 Axe needed: <strong>Stone axe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Stone axe") and $forestLevel >= 1>>
<<cooldownButton "Chop" fill 3s>>
<<run $materials.pickup('oak', $woodCount)>>
<<set $forestXp += $woodCount * 3>>
<<flash `"You earned " + $woodCount + " oak wood and " + ($woodCount * 3) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "forest">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need a Stone axe!</button>
<</if>>
</div>
</div>
<!-- ASH -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/ash.png" alt="Ash Wood" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>2</strong></p>
<p>🪓 Axe needed: <strong>Copper axe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Copper axe") and $forestLevel >= 2>>
<<cooldownButton "Chop" fill 3s>>
<<run $materials.pickup('ash', $woodCount)>>
<<set $forestXp += $woodCount * 5>>
<<flash `"You earned " + $woodCount + " ash wood and " + ($woodCount * 5) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "forest">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need a Copper axe!</button>
<</if>>
</div>
</div>
<!-- BEECH -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/beech.png" alt="Beech Wood" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>3</strong></p>
<p>🪓 Axe needed: <strong>Iron axe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Iron axe") and $forestLevel >= 3 >>
<<cooldownButton "Chop" fill 3s>>
<<run $materials.pickup('beech', $woodCount)>>
<<set $forestXp += $woodCount * 8>>
<<flash `"You earned " + $woodCount + " beech wood and " + ($woodCount * 8) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "forest">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need an Iron axe!</button>
<</if>>
</div>
</div>
<!-- MAPLE -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/maple.png" alt="Maple Wood" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>4</strong></p>
<p>🪓 Axe needed: <strong>Steel axe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Steel axe") and $forestLevel >= 4 >>
<<cooldownButton "Chop" fill 3s>>
<<run $materials.pickup('maple', $woodCount)>>
<<set $forestXp += $woodCount * 10>>
<<flash `"You earned " + $woodCount + " maple wood and " + ($woodCount * 10) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "forest">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need a Steel axe!</button>
<</if>>
</div>
</div>
<!-- IRONWOOD -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/ironwood.png" alt="Ironwood" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>5</strong></p>
<p>🪓 Axe needed: <strong>Gold axe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Gold axe") and $forestLevel >= 5>>
<<cooldownButton "Chop" fill 3s>>
<<run $materials.pickup('ironwood', $woodCount)>>
<<set $forestXp += $woodCount * 12>>
<<flash `"You earned " + $woodCount + " ironwood and " + ($woodCount * 12) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "forest">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need a Gold axe!</button>
<</if>>
</div>
</div>
<!-- EBONY -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/ebony.png" alt="Ebony Wood" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>6</strong></p>
<p>🪓 Axe needed: <strong>Mithril axe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Mithril axe") and $forestLevel >= 6>>
<<cooldownButton "Chop" fill 3s>>
<<run $materials.pickup('ebony', $woodCount)>>
<<set $forestXp += $woodCount * 15>>
<<flash `"You earned " + $woodCount + " ebony wood and " + ($woodCount * 15) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "forest">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need a Mithril axe!</button>
<</if>>
</div>
</div>
<!-- SILENT TREE -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/silent.png" alt="Silent Tree" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>7</strong></p>
<p>🪓 Axe needed: <strong>Adamantite axe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Adamantite axe") and $forestLevel >= 7>>
<<cooldownButton "Chop" fill 3s>>
<<run $materials.pickup('silent', $woodCount)>>
<<set $forestXp += $woodCount * 20>>
<<flash `"You earned " + $woodCount + " silent wood and " + ($woodCount * 20) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "forest">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need an Adamantite axe!</button>
<</if>>
</div>
</div>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Reveal the map" Map>><</button>>
</span>
</div>
</div>
<<done>>
<<script>>
jQuery(".macro-cooldownbutton").on("click", function(){
jQuery(".macro-cooldownbutton").ariaDisabled(true);
setTimeout(function(){
jQuery(".macro-cooldownbutton").ariaDisabled(false);
}, 3000); /* time delay in ms, same delay as the cooldown button duration */
});
<</script>>
<</done>>
<ul>
<li>Oak: $oakCount</li>
<li>Ash: $ashCount</li>
<li>Beech: $beechCount</li>
<li>Maple: $mapleCount</li>
<li>Ironwood: $ironWoodCount</li>
<li>Ebony: $ebonyCount</li>
<li>Silent Tree: $silentCount</li>
</ul>
<<do tag "cards">>
<div class="centered">
<h1> Your collection </h1>
</div>
<div class="collectibles-wrapper">
<!-- Карточка 1 -->
<div class="collectible-card">
<div class="collectible-art">
<<if $collected['wolf_medallion']>>
<img src="7210842.png" alt="Wolf Medallion">
<<else>>
<img src="images/cards/question_mark.png" alt="Locked">
<</if>>
</div>
<div class="collectible-title">There will be a sex cards</div>
<div class="collectible-rarity">LEGENDARY</div>
<div class="collectible-status">
<<if $collected['wolf_medallion']>>Collected<<else>>Locked<</if>>
</div>
</div>
<!-- Карточка 2 -->
<div class="collectible-card <<if !$collected['herb_bundle']>>locked<</if>>">
<div class="collectible-art">
<img class="locked-img" src="images/cards/question_mark.png" alt="Locked">
<img class="unlocked-img" src="images/herb_bundle.jpg" alt="Herb Bundle">
</div>
<div class="collectible-title">There will be a sex cards</div>
<div class="collectible-rarity">COMMON</div>
<div class="collectible-status <<if $collected['herb_bundle']>>collected<</if>>">
<<if $collected['herb_bundle']>>Collected<<else>>Locked<</if>>
</div>
</div>
<!-- Карточка 3 -->
<div class="collectible-card <<if !$collected['old_coin']>>locked<</if>>">
<div class="collectible-art">
<img class="locked-img" src="images/cards/question_mark.png" alt="Locked">
<img class="unlocked-img" src="images/old_coin.jpg" alt="Old Coin">
</div>
<div class="collectible-title">There will be a sex cards</div>
<div class="collectible-rarity">RARE</div>
<div class="collectible-status <<if $collected['old_coin']>>collected<</if>>">
<<if $collected['old_coin']>>Collected<<else>>Locked<</if>>
</div>
</div>
</div>
<</do>>
<div class="centered">
<span class="ascend">
<<button "confirm">><<run Engine.backward()>><</button>>
</span>
</div>
<div class="wip-banner">
<h2>WIP in 0.2</h2>
</div>
<style>
/* === WIP Banner === */
.wip-banner {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: radial-gradient(circle at top left, rgba(60,40,20,0.95), rgba(20,10,5,0.9));
border: 2px solid rgba(255,215,100,0.6);
border-radius: 16px;
padding: 25px 50px;
box-shadow: 0 0 25px rgba(255,215,100,0.3);
text-align: center;
z-index: 999;
animation: fadeInScale 0.8s ease forwards;
}
/* Текст */
.wip-banner h2 {
color: #f8e7b5;
font-family: 'Garamond', 'Times New Roman', serif;
font-size: 2em;
letter-spacing: 2px;
text-shadow: 0 0 10px rgba(255,215,100,0.3);
margin: 0;
}
/* Анимация */
@keyframes fadeInScale {
from {
opacity: 0;
transform: translate(-50%, -50%) scale(0.8);
}
to {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
}
}
/* === Мобильная адаптация === */
@media (max-width: 600px) {
.wip-banner {
padding: 18px 35px;
border-radius: 12px;
}
.wip-banner h2 {
font-size: 1.4em;
}
}
</style><div class="centered">
<div class="money-display">
<img src="images/icons/gold.png" class="coin-icon">
<span class="money-amount"><<print setup.money.get()>></span>
</div>
</div>
<<do tag "cycle">>
<<showcycle 'weekdays'>> : <<showcycle 'time'>>
<<if Cycle.get('time').check('daytime')>>
<span class="plus-btn">
<<link "wait">>
<<editcycle 'time' change +1>>
<<redo "cycle">>
<</link>>
</span>
<</if>>
<</do>>
<br><br><br>
<nav class="sidebar-nav">
<div class="sidebar-button">[[Collection WIP v0.2|Collection]]</div>
<div class="sidebar-button">[[Enemies|enemies]]</div>
<div class="sidebar-button">[[Quest Book|QuestBook]]</div>
<div class="sidebar-button">[[Relationships|Relationships]]</div>
<div class="sidebar-button">[[Cheat panel|CheatPanel]]</div>
</nav>
<div class="social-icons">
<a href="https://discord.gg/ze2GEkZw9h">
<img src="images/icons/ds.png" alt="Discord" class="social-icon">
</a>
<a href="https://www.patreon.com/spellofearth">
<img src="images/icons/patreon.png" alt="Patreon" class="social-icon">
</a>
</div>
<style>
.plus-btn {
display: inline-block;
background: linear-gradient(135deg, #8b5e3c, #b7864c); /* коричнево-золотой градиент */
color: #fff8e7;
font-weight: bold;
font-size: 1em;
padding: 4px 8px;
border-radius: 6px;
border: 1px solid #5a3e26;
cursor: pointer;
text-decoration: none;
box-shadow: 0 2px 6px rgba(0,0,0,0.3), inset 0 0 4px rgba(255,255,255,0.15);
transition: all 0.2s ease;
user-select: none;
}
.plus-btn:hover {
background: linear-gradient(135deg, #b7864c, #a86b3a);
transform: scale(1.05);
box-shadow: 0 0 12px rgba(255, 200, 120, 0.5);
}
.plus-btn:active {
transform: scale(0.95);
box-shadow: inset 0 0 6px rgba(0,0,0,0.4);
}
/* Чтобы текст ссылки внутри спана выглядел красиво */
.plus-btn a {
color: inherit;
text-decoration: none;
display: inline-block;
width: 100%;
height: 100%;
text-align: center;
line-height: 1.2em;
}
.social-icons {
display: flex;
gap: 1vw; /* адаптивный отступ между иконками */
justify-content: center;
align-items: center;
margin-top: 1rem;
}
.social-icon {
width: 3vw; /* полностью респонсивная ширина */
height: auto; /* сохраняем пропорции */
cursor: pointer;
transition: transform 0.2s ease, filter 0.2s ease;
}
.social-icon:hover {
transform: scale(1.2);
filter: brightness(1.2);
}
/* планшеты и маленькие экраны */
@media (max-width: 768px) {
.social-icon {
width: 15vw;
}
}
@media (max-width: 480px) {
.social-icon {
width: 20vw;
}
}
a.link-external::after {
visibility: hidden;
content: "";
}
</style>
<<if Cycle.check('time', 'daytime')>>
<<set _randBeg = random(1, 3)>>
<<set _begMoney = random(1, 3)>>
<<switch _randBeg>>
<<case 1>>
<<run setup.money.add(_begMoney)>>
<<if hasVisited("GuardsNo") and $GuardTalk is false>>
<<gg>><em>I hold out my palm in the gutter’s dim light, one coin left between my fingers. A cart rattles by; a woman hurries past, ignoring me. Embarrassment tastes like old bread.
When I murmur the ask — the word barely leaving my lips — a shadow falls across my hand.
A guard stands over me, helmet tucked under his arm. He’s not the sort to throw a coin; he studies me like a curious animal. Beside him, a younger watcher tries to hide a smile.</em>
<</gg>>
<br>
<<say 'Guard' >>You begging in the street? You ought to be working. Or have papers.<</say>>
<br>
<<gg>><em>I search for an answer, for dignity, for anything that might change his mood.</em>
I… I just need some coin for food.
<</gg>>
<br>
<<gg>><em>He snorts, then leans closer, voice down so only I hear it.</em><</gg>>
<br>
<<say 'Guard' >>There’s another thing you could try. The Mistress of the Watch — she handles odd cases. If you’re bold enough, go to the prison on the left street and ask for her. She tests a man’s bearing. If she sees fit… she signs.<</say>>
<br>
<<gg>><em>He taps the side of his nose as if sharing a secret, then straightens and walks away, leaving me stunned and the coin forgotten in my palm.</em><</gg>>
<br>
<<set $GuardTalk to true>>
<<run $questsData.add(
"mistGuard",
"Talk to the mistress in prison",
"When I asked for money, probably the last kind guard told me how to get free: I just had to go to the mistress in prison and do what she said.",
"Freedom ?, 100xp",
"images/characters/mistress.jfif"
)>>
<</if>>
<br>
<<set _earningsPhrases = [
"I have earned " + _begMoney + " coins, enough to buy a meal… if I’m lucky.",
"I have earned " + _begMoney + " coins, though it barely keeps the hunger at bay.",
"I have earned " + _begMoney + " coins, a paltry sum for a king turned beggar.",
"I have earned " + _begMoney + " coins, my only reward for wandering these streets.",
"I have earned " + _begMoney + " coins, each one a reminder of what I’ve lost.",
"I have earned " + _begMoney + " coins, and yet it feels like nothing.",
"I have earned " + _begMoney + " coins, enough for bread, maybe some cheese.",
"I have earned " + _begMoney + " coins, a meager sum in this cruel city.",
"I have earned " + _begMoney + " coins, barely enough to keep my stomach quiet.",
"I have earned " + _begMoney + " coins, a drop in the ocean of my misfortune."
]>>
<<set _r = random(0, _earningsPhrases.length - 1)>>
<<gg>> <i><<print _earningsPhrases[_r]>></i> <</gg>>
<br>
<<case 2>>
<<set _thoughts = [
"Once I had a crown, now I beg for crumbs. How far can a king fall?",
"The streets echo with laughter that isn’t mine anymore.",
"I remember the sound of banners flapping above the castle… and now, rats in the gutter.",
"If I close my eyes, I can still feel the weight of the crown — heavier than any chain.",
"They called me ‘Your Majesty’ once. Now they don’t even call me by name.",
"The new king sits on my throne. My throne. And I sit in the mud.",
"Maybe the gods wanted to humble me. If so, they succeeded.",
"All those battles, all that glory — what did it matter?",
"My kingdom burned… and I with it, piece by piece.",
"I can still see the flames behind my eyelids when I sleep.",
"I had a wife, a court, a future. Now I have dust and cold stone.",
"They said I was born under a lucky star. Perhaps it fell.",
"If I could just once more see the city from the tower… not from the gutter.",
"The peasants I once ruled now step over me.",
"A king without a crown, a man without a name.",
"Power fades faster than bread in the rain.",
"Even the guards don’t recognize me anymore. Maybe that’s for the best.",
"How quickly loyalty dies when gold runs dry.",
"Maybe I deserve this. Maybe this is what justice feels like.",
"The new king smiles like I used to — and it sickens me."
]>>
<<set _r = random(0, _thoughts.length - 1)>>
<<gg>><i><<print _thoughts[_r]>></i><</gg>>
<<case 3>>
<<set _madThoughts = [
"They called me king once… I think. Or was that just the dream?",
"The throne… it was golden, wasn’t it? Or bones. Hard to tell now.",
"He took it all. My city, my crown, my name. But not my hatred.",
"I tried to fight. Gods know I tried.",
"They laughed as the banners burned. I still hear it at night.",
"He wore my cloak at the coronation. My cloak.",
"The chains cut deep. Deeper than memory.",
"I used to command armies… now I can’t command my own hunger.",
"Once they bowed. Now they spit.",
"If I could just stand tall again… once.",
"I had knights who would die for me. They did.",
"The new king’s voice — like honey over rot.",
"The priests said the gods chose him. Lying worms.",
"They say power corrupts. I say power burns away what’s left of you.",
"The crown whispered things… maybe it still does.",
"Everything I built, swallowed by fire and greed.",
"I dream of my throne — covered in dust and silence.",
"My hands remember the sword, though my body forgot.",
"I was a ruler. Now I’m just another beggar with stories no one believes.",
"If I scream long enough, maybe the stones will remember me."
]>>
<<set _r2 = random(0, _madThoughts.length - 1)>>
<<gg>> <i><<print _madThoughts[_r2]>></i> <</gg>>
<</switch>>
<br>
<<else>>
<<gg>><em>Who will give me money at night? I'm more likely to get robbed.</em><</gg>>
<</if>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to main street" streets>><</button>>
</span>
</div>
</div>
<<if $treeChopped is true>>
<<do tag "mine">>
<<run
while ($miningXp >= $miningNeededXp) {
$miningXp -= $miningNeededXp;
$miningLevel++;
$miningNeededXp = Math.floor(100 * Math.pow(1.5, $miningLevel - 1));
}
>>
<div class="forest-status">
<p>⛏️ Mining level: <<print $miningLevel>></p>
<<set _miningxpp to $miningXp / $miningNeededXp>>
<<showmeter "miningXp" _miningxpp >>
</div>
<div class="collected-woods">
<h3>Collected ores</h3>
<div class="materials-grid">
<<if $materials.count('stone') > 0>>
<div class="wood-item">
<img src="images/Icons/stone.png" alt="stone" class="wood-icon">
<span>Stone: <<print $materials.count('stone')>></span>
</div>
<</if>>
<<if $materials.count('copper') > 0>>
<div class="wood-item">
<img src="images/Icons/copper.png" alt="Copper ore" class="wood-icon">
<span>Copper ore: <<print $materials.count('copper')>></span>
</div>
<</if>>
<<if $materials.count('iron') > 0>>
<div class="wood-item">
<img src="images/Icons/iron.png" alt="Iron ore" class="wood-icon">
<span>Iron ore: <<print $materials.count('iron')>></span>
</div>
<</if>>
<<if $materials.count('silver') > 0>>
<div class="wood-item">
<img src="images/Icons/silver.png" alt="Silver ore" class="wood-icon">
<span>Silver ore: <<print $materials.count('silver')>></span>
</div>
<</if>>
<<if $materials.count('gold') > 0>>
<div class="wood-item">
<img src="images/Icons/golden.png" alt="Gold ore" class="wood-icon">
<span>Gold ore: <<print $materials.count('gold')>></span>
</div>
<</if>>
<<if $materials.count('mithril') > 0>>
<div class="wood-item">
<img src="images/Icons/mithril.png" alt="Mithril ore" class="wood-icon">
<span>Mithril ore: <<print $materials.count('mithril')>></span>
</div>
<</if>>
<<if $materials.count('adamantite') > 0>>
<div class="wood-item">
<img src="images/Icons/adamantite.png" alt="Adamantite ore" class="wood-icon">
<span>Adamantite ore: <<print $materials.count('adamantite')>></span>
</div>
<</if>>
<<if $materials.count('aetherium') > 0>>
<div class="wood-item">
<img src="images/Icons/aetherium.png" alt="Aetherium ore" class="wood-icon">
<span>Aetherium ore: <<print $materials.count('aetherium')>></span>
</div>
<</if>>
</div>
<<set $woodCount = random(1, 4)>>
<</do>>
<!-- STONE -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/stone.png" alt="Stone" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>1</strong></p>
<p>⛏️ Pickaxe needed: <strong>None</strong></p>
</div>
<div class="tree-right">
<<cooldownButton "Mine" fill 3s>>
<<run $materials.pickup('stone', $woodCount)>>
<<set $miningXp += $woodCount * 1>>
<<flash `"You earned " + $woodCount + " stone and " + ($woodCount * 1) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "mine">>
<</cooldownButton>>
</div>
</div>
<!-- COPPER -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/copper.png" alt="Copper ore" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>1</strong></p>
<p>⛏️ Pickaxe needed: <strong>Stone pickaxe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Stone pickaxe") and $miningLevel >= 1>>
<<cooldownButton "Mine" fill 3s>>
<<set $copperCount += $woodCount>>
<<run $materials.pickup('copper', $woodCount)>>
<<set $miningXp += $woodCount * 3>>
<<flash `"You earned " + $woodCount + " copper ore and " + ($woodCount * 3) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "mine">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need a Stone pickaxe!</button>
<</if>>
</div>
</div>
<!-- IRON -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/iron.png" alt="Iron ore" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>2</strong></p>
<p>⛏️ Pickaxe needed: <strong>Copper pickaxe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Copper pickaxe") and $miningLevel >= 2>>
<<cooldownButton "Mine" fill 3s>>
<<set $ironCount += $woodCount>>
<<run $materials.pickup('iron', $woodCount)>>
<<set $miningXp += $woodCount * 5>>
<<flash `"You earned " + $woodCount + " iron ore and " + ($woodCount * 5) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "mine">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need a Copper pickaxe!</button>
<</if>>
</div>
</div>
<!-- SILVER -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/silver.png" alt="Silver ore" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>3</strong></p>
<p>⛏️ Pickaxe needed: <strong>Iron pickaxe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Iron pickaxe") and $miningLevel >= 3>>
<<cooldownButton "Mine" fill 3s>>
<<set $silverCount += $woodCount>>
<<run $materials.pickup('silver', $woodCount)>>
<<set $miningXp += $woodCount * 8>>
<<flash `"You earned " + $woodCount + " silver ore and " + ($woodCount * 8) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "mine">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need an Iron pickaxe!</button>
<</if>>
</div>
</div>
<!-- GOLD -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/golden.png" alt="Gold ore" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>4</strong></p>
<p>⛏️ Pickaxe needed: <strong>Silver pickaxe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Silver pickaxe") and $miningLevel >= 4>>
<<cooldownButton "Mine" fill 3s>>
<<set $goldCount += $woodCount>>
<<run $materials.pickup('gold', $woodCount)>>
<<set $miningXp += $woodCount * 10>>
<<flash `"You earned " + $woodCount + " gold ore and " + ($woodCount * 10) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "mine">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need a Silver pickaxe!</button>
<</if>>
</div>
</div>
<!-- MITHRIL -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/mithril.png" alt="Mithril ore" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>5</strong></p>
<p>⛏️ Pickaxe needed: <strong>Gold pickaxe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Gold pickaxe") and $miningLevel >= 5>>
<<cooldownButton "Mine" fill 3s>>
<<set $mithrilCount += $woodCount>>
<<run $materials.pickup('mithril', $woodCount)>>
<<set $miningXp += $woodCount * 12>>
<<flash `"You earned " + $woodCount + " mithril ore and " + ($woodCount * 12) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "mine">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need a Gold pickaxe!</button>
<</if>>
</div>
</div>
<!-- ADAMANTITE -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/adamantite.png" alt="Adamantite ore" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>6</strong></p>
<p>⛏️ Pickaxe needed: <strong>Mithril pickaxe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Mithril pickaxe") and $miningLevel >= 6>>
<<cooldownButton "Mine" fill 3s>>
<<set $adamantiteCount += $woodCount>>
<<run $materials.pickup('adamantite', $woodCount)>>
<<set $miningXp += $woodCount * 15>>
<<flash `"You earned " + $woodCount + " adamantite ore and " + ($woodCount * 15) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "mine">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need a Mithril pickaxe!</button>
<</if>>
</div>
</div>
<!-- AETHERIUM -->
<div class="tree-card">
<div class="tree-left">
<img src="images/Icons/aetherium.png" alt="Aetherium ore" class="tree-icon">
</div>
<div class="tree-center">
<p>🔒 Unlock Level: <strong>7</strong></p>
<p>⛏️ Pickaxe needed: <strong>Adamantite pickaxe</strong></p>
</div>
<div class="tree-right">
<<if $tools.has("Adamantite pickaxe") and $miningLevel >= 7>>
<<cooldownButton "Mine" fill 3s>>
<<set $aetheriumCount += $woodCount>>
<<run $materials.pickup('aetherium', $woodCount)>>
<<set $miningXp += $woodCount * 20>>
<<flash `"You earned " + $woodCount + " aetherium ore and " + ($woodCount * 20) + " xp"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "mine">>
<</cooldownButton>>
<<else>>
<button class="locked-btn" disabled>You need an Adamantite pickaxe!</button>
<</if>>
</div>
</div>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Reveal the map" Map>><</button>>
</span>
</div>
</div>
<<done>>
<<script>>
jQuery(".macro-cooldownbutton").on("click", function(){
jQuery(".macro-cooldownbutton").ariaDisabled(true);
setTimeout(function(){
jQuery(".macro-cooldownbutton").ariaDisabled(false);
}, 3000); /* time delay in ms, same delay as the cooldown button duration */
});
<</script>>
<</done>>
<<else>>
<<goto [[treeQuest]]>>
<</if>>
<<set _rankCount = $rankNames.length>>
<<set $maxRankIndex = _rankCount - 1>>
<<set $rank = Number($rank) || 0>> /* защита */
<<set _nextGold = ($rank < $maxRankIndex) ? $rankGoldReq[$rank + 1] : null>>
<<set _nextXp = ($rank < $maxRankIndex) ? $rankXpReq[$rank + 1] : null>>
<<set _goldProgress = _nextGold ? Math.min(100, Math.floor((setup.money.get() / _nextGold) * 100)) : 100>>
<<set _xpProgress = _nextXp ? Math.min(100, Math.floor(($playerXP / _nextXp) * 100)) : 100>>
<div class="rank-display">⚜️ <<print $rankNames[$rank]>> ⚜️</div>
<div class="rank-tree" role="list">
<<for _i = 0; _i < $rankNames.length; _i++>>
<<set _id = "rank-" + _i>>
<!-- Сначала вставляем элемент -->
<div id="<<=_id>>" class="rank-node">
<<= $rankNames[_i]>>
<span class="req"><<= $rankGoldReq[_i]>>g; <<= $rankXpReq[_i]>>xp</span>
</div>
<<switch true>>
<<case _i < $rank>>
<<run $("#"+_id).addClass("done").removeClass("current locked")>>
<<case _i == $rank>>
<<run $("#"+_id).addClass("current").removeClass("done locked")>>
<<default>>
<<run $("#"+_id).addClass("locked").removeClass("done current")>>
<</switch>>
<<if _i < $rankNames.length - 1>>
<div class="arrow">➝</div>
<</if>>
<</for>>
</div>
<br><br>
<div class="progress-area">
<<if $rank < $maxRankIndex>>
<!-- Wealth Meter -->
<div style="display: flex; align-items: center; margin-bottom: 0.5rem;">
<span style="flex: 0 0 auto; width: 80px;">Wealth:</span>
<div style="flex: 1; margin: 0 0.5rem;">
<<showmeter "moneyXP" _goldProgress/100>>
</div>
<span style="flex: 0 0 auto; width: 40px; text-align: right;"><<print _goldProgress>>%</span>
</div>
<!-- Experience Meter -->
<div style="display: flex; align-items: center; margin-bottom: 0.5rem;">
<span style="flex: 0 0 auto; width: 80px;">Experience:</span>
<div style="flex: 1; margin: 0 0.5rem;">
<<showmeter "playerXP" _xpProgress/100>>
</div>
<span style="flex: 0 0 auto; width: 40px; text-align: right;"><<print _xpProgress>>%</span>
</div>
<!-- Info about next rank -->
<div style="text-align:center; color:#ccc; margin-top:0.25rem;">
To ascend to <strong><<print $rankNames[$rank + 1]>></strong> you need
<strong><<print _nextGold>></strong>g and <strong><<print _nextXp>></strong>xp.
</div>
<div class="ascend-row">
<span class="ascend">
<<if (setup.money.get() >= _nextGold && $playerXP >= _nextXp)>>
<<button "Ascend to <<= $rankNames[$rank + 1]>>">>
<<run setup.money.spend(_nextGold);>>
<<set $playerXP -= _nextXp>>
<<set $rank += 1>>
<<goto "status">>
<</button>>
<<else>>
<button disabled>Ascend (requirements not met)</button>
<</if>>
</span>
</div>
<<else>>
<div style="text-align:center; margin-top:1rem; font-weight:700; color:#cfc;">
You reached the highest rank.
</div>
<</if>>
</div>
<hr>
<p style="text-align:center; color:#999; margin-top:0.6rem;">
Current: <<= setup.money.get()>> g · <<print $playerXP>>xp · Rank: <<print $rankNames[$rank]>>
</p>
<span class="ascend">
<<button "Back">><<goto "Sewers">><</button>>
</span>
<div class="centered">
<div class="resizable imageMapObserve">
<img src="images/Backs/FullMap.jpg"
alt="map"
usemap="#map-image-map"
style="max-height:85vw; min-height:auto; object-fit:contain; display:block; margin:0; padding:0; overflow:hidden;"
>
</div>
<map name="map-image-map">
<area data-passage="forest" alt="Forest" title="Forest" coords="375,390,51,82" shape="rect">
<area data-passage="Swamp" alt="Swamp" title="Swamp" coords="36,934,246,1176" shape="rect">
<<if !setup.isHiddenHouseUnlocked()>>
<area data-passage="hiddendoor" alt="Hidden" title="Hidden" coords="890,939,1162,1173" shape="rect">
<<else>>
<area data-passage="HiddenHouse" alt="HiddenHouse" title="HiddenHouse" coords="890,939,1162,1173" shape="rect">
<</if>>
<area data-passage="cVillage" alt="cVillage" title="cVillage" coords="419,754,732,1029" shape="rect">
<area data-passage="Mine" alt="Mine" title="Mine" coords="791,393,1008,592" shape="rect">
<area data-passage="streets" alt="Citadel" title="Citadel" coords="840,54,1128,338" shape="rect">
</map>
</div>
<<if $forgedaughter >= 3 and State.variables.relationships['ellin'].hearts < State.variables.relationships['ellin'].maxHearts or $forgedaughter == 7>>
<<do tag "workshop">>
<div class="collected-woods">
<h3>Available materials:</h3>
<div class="materials-grid">
<<if $materials.count('oak') > 0>>
<div class="wood-item">
<img src="images/Icons/oak.png" alt="Oak Wood" class="wood-icon">
<span>Oak: <<print $materials.count('oak')>></span>
</div>
<</if>>
<<if $materials.count('ash') > 0>>
<div class="wood-item">
<img src="images/Icons/ash.png" alt="Ash Wood" class="wood-icon">
<span>Ash: <<print $materials.count('ash')>></span>
</div>
<</if>>
<<if $materials.count('beech') > 0>>
<div class="wood-item">
<img src="images/Icons/beech.png" alt="Beech Wood" class="wood-icon">
<span>Beech: <<print $materials.count('beech')>></span>
</div>
<</if>>
<<if $materials.count('maple') > 0>>
<div class="wood-item">
<img src="images/Icons/maple.png" alt="Maple Wood" class="wood-icon">
<span>Maple: <<print $materials.count('maple')>></span>
</div>
<</if>>
<<if $materials.count('ironwood') > 0>>
<div class="wood-item">
<img src="images/Icons/ironwood.png" alt="Ironwood" class="wood-icon">
<span>Ironwood: <<print $materials.count('ironwood')>></span>
</div>
<</if>>
<<if $materials.count('ebony') > 0>>
<div class="wood-item">
<img src="images/Icons/ebony.png" alt="Ebony" class="wood-icon">
<span>Ebony: <<print $materials.count('ebony')>></span>
</div>
<</if>>
<<if $materials.count('silent') > 0>>
<div class="wood-item">
<img src="images/Icons/silent.png" alt="Silent Tree" class="wood-icon">
<span>Silent Tree: <<print $materials.count('silent')>></span>
</div>
<</if>>
<<if $materials.count('copper') > 0>>
<div class="wood-item">
<img src="images/Icons/copper.png" alt="Copper ore" class="wood-icon">
<span>Copper ore: <<print $materials.count('copper')>></span>
</div>
<</if>>
<<if $materials.count('iron') > 0>>
<div class="wood-item">
<img src="images/Icons/iron.png" alt="Iron ore" class="wood-icon">
<span>Iron ore: <<print $materials.count('iron')>></span>
</div>
<</if>>
<<if $materials.count('silver') > 0>>
<div class="wood-item">
<img src="images/Icons/silver.png" alt="Silver ore" class="wood-icon">
<span>Silver ore: <<print $materials.count('silver')>></span>
</div>
<</if>>
<<if $materials.count('gold') > 0>>
<div class="wood-item">
<img src="images/Icons/golden.png" alt="Gold ore" class="wood-icon">
<span>Gold ore: <<print $materials.count('gold')>></span>
</div>
<</if>>
<<if $materials.count('mithril') > 0>>
<div class="wood-item">
<img src="images/Icons/mithril.png" alt="Mithril ore" class="wood-icon">
<span>Mithril ore: <<print $materials.count('mithril')>></span>
</div>
<</if>>
<<if $materials.count('adamantite') > 0>>
<div class="wood-item">
<img src="images/Icons/adamantite.png" alt="Adamantite ore" class="wood-icon">
<span>Adamantite ore: <<print $materials.count('adamantite')>></span>
</div>
<</if>>
<<if $materials.count('aetherium') > 0>>
<div class="wood-item">
<img src="images/Icons/aetherium.png" alt="Aetherium ore" class="wood-icon">
<span>Aetherium ore: <<print $materials.count('aetherium')>></span>
</div>
<</if>>
</div>
</div>
<div class="centered">
<h2>🔨 Crafting Recipes</h2>
</div>
<h2>Choose an item to craft:</h2>
<div id="crafting-interface">
<<include "CraftingUI">>
</div>
<br><br>
<h2 class="inventory-title">📦 Your Crafted Items</h2>
<<if $tools.length > 0>>
<div class="inventory-grid">
<<for _tool range $tools.list>>
<<set _displayName = _tool>>
<<set _imgPath = "images/Icons/" + _displayName.replace(/ /g,"_").toLowerCase() + ".png">>
<div class="inventory-card">
<<= '<img src="' + _imgPath + '" alt="' + _displayName + '" class="inventory-icon">' >>
<div class="inventory-name"><<= _displayName>></div>
</div>
<</for>>
</div>
<<else>>
<p class="inventory-empty">No crafted items yet.</p>
<</if>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Back to the right street" rightCity>><</button>>
</span>
</div>
</div>
<</do>>
<<elseif $forgedaughter < 1 >>
<<include "ForgeDaughter1">>
<<elseif $forgedaughter == 1 and State.variables.relationships['ellin'].hearts >= State.variables.relationships['ellin'].maxHearts >>
<<include "ForgeDaughter2">>
<<elseif $forgedaughter == 2 and State.variables.relationships['ellin'].hearts >= State.variables.relationships['ellin'].maxHearts >>
<<include "ForgeDaughter3">>
<<elseif $forgedaughter == 3 and State.variables.relationships['ellin'].hearts >= State.variables.relationships['ellin'].maxHearts >>
<<include "ForgeDaughter4">>
<<elseif $forgedaughter == 4 and State.variables.relationships['ellin'].hearts >= State.variables.relationships['ellin'].maxHearts >>
<<include "ForgeDaughter5">>
<<elseif $forgedaughter == 5 and State.variables.relationships['ellin'].hearts >= State.variables.relationships['ellin'].maxHearts >>
<<include "ForgeDaughter6">>
<<elseif $forgedaughter == 6 and State.variables.relationships['ellin'].hearts >= State.variables.relationships['ellin'].maxHearts >>
<<include "ForgeDaughter7">>
<<else>>
<<gg>>
<em>I am not allowed to use workshop for now.</em>
<</gg>>
<br>
<<blacksmith>>
Try talking to my daughter; she relaxes at the tavern on weekends. And also... I think she walks in the garden in the village on Wednesdays after work. And on Thursdays after work, I send her to the market to do some shopping.
<</blacksmith>>
<br>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Back to the right street" rightCity>><</button>>
</span>
</div>
</div>
<</if>>
<<run setup.relationshipsModule.discoverLocation("ellin", "workshop")>>
<<run setup.relationshipsModule.discoverLocation("ellin", "home")>>
<ul class="crafting-list">
<<for _item, _materials range $recipes>>
<<capture _materials _item>>
<li class="crafting-item">
<div class="craft-header">
<span class="craft-name"><<= _item>></span>
</div>
<div class="craft-requires">
Requires:
<<for _mat, _num range _materials>>
<span class="req-mat"><<= _mat>> × <<= _num>></span>
<</for>>
</div>
<div class="craft-actions">
<<if $materials.compare(_materials)>>
<span class="craft-link">
<<link "Craft">>
<<run $materials.unmerge(_materials)>>
<<pickup $tools _item 1>>
<<run $recipes.delete(_item)>>
<<redo "workshop">>
<<replace "#crafting-interface">><<include "CraftingUI">><</replace>>
<</link>>
</span>
<<else>>
<span class="not-enough">Not enough materials</span>
<</if>>
</div>
</li>
<</capture>>
<</for>>
</ul>
<<do tag "shop">>
<div class="shop-container">
<h2>Local shop</h2>
<div class="money-display">
<img src="images/icons/gold.png" class="coin-icon">
<span class="money-amount"><<print setup.money.get()>></span>
</div>
<<set _shopItems = [
{name: "Stone axe", price: 10, icon: "stone_axe"},
]>>
<!-- Покупка -->
<div class="shop-section">
<h3> Buy Items</h3>
<div class="shop-grid">
<<for _item range _shopItems>>
<div class="shop-item">
<div class="item-left">
<<= '<img src="images/Icons/' + _item.name.replace(/ /g,"_").toLowerCase() + '.png" alt="' + _item.name + '" class="inventory-icon">' >>
<span class="item-name"><<= _item.name>></span>
</div>
<div class="item-right buy-buttons">
<span class="item-price">
Price: <img src="images/icons/gold.png" class="coin-icon" alt="Gold"> <<= _item.price>>
</span>
<<if !$tools.has(_item.name)>>
<<capture _item>> <!-- Замыкаем текущий объект для этой ссылки -->
<<link "Buy">>
<<if setup.money.get() >= _item.price>>
<<run setup.money.spend(_item.price)>>
<<pickup $tools _item.name 1>>
<<flash `"You bought " + _item.name + "!"`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "shop">>
<<else>>
<<flash `"Not enough gold!"`>>
<<flashType "error">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<</if>>
<</link>>
<</capture>>
<<else>>
<span class="owned">✅ Owned</span>
<</if>>
</div>
</div>
<</for>>
</div>
<!-- Продажа -->
<div class="shop-section">
<h3>💰 Sell Your Materials</h3>
<<if $materials.isEmpty()>>
<p>You don’t have any materials to sell.</p>
<<else>>
<div class="sell-materials">
<<for _mat range $materials.list>>
<<set _qty = $materials.count(_mat)>>
<<if _qty > 0>>
<div class="sell-item">
<div class="sell-left">
<<= '<img src="images/Icons/' + _mat + '.png" alt="' + _mat + '" class="shop-icon">' >>
<span class="sell-name"><<= _mat.replace(/\b\w/g, c => c.toUpperCase())>></span>
</div>
<div class="sell-right">
<span class="sell-amount">× <<= _qty>></span>
<span class="sell-price">Price per unit: <<= $sellPrices[_mat]>> <img src="images/icons/gold.png" class="coin-icon"></span>
<div class="sell-buttons">
<!-- Sell 1 -->
<<capture _mat>>
<<link "Sell 1">>
<<set _sellQty = Math.min(1, $materials.count(_mat))>>
<<set $gold += _sellQty * $sellPrices[_mat]>>
<<drop $materials _mat _sellQty>>
<<flash `"Sold " + _sellQty + " " + _mat + " for " + (_sellQty * $sellPrices[_mat]) + " gold."`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "shop">>
<</link>>
<</capture>>
<!-- Sell 10 -->
<<capture _mat>>
<<link "Sell 10">>
<<set _sellQty = Math.min(10, $materials.count(_mat))>>
<<run setup.money.add(_sellQty * $sellPrices[_mat])>>
<<drop $materials _mat _sellQty>>
<<flash `"Sold " + _sellQty + " " + _mat + " for " + (_sellQty * $sellPrices[_mat]) + " gold."`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "shop">>
<</link>>
<</capture>>
<!-- Sell All -->
<<capture _mat, _qty>>
<<link "Sell All">>
<<set $gold += _qty * $sellPrices[_mat]>>
<<drop $materials _mat _qty>>
<<flash `"Sold all " + _mat + " for " + (_qty * $sellPrices[_mat]) + " gold."`>>
<<flashType "success">>
<<Timeout 3000>>
<<Theme "dark">>
<<Layout bottom-right>>
<</flash>>
<<redo "shop">>
<</link>>
<</capture>>
</div>
</div>
</div>
<</if>>
<</for>>
</div>
<</if>>
</div>
<</do>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Back to the streets" streets>><</button>>
</span>
</div>
</div>
<img src="images/Scenes/treeChop.jpg" class="scene-image">
<<gg>><em> I walk along the forest path and suddenly halt. A massive tree has fallen across the trail, its thick trunk completely blocking my way. I step closer, feeling the rough bark under my fingertips and noticing the sprawling branches covering the path. Sunlight filters through the leaves above, casting dappled patterns on the mossy wood. The air smells of damp earth and old timber, and dry twigs snap under my boots. There’s no way around it — I have to figure out how to get past this colossal obstacle.</em>
<</gg>>
<<set $treeChopProgress = $treeChopProgress ?? 0>>
<div id="forest-status" class="forest-status">
<p>🌲 Forestry level: <<= $forestLevel>></p>
<div class="tree-right">
<<if $forestLevel < 2>>
<p>(Need level 2 to chop this tree)</p>
<<else>>
<p>Tree chop progress: <<= $treeChopProgress>> / 5</p>
<<cooldownButton "Chop" fill 5s>>
<<set $treeChopProgress += 1>>
<<if $treeChopProgress >= 5>>
<<replace "#forest-status">>✅ Tree chopped! You can continue.
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Enter the mine" Mine>><<set $treeChopped to true>><</button>>
</span>
</div>
</div>
<</replace>>
<</if>>
<<redo "chop">>
<</cooldownButton>>
<</if>>
</div>
</div>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Reveal the map" Map>><</button>>
</span>
</div>
</div>
<div id="enemy-tab" class="enemy-tab">
<ul class="enemy-list">
<!-- Lavrius Sytoglas -->
<li class="enemy-card">
<img src="images/characters/lavrius.jpg" alt="Lavrius Sytoglas" class="enemy-img">
<div class="enemy-info">
<h3 class="enemy-name">Lavrius Sytoglas</h3>
<p class="enemy-wealth">Wealth, network of merchants</p>
<p class="enemy-weak">Weakness: cannot resist profit</p>
<p class="enemy-methods">Methods: crash prices, bribe caravaners, expose connection with the Masked Order</p>
<div class="enemy-power">Influence: <<showmeter "SytoglasInf" $SytoglasInfluence >></div>
</div>
</li>
<!-- Brian Ironjaw -->
<li class="enemy-card">
<img src="images/characters/braun.jpg" alt="Brian Ironjaw" class="enemy-img">
<div class="enemy-info">
<h3 class="enemy-name">Brian Ironjaw</h3>
<p class="enemy-wealth">Controls prisons and patrols</p>
<p class="enemy-weak">Weakness: sadism, alcoholism</p>
<p class="enemy-methods">Methods: cause conflict with the usurper, steal evidence of his crimes, undermine guard discipline</p>
<div class="enemy-power">Influence: <<showmeter "IronjawInf" $IronjawInfluence>></div>
</div>
</li>
<!-- Egber Trilik -->
<li class="enemy-card">
<img src="images/characters/egber.jpg" alt="Egber Trilik" class="enemy-img">
<div class="enemy-info">
<h3 class="enemy-name">Egber Trilik</h3>
<p class="enemy-wealth">Power over the temple, influence over the people</p>
<p class="enemy-weak">Weakness: secret orgies, debauchery disguised as service</p>
<p class="enemy-methods">Methods: spread rumors about his sins, find witnesses of his rituals, pit him against other priests</p>
<div class="enemy-power">Influence: <<showmeter "TrilikInf" $TrilikInfluence>></div>
</div>
</li>
<!-- Serella the Fair -->
<li class="enemy-card">
<img src="images/characters/Serella1.jpg" alt="Serella the Fair" class="enemy-img">
<div class="enemy-info">
<h3 class="enemy-name">Serella the Fair</h3>
<p class="enemy-wealth">Court intrigues</p>
<p class="enemy-weak">Weakness: ambition, jealousy</p>
<p class="enemy-methods">Methods: seduce her allies, pit her against the usurper, undermine her reputation as "mother of the people"</p>
<div class="enemy-power">Influence: <<showmeter "SerellaInf" $SerellaInfluence>></div>
</div>
</li>
<!-- Olrik Inkfall -->
<li class="enemy-card">
<img src="images/characters/olrik.jpg" alt="Olrik Inkfall" class="enemy-img">
<div class="enemy-info">
<h3 class="enemy-name">Olrik Inkfall</h3>
<p class="enemy-wealth">Controls laws</p>
<p class="enemy-weak">Weakness: greed, vice</p>
<p class="enemy-methods">Methods: bribe, frame, expose through a fake case</p>
<div class="enemy-power">Influence: <<showmeter "InkfallInf" $InkfallInfluence>></div>
</div>
</li>
<!-- Dessil Raveneye -->
<li class="enemy-card">
<img src="images/characters/dessil.jpg" alt="Dessil Raveneye" class="enemy-img">
<div class="enemy-info">
<h3 class="enemy-name">Dessil Raveneye</h3>
<p class="enemy-wealth">Laboratories, mysterious potions</p>
<p class="enemy-weak">Weakness: obsession with experiments</p>
<p class="enemy-methods">Methods: sabotage his experiments, kidnap subjects, reveal horrors of his alchemy</p>
<div class="enemy-power">Influence: <<showmeter "RaveneyeInf" $RaveneyeInfluence>></div>
</div>
</li>
<!-- Mira Von -->
<li class="enemy-card">
<img src="images/characters/Mira1.jpg" alt="Mira Von" class="enemy-img">
<div class="enemy-info">
<h3 class="enemy-name">Mira Von</h3>
<p class="enemy-wealth">Controls brothels and the slave market</p>
<p class="enemy-weak">Weakness: greed, secret lovers</p>
<p class="enemy-methods">Methods: free slaves, start a rebellion, expose her connections to the army</p>
<div class="enemy-power">Influence: <<showmeter "MiraInf" $MiraInfluence>></div>
</div>
</li>
<!-- Order of Masks -->
<li class="enemy-card glitch-card">
<div class="glitch-img-wrapper">
<img src="images/characters/order.gif" alt="Order of Masks" class="enemy-img glitch-img">
</div>
<div class="enemy-info">
<h3 class="enemy-name glitch-text" data-text="Order of Masks">Order of Masks</h3><br>
<p class="enemy-wealth glitch-text" data-text="Power unknown">Power unknown</p><br>
<p class="enemy-weak glitch-text" data-text="Weakness: none recorded">Weakness: none recorded</p><br>
<p class="enemy-methods glitch-text" data-text="Methods: [REDACTED]">Methods: [REDACTED]</p><br>
<div class="enemy-power glitch-text" data-text="Influence: ???">Influence: ???</div>
</div>
</li>
</ul>
</div>
<div class="centered">
<span class="ascend">
<<button "confirm" >><<run Engine.backward()>><</button>>
</span>
</div>
<<script>>
function randomGlitchText(length) {
const chars = "█▓▒░#%@&*$<>?/|{}[]()⍟≋";
return Array.from({ length }, () => chars[Math.floor(Math.random() * chars.length)]).join('');
}
function updateGlitchText() {
document.querySelectorAll('.glitch-text').forEach(el => {
if (Math.random() < 0.4) {
el.textContent = randomGlitchText(el.dataset.text.length);
} else {
el.textContent = el.dataset.text;
}
});
}
setInterval(updateGlitchText, 1200);
<</script>>
<style>
/* Глитч эффект — аккуратный, но зловещий */
.glitch-text {
position: relative;
color: #f0f0f0;
text-shadow: 0 0 5px rgba(255,0,80,0.5);
display: inline-block;
overflow: hidden;
transition: color 0.2s ease;
}
.glitch-text::before,
.glitch-text::after {
content: attr(data-text);
position: absolute;
left: 0;
width: 100%;
overflow: hidden;
clip: rect(0, 0, 0, 0);
}
.glitch-text::before {
animation: glitchTop 2s infinite linear alternate-reverse;
color: #ff0066;
}
.glitch-text::after {
animation: glitchBottom 2s infinite linear alternate-reverse;
color: #00fff2;
}
@keyframes glitchTop {
0% { clip: rect(0, 900px, 0, 0); transform: translate(0); }
10% { clip: rect(10px, 9999px, 50px, 0); transform: translate(-2px, -2px); }
20% { clip: rect(85px, 9999px, 140px, 0); transform: translate(2px, 0); }
30% { clip: rect(20px, 9999px, 80px, 0); transform: translate(-1px, 2px); }
100% { clip: rect(0, 900px, 0, 0); transform: translate(0); }
}
@keyframes glitchBottom {
0% { clip: rect(0, 900px, 0, 0); transform: translate(0); }
10% { clip: rect(60px, 9999px, 120px, 0); transform: translate(2px, 1px); }
20% { clip: rect(10px, 9999px, 40px, 0); transform: translate(-2px, 0); }
30% { clip: rect(90px, 9999px, 130px, 0); transform: translate(1px, -1px); }
100% { clip: rect(0, 900px, 0, 0); transform: translate(0); }
}
/* Глитч эффект на изображении */
.glitch-img-wrapper {
position: relative;
overflow: hidden;
}
.glitch
</style>
<div id="questbook" class="questbook">
<div class="centered">
<h2>Quest Book</h2>
</div>
<div class="tabs">
<button class="tab active" onclick="showTab('active')">Active</button>
<button class="tab" onclick="showTab('completed')">Completed</button>
<button class="tab" onclick="showTab('failed')">Failed</button>
</div>
<!-- ACTIVE QUESTS -->
<div id="active" class="quest-section active">
<<for _id, _quest range $quests>>
<<if _quest.status == "active">>
<div class="quest-card">
<<= '<img src="' + _quest.image + '" alt="' + _quest.title + '" class="quest-image">' >>
<div class="quest-text">
<h3><<= _quest.title>></h3>
<<if _quest.type == "rumor">>
<p class="quest-tier">Tier: <<= _quest.tier>></p>
<p><strong>Fragments:</strong></p>
<ul>
<<for _frag range _quest.fragments>>
<li class="rumor-fragment">
<<if _frag.found>>
✅ <span class="revealed"><<= _frag.text>></span>
<<else>>
❌ <span class="hidden-text">???</span>
<</if>>
</li>
<</for>>
</ul>
<p><strong>Progress:</strong> <<= _quest.progress>></p>
<</if>>
<p><<= _quest.desc>></p>
<p class="reward">Reward: <<= _quest.reward>></p>
</div>
</div>
<</if>>
<</for>>
</div>
<!-- COMPLETED QUESTS -->
<div id="completed" class="quest-section">
<<for _id, _quest range $quests>>
<<if _quest.status == "completed">>
<div class="quest-card completed">
<<= '<img src="' + _quest.image + '" alt="' + _quest.title + '" class="quest-image">' >>
<div class="quest-text">
<h3><<= _quest.title>></h3>
<<if _quest.type == "rumor">>
<p class="quest-tier">Tier: <<= _quest.tier>></p>
<</if>>
<p><<= _quest.desc>></p>
<p class="reward">Reward: <<= _quest.reward>></p>
</div>
</div>
<</if>>
<</for>>
</div>
<!-- FAILED QUESTS -->
<div id="failed" class="quest-section">
<<for _id, _quest range $quests>>
<<if _quest.status == "failed">>
<div class="quest-card failed">
<<= '<img src="' + _quest.image + '" alt="' + _quest.title + '" class="quest-image">' >>
<div class="quest-text">
<h3><<= _quest.title>></h3>
<<if _quest.type == "rumor">>
<p class="quest-tier">Tier: <<= _quest.tier>></p>
<</if>>
<p><<= _quest.desc>></p>
<p class="reward">Reward: <<= _quest.reward>></p>
</div>
</div>
<</if>>
<</for>>
</div>
</div>
<script>
window.showTab = function(tabId) {
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
document.querySelectorAll('.quest-section').forEach(s => s.classList.remove('active'));
document.getElementById(tabId).classList.add('active');
document.querySelector(`.tab[onclick="showTab('${tabId}')"]`).classList.add('active');
};
</script>
<style>
.quest-card {
background: rgba(40, 25, 10, 0.8);
border: 2px solid #7a5527;
border-radius: 10px;
margin: 15px 0;
padding: 10px;
display: flex;
gap: 15px;
box-shadow: 0 0 10px rgba(0,0,0,0.4);
transition: transform 0.2s ease;
}
.quest-card:hover { transform: scale(1.02); }
.quest-card.completed { opacity: 0.85; border-color: #bba36c; }
.quest-card.failed { opacity: 0.7; border-color: #733; }
.quest-image {
width: 90px;
height: 90px;
object-fit: cover;
border-radius: 8px;
border: 2px solid #7a5527;
}
.quest-text h3 {
margin: 0;
color: #f5e6c2;
font-family: 'IM Fell English', serif;
font-size: 18px;
}
.reward {
font-size: 14px;
color: #d7b26f;
margin-top: 8px;
font-style: italic;
}
.quest-tier {
font-size: 14px;
color: #d7b26f;
font-family: 'IM Fell English', serif;
text-shadow: 0 0 5px rgba(255,215,0,0.4);
margin-top: 4px;
}
.quest-tier::before { content: "★ "; color: gold; }
.rumor-fragment {
font-family: 'IM Fell English', serif;
font-size: 15px;
margin: 4px 0;
}
.hidden-text {
color: #bfa97a;
font-style: italic;
opacity: 0.7;
transition: opacity 0.3s ease;
}
.revealed {
color: #f5e6c2;
text-shadow: 0 0 4px rgba(255,215,0,0.6);
transition: all 0.3s ease;
}
.revealed::before { content: "“"; }
.revealed::after { content: "”"; }
.questbook {
position: relative;
top: 40%;
width: 80%;
max-width: 900px;
margin: 2rem auto;
background: #3b2b1a;
border: 5px solid #5e4025;
border-radius: 12px;
color: #f5e6c2;
padding: 20px;
box-shadow: 0 0 20px rgba(0,0,0,0.7);
font-family: 'IM Fell English', serif;
}
.tabs {
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 10px;
}
.tab {
background: #5e4025;
color: #f5e6c2;
border: 2px solid #3a2615;
padding: 6px 16px;
cursor: pointer;
border-radius: 6px;
font-weight: bold;
transition: all 0.2s ease;
}
.tab:hover { background: #8b6239; }
.tab.active { background: #9c6b35; }
.quest-section { display: none; }
.quest-section.active { display: block; }
</style>
<div class="centered">
<span class="ascend">
<<button "Close questbook">><<run Engine.backward()>><</button>>
</span>
</div>
<div class="passage-panel">
<nav class="market-tabs">
<div class="sidebar-button">[[Eavesdrop|eavesdropping]]</div>
<<if $SmuglerSpoken is true and $influenceFind is false and $churchRitual is false and $prisonCheck is false>>
<div class="sidebar-button">[[Ask the clerks about a local influential person.|InfluenceAsk]]</div>
<</if>>
<div class="sidebar-button">[[Speak to|BazaarSpeak]]</div>
<div class="sidebar-button">[[Back to the streets|streets]]</div>
</nav>
</div>
<<if Cycle.check('time','nighttime') and Cycle.check('weekdays', 'Thursday')>>
<<run setup.relationshipsModule.discoverLocation("ellin", "bazaar")>>
<</if>><<if $eavesdrop === 1>>
<<set _case = random(1,2)>> <!-- случайный выбор кейса -->
<<if _case === 1>>
<<include $eavesdropQuestInclude>> <!-- переменная $eavesdropQuestInclude заранее задаётся в начале квеста -->
<<else>>
<!-- Рандомные атмосферные фразы -->
<<set _phrases = [
"Whispers tell of a nobleman who vanishes from his manor every third night.",
"A masked stranger was seen counting coins in the alley behind the market.",
"They say a secret guild is training thieves in the abandoned granary.",
"Someone spotted a cart carrying crates marked with a royal seal, but no guards in sight.",
"I heard a merchant bribed the city watch to overlook certain shipments.",
"Rumor has it that the captain of the guard has a hidden ledger of names he keeps for blackmail.",
"People whisper about a strange tower where lights flicker even during the day.",
"A thief was caught with letters addressed to powerful citizens — some say they contain threats.",
"They say a scholar is searching for forbidden texts in the city archives.",
"Someone noticed a new blacksmith working only at night, forging oddly shaped weapons.",
"The baker’s apprentice was seen sneaking coins into his pocket late at night.",
"I overheard that a street performer carries coded messages for a secret organization.",
"Rumor has it that the city gates’ locks were recently tampered with.",
"A beggar claims he saw a noblewoman slip into the sewers carrying a chest.",
"They say a lantern-maker is embedding tiny notes in his lamps for unknown recipients.",
"Someone reported hearing strange chanting from the attic of the old inn.",
"The apothecary was spotted trading rare herbs with a cloaked figure under the moon.",
"A local bard tells tales of hidden tunnels beneath the tavern, now supposedly sealed.",
"They whisper that a foreign sailor left a map pointing to something valuable in the city.",
"A child claims he saw a figure with glowing eyes near the abandoned mill."]>>
<<gg>> <<= _phrases[random(0, _phrases.length-1)]>> <</gg>>
<</if>>
<<else>>
<!-- Если eavesdrop не активен, просто рандомные фразы -->
<<set _phrases = [
"Someone saw a hooded figure sneaking into the old mill when no one was watching.", "Rumor has it that the smith has been forging strange weapons that hum on their own.", "I heard the captain of the guard is recruiting spies disguised as street vendors.", "A noble’s ledger was stolen last week, and the thief hasn’t been found.", "They whisper that the tavern mistress knows secrets about half the city’s guilds.", "Someone claims the apothecary is experimenting with potions that grant unnatural strength.", "I overheard a merchant saying a shipment of rare coins vanished on the road to the south gate.", "People say the city watch is hiding prisoners in the old bell tower.", "A strange scholar was asking questions about forbidden rituals near the market.", "Rumor has it the bakery is receiving flour from a hidden underground source.", "I heard that the jailer has been secretly letting a few prisoners walk free for bribes.", "Someone saw a shadowy figure exchanging letters with the librarian after hours.", "They say a wealthy merchant’s daughter has run off with a foreign adventurer.", "I overheard guards talking about a spy disguised as a beggar on the streets.", "People whisper that the new city gates have secret compartments for smuggling goods.", "A stranger paid a fortune for a single jewel at the market yesterday.", "Rumor has it that a local bard knows the hidden passwords to the city vault.", "I heard the blacksmith once served a mysterious order and still keeps their secrets.", "Someone mentioned seeing flickering lights in the abandoned tower by the river at night."]>>
<<gg>> <<= _phrases[random(0, _phrases.length-1)]>> <</gg>>
<</if>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to bazaar" Bazaar>><</button>>
</span>
</div>
</div>
<div class="resizable imageMapObserve">
<img src="images/Backs/cVillage.jpg"
alt="Central Village"
usemap="#cVillage-image-map"
style="width:100vw; min-height:auto; max-width: 100%; object-fit:contain; display:block; margin:0; padding:0; overflow:hidden;"
>
</div>
<map name="cVillage-image-map">
<area data-passage="Guild" alt="Guild" title="Guild" coords="622,493,620,702,805,653,812,466" shape="poly">
<area data-passage="Garden" alt="Garden" title="Garden" coords="878,415,881,627,1078,622,1080,412" shape="poly">
<area data-passage="Inn" alt="Inn" title="Inn" coords="1205,502,1197,683,1395,734,1405,504" shape="poly">
<area data-passage="Port" alt="Port" title="Port" coords="1476,590,1441,810,1610,916,1682,609" shape="poly">
<area data-passage="Map" alt="Map" title="Map" coords="834,883,834,1073,1141,1073,1136,880" shape="poly">
</map><div class="resizable imageMapObserve">
<img src="images/Backs/rightCity.jpg"
alt="Right city"
usemap="#rightCity-image-map"
style=" width:100vw; min-height:auto; max-width: 100%; object-fit:cover; display:block; margin:0; padding:0; overflow:hidden;"
>
</div>
<map name="rightCity-image-map">
<area data-passage="brothel" alt="brothel" coords="13,396,20,910,495,822,499,443" shape="poly">
<area data-passage="laboratory" alt="laboratory" coords="633,479,630,798,830,757,832,493" shape="poly">
<area data-passage="Tawern" alt="Tawern" coords="954,511,959,705,1170,710,1163,521" shape="poly">
<area data-passage="gates" alt="gates" coords="1274,448,1277,676,1520,693,1517,452" shape="poly">
<area data-passage="Workshop" alt="workshop" title="workshop" coords="1712,418,1714,776,1915,978,1913,389" shape="poly">
</map><<if Cycle.check('time', 'nighttime')>>
<div class="passage-panel">
<nav class="market-tabs">
<<if $smuglerSpeak is true and $SmuglerSpoken is false>>
<div class="sidebar-button">[[I saw a smuggler in the corner of the gate|SmuglerTalk]]</div>
<</if>>
<div class="sidebar-button">[[To the main street|streets]]</div>
</nav>
</div>
<<else>>
<<goto "streets">>
<</if>>
<div class="resizable imageMapObserve">
<img src="images/Backs/leftCity.jpg"
alt="Left city"
usemap="#leftCity-image-map"
style=" width:100vw; min-height:auto; max-width: 100%; object-fit:cover; display:block; margin:0; padding:0; overflow:hidden;"
>
</div>
<map name="leftCity-image-map">
<area data-passage= "Court" alt= "Court" coords="119,509,102,897,413,876,428,560" shape="poly">
<area data-passage= "Prison" alt= "Prison" coords="833,617,815,844,1050,832,1050,647" shape="poly">
<area data-passage="Church" alt="Church" coords="1100,618,1103,806,1312,798,1305,611" shape="poly">
<area data-passage="Library" alt="Library" coords="1757,592,1776,927,1999,945,1990,578" shape="poly">
<area data-passage="streets" alt="streets" coords="720,913,695,1118,1096,1118,1089,908" shape="poly">
</map>
<<gg>><em>I approach the massive city gates, their tall oak doors looming overhead. Torches flicker along the walls, casting long shadows across the cobblestones. The air smells faintly of smoke, sweat, and the leather of worn harnesses. I carry only my few belongings, hoping to finally leave the city behind.
Two guards stand before me, spears in hand, their armor clanking as they shift their weight. The larger of the two steps forward, eyeing me up and down.</em><</gg>>
<br>
<<say 'Guard' >>Halt! Where do you think you’re going?<</say>>
<br>
<<gg>>I… I need to leave the city. I have business elsewhere.<</gg>>
<br>
<<say 'Guard' >>Business? You? What’s your name?<</say>>
<br>
<<gg>>I’m $name<</gg>>
<br>
<<gg>><em>The captain’s eyes narrow. He gestures toward a small wooden barrier.* You’re a slave. You have no papers. No one leaves the city without proper documentation. Not free men, not merchants, and certainly not someone like you.</em><</gg>>
<br>
<<gg>><em>My stomach twists. I am technically free — but without proof, they won’t let me pass.</em> I’m… free now. I’ve been released.<</gg>>
<br>
<<gg>><em>The smaller guard laughs, a harsh bark echoing off the gate walls.* Released? From who? Show us the document, or turn back. The law doesn’t care about intentions, only evidence.</em><</gg>>
<br>
<<gg>><em>I shift uneasily, feeling the weight of their armored gazes. The guard captain leans in slightly, his chainmail brushing my shoulder as he inspects me.</em><</gg>>
<br>
<<say 'Guard' >>And don’t try to charm us. Freedom isn’t a matter of pretty words or pleading. If you can’t produce proof, you’ll remain inside until your master — or a court — decides otherwise.<</say>>
<br>
<<gg>><em>My heart races. The gap between me and freedom feels wider than the city walls themselves. Sweat beads at my temples, and the slight jostle as the guards adjust their spears makes me flinch — their armor warm and clanging. I need a document. Something official. Or I’ll be trapped here forever.</em><</gg>>
<br>
<<gg>><em>The guards step back, their expressions hard but amused at my discomfort.</em><</gg>>
<br>
<<say 'Guard' >> Take your time. But remember, the gates won’t open for someone who carries no proof of liberty. Not today, not tomorrow.<</say>>
<br>
<<gg>><em>I glance at the towering gates, feeling the weight of chains I no longer wear — but that still bind me in the eyes of the law. My freedom exists only on paper… and I don’t have it yet.</em> <</gg>>
<br>
<<run $questsData.addRumor("slave_end", "The cost of freedom", ["I heard about a ritual of purification from bondage at the local church.", "At the bazaar, I overheard that at night, near the gate, I can meet a writer-smuggler who is sure to help me with my documents.", "The guard on the street told me about the mistress in prison. I think I should go there."], "Freedom ?, 100xp", "images/characters/freedomcost.jfif", "HighPriest", 1)>>
<<run $questsData.add(
"lvlUp",
"Free yourself from the title of slave",
"They banned leaving the city if you're a slave, even if you don't have an owner, you need to get documents proving that you're a free person. It would be nice to earn a little more money. Then I'll be able to sign the necessary documents at my table.",
"Access to map",
"images/characters/lavrius.jfif"
)>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to sewers" Sewers>><</button>>
</span>
</div>
</div>
<<set $GuardsNo to true>>
<<set $eavesdrop = 1>>
<<set $eavesdropQuestInclude to "bazaarEaves1">>
<<if Cycle.check('weekdays','Saturday') or Cycle.check('weekdays','Friday') or Cycle.check('weekdays','Sunday')>>
<<run setup.relationshipsModule.discoverLocation("ellin", "church")>>
--
<<if $churchRitual is false>>
<<if $GuardsNo is false and $churchInfo is false>>
<<gg>>I have nothing to do here yet.
<</gg>>
<<elseif $GuardsNo is true and $churchInfo is false>>
<<gg>><em>I hear hushed voices nearby, low murmurs that make my skin prickle.</em>
<</gg>>
<br>
<<say 'Priestess' >>…the liberation ritual must touch mind, body, and spirit… nothing left untouched…<</say>>
<br>
<<gg>><em>I freeze, heart thudding. Liberation ritual? I’ve heard tales of unusual ceremonies, but nothing so… explicit. The words hang in the air, tinged with a strange, almost teasing authority.</em>
<</gg>>
<br>
<<gg>><em>Two attendants pass by, whispering nervously.</em>
<</gg>>
<br>
<<say 'Attendant 1'>>They say it’s… revealing. That the initiate cannot hide anything. Not their thoughts… nor their form…<</say>>
<br>
<<say 'Attendant 2' >>I heard the priestess… touches the oil herself. They say the sensation lingers long after.<</say>>
<br>
<<gg>><em>I step back, heart racing, cheeks burning with a mixture of curiosity and shame. The idea of such a ritual — intimate, intense, and wholly unfamiliar — unsettles me, yet sparks a dangerous intrigue.
I don’t move forward. Not yet. Not until I understand what this will cost me… and what I might discover about myself in the process.</em>
<</gg>>
<br>
<<gg>><em>For now, it’s just whispers, glimpses, and a question I’m not yet ready to answer.</em><</gg>>
<<run $questsData.addFragment("slave_end", "I heard about a ritual of purification from bondage at the local church.")>>
<<run $questsData.add(
"churchStart",
"Undergo the ritual of liberation from bondage",
"At the local church, they can “free you from your chains.” I don't know what that means, but they talk about some kind of ritual. Maybe I need to go there.",
"Loosen chains?, 100xp",
"images/characters/priestess.jpg"
)>>
<<set $churchInfo to true>>
<<elseif $GuardsNo is true and $churchInfo is true and $churchRitual is false and $quests.get("slave_end").status is "completed" and $quests.get("churchStart").status is "active">>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "I am ready for the ritual (other routes will be blocked)" Ritual1>><</button>>
</span>
</div>
</div>
<<elseif $GuardsNo and $churchInfo and !$churchRitual and $quests.get("slave_end").status is "active">>
<<gg>><em>I am not ready for the ritual.</em><</gg>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "I need to explore all the options before choosing one." leftCity>><</button>>
</span>
</div>
</div>
<</if>>
<</if>>
<<else>>
<<gg>><em>The church is only open on Fridays and weekends.</em><</gg>>
<</if>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to left street" leftCity>><</button>>
</span>
</div>
</div>
<<gg>><em>I melt into the crowd at the market, pretending to study a basket of bruised apples while I listen. Voices rise and fall around me — the butcher shouting prices, a child laughing — but my attention is on two men tucked against a stall. I let my ear drift their way as if the wind carries their words...</em><</gg>>
<br>
<<say 'Merchant' >>He makes them like the real thing. Seal, ink, even the impressions. Nobody notices.<</say>>
<br>
<<say 'Craftsman' >>If he’s so good, what does he want in return?<</say>>
<br>
<<say 'Merchant' >>Not coin, at first. He wants a sample — a fingerprint from a free man. Just the pad, wrapped in wax. Takes it while the mark sleeps. Cleaner than stolen seals, they say. Papers read like a lord signed them.<</say>>
<br>
<<gg>><em>My hand tightens around the apple I’m not buying. I don’t move; I only listen.</em><</gg>>
<br>
<<say 'Craftsman' >>Sounds risky. Where does he meet?<</say>>
<br>
<<say 'Merchant' >>Near the gate on the right street. Night. Knock twice, wait for three slow taps back. He wears gloves. Goes by ‘the Smuggler’ or ‘the forger’ — depends who pays. He’s careful. One wrong move and you’re the one who gets marked.<</say>>
<br>
<<gg>><em>A stall owner nearby curses at a dropped basket. The two men fall silent and drift away. I stay still until the noise swallows the last words.
When the stall owner straightens his wares, I step out from under the awning. Nothing in my face gives away that I’ve been listening. The directions are tucked away now — small, furtive, and heavy with possibility.</em><</gg>>
<br>
<<set $eavesdrop to 0>>
<<set $smuglerSpeak to true>>
<<run $questsData.add(
"findContr",
"Find a smuggler",
"At the bazaar, I overheard that at night, near the gate, I can meet a writer-smuggler who is sure to help me with my documents.",
"Fake freedom papers, 100xp",
"images/characters/Smugler.jpg"
)>><<if $GuardTalk is true and $quests.get("mistGuard").status is "active">>
<<gg>><em>Freedom feels fragile without proof.
No chains bind me now, but the guards at the city gates see only the mark of a runaway slave.
So I go where I shouldn't - to the local prison, hoping to find someone willing to confirm that I'm no longer owned by anyone.
The guards eye me with suspicion as I approach the captain's quarters.
She's a striking woman with a sharp tongue and an even sharper gaze - the kind that notices everything, especially weakness.
When I tell her my story, she leans back in her chair and smirks.</em><</gg>>
<br>
<<say 'Captain' >>So... no owner, no papers, and you want us to just believe you?<</say>>
<br>
<<gg>>I'm telling the truth.<</gg>>
<br>
<<say 'Captain' >>Truth's cheap in this city. Tell you what - maybe you can help us settle something.<</say>>
<br>
<<gg>><em>She explains that new recruits are being trained to spot impostors - spies pretending to be slaves to sneak through the gates.
They need a "demonstration subject."
Someone who looks the part.</em><</gg>>
<br>
<<say 'Captain' >>You play the obedient type, they learn how to tell the difference. You help us, I'll sign your release papers myself.<</say>>
<br>
<<gg>><em>I hesitate for a moment...</em>
<</gg>>
<<run $questsData.addFragment("slave_end", "The guard on the street told me about the mistress in prison. I think I should go there.")>>
<br>
<<if $quests.has("slave_end") && $quests.get("slave_end").status is "completed">>
<div class="centered">
<div style="display: flex; justify-content: center; gap: 1em; margin-top: 2em;">
<span class="royal-button">
<<button "Think about it a little more" leftCity>><</button>>
</span>
<span class="royal-button">
<<button "Agree to become a test subject (Femdom content warning! You will no longer have the opportunity to choose other options (church or smuggler))." Prison1>><</button>>
</span>
</div>
</div>
<<else>>
<div class="centered">
<div style="display: flex; justify-content: center; gap: 1em; margin-top: 2em;">
<span class="royal-button">
<<button "I need to explore all the options before choosing one." leftCity>><</button>>
</span>
</div>
</div>
<</if>>
<<else>>
<<gg>><em> I don't understand why I came to prison. I think my brain has completely shut down...</em><</gg>>
<</if>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to left street" leftCity>><</button>>
</span>
</div>
</div>
<<gg>><em>They lead me into a small training yard behind the barracks.
Half a dozen recruits stand in a line, nervous and wide-eyed.
The captain tosses me a worn leather collar - prop, she says, for realism.</em><</gg>>
<br>
<<say 'Captain' >>Let's see how convincing you can be. Kneel.<</say>>
<br>
<<gg>><em>I obey.
It feels strange - humiliating, almost - but there's a faint thrill in the way the recruits shuffle, unsure whether to laugh or salute.
The captain circles me like a teacher correcting posture.</em><</gg>>
<br>
<<say 'Captain' >>See how he moves? Too clean. Real slaves hesitate, they flinch before they breathe.<</say>>
<br>
<<gg>><em>She gives me another order, this one absurd - to crawl to her and nuzzle against her boots, as if begging for a treat.
The recruits snicker, but the captain silences them with a glare.</em><</gg>>
<br>
<img src="images/slaveRank/feetLick.webp" class="scene-image">
<br>
<<say 'Captain' >>Discipline, recruits! Respect the act. He's teaching you more than you know.<</say>>
<br>
<<gg>><em>The "test" lasts far too long.
By the end, my knees ache, my pride thinner than parchment.
Still, the captain finally waves me upright with a laugh.</em><</gg>>
<br>
<img src="images/slaveRank/feetLick1.webp" class="scene-image">
<br>
<<say 'Captain' >>Enough. You've done your part - and better than some of my men. Honestly...
<em>She chuckles, stamping the parchment.</em>
You might be the most obedient slave I've ever met.<</say>>
<br>
<<gg>><em>She sits back down, crossing one leg over the other.
The recruits' eyes follow, hungry.
But she pays them no mind, instead motioning me closer.</em><</gg>>
<br>
<<say 'Captain' >>Since you've been such a good pet... why don't you show me your skills?<</say>>
<br>
<<gg>><em>Her tone is light, but her gaze is anything but.
I know what she wants - what she expects.
Slowly, I lower myself to the floor, crawling between her legs.
The recruits gasp as I nuzzle against her boots, then higher - up her calf, her thigh.
I can feel their eyes on me, but I focus on her, on the heat of her skin through the fabric.
When I reach her knee, she reaches down, tangling her fingers in my hair.</em><</gg>>
<br>
<<say 'Captain' >>Go on then... show me what a good slave you can be.<</say>>
<br>
<<gg>><em>I press my face against her inner thigh, inhaling deeply.
The scent of her arousal fills my nose, dizzying in its intensity.
Slowly, I drag my tongue along her skin, tasting her - musky and sweet.
<br><br>
The recruits shift uncomfortably, some blushing, others openly leering.
But I ignore them all, lost in the taste of my mistress, the weight of her hand guiding me higher.
<br><br>
When I reach her apex, she lifts her skirt with her free hand, baring herself to me.
I pause for a moment, taking in the sight - pink and glistening, flushed with need.
Then, with a soft moan, I lean in and run my tongue along her slit, savoring the taste of her desire.
<br><br>
The recruits erupt into whispers and groans, some even reaching down to adjust themselves.
But the captain remains still, her grip on my hair tightening as she guides me deeper.</em><</gg>>
<br>
<img src="images/slaveRank/feetLick2.webp" class="scene-image">
<br>
<<say 'Captain' >>That's it... show them what an obedient little slave you are...<</say>>
<br>
<<gg>><em>I do as I'm told, licking and suckling at her folds until she's trembling beneath me.
Only when she gives a sharp tug on my hair do I pull back, panting softly.</em><</gg>>
<br>
<img src="images/slaveRank/feetLick3.webp" class="scene-image">
<br>
<<say 'Captain' >>Enough. You've made your point...<</say>>
<br>
<<gg>><em>She stands, straightening her skirts with a satisfied smirk.
The recruits gape at her, shock and awe written across their faces.
But she pays them no mind, instead turning to me with a grin.</em><</gg>>
<br>
<<say 'Captain' >>Well done... you've certainly earned your freedom.<</say>>
<br>
<<linkreplace "Stand up">>
<<gg>><em>She hands me a folded document, the city's seal pressed in red wax.
It reads:
"Served under the command of the City Watch in loyal capacity. Free to move within and beyond the walls."
I tuck it into my pocket with a nod of thanks, still tasting her on my tongue.
The captain watches me go with a smirk, her eyes trailing along my form appreciatively.</em><</gg>>
<br>
<<say 'Captain' >>So... free at last. What will you do now, I wonder?<</say>>
<br>
<<gg>><em>I can't help but meet her gaze, heart pounding.
In this city of secrets and desires, even freedom comes at a price.</em><</gg>>
<br>
<<run $questsData.setStatus("sexMari", "failed")>>
<<run $questsData.setStatus("churchStart", "failed")>>
<<run $questsData.setStatus("mistGuard", "completed")>>
<<run $questsData.setStatus("forgedFreedom", "failed")>>
<<run $questsData.setStatus("findContr", "failed")>>
<<set $prisonCheck to true>>
<<set $playerXP += 100>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to left street" leftCity>><</button>>
</span>
</div>
</div>
<</linkreplace>>
<<set _randBeg = random(1, 7)>>
<<switch _randBeg>>
<<case 1>>
<img src="images/slaveRank/sleep1.webp" class="scene-image">
<<gg>> <em>In my dream, I imagined what unique women were handing my penis.</em><</gg>><br>
<<case 2>>
<img src="images/slaveRank/sleep2.webp" class="scene-image">
<<gg>> <em>I remember how I undressed my beautiful women...</em><</gg>><br>
<<case 3>>
<img src="images/slaveRank/sleep3.webp" class="scene-image">
<<gg>> <em>I dreamt that my maid was cleaning my palace again.</em><</gg>><br>
<<case 4>>
<img src="images/slaveRank/sleep4.webp" class="scene-image">
<<gg>> <em>My girls could never refuse me, even on the most “tight” issue.</em><</gg>><br>
<<case 5>>
<img src="images/slaveRank/sleep5.webp" class="scene-image">
<<gg>> <em>I remember my assistants who prepared a backup plan for me. </em><</gg>><br>
<<case 6>>
<img src="images/slaveRank/sleep6.webp" class="scene-image">
<<gg>> <em>My women were so gorgeous...</em><</gg>><br>
<<case 7>>
<img src="images/slaveRank/sleep7.webp" class="scene-image">
<<gg>> <em>Oh, I miss the view from my room...</em><</gg>><br>
<</switch>>
<<editcycle 'weekdays' change +1>>
<<editcycle 'time' reset>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Wake up" Sewers>><</button>>
</span>
</div>
</div>
<<gg>><em>The shadows of the city gate stretch long under the lantern’s flicker. A figure crouches on a crate, fingers stained with ink, papers scattered like leaves in a storm.</em><</gg>>
<br>
<<smuggler>>You’re the one short of coin and long of nerve. Speak quickly — these gates don’t forgive lingering.<</smuggler>>
<br>
<<gg>><em>I step closer, heart thudding, trying to mask the tremor in my hands. “I… I need papers. Ones that will pass inspection,” I murmur.</em><</gg>>
<br>
<<smuggler>>I can make it look the part, seals and all. But I need proof — a sample from someone who truly holds it. Not coin, not loyalty. Just a trace only a free person can give.<</smuggler>>
<br>
<<gg>><em>My stomach twists. A trace only a free person can give… How am I supposed to get that? The words hang heavy, each one a challenge, a weight pressing against my chest.</em><</gg>>
<br>
<<gg>>And if I fail?<</gg>>
<br>
<<smuggler>>Then return with nothing, and leave faster than you arrived. One mistake, and the city remembers chains.<</smuggler>>
<br>
<<gg>><em>I glance at the gate, lantern light glinting on the cobblestones. Freedom feels close, yet precarious. Every decision seems to echo louder than the last.</em><</gg>>
<br>
<<gg>>Where do I meet you?<</gg>>
<br>
<<smuggler>>Here, at night. Knock twice, wait for three slow taps back. No bells, no torches. Gloves on my hands, wax and paper ready. Bring nothing obvious.<</smuggler>>
<br>
<<gg>><em>I swallow, cheeks warm, hands tight on my cloak. I nod. “I understand. I’ll be careful.” The Smuggler inclines his head. Shadow and light play across his ink-stained hands, steady and patient.</em><</gg>>
<br>
<<gg>><em>For now, I linger in the gate’s shadow, mind racing. The path ahead is dangerous, the reward uncertain, but the promise of freedom — real, unquestionable freedom — is too tempting to ignore.</em><</gg>>
<<set $SmuglerSpoken to true>>
<<run $questsData.add(
"forgedFreedom",
"Obtain Fake Freedom Papers",
"A scrivener at the city gates offers to create convincing papers declaring me free — but I must obtain a sample from someone who truly holds such authority. I'm sure someone at the bazaar knows where I can get what I need.",
"Fake freedom papers, 100xp",
"images/characters/Smugler.jpg"
)>>
<<run $questsData.remove("findContr")>>
<<run $questsData.addFragment("slave_end", "At the bazaar, I overheard that at night, near the gate, I can meet a writer-smuggler who is sure to help me with my documents.")>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to gates" gates>><</button>>
</span>
</div>
</div><<gg>><em>I drift along the crowded stalls, pretending to inspect goods, though every ear is tuned to whispers of opportunity.</em><</gg>>
<br>
<<gg>>I need someone who can provide real papers, someone careful with wax and ink. Where might such a person linger in this throng?<</gg>>
<br>
<<say 'Fruit Vendor'>>Looking for someone influential, eh? That’s not common talk for a street like this.<</say>>
<br>
<<gg>><em>I murmur a vague thanks, pretending to study the fruit. East end, he said… perhaps near the fountain or the apothecary.</em><</gg>>
<br>
<<gg>><em>Weaving past a stall of cloth, I catch snippets of gossip from merchants arguing over deliveries upstairs.</em><</gg>>
<br>
<<say 'Cloth Merchant'>>Lady Maris, you say? She meets only those she trusts, mostly at night. Public eyes are never welcome.<</say>>
<br>
<<gg>><em>Her name fits the description I heard. Could she be the scrivener I seek?</em><</gg>>
<br>
<<gg>><em>Lingering near a spice stall, the aroma of cumin and saffron masks my intent. Two apprentices whisper about someone in the east alley who handles important papers.</em><</gg>>
<br>
<<say 'Spice Apprentice'>>If you want to find her… she lives in the upper chambers of the house behind the tavern at the end of Candle Alley. There’s a hidden passage through the back of the tavern.<</say>>
<br>
<<gg>><em>My pulse quickens. Candle Alley, side door, hidden passage… the details settle into my mind like puzzle pieces.</em><</gg>>
<br>
<<gg>><em>The chill of risk runs down my spine, yet the path is clear. Tonight, I’ll slip through Candle Alley, past shuttered windows and stacked crates, enter the tavern’s back passage silently, and climb to her chambers to secure the sample I need.</em><</gg>>
<<set $influenceFind to true>>
<<run $questsData.add(
"sexMari",
"Sneak into Lady Maris' house",
"I asked people at the bazaar and got information about Lady Maris's place of residence. I will need to come to the tavern at night.",
"Freedom papers, 100xp",
"images/characters/maris.jpg"
)>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to bazaar" Bazaar>><</button>>
</span>
</div>
</div>
<<if Cycle.check('time', 'nighttime')>>
<div class="passage-panel">
<nav class="market-tabs">
<div class="sidebar-button">[[Drink with...(cost 10 coins)|drink]]</div>
<<if $quests.has("slave_end") && $quests.get("slave_end").status is "completed">>
<<if $influenceFind is true and $marisSex is false and $quests.get("sexMari").status is "active">>
<div class="sidebar-button">[[Make my way into Lady Maris's house|InfluenceSex]]</div>
<<else>>
<</if>>
<<else>>
<div class="sidebar-button">[[I need to open all options before I choose this one |Tawern]]</div>
<</if>>
<div class="sidebar-button">[[Back to the right streets|rightCity]]</div>
</nav>
</div>
<<else>>
<<gg>><em>What do I do during the day at the tavern? It's only open at night.</em><</gg>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to right street" rightCity>><</button>>
</span>
</div>
</div>
<</if>>
<<if Cycle.check('time', 'nighttime') and Cycle.check('weekdays', 'Saturday')>>
<<run setup.relationshipsModule.discoverLocation("ellin", "tawern")>>
<</if>><div class="passage-panel">
<nav class="market-tabs">
<<if setup.money.get() >= 10>>
<div class="sidebar-button">[[Drink Alone|DrinkAlone]]</div>
<<if Cycle.check('weekdays','Sunday') or Cycle.check('weekdays','Saturday')>>
<<if $forgedaughter >= 1 and $EllenInteractionDrink == 1 and Cycle.check('time', 'nighttime')>>
<div class="sidebar-button">[[Drink with Ellin|EllinDrink]]</div>
<</if>> <</if>>
<</if>>
<div class="sidebar-button">[[Back to the right streets|rightCity]]</div>
</nav>
</div>
<<gg>><em>I slip through the shadows of the noblewoman's manor, my heart pounding in my chest. The smuggler's orders were clear - break into Maris' private quarters and steal her husband's ledgers. But as I creep towards her bedchamber, I can't shake the thought that there's more to this woman than meets the eye.
The door creaks open, revealing a lavish room bathed in moonlight. Perfume lingers in the air, sweet and alluring. I tiptoe to the desk, fingers brushing against the leather-bound books. Just as I'm about to grab them, a voice cuts through the darkness.</em><</gg>>
<br>
<<maris>>Lothair? Is that you, darling?<</maris>>
<br>
<<gg>><em>I freeze, my breath catching in my throat. Lady Maris sits up in bed, her nightgown slipping off one creamy shoulder. She reaches for the candle beside her, the flickering light illuminating her face. Her eyes widen in surprise and recognition.</em><</gg>>
<br>
<<maris>>Who are you? What are you doing in my chambers?<</maris>>
<br>
<<gg>><em>I stumble over my words, my mind racing. </em><</gg>>
<br>
<<gg>>I... I'm sorry, my lady. I thought... I didn't mean to disturb you.<</gg>>
<br>
<<gg>><em>She climbs out of bed, the candle held high. She takes a step closer, her gaze raking over my form. </em><</gg>>
<br>
<<maris>>You're not my husband's man, are you? Tell me the truth, or I'll raise the alarm!<</maris>>
<br>
<<gg>><em>I see the fear in her eyes, the tension in her stance. But there's something else too - a hint of curiosity, of intrigue. I take a deep breath, deciding to play along.</em><</gg>>
<br>
<<gg>>No, my lady. I'm not Lothair. But I mean you no harm. I only wish to take the ledgers and leave, unseen.<</gg>>
<br>
<<gg>><em>She stares at me for a long moment, her chest heaving with each breath. Then, to my surprise, she takes another step forward. The candlelight casts shadows across her face, but I can see the hunger in her eyes.</em><</gg>>
<br>
<<maris>>You're not... like the others. You're different. <em>She reaches out, tracing a finger along my jaw.</em> I've been waiting for someone... for a sign.<</maris>>
<br>
<<gg>><em>I lean into her touch, my heart racing. </em>
"Waiting for what, my lady?"<</gg>>
<br>
<<gg>><em>She bites her lip, her eyes flicking to the door. </em><</gg>>
<br>
<<maris>>For someone who can help me escape this gilded cage. Lothair... he's not the man I married. I need someone to save me from this empty marriage.<</maris>>
<br>
<<gg>><em>Her words are a siren's call, drawing me in. I can feel the heat of her body, the way her breath hitches as she speaks. I know I should leave, but I'm drawn to her, to the secret she's kept hidden for so long.</em><</gg>>
<br>
<<gg>>What do you need me to do? <em>I ask, my voice barely above a whisper.</em><</gg>>
<br>
<<gg>><em>She smiles, a slow, sultry curve of her lips. </em><</gg>>
<br>
<<maris>>First, you must swear to keep my secret. You cannot tell a soul what you've seen here tonight.<</maris>>
<br>
<<gg>>I swear it, my lady. Your secret is safe with me.<</gg>>
<br>
<<gg>><em>She leans in close, her lips brushing against my ear. </em><</gg>>
<br>
<<maris>>Good. Then perhaps we can come to an... arrangement.<</maris>>
<br>
<<gg>><em>Her hands slide down my chest, toying with the buttons of my shirt. I inhale sharply, my skin prickling with desire. She takes a step back, holding the candle high.</em><</gg>>
<br>
<<maris>>Take off your clothes, <em> she commands, her voice low and husky. </em> Let me see what sort of man has snuck into my chambers tonight.<</maris>>
<br>
<<gg>><em>I hesitate for only a moment before complying, shedding my shirt and breeches until I stand before her in nothing but my smallclothes. Her eyes rove over my body, drinking in every inch of exposed skin.</em><</gg>>
<br>
<<maris>>Well, it seems Lothair has been hiding more than his ledgers.<</maris>>
<br>
<<gg>><em>She sets the candle aside and reaches for me, her hands exploring the planes of my chest, my abdomen. I gasp at her touch, my body responding to her every caress.</em><</gg>>
<br>
<<maris>>Please, <em> she breathes </em> show me what it's like to be truly desired. To be wanted for more than just my dowry and title.<</maris>>
<br>
<<gg>><em>I gather her in my arms, pressing my lips to hers in a searing kiss. She melts against me, her body molding to mine like she was made for it. We tumble onto the bed, a tangle of limbs and heated kisses.</em><</gg>>
<br>
<img src="images/slaveRank/maris1.webp" class="scene-image">
<br>
<<maris>> <em>She breaks away, panting heavily. </em> Take me, <em> she whispers</em> make me yours.<</maris>>
<br>
<<gg>><em>I don't need to be told twice. I tug at her nightgown, baring her breasts to the cool air. I dip my head, taking one rosy nipple into my mouth. She arches beneath me, a low moan escaping her lips.</em><</gg>>
<br>
<img src="images/slaveRank/maris2.webp" class="scene-image">
<br>
<<maris>>Oh God, <em>she gasps,</em> yes... just like that.<</maris>>
<br>
<<gg>><em>I lavish attention on her breasts, alternating between soft licks and hard sucks. She writhes beneath me, her nails raking down my back. I can feel her desire building, the heat of her core calling to me.
<br>
I trail my hand down her belly, my fingers dipping into her slick folds. She bucks against me, a high keening sound escaping her throat. I work her with my fingers, teasing her until she's shaking with need.</em><</gg>>
<<maris>>Please, <em> she begs, </em>I need you inside me.<</maris>>
<br>
<<gg>><em>I don't hesitate. I shove down my smallclothes and position myself at her entrance. With one swift thrust, I'm inside her, buried to the hilt in her tight heat.</em><</gg>>
<br>
<img src="images/slaveRank/maris3.webp" class="scene-image">
<br>
<<maris>>Oh fuck, <em>she cries out, her walls clenching around me. </em> You feel so good.<</maris>>
<br>
<img src="images/slaveRank/maris4.webp" class="scene-image">
<br>
<<gg>><em>I start to move, setting a slow and steady rhythm. She meets each thrust with a roll of her hips, matching me beat for beat. Our bodies move together in perfect synchronicity, lost in a haze of pleasure.
<br>
I lean down, capturing her lips in another searing kiss. My tongue delves into her mouth, tangling with hers in a dance as old as time. She tastes of honey and wine, a heady combination that goes straight to my head.
<br>
I can feel my climax building, the pressure coiling in my belly. I break the kiss, burying my face in her neck.</em><</gg>>
<br>
<img src="images/slaveRank/maris5.webp" class="scene-image">
<br>
<<maris>>Come with me. I want to feel you come undone beneath me.<</maris>>
<br>
<<maris>><em>She moans, her head tossing from side to side. </em> Yes, <em>she hisses,</em> come inside me... fill me up...<</maris>>
<br>
<<gg>><em>Her words push me over the edge. With one final thrust, I spill myself inside her, my seed coating her walls. She comes undone beneath me, her body shaking with the force of her release.
We collapse together, chests heaving and skin slick with sweat. She pulls me close, burying her face in my chest.</em><</gg>>
<br>
<img src="images/slaveRank/maris6.webp" class="scene-image">
<br>
<<maris>>That was... incredible<</maris>>
<br>
<<gg>><em>I stroke her hair, pressing a kiss to her forehead.</em> You're incredible.<</gg>>
<br>
<<gg>><em>We lay like that for a long while, basking in the afterglow of our passion. But eventually, reality comes crashing back in.</em><</gg>>
<br>
<<maris>>We can't... this can't happen again,<em> she whispers, her voice thick with regret.</em> If Lothair finds out... if anyone finds out...<</maris>>
<br>
<<gg>><em>I nod, understanding her fears all too well. I know. But I won't forget this night. Or you.</em><</gg>>
<br>
<<maris>><em>She smiles sadly, cupping my face in her hand.</em> Neither will I.<</maris>>
<br>
<<gg>><em>The room still smells of perfume and candle smoke. My pulse hasn’t settled; neither has hers. The silk sheets are tangled, the faint mark of her seal ring pressed against my wrist like a brand of fate.</em><</gg>>
<br>
<<maris>>You shouldn’t have been here… but now that you are, we both have something to lose.<</maris>>
<br>
<<gg>><em>Her voice is low — more weary than angry. She crosses the room, bare feet silent on the rug, and pulls open a drawer. Inside lies a small chest of seals, inks, and wax sticks. She hesitates only once before lighting the candle again.</em><</gg>>
<br>
<<maris>>Give me your papers.<</maris>>
<br>
<<gg>><em>I hand her the forged documents — half-finished, the ink still dull, waiting for a mark that makes lies into truth. She studies them for a long moment, then glances at me — not with fear, but with a resigned understanding.</em><</gg>>
<br>
<<maris>>If I press this seal, it never happened. You never came here. Do you understand?<</maris>>
<br>
<<gg>><em> I nod. Words would ruin it.
<br>
She melts the wax, the scent of honey and smoke filling the air. The seal descends — slow, deliberate — and when she lifts it, the crest of her house gleams in deep red. Elegant, flawless, damning.</em><</gg>>
<br>
<<maris>>Go. Before my husband returns. I love you.<</maris>>
<br>
<<gg>><em>I kissed her goodbye. I take the papers carefully, feeling the faint warmth of the fresh wax. My fingers tremble — not from guilt, but from the sharp edge of something dangerously close to freedom.</em><</gg>>
<br>
<<gg>><em>As I slip out through the side door, the quiet hum of the city greets me again. Behind me, a noblewoman hides her secret. In my hand, forged freedom glows faintly in red wax.</em><</gg>>
<<set $marisSex to true>>
<<run $questsData.remove("forgedFreedom")>>
<<run $questsData.setStatus("sexMari", "completed")>>
<<run $questsData.setStatus("mistGuard", "failed")>>
<<run $questsData.setStatus("churchStart", "failed")>>
<<run $questsData.setStatus("forgedFreedom", "failed")>>
<<set $playerXP += 100>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to tawern" Tawern>><</button>>
</span>
</div>
</div>
<<gg>><em>I return to the church — the place where I first heard the whispers about the liberation ritual. This time my steps sound different. Heavier. More deliberate.</em><</gg>>
<br>
<<gg>><em>The air inside the ancient church was thick with the scent of burning incense, its sweet, earthy tendrils curling lazily around the flickering candlelight. The flames cast long, wavering shadows across the rough-hewn stone walls, their golden glow barely piercing the oppressive dimness. The cold seeped up through the flagstones, biting at the soles of my bare feet as I stood before the altar, my breath misting in the chill. My chest rose and fell in shallow, uneven bursts, the weight of the moment pressing down like a physical force.
Before me stood the priestess, her presence commanding yet strangely tender. The deep crimson of her robes clung to her curves, the fabric whispering against the stone floor as she moved closer. The scent of sandalwood and something darker—something primal—radiated from her, wrapping around me like an unseen hand. Her gaze was piercing, yet not unkind, her dark eyes holding them captive as she stepped into my space, the hem of her robe brushing against my bare legs. A shiver raced down my spine, my skin prickling with something between fear and longing.
My hands trembled as I reached out, fingers barely grazing the heavy fabric of her robes. The priestess didn’t pull away. Instead, she tilted her head slightly, watching as my touch grew bolder, my breath hitching when the pads of my fingers met the warmth of her thigh beneath the cloth. The air between them crackled, charged with something unspoken—something sacred and profane all at once.
Then, her hand was on my cheek, her palm warm, her thumb grazing my lower lip with deliberate slowness. My eyelids fluttered, my pulse hammering in my throat as she leaned in, her breath ghosting over my skin.
</em><</gg>>
<br>
<<priest>>Trust me.<</priest>>
<br>
<<gg>><em>The words sent a jolt through me, my knees nearly buckling. I had spent so long under the yoke of another’s will—had been broken, reshaped, forced to obey. But this was different. This was a choice. My breath stuttered as I let their eyes fall shut, my body swaying toward hers like a flower bending toward the sun.
She guided me down with a gentle pressure on their shoulders, the stone floor cold and unyielding beneath their knees. The priestess loomed over them, her presence both a shelter and a storm. I could feel the heat of her body, the way her breath fanned against the shell of my ear as she leaned in, her lips brushing the sensitive skin just below.</em><</gg>>
<br>
<<priest>>You’ve carried this weight for so long.<</priest>>
<br>
<<gg>><em>Her fingers tracing the raised lines of old scars along my back. Each touch was a brand, a reminder of pain transformed into something else—something that made my skin burn and breath catch.</em><</gg>>
<br>
<<priest>>But not anymore.<</priest>>
<br>
<img src="images/slaveRank/priest1.webp" class="scene-image">
<br>
<<gg>><em>A whimper escaped me as her hands slid lower, her palms mapping the contours of my waist before gripping my hips, pulling my back against her. My resistance crumbled like ash, my body arching into her touch, my head falling back against her shoulder. The priestess’s lips found the nape of my neck, her teeth grazing the tender flesh just enough to make them gasp.</em><</gg>>
<br>
<<priest>>Let go.<</priest>>
<br>
<<gg>><em>Her fingers slipped beneath the rough-spun fabric of my tunic, calloused yet impossibly gentle as they traced the dip of my spine, the curve of my waist. Breath hitched, my body trembling as she guided me toward the altar, the cold stone a stark contrast to the fire building beneath my skin. The priestess’s hands were everywhere—firm, demanding, yet never cruel. She pushed me down, my chest pressing against the altar’s surface, my fingers splaying against the smooth stone as if searching for purchase in a world that had suddenly tilted.
The priestess’s robes whispered as she unfastened them, the fabric pooling at her feet. My breath stuttered as she stepped free, her body bathed in the flickering candlelight. She was all curves and shadows, her skin golden in the dim glow, her breasts full and heavy, her thighs thick with power. My gaze raked over her, hungry and desperate, my lips parting as she straddled them, her weight settling over my hips.
Her hands found my wrists, pinning me to the altar as she leaned down, her lips crashing into mine in a kiss that was all teeth and tongue and demand. I moaned into her mouth, my body arching helplessly as her hips began to roll against theirs, slow and deliberate. The friction was maddening, the drag of her bare pussy against their clothed body a torment they couldn’t escape.</em><</gg>>
<br>
<img src="images/slaveRank/priest2.webp" class="scene-image">
<br>
<<priest>>You’re free now.<</priest>>
<br>
<<gg>><em>She growled against their lips, her voice rough with desire. Her hands slid up, her fingers tangling in their hair, yanking just enough to make their scalp sting</em><</gg>>
<br>
<<priest>>No chains. No masters. Just this.<</priest>>
<br>
<<gg>><em>I whimpered, my hips jerking up, seeking more, needing more. She rewarded me with a sharp bite to my lower lip, her tongue soothing the sting before her mouth trailed down my throat, her teeth scraping over my pulse point.</em><</gg>>
<br>
<img src="images/slaveRank/priest3.webp" class="scene-image">
<br>
<<priest>>Cum for me.<</priest>>
<br>
<<gg>><em>She commanded, her breath hot against my ear. Her hips snapped forward, grinding down with punishing precision, her fingers digging into my skin hard enough to bruise. My vision blurred, my body tightening like a drawn bow, every nerve alight with fire. The church faded away—there was only her, only the slick heat of her body, the iron grip of her hands, the dark promise in her voice.
A broken cry tore from my throat as I shattered, my back arching off the altar, my cock throbbing as I spilled into their trousers, my release wrung from my in shuddering waves. The priestess didn’t stop, her movements growing more insistent, her breath ragged as she chased her own pleasure, her nails raking down my chest.</em><</gg>>
<br>
<<priest>>Give it to me. All of it.<</priest>>
<br>
<<gg>><em>I sobbed, my body convulsing beneath hers, my fingers clawing at the stone as she rode them through the last shuddering pulses of my orgasm. Only when my limbs went slack did she slow, her own breath coming in harsh gasps as she finally stilled, her forehead pressing to mine.
For a long moment, there was only silence—the sound of my ragged breathing, the distant drip of wax from the candles, the faint crackle of the incense. The priestess’s lips brushed my forehead, her touch almost reverent now.</em><</gg>>
<br>
<img src="images/slaveRank/priest4.webp" class="scene-image">
<br>
<<priest>>You’re mine now... <br><br>
And I am yours.<</priest>>
<br>
<img src="images/slaveRank/priest5.webp" class="scene-image">
<br>
<<gg>><em>The words settled over me like a vow, heavy and inescapable. My chest ached, my body still trembling with the aftermath of pleasure and something deeper—something that felt dangerously like devotion.
<br>
The ritual was complete. And nothing would ever be the same.</em><</gg>>
<br>
<<gg>><em>After a long moment of silence, she finally pulled back slightly, her eyes meeting mine with a calm, measured intensity. The weight of the ritual still lingered, heavy in my chest, but beneath it, a new clarity had taken root.</em><</gg>>
<br>
<<priest>>Here. These are yours now.<</priest>>
<br>
<<gg>><em>She handed me a sealed parchment, the official crest of the city stamped in wax at the top. My hands trembled as I unfolded it, scanning the elegant script that declared me a free person at last. The chains of my past life, both literal and figurative, felt lighter somehow.</em><</gg>>
<br>
<<gg>><em>For the first time in my life, I could breathe without fear. The ritual had changed more than my status—it had carved a quiet strength into my bones. I tucked the papers safely into my satchel, my heart pounding not from the ritual alone, but from the promise of a future that was finally mine to claim.</em><</gg>>
<br>
<<set $churchRitual to true>>
<<run $questsData.setStatus("sexMari", "failed")>>
<<run $questsData.setStatus("mistGuard", "failed")>>
<<run $questsData.setStatus("churchStart", "completed")>>
<<run $questsData.setStatus("forgedFreedom", "failed")>>
<<run $questsData.setStatus("findContr", "failed")>>
<<set $playerXP += 100>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Leave the church" leftCity>><</button>>
</span>
</div>
</div>
<div class="resizable imageMapObserve">
<img src="images/Backs/hiddenhouse.jpg"
alt="Hidden house"
usemap="#hiddenhouse-image-map"
style=" min-width:85vw; min-height:auto; object-fit:cover; display:block; margin:0; padding:0; overflow:hidden;"
>
</div>
<map name="hiddenhouse-image-map">
<area data-passage="hiddendoor" alt="door" coords="724,629,723,458,876,455,876,630" shape="poly">
</map>
<div class="support-panel">
<div class="support-header">
<h2>Enter Patreon code</h2>
</div>
<div class="support-desc">
Access bonus content only by entering Patreon code.
</div>
<div class="support-row">
<input type="text" id="player-code-input" placeholder="Code">
<button id="player-code-submit" class="support-button">Check code</button>
</div>
<div id="support-dialog-input-result" class="support-result"></div>
<div class="support-hint">
The code is only available on Patreon.
</div>
<div class="support-row" style="margin-top:12px;">
<button id="back-to-map" class="support-button">Back to map</button>
</div>
</div>
<style>
/* Quest / Support code panel — parchment + bronze */
.support-panel {
max-width: 760px;
margin: 1.2rem auto;
background: linear-gradient(180deg, #2a1b12 0%, #21140d 100%);
border: 3px solid #5a2b17;
border-radius: 12px;
box-shadow: 0 6px 18px rgba(0,0,0,0.6), inset 0 0 24px rgba(150,90,50,0.04);
color: #efe4d3;
font-family: "IM Fell English", serif;
padding: 18px;
position: relative;
overflow: hidden;
}
.support-panel::before{
content: "✦";
position: absolute;
top: -12px;
left: 16px;
font-size: 20px;
color: #caa16a;
text-shadow: 0 0 8px rgba(200,150,90,0.25);
}
.support-header { display:flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.support-header h2 { margin: 0; font-family: "Cinzel", serif; font-size: 1.05rem; color: #ffdfae; letter-spacing: 0.8px; }
.support-desc { font-size: 0.9rem; color: #e7d7c4; margin-bottom: 12px; line-height: 1.4; }
.support-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.support-row input[type="text"]{
background: linear-gradient(180deg, rgba(255,255,255,0.02), rgba(0,0,0,0.06));
border: 2px solid rgba(170,100,60,0.18);
padding: 10px 12px;
border-radius: 8px;
color: #efe4d3;
font-family: "Cinzel", serif;
min-width: 240px;
flex: 1 1 320px;
box-shadow: inset 0 2px 6px rgba(0,0,0,0.45);
outline: none;
transition: box-shadow .12s ease, border-color .12s ease, transform .06s ease;
}
.support-row input[type="text"]::placeholder{ color: #cdbfa8; font-style: italic; }
.support-row input[type="text"]:focus{ border-color: #c79b63; box-shadow: 0 0 12px rgba(200,140,70,0.12); transform: translateY(-1px); }
.support-button {
background: linear-gradient(180deg, #7a4a2b, #5a311d);
border: 2px solid #6a3d22;
color: #fff0d8;
padding: 10px 14px;
border-radius: 8px;
cursor: pointer;
font-family: "Cinzel", serif;
font-weight: 600;
letter-spacing: 0.6px;
box-shadow: 0 6px 12px rgba(30,10,5,0.45);
transition: transform .08s ease, box-shadow .12s ease;
flex: 0 0 auto;
}
.support-button:hover{ transform: translateY(-2px); box-shadow: 0 10px 18px rgba(30,10,5,0.5); }
.support-button:active{ transform: translateY(0); }
.support-result { margin-top: 12px; padding: 12px; border-radius: 8px; background: linear-gradient(180deg, rgba(255,255,255,0.01), rgba(0,0,0,0.04)); color: #efe5d6; min-height: 40px; font-size: 0.95rem; box-shadow: inset 0 1px 0 rgba(255,255,255,0.02); }
.support-result.success { border-left: 3px solid #8fb96a; color: #eaf6df; background: linear-gradient(180deg, rgba(143,185,106,0.06), rgba(0,0,0,0.03)); }
.support-result.error { border-left: 3px solid #c85a4a; color: #ffe8e5; background: linear-gradient(180deg, rgba(200,80,70,0.05), rgba(0,0,0,0.03)); }
.support-hint { margin-top:8px; font-size:0.82rem; color: #d6c6b3; }
@media (max-width: 520px) { .support-row { flex-direction: column; align-items: stretch; } .support-button { width: 100%; } }
</style>
<img src="images/masks/masks1.webp" class="scene-image">
<br>
<<if $masksRitual is false>>
<br>
<<cultist>>Congratulations. You have joined the ranks of the secret cult of masks. Put on the mask lying on the table to your left.<</cultist>>
<br>
<<linkreplace "Put on the mask">>
<<gg1>>What is this place?<</gg1>> <br>
<<cultist>>A sanctuary for those who seek to explore the depths of sensation, to strip away the mundane and touch the sublime. The Veiled Moth Society.<</cultist>><br>
<<gg1>>A cult?<</gg1>> <br>
<<gg1>><em>He’d chuckled, a soft, dry sound.</em><</gg1>> <br>
<<cultist>>A fraternity. A collective. We believe that true understanding, true power, lies not in denying desire, but in mastering it through total immersion. We shed our names, our faces, our pasts. Here, we are only what we feel.<</cultist>><br>
<<gg1>><em>He’d led me through rooms that had so many naked people, I had never seen that many. They were all kissing each other, touching each other, eating each other... fucking each other... </em><</gg1>> <br>
<img src="images/masks/masks2.webp" class="scene-image">
<br>
<<gg1>>It’s… intense.<</gg1>> <br>
<<gg1>><em>My skin prickling with a mixture of fear and a dark, unwelcome thrill.</em><</gg1>> <br>
<<cultist>>Intensity is the point.<</cultist>><br>
<<gg1>><em>Cultist said, stopping before a pair of immense, carved oak doors.</em><</gg1>><br>
<<cultist>>Behind these doors, the Unveiling is commencing. A ritual of initiation, of release. You may observe. You may leave. The choice has been, and will always be, yours.<</cultist>><br>
<<gg1>><em>He’d opened the door, and the wave of heat and sound and scent had hit me. </em><</gg1>><br>
<img src="images/masks/masks3.webp" class="scene-image">
<br>
<<gg1>><em>That’s when he’d asked his question.</em><</gg1>><br>
<<cultist>>Do you yield to the sensation, or do you fight it?<</cultist>><br>
<<gg1>><em>Now, back in the throbbing heart of the chamber, his question hung in the air. My eyes were glued to the new view. A naked woman sat on top of a man, their masks painted with pleasure, their eyes fixed on something. But... a little further away... a man was pounding a woman right on the table, just like that, without shame, taking her roughly, like a beast. She squirmed, screamed, and moaned, holding on to everything around her, the wall, the table, just so she wouldn't fly away from his movements. People in masks and black robes watched them, and behind them, near the door, stood a completely naked woman...</em><</gg1>><br>
<img src="images/masks/masks4.webp" class="scene-image">
<br>
<<cultist>>They are not merely coupling<</cultist>><br>
<<gg1>><em> Cultist said, his voice pulling me from my trance.</em><</gg1>><br>
<<cultist>>They are communicating. Offering. Each touch is a word. Each gasp, a sentence. They are building a language of pure pleasure, a prayer to the senses.<</cultist>><br>
<<gg1>><em>He turned his featureless mask toward me.</em><</gg1>><br>
<<cultist>>Do you understand?<</cultist>><br>
<<gg1>>I… I think I’m starting to.<</gg1>><br>
<<gg1>><em>I breathed, surprised to find my own voice laced with a warmth I didn’t recognize.</em><</gg1>><br>
<<cultist>>The mask is freedom. It allows you to be your truest self, the self your daily life chains down. There is no shame here. No judgment. Only exploration.
<br> <br>
You are not here by accident, $name. We see the hunger in those who are meant to join us. A restlessness. A curiosity that goes deeper than most. You have been searching for something more, haven’t you?<</cultist>><br>
<<gg1>><em>I didn’t—couldn’t—deny it. He was right. The late-night restlessness, the sense that life was happening behind a pane of glass I couldn’t break… it had all led here.</em><</gg1>><br>
<<gg1>>What do I do?<</gg1>><br>
<<cultist>>Whatever you wish. The ceremony is an invitation to participate, not a command. You may join the circle. You may find a partner. You may simply watch. But if you wish to truly see…<</cultist>><br>
<<gg1>><em>He led me, weaving through the silent, watching robed figures. The heat was more intense here, the scent of arousal almost overwhelming. We stopped at the edge. Up close, the movements were more visceral, more real. I saw the contraction of a muscle, the flutter of a pulse in a throat, the genuine, unfettered expressions of ecstasy that the masks could not hide.
<br><br>
A woman near us, turned her head. She saw me watching. Her eyes, visible through the slits, were dark and knowing. She reached out a hand, her fingers gliding down my arm in a gesture that was both a question and a welcome.
<br><br>
A bolt of pure, undiluted lightning shot through me. I flinched, but didn’t pull away.
</em><</gg1>><br>
<<cultist>>She offers you a touch. A connection. Do you accept it?<</cultist>><br>
<<gg1>><em>My mind screamed a dozen warnings. My body, however, was singing a different tune. A thrum of excitement had started deep in my core, a low ache that demanded to be fed. The woman’s touch, though startling, hadn’t been unpleasant. It had been… electric.
<br><br>
I gave a single, jerky nod.</em><</gg1>><br>
<img src="images/masks/masks7.webp" class="scene-image">
<br>
<br><br>
<<gg1>>
<em>
She took my other hand and gently drew me along the crowd. The polished stone was warm beneath my toes.
<br><br>
Cultist released me, a silent grant of permission.</em><</gg1>><br>
<<cultist>>I will be here.<</cultist>><br>
<img src="images/masks/masks5.webp" class="scene-image">
<br>
<<gg1>><em>The woman, shorter than me, pressed closer. Her free hand came up to my cheek, her touch surprisingly gentle. Her other hand still held mine, and she placed it firmly on the curve of her hip, over the smooth of her body so I could feel the heat of it.</em><</gg1>><br>
<<cultist1>>The first rule...<</cultist1>><br>
<<gg1>><em>she whispered, her voice a husky melody.</em><</gg1>><br>
<<cultist1>>...is to breathe. The second is to feel. The third is to take what you need.<</cultist1>><br>
<<gg1>><em>She leaned in, her lips brushing the sensitive spot where my neck met my shoulder. It wasn’t a kiss, not exactly. It was a slow, open-mouthed press of heat and wetness against my skin. A shiver ran through me, a mix of shock and sharp, surprising pleasure.
My eyes fluttered shut. The drumming, the chanting, the soft wet sounds around us—they all fused into a single, driving rhythm that matched the pounding of my blood.
Her hands were on my shoulders now, tugging my coat off. It slid to the floor, forgotten. Her fingers moved toward the waistband of my pants. I knew I should have stopped her. This was madness. But the part of me that cared was being drowned by a rising, roaring tide of desire.
The cool air of the chamber hit my bare skin, goosebumps rising, quickly soothed by the heat of her hands sliding over my stomach and along my sides. My breath caught as her touch pressed lower, teasing the edge of my underwear.
She sank to her knees before me. Her hands traced down my sides, over the curve of my hips, and slipped under the waistband of my trousers and underwear. With a practiced, deliberate motion, she tugged them down my legs. I stepped free, standing naked.
My body trembled, every nerve ending alive, buzzing with tension. Her hands rested on my thighs, grounding me even as desire flared. Then, she pressed a slow, teasing kiss to my stomach, her lips and warmth claiming me.
She took off her mask, under which there was another mask, but smaller. Especially so that it would be more convenient to work with my “unit.”
<br><br>
She didn’t ask. She simply leaned forward, and her tongue, hot and impossibly soft, licked a slow, deliberate stripe through my folds.
I yielded completely as her mouth found my cock, her tongue circling, flicking, sucking with an expertise that felt supernatural. Sensation, bright and blinding, detonated at my core and radiated outwards.</em><</gg1>><br>
<img src="images/masks/masks6.webp" class="scene-image">
<br>
<<gg1>><em>The world shrank to the rhythm of her breath and the slow, deliberate motion that left me teetering between restraint and surrender. The air was heavy with incense and the faint scent of sweat and candle smoke. Around us, the cult whispered their prayers — a low, steady murmur that merged with the pounding of my pulse.
Every touch of hers drew me further into that trance, her presence commanding and impossible to resist. I could feel the heat between us, the unspoken promise in every movement. My body reacted on instinct, pulled by a force older and deeper than reason, until thought itself dissolved into rhythm and need.
<br><br>
While she was working with her tongue, she called another woman over to us, apparently trying to show me the possibilities of this cult... Without saying a word, the second woman knelt down and began to help.
</em><</gg1>><br>
<img src="images/masks/masks8.webp" class="scene-image">
<br>
<<gg1>><em>I was overcome by such a wave of pleasure that I almost lost consciousness. My knees could barely hold me up, my whole body was shaking as if I had been electrocuted. It was a divine feeling.
<br><br>
I realized that I couldn't hold back any longer. It would be the fastest orgasm of my life, but it also seemed like it would be the most intense.</em><</gg1>><br>
<<cultist1>>Give it to us, we want it. We need it. We desire it.<</cultist1>><br>
<<gg1>><em>That was the last straw, I couldn't hold back any longer, I started cumming right into their mouths. Both of them. I couldn't hold back my moans, I growled like a beast, and they opened their mouths as wide as they could, devouring my cum, squeezing the last drops from my balls and greedily choking on it.</em><</gg1>><br>
<img src="images/masks/masks9.webp" class="scene-image">
<br>
<<cultist1>>Thank you for your gift. You have proven yourself worthy of wearing the mask of our cult.<</cultist1>><br>
<<gg1>><em>She said this as she finished eating the remaining semen, while the second woman had already disappeared into the crowd. </em><</gg1>><br>
<<cultist1>>I'll take you back to your *friend*<</cultist1>><br>
<<gg1>><em>She took my hand — pale fingers, warm against my skin — and guided me through the dim corridors. The sound of our steps echoed softly, swallowed by the vast, shadowed halls. The candles that lined the walls flickered as we passed, as if bowing their flames toward her.
The air here smelled of incense and iron, the scent of ritual lingering heavy. My mind still swam with what had happened — with her, with this place — and yet, somehow, it felt unreal, like a dream already fading.
She said nothing. Her mask caught the candlelight now and then, flashes of gold and white glimmering through the dark. When we reached the heavy wooden doors, she stopped.
Her hand lingered in mine for a moment longer — a silent pause that felt heavier than any word. Then she turned toward me, her voice low and distant, as if echoing through water.
<br><br>
The doors creaked open, and the cool night air spilled in — clean, sharp, cutting through the haze that clung to my thoughts. Outside, under the moonlight, stood the masked man — my guide, the one who had first spoken of “the House of Masks” as if it were both sanctuary and snare.</em><</gg1>><br>
<<cultist>>So she allowed you to leave.<</cultist>><br>
<<gg1>><em>Behind me, I felt her presence withdraw — the faint brush of fabric, a breath of warmth, gone before I could turn.
The cultist’s gaze lingered on me for a moment longer before he gestured toward the path winding down into the dark forest. </em><</gg1>><br>
<<cultist>>Go. The house closes its doors at dawn. If you look back, it won’t be here.<</cultist>><br>
<<gg1>><em>I stepped out into the night. The sound of the door closing behind me was softer than I expected — almost gentle — but it carried finality, like the last note of a song I wasn’t meant to hear.
The forest swallowed me whole. Only the faint scent of sandalwood clung to my clothes — a whisper of proof that the night had been real.</em><</gg1>><br><br>
<<set $masksRitual to true>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Sleep overtook me." sleep>><</button>>
</span>
</div>
</div>
<</linkreplace>>
<<else>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Sleep overtook me." sleep>><</button>>
</span>
</div>
</div>
<</if>>
<style>
.cultist {
border: 3px solid #2b1a1a;
background: linear-gradient(180deg, #100a0a 0%, #1c1111 100%);
color: #e8dfd3;
padding: 14px 18px;
border-radius: 12px;
box-shadow: 0 0 18px rgba(60, 10, 10, 0.7), inset 0 0 12px rgba(100, 30, 30, 0.1);
font-family: "Cinzel", "Times New Roman", serif;
letter-spacing: 0.5px;
line-height: 1.6em;
text-align: left;
position: relative;
overflow: hidden;
}
.cultist::before {
content: "☥";
position: absolute;
top: -6px;
left: 14px;
font-size: 22px;
color: #a96f4c;
text-shadow: 0 0 10px rgba(200, 150, 90, 0.3);
}
.cultist img {
display: inline-block;
border: 2px solid #3f1a1a;
border-radius: 8px;
background: rgba(60, 0, 0, 0.25);
box-shadow: 0 0 14px rgba(80, 10, 10, 0.5);
margin-right: 10px;
margin-bottom: 6px;
}
.cultist .mask-detail {
font-style: italic;
color: #d4c2a1;
}
.cultist {
border: 3px solid #2b1a1a;
background: linear-gradient(180deg, #100a0a 0%, #1c1111 100%);
color: #e8dfd3;
padding: 14px 18px;
border-radius: 12px;
box-shadow: 0 0 18px rgba(60, 10, 10, 0.7), inset 0 0 12px rgba(100, 30, 30, 0.1);
font-family: "Cinzel", "Times New Roman", serif;
letter-spacing: 0.5px;
line-height: 1.6em;
text-align: left;
position: relative;
overflow: hidden;
}
.cultist::before {
content: "☥";
position: absolute;
top: -6px;
left: 14px;
font-size: 22px;
color: #a96f4c;
text-shadow: 0 0 10px rgba(200, 150, 90, 0.3);
}
.cultist img {
display: inline-block;
border: 2px solid #3f1a1a;
border-radius: 8px;
background: rgba(60, 0, 0, 0.25);
box-shadow: 0 0 14px rgba(80, 10, 10, 0.5);
margin-right: 10px;
margin-bottom: 6px;
}
.cultist .mask-detail {
font-style: italic;
color: #d4c2a1;
}
.cultist1 {
border: 3px solid #3a1f2b;
background: linear-gradient(180deg, #1a0d1a 0%, #2c142c 100%);
color: #f0e3d8;
padding: 16px 20px;
border-radius: 14px;
box-shadow: 0 0 20px rgba(80, 20, 60, 0.7), inset 0 0 14px rgba(120, 40, 80, 0.1);
font-family: "Cinzel", "Times New Roman", serif;
letter-spacing: 0.5px;
line-height: 1.6em;
text-align: left;
position: relative;
overflow: hidden;
}
.cultist1::before {
content: "✦";
position: absolute;
top: -8px;
left: 16px;
font-size: 22px;
color: #c27fa6;
text-shadow: 0 0 12px rgba(200, 120, 180, 0.35);
}
.cultist1 img {
display: inline-block;
border: 2px solid #5a2b5a;
border-radius: 10px;
background: rgba(80, 10, 80, 0.25);
box-shadow: 0 0 16px rgba(120, 40, 120, 0.6);
margin-right: 10px;
margin-bottom: 6px;
}
.cultist1 .mask-detail {
font-style: italic;
color: #e2c8d8;
}
</style>
<<say 'Guard' >>Get out of here, you lowlife.<</say>>
<br>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to main street" streets>><</button>>
</span>
</div>
</div><<if Cycle.check('time', 'daytime')>>
<<say 'Librarian' >>I'm sorry, but according to the law of the kingdom, we cannot allow a slave inside.<</say>>
<br>
<<else>>
<<gg>><em>The library is closed at night.</em><</gg>>
<</if>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to left street" leftCity>><</button>>
</span>
</div>
</div><<dessil>>Who gave you permission to come in here, you scoundrel? Get out of here! <</dessil>>
<br>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to right street" rightCity>><</button>>
</span>
</div>
</div><<if Cycle.check('time', 'daytime')>>
<<olrik>>I order you to get out of here, you miserable creature!<</olrik>>
<br>
<<else>>
<<gg>><em>The court is closed at night.</em><</gg>>
<</if>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to left street" leftCity>><</button>>
</span>
</div>
</div><<madam>>Sorry, sweetheart, but your low social status might scare off potential customers. Please leave. <</madam>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to right street" rightCity>><</button>>
</span>
</div>
</div><<gg>>
<em>The forge roared as I stepped inside, the scent of hot metal and smoke filling my lungs. Sparks flew from the anvil with each strike, and the heat pressed against my back.</em>
<</gg>>
<br>
<<gg>>
<em>I hesitated at the threshold, unsure if I was allowed to be here. The weight of my low status pressed down on me as heavily as the air in the forge.</em>
<</gg>>
<br>
<<blacksmith>>
You there! <em>the blacksmith barked, eyeing me sharply</em>, You're a lowlife. You don't touch my tools. Not now, not ever.
<</blacksmith>>
<br>
<<gg>>
<em>I flinched at his words, my hands clenching at my sides. The forge seemed impossibly vast and intimidating all of a sudden.</em>
<</gg>>
<br>
<<blacksmith>>
However, <em>he continued, his tone softening just slightly,</em> if you help me and my daughter with the work, I might allow you to handle the tools. But only if you prove yourself useful.
<</blacksmith>>
<br>
<<gg>>
<em>I nodded quickly, eager to gain any small permission. Anything to be closer to the rhythm of the forge, even as a servant.</em>
<</gg>>
<br>
<<gg>>
<em>Ellin stood nearby, polishing a set of hammers. Her eyes met mine for a brief moment.</em>
<</gg>>
<br>
<<ellin>>
If you do as my father says, you can earn a place here among us, even if small.
<</ellin>>
<br>
<<gg>>
<em>Her voice was soft but firm, carrying a kindness I hadn't expected. My pulse quickened slightly, a strange warmth spreading through me.
I couldn't help but notice the way she held the tools, the careful way she worked.</em>
<</gg>>
<br>
<<gg>>
<em>
She stepped closer, offering me a bucket of water for my hands. Her fingers brushed mine ever so lightly, and a small shiver ran through me.
</em>
<</gg>>
<br>
<<gg>>
<em>I felt a jolt at her touch, subtle but undeniable. It was nothing more than contact, yet it left me trembling. <br>
I tried to steady myself, forcing my hands to grip the bucket, hoping I hadn't betrayed my nerves.</em>
<</gg>>
<br>
<<ellin>>
You should wash off the grime from the stones, It will make the metal easier to handle.
<</ellin>>
<br>
<<gg>>
<em>I followed her instructions, trying not to stare, though it was impossible not to notice her every movement. <br>
Even in the dim light of the forge, her presence was impossible to ignore. She was graceful, commanding, yet gentle all at once.</em>
<</gg>>
<br>
<<ellin>>
<em>Ellin glanced at the anvil, then back at me.</em> Once you're done, maybe I can show you how to hold a hammer properly.
<</ellin>>
<br>
<<gg>>
<em>I swallowed hard, my throat dry. That simple offer felt like a gift beyond measure.<br>
She was guiding me, but also testing me, letting me feel the edge of possibility in this new life at the forge.</em>
<</gg>>
<br>
<<gg>>
<em>I grabbed a rag and began wiping down the anvil as Ellin instructed. The metal was still warm from her father’s last strike.
My movements were clumsy, but I tried to follow her guidance carefully.</em>
<</gg>>
<br>
<<ellin>>
<em>Ellin watched silently for a moment, then handed me a small hammer.</em> Here, try to lift it like this, <em>she said, demonstrating the proper grip.</em>
<</ellin>>
<br>
<<gg>>
<em>I took the hammer, feeling its weight. It was heavier than I expected.
I mimicked her movements, careful not to drop it, and felt a small spark of accomplishment when I managed a decent strike on a scrap piece of iron.</em>
<</gg>>
<br>
<<ellin>>
Not bad. You'll need to build your strength, but you have the patience for it.
<</ellin>>
<br>
<<gg>>
<em>I nodded, grateful for her patience. The forge felt less intimidating now with her nearby.
Even in these simple tasks, there was something grounding in her presence.</em>
<</gg>>
<br>
<<ellin>>
Keep practicing. Father will watch you closely, but I think you’ll do fine.
<</ellin>>
<br>
<<gg>>
<em>I set the hammer down carefully and looked around the forge. The smell of smoke and metal no longer felt suffocating. Instead, it felt like the start of something new, a small place where I could belong, if only for a moment. <br>
Ellin returned to her work, and I focused on my own, trying to match her steady rhythm.</em>
<</gg>>
<br>
<<blacksmith>>
You're doing fine. Keep helping Ellin and yourself, and maybe one day you'll be able to handle the forge like a proper apprentice.
<</blacksmith>>
<br>
<<gg>>
<em>I nodded, feeling a small surge of pride. The work was hard, but manageable with Ellin guiding me. <br>
Her calm presence made the forge feel less intimidating, almost welcoming.</em>
<</gg>>
<br>
<<ellin>>
<em>Ellin handed me a damp cloth.</em> Clean this anvil once more, and then we can finish for the day.
<</ellin>>
<br>
<<gg>>
<em>I did as she asked, rubbing the metal until it gleamed faintly in the evening light filtering through the forge windows.
When I finished, I set the cloth down and looked at her. She gave me a small approving nod, and I felt… accepted, for now.</em>
<</gg>>
<br>
<<blacksmith>>
Enough for today. Go get some rest. Tomorrow, we continue.
<</blacksmith>>
<br>
<<gg>>
<em>I nodded, taking a final glance at the warm glow of the forge. The day had been long, but I felt a strange satisfaction.
Ellin returned to her chores, and I stepped outside, the cool air of the village wrapping around me. For the first time, I felt that maybe, just maybe, I had a place here.</em>
<</gg>>
<br>
<<set $forgedaughter = 1>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Back to the right street" rightCity>><</button>>
</span>
</div>
</div>
<<run setup.relationshipsModule.add("ellin", {
name: "Ellin",
image: "images/characters/Ellin.jpg",
hearts: 0,
maxHearts: 3,
mood: "",
hiddenLocations: [
{ phase: 'Monday', daytime: 'Daytime', location: 'forge' },
{ phase: 'Monday', daytime: 'Nighttime', location: 'home' },
{ phase: 'Tuesday', daytime: 'Daytime', location: 'forge' },
{ phase: 'Tuesday', daytime: 'Nighttime', location: 'home' },
{ phase: 'Wednesday', daytime: 'Daytime', location: 'forge' },
{ phase: 'Wednesday', daytime: 'Nighttime', location: 'garden' },
{ phase: 'Thursday', daytime: 'Daytime', location: 'forge' },
{ phase: 'Thursday', daytime: 'Nighttime', location: 'bazaar' },
{ phase: 'Friday', daytime: 'Daytime', location: 'forge' },
{ phase: 'Friday', daytime: 'Nighttime', location: 'church' },
{ phase: 'Saturday', daytime: 'Daytime', location: 'forge' },
{ phase: 'Saturday', daytime: 'Nighttime', location: 'tawern' },
{ phase: 'Sunday', daytime: 'Daytime', location: 'forge' },
{ phase: 'Sunday', daytime: 'Nighttime', location: 'tawern' }
]
})>>
<<run $questsData.add(
"EllenCorrupt",
"Build a good relationship with Ellin and blacksmith",
"I need to find out where Ellin spends her time and when. I think the blacksmith can help me with that, after which I can spend time with her and help out in the smithy whenever her relationship with me is at its best. ",
"Access to workshop",
"images/characters/Ellin.jpg"
)>>
<<set $EllenInteractionGarden = 1>>
<<set $EllenInteractionBazaar = 1>>
<<set $EllenInteractionDrink = 1>><div class="relationships-container">
<h2 class="rel-title">Relationships</h2>
<div id="relationshipsContent"></div>
<<run setup.relationshipsModule.render()>>
<!-- CLOSE BUTTON -->
<div class="centered">
<span class="ascend">
<<button "Close">><<run Engine.backward()>><</button>>
</span>
</div>
</div>
<div class="wip-banner">
<h2>WIP in 0.2</h2>
</div>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to village" cVillage>><</button>>
</span>
</div>
</div>
<style>
/* === WIP Banner === */
.wip-banner {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: radial-gradient(circle at top left, rgba(60,40,20,0.95), rgba(20,10,5,0.9));
border: 2px solid rgba(255,215,100,0.6);
border-radius: 16px;
padding: 25px 50px;
box-shadow: 0 0 25px rgba(255,215,100,0.3);
text-align: center;
z-index: 999;
animation: fadeInScale 0.8s ease forwards;
}
/* Текст */
.wip-banner h2 {
color: #f8e7b5;
font-family: 'Garamond', 'Times New Roman', serif;
font-size: 2em;
letter-spacing: 2px;
text-shadow: 0 0 10px rgba(255,215,100,0.3);
margin: 0;
}
/* Анимация */
@keyframes fadeInScale {
from {
opacity: 0;
transform: translate(-50%, -50%) scale(0.8);
}
to {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
}
}
/* === Мобильная адаптация === */
@media (max-width: 600px) {
.wip-banner {
padding: 18px 35px;
border-radius: 12px;
}
.wip-banner h2 {
font-size: 1.4em;
}
}
</style><div class="wip-banner">
<h2>WIP in 0.2</h2>
</div>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to village" cVillage>><</button>>
</span>
</div>
</div>
<style>
/* === WIP Banner === */
.wip-banner {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: radial-gradient(circle at top left, rgba(60,40,20,0.95), rgba(20,10,5,0.9));
border: 2px solid rgba(255,215,100,0.6);
border-radius: 16px;
padding: 25px 50px;
box-shadow: 0 0 25px rgba(255,215,100,0.3);
text-align: center;
z-index: 999;
animation: fadeInScale 0.8s ease forwards;
}
/* Текст */
.wip-banner h2 {
color: #f8e7b5;
font-family: 'Garamond', 'Times New Roman', serif;
font-size: 2em;
letter-spacing: 2px;
text-shadow: 0 0 10px rgba(255,215,100,0.3);
margin: 0;
}
/* Анимация */
@keyframes fadeInScale {
from {
opacity: 0;
transform: translate(-50%, -50%) scale(0.8);
}
to {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
}
}
/* === Мобильная адаптация === */
@media (max-width: 600px) {
.wip-banner {
padding: 18px 35px;
border-radius: 12px;
}
.wip-banner h2 {
font-size: 1.4em;
}
}
</style><div class="wip-banner">
<h2>WIP in 0.2</h2>
</div>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to village" cVillage>><</button>>
</span>
</div>
</div>
<style>
/* === WIP Banner === */
.wip-banner {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: radial-gradient(circle at top left, rgba(60,40,20,0.95), rgba(20,10,5,0.9));
border: 2px solid rgba(255,215,100,0.6);
border-radius: 16px;
padding: 25px 50px;
box-shadow: 0 0 25px rgba(255,215,100,0.3);
text-align: center;
z-index: 999;
animation: fadeInScale 0.8s ease forwards;
}
/* Текст */
.wip-banner h2 {
color: #f8e7b5;
font-family: 'Garamond', 'Times New Roman', serif;
font-size: 2em;
letter-spacing: 2px;
text-shadow: 0 0 10px rgba(255,215,100,0.3);
margin: 0;
}
/* Анимация */
@keyframes fadeInScale {
from {
opacity: 0;
transform: translate(-50%, -50%) scale(0.8);
}
to {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
}
}
/* === Мобильная адаптация === */
@media (max-width: 600px) {
.wip-banner {
padding: 18px 35px;
border-radius: 12px;
}
.wip-banner h2 {
font-size: 1.4em;
}
}
</style><div class="passage-panel">
<nav class="market-tabs">
<div class="sidebar-button">[[Speak to|GardenSpeak]]</div>
<div class="sidebar-button">[[Back to village|cVillage]]</div>
</nav>
<<if Cycle.check('time', 'nighttime') and Cycle.check('weekdays', 'Wednesday')>>
<<run setup.relationshipsModule.discoverLocation("ellin", "garden")>>
<</if>>
<<if $forgedaughter == 1>>
<<gg>>
<em>We clinked our mugs together, the warm liquid spilling slightly over the edges.</em>
<</gg>>
<br>
<<ellin>>
<em>Ellin laughed softly, a rosy tint on her cheeks.</em> To a successful day at the forge!
<</ellin>>
<br>
<<gg>>
<em>I smiled, feeling more relaxed than I had in days.</em> To the forge—and to good company.
<</gg>>
<br>
<<ellin>>
<em>She took a slow sip, eyes sparkling.</em> You handle that drink almost as well as a hammer.
<</ellin>>
<br>
<<gg>>
<em>I laughed, nearly choking on my second sip.</em> Careful, I might start thinking you taught me both.
<</gg>>
<br>
<<ellin>>
<em>Ellin reached over and tapped my mug gently.</em> Maybe I already have.
<</ellin>>
<br>
<<elseif $forgedaughter == 2>>
<<gg>>
<em>The tavern buzzed with laughter and the crackle of the hearth.</em> You know, I didn’t think blacksmiths drank this much.
<</gg>>
<br>
<<ellin>>
<em>Ellin smirked, leaning back in her chair, the firelight catching the copper in her hair.</em> You spend your days surrounded by fire and steel, and you tell me *this* is too much heat?
<</ellin>>
<br>
<<gg>>
<em>I raised my mug with a grin.</em> Fair point. Though I’d say the forge doesn’t talk back when I burn myself.
<</gg>>
<br>
<<ellin>>
<em>She laughed, low and genuine.</em> Maybe you should stop trying to *charm* the flames, then.
<</ellin>>
<br>
<<gg>>
<em>I took another sip, pretending to think it over.</em> What if it’s not the flames I’m trying to charm?
<</gg>>
<br>
<<ellin>>
<em>Her eyes flicked to mine for just a second before she looked away, smiling into her drink.</em> Then I’d say… you’re braver than I thought.
<</ellin>>
<br>
<<gg>>
<em>I chuckled softly, the sound mixing with the noise of the tavern.</em> Or just foolish.
<</gg>>
<br>
<<ellin>>
<em>Ellin swirled her mug, gaze softening.</em> Sometimes it’s the same thing.
<</ellin>>
<br>
<<gg>>
<em>We clinked our mugs together again, the air between us warmer than the fire.</em> To bravery, then.
<</gg>>
<br>
<<ellin>>
<em>She smiled—just a hint of mischief behind it.</em> To foolishness.
<</ellin>>
<br>
<<elseif $forgedaughter == 3>>
<<gg>>
<em>The rain outside had turned steady, drumming softly against the shutters. The tavern was nearly empty now — just the two of us and the dying fire.</em>
<</gg>>
<br>
<<ellin>>
<em>Ellin leaned back in her chair, holding her mug loosely by the handle.</em> You ever notice how quiet everything feels after the noise fades? Like the world’s waiting for someone to say something important.
<</ellin>>
<br>
<<gg>>
<em>I smiled faintly.</em> You planning to say something important, then?
<</gg>>
<br>
<<ellin>>
<em>She smirked, but her eyes didn’t match the tone.</em> I asked first.
<</ellin>>
<br>
<<gg>>
<em>I took a slow sip, stalling. The warmth from the drink didn’t quite reach the knot in my chest.</em> I think I’d rather listen tonight.
<</gg>>
<br>
<<ellin>>
<em>Her gaze flicked up — not teasing now, but searching.</em> That’s dangerous. Gives me room to ask questions you might actually answer.
<</ellin>>
<br>
<<gg>>
<em>I met her eyes, a little too directly.</em> Maybe I want to.
<</gg>>
<br>
<<ellin>>
<em>She looked at me for a long moment, then set her mug down gently.</em> You ever think… we spend all day hammering metal, shaping it to what we want — but when it comes to people, we just... wait and hope they take the right shape on their own?
<</ellin>>
<br>
<<gg>>
<em>I leaned in a little, the candlelight catching the gold in her eyes.</em> Maybe we’re afraid to see what happens if we try.
<</gg>>
<br>
<<ellin>>
<em>Her hand brushed mine as she reached for the candle — not by accident this time. Her fingers lingered just long enough to make sure I noticed.</em> Maybe we should stop being afraid, then.
<</ellin>>
<br>
<<gg>>
<em>I didn’t move my hand away. The fire popped softly behind us.</em> Is that the ale talking?
<</gg>>
<br>
<<ellin>>
<em>She smiled — not her usual smirk, but something quiet, deliberate.</em> If it is, maybe you should drink faster. So we’re even.
<</ellin>>
<br>
<<gg>>
<em>I laughed under my breath, the tension between us warm and real.</em> To dangerous ideas, then.
<</gg>>
<br>
<<ellin>>
<em>She clinked her mug against mine, never looking away.</em> To seeing what happens.
<</ellin>>
<br>
<<elseif $forgedaughter == 4>>
<<gg>>
<em>The tavern was loud — all laughter, clattering mugs, and the deep hum of a lute somewhere in the corner — but somehow, she stood apart from it all. Ellin, sitting near the fire, her cloak drawn back, a half-smile playing at her lips as the firelight turned her eyes to liquid gold.</em>
<em>I paused at the doorway. I’d seen her like this before — wild, fearless, untouchable — but tonight there was something else in her, something softer. Something dangerous in a different way.</em>
<</gg>>
<br>
<<ellin>>
<em>She looked up before I could say a word. </em>You again,<em> she said, voice low but teasing. Her fingers toyed with her mug, tracing the rim slowly. </em>Can’t seem to stay away, can you?
<em>I smirked, stepping closer. The air between us thickened, firelight flickering over the table, over her hands, over the hint of a smirk that could unravel kingdoms.</em>
<</ellin>>
<br>
<<gg>>
Maybe I just go where the trouble is,<em>I said. </em>And trouble tends to wear red tonight.
<em>Her laugh was quiet — not mockery, but something warmer. She tilted her head, letting a strand of copper hair fall across her cheek. </em>Flattery? In a place like this? You’ll run out of coin before the night’s over.”
<em>I took the seat beside her, close enough to feel the heat of her skin through the tavern’s dim light. </em> Maybe I’m not here to buy anything. Maybe I’m here to win something instead.
<</gg>>
<br>
<<ellin>>
<em>She raised a brow. </em> And what exactly are you trying to win?
<em>Her tone was light, but her gaze — that sharp, knowing look — was already pulling me in. The flicker of firelight caught in her eyes, and for a moment I forgot how to breathe.</em>
That depends,<em> I said softly. </em>Are you something that can be won?
<em>She didn’t answer right away. Instead, she leaned in, elbows on the table, her voice dropping to a whisper. </em> Only if the game’s worth playing.
<em>The words brushed against my skin like a touch. It wasn’t a confession — it was a challenge.</em>
<</ellin>>
<br>
<<gg>>
<em>Our mugs met with a soft clink, ale spilling slightly over my fingers. Her eyes followed the movement — deliberate, unhurried. Every motion of hers felt intentional, as if she knew exactly what effect it had on me.</em>
You play dangerous games,<em> I said, wiping the spill with the back of my hand. </em>One day, someone might call your bluff.
<em>She leaned closer, the smell of smoke and spiced wine on her breath. </em>Then I’ll know they were brave enough to try.
<em>For a heartbeat, the room faded — no noise, no fire, just the slow rhythm of her breath and the steady pounding of my pulse. The tension was unbearable, beautiful, alive.</em>
<em>I wanted to kiss her then, right there, in front of the world — but she only smiled, reached for her mug again, and broke the moment with infuriating ease.</em>
<</gg>>
<br>
<<ellin>>
You look like a man who’s forgotten what he came here for, <em>she teased. </em>Drink before it gets cold.
<em>Her voice was velvet over steel, soft and sharp at once. And yet, beneath the playful tone, there was a flicker of something real — an echo of the same pull that bound me to her, no matter how much I tried to fight it.</em>
<em>I drank, and for the first time in a long while, ale tasted like fire and her laughter sounded like home.</em>
<</ellin>>
<br>
<<elseif $forgedaughter == 5>>
<<gg>><em>This time we ordered honey ale, which sounds very interesting.
Have you ever tried it?</em><</gg>><br>
<<ellin>>No, but I'm pretty sure it will be very tasty. <em>She raised her mug, pointing it in my direction, our mugs clinked together, and we took our first sip.
The beer foam on it formed a mustache.</em><</ellin>><br>
<<gg>>Ha, look at yourself, you look like an old man!<em>I started laughing as I looked at her.</em><</gg>><br>
<<ellin>>Maybe I look like an old man because of the beer, but you look like an old man because you're decrepit!<em> She twisted it around as best she could<</ellin>><br>
<<gg>>Hey, this ale is really tasty, I didn't expect it to be sweet and not as nasty as regular beer. I wonder if it has more alcohol than beer or not.<</gg>><br>
<<gg>><em>We began drinking, the first mug went down quickly, so we ordered a second one. But then it all went downhill... We started feeling sick, our stomachs swelled up from the foam, and the alcohol in our blood started to take effect...</em><</gg>><br>
<<gg>>I don't feel very well... I think... I need to go home... <</gg>><br>
<<ellin>>Yeah, you're right. I'm going home too, I think we need to sleep it off. </em><</ellin>><br>
<<gg>><em>As soon as I got up, she called out to me and...</em><</gg>><br>
<br><img src="images/slaveRank/EllinDrink1.webp" class="scene-image">
<br>
<<gg>><em>Showed me her breasts.</em><</gg>><br>
<<ellin>>This is for your pleasant company and to make you feel better, sweet dreams!<</ellin>><br>
<<elseif $forgedaughter == 6>>
<<gg>><em>We ordered a round of drinks and settled into our booth. The dim lighting and cozy atmosphere made it feel like we were in our own little world.</em><</gg>><br>
<<ellin>>I love this place, it’s so intimate. <em>She leaned in closer to me, her hand resting on my thigh under the table.</em><</ellin>><br>
<<gg>>Yeah, it’s nice to have some privacy for once.<em>I smiled at her, feeling her fingers inching higher up my leg.</em><</gg>><br>
<<ellin>>You know what else is nice? <em>She whispered in my ear before disappearing under the table.</em><</ellin>><br>
<<gg>><em>I felt her warm mouth enveloping me as she began sucking me off right there in the middle of the bar. The risk of getting caught only made it more exciting for both of us…</em><</gg>><br>
<<gg>><em>I tried to keep my composure as she worked her magic under the table, but it was getting harder and harder to hide my pleasure. I glanced around nervously, hoping no one would notice what was happening.</em><</gg>><br>
<img src="images/slaveRank/EllinDrink2.webp" class="scene-image">
<br>
<<ellin>>Mmm, you taste so good… <em>She moaned softly before taking me even deeper into her mouth.</em><</ellin>><br>
<<gg>>Fuck, you’re amazing…<em>I whispered, gripping the edge of the table tightly as I felt myself getting closer and closer to the edge.</em><</gg>><br>
<<ellin>>Cum for me, baby… <em>She urged me on, her tongue swirling around my tip as she sucked me off with increasing intensity.</em><</ellin>><br>
<<gg>><em>I couldn’t hold back any longer and exploded in her mouth, trying my best to stifle a moan as I came. She swallowed every last drop before emerging from under the table with a satisfied grin on her face.</em><</gg>><br>
<img src="images/slaveRank/EllinDrink3.webp" class="scene-image">
<br>
<<gg>><em>We finished our drinks and left the bar, both of us feeling a little tipsy and very satisfied. As we walked down the street, she slipped her hand into mine and gave it a squeeze.</em><</gg>><br>
<<ellin>>That was fun… <em>She smiled at me mischievously.</em><</ellin>><br>
<<gg>>Yeah, it was…<em>I grinned back at her, already looking forward to our next adventure together.</em><</gg>><br>
<<elseif $forgedaughter == 7>>
<<gg>><em>After a few drinks, we were both feeling pretty drunk and horny. She leaned in close to me and whispered in my ear…</em><</gg>><br>
<<ellin>>I want you to fuck me right now… <em>She grabbed my hand and led me towards the toilets at the back of the bar.</em><</ellin>><br>
<<gg>>Are you sure about this?<em>I asked, feeling a little nervous but also incredibly turned on by her boldness.</em><</gg>><br>
<<ellin>>Yes, I need you inside me… <em>She pushed open the door to one of the stalls and pulled me inside with her.</em><</ellin>><br>
<<gg>><em>I locked the door behind us as she pressed herself up against me, kissing me passionately as she fumbled with my belt buckle.
<br>
Without hesitation, she also began to undress, turned her back to me, and said,</em><</gg>><br>
<<ellin>>Come on, stick it in, I'm already wet, you don't need to get me excited.<</ellin>><br>
<<gg>><em>I thrust into her sharply, without mercy. I would no longer spare her. I began to fuck her hard.</em><</gg>><br>
<img src="images/slaveRank/EllinDrink4.webp" class="scene-image">
<br>
<<ellin>>Come on, baby, are you waiting for me to start screaming? Sorry, not here, I... I can barely hold back, <em>she squealed, but I managed to cover her mouth. </em> Please, cum already, I know it's too fast, but otherwise I'll scream, cum, pretty please. <</ellin>><br>
<<gg>>Get down, I want to cum on your face.<</gg>><br>
<<ellin>>On my face? But... we're in a tavern? <</ellin>><br>
<<gg>>Yes, but I said I want it on your face, any questions?<</gg>><br>
<<ellin>>No, honey, go ahead. <em>She knelt down, kissed the head of my cock, and I started to flood her face with cum.</em> <</ellin>><br>
<img src="images/slaveRank/EllinDrink5.webp" class="scene-image">
<br>
<<ellin>>Oh my God, it's so warm... I like it, thank you for... the gift) Go home first, otherwise it will look strange if we leave together, kisses.<</ellin>><br>
<</if>>
<<run setup.money.spend(10)>>
<<run setup.relationshipsModule.giveHeart("ellin")>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Back to right street" rightCity>><</button>>
</span>
</div>
</div>
<<set $EllenInteractionDrink = 0>><div class="wip-banner">
<h2>WIP in 0.2</h2>
</div>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to tawern" Tawern>><</button>>
</span>
</div>
</div>
<style>
/* === WIP Banner === */
.wip-banner {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: radial-gradient(circle at top left, rgba(60,40,20,0.95), rgba(20,10,5,0.9));
border: 2px solid rgba(255,215,100,0.6);
border-radius: 16px;
padding: 25px 50px;
box-shadow: 0 0 25px rgba(255,215,100,0.3);
text-align: center;
z-index: 999;
animation: fadeInScale 0.8s ease forwards;
}
/* Текст */
.wip-banner h2 {
color: #f8e7b5;
font-family: 'Garamond', 'Times New Roman', serif;
font-size: 2em;
letter-spacing: 2px;
text-shadow: 0 0 10px rgba(255,215,100,0.3);
margin: 0;
}
/* Анимация */
@keyframes fadeInScale {
from {
opacity: 0;
transform: translate(-50%, -50%) scale(0.8);
}
to {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
}
}
/* === Мобильная адаптация === */
@media (max-width: 600px) {
.wip-banner {
padding: 18px 35px;
border-radius: 12px;
}
.wip-banner h2 {
font-size: 1.4em;
}
}
</style><<gg>>
<em>The morning sun had barely climbed above the rooftops when I arrived at the forge. The rhythmic clang of metal on metal echoed through the narrow street — the unmistakable heartbeat of the blacksmith’s craft.
I paused at the doorway, the air already thick with heat and the scent of burning coal.</em>
<</gg>>
<br>
<<blacksmith>>
You’re early. <em>His voice rumbled from behind the anvil as sparks leapt from the steel.</em> Good. Let’s see if you’ve still got the strength in those hands of yours.
<</blacksmith>>
<br>
<<gg>>
<em>I stepped closer, bowing slightly.</em> I came to help, sir. And— if you’ll let me— to learn.
<</gg>>
<br>
<<blacksmith>>
Heh. <em>The old man smirked beneath his soot-streaked beard.</em> Then start with the bellows. Ellin will show you what needs doing.
But don’t slow her down — she’s got more sense for the forge than most men twice her age.
<</blacksmith>>
<br>
<<gg>>
<em>I turned to where Ellin was sorting tools along the wall. Her hair was tied back, stray strands catching the orange glow of the furnace. When she looked up, a small smile tugged at her lips.</em>
<</gg>>
<br>
<<ellin>>
You remember how to hold the tongs, right? Last time, you nearly dropped the blade into the quenching trough.
<em>She laughed softly, a musical sound that cut through the roar of the fire.</em>
Come on. I’ll show you again — this time, without burning your sleeves.
<</ellin>>
<br>
<<gg>>
<em>I took the tongs, feeling her hand briefly guide mine into the right grip. The touch was fleeting, but it sent a small shock through me all the same. Together, we lifted the glowing metal and set it onto the anvil.</em>
<</gg>>
<br>
<<ellin>>
Now— steady. Let the hammer do the work, not your arms.
<em>She moved beside me, close enough that I could feel the heat radiating from her skin. Her eyes followed each of my strikes, calm, focused, quietly proud.</em>
Better. Much better than last time.
<</ellin>>
<br>
<<gg>>
<em>I smiled, my breath shallow from the heat and something else entirely.</em> Guess I had a good teacher.
<em>Our eyes met briefly before she turned away, pretending to inspect the tools again.</em>
<</gg>>
<br>
<<blacksmith>>
Don’t get distracted, boy! <em>The blacksmith’s voice cut across the forge, though there was a hint of amusement behind it.</em>
The steel won’t shape itself — and neither will your focus.
<</blacksmith>>
<br>
<<gg>>
<em>Ellin stifled a smile and returned to her work. I followed her lead, matching her rhythm — the two of us moving in sync, the sound of our hammers blending into a single, steady beat.</em>
<</gg>>
<br>
<<ellin>>
You’re improving. I didn’t think you’d keep at it after last time. Most give up when they see how unforgiving the forge can be.
<</ellin>>
<br>
<<gg>>
Maybe I just needed the right reason to stay.
<em>She glanced at me again, this time not looking away immediately.</em>
<</gg>>
<br>
<<gg>>
<em>By the time the sun began to set, my arms ached and my tunic was soaked through with sweat. Yet, I couldn’t bring myself to leave. Working beside her — hearing her voice, sharing the silence between blows — it felt like something rare, fragile… real.</em>
<</gg>>
<br>
<<ellin>>
That’s enough for today. You’ve done well.
<em>She handed me a cup of water, her fingers brushing mine once more. For a heartbeat, neither of us moved.</em>
Maybe next time, I’ll trust you with the tempering.
<</ellin>>
<br>
<<gg>>
<em>I nodded, trying to hide my grin.</em> I’ll hold you to that.
<em>As I left the forge, the warmth of the fire lingered — but it wasn’t the heat that stayed with me.</em>
<</gg>>
<br>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Back to the right street" rightCity>><</button>>
</span>
</div>
</div>
<<run {
const rel = State.variables.relationships['ellin'];
if (rel) {
rel.hearts = 0;
rel.level += 1;
}
}>>
<<set $forgedaughter = 2>>
<<set $EllenInteractionGarden = 1>>
<<set $EllenInteractionBazaar = 1>>
<<set $EllenInteractionDrink = 1>><<blacksmith>>
We’re short on hands today. <em>The old man’s voice cut through the morning heat.</em> You’ll work with Ellin — she’ll keep you busy, if nothing else.
<em>He turned back to the anvil, sparks bursting like fireflies around him.</em>
<</blacksmith>>
<br>
<<gg>>
<em>I wiped the sweat from my brow, glancing toward her. She stood by the forge, sleeves rolled up, her hair pulled back, her focus absolute.</em>
If I’m to work with her, I’d better keep up.
<</gg>>
<br>
<<ellin>>
Try not to burn yourself this time. <em>Her voice was even, but her eyes carried a flicker of amusement.</em> You remember what happened the last time you tried to shape iron without watching the color.
<</ellin>>
<br>
<<gg>>
Hard to forget. My palms still ache thinking about it.
<em>I picked up the hammer, feeling its weight — heavier than I remembered, or maybe I’d just grown tired.</em>
<</gg>>
<br>
<<ellin>>
Then start with the bellows. We’ll heat the billet together. <em>She nodded toward the coals.</em> Watch the metal, not the flame. The metal always tells you what it needs.
<</ellin>>
<br>
<<gg>>
<em>We worked in near silence. The steady rhythm of her hammer against the anvil, the hiss of metal meeting water — everything around her moved with a kind of purpose I envied.
Once or twice, our hands brushed as she passed me tools, and each time, a small jolt of warmth shot up my arm.</em>
<</gg>>
<br>
<<ellin>>
You’re not as clumsy as you used to be. <em>She glanced over, a faint smile threatening the corners of her mouth.</em>
Last time, you nearly dropped the tongs on my foot.
<</ellin>>
<br>
<<gg>>
Progress, then. Maybe someday I’ll manage to impress you.
<em>She let out a quiet huff — not quite a laugh, but close.</em>
<</gg>>
<br>
<<ellin>>
Don’t rush it. The forge teaches patience — not pride.
<em>Her tone softened just slightly, her eyes meeting mine for a fleeting moment.</em>
<</ellin>>
<br>
<<gg>>
Patience I can learn. Pride… maybe not so easily.
<em>I turned back to the billet, striking as she guided me. Our movements began to sync, the rhythm of the blows merging into one steady pulse.</em>
<</gg>>
<br>
<<blacksmith>>
<em>From across the workshop, her father watched quietly. He didn’t interrupt, just nodded once — approval, or maybe curiosity.</em>
<</blacksmith>>
<br>
<<gg>>
<em>Hours later, the day faded into a dull orange glow. My arms trembled from the weight of the hammer, but I didn’t want to stop. She stood close now, showing me the curve of the blade we’d shaped together.</em>
<</gg>>
<br>
<<ellin>>
Better. The spine’s cleaner, and the edge holds. You learn faster than most.
<em>She reached out to adjust my grip — her hand lingering on mine for a moment longer than needed.</em>
<</ellin>>
<br>
<<gg>>
Only because my teacher refuses to let me embarrass myself twice.
<em>She smiled then — really smiled — and for a heartbeat, the forge didn’t seem so hot anymore.</em>
<</gg>>
<br>
<<ellin>>
We’ll finish it tomorrow. You should eat something before you fall over.
<em>She turned toward the back of the forge, where a small pot simmered on the coals.</em>
Sit. I’ll bring it.
<</ellin>>
<br>
<<gg>>
You don’t have to—
<em>She gave me a look that silenced the rest of my words.</em>
Right. I’ll sit.
<</gg>>
<br>
<<gg>>
<em>When she returned, she handed me a bowl. Our fingers met again, softer this time, slower. She didn’t pull away immediately.</em>
<</gg>>
<br>
<<ellin>>
You’ve improved. Maybe next time, I’ll let you shape something on your own.
<em>Her tone was light, but her eyes said more — something unspoken, cautious, but warm.</em>
<</ellin>>
<br>
<<gg>>
I’ll hold you to that.
<em>She turned away, but I caught the faint smile that lingered before she hid it behind her hair.</em>
<</gg>>
<br>
<<gg>>
<em>That night, as the forge dimmed and the air cooled, I realized something had shifted between us — not much, just enough to make the silence feel less empty.</em>
<</gg>>
<br>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Back to the right street" rightCity>><</button>>
</span>
</div>
</div>
<<run {
const rel = State.variables.relationships['ellin'];
if (rel) {
rel.hearts = 0;
rel.level += 1;
}
}>>
<<set $forgedaughter = 3>>
<<set $EllenInteractionGarden = 1>>
<<set $EllenInteractionBazaar = 1>>
<<set $EllenInteractionDrink = 1>><<gg>><em>When I entered the workshop, my face immediately flushed from the heat inside.</em> <</gg>>
<br>
<<ellin>>
Come here quickly, we need your help. <em>She shouted as soon as she saw me, holding tongs for hot metal in her hands, in which there was a ingot, like iron, but I'm not sure. </em>
<</ellin>>
<br>
<<blacksmith>>
You're just in time, there's no time for lessons today, we're not going to teach you how to work, today you work.
<</blacksmith>>
<br>
<<gg>>
<em>The blacksmith threw me a hammer for forging metal and ordered me to shape the ingot that was in Ellin's tongs into a sword. I approached the anvil uncertainly, trying to remember all the movements I had seen the blacksmith and Ellin make, and began to strike the metal, shaping it. The first blows were barely noticeable on the metal, but the more I struck, the more I felt the hammer in my hands. </em>
<</gg>>
<br>
<<ellin>>
Come on, you can do it, I believe in you. Remember what I taught you!
<</ellin>>
<br>
<<gg>>
<em>After her words of encouragement, I began to hammer the metal with a force I had never had in my hands before. But at the same time, the accuracy of my blows did not suffer. With each contact of the hammer with the ingot, it looked more and more like the shape of a sword. And after a few minutes of active, I would even say powerful blows, I created my first sword. </em>
<</gg>>
<br>
<<ellin>>
Well done!!! <em> She looked at me with loving eyes and said with complete confidence. </em> This sword can definitely kill a rat, at least one that is paralyzed.
<em>She started laughing, and I didn't understand why she said that.</em> I'm kidding, you made a great sword for your first time. I remember my first time... I created not so much a sword as a toothpick for my father, <em>She began to laugh loudly. Her father also apparently remembered this story and began to laugh just as loudly. </em><</ellin>>
<<ellin>>
I congratulate you on your first sword!
<</ellin>>
<br>
<<gg>>
<em>She jumped on me, our eyes meeting intensely. Overjoyed, she pressed herself against me, seemingly unconsciously, but holding me as if she never wanted to let go. She practically suffocated me, considering that she was a blacksmith's daughter and had enough strength to do so. Her father, seeing this, smiled and turned away, as if he knew what was about to happen. She looked into my eyes and leaned toward my lips. I was a little confused, but I also leaned my lips toward hers. We merged in a passionate kiss, her lips were very warm...
<br>
This went on for several tens of seconds, after which she pulled away from me a little and said. </em>
<</gg>>
<br>
<<ellin>>
I'm sorry, I don't know what came over me... I was very happy for you... And I was grateful for your help... But... Anyway, I'm sorry. <em> She looked at me as if she were ashamed. </em>
<</ellin>>
<br>
<<gg>>
It's okay, <em>I said, looking her straight in the eyes</em> I liked it.
<br>
<em>Liked it!? How could I have said that...</em>
<</gg>>
<br>
<<ellin>>
<em>She visibly cheered up. As if she had been waiting for me to say just that.</em> I think it's time for you to go home, your hand is probably sore by now.
<</ellin>>
<br>
<<gg>>
<em>The blacksmith nodded and thanked me for my help. I headed for the exit, but turned around one last time and saw Ellin blowing me a kiss. My heart felt warm, and I left with a smile on my face. </em>
<</gg>>
<br>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Back to the right street" rightCity>><</button>>
</span>
</div>
</div>
<<run {
const rel = State.variables.relationships['ellin'];
if (rel) {
rel.hearts = 0;
rel.level += 1;
}
}>>
<<set $forgedaughter = 4>>
<<set $EllenInteractionGarden = 1>>
<<set $EllenInteractionBazaar = 1>>
<<set $EllenInteractionDrink = 1>><<set _cleanProgress = 0>>
<<gg>><em>As soon as I walked into the workshop, Ellin jumped on me and started kissing me. </em><</gg>><br>
<<ellin>>You came! I knew you would come today!!!<</ellin>><br>
<<gg>><em>She looked at me as if I were the only thing that made her day wonderful.</em><</gg>><br>
<<gg>>How could I not come? You know me.<</gg>><br>
<<gg>><em>She smiled after I said that, but a stern voice came from behind her.</em><</gg>><br>
<<blacksmith>>There's not much work today. So you and Ellin will just tidy up here, put everything in its place, put the materials in the storeroom, hang the tools on the wall, sweep the floor, melt the metal shavings, separate them from the trash, and pour them into the mold. Now get to work!<</blacksmith>><br>
<<gg>><em>Ellin let go of me and ran to organize the tools. I, in turn, decided to take care of the storage room. When I went in, I saw total chaos.</em><</gg>><br>
<<gg>>Yes, there's a lot of work to do here! <</gg>><br>
<<blacksmith>>Yes, so hurry up, everything has to be done today, <em> He said, trying to shout over to me, considering that I was in another room.</em><</blacksmith>><br>
<<gg>><em>I began the long and tedious cleaning...</em><</gg>><br>
<<do tag "clean">>
<<gg>><em>I cleaned up _cleanProgress out of 5 places</em><</gg>><br>
<</do>>
<<cooldownButton "Clean" fill 5s>>
<<set _cleanProgress += 1>>
<<if _cleanProgress >= 5>>
<<replace "#clean-status">>
<<gg>><em>I finally finished cleaning...</em><</gg>><br>
<<ellin>>Good work, <em> she said, nodding with approval.</em> <</ellin>>><br>
<<blacksmith>>I'll go get us something to eat, and you rest for now. <</blacksmith>><br>
<<gg>><em>I heard the heavy doors slam shut.
A few seconds later, Ellin came into my room with a very playful smile. </em><</gg>><br>
<<ellin>>We were alone, and I thought this was a great opportunity. <em> She smiled and started moving towards me.</em><</ellin>>><br>
<<gg>>An opportunity for what? <em>At that moment, I saw her kneel down and start to take off my pants</em><</gg>><br>
<<ellin>>You'll see for yourself in a moment. <em> She looked at me with hungry eyes, devouring me. After pulling off my pants and underwear, she began to gently kiss me from below, and with her warm hands, she took my cock and began to stroke it from bottom to top.</em><</ellin>>><br>
<img src="images/slaveRank/ForgeDaughter51.webp" class="scene-image"> <br>
<<gg>><em>I let out a quiet moan, considering how strong yet gentle her hands were.</em><</gg>><br>
<<ellin>>I decided to thank you for the work you do for us. So just relax. <em> She took my cock in her mouth and began to suck gently.</em><</ellin>>><br>
<img src="images/slaveRank/ForgeDaughter52.webp" class="scene-image"> <br>
<<gg>>Hey, I'm all dirty!<em> I said indignantly.</em><</gg>><br>
<<ellin>>Of course you're dirty, you work in a workshop, do you think I'm much cleaner? I told you to enjoy it, so shut up and enjoy it!<</ellin>>><br>
<<gg>><em>At that moment, she started working her mouth so well that I almost came. But I managed to hold back. </em><</gg>><br>
<img src="images/slaveRank/ForgeDaughter53.webp" class="scene-image"> <br>
<<ellin>>Hey! That's not fair! I could feel that you were close. Okay, do you want to play a game? <</ellin>>><br>
<<gg>><em>She smiled and took my balls in her hands. She gently played with them, asking them to give her my cum. And they seemed to hear her request. I felt that I was close. </em><</gg>><br>
<img src="images/slaveRank/ForgeDaughter54.webp" class="scene-image"> <br>
<<gg>>You can feel it, right?<em> I asked her, knowing that she understood I was close. </em><</gg>><br>
<<ellin>>Yeshh, giv i to me! Giv i o me! I deand it!<</ellin>>><br>
<<gg>>You can feel it, right?<em> She said this with my cock in her mouth, and I didn't understand much, but I knew what I had to do.
<br>
At that moment, I began to cum violently, covering her face and throat. There was so much cum that I was surprised myself. And she just looked at me and said.</em><</gg>><br>
<img src="images/slaveRank/ForgeDaughter55.webp" class="scene-image"> <br>
<<ellin>>Put your pants on, and I'll go wash up before my father comes back. And I hope you enjoyed it.
<</ellin>>><br>
<<gg>><em> I stood there stunned. I had never had an orgasm like that in my life. I was used to weak women, but this was a completely different feeling...
<br>
As soon as I put my pants on, the blacksmith came into the workshop with bread and a piece of dried meat.
</em>
<</gg>><br>
<<blacksmith>>I brought us something to eat. I hope you're very hungry. <em>He said, looking at us, to which Ellin replied. </em><</blacksmith>><br>
<<ellin>>I probably won't eat. I'd better go to my room. <em> She winked at me, and I realized she wasn't hungry anymore.</em><</ellin>>><br>
<<blacksmith>>Oh, you're missing out on an opportunity. It's a shame, but okay, it's my duty to offer. Will you eat it? <</blacksmith>><br>
<<gg>><em>He asked me, hoping that at least I wouldn't refuse. Of course, I didn't refuse, so we ate heartily while Ellin rested in her room.
<br>
When I was about to leave, I called out to her that I was coming. She came down to hug me.
<br>
As I was leaving I heard a whistle and turned around , and then, I saw her... from behind...
<br>
I'll definitely remember that for a long time. </em><</gg>><br>
<img src="images/slaveRank/ForgeDaughter56.webp" class="scene-image"> <br>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Back to the right street" rightCity>><</button>>
</span>
</div>
</div>
<</replace>>
<</if>>
<<redo "clean">>
<</cooldownButton>>
<div id="clean-status"></div>
<<run {
const rel = State.variables.relationships['ellin'];
if (rel) {
rel.hearts = 0;
rel.level += 1;
}
}>>
<<set $forgedaughter = 5>>
<<set $EllenInteractionGarden = 1>>
<<set $EllenInteractionBazaar = 1>>
<<set $EllenInteractionDrink = 1>><div class="wip-banner">
<h2>WIP in 0.2</h2>
</div>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Reveal the map" Map>><</button>>
</span>
</div>
</div>
<style>
/* === WIP Banner === */
.wip-banner {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: radial-gradient(circle at top left, rgba(60,40,20,0.95), rgba(20,10,5,0.9));
border: 2px solid rgba(255,215,100,0.6);
border-radius: 16px;
padding: 25px 50px;
box-shadow: 0 0 25px rgba(255,215,100,0.3);
text-align: center;
z-index: 999;
animation: fadeInScale 0.8s ease forwards;
}
/* Текст */
.wip-banner h2 {
color: #f8e7b5;
font-family: 'Garamond', 'Times New Roman', serif;
font-size: 2em;
letter-spacing: 2px;
text-shadow: 0 0 10px rgba(255,215,100,0.3);
margin: 0;
}
/* Анимация */
@keyframes fadeInScale {
from {
opacity: 0;
transform: translate(-50%, -50%) scale(0.8);
}
to {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
}
}
/* === Мобильная адаптация === */
@media (max-width: 600px) {
.wip-banner {
padding: 18px 35px;
border-radius: 12px;
}
.wip-banner h2 {
font-size: 1.4em;
}
}
</style><<blacksmith>>Hey thanks for coming, you're a disciplined worker. A little more and you'll be able to use my workshop completely freely, but for now, get to work sharpening swords. He said, pointing to a pile of swords lying on the floor near the grinding wheel.<</blacksmith>><br>
<<gg>>Where's Ellin?<em>I asked, looking around the room.</em><</gg>><br>
<<blacksmith>>She went to the garden, so you'll have to manage on your own today.
By the way, thank you for cleaning up the utility room. When you left, I checked how clean it was, and you did a really great job. Well done.<</blacksmith>><br>
<<gg>>Thank you, I tried my best, but I couldn't have done it without your daughter's help. She's very good. <</gg>><br>
<<gg>>I know, her mother was also a hard worker... I miss her... <em> He said, and then his eyes began to tear up. I decided it was better not to ask any more questions on the subject, so I calmly sat down at the grinding wheel and began to sharpen the swords.
<br>
Sword after sword... Hour after hour... It took an incredibly long time, I'm not sure how long, I think it was several hours, maybe even closer to 10 hours. And when the last sword was left, she walked into the smithy... Ellin... She was beaming with happiness as soon as she walked in. She was dressed incredibly beautifully... She was radiant, and it was the first time I had seen her looking so rested and well-dressed... She looked like an angel who had descended from heaven, like the king's lost treasure. She was beautiful.
</em><</gg>><br>
<<ellin>>Hi, sweetie! <em> She shouted as soon as she noticed me. She slowly approached me, getting closer and closer. I saw something more than just joy in her eyes. After resting, she was... Aroused? Yes, it seemed so.</em>
<</ellin>><br>
<<gg>>Hello! <em>I was very happy to see her after several hours of routine work, sharpening swords... Her face was like a salvation from all this. Not that I'm complaining, because I'm learning and getting practically free access to the forge, but still, now I'm a little tired. The blacksmith hasn't said anything yet... Although... Blacksmith? Where did he go? I was so busy working that I didn't even notice him leave. </em> <</gg>><br>
<<ellin>>Who are you looking for? Father?<em> She said, seeing how confused I was. </em>
<</ellin>><br>
<<gg>>Yes, do you know where he went? <</gg>><br>
<<ellin>>He went to bed an hour and a half ago. Have you seen the time? It's almost midnight. <</ellin>><br>
<<gg>><em>When she said that, I was shocked. I didn't expect to have worked so hard. </em> Wait, midnight? But I came here before lunch. <</gg>><br>
<<ellin>>Wow, so you've been sharpening swords all day? Well done, my father will be very pleased. I think you deserve a little reward.<</ellin>><br>
<<gg>><em>She lifted her dress, revealing a pair of very pretty panties. </em><</gg>><br>
<img src="images/slaveRank/ForgeDaughter61.webp" class="scene-image"> <br>
<<ellin>>Should I take them off, or can you do it yourself? <em>She looked at me with a playful smile. </em><</ellin>><br>
<<gg>><em>My hands are very dirty, do you think you can manage it yourself? </em><</gg>><br>
<<ellin>>As you wish, blacksmith. <em>At that moment, she playfully pulled off her panties and appeared in all her beauty... </em> <br>How do you like it? Do you even like it? She was a little embarrassed.<</ellin>><br>
<img src="images/slaveRank/ForgeDaughter62.webp" class="scene-image"> <br>
<<gg>>Like it? It looks beautiful, incredibly beautiful. But I have a question, how do you shave so smoothly? <</gg>><br>
<<ellin>>Oh, silly, my father is a blacksmith, and he's also a pretty good engineer, so he made me a shaving tool a long time ago. It's not very comfortable, but it works great!<</ellin>><br>
<<gg>><em>I looked between her legs and couldn't tear myself away. It looked perfect.</em><</gg>><br>
<img src="images/slaveRank/ForgeDaughter63.webp" class="scene-image"> <br>
<<ellin>>Hey, you hungry dog, my eyes are here!<</ellin>><br>
<<gg>><em>I looked up a little higher, and she had already taken out her breast and started squeezing it to arouse me.</em><</gg>><br>
<img src="images/slaveRank/ForgeDaughter64.webp" class="scene-image"> <br>
<<ellin>>Take off your pants, but quietly, my father mustn't hear us.<</ellin>><br>
<<gg>><em>I obeyed her command, quickly took off my pants and underwear, and stood up. She came up to me, started kissing my neck, and took my cock in her tender hand.</em><</gg>><br>
<<ellin>>Ugh, I missed it) It turned me on so much last time, I can't forget it. The texture, the veins. God, it's gorgeous.<</ellin>><br>
<<gg>><em>I was very happy to hear these words, but I enjoyed the moment more, her hand wrapped around my cock with such tenderness...
At that moment, she turned her back to me and pressed her ass against me.
</em><</gg>><br>
<<ellin>>Put it between my legs. But not inside! Not today, my father mustn't find out, so I can't let you make me scream and writhe. <</ellin>><br>
<<gg>><em>
I stuck my cock between her legs, touching her pussy a little, she moaned softly and a stream of her lubrication poured onto my cock, lubricating it, she began to move her hips back and forth, trying to make me cum. She squeezed it very tightly, I felt like I was inside something very warm. But at the same time, my head was sticking out between her legs, so it was a mixed feeling. But I liked it very much...
</em><</gg>><br>
<img src="images/slaveRank/ForgeDaughter65.webp" class="scene-image"> <br>
<<ellin>>I can feel every bump on your cock... I like its size. <em> She took my cockhead in her hand to warm it up, wet it a little, and started fucking me with her thighs and hand so that I would cum faster. I held back as best I could, but I felt like I couldn't hold out much longer. </em>Come on, baby, cum in my hand, warm up your girl, paint her completely.<</ellin>><br>
<<gg>><em>
I started erupting like a volcano, her warm hand and thighs squeezing every last drop out of me. I tried not to moan and instead groaned, flooding her hand with my cum.
When I finished, I fell onto the chair behind me, making a small thud. She smiled at me and started licking her hand.
</em>Pervert. <em> I said, watching her greedily devour my cum. </em><</gg>><br>
<img src="images/slaveRank/ForgeDaughter66.webp" class="scene-image"> <br>
<<ellin>>Well, yes, that's who I am, so what ? Are you against it? <</ellin>><br>
<<gg>>Absolutely not, I even like it. <em> After that, she rubbed my cock a few more times, kissed the head, and said.</em> <</gg>><br>
<<ellin>>Thanks for the hearty dinner. <</ellin>><br>
<<gg>><em>
At that moment, the blacksmith woke up. We quickly got dressed, I sat down at the grinding wheel, took the sword in my hands, and pretended to examine it.
As soon as the blacksmith came downstairs, he looked at me and at the pile of sharpened swords next to me. He looked at it sleepily for maybe two minutes, then said.
</em><</gg>><br>
<<blacksmith>>Are you still here? You are such a hard worker, I never doubted you, now you have definitely fulfilled your duty! You can use my forge whenever you want, you are always welcome in this house. But now it's time to sleep, so come on, finish up. <</blacksmith>><br>
<<gg>><em>
He went upstairs, Ellin kissed me goodbye, squeezed my cock through my pants, and sent me home. It was a great day. </em><</gg>><br>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Back to the right street" rightCity>><</button>>
</span>
</div>
</div>
<<run {
const rel = State.variables.relationships['ellin'];
if (rel) {
rel.hearts = 0;
rel.level += 1;
}
}>>
<<set $forgedaughter = 6>>
<<set $EllenInteractionGarden = 1>>
<<set $EllenInteractionBazaar = 1>>
<<set $EllenInteractionDrink = 1>><<gg>> <em>As soon as I entered the smithy, Ellin ran up to me and pulled me by the hand, saying, </em> <</gg>><br>
<<ellin>>Hurry! Before my father comes, I want you to enter me, quickly, follow me!
<</ellin>><br>
<<gg>>Wait, what? Enter you? In what sense? <em> I looked at her in confusion as she tried to pull me by the hand. </em> <</gg>><br>
<<ellin>>I want you to fuck me, or has the coal dust already gotten deep into your brain? Fuck me. I want your cock inside my pussy. I want you to fill me up completely. I want to moan, scream, and writhe. I want all of you.
<</ellin>><br>
<<gg>> <em>I was stunned, but also aroused by what I heard. It sounded incredible. I didn't know she could be so perverted. <br>
where her room was.
Her room... It didn't look like the room of a blacksmith's daughter at all, everything was very delicate... Tidy... Yes, there were various devices I had never seen before, but still... I saw her delicate side for the first time.
She started undressing right in front of me, to which I said
</em> <</gg>><br>
<img src="images/slaveRank/ForgeDaughter71.webp" class="scene-image"> <br>
<<gg>>Hey! What about foreplay, how are we going to turn each other on? <</gg>><br>
<<ellin>>What foreplay? I've been wet as a bitch ever since you rubbed up against me. I've been waiting for this day, for you to enter me, and while my father is away, this may be one of the few opportunities. So come on, take off your pants, lift it up while looking at me, and finally enter me!
<</ellin>><br>
<<gg>><em> I'm not stupid enough to disobey a woman like that. I pulled down my pants and immediately started to get excited. She lay down on the bed with her legs spread apart. How long I had waited for this... It was going to be incredible. I wasn't even inside her yet, but I was ready to cum just from the thought that it was finally going to happen.
</em> <</gg>><br>
<img src="images/slaveRank/ForgeDaughter72.jpg" class="scene-image"> <br>
<<ellin>>Come on, don't keep a lady waiting so long. She said, devouring my cock with her eyes.
<</ellin>><br>
<<gg>>Lady? You're ready to pounce on me as soon as I blink. <em>I smiled.
</em> <</gg>><br>
<<ellin>>Come here, my tiger, I'm all yours.<</ellin>><br>
<<gg>> <em>I leaned over her bed and gently entered her, slowly, trying not to hurt her.
</em> <</gg>><br>
<img src="images/slaveRank/ForgeDaughter73.webp" class="scene-image"> <br>
<<ellin>>Come on, baby, just a little more and it will be all the way in. <</ellin>><br>
<<gg>> <em>She moaned through clenched teeth, barely holding back her moans. <br>
As soon as I entered her completely, she dug her teeth into my neck and her nails into my back, from which drops of blood began to flow.
</em> <</gg>><br>
<<ellin>>Yes, my lion, my tiger, my bull! Fuck me, don't stop! Come on! Stick it all the way in! <</ellin>><br>
<img src="images/slaveRank/ForgeDaughter74.webp" class="scene-image"> <br>
<<gg>> <em>I started pounding her intensely, no longer trying to be gentle, no longer afraid of hurting her. I knew that pain would only turn her on more. So I started squeezing her breasts. Biting her nipples. Spanking her ass.
</em> <</gg>><br>
<<ellin>>Come on, hit me harder, leave bruises on my tender ass. So that everyone knows who left them. Come on!<</ellin>><br>
<<gg>> <em>I started spanking her very loudly, which made her cum.
</em> <</gg>><br>
<img src="images/slaveRank/ForgeDaughter75.webp" class="scene-image"> <br>
<<ellin>>Yes! More! I'm cumming! Come on, come on, come on! Spank me! Mmmmmmm... God, I came so sweetly...<</ellin>><br>
<<gg>> <em>After saying that, she threw me onto my back, straddled me, and started riding me. She squeezed her pussy so hard, it was as if she was trying to squeeze all the juices out of me.
</em> <</gg>><br>
<img src="images/slaveRank/ForgeDaughter76.webp" class="scene-image"> <br>
<<ellin>>Now it's your turn to cum, baby, give me your cum, fill me up, paint the walls of my pussy.<</ellin>><br>
<<gg>> <em>And then I couldn't hold back, I started to literally flood her, practically a waterfall. I hadn't even finished cumming when what didn't fit inside started pouring out of the sides of her pussy.
</em> <</gg>><br>
<img src="images/slaveRank/ForgeDaughter77.webp" class="scene-image"> <br>
<<ellin>>There's so much of it,<em>she moaned, </em>it's filling me up inside...<</ellin>><br>
<<gg>> <em>I felt my cum starting to run out, my balls emptying, and my strength leaving me. I gave one last thrust deep inside her and came right into her womb.
</em> <</gg>><br>
<<ellin>>Oh God, yes, you're so deep. She said and fell exhausted onto my chest. <</ellin>><br>
<<gg>> <em>We lay there for almost half an hour, trying to catch our breath and gather the strength to at least get up, after which we washed ourselves with water from a bucket standing in the corner of the room, lay down on the bed, and began to look at each other. I played with her hair while she stroked my chest.
</em> <</gg>><br>
<<ellin>>Thank you for your help in the workshop and for helping me with... my problem, jajaja, <em>she laughed.</em><</ellin>><br>
<<gg>> You're welcome, I've been missing company for a long time, thank you for accepting me, it was very important to me. In a short time, you have become very dear to me. <</gg>><br>
<<ellin>>I hope you'll visit us often, to help out here and there. My room will always be open to you, as will my wet hole. <</ellin>><br>
<<gg>>That sounds incredible, thank you. <em>I started to get dressed so I could leave before the blacksmith returned.
</em> <</gg>><br>
<<ellin>>I hope you come back soon, you can't keep me waiting, right? <</ellin>><br>
<<gg>>That's right, but I have to go now, before your father comes back and sees us here. <</gg>><br>
<<ellin>>That's true, eh, I'll miss you, and your camera too. Run, my love, run.<</ellin>><br>
<<gg>><em>I closed the door behind me, took one last look at her naked body, and ran out into the street... It was a great day and great sex, I'll never forget it.
</em> <</gg>><br>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Back to the right street" rightCity>><</button>>
</span>
</div>
</div>
<<set $forgedaughter = 7>>
<<run $questsData.setStatus("EllenCorrupt", "completed")>>
<<set $EllenInteractionGarden = 1>>
<<set $EllenInteractionBazaar = 1>>
<<set $EllenInteractionDrink = 1>><div class="passage-panel">
<nav class="market-tabs">
<<if Cycle.check('time','nighttime') and Cycle.check('weekdays','Wednesday') and $EllenInteractionGarden == 1>>
<div class="sidebar-button">[[Talk to Ellin|GardenEllen]]</div>
<</if>>
<div class="sidebar-button">[[Back to the garden|Garden]]</div>
</nav>
</div>
<<if $forgedaughter == 1>>
<<gg>>
<em>The garden was alive with color — blooming arches of roses and marble statues catching the morning light. I spotted Ellin near the fountain, her attention drawn to the ripples spreading across the water’s surface.</em>
<</gg>>
<br>
<<ellin>>
<em>Without turning, she spoke, her voice calm but amused.</em> You’re far from the noise of the market today. Didn’t think I’d find you somewhere this quiet.
<</ellin>>
<br>
<<gg>>
<em>I smiled, stepping closer along the gravel path.</em> I could say the same. I thought you preferred the clang of steel to the sound of fountains.
<</gg>>
<br>
<<ellin>>
<em>She turned slightly, sunlight catching in her hair.</em> Even I need a place where the world stops demanding things for a while.
<em>She gestured lightly to the flowers.</em> This place… feels almost too calm, doesn’t it?
<</ellin>>
<br>
<<gg>>
<em>I nodded, watching petals drift across the water.</em> Calm, but not empty.
There’s something about it — like the air’s waiting for someone to break the silence.
<</gg>>
<br>
<<ellin>>
<em>Her lips curved faintly.</em> Maybe that’s why you came — to break it.
<em>She looked at me then, the reflection of the fountain flickering in her eyes.</em>
<</ellin>>
<br>
<<gg>>
<em>I shrugged, smiling.</em> Or maybe I just wanted a walk that didn’t end with someone shouting about work.
<</gg>>
<br>
<<ellin>>
<em>She laughed softly — the kind of laugh that felt real, unguarded.</em>
Then you chose the right path.
<em>Her gaze drifted back to the garden.</em> It’s strange… a place this beautiful makes you forget how heavy the world can be.
<</ellin>>
<br>
<<gg>>
<em>I looked around, taking in the quiet shimmer of the morning.</em>
Maybe that’s what it’s meant for — to remind us there’s still something untouched by all that noise.
<</gg>>
<br>
<<ellin>>
<em>Her expression softened, thoughtful now.</em> Hm.
Maybe you understand more than I thought.
<em>She gave a small nod — a silent acknowledgment — before turning back toward the fountain.</em>
<</ellin>>
<br>
<<gg>>
<em>I smiled faintly, letting the silence settle between us — not awkward this time, but almost peaceful.</em>
<</gg>>
<br>
<<elseif $forgedaughter == 2>>
<<gg>>
<em>The garden looked different in the evening — the marble gleamed gold, and the air smelled faintly of lilac. I found Ellin sitting on the low wall by the fountain, her boots crossed, a half-eaten apple beside her.</em>
<</gg>>
<br>
<<ellin>>
<em>Without glancing up, she smirked slightly.</em>
You again. I’m starting to think this garden’s more yours than mine.
<</ellin>>
<br>
<<gg>>
<em>I leaned against a pillar nearby.</em>
Maybe I just have good timing.
Every time I come here, you’re already stealing the best spot.
<</gg>>
<br>
<<ellin>>
<em>She chuckled under her breath, brushing a strand of hair behind her ear.</em>
Hardly stealing. Just borrowing the quiet before someone ruins it with talk about gold or duty.
<em>Her eyes flicked up to mine for a second — playful, but searching.</em>
<</ellin>>
<br>
<<gg>>
<em>I smiled faintly.</em>
Guess I’m guilty of both. Gold and duty seem to follow me like stray dogs.
<</gg>>
<br>
<<ellin>>
<em>She tilted her head, thoughtful now.</em>
Maybe that’s why you come here. To pretend for a while that you’re not being chased.
<em>A soft wind stirred the leaves; her voice grew quieter.</em>
Does it work?
<</ellin>>
<br>
<<gg>>
<em>I hesitated a moment, then nodded.</em>
With the right company — sometimes, yes.
<</gg>>
<br>
<<ellin>>
<em>Her smirk softened into a small, genuine smile.</em>
Careful. Words like that might make me think you enjoy my company.
<em>She looked away quickly, as if regretting the tease, but didn’t move from her spot.</em>
<</ellin>>
<br>
<<gg>>
<em>I laughed lightly, stepping closer.</em>
What if I do?
<em>For a heartbeat, the only sound was the fountain.</em>
<</gg>>
<br>
<<ellin>>
<em>She exhaled through her nose — a quiet, half-amused sigh.</em>
Then maybe you’re not as hard to read as you think.
<em>Her gaze met mine, steady now — warmer than before.</em>
<</ellin>>
<br>
<<gg>>
<em>I smiled, but didn’t answer. No need — the silence between us said enough.</em>
<em>The sun slipped lower, painting her armor in amber light.</em>
<</gg>>
<br>
<<elseif $forgedaughter == 3>>
<<gg>>
<em>The moon hung low, silver light tracing every leaf and petal. The garden was almost asleep — except for us. Ellin sat on the edge of the fountain, her boots resting against the marble, her hair catching the light like spun copper.</em>
<</gg>>
<br>
<<ellin>>
<em>She swirled her hand in the water, sending ripples across the reflection of the moon.</em>
You know, when I first met you… I thought you were all armor.
No cracks, no warmth, just… a wall that talked.
<em>Her smile was teasing, but her eyes softened on the last words.</em>
<</ellin>>
<br>
<<gg>>
<em>I chuckled quietly.</em>
And you were fire — all heat, all danger.
Didn’t think I could stand too close without getting burned.
<</gg>>
<br>
<<ellin>>
<em>Her lips curved faintly.</em>
Maybe you still can’t.
<em>She tilted her head, watching me, her voice dropping to a low whisper.</em>
But you’re still here.
<</ellin>>
<br>
<<gg>>
<em>I took a step closer, until I could see the shimmer of torchlight in her eyes.</em>
Maybe I stopped minding the heat.
<em>My tone was soft, almost lost to the sound of the water.</em>
<</gg>>
<br>
<<ellin>>
<em>She looked down, then back up — a rare hesitation in her usually steady gaze.</em>
Careful.
You talk like someone who doesn’t plan to leave.
<em>Her hand brushed against mine — not a grab, just the lightest touch, testing if I’d pull away.</em>
<</ellin>>
<br>
<<gg>>
<em>I didn’t.</em>
And for once, I didn’t need to find the right words.
<em>The garden was quiet, the air still — her hand warm against mine, the distance between us finally gone.</em>
<</gg>>
<br>
<<ellin>>
<em>Her voice was a whisper, almost a thought breathed out loud.</em>
Then maybe… I won’t either.
<em>She smiled, small but real — the kind of smile that could keep you awake long after the night ended.</em>
<</ellin>>
<br>
<<elseif $forgedaughter == 4>>
<<gg>>
<em>The moon hung low over the garden, spilling silver across dew-drenched petals and making the fountain glimmer like molten silver. The air smelled of jasmine, wet earth, and something wild — an intoxicating mix that made my chest tighten.</em>
<em>I stepped onto the cobblestone path, feeling the cool stone underfoot, and there she was: Ellin, leaning against the fountain, silhouette lit by the soft glow of lanterns. Her hair, a cascade of copper, caught the moonlight in every strand. Even in stillness, she seemed alive — dangerous, enticing, and utterly untouchable.</em>
<</gg>>
<br>
<<ellin>>
<em>Her eyes found mine, a slow, smoldering gaze that made my stomach clench. </em>You’re late,<em> she murmured, the smallest lift of her lips carrying mischief, challenge, and a promise I couldn’t resist. Her fingers traced the fountain’s marble edge, deliberately slow, drawing my attention to every curve of her form.</em>
<em>My heartbeat thundered as I approached, and she didn’t step back. Instead, she let her eyes roam over me as though memorizing every line, every shadow, every inch of me in the lantern light.</em>
<</ellin>>
<br>
<<gg>>
I couldn’t stay away,<em>I whispered, closing the gap between us. My fingers brushed hers — just a featherlight touch — and the jolt that ran through me was impossible to ignore. Her breath caught; I could hear it, faint but sharp, against the night air. The garden seemed to hold its breath too, petals quivering as if they sensed the fire between us.</em>
<em>Ellin tilted her head, lips parting slightly. </em>Then stay,<em> she breathed, voice soft but commanding. The word was a spark; the heat between us flared instantly.</em>
<</gg>>
<br>
<<ellin>>
<em>She moved closer, pressing her body against mine, hands wandering along my chest, teasing, testing. I tangled my fingers in her hair, pulling her slightly closer, feeling the heat of her skin under my hands. The fountain gurgled softly, but it was a distant sound, lost beneath the rhythm of our quickened hearts.</em>
You’re reckless,<em>I whispered against her ear, my voice rough, barely controlled. She only smiled — a dangerous, tantalizing curve of lips — and let herself be drawn into the intensity, every subtle movement igniting sparks I couldn’t extinguish.</em>
<em>Her hand slid down my arm, finding the small of my back, pulling me in as if to anchor herself. I leaned closer, pressing my forehead to hers, noses brushing, breaths mingling. The world beyond the garden vanished.</em>
<</ellin>>
<br>
<<gg>>
<em>The night became ours. Fingers entwined, bodies almost merging, we moved around the fountain, circling like predators and prey. Our laughter was soft, low, intimate, blending with the whispers of leaves in the warm breeze. Every glance, every tiny shiver, spoke of desire, of a history that had built over stolen moments, fleeting touches, and lingering glances.</em>
<em>I could feel her pulse beneath my palm, rapid and eager. Her eyes — emerald and molten under the lantern light — held me captive. </em>You can’t pretend you don’t want this,<em> she murmured, lips brushing my ear. The edge in her voice was thrilling, daring me to test limits I hadn’t dared to touch before.</em>
<em>And I didn’t pull away. I couldn’t. The tension that had simmered between us for weeks — months even — boiled over in a storm of unspoken words, heated looks, and shared breath. In the silver light of the moon, we let ourselves collapse into the moment: reckless, desperate, alive.</em>
</gg>>
<br>
<<ellin>>
<em>Her voice dropped to a whisper, trembling, yet unwavering: </em>Stay… don’t leave me alone here.
<em>I cupped her face in my hands, thumbs brushing her cheekbones, and she leaned into the touch. No words were necessary; the night, the garden, the moonlight — it all bore witness. Every heartbeat, every tiny sigh, every brush of our lips spoke louder than any confession could.</em>
<em>We lingered there, suspended in a fragile, burning intimacy, knowing that the world outside could wait, while here, in this secret silver-lit sanctuary, we were entirely — dangerously — ours.</em>
<</ellin>>
<br>
<<elseif $forgedaughter == 5>>
<<gg>><em>We were walking through the garden, enjoying the warm summer evening and each other’s company. She was wearing a short skirt and a tight top that showed off her curves perfectly.</em><</gg>><br>
<<ellin>>It’s such a beautiful night… <em>She said, twirling around in front of me and giving me a glimpse of her panties under her skirt.</em><</ellin>><br>
<<gg>>Yeah, it is…<em>I replied, trying to keep my eyes on her face but failing miserably.</em><</gg>><br>
<<ellin>>Do you like what you see? <em>She teased, lifting up her skirt even higher to reveal more of herself to me.</em><</ellin>><br>
<br><img src="images/slaveRank/EllinGarden1.webp" class="scene-image">
<br>
<<gg>><em>I couldn’t resist any longer and pulled her towards me, kissing her deeply as I ran my hands over her body.</em><</gg>><br>
<<gg>><em>We continued to make out in the garden, her hands exploring my body as I did the same to hers. But just as things were starting to heat up, she pulled away from me with a sly grin on her face.</em><</gg>><br>
<<ellin>>Not now… <em>She whispered,</em> Maybe next time huh ?)<</ellin>><br>
<<gg>>You’re such a tease…<</gg>><br>
<<elseif $forgedaughter == 6>>
<<gg>>I’m walking through the garden when I see her sitting on a bench reading a book.<</gg>><br>
<<gg>>Hey there… <em>I say as I approach her.</em><</gg>><br>
<<ellin>>Hey… <em>She replies with a smile.</em><</ellin>><br>
<<gg>>What are you reading?<em>I ask as I sit down next to her.</em><</gg>><br>
<<ellin>>Just some boring old novel… <em>She replies with a shrug.</em><</ellin>><br>
<<gg>>Maybe I can help you find something more interesting to do… <em>I suggest as I slip my hand under her skirt and start fingering her right there on the bench.</em><</gg>><br>
<<ellin>>Oh fuck… <em>She moans as I finger her harder and faster.</em><</ellin>><br>
<br><img src="images/slaveRank/EllinGarden2.webp" class="scene-image">
<br>
<<gg>>You’re such a naughty girl… <em>I whisper in her ear as I slide my cock out and shove it in her mouth.</em><</gg>><br>
<<ellin>>Mmhhmm… <em>She moans as she sucks me off in the middle of the garden.</em><</ellin>><br>
<<gg>>Fuck yes… <em>I groan as I cum in her mouth and she swallows every last drop.</em><</gg>>
<br><img src="images/slaveRank/EllinGarden3.webp" class="scene-image">
<br>
<<ellin>><em>She licked her lips and smiled up at me, satisfied with her work.</em>
That was fun… <em>She said as she stood up and adjusted her skirt.</em><</ellin>>
<<gg>>Yeah, it was…<em>I replied with a grin.</em><</gg>>
<<elseif $forgedaughter == 7>>
<<gg>><em>I saw Ellin hiding behind the bushes, she beckoned me over with her finger.</em> Hey, what are you doing there? <</gg>><br>
<<gg>><em>She put her finger to her nose, signaling me to be quiet. When I approached her, I realized something was wrong. But when I turned the corner, everything became crystal clear.</em> You little exhibitionist, <em>she was standing there completely naked. </em> <</gg>><br>
<br><img src="images/slaveRank/EllinGarden4.webp" class="scene-image">
<br>
<<ellin>>Hehe, well, yeah, wanna fuck? <</ellin>><br>
<<gg>><em>Without answering, I pulled down my pants and walked over to her.</em> <</gg>><br>
<<ellin>>Oh, really? <</ellin>><br>
<<gg>><em> She took my cock in her hand and started jerking it off. I didn't stand still either and started stroking her pussy.</em> <</gg>><br>
<br><img src="images/slaveRank/EllinGarden5.webp" class="scene-image">
<br>
<<ellin>>Mmm, you're so proactive today. Come on, fuck me. <</ellin>><br>
<<gg>><em>I lifted her up and started fucking her in the air. </em> <</gg>><br>
<br><img src="images/slaveRank/EllinGarden6.webp" class="scene-image">
<br>
<<ellin>>WOW, you're my stud! Fuck me harder! <</ellin>><br>
<<gg>><em>I bit her breast, which made her squeal loudly.</em> <</gg>><br>
<<ellin>>Silly, we're in the garden, we can't be seen here, now stick it deeper.<</ellin>><br>
<<gg>> Yes, ma'am, <em>I stuck it as deep as I could, which immediately made her freeze. She started to cum, and I could barely hold her in my arms.</em> <</gg>><br>
<<ellin>>OH MY GOD, YES! I'M CUMMING! I'M CUMMING! FUCK ME, DON'T PULL OUT! <</ellin>><br>
<<gg>><em>Quiet! They've definitely heard us now, we need to finish quickly.</em> <</gg>><br>
<<ellin>><em>With almost no strength left, she squeezed out, </em>Cum, baby, fill your doll with your cum, please.<</ellin>><br>
<<gg>><em>I felt my orgasm coming and started cumming too.
<br>
She just leaned back, taking all the cum I was pouring into her, and while I was cumming, she had another micro-orgasm.
<br>
I held her as tightly as I could, her arms completely limp, her legs convulsing, but I couldn't hold her any longer and we both leaned against the garden wall.
</em> <</gg>><br>
<br><img src="images/slaveRank/EllinGarden7.webp" class="scene-image">
<br>
<<ellin>>It was incredible, the most powerful orgasm of my life... Thank you... Let me rest for a moment and then we'll go home.<</ellin>><br>
<<gg>><em>She lay there almost unconscious for a few minutes, during which time I found the place where she had hidden her clothes, dressed her, and carried her home. After making sure she could make it to her room on her own, I let her go, kissing her goodbye.
</em> <</gg>><br>
<</if>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class = "royal-button">
<<button "Back to village" cVillage>><</button>>
</span>
</div>
</div>
<<run setup.relationshipsModule.giveHeart("ellin")>>
<<set $EllenInteractionGarden = 0>><div class="passage-panel">
<nav class="market-tabs">
<<if Cycle.check('time','nighttime') and Cycle.check('weekdays','Thursday') and $EllenInteractionBazaar == 1>>
<div class="sidebar-button">[[Talk to Ellin|BazaarEllen]]</div>
<</if>>
<div class="sidebar-button">[[Back to the bazaar|Bazaar]]</div>
</nav>
</div>
<<if $forgedaughter == 1>>
<<gg>>
<em>The market buzzed with noise — merchants arguing over prices, chickens darting between boots, and the smell of roasted apples in the air. I spotted Ellin near a stall piled with tools and iron scraps.</em>
<</gg>>
<br>
<<ellin>>
<em>She glanced over her shoulder, smirking slightly.</em> I thought I heard someone stomping around like they’d never been to a market before. Guess I was right.
<</ellin>>
<br>
<<gg>>
<em>I smiled, stepping closer.</em> I’ll take that as a compliment. What brings the village’s finest blacksmith out of the forge?
<</gg>>
<br>
<<ellin>>
<em>Ellin tapped a box of metal fittings with her glove.</em> Looking for parts. Some merchant from the south claimed these were “premium quality.”
<em>She frowned, lifting one.</em> They’re barely fit for horseshoes.
<</ellin>>
<br>
<<gg>>
<em>I leaned on the stall’s edge.</em> You could probably make better ones yourself — blindfolded.
<</gg>>
<br>
<<ellin>>
<em>She chuckled softly.</em> Probably. But it’s nice to remind them someone around here still knows what real work looks like.
<</ellin>>
<br>
<<gg>>
<em>I grinned.</em> You just like intimidating merchants.
<</gg>>
<br>
<<ellin>>
<em>Her eyes glinted with amusement.</em> Maybe. Keeps the prices honest.
<em>Then, after a pause:</em> And what about you? Buying something... or just watching me haggle again?
<</ellin>>
<br>
<<gg>>
<em>I shrugged.</em> Watching, mostly. You put on quite a show when you’re annoyed.
<</gg>>
<br>
<<ellin>>
<em>She raised an eyebrow, smirking.</em> That’s dangerous talk. You planning to make me annoyed, or just lucky with your timing?
<</ellin>>
<br>
<<gg>>
<em>I laughed.</em> Maybe a little of both.
<</gg>>
<br>
<<ellin>>
<em>Ellin shook her head with a small smile.</em> Careful. Keep that up, and you might just end up working off your debt in my forge.
<</ellin>>
<br>
<<gg>>
<em>I grinned wider.</em> Depends on the pay.
<</gg>>
<br>
<<ellin>>
<em>She turned away, pretending to examine another tool, but her tone was softer.</em> Depends on how useful you turn out to be.
<</ellin>>
<br>
<<elseif $forgedaughter == 2>>
<<gg>>
<em>The market buzzed with life, stalls overflowing with fruits, spices, and woven fabrics. The scent of fresh bread mingled with the earthy aroma of herbs, and merchants shouted their wares with infectious energy. I navigated the crowd, eyes scanning for a familiar spark, and there she was — Ellin, examining a basket of plump berries, sunlight catching her hair like threads of gold.</em>
<</gg>>
<br>
<<ellin>>
<em>Her gaze met mine, and a playful smirk tugged at her lips. </em> You always seem to find me, <em>she said, lifting a berry and pretending to toss it into my pocket. My hand brushed hers, just enough to send a thrill up my arm.</em>
I thought you might need a little company, <em>I replied, letting my shoulder press gently against hers as we moved between the stalls. She leaned closer, voice low, teasing,</em> Or maybe you just like the view?
<</ellin>>
<br>
<<gg>>
<em>I chuckled, feeling the warmth of her presence surround me. </em>Maybe a little of both, <em>I murmured, letting my fingers graze hers. The crowd around us blurred into a mosaic of color and sound, and for a moment, it was just the two of us.</em>
<em>She laughed softly, the sound wrapping around me, and reached for a ribbon on a stall. I caught her hand before she could pull it away, holding her gaze. </em>Do you always have to look so… enticing? <em> I asked, a grin tugging at my lips.</em>
<</gg>>
<br>
<<ellin>>
<em>Her eyes sparkled with mischief and something softer beneath it.</em> Only when someone dares to follow me through the market, <em>she whispered. Her fingers brushed mine again, this time lingering, sending shivers through me.</em>
<em>She leaned against a fountain, swishing water with her hand. </em> I like seeing the reflection of the sun in your eyes, <em> she said, and I stepped closer, feeling the heat between us grow.</em>
<</ellin>>
<br>
<<gg>>
<em>The world of merchants and buyers faded, leaving only the closeness of her presence and the gentle warmth of our hands touching. I traced a finger along hers, feeling the tension tighten delightfully. </em> Maybe I don’t want ordinary, <em> I whispered, letting my voice dip low, and she tilted her head, a shiver running through her.</em>
<em>She laughed softly, leaning slightly into me, and the market’s chaos became a distant hum. Every glance, every subtle touch, stoked a fire that neither of us could ignore, and the playful dance of flirtation grew into something more — undeniable, intoxicating.</em>
<</gg>>
<br>
<<ellin>>
<em>Her lips curved in a small, knowing smile. </em> Careful, <em> she murmured, voice dropping to a sultry whisper. </em>You’re dangerously close to making me forget everything but you.
<em>And in that instant, the sun, the stalls, the bustling crowd — it all vanished. There was only the heat of our shared gaze, the brush of our fingers, and the electric charge of a desire that had been quietly building over every previous encounter.</em>
<</ellin>>
<br>
<<gg>>
<em>I didn’t move away. I let the world slip by as I leaned just a little closer, the smell of the market and the warmth of Ellin mixing into a heady moment of anticipation. </em>Then I guess we’re both in danger,<em> I said softly, letting my thumb brush against hers, sending a shiver up both our arms.</em>
<em>The market roared on around us, oblivious, while the spark between us ignited into a small blaze, a fire that promised this wasn’t the last touch, the last glance, the last stolen moment in the crowded streets.</em>
<</gg>>
<br>
<<elseif $forgedaughter == 3>>
<<gg>>
<em>The market hummed with life, a tapestry of colors, smells, and sounds stretching as far as the eye could see. I moved through it with ease, knowing the rhythm of the crowd, but my attention kept straying to her.</em>
<em>Ellin’s copper hair caught the sunlight as she leaned over a stall of spices, inhaling deeply. A mischievous smile curved her lips when she noticed me watching, and my chest tightened without warning.</em>
<</gg>>
<br>
<<ellin>>
<em>She straightened, eyes glinting with a spark I knew too well.</em> Fancy meeting you here,<em> she said, her voice soft, almost teasing.</em>
<em>There was a pause, long enough for the crowd to swallow us, but we didn’t notice. Just the two of us, inches apart, the scent of cinnamon and bread surrounding her.</em>
<</ellin>>
<br>
<<gg>>
<em>I grinned, stepping closer. </em> Seems fate has a sense of humor, <em> I murmured, letting my gaze roam just a fraction longer than proper.</em>
<em>Her laugh, low and intimate, sent shivers down my spine. She brushed past a basket of apples, close enough for our arms to nearly touch — the air between us electric.</em>
<</gg>>
<br>
<<ellin>>
<em>Ellin’s eyes softened for a heartbeat, and I saw a flicker of something unspoken: familiarity, longing, the memory of our previous encounters.</em>
I wondered if you’d come, <em>she whispered, letting her fingers linger on the edge of a fruit stall, teasing me with her presence more than her words.</em>
<</ellin>>
<br>
<<gg>>
I couldn’t resist, <em> I replied, voice low, catching the curve of her smile. The crowd pressed around us, but it was irrelevant — only her mattered in that instant. Our gazes held, teasing and daring, a quiet game only we understood.</em>
<em>And when she finally moved on, just a step ahead, I felt the pull — a reminder that this was far from over, that every encounter with her was a spark waiting to flare.</em>
<</gg>>
<br>
<<elseif $forgedaughter == 4>>
<<gg>>
<em>The market bustled with life — the scent of roasted meats mingling with hay and spices, carts rattling over cobblestones, vendors shouting their wares. I turned a corner and froze: there she was, Ellin, moving gracefully through the crowd, every gesture precise, every glance sharp.</em>
<em>Our eyes met, and the world blurred. The shouts, the smells, the clatter — none of it mattered. Just her. My pulse hammered, a storm of anticipation and something wilder stirring inside me.</em>
<</gg>>
<br>
<<ellin>>
<em>She paused mid-step, hand brushing a basket of apples, and let a slow, dangerous smile curl across her lips.</em>
Thought you could hide from me in all this chaos? <em>Her voice was a soft challenge, teasing and commanding all at once. She didn’t just smile — she dared me to approach.</em>
<</ellin>>
<br>
<<gg>>
<em>I stepped forward, weaving between a cart stacked high with linens and a stall selling glinting trinkets. Each step brought us closer, and the air between us ignited. When I finally reached her, the bustling market felt miles away.</em>
Escaping me would take more than luck, <em>I murmured, brushing my fingers against hers, feeling the heat of her skin.</em>
<</gg>>
<br>
<<ellin>>
<em>Her eyes sparkled, mischief and something darker lurking in their depths. She leaned in, letting my hand linger in hers, letting me feel her heartbeat, daring me to act.</em>
Try and see, <em>she whispered, lips almost brushing mine, voice low and intoxicating.</em>
<em>She pressed slightly closer, teasing, testing, making the space between us electric.</em>
<</ellin>>
<br>
<<gg>>
<em>The world melted around us. A cart tipped slightly as we laughed, and I pulled her gently behind it, hidden for a heartbeat from the crowd. Her breath hitched, warm against my neck. I caught her gaze, and it was fire, desire, and a promise all at once.</em>
You’re impossible, <em> I breathed, but my hands stayed on hers, holding her close.</em>
<em>Her laugh was soft, teasing, and then she pressed her hand to my chest, feeling my heartbeat echo her own. The crowd faded, the market’s noise a distant murmur — nothing existed but this charge between us.</em>
<</gg>>
<br>
<<ellin>>
<em>Her lips tilted in a sly grin, daring and soft all at once.</em>
Maybe that’s why I didn’t run the first time we met, <em>she whispered. Then she leaned just slightly closer, and my restraint shattered.</em>
<</ellin>>
<br>
<<gg>>
<em>Our foreheads touched, breaths mingling, hands entwined. The market, the chaos, the smell of bread and hay — it all became the backdrop to the fire blazing between us. I could feel the pull, the danger, the undeniable spark that had drawn us together from the first glance.</em>
<em>And in that fleeting, charged moment, I realized some connections didn’t wait — they ignited, consuming everything in their path.</em>
<</gg>>
<br>
<<elseif $forgedaughter == 5>>
<<gg>><em>I was wandering through the bustling bazaar, taking in all the sights and sounds when I spotted her. She was standing by a stall, admiring some jewelry. I couldn’t resist approaching her.</em><</gg>><br>
<<ellin>>Hey there, stranger… <em>She smiled at me seductively as I walked up to her.</em><</ellin>><br>
<<gg>>Hey yourself…<em>I replied, returning her smile with one of my own.</em><</gg>><br>
<<ellin>>I’ve missed you… <em>She whispered in my ear before pressing her body up against mine and grinding her ass into my crotch.</em><</ellin>><br>
<<gg>><em>I could feel myself getting hard as she continued to grind against me, completely unbothered by the crowds of people around us.</em><</gg>><br>
<<ellin>>You like it, don't you? I know, baby, <em>she whispered, pressing herself even closer to me.</em><</ellin>><br>
<<gg>>Yeshh, I love it.<</gg>><br>
<<ellin>>And do you know what I'm going to do now?<</ellin>><br>
<<gg>>I wonder what? Make me cum?<</gg>><br>
<<ellin>>No.<em> At that moment, the crowd pressed against us, and a second later, Ellin completely disappeared among the people.</em><</ellin>><br>
<<gg>>Hey, Ellin! Where are you? <em>But there was no answer. What a tease. </em><</gg>><br>
<<elseif $forgedaughter == 6>>
<<gg>><em>I was walking through the bazaar, taking in all the sights and sounds when I spotted her. She was standing by a stall, admiring some jewelry. I couldn’t resist approaching her.</em><</gg>><br>
<<ellin>>Hey there, stranger… <em>She smiled at me seductively as I walked up to her.</em><</ellin>><br>
<<gg>>Hey yourself…<em>I replied, returning her smile with one of my own.</em><</gg>><br>
<<ellin>>I’ve missed you… <em>She whispered in my ear before pressing her body up against mine and grinding her ass into my crotch.</em><</ellin>><br>
<<gg>><em>I could feel myself getting hard as she continued to grind against me, completely unbothered by the crowds of people around us.</em><</gg>><br>
<<ellin>>Let’s find somewhere more private… <em>She took my hand and led me down a narrow alleyway behind one of the stalls.</em><</ellin>><br>
<<gg>>What do you have in mind?<em>I asked, feeling my anticipation building with every step we took.</em><</gg>><br>
<<ellin>>You’ll see… <em>She dropped to her knees in front of me and unzipped my pants before taking my cock into her mouth right there in the alleyway.</em><</ellin>><br>
<br><img src="images/slaveRank/EllinBazaar1.webp" class="scene-image">
<br>
<<gg>>Hell, you’re such a dirty girl…<em>I moaned as she sucked me off with increasing intensity</em><</gg>><br>
<<ellin>>Yeah I know, now u should cum before someone found us. <</ellin>><br>
<<gg>><em>She started creating a vacuum for my penis in her mouth, which made me cum instantly.</em><</gg>><br>
<br><img src="images/slaveRank/EllinBazaar2.webp" class="scene-image">
<br>
<<ellin>>Thanks for lunch, <em> she said, licking her lips,</em>now excuse me, I have to go shopping. <em> She quickly wiped herself down and ran off.</em><</ellin>><br>
<<elseif $forgedaughter == 7>>
<<gg>>The bazaar was buzzing with activity as I strolled through the crowded streets looking for some fun… That’s when I spotted her.<</gg>><br>
<<gg>>Damn girl - you look like you could use some company… <em>I said as I sidled up next to her.</em><</gg>><br>
<<ellin>>Maybe I do… <em>She replied coyly as she leaned in closer to me.</em><</ellin>><br>
<<gg>>Why don’t we find somewhere a little more private?<em>I suggested as I slipped my hand under her skirt.</em><</gg>><br>
<br><img src="images/slaveRank/EllinBazaar3.webp" class="scene-image">
<br>
<<ellin>>Mmm - I like the way you think… <em>She moaned softly as my fingers found their way inside her wet pussy.</em><</ellin>><br>
<<gg>>You’re already so wet for me… <em>I whispered in her ear as I fingered her harder and faster.</em><</gg>><br>
<<ellin>>Fuck me right here… <em>She begged as she bent over and presented her ass to me.</em><</ellin>><br>
<<gg>>Now now kitty… <em>I said as I pulled down my pants and slid my cock deep inside her tight pussy.</em><</gg>><br>
<<ellin>>Yes - fuck me harder! <em>She screamed as I pounded her from behind in the nearest alley.</em><</ellin>><br>
<br><img src="images/slaveRank/EllinBazaar4.webp" class="scene-image">
<br>
<<gg>>Take it all you filthy… <em>I growled as I fucked her harder and faster until we both came together in a sweaty mess.</em><</gg>><br>
<<gg>><em>After we finished fucking, I pulled up my pants and gave her a slap on the ass.</em><</gg>><br>
<<gg>>Thanks for the good time, baby… <em>I said as I walked away, leaving her panting and satisfied in the middle of the alley.</em><</gg>><br>
<</if>>
<div class="centered">
<div style="text-align:center; margin-top:2em;">
<span class="royal-button">
<<button "Back to the streets" streets>><</button>>
</span>
</div>
</div>
<<run setup.relationshipsModule.giveHeart("ellin")>>
<<set $EllenInteractionBazaar = 0>><<if !setup.isCheatPanelUnlocked()>>
<div class="support-panel">
<div class="support-header">
<h2>Enter Patreon code</h2>
</div>
<div class="support-desc">
Access bonus content only by entering Patreon code.
</div>
<div class="support-row">
<input type="text" id="cheat-code-input" placeholder="Code">
<button id="cheat-code-submit" class="support-button">Check code</button>
</div>
<div id="cheat-dialog-result" class="support-result"></div>
<div class="support-hint">
The code is only available on <a href="https://www.patreon.com/spellofearth">Patreon. </a>
</div>
<div class="support-row" style="margin-top:12px;">
<button id="back-to-last" class="support-button">Return</button>
</div>
</div>
<<else>>
<!-- === CHEAT PANEL === -->
<div class="cheat-panel">
<h2>🧿 Cheat Panel</h2>
<div class="cheat-section">
<h3>💰 Money</h3>
<<button "+1,000 gold">><<run setup.money.add(1000)>><</button>>
<<button "+10,000 gold">><<run setup.money.add(10000)>><</button>>
</div>
<div class="cheat-section">
<h3>🌳 Wood Materials (+10)</h3>
<<button "Ash">><<run $materials.pickup("ash", 10)>><</button>>
<<button "Oak">><<run $materials.pickup("oak", 10)>><</button>>
<<button "Beech">><<run $materials.pickup("beech", 10)>><</button>>
<<button "Maple">><<run $materials.pickup("maple", 10)>><</button>>
<<button "Ironwood">><<run $materials.pickup("ironwood", 10)>><</button>>
<<button "Ebony">><<run $materials.pickup("ebony", 10)>><</button>>
<<button "Silent">><<run $materials.pickup("silent", 10)>><</button>>
</div>
<div class="cheat-section">
<h3>⛏️ Ores (+10)</h3>
<<button "Copper">><<run $materials.pickup("copper", 10)>><</button>>
<<button "Iron">><<run $materials.pickup("iron", 10)>><</button>>
<<button "Silver">><<run $materials.pickup("silver", 10)>><</button>>
<<button "Gold">><<run $materials.pickup("gold", 10)>><</button>>
<<button "Mithril">><<run $materials.pickup("mithril", 10)>><</button>>
<<button "Adamantite">><<run $materials.pickup("adamantite", 10)>><</button>>
<<button "Aetherium">><<run $materials.pickup("aetherium", 10)>><</button>>
</div>
<div class="cheat-section">
<span class="royal-btn">
<<button "⏎ Return" `previous()`>><</button>>
</span>
</div>
</div>
<</if>>
<style>
.cheat-panel {
background: rgba(25, 15, 8, 0.92);
border: 2px solid rgba(255, 215, 100, 0.4);
border-radius: 20px;
padding: 20px;
margin: 30px auto;
max-width: 740px;
color: #f5e6c2;
font-family: 'Garamond', 'Times New Roman', serif;
box-shadow: 0 0 20px rgba(255,215,100,0.2);
}
.cheat-panel h2 {
text-align:center;
color:#f1d38a;
margin:0 0 12px;
font-size:1.4em;
}
.cheat-section {
margin:12px 0;
border-top:1px solid rgba(255,215,100,0.08);
padding-top:10px;
text-align:center;
}
.cheat-section h3 {
color:#ffd880;
margin:6px 0 8px;
font-size:1em;
}
.royal-btn {
display: inline-block;
background: linear-gradient(135deg, rgba(80,60,30,0.9), rgba(40,25,10,0.8));
border: 1px solid rgba(255,215,100,0.3);
border-radius: 8px;
color: #f5e6c2;
font-size: 0.95em;
margin: 4px;
padding: 8px 12px;
cursor: pointer;
transition: all 0.15s ease;
box-shadow: 0 0 8px rgba(255,215,100,0.12);
}
.royal-btn:hover {
transform: scale(1.05);
box-shadow: 0 0 14px rgba(255,215,100,0.28);
color: #ffe7c9;
}
.royal-btn button {
all: unset;
cursor: pointer;
font: inherit;
color: inherit;
}
button, .royal-btn {
background: linear-gradient(135deg, rgba(80,60,30,0.9), rgba(40,25,10,0.8));
border: 1px solid rgba(255,215,100,0.3);
border-radius: 8px;
color: #f5e6c2;
font-size: 0.95em;
margin: 4px;
padding: 8px 12px;
cursor: pointer;
transition: all 0.15s ease;
box-shadow: 0 0 8px rgba(255,215,100,0.12);
}
button:hover, .royal-btn:hover {
transform:scale(1.05);
box-shadow:0 0 14px rgba(255,215,100,0.28);
}
.close-btn {
display:block;
margin:14px auto 0;
background:linear-gradient(135deg, rgba(100,50,30,0.9), rgba(60,20,10,0.9));
color:#ffddb8;
}
</style>
<style>
/* Quest / Support code panel — parchment + bronze */
.support-panel {
max-width: 760px;
margin: 1.2rem auto;
background: linear-gradient(180deg, #2a1b12 0%, #21140d 100%);
border: 3px solid #5a2b17;
border-radius: 12px;
box-shadow: 0 6px 18px rgba(0,0,0,0.6), inset 0 0 24px rgba(150,90,50,0.04);
color: #efe4d3;
font-family: "IM Fell English", serif;
padding: 18px;
position: relative;
overflow: hidden;
}
.support-panel::before{
content: "✦";
position: absolute;
top: -12px;
left: 16px;
font-size: 20px;
color: #caa16a;
text-shadow: 0 0 8px rgba(200,150,90,0.25);
}
.support-header { display:flex; align-items: center; gap: 12px; margin-bottom: 12px; }
.support-header h2 { margin: 0; font-family: "Cinzel", serif; font-size: 1.05rem; color: #ffdfae; letter-spacing: 0.8px; }
.support-desc { font-size: 0.9rem; color: #e7d7c4; margin-bottom: 12px; line-height: 1.4; }
.support-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.support-row input[type="text"]{
background: linear-gradient(180deg, rgba(255,255,255,0.02), rgba(0,0,0,0.06));
border: 2px solid rgba(170,100,60,0.18);
padding: 10px 12px;
border-radius: 8px;
color: #efe4d3;
font-family: "Cinzel", serif;
min-width: 240px;
flex: 1 1 320px;
box-shadow: inset 0 2px 6px rgba(0,0,0,0.45);
outline: none;
transition: box-shadow .12s ease, border-color .12s ease, transform .06s ease;
}
.support-row input[type="text"]::placeholder{ color: #cdbfa8; font-style: italic; }
.support-row input[type="text"]:focus{ border-color: #c79b63; box-shadow: 0 0 12px rgba(200,140,70,0.12); transform: translateY(-1px); }
.support-button {
background: linear-gradient(180deg, #7a4a2b, #5a311d);
border: 2px solid #6a3d22;
color: #fff0d8;
padding: 10px 14px;
border-radius: 8px;
cursor: pointer;
font-family: "Cinzel", serif;
font-weight: 600;
letter-spacing: 0.6px;
box-shadow: 0 6px 12px rgba(30,10,5,0.45);
transition: transform .08s ease, box-shadow .12s ease;
flex: 0 0 auto;
}
.support-button:hover{ transform: translateY(-2px); box-shadow: 0 10px 18px rgba(30,10,5,0.5); }
.support-button:active{ transform: translateY(0); }
.support-result { margin-top: 12px; padding: 12px; border-radius: 8px; background: linear-gradient(180deg, rgba(255,255,255,0.01), rgba(0,0,0,0.04)); color: #efe5d6; min-height: 40px; font-size: 0.95rem; box-shadow: inset 0 1px 0 rgba(255,255,255,0.02); }
.support-result.success { border-left: 3px solid #8fb96a; color: #eaf6df; background: linear-gradient(180deg, rgba(143,185,106,0.06), rgba(0,0,0,0.03)); }
.support-result.error { border-left: 3px solid #c85a4a; color: #ffe8e5; background: linear-gradient(180deg, rgba(200,80,70,0.05), rgba(0,0,0,0.03)); }
.support-hint { margin-top:8px; font-size:0.82rem; color: #d6c6b3; }
@media (max-width: 520px) { .support-row { flex-direction: column; align-items: stretch; } .support-button { width: 100%; } }
</style>