<<set $day to 1>>
<<set $goblinDeal to "">>
<<set $goblinSent to 0>>
<<set $goblinArrive to 0>>
<<set $goblinSeen to false>>
<<set $monsterTalkSeen to false>>
<<set $championDay to 0>>
<<set $tributeMet to false>>
<<set $nextTribute to 14>>
<<set $tributeDay to 0>>
<<set $tributeMsg to "">>
<<set $gold to 100>>
<<set $hp to 60>>
<<set $maxhp to 60>>
<<set $patk to 10>>
<<set $psed to 25>>
<<set $pname to "Nobody">>
<<set $eventDay to 0>>
<<set $ev to null>>
<<set $dungeon to ["empty", "empty"]>>
<<set $seenFirst to false>>
<<set $metMerchant to false>>
<<set $energy to 0>>
<<set $merchSeen to 0>>
<<set $captives to []>>
<<set $queue to []>>
<<set $raidDay to 0>>
<<set $qi to 0>>
<<set $ri to 0>>
<<set $res to {}>>
<<set $msg to "">>
<<set $lost to 0>>
<<set $over to false>>
<<set $note to "">>
<<set $pidx to 0>>
<<set $crit to "">>
<<run setup.initTraps()>>
<<run setup.initInventory()>>
<<run setup.initStory()>>
<<set $plvl to 1>>
<<set $xp to 0>>
<<set $lvlPts to 0>><<nobr>><h2>Dungeon Keeper</h2><div class="scene" style="white-space:pre-wrap">Across the land, dungeons wait in the dark. Caves that swallow the sun, ruins that breathe, tombs that never quite stay quiet. Every day, brave and greedy adventurers march through their gates, chasing legends of gold, ancient relics and glory.<br><br>Most of them never come back, and nobody ever asks why.<br><br>What the adventurers do not know is that these dungeons are not forgotten ruins or ancient curses. Every single one of them is run by the Demon Lord. Every trap, every monster and every glittering treasure is bait, set out to lure in the proud, the foolish and the beautiful.<br><br>And someone has to keep them running.</div><br>[[Next|CharSelect]]<br><div class="patreon-box"><div class="patreon-text">Enjoying the game? The newest version is always on Patreon first.</div><a class="patreon-btn" href="https://www.patreon.com/Alexgamesandso/membership" target="_blank" rel="noopener">Get the newest version on Patreon</a><a class="patreon-btn alt" href="https://www.patreon.com/Alexgamesandso/membership" target="_blank" rel="noopener">Support on Patreon</a></div><</nobr>><<nobr>><h2>Armor preview</h2>The knight armor (undamaged and damaged), the body with each chest size, and the hair colors.<br><br><<= setup.armorGallery()>><br><br>[[Back|Start]]<</nobr>><<nobr>><h2>Gif preview</h2>Every gif of the lust and sex scenes with its file name. A red box means the file was not found.<br><br><<= setup.gifGallery()>><br><br>[[Back|Start]]<</nobr>><<nobr>><h2>Choose your Dungeon Master</h2><div class="char-grid"><br><<for _i to 0; _i lt setup.chars.length; _i++>><<capture _i>><div class="char-card"><br><<= setup.charPortrait(_i)>><br><div class="char-name"><<print setup.chars[_i].name>></div><div class="char-desc"><<print setup.chars[_i].desc>></div><<= setup.charStats(_i)>><br><<link "Choose">><<run setup.pick(_i)>><<goto "HeroIntro">><</link>><br></div><</capture>><</for>></div><</nobr>><<nobr>><<set $hp to $maxhp>><<set $note to "">><<run setup.dayChecks()>><<run setup.rollEvent()>><<run setup.planRaid()>><<run setup.merchantCheck()>><<if $merchantDay is $day and $merchSeen isnot $day>><<goto "MerchantArrival">><</if>><<if $day gte 8 and not $tributeMet>><<goto "TributeVisit">><</if>><<if $championDone and not $monsterTalkSeen and $day gte ($championDay + 1)>><<goto "StoneMonsters">><</if>><<if $goblinDeal is "sent" and $day gte $goblinArrive>><<goto "GoblinArrival">><</if>><br><h2>Day $day</h2><<include "Event">><br><<if $guildQuest and $questDay is $day>><div class="event-box"><h3>A quest at the Adventurers' Guild</h3><div class="scene" style="white-space:pre-wrap">Stone: "The chief kept her word. A quest about this dungeon went up on the board of the Adventurers' Guild this morning. Knights and mages will answer it, alongside the usual villagers. Expect a livelier day, Dungeon Master."</div></div><</if>><br><<if setup.chiefDue()>><div class="event-box"><h3>Someone is on the road</h3><div class="scene" style="white-space:pre-wrap"><<if $chiefMet>>Stone: "The village chief is coming back for another try. She is the only one on the road today."<<else>>Stone: "Only one visitor is on her way up the hill today, and she is no ordinary villager. The chief of the village is coming herself. Be ready for a real fight, Dungeon Master."<</if>></div></div><</if>><br><<if $merchantDay is $day>><div class="merchant-note">A travelling merchant has set up camp outside your dungeon today. He sells traps, monster contracts and items. You can visit him while preparing.</div><</if>><br><br>[[Prepare the dungeon|Prep]]<</nobr>><<nobr>><<if $ev and $ev.title>><div class="event-box"><h3><<print $ev.title>></h3><div class="scene"><<print $ev.text>></div><<if $ev.id is "demon" and not $ev.done>><div class="legend">You will have to deliver it tonight, at the end of the day.</div><</if>><br><<if $ev.done and $ev.result>><div class="ev-result"><<print $ev.result>></div><</if>><br></div><</if>><</nobr>><<nobr>><h2>Day $day - Preparation</h2><<= setup.sceneBanner("room.jpg", "short")>><b>$pname</b> (Lv $plvl, XP $xp/<<print setup.xpNeeded($plvl)>>) | HP $hp/$maxhp | Attack $patk | Seduction $psed | Gold $gold | Energy $energy<br><<= setup.itemLine()>><br><b>Your dungeon:</b><br><div class="tiles"><<for _i to 0; _i lt $dungeon.length; _i++>><<= setup.roomTile($dungeon[_i], _i + 1)>><</for>></div><br><b>Incoming raid:</b><br><<= setup.raidPreview()>><br><div class="legend">▲ = they are weak to that room ▼ = they resist it – = normal</div><br>[[Swap traps and monsters|Rooms]]<br><<link "Dungeon hearth">><<set $hearthBack to "Prep">><<goto "Hearth">><</link>><br><<link "Talk to Stone">><<set $stoneBack to "Prep">><<goto "StoneTalk">><</link>><br><<if $monsterTalkSeen and $goblinDeal isnot "done" and $goblinDeal isnot "sent">><<link "Visit the goblin camp">><<set $campBack to "Prep">><<goto "GoblinCamp">><</link>><br><</if>>[[Upgrade traps|Traps]]<br><<if $merchantDay is $day>><<link "Visit the merchant">><<set $merchBack to "Prep">><<goto "Merchant">><</link>><</if>><br><<link "Open the gates!">><<run setup.startRaid()>><<goto "Raid">><</link>><</nobr>><<nobr>><h2>Edit your dungeon</h2><<for _s to 0; _s lt $dungeon.length; _s++>><<capture _s>><h3>Room <<print _s + 1>></h3><div class="tiles"><<for _k range setup.ownedKeys(setup.roomKeys)>><<capture _k>><div class="opt"><br><<= setup.roomTile(_k, 0, $dungeon[_s] === _k)>><br><<= setup.copyLine(_k)>><br><<if setup.canPlace(_s, _k)>><<link "Place here">><<set $dungeon[_s] to _k>><<goto "Rooms">><</link>><<else>><span class="btn-disabled">All copies in use</span><</if>><br></div><</capture>><</for>></div><</capture>><</for>>[[Done|Prep]]<</nobr>><<nobr>><h2>Talk to Stone</h2><<= setup.sceneBanner("dungeon_hearth.jpg", "short")>><div class="scene" style="white-space:pre-wrap">The grey rock beside the hearth clears its non-existent throat.<br><br>Stone: "Yes, Dungeon Master? Ask me anything. I have all the time in the world. I am, after all, a rock."</div><div class="chief-ask"><<link "What should I do now?">><<replace "#stone-answer">><<= setup.stoneAdvice()>><</replace>><</link>><br><<for _i range setup.stoneSmallToday()>><<capture _i>><<link `setup.stoneSmall[_i][0]`>><<replace "#stone-answer">><<= setup.stoneSmallHtml(_i)>><</replace>><</link>><br><</capture>><</for>></div><div id="stone-answer"></div><br><<link "Back">><<goto `$stoneBack || "Prep"`>><</link>><</nobr>><<nobr>><h2>Upgrade traps</h2>Gold: $gold<br>Each level adds +<<print Math.round(setup.BAL.trapLvlBonus * 100)>>% damage and arousal (max level <<print setup.BAL.trapMaxLvl>>).<br><br><b>Objects</b> are upgraded with gold:<br><div class="tiles"><<for _k range setup.ownedKeys(setup.objectKeys)>><<capture _k>><div class="opt"><br><<= setup.roomTile(_k)>><br><<if setup.atMaxLvl(_k)>><span class="btn-disabled">Max level (<<print setup.BAL.trapMaxLvl>>)</span><<elseif $gold gte setup.upgradeCost(_k)>><<link `"Upgrade (" + setup.upgradeCost(_k) + " gold)"`>><<run setup.upgradeTrap(_k)>><<goto "Traps">><</link>><<else>><span class="btn-disabled">Upgrade (<<print setup.upgradeCost(_k)>> gold) - not enough gold</span><</if>><br></div><</capture>><</for>></div><br><b>Creatures</b> must be fed captives (in the evening):<br><div class="tiles"><<for _k range setup.ownedKeys(setup.livingKeys)>><div class="opt"><br><<= setup.roomTile(_k)>><br><<if setup.atMaxLvl(_k)>><span class="btn-disabled">Max level (<<print setup.BAL.trapMaxLvl>>)</span><<else>><<= setup.bar("XP", $trapXp[_k], setup.trapNeed(_k), "ar")>><</if>><br></div><</for>></div><br>[[Back|Prep]]<</nobr>><<nobr>><<set _a to $queue[$qi]>><h2>Adventurer <<print $qi + 1>> of <<print $queue.length>></h2><<= setup.sceneBanner("dungeon_entrance.jpg", "short")>><<= setup.portrait(_a)>><<if _a.champion>><b><<= setup.advLabel(_a)>></b> (Lv _a.lvl) - HP _a.hp/_a.maxhp - Defense _a.def - strolls up to the dungeon entrance alone, a longsword on her back and a bored look on her face.<<elseif _a.elite>><b><<= setup.advLabel(_a)>></b> (Lv _a.lvl) - HP _a.hp/_a.maxhp - Defense _a.def - arrives at the dungeon entrance alone.<<elseif _a.unique>><b><<= setup.advLabel(_a)>></b> (Lv _a.lvl) - HP _a.hp/_a.maxhp - Defense _a.def - marches up to the dungeon entrance alone, an axe in her hands.<<else>><b>_a.name the _a.cls</b> (Lv _a.lvl) - HP _a.hp/_a.maxhp - Defense _a.def - steps up to the dungeon entrance.<</if>><<= setup.advChips(_a)>><br><<link "Enter the dungeon">><<run setup.begin()>><<goto setup.roomPassage()>><</link>><</nobr>><<nobr>><<set _a to $queue[$qi]>><div class="room-result"><<= setup.portrait(_a, "tall")>><div class="room-result-info"><<if $res.d gt 0>><span class="tag dmg">_a.name takes $res.d damage</span><</if>> <<if $res.ar gt 0>><span class="tag ar">_a.name gains $res.ar arousal</span><</if>><<if $res.d is 0 and $res.ar is 0>><span class="tag">Nothing happens to _a.name</span><</if>><br><<if $res.blocked gt 0>><span class="tag">Armor blocks $res.blocked</span><</if>><br><<if $res.shred gt 0>><span class="tag acid">_a.name's armor corrodes (-$res.shred defense, now _a.def)</span><</if>><br><<if $res.grow>><span class="tag">The coating works: breasts grow one size</span><</if>><<if $res.nip>><span class="tag ar">Nipples and areolas swell: very sensitive, extra arousal</span><</if>><<if $res.growTxt>><div class="hit-text"><<= $res.growTxt>></div><</if>><<if $res.eff is "weak">><span class="tag weak">Weak to $res.type! Extra effective</span><<elseif $res.eff is "resist">><span class="tag resist">Resists $res.type - reduced effect</span><</if>><br><<if $res.txt>><div class="hit-text"><<= $res.txt>></div><</if>><<= setup.bar("HP", _a.hp, _a.maxhp, "hp")>><br><<= setup.bar("Arousal", _a.arousal, 100, "ar")>><br></div></div><</nobr>><<nobr>><<set _a to $queue[$qi]>><<if _a.status is "captured">><<if $res.reason is "wounds">><b>_a.name collapses from their wounds and does not get back up.</b><<else>><b>_a.name is overwhelmed and is captured alive!</b><</if>><br><<else>>_a.name pushes on.<br><</if>><br><br><<link "Continue">><<goto setup.roomNext()>><</link>><</nobr>><<nobr>><<run setup.enterRoom()>><<= setup.roomBanner($dungeon[$ri], $ri + 1)>><div class="scene">The room is empty.</div><br><<include "RoomStatus">><br><<include "RoomEnd">><</nobr>><<nobr>><<run setup.enterRoom()>><<= setup.roomBanner($dungeon[$ri], $ri + 1)>><div class="scene">The flagstones tilt without warning. The floor gives way, and a bed of iron spikes shoots up from below.</div><br><<include "RoomStatus">><br><<include "RoomEnd">><</nobr>><<nobr>><<run setup.enterRoom()>><<= setup.roomBanner($dungeon[$ri], $ri + 1)>><div class="scene">A hidden vent hisses open and fills the chamber with a sweet pink haze.</div><br><<include "RoomStatus">><br><<include "RoomEnd">><</nobr>><<nobr>><<run setup.enterRoom()>><<= setup.roomBanner($dungeon[$ri], $ri + 1)>><div class="scene">Darts fly out of the walls, each one tipped with a strange, glistening liquid.</div><br><<include "RoomStatus">><br><<include "RoomEnd">><</nobr>><<nobr>><<run setup.enterRoom()>><<= setup.roomBanner($dungeon[$ri], $ri + 1)>><div class="scene">A slime oozes out of the corner, quivering, and slides across the floor to engulf the intruder.</div><br><<include "RoomStatus">><br><<include "RoomEnd">><</nobr>><<nobr>><<run setup.enterRoom()>><<= setup.roomBanner($dungeon[$ri], $ri + 1)>><div class="scene">A goblin leaps out from behind a pillar, cackling, blade first.</div><br><<include "RoomStatus">><br><<include "RoomEnd">><</nobr>><<nobr>><<run setup.enterRoom()>><<= setup.roomBanner($dungeon[$ri], $ri + 1)>><div class="scene">Tentacles rise out of a dark pit and wrap around the intruder.</div><br><<include "RoomStatus">><br><<include "RoomEnd">><</nobr>><<nobr>><h2>Travelling Merchant</h2><<= setup.sceneBanner("merchant.jpg", "tall")>>"Fine wares for fine dungeon keepers!" He spreads a worn blanket out and shows off his goods.<br><br><div id="merchant-area"><<= setup.merchantHtml()>></div><br><<link "Leave">><<goto $merchBack>><</link>><</nobr>><<nobr>><h2 class="fight-title">Boss Fight</h2><div id="fight-area"><<bossUI>></div><</nobr>><<widget "bossUI">>\
<<set _a to $queue[$qi]>>\
<<= setup.fightPanel()>>
<div class="fight-msg"><<if $msg is "">>_a.name cleared the dungeon and reaches you!<<else>><<= $msg>><</if>></div>
<<if $hp lte 0>>
<div class="fight-actions"><<link "Continue">><<run setup.playerDown()>><<goto "PlayerDown">><</link>></div>
<<elseif _a.status is "captured">>
<div class="fight-win">Victory!</div>
<div class="fight-actions">[[Continue|AfterFight]]</div>
<<else>>
<div class="fight-actions">
<<link "Attack">><<run setup.bossRound("attack")>><<replace "#fight-area">><<bossUI>><</replace>><</link>>
<<link "Seduce">><<run setup.bossRound("seduce")>><<replace "#fight-area">><<bossUI>><</replace>><</link>>
</div>
<<if $items.potion gt 0 or $items.bomb gt 0 or $items.lust gt 0 or $items.flask gt 0>>
<div class="fight-items">
<<if $items.potion gt 0 and $hp lt $maxhp>><<link `"Health Potion (" + $items.potion + ")"`>><<run setup.bossRound("potion")>><<replace "#fight-area">><<bossUI>><</replace>><</link>><</if>>
<<if $items.bomb gt 0>><<link `"Grenade (" + $items.bomb + ")"`>><<run setup.bossRound("bomb")>><<replace "#fight-area">><<bossUI>><</replace>><</link>><</if>>
<<if $items.lust gt 0 and _a.arousal lt 100>><<link `"Horny Potion (" + $items.lust + ")"`>><<run setup.bossRound("lust")>><<replace "#fight-area">><<bossUI>><</replace>><</link>><</if>>
<<if $items.flask gt 0 and _a.def gt 0>><<link `"Corrosive Flask (" + $items.flask + ")"`>><<run setup.bossRound("flask")>><<replace "#fight-area">><<bossUI>><</replace>><</link>><</if>>
</div>
<</if>>
<</if>>\
<</widget>><<nobr>><<if $lustPending>><<set $lustPending to false>><<set $lustFrom to "you">><<set $lustChoice to "">><<set $lustBack to "AfterFight">><<goto "LustScene">><br><<elseif $lvlPts gt 0>><<goto "LevelUp">><<else>><<goto "Next">><</if>><</nobr>><<nobr>><h2>Level Up!</h2>You are level $plvl. Unspent points: $lvlPts<br><br>Choose a stat to increase:<br><<link "Max HP +10">><<set $maxhp += 10>><<set $hp += 10>><<set $lvlPts -= 1>><<goto "AfterFight">><</link>><br><<link "Attack +2">><<set $patk += 2>><<set $lvlPts -= 1>><<goto "AfterFight">><</link>><br><<link "Seduction +3">><<set $psed += 3>><<set $lvlPts -= 1>><<goto "AfterFight">><</link>><br><br>Current: HP $hp/$maxhp | Attack $patk | Seduction $psed<</nobr>><<nobr>><<set $msg to "">><<set $crit to "">><<set $qi += 1>><<if $qi gte $queue.length>><<goto "RaidSummary">><<else>><<goto "Raid">><</if>><</nobr>><<nobr>><h2>You were defeated!</h2>The adventurers take $lost gold from you ($gold left) and retreat.<br><<if $over>>You have no gold left. They take the dungeon hearth!<br>[[Continue|GameOver]]<br><<else>>You crawl back to your throne.<br><<set $msg to "">>[[Continue|RaidSummary]]<br><</if>><</nobr>><<nobr>><<if $chiefStory is "pending">><<set $chiefStory to "done">><<goto "ChiefDefeated">><</if>><<if $captives.length gt 0 and not $seenFirst>><<set $seenFirst to true>><<goto "FirstCapture">><</if>><h2>Day $day - Evening</h2><<= setup.sceneBanner("room.jpg", "short")>><<run setup.tributeCheck()>><<if $tributeDay is $day>><div class="event-box"><h3>The weekly tribute</h3><div class="scene" style="white-space:pre-wrap"><<= $tributeMsg>></div></div><</if>><<if $ev and $ev.id is "demon" and $ev.day is $day and not $ev.done>><div class="event-box"><h3><<print $ev.title>></h3><div class="scene">The Demon Lord's messenger, a smug little imp, waits at your door. It demands <<print $ev.gold>> gold, or <<print $ev.caps>> living captive<<if $ev.caps gt 1>>s<</if>>.</div><<set _canGold to ($gold gte $ev.gold)>><<set _canCaps to (setup.aliveCaptives().length gte $ev.caps)>><<if _canGold>><<link `"Hand over " + $ev.gold + " gold"`>><<run setup.eventPayGold()>><<goto "Evening">><</link>><br><</if>><<if _canCaps>><<link `"Hand over " + $ev.caps + " captive" + ($ev.caps gt 1 ? "s" : "")`>><<run setup.eventGiveCaptives()>><<goto "Evening">><</link>><br><</if>><<if not _canGold and not _canCaps>>You can deliver neither.<br><<link "Continue">><<run setup.eventFail()>><<goto "Evening">><</link>><</if>></div><<else>><<if $ev and $ev.id is "demon" and $ev.day is $day and $ev.result>><div class="event-box"><div class="ev-result"><<print $ev.result>></div></div><</if>><div class="cap-line">Gold: $gold | Energy: $energy</div><<link "Dungeon hearth">><<set $hearthBack to "Evening">><<goto "Hearth">><</link>><br><<link "Talk to Stone">><<set $stoneBack to "Evening">><<goto "StoneTalk">><</link>><br><<if $monsterTalkSeen and $goblinDeal isnot "done" and $goblinDeal isnot "sent">><<link "Visit the goblin camp">><<set $campBack to "Evening">><<goto "GoblinCamp">><</link>><br><</if>><<if $merchantDay is $day>><<link "Visit the merchant">><<set $merchBack to "Evening">><<goto "Merchant">><</link>><br><</if>><<if $note>><div class="evening-note"><<= $note>></div><</if>><<if $captives.length gt 0>><<set _c to $captives[0]>><<= setup.portrait(_c, "small")>><div class="cap-line"><b>Next:</b> <<= setup.nameHtml(_c)>> the <<print _c.title || _c.cls>> (Lv _c.lvl) - <<if _c.alive>>captured alive<<else>>dead<</if>> - <<print $captives.length>> waiting.</div><<if _c.alive>><<link "Release">><<run setup.resolve("release")>><<goto "Evening">><</link>><br><<link `"Ransom (" + (setup.BAL.ransomPerLvl * _c.lvl) + " gold)"`>><<run setup.resolve("ransom")>><<goto "Evening">><</link>><br><<if setup.canEnjoy()>><<link `"Have sex with her (+" + setup.BAL.enjoyHp + " max HP)"`>><<run setup.resolve("enjoy")>><<goto "EnjoyScene">><</link>><br><<else>><span class="btn-disabled">Have sex with her - you already had your night</span><br><</if>><<if $goblinDeal is "women">><<link `"Send to the goblins (" + $goblinSent + "/3)"`>><<run setup.goblinSend()>><<goto "Evening">><</link>><br><</if>><<else>><<link `"Loot the body (" + (setup.BAL.lootPerLvl * _c.lvl) + " gold)"`>><<run setup.resolve("loot")>><<goto "Evening">><</link>><br><</if>>[[Feed to a trap|Feed]]<<else>><div class="cap-line">No captives left.</div><<link "Sleep (next day)">><<goto "Sleep">><</link>><</if>><</if>><</nobr>><<nobr>><<set _c to $captives[0]>><h2>Feed to a trap</h2><<= setup.portrait(_c, "small")>><<= setup.nameHtml(_c)>> the <<print _c.title || _c.cls>> (Lv _c.lvl), <<if _c.alive>>alive<<else>>dead<</if>>.<br>Feeding value: <<print setup.feedValue(_c)>> trap XP (<<if _c.alive>>alive captives are worth 3x<<else>>dead bodies are worth less<</if>>)<br><br><div class="tiles"><<for _k range setup.ownedKeys(setup.livingKeys)>><<capture _k>><div class="opt"><br><<= setup.roomTile(_k)>><br><<if setup.atMaxLvl(_k)>><span class="btn-disabled">Max level (<<print setup.BAL.trapMaxLvl>>)</span><<else>><<= setup.bar("XP", $trapXp[_k], setup.trapNeed(_k), "ar")>><</if>><br><<link "Feed">><<run setup.feed(_k)>><<goto "Evening">><</link>><br></div><</capture>><</for>></div><br>[[Back|Evening]]<</nobr>><<nobr>><h2>Game Over</h2>You survived $day day(s). The dungeon has fallen.<br><br><div class="patreon-box"><div class="patreon-text">Thanks for playing! Want more rooms, adventurers and story? Get the newest version on Patreon.</div><a class="patreon-btn" href="https://www.patreon.com/Alexgamesandso/membership" target="_blank" rel="noopener">Get the newest version on Patreon</a><a class="patreon-btn alt" href="https://www.patreon.com/Alexgamesandso/membership" target="_blank" rel="noopener">Support on Patreon</a></div><br><<link "Restart">><<run Engine.restart()>><</link>><</nobr>><<nobr>><h2>Defeated</h2><<set _a to $queue[$qi]>><<= setup.lustMedia($lustFrom, _a, $lustChoice)>><br><div class="scene" style="white-space:pre-wrap"><<= setup.lustText($lustFrom, _a, $lustChoice)>></div><<if $lustFrom is "you" and $lustChoice is "">><<link "Take up her offer">><<set $lustChoice to "accept">><<set $lustStory to setup.lustAccept($queue[$qi])>><<goto "LustScene">><</link>><br><<link "Knock her out">><<set $lustChoice to "ko">><<goto "LustScene">><</link>><br><<else>><<link "Continue">><<set $lustChoice to "">><<set $lustStory to "">><<goto $lustBack>><</link>><br><</if>><</nobr>><<nobr>><h2>Sex</h2><<= setup.sexMedia($enjoyCaptive, $enjoyGif)>><br><div class="scene" style="white-space:pre-wrap"><<= $enjoyStory>></div><<link "Continue">><<goto "Evening">><</link>><</nobr>><<nobr>><h2>Day $day - Raid summary</h2><<= setup.raidSummary()>><br><<link "Continue to the evening">><<goto "Evening">><</link>><</nobr>><<nobr>><h2><<print setup.heroStories[$pidx].title>></h2><div style="text-align:center"><<= setup.portrait(setup.playerObj($pidx), "big huge")>></div><div class="char-name" style="text-align:center"><<print setup.chars[$pidx].name>> <span style="opacity:.6">(<<print setup.chars[$pidx].desc>>)</span></div><div class="scene" style="white-space:pre-wrap"><<print setup.heroStories[$pidx].text.join("\n\n")>></div><<link "Enter your dungeon">><<goto "IntroCave">><</link>><</nobr>><<nobr>><h2>Your dungeon</h2><<= setup.sceneBanner("dungeon_entrance.jpg")>><div class="scene" style="white-space:pre-wrap">The road ends in a stretch of dead forest. Between the bare trees, a doorway of old stone slabs leads into the hillside, a few small skulls carved into its pillars. No towers, no iron gates, no banners.<br><br>This is the dungeon the Demon Lord has given you. From the outside it looks like little more than a forgotten tomb entrance.</div><br>[[Go inside|IntroHearth]]<</nobr>><<nobr>><h2>The Dungeon Hearth</h2><<= setup.sceneBanner("dungeon_hearth.jpg")>><div class="scene" style="white-space:pre-wrap">You were expecting a damp cave and not much else.<br><br>What you find is an old, forgotten hall. Carved pillars flicker with torchlight, worn stairs climb to a stone terrace, and a pool of glowing turquoise water lies at the back of the cavern. In the middle of it all stands a carved stone shrine, crowned with a glowing amber crystal: the dungeon hearth, the heart of every dungeon in the Demon Lord's realm. It hums softly, as if it were waiting for something.<br><br>You look around and find no monsters, no traps, no treasure. Not even a bed.<br><br>You are exhausted from the long journey. You sit down on the cold floor, and since there is nothing else to do, you lie down to think about how to go on from here.</div><br>[[Sleep|IntroDay1]]<</nobr>><<nobr>><h2>Day 1</h2><div class="scene" style="white-space:pre-wrap">You sleep surprisingly well. The soft hum of the hearth carries you off like a lullaby, and you wake up rested and clear-headed, even though you spent the night on cold stone.<br><br>Well. You are a dungeon master, and a dungeon master opens for business. You dust yourself off, take a position near the entrance and wait for the first adventurers to arrive.</div><br>[[Wait for adventurers|IntroNobody]]<</nobr>><<nobr>><h2>Day 1</h2><div class="scene" style="white-space:pre-wrap">You wait.<br><br>A bat flies in and flies out again. A drop of water falls from the ceiling, exactly where you were about to sit down. The sun creeps across the cave mouth, and then, slowly, back again.<br><br>Nobody comes. Not a single adventurer. Of course nobody comes: as far as the world is concerned, this is not a dungeon, just a hole in a hill.</div><br>[[Find something else to do|IntroBored]]<</nobr>><<nobr>><h2>Day 1</h2><div class="scene" style="white-space:pre-wrap">With the whole day to waste, you decide to make some use of it. There is no shop, no town you know of, and no one to talk to. So you do the one thing left: you work out.</div><br><<linkreplace "Do some push-ups">><div class="scene" style="white-space:pre-wrap"><<set $patk to $patk + 1>>Push-ups on a dirty cave floor. A fine way to start a career.<br><br><b>Your attack has increased by 1.</b><br><br>You are about to give up and go back to bed, when a voice behind you says, "Excuse me."</div><<linkreplace "Turn around">><div class="scene" style="white-space:pre-wrap">A small demon is standing in front of you. It is no taller than your knee, with big ears, a bored expression and a crooked little satchel.<br><br>Goblin: "I was told to give you this."<br><br>It hands you a small, grey rock.<br><br>You: "A rock? What am I supposed to do with that?"<br><br>Goblin: "How should I know? I was paid to deliver it, not to explain it."<br><br>And with that, the goblin shrugs and strolls out into the afternoon.</div>[[Put the rock next to the dungeon hearth|IntroRock]]<</linkreplace>><</linkreplace>><</nobr>><<nobr>><h2>Day 1</h2><<= setup.sceneBanner("dungeon_hearth.jpg")>><div class="scene">You set the rock down next to the dungeon hearth, step back, and watch.</div><div class="scene"><<timed 1s>>.<br><<next 1s>>..<br><<next 1s>>...<br><<next 1s>>Nothing happens.<br><br>You now own an ordinary rock. What great progress.<br><br>[[Go to sleep, since there is nothing else to do|IntroStone]]<br><</timed>><br></div><</nobr>><<nobr>><<set $day to 2>><h2>Day 2</h2><div class="scene" style="white-space:pre-wrap">A voice drifts into your dream.<br><br>"Wake up."<br><br>You roll over. "Five more minutes."<br><br>"Wake up, Dungeon Master."<br><br>You open one eye, and then the other. Nobody is there.</div><<linkreplace "Look around">><div class="scene" style="white-space:pre-wrap">"Sleeping on the floor is not good for me," you mutter. "I am starting to hallucinate."<br><br>Stone: "You are not hallucinating. I am Stone, your appointed advisor."<br><br>You stare at the rock next to the hearth.<br><br>You: "A talking stone."<br><br>Stone: "Stone is my family name. I come from a long and distinguished line of dungeon advisors."<br><br>You: "But you are a stone."<br><br>Stone: "I am, in fact, what one might call a stone. I assure you that I am nonetheless highly capable."<br><br>You: "And your job is to help me run this cave?"<br><br>Stone: "Precisely. And your first adventurer should arrive shortly."<br><br>You: "Why would anyone come here? Nobody has even heard of this place."<br><br>Stone: "I posted a quest in the nearest town, offering a generous reward for scouting this cave."<br><br>You: "They took a quest from a stone?"<br><br>Stone: "I sent it by letter."<br><br>You: "...That makes sense, actually."</div><<linkreplace "Ask about the dungeon">><div class="scene" style="white-space:pre-wrap">You: "So what exactly do we have to work with?"<br><br>Stone: "A hearth, a cave, a rock with a remarkable intellect, and you. In the last two days I have dug out two chambers along the entrance tunnel. They are empty, but they are ideal for traps and monsters."<br><br>You: "And what traps do we have?"<br><br>Stone: "None. At present we own nothing at all. I have, however, persuaded a dungeon merchant to visit us in a couple of days. He sells traps, monsters and the occasional useful item. We should have something ready by then."<br><br>You: "And until then?"<br><br>Stone: "Until then, you must look threatening. The adventurer from the quest is on her way. She is a rookie, but she is armed. You will have to deal with her yourself. And keep in mind: she will meet nothing but empty rooms, so she will arrive at your door in good health."<br><br>You: "Fantastic."</div>[[Prepare for your first adventurer|DayStart]]<</linkreplace>><</linkreplace>><</nobr>><<nobr>><h2>Your first adventurer</h2><<set _c to $captives[0]>><<= setup.portrait(_c, "mid")>><<if _c.alive>><div class="scene" style="white-space:pre-wrap">_c.name lies on the cave floor, breathing hard, flushed and defeated.<br><br>Stone: "Congratulations. You have beaten your first adventurer."</div><<linkreplace "Search her">><<set $gold to $gold + 15>><div class="scene" style="white-space:pre-wrap">You find <span style="color:#f2d04a">15 gold</span> in her pockets.<br><br>You: "Found a little gold. What should I do with her gear?"<br><br>Stone: "Leave it. Damaged and stolen equipment is hard to sell, and the gold wouldn't justify the effort."</div><<linkreplace "Look at the hearth">><div class="scene" style="white-space:pre-wrap">The dungeon hearth begins to glow, then pulses like a heartbeat, and the light fades again.<br><br><span style="color:#c58cff"><<print setup.energyFor(_c)>> energy</span> flows into the crystal.<br><br>Stone: "Whenever an adventurer falls in your dungeon, the hearth drinks a little of her fear and lust. You can spend that energy at the hearth to expand your dungeon with new rooms."</div><<linkreplace "And what do we do with her?">><div class="scene" style="white-space:pre-wrap">You: "She isn't dead, you know. What do we do with her?"<br><br>Stone: "That is up to you. The usual approach for a fallen adventurer is to take her to your bedroom, or to give her to one of your monsters. Or to feed her to a trap, if you do not mind a mess."<br><br>Stone: "But in this case, I advise we let her go."<br><br>You: "Why would we just let her go?"<br><br>Stone: "Because at the moment, the town thinks this is just a cave worth a quick scouting trip. We need her to go back and spread the word of a real dungeon, so that more adventurers come."<br><br>You: "Makes sense."</div><<linkreplace "Throw her out">><<run setup.resolve("release")>><div class="scene" style="white-space:pre-wrap">You haul her to the cave entrance and send her stumbling down the hill, with her gear, her pride and a lot to talk about.<br><br>Stone: "Good. With luck, there will be more of them soon. We should use the time to prepare. The merchant will arrive in a few days, and by then you will want some gold. Rest now, Dungeon Master."</div>[[Continue|Evening]]<</linkreplace>><</linkreplace>><</linkreplace>><</linkreplace>><<else>><div class="scene" style="white-space:pre-wrap">_c.name lies motionless on the cave floor. She will not be getting up.<br><br>Stone: "Ah. She did not survive. That is unfortunate. The dead do not tell tales, and we need live adventurers to carry the word of this dungeon back to town."<br><br>Stone: "Next time, you might want to be a bit gentler. Alive and humiliated is far better for business."</div>[[Continue|Evening]]<br><</if>><</nobr>><<nobr>><<set $merchSeen to $day>><h2>Day $day - The merchant has arrived</h2><<= setup.sceneBanner("merchant.jpg", "tall")>><<if not $metMerchant>><div class="scene" style="white-space:pre-wrap">A heavy boot nudges your ribs. You jerk upright, ready to fight, and find an ogre in a fur-collared coat grinning down at you, a quill tucked in his fist and a gold ring through his nose. Behind him a battered merchant cart has parked at the cave mouth, and a small goblin leans out of its window, waving.<br><br>Ogre: "Morning. I am the merchant your rock wrote to. Where is that rock of yours? We should discuss business."<br><br>Stone: "He is who he says he is, Dungeon Master. I wrote to him myself."<br><br>The ogre drags a creaking chest down from the cart and spreads a blanket out in front of it.<br><br>Ogre: "A new dungeon, a new customer. Your first visit is on the house. Pick one trap, any trap you like, and it is yours. And since you will want to survive the first week, here is a starter pack: three Health Potions, two Grenades and two Horny Potions. Throw the pink ones at anyone you would like to be nicer to you."</div><div class="legend">Choose your free trap:</div><<for _k range setup.giftKeys>><<capture _k>><<link `"Take the " + setup.rooms[_k].name`>><<run setup.giveGift(_k)>><<goto "MerchantArrival">><</link>><br><</capture>><</for>><<else>><<if $giftDay is $day>><div class="scene" style="white-space:pre-wrap">The ogre tosses you your gift with a grin. <b>You received a <<print $giftName>>, 3 Health Potions, 2 Grenades and 2 Horny Potions.</b><br><br>Ogre: "A good choice. Now, if you want something more, I am happy to take your gold."</div><<else>><<if $merchantVisits is 2>><div class="scene" style="white-space:pre-wrap">The familiar voice at the cave entrance is more cheerful than usual.<br><br>Ogre: "Keeper! Still standing, I see. Good. I found something nice for you."<br><br>Ogre: "A special coating for dart traps. A potion of my own making. Anyone who gets hit by one of your darts comes away with a bigger chest, one size at a time."<br><br>You: "...You made that on purpose?"<br><br>Ogre: "I make everything on purpose. It works on all your dart traps at once. I will sell you the upgrade, if you want it."</div><<else>><div class="scene">You are woken by a familiar cheerful voice at the cave entrance: the travelling merchant has set up shop again.</div><</if>><</if>><br><div class="legend">You can visit him now, or leave him for later.</div><<link "Go to the merchant">><<set $merchBack to "DayStart">><<goto "Merchant">><</link>><br><<link "Not now">><<goto "DayStart">><</link>><br><</if>><</nobr>><<nobr>><h2>The Dungeon Hearth</h2><<= setup.sceneBanner("dungeon_hearth.jpg")>><div class="scene">The hearth hums softly. Whenever an adventurer falls in your dungeon, it drinks a little of her fear and lust.</div><div class="sum-tot"><div class="sum-box"><b class="sum-energy">$energy</b>Energy</div><div class="sum-box"><b><<print $dungeon.length>> / <<print setup.maxRooms>></b>Trap rooms</div></div><<if $dungeon.length lt setup.maxRooms>><<set _cost to setup.hearthCost()>><<if $energy gte _cost>><<link `"Expand the dungeon: a new room (" + _cost + " energy)"`>><<run setup.hearthUpgrade()>><<goto "Hearth">><</link>><br><<else>>Expand the dungeon: a new room (<<print _cost>> energy) - not enough energy.<br><</if>><br><<else>>Your dungeon is fully expanded.<br><</if>><br><br><<link "Back">><<goto $hearthBack>><</link>><</nobr>><<nobr>><<set _a to $queue[$qi]>><h2>The Village Chief</h2><div class="speaker-card"><<= setup.portrait(_a, "mid")>><div class="cap"><<= setup.nameHtml(_a)>> · Village Chief</div></div><<if not $chiefMet>><div class="scene" style="white-space:pre-wrap">The last chamber lies behind her. Ingrid steps out of it, battered and out of breath, a woodcutter's axe in both hands and a singed sash of office across her chest. She stops a few paces from you and looks you up and down.<br><br>Ingrid: "So you are the one who lives in this hole."<br><br>You: "And you are?"<br><br>Ingrid: "Ingrid. Chief of the village at the foot of this hill."<br><br>She glances back at the dungeon she just crossed.<br><br>Ingrid: "Do you know how many of my people have come up here, these past few days? Farmers. Weavers. Boys who can barely lift a pitchfork. Every one of them dreaming of coming home rich."<br><br>Ingrid: "Most of them came back with nothing but bruises, and a story they were too ashamed to tell. I am the chief. It is my job to look after them, even from their own greed."<br><br>Ingrid: "So I will make sure that nobody from my village ever comes here again."<br><br>You: "And how do you plan to do that?"<br><br>She raises the axe.<br><br>Ingrid: "Like this."</div><<else>><div class="scene" style="white-space:pre-wrap">Ingrid steps out of the last chamber, her arm in a fresh bandage and her eyes harder than before.<br><br>Ingrid: "I said nobody from my village would come here again. I meant it. Round two."</div><</if>><br><div class="legend">You could talk to her first. Ask her something:</div><div class="chief-ask"><br><<link "Why do you hate this dungeon so much?">><<replace "#chief-answer">><div class="scene" style="white-space:pre-wrap">You: "Why do you hate this dungeon so much?"<br><br>Ingrid: "Hate? It is taking my people, one by one. This week, half the fields went unplanted because the young ones were busy dreaming about your gold. A village cannot live on dreams."</div><</replace>><</link>><br><<link "What happened to the ones who came back?">><<replace "#chief-answer">><div class="scene" style="white-space:pre-wrap">You: "What happened to the ones who came back?"<br><br>Ingrid: "They came back quiet. They flinched at shadows and would not meet my eyes. One of them locked herself in her room for a week and would not say a word about what she saw down here."<br><br>She tightens her grip on the axe.<br><br>Ingrid: "I do not need to know the details. I know what your halls do to people."</div><</replace>><</link>><br><<link "Tell me about your village.">><<replace "#chief-answer">><div class="scene" style="white-space:pre-wrap">You: "Tell me about your village."<br><br>Ingrid: "Small. Poor. Forty families, a mill and a very bad road. We have no soldiers, only people who work. I have been chief for eleven years, and I have never seen one of them come home broken. Until you."</div><</replace>><</link>><br><<link "Aren't you afraid of me?">><<replace "#chief-answer">><div class="scene" style="white-space:pre-wrap">You: "Aren't you afraid of me?"<br><br>Ingrid: "Terrified. My knees have been shaking since the first room." She laughs, short and humorless. "But a chief who stays home because she is afraid is no chief at all."</div><</replace>><</link>><br><<link "Can we make a deal?">><<replace "#chief-answer">><div class="scene" style="white-space:pre-wrap">You: "Can we make a deal? Leave me be, and I will let your people go home safe."<br><br>Ingrid: "Safe, in a place built to lure them in? No. There is no deal with a trap. The only thing I will accept is this place shut for good."</div><</replace>><</link>><br></div><div id="chief-answer"></div><br><<link "Draw your weapon">><<set $chiefMet to true>><<goto "Boss">><</link>><</nobr>><<nobr>><<set _a to $queue[0]>><h2>Day $day - Evening</h2><div class="speaker-card"><<= setup.portrait(_a, "mid")>><div class="cap"><<= setup.nameHtml(_a)>> · Village Chief</div></div><div class="scene" style="white-space:pre-wrap">Ingrid sinks down against the cave wall, her axe lying useless beside her. She is bruised, panting and furious, but she is alive, and you made sure of it.<br><br>Stone: "Well done, Dungeon Master. Note that she is still breathing. A dead chief would have brought the entire village up this hill with torches."<br><br>Stone: "And note something else. Villagers were never going to be a real test, and you have just beaten the best of them. You are strong enough now for something more challenging."</div><<linkreplace "Ingrid gets back on her feet">><div class="scene" style="white-space:pre-wrap">Ingrid pulls herself up along the wall, picks up her axe and leans on it like a walking stick.<br><br>Ingrid: "Enough. You have won. This time."<br><br>She spits on the floor and looks at you, more tired than angry.<br><br>Ingrid: "If my people are not enough to stop you, then this is a job for professionals. Tomorrow I will go to the Adventurers' Guild and post a quest about this dungeon."<br><br>You: "You would send even more people up here?"<br><br>Ingrid: "I would send people who know which end of a sword to hold. Maybe they will finish what I could not."<br><br>She limps out of the cave and down the hill without looking back.<br><br>Stone: "Hm. A quest on the guild board is exactly what this dungeon needs, even if it was not meant as a favor. Knights, mages and worse will come. Prepare accordingly. Rest now, Dungeon Master. Tomorrow will be different."</div>[[Continue|Evening]]<</linkreplace>><</nobr>><<nobr>><h2>Night</h2><<= setup.sceneBanner("bed.jpg", "tall")>><<set _t to either(
"You sleep deeply and well. The hearth hums quietly in the dark, and not a single worry follows you into your dreams.",
"You sleep like a log. The cave is warm, the night is quiet, and you wake up feeling completely rested.",
"A good night's sleep. The soft glow of the hearth keeps the shadows away, and you dream of full traps and empty purses.",
"You drift off the moment you lie down and sleep soundly until morning. Whatever the new day brings, you are ready for it."
)>><br><div class="scene"><<print _t>></div><<if $day % 5 is 0>><div class="patreon-box"><div class="patreon-text">Day $day survived! The newest version of the game is on Patreon.</div><a class="patreon-btn" href="https://www.patreon.com/Alexgamesandso/membership" target="_blank" rel="noopener">Get the newest version on Patreon</a><a class="patreon-btn alt" href="https://www.patreon.com/Alexgamesandso/membership" target="_blank" rel="noopener">Support on Patreon</a></div><</if>><<link "Wake up">><<set $day += 1>><<goto "DayStart">><</link>><</nobr>><<nobr>><<set $tributeMet to true>><<set $nextTribute to 14>><h2>Day $day</h2><div class="scene" style="white-space:pre-wrap">Something pulls you out of sleep. It is not a dream this time: it is Stone, and Stone sounds tense.<br><br>Stone: "Dungeon Master. Wake up. You have a visitor."<br><br>You: "Adventurers? It is barely dawn."<br><br>Stone: "No. Worse. Much worse. Put something on and come to the hearth."</div><<linkreplace "Go to the hearth">><div class="speaker-card"><img class="envoy-img" src="images/demon.png" alt="" onerror="this.parentNode.classList.add('noimg')"><div class="cap">Vessa · Envoy of the Demon Lord</div></div><div class="scene" style="white-space:pre-wrap">A woman is waiting beside the hearth. Her skin is deep red, her eyes are gold, and a pair of curved horns sweeps up from her brow. A worn cloak hangs from her shoulders, and a brass collar stamped with the Demon Lord's seal sits at her throat. She does not look at the cave. She looks at you.<br><br>Vessa: "Dungeon Keeper. I am Vessa, envoy of the Demon Lord. I will keep this short."<br><br>Vessa: "You hold this dungeon as the Demon Lord's vassal. A vassal pays tribute. Every week, in coin, to the Demon Lord's treasury. Your first payment falls due at the end of next week, and I will see that it is collected."<br><br>You: "Tribute. Of course."<br><br>Vessa: "And do not mistake the tribute for the limit. The Demon Lord's appetite is not a fixed quantity. There will be days when he wants more."</div><<linkreplace "Stone speaks up">><div class="scene" style="white-space:pre-wrap">Stone: "If I may, Envoy. Consider where this dungeon lies. It sits deep in human territory, days from the nearest demon outpost, and the Dungeon Master has barely started. We have little gold, and fewer traps."<br><br>Stone: "And consider what we already give. Every day this dungeon stands, the Demon Lord's influence reaches a little further into lands he could never touch before. Simply being here is a service to him. That, too, has value."<br><br>Vessa: "Value, yes. That is why you are still standing. But value is not payment. You will still pay the tribute."<br><br>Vessa: "Understand what you receive for it. The Demon Lord grants you a status very few vassals ever see. You answer for your own dungeon: no overseer, no garrison, no inspector at your door. You are, for the most part, autonomous. That is worth far more than a few coins."<br><br>You: "...When you put it that way."<br><br>Stone: "We appreciate it, Envoy. Truly. Please give the Demon Lord our thanks."<br><br>Vessa: "I will. Pay on time, Keeper."</div><<linkreplace "She leaves">><div class="scene" style="white-space:pre-wrap">She turns and walks out of the cave. For a moment her silhouette is black against the morning light, and then she is gone.<br><br>Stone: "Well. That went better than it could have."<br><br>You: "She is coming back in a week."<br><br>Stone: "Yes. With her hand out. Gold will be due at the end of day fourteen, and every seven days after that. Do try to have some."</div>[[Start the day|DayStart]]<</linkreplace>><</linkreplace>><</linkreplace>><</nobr>><<nobr>><<set _a to $queue[$qi]>><h2>The Crimson Blade</h2><div class="speaker-card"><<= setup.portrait(_a, "mid")>><div class="cap"><span class="champ-name">Seraphine</span> · the Crimson Blade</div></div><div class="scene" style="white-space:pre-wrap">The last chamber opens, and she walks out of it without a scratch. Her armor is not even dusty. She glances back at the traps she just crossed, and then she looks at you.<br><br>Seraphine: "So. You are the keeper."<br><br>You: "..."<br><br>Seraphine: "I heard there was a new dungeon in these hills. A baby of a dungeon, buried in human country and days from the nearest demon outpost. I was curious, so I came to take a look."<br><br>Seraphine: "I will be honest with you. So far I am not really impressed."<br><br>Seraphine: "Rooms that tickle. Monsters that bark. Tell me the best part is still ahead."</div><br><<link "Fight her">><<goto "ChampionFight">><</link>><</nobr>><<nobr>><<set _a to $queue[$qi]>><h2>The Crimson Blade</h2><div class="speaker-card"><<= setup.portrait(_a, "mid")>><div class="cap"><span class="champ-name">Seraphine</span> · the Crimson Blade</div></div><div class="scene" style="white-space:pre-wrap">You draw your weapon and strike first, with everything you have.<br><br>Seraphine does not even raise her sword. She tilts her head, lets your blow slide past, and taps you in the chest with the tip of her sheathed sword. It is only a tap. It lifts you off your feet and throws you into the cave wall, and the breath leaves you in a rush.<br><br>You try to stand. Your legs refuse. She has not even drawn the sword.<br><br>Seraphine: "That was it?"<br><br>Seraphine: "You are too weak. There is no challenge here at all. I have fought village children who hit harder."<br><br>Seraphine: "A dungeon is supposed to be a test. This is a cave with a few toys in it. Come back when you have grown into something worth my time."</div><<linkreplace "She turns to leave">><div class="scene" style="white-space:pre-wrap">Your hand drifts to your gold pouch out of habit. She does not even look at it.<br><br>Seraphine: "Keep your coins. I do not take money from the weak. It would be like robbing a puddle."<br><br>She walks out of the cave without looking back, and the daylight swallows her silhouette.<br><br>Stone: "...She took nothing. I cannot decide whether to be relieved or insulted."<br><br>You: "Both."</div><<link "Continue">><<run setup.championDown()>><<goto "RaidSummary">><</link>><</linkreplace>><</nobr>><<nobr>><<set $monsterTalkSeen to true>><h2>Day $day</h2><div class="scene" style="white-space:pre-wrap">Stone: "Dungeon Master. A word, before you start the day."<br><br>Stone: "Since yesterday, I have been thinking. Traps alone will never stop someone like her. Adding monsters to your dungeon would help. Creatures that fight back, and that grow."<br><br>You: "Monsters. And where do we get monsters?"<br><br>Stone: "I have sent out scouts, and they have found a tribe of goblins. They are camped a short walk from here."</div><<linkreplace "Ask about the scouts">><div class="scene" style="white-space:pre-wrap">You: "Scouts? How do you scout anything? You are a rock. You cannot even move."<br><br>Stone: "My clan is very proficient in magic. Scouting is a trivial spell for us."<br><br>Stone: "Besides, I can move if I want to."<br><br>You: "Then move. Right now."<br><br>Stone: "No."<br><br>You: "You just said you can!"<br><br>Stone: "I said I can. I did not say I want to."<br><br>You: "..."<br><br>Stone: "Back to the goblins. You can meet them now, if you want. They are waiting outside."</div><br><<link "Meet the goblins">><<set $campBack to "DayStart">><<goto "GoblinCamp">><</link>><br><<link "Not now">><<goto "DayStart">><</link>><</linkreplace>><</nobr>><<nobr>><h2>The Goblin Camp</h2><<if $goblinDeal is "done">><div class="scene" style="white-space:pre-wrap">Grukk: "A pleasure doing business. One squad of my best, yours to put wherever you like. Do not let them get bored."<br><br><b>You received a Goblin squad.</b> Place it in a room like any trap.</div><<link "Back">><<goto `$campBack || "Prep"`>><</link>><<else>><<if not $goblinSeen>><<set $goblinSeen to true>><<set $goblinDeal to "offered">><div class="scene" style="white-space:pre-wrap">A tribe of goblins has set up camp in the clearing below your cave: tents of patched hide, cookfires, a lot of loud talking. A tall, scarred goblin with a crooked crown of bones steps forward to meet you.<br><br>Grukk: "So you are the keeper. The rock told us about you. I am Grukk, chief of this tribe."<br><br>Grukk: "I can give you some of my goblins. A squad of them, mean enough to fight in your halls. But there is a price."<br><br>You: "What is the price?"<br><br>Grukk: "Two hundred gold. Or three women for my men."</div><<elseif $goblinDeal is "women">><div class="scene" style="white-space:pre-wrap">Grukk: "Three women. You have sent $goblinSent so far. When the third arrives, my goblins follow you home the next day. Or you can still pay the gold, if you prefer."</div><<else>><div class="scene" style="white-space:pre-wrap">Grukk: "Back already? Two hundred gold, or three women for my men. Have you made up your mind?"</div><</if>><<if $goblinDeal is "offered" or $goblinDeal is "women">><<if $gold gte 200>><<link "Pay 200 gold">><<run setup.goblinPay()>><<goto "GoblinCamp">><</link>><<else>><span class="btn-disabled">Pay 200 gold - not enough gold (you have $gold)</span><</if>><br><<if $goblinDeal is "offered">><<link "Bring him three women">><<set $goblinDeal to "women">><<goto "GoblinCamp">><</link>><br><</if>><</if>><<if $goblinDeal is "women">><div class="scene" style="white-space:pre-wrap">Grukk: "Three. Send them from your cells, one at a time. Captives who are still alive, mind. The dead are no use to us."</div><</if>><<link "Leave">><<goto `$campBack || "Prep"`>><</link>><</if>><</nobr>><<nobr>><<run setup.goblinArrival()>><h2>Day $day - Visitors</h2><div class="scene" style="white-space:pre-wrap">Stone: "Dungeon Master. We have company. A great deal of it."<br><br>You step out of the cave to find Grukk and a squad of goblins standing in the weeds, weapons on their shoulders, grinning at everything.<br><br>Grukk: "Three women, as agreed. A deal is a deal. Here is my squad."<br><br>Grukk: "They are yours to put wherever you like. Try to keep them fed."<br><br><b>You received a Goblin squad.</b> Place it in a room like any trap.</div><<link "Continue">><<goto "DayStart">><</link>><</nobr>><<link "Get the newest version on Patreon">>
<<run window.open("https://www.patreon.com/Alexgamesandso/membership", "_blank", "noopener")>>
<</link>>