<<nobr>><div class="start-menu-shell">
<div class="start-menu-panel">
<div class="start-menu-hero">
<img src="img/menu/Header.png" alt="Medieval Life">
<div>
<div class="start-menu-title">Medieval Life</div>
<div class="start-menu-subtitle">A new life begins.</div>
</div>
</div>
<div class="start-menu-copy">
Embark in an adventure in this adult open world life simulator game and shape who you become. Work, rest, meet people, and let your choices carry you toward friendship, romance, trouble, or something far more dangerous.
</div>
<div class="start-menu-actions" >
This game contains explicit adult content and is intended for individuals aged 18 and older. By proceeding, you confirm you are of legal age in your jurisdiction.
[[Start Game|Character Creator]]
</div>
<div class="start-menu-copy">
Support the game, follow development, or join the community here.
</div>
<div class="start-menu-community">
<a href="https://patreon.com/Bromedy69" target="_blank" rel="noopener"><img src="img/menu/PatreonSupport.jpg" alt="Patreon"></a>
<a href="https://discord.gg/PDqefSqRtT" target="_blank" rel="noopener"><img src="img/menu/DiscordLogo.png" alt="Discord"></a>
</div>
</div>
</div><</nobr>><<nobr>><<set _porter = setup.dockWorkPortraitNpc("porter")>>
<div class="npc-activity-panel farm-work-event-panel">
<p>A shallow cargo boat has come in riding low, with fish packed in straw beneath barrels of salt. Its skipper wants the landing cleared before the tide turns. The boards are slick, the tally is damp, and the crew have begun passing crates before anyone agrees where they should go.</p>
<p><<print setup.npcEventMentionHtml(_porter, "The porter")>> catches your eye as a crate nearly clips the edge of the gangplank. He plants his boot against it and waits for you to take a place in the work.</p>
<<print setup.npcEventDialogueHtml(_porter, "We can get this ashore quickly, but only if someone minds the load. Pick your part and stay with it. I would rather count the crates once than fish them out of the water.", "The porter")>>
<div class="npc-activity-choice-list">
<div><<link "Form a passing line" "DockWorkCargoIncident">><<run setup.dockWorkCargoPrepare("line")>><</link>></div>
<<if setup.playerAttributeMeets("strength", 10)>><div><<link "[Strength] Take the heaviest crates" "DockWorkCargoIncident">><<run setup.dockWorkCargoPrepare("lift")>><</link>></div><</if>>
<<if setup.playerAttributeMeets("intelligence", 8)>><div><<link "[Intelligence] Check the tally and seals" "DockWorkCargoIncident">><<run setup.dockWorkCargoPrepare("tally")>><</link>></div><</if>>
<<if setup.playerHasTrait("protective")>><div><<link "[Protective] Keep the new hand clear of the load" "DockWorkCargoIncident">><<run setup.dockWorkCargoPrepare("protect")>><</link>></div><</if>>
<<if Number($invSalt || 0) > 0>><div><<link "[Salt] Use your own salt to secure the wet fish crates" "DockWorkCargoIncident">><<run setup.dockWorkCargoPrepare("salt")>><</link>></div><</if>>
</div></div><</nobr>><<nobr>><<set _run = $dockWorkCargoRun>><<set _porter = setup.dockWorkPortraitNpc("porter")>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !_run>><p>The boat has already been unloaded.</p>[[Return to the piers|Ambercross Piers]]
<<else>>
<<if _run.approach is "line">><p>You set a steady rhythm between boat and shed. For a while it works: each crate reaches a pair of waiting hands before the next is lifted. Then the rope around a barrel loosens and its weight rolls toward the gangplank.</p>
<<elseif _run.approach is "lift">><p>You carry the largest crates yourself, saving the others a journey with each trip. By the third load your arms burn and wet wood has slicked your palms. Behind you a barrel breaks free of its rope and starts down the sloping boards.</p>
<<elseif _run.approach is "protect">><p>You move beside the newest hand and show him where to stand as the loads change hands. He has just begun to find his rhythm when a barrel jerks loose and rolls straight toward the narrow place where he is working.</p>
<<elseif _run.approach is "tally">><p>The seals look sound, but your count does not match the skipper's ledger. Before you can ask him about it, you see a crate with the wrong mark vanish beneath a canvas at the far end of the landing. The boat is almost empty; whoever moved it expects the mistake to be found too late.</p>
<<else>><p>You spend your own salt to rescue a damp crate, packing the catch tightly enough to survive the walk to the shed. Under the next lid you find a second patch of wet straw. The skipper calls that it is still good; the smell says otherwise. The buyer is already approaching.</p><</if>>
<<if _run.incident is "slipping">>
<<print setup.npcEventDialogueHtml(_porter, "Barrel! Someone stop it before it takes the whole line with it!", "The porter")>>
<div class="npc-activity-choice-list">
<div><<link "Brace the barrel with your body" "DockWorkCargoShiftResult">><<run setup.dockWorkCargoShiftResolve("brace")>><</link>></div>
<div><<link "Warn the crew and clear its path" "DockWorkCargoShiftResult">><<run setup.dockWorkCargoShiftResolve("warn")>><</link>></div>
<div><<link "Step aside and let it fall" "DockWorkCargoShiftResult">><<run setup.dockWorkCargoShiftResolve("dodge")>><</link>></div>
</div>
<<elseif _run.incident is "missing">>
<<print setup.npcEventDialogueHtml(_porter, "That mark is not on my list. Do we stop the unloading, or let the skipper swear it was never here?", "The porter")>>
<div class="npc-activity-choice-list">
<div><<link "Recount against both ledgers" "DockWorkCargoShiftResult">><<run setup.dockWorkCargoShiftResolve("recount")>><</link>></div>
<div><<link "Accuse the nearest hand" "DockWorkCargoShiftResult">><<run setup.dockWorkCargoShiftResolve("accuse")>><</link>></div>
<div><<link "Leave the discrepancy to the skipper" "DockWorkCargoShiftResult">><<run setup.dockWorkCargoShiftResolve("ignore")>><</link>></div>
</div>
<<else>>
<<print setup.npcEventDialogueHtml(_porter, "If we hide the rot, the buyer will bring it back tomorrow. But the skipper will make a noise if we hold the boat here.", "The porter")>>
<div class="npc-activity-choice-list">
<div><<link "Repack the sound fish and set the rest aside" "DockWorkCargoShiftResult">><<run setup.dockWorkCargoShiftResolve("repack")>><</link>></div>
<div><<link "Try to sell the crate as it is" "DockWorkCargoShiftResult">><<run setup.dockWorkCargoShiftResolve("sell")>><</link>></div>
<div><<link "Leave it for the skipper to settle" "DockWorkCargoShiftResult">><<run setup.dockWorkCargoShiftResolve("leave")>><</link>></div>
</div><</if>><</if>></div><</nobr>><<nobr>><<set _run = $dockWorkCargoRun>><<set _porter = setup.dockWorkPortraitNpc("porter")>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !_run or !_run.result>><p>The work has moved on.</p>[[Return to the piers|Ambercross Piers]]
<<else>>
<<if _run.result.success>>
<<if _run.result.choice is "recount">><p>You make the skipper lay his ledger beside the quay tally. The missing crate proves to be under the wrong mark, already stacked behind the canvas. With the discrepancy exposed, the count can be signed before the buyer arrives.</p>
<<elseif _run.result.choice is "repack">><p>You separate the spoiled fish from the sound catch while the porter fetches clean straw. The skipper complains about the delay, but the buyer sees an honest load and takes what remains without argument.</p>
<<elseif _run.result.choice is "brace">><p>You meet the barrel with your shoulder and drive your heels into the wet planks. It nearly takes you with it, but a second worker wedges timber beneath the rim and the load stops short of the water.</p>
<<else>><p>Your warning sends the crew clear before the barrel tears down the gangplank. It strikes an empty post instead of a worker, and the skipper helps you haul it upright before the rope can slip again.</p><</if>>
<p>When the last load reaches the shed, the porter catches you before you can wipe the salt from your hands.</p>
<<print setup.npcEventDialogueHtml(_porter, "You kept your head when the rest of us were ready to shout. I owe you for that. Find me at the next cargo boat and we can settle it properly.", "The porter")>>
<<else>>
<<if _run.result.choice is "sell">><p>The buyer pays before lifting the lid. By evening the fish will smell worse, and he will remember whose hands put the crate on his cart. You have the extra coin now; the complaint will not arrive until later.</p>
<<elseif _run.result.choice is "accuse">><p>The worker you accuse turns out his pockets in front of the whole quay. No missing crate appears. The count remains wrong, and you have given him a reason to remember your face.</p>
<<elseif _run.result.choice is "ignore">><p>You leave the disputed count to the skipper. He signs too quickly, and the fishmonger notices the wrong mark when the cart reaches the shed. No one can settle it while the boat is still unloading.</p>
<<elseif _run.result.choice is "leave">><p>The skipper waves away your concern and sends the wet crate on with the rest. The buyer's runner turns back before the tide is out, holding the lid open for everyone to smell. The loss is now written against the load.</p>
<<elseif _run.result.choice is "dodge">><p>You step out of the barrel's path. It smashes against the post and splits its lid; salt pours between the boards before the crew can right it. The skipper counts the damage in silence.</p>
<<else>><p>The barrel drives you back before the others catch it. A corner splits against the post and some of the salt is lost. The crew salvages the remainder, but the tally will show the damage.</p><</if>>
<p>You collect the wage for the labor you did; the argument about the loss waits for another day.</p>
<<print setup.npcEventDialogueHtml(_porter, "The fishmonger will ask about this when the next boat comes in. Better come with an answer than leave me to invent one for you.", "The porter")>>
<</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<print _run.result.bonusHtml>><<print _run.result.itemHtml>><<print _run.result.standingHtml>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
<</if>></div><</nobr>><<nobr>><<set _pending = $dockWorkCargoPending>><<set _porter = setup.dockWorkPortraitNpc("porter")>><<set _owner = setup.dockWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !_pending>><p>The next boat has not yet arrived.</p>[[Return to the piers|Ambercross Piers]]
<<elseif _pending.kind is "crew">>
<p>A day later, another boat nudges against the lower berth. The porter notices you before the skipper has finished tying off. He has kept a portion of the morning catch aside and there is a second cart to fill before noon.</p>
<<print setup.npcEventDialogueHtml(_porter, "I said I owed you. Take a fish for your supper, or stay and help me load that cart for three extra coins. Neither is part of your ordinary wage.", "The porter")>>
<<if setup.dockWorkCargoPrivateAvailable()>><p>He lowers his voice as the others turn toward the boat. <span class="dialogue-line dialogue-male">"Or meet me behind the canvas when this is done. I would rather have your company than count another crate, and I would still add two coins. Only if you want to."</span></p><</if>>
<div class="npc-activity-choice-list">
<div><<link "Accept the fish" "DockWorkCargoFollowupResult">><<run setup.dockWorkCargoFollowup("share")>><</link>></div>
<div><<link "Stay for the extra loading" "DockWorkCargoFollowupResult">><<run setup.dockWorkCargoFollowup("extra")>><</link>></div>
<<if setup.dockWorkCargoPrivateAvailable()>><div><<link "Meet him behind the canvas (handjob)">><<if setup.dockWorkCargoFollowup("private") and setup.jobPropositionRecord()>><<set $pendingDockWorkEventFavor = { npcId: _porter.id, tone: "ordinary" }>><<set _start = setup.dockWorkStartEventFavor("handjob", 2, "DockWorkCargoPrivateReturn")>><<if _start.success is false>><<goto "DockWorkCargoFollowupResult">><<else>><<goto "NPCEncounter">><</if>><<else>><<goto "DockWorkCargoShiftFollowup">><</if>><</link>></div><</if>>
<div><<link "Thank him and keep to the ordinary shift" "DockWorkCargoFollowupResult">><<run setup.dockWorkCargoFollowup("decline")>><</link>></div>
</div>
<<else>>
<p>The following boat brings more work, but <<print setup.npcEventMentionHtml(_owner, "the fishmonger")>> stops you beside the shed first. He has the old tally open and a note from the buyer who received the last load.</p>
<<print setup.npcEventDialogueHtml(_owner, "I paid you for the shift. I still have two coins missing against that load. You can help put the crates right, cover the loss, or tell me to settle it without you. Say it plainly.", "The fishmonger")>>
<div class="npc-activity-choice-list">
<div><<link "Stay and repair the load" "DockWorkCargoFollowupResult">><<run setup.dockWorkCargoFollowup("repair")>><</link>></div>
<<if Number($c.gold || 0) >= 2>><div><<link "Pay the two gold" "DockWorkCargoFollowupResult">><<run setup.dockWorkCargoFollowup("pay")>><</link>></div><</if>>
<div><<link "Refuse to take responsibility" "DockWorkCargoFollowupResult">><<run setup.dockWorkCargoFollowup("refuse")>><</link>></div>
</div><</if>></div><</nobr>><<nobr>><<set _result = $dockWorkCargoFollowupResult>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !_result>><p>The matter has already been settled.</p>[[Return to the piers|Ambercross Piers]]
<<else>>
<<if _result.choice is "share">><p>You take the fish and leave the porter to his cart. He grins at the exchange; the favor from the earlier shift is settled without another word.</p>
<<elseif _result.choice is "extra">><p>You shoulder crates beside the porter until the cart is full. It takes more out of you than the ordinary shift, but he counts out the promised coins before you part.</p>
<<elseif _result.choice is "decline">><p>You thank him and return to the boat. He does not press you; a debt can be answered without turning every kindness into another bargain.</p>
<<elseif _result.choice is "repair">><p>You sort the damaged cargo and mend the packing before the buyer arrives. The fishmonger checks the final crate, then closes the old tally. It costs you time and effort, but no coin.</p>
<<elseif _result.choice is "pay">><p>You count two coins into the fishmonger's hand. He marks the loss paid and turns back to the fresh cargo without keeping the argument alive.</p>
<<else>><p>You tell him the loss is not yours to settle. He folds the tally sharply and lets you take the shift you already earned, though his expression makes clear he will remember your answer.</p><</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<print _result.bonusHtml>><<print _result.itemHtml>><<print _result.standingHtml>>
<<if _result.choice is "decline" and _result.privateOffered>><p>The extra offer stays in your thoughts for a while, though you were clear about leaving it there.</p><<print setup.jobRefusedIntimacyHtml(_result, "cargo_private")>><</if>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
<</if>></div><</nobr>><<nobr>><<set _favor = $dockWorkEventFavorResult>><<set _porter = setup.dockWorkPortraitNpc("porter")>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _favor and _favor.paid>>
<p>You return to the quay after your private meeting. The porter keeps his word and adds two coins to the wage you earned unloading the boat. The crew are busy with the next cart and ask no questions.</p>
<<print setup.npcEventDialogueHtml(_porter, "You did not have to say yes. I am glad you did. We can leave it between us.", "The porter")>>
<p class="farm-work-gain-line">Private arrangement: <b id="Goldgain">+<<= _favor.gold >> Gold</b></p>
<<if _favor.standingHtml>><<print _favor.standingHtml>><</if>>
<<else>><p>The private arrangement was not completed. The ordinary wage for the cargo shift remains yours.</p><</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<set $dockWorkEventFavorResult = null>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<set _porter = setup.dockWorkPortraitNpc("porter")>>
<div class="npc-activity-panel farm-work-event-panel">
<p>The crew have almost raised a net of barrels from the boat when the pulley begins to chatter. You hear the splinter before you see it: a tooth breaks from the wooden wheel and the load drops a handspan. Everyone beneath it freezes. The rope has snagged for now, but each pull twists it deeper into the damaged groove.</p>
<p><<print setup.npcEventMentionHtml(_porter, "The porter")>> waves the nearest workers clear, then puts one palm against the swaying barrels. He cannot hold them there while the others unload the boat.</p>
<<print setup.npcEventDialogueHtml(_porter, "Tell me before that rope moves again. I can fetch a spare wheel, but we will lose the tide. If you take the weight, I can free the line. Or cut it and let the barrels fall where nobody is standing.", "The porter")>>
<div class="npc-activity-choice-list">
<<if setup.dockWorkCargoVariationAvailable("hoist_rig")>><div><<link "[Dockwork] Stop the lift and rig the spare wheel" "DockWorkCargoVariationResult">><<run setup.dockWorkCargoVariationResolve("hoist_rig")>><</link>></div><</if>>
<<if setup.dockWorkCargoVariationAvailable("hoist_catch")>><div><<link "[Strength] Hold the load while he frees the rope" "DockWorkCargoVariationResult">><<run setup.dockWorkCargoVariationResolve("hoist_catch")>><</link>></div><</if>>
<div><<link "Cut the line and save the crew" "DockWorkCargoVariationResult">><<run setup.dockWorkCargoVariationResolve("hoist_cut")>><</link>></div>
</div></div><</nobr>><<nobr>><<set _porter = setup.dockWorkPortraitNpc("porter")>>
<div class="npc-activity-panel farm-work-event-panel">
<p>A little ferry reaches the pier just as the tide draws away from the landing steps. Its boatman has two baskets of fish to deliver, a passenger with a stiff leg, and no safe way to bridge the widening gap. The boat bumps against the lower posts while the passenger grips the gunwale and tries not to look down.</p>
<p>A waiting cart blocks half the quay. Moving it would let you bring planks to the lower step, but the skipper behind you wants his own cargo unloaded first. The boatman calls that he can wait for the tide; the fish will not improve while he does.</p>
<<print setup.npcEventDialogueHtml(_porter, "We can carry their baskets through the shallows, make a proper bridge, or leave them aboard until the water comes back. What do you want the crew doing?", "The porter")>>
<div class="npc-activity-choice-list">
<<if setup.dockWorkCargoVariationAvailable("ferry_wade")>><div><<link "[Fitness] Wade out and bring the baskets ashore" "DockWorkCargoVariationResult">><<run setup.dockWorkCargoVariationResolve("ferry_wade")>><</link>></div><</if>>
<<if setup.dockWorkCargoVariationAvailable("ferry_plank")>><div><<link "[Dockwork] Move the cart and lay a plank bridge" "DockWorkCargoVariationResult">><<run setup.dockWorkCargoVariationResolve("ferry_plank")>><</link>></div><</if>>
<div><<link "Let the ferry wait for a safer tide" "DockWorkCargoVariationResult">><<run setup.dockWorkCargoVariationResolve("ferry_wait")>><</link>></div>
</div></div><</nobr>><<nobr>><<set _owner = setup.dockWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>The last thing off the boat is a narrow chest bound in red cord. The skipper insists it belongs on his cart, though the mark on its seal looks nothing like the one on his cargo list. He offers a coin for speed and another if you keep the matter between you. His gaze lingers on your body longer than it does on the chest.</p>
<p><<print setup.npcEventMentionHtml(_owner, "The fishmonger")>> has seen the mismatch too. He draws you aside before the skipper can put the chest in your hands.</p>
<<print setup.npcEventDialogueHtml(_owner, "That seal is wrong. You may check the manifest with me, report the false mark plainly, or carry it and let the skipper own whatever is inside. He is trying to make you think about his offer instead of the ledger.", "The fishmonger")>>
<div class="npc-activity-choice-list">
<<if setup.dockWorkCargoVariationAvailable("chest_check")>><div><<link "[Intelligence] Compare the seal against the manifest" "DockWorkCargoVariationResult">><<run setup.dockWorkCargoVariationResolve("chest_check")>><</link>></div><</if>>
<<if setup.dockWorkCargoVariationAvailable("chest_honest")>><div><<link "[Honest] Report the false mark in front of both men" "DockWorkCargoVariationResult">><<run setup.dockWorkCargoVariationResolve("chest_honest")>><</link>></div><</if>>
<div><<link "Play along with the skipper and take his extra coins" "DockWorkCargoVariationResult">><<run setup.dockWorkCargoVariationResolve("chest_flirt")>><</link>></div>
<div><<link "Carry the chest without making a bargain" "DockWorkCargoVariationResult">><<run setup.dockWorkCargoVariationResolve("chest_carry")>><</link>></div>
</div></div><</nobr>><<nobr>><<set _result = $dockWorkCargoVariationResult>><<set _npc = _result and _result.choice.startsWith("chest_") ? setup.dockWorkTrialNpc() : setup.dockWorkPortraitNpc("porter")>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !_result>><p>The work has moved on.</p>[[Return to the piers|Ambercross Piers]]
<<else>>
<<if _result.choice is "hoist_rig">><p>You make the crew lower the load until the rope is slack, then help fit a spare wheel. It takes longer than the skipper wanted, but the barrels reach shore intact. The porter tests the new pulley twice before waving anyone beneath it.</p>
<<elseif _result.choice is "hoist_catch" and !_result.failed>><p>You take the strain long enough for the porter to pull the rope free. Your arms shake afterward, and your palms will remember the coarse fiber tomorrow, but the load settles onto the landing without striking anyone.</p>
<<elseif _result.choice is "hoist_catch">><p>The rope bites through your grip. You shout and stumble clear as the barrels crash against the boards. No one is beneath them, but one breaks open and the skipper marks the loss against the load. Two coins are taken from your shift wage to make up part of it.</p>
<<elseif _result.choice is "hoist_cut">><p>Your knife parts the jammed line. The barrels fall into the space you cleared and split against the boards. The crew are safe; the skipper counts the damage and withholds two coins from your wage. The porter agrees the cut saved someone from the load, but the lost cargo is still real.</p>
<<elseif _result.choice is "ferry_wade" and !_result.failed>><p>Cold water climbs past your knees as you meet the ferry. You take the baskets one by one, then help its passenger onto the lowest step. The boatman adds a fish from his share before casting off.</p>
<<elseif _result.choice is "ferry_wade">><p>A hidden hollow drops beneath your foot. You keep hold of the first basket, but water spills over its rim and you need the boatman's help to regain the step. The soaked fish sell for less; a coin comes out of your wage, and you finish the shift shivering.</p>
<<elseif _result.choice is "ferry_plank">><p>You persuade two hands to move the cart and fetch broad planks from the shed. Once the bridge is secured, the passenger crosses first and the fish follows. The skipper grumbles about the delay but cannot argue with an undamaged load.</p>
<<elseif _result.choice is "ferry_wait">><p>You leave the ferry where it can ride safely and return to the other boat. By the time the water rises, one basket is no longer fresh enough for the promised price. The fishmonger takes a coin from the shift wage to cover the shortfall. No one was put in danger, but waiting had a cost.</p>
<<elseif _result.choice is "chest_check" and !_result.failed>><p>You find the false entry before the skipper can take the chest away. It belongs to a different buyer, and the fishmonger makes him amend the tally in front of the cart driver. His private offer disappears with his smile.</p>
<<elseif _result.choice is "chest_check">><p>The pages are damp and the marks too similar. You hold the cart while you search, then have to admit you cannot prove which entry belongs to the chest. The skipper takes it with a smug nod. When the true owner comes looking, the fishmonger takes a coin from your wage for the missed mark.</p>
<<elseif _result.choice is "chest_honest">><p>You name the false seal where the crew can hear. The skipper protests, but the fishmonger insists on a corrected tally before any cart moves. You lose the private coins and earn his trust instead.</p>
<<elseif _result.choice is "chest_flirt">><p>You let the skipper believe his suggestive smile is working. He comes close enough to murmur that he could offer more than coin later, but for now you take the two coins and carry the chest. The fishmonger notices both the payment and your flushed face; the unexplained seal still troubles him.</p>
<<else>><p>You carry the chest to the cart without taking the skipper's private payment. The chest's owner arrives before the cart leaves and recognizes the seal. The fishmonger pays a coin for the delay and takes it from your wage. He does not accuse you of theft, but he will not call an unchecked mark careful work.</p><</if>>
<<if _result.choice.startsWith("chest_")>>
<<print setup.npcEventDialogueHtml(_npc, _result.choice is "chest_flirt" ? "You can take his coin. Just remember that a man who hides a chest can hide the cost of his favors too." : "The chest is off my pier. Next time we count a seal before anyone promises a reward.", "The fishmonger")>>
<<else>>
<<print setup.npcEventDialogueHtml(_npc, _result.failed ? "You got clear when it went wrong. We will sort what can be saved, but the loss comes out of this shift." : (_result.choice is "hoist_cut" or _result.choice is "ferry_wait") ? "You kept people safe. The cargo and the time still cost us, and the fishmonger will count it." : "That was a sound choice. The next load should be easier for it.", "The porter")>>
<</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<print _result.bonusHtml>><<print _result.itemHtml>><<print _result.standingHtml>><<print _result.arousalHtml>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
<</if>></div><</nobr>>The forest had been endless, its tangled roots and thick branches clutching at your feet and clothes as you pushed forward, weary and aching. You lost count of the hours spent stumbling through the undergrowth, every step heavier than the last. But now, at last, you emerge into a clearing in the cool morning light.<center><img src="img/event/ForestWalking.gif" alt="Forest walking" width="640" height="480"></center>Ahead, nestled between the rolling hills and the distant sea, lies the small village of Ambercross. The scent of woodsmoke and cooking bread fills the air, a far cry from the damp, musty forest you have just escaped. You fled your old life in hope of finding answers.
You tighten your grip on the worn leather satchel slung across your back, the only possession you have left. Inside, a few coins clinked together, hardly enough to survive on. You are poor, ragged, and alone, but alive.
[[Go to the village |Ambercross Entrance]]
<<print setup.locationImageHtml("img/location/AC_Villagecenter.png", "Ambercross village center", "img/location/AC_Villagecenternight.png")>>
You stand in the village center. A massive ancient oak stands proudly in the middle, its gnarled branches spreading wide, casting dappled shade over the villagers who gather here. Around the oak, a stone well serves as both a meeting point and the village's primary water source.
Market stalls fill the square during the day, offering a range of local goods—fresh produce from nearby farms, hand-woven fabrics, and simple crafts.
<nobr>
<div class="location-action-list">
[[Beg for gold|Beggold]]
[[Draw water from the well|Ambercross Well]]
<<if setup.marketIsOpen()>>
[[Peruse the market|Ambercross Market]]
<<set _produceSeller = setup.businessCounterNpc("produce_stall")>>
<<if _produceSeller>>
<div><<link "Visit the produce stall" "NPCTrade">><<set $activeNpcId = _produceSeller.id>><<set $npcTradeMode = "shop">><<set $npcTradeReturn = "Ambercross Center">><</link>></div>
<<else>>
<div>[[Visit the produce stall|Ambercross Produce Stall]]</div>
<</if>>
<</if>>
[[Sleep on the street|SleepStreet]]
<<set _taxDebtor = setup.taxDebtorAt("Ambercross Center")>>
<<if _taxDebtor>><div><<link "A neighbor with a tax notice" "Tax Debtor">><<set $taxEventNpcId = _taxDebtor.id>><<set $taxEventReturn = "Ambercross Center">><</link>></div><</if>>
</div>
</nobr><nobr>
<<dueActivityLinks "Ambercross Center">>
<<travel "north" "Head into Ambercross town hall" "Ambercross Town Hall" 5>>
<<travel "north" "Head to the pier" "Ambercross Piers" 5>>
<<travel "east" "Head towards the various houses east" "Ambercross Houses" 5>>
<<travel "east" "Head into Iron Ember Forge" "Iron Ember Forge" 5>>
<<travel "west" "Head towards the various houses west" "Ambercross Houses W" 5>>
<<travel "west" "Head into the tavern" "Ambercross Tavern" 5>>
<<travel "west" "Head into the chapel" "Chapel" 5>>
<<travel "south" "Go towards the village entrance" "Ambercross Entrance" 5>>
</nobr><<set $gameStarted = true>><<print setup.locationImageHtml("img/location/AC_Entrance.png", "Ambercross village entrance", "img/location/AC_Entrancenight.png")>>
The Ambercross village entrance, a simple but welcoming passageway that marks the boundary between the village and the wilds beyond. Wooden archways adorned with creeping ivy stretch above the path, casting cool shade on those passing through.
Just inside the entrance, a small watch post stands to the side—a simple stone structure with a thatched roof where two of the village guards keep watch.
<<if setup.taxCollectorHere("Ambercross Entrance") and setup.ensureTaxSystem().playerDebt gt 0>>
<div class="location-action-list"><div><<link "Pay taxes at the watch post" "Town Taxes">><<set $taxReturn = "Ambercross Entrance">><</link>></div></div>
<</if>>
<<travel "north" "Go towards the village center" "Ambercross Center" 5>>
<<travel "east" "Head towards the farmer's house" "Ambercross Farmer's house" 5>>
<<travel "south" "Go down the road" "Ambercross Pillars" 5>><<print setup.locationImageHtml("img/location/AC_Tavern.png", "Ambercross tavern")>>
You're standing in the tavern. It is filled with the earthy scent of ale, roasted meats, and the crackling of the large stone hearth that dominates one wall. Rough-hewn wooden tables are scattered around the main room, where patrons gather in groups to enjoy hearty meals, tankards of frothy ale, and the occasional tune played by a traveling bard.
Behind the bar, the shelves are crowded with mugs, bottles, bread, and whatever stew the kitchen can keep hot. The place runs on people as much as coin; when the owner or workers are away, the whole room feels less certain of itself.
<div class="location-action-list">
<<if setup.businessIsOpen("tavern")>>
<div><<= setup.tavernCounterName() >> is working the counter.</div>
<div>[[Approach the tavern counter|Tavern innkeeper]]</div>
<<if $TavernServingAccept === 1 or $TavernCookingAccept === 1>>
<div><<link "Choose tavern work" "TavernWorkMenu">><<set $tavernWorkReturn = "Ambercross Tavern">><</link>></div>
<</if>>
<<else>>
<div class="farm-work-locked">No one is free to work the counter right now.</div>
<</if>>
</div>
<<dueActivityLinks "Ambercross Tavern">>
<<travel "up" "Go upstairs" "Ambercross Tavern Upstairs" 3>>
<<travel "east" "Go back to the village center" "Ambercross Center" 5>><<nobr>><<run setup.ensureForgeWorkSystem()>><<print setup.locationImageHtml("img/location/AC_Forge.png", "Iron Ember Forge")>>
Tucked just a few steps away from the village square, the Iron Ember Forge hums with the constant rhythm of hammer on anvil. The blacksmith’s shop is a stout, stone building with a low, slanted roof covered in moss. Its walls are blackened with soot from years of hard work, and the warm glow of the forge fire flickers from within, casting long shadows on the cobblestones outside.
The air inside is thick with the smell of heated metal and coal, and the temperature is always warmer here, even on the coldest of days. Behind the forge, a small yard serves as a testing area for newly made weapons, and it's not uncommon to see sparks flying as blades are tested for sharpness. A cooling trough sits beside the anvil, where glowing-hot metal hisses as it plunges into the water.
<div class="location-action-list">
<<set _forgeManager = setup.forgeManagerNpc()>>
<<if _forgeManager>>
<div><<= setup.npcDisplayName(_forgeManager) >> is keeping the forge's work moving.</div>
<div><<link "Approach the forge workers" "Forge Master">><<set $activeNpcId = _forgeManager.id>><</link>></div>
<<if $ForgeworkAccept is 1>><div>[[Choose forge work|ForgeWorkMenu]]</div>
<<elseif $ForgeTrialStarted and !($ForgeTrialMetal and $ForgeTrialBellows and $ForgeTrialQuench)>><div>[[Continue the forge trial|ForgeWorkTrial]]</div>
<<elseif $ForgeTrialStarted>><div>[[Report to the forge master|ForgeTrialComplete]]</div><</if>>
<<else>><div class="farm-work-locked">The forge is closed and the coals have been banked.</div><</if>>
</div>
<<dueActivityLinks "Iron Ember Forge">>
<<travel "west" "Go back to the village center" "Ambercross Center" 5>><</nobr>><<print setup.locationImageHtml("img/location/AC_FmHouse.png", "Farmer's homestead", "img/location/AC_FmHousenight.png")>>
<p>Nestled at the edge of Ambercross's fertile fields stands the homestead of the village's main farmer, a modest yet well-kept home surrounded by expanses of farmland. The house itself is made of sturdy stone and timber, its thatched roof weathered by years of wind and rain but still strong. A barn stands not far from the main building, filled with sacks of grain, farming tools, and a few animals.</p>
<<nobr>>
<div class="location-action-list">
<<if setup.businessIsOpen("farm")>>
<<set _farmSeller = setup.businessCounterNpc("farm")>>
<<if _farmSeller>>
<div><<link "Buy farm produce" "NPCTrade">><<set $activeNpcId = _farmSeller.id>><<set $npcTradeMode = "shop">><<set $npcTradeReturn = "Ambercross Farmer's house">><</link>></div>
<<else>>
<div>[[Buy farm produce|Farm Produce Shop]]</div>
<</if>>
<<else>>
<div class="farm-work-locked">No one is selling farm produce right now.</div>
<</if>>
<<if setup.hasOwnedUnreadBooks() and $FarmworkAccept === 1>>
<div><<link "Sit at a table and read" "RecipeBooks">><<set $readingSpotReturn = "Ambercross Farmer's house">><<set $readingSpotName = "the farmhouse kitchen table">><</link>></div>
<</if>>
<<if $FarmworkAccept === 0>>
<<if setup.businessIsOpen("farm")>>
<<if $FarmTrialStarted and !($FarmTrialWater and $FarmTrialFence and $FarmTrialFeed)>>
<div>[[Continue farm trial|FarmWorkTrial]]</div>
<<elseif $FarmTrialStarted and $FarmTrialWater and $FarmTrialFence and $FarmTrialFeed>>
<div>[[Report to the farmer|FarmTrialComplete]]</div>
<<else>>
<div>[[Ask for work|Amberfarmaskwork]]</div>
<</if>>
<<else>><div class="farm-work-locked">The farmer is not taking on workers right now.</div><</if>>
<</if>>
<<if $FarmworkAccept === 1>>
<<if $time.hour lt 6 or $time.hour gte 18>>
<div class="farm-work-locked">Farm work is available from 6 AM to 6 PM.</div>
<<else>>
<div class="npc-home-section-gap"><strong>Farm work</strong></div>
<div class="cooking-status">Farmwork skill: <b><<= Math.round((Number($Farmworkskill) || 0) * 100) / 100 >></b></div>
<<print setup.playerWorkNeedWarningHtml(120)>>
<div class="farm-work-actions">
<<for _tierId, _tier range setup.farmWorkTiers>>
<<set _check = setup.farmWorkCanStart(_tierId)>>
<<capture _tierId _tier _check>>
<<if _check.ok>>
<div class="dock-work-assignment"><b><<= _tier.label >></b> <span class="farm-work-meta"><<= _tier.minutes >> minutes, <<= _tier.gold >> gold,</span> <b id="Energy">-<<= setup.playerWorkEnergyCost(_tier.energy, _tier.minutes, true) >> Energy</b>
<div class="dock-work-assignment-links"><<link setup.farmWorkAssignments.any.label "FarmWorkStartShift">><<set $farmWorkSelectedTier = _tierId>><<set $farmWorkSelectedAssignment = "any">><</link>></div></div>
<<else>><div class="farm-work-locked"><<= _check.text >></div><</if>>
<</capture>>
<</for>>
</div>
<</if>>
<</if>>
</div>
<</nobr>>
<<dueActivityLinks "Ambercross Farmer's house">>
<<travel "west" "Go back to the village entrance" "Ambercross Entrance" 5>>
<<if $FarmworkAccept === 1>>
<<travel "south" "Go to the barn" "Ambercross Barn" 5>>
<</if>><<nobr>><<run setup.ensureDockWorkSystem()>><<run setup.ensureCookingSystem()>>
<<print setup.locationImageHtml("img/location/AC_Piers.png", "Ambercross piers", "img/location/AC_Piersnight.png")>>
Simple wooden shacks line the pier’s edge, serving as storage for fishing gear, salted fish, and the occasional rare catch from deeper waters.
During the day, fishermen unload their hauls here, filling baskets with fish, crustaceans, and other treasures of the sea. Traders from distant lands occasionally stop by, bringing exotic wares in exchange for local goods. Despite the quiet and serene atmosphere, the piers are a vital artery for Ambercross, connecting the island to the rest of the world beyond its shores.
<div class="location-action-list">
<<set _fishmonger = setup.businessCounterNpc("fishmonger")>>
<<if _fishmonger>>
<div><<link "Trade with the fishmonger" "NPCTrade">><<set $activeNpcId = _fishmonger.id>><<set $npcTradeMode = "shop">><<set $npcTradeReturn = "Ambercross Piers">><</link>></div>
<<if $DockworkAccept === 1>>
<div class="npc-home-section-gap"><strong>Dock work</strong></div>
<<if $dockWorkMessage>><div class="cooking-message"><<= $dockWorkMessage >></div><<set $dockWorkMessage = "">><</if>>
<div class="cooking-status">Dockwork skill: <b><<= setup.dockWorkSkill() >></b></div>
<<print setup.dockWorkStandingHtml()>>
<div class="farm-work-actions">
<<for _entry range setup.dockWorkTierEntries()>>
<<set _tierId = _entry.id>><<set _tier = _entry.tier>><<set _check = setup.dockWorkCanStart(_tier)>>
<<capture _tierId _tier _check>>
<<if _check.ok>>
<div class="dock-work-assignment"><b><<= _tier.label >></b> <span class="farm-work-meta"><<= _tier.minutes >> minutes, <<= setup.dockWorkDisplayedGold(_tierId, _tier) >> gold,</span> <b id="Energy">-<<= setup.playerWorkEnergyCost(_tier.energy, _tier.minutes, true) >> Energy</b>
<div class="dock-work-assignment-links"><<link setup.dockWorkAssignments.any.label>><<set $dockWorkStartResult = setup.dockWorkStart(_tierId, "any")>><<if $dockWorkStartResult.success>><<goto $dockWorkStartResult.passage>><<else>><<set $dockWorkMessage = $dockWorkStartResult.text>><<goto "Ambercross Piers">><</if>><</link>></div></div>
<<else>>
<div class="farm-work-locked"><<= _check.text >></div>
<</if>>
<</capture>>
<</for>>
</div>
<<if $dockWorkCargoQuest.state is "offered">><div><<link "Ask about the missing baskets" "DockWorkCargoIntro">><<set $dockWorkCargoQuest.fromShift to false>><</link>></div><</if>>
<<elseif $DockTrialStarted and !($DockTrialCrates and $DockTrialLines)>>
<div>[[Continue dock trial|DockWorkTrial]]</div>
<<elseif $DockTrialStarted and $DockTrialCrates and $DockTrialLines>>
<div>[[Report to the fishmonger|DockTrialComplete]]</div>
<<else>>
<div>[[Ask for dock work|DockWorkAsk]]</div>
<</if>>
<<else>>
<div class="farm-work-locked">The fish stall is closed, and no one is organizing dock work right now.</div>
<</if>>
</div>
<<travel "south" "Go towards the village center" "Ambercross Center" 5>><</nobr>><<print setup.locationImageHtml("img/location/AC_Varioushouse.png", "Ambercross houses", "img/location/AC_Varioushousenight.png")>>
The houses are modest but well-kept, built from stone and timber with thatched roofs and ivy creeping up the sides. Some feature wooden shutters painted in bright hues, while others have old stone fences covered in moss. The sound of livestock can occasionally be heard from small pens behind the homes, where chickens, goats, and pigs are kept.
<<nobr>><div class="location-action-list">
<div><<link "Approach a house" "House Street">><<set $houseStreetReturn = "Ambercross Houses">><</link>></div>
</div><</nobr>>
<<dueActivityLinks "Ambercross Houses">>
<<if $tannery === 1>>
<<travel "east" "Head into the tannery" "Ambercross Tannery" 5>>
<</if>>
<<travel "west" "Go towards the village center" "Ambercross Center" 5>>
<<nobr>><<if $FarmworkAccept !== 1>>
<p>The barn door is not locked, but it is watched closely enough that stepping inside without permission would be a poor idea. The farmer has not accepted you for work yet, and the hayloft is not yours to use.</p>
<div class="location-action-list"><div>[[Return to the farmhouse|Ambercross Farmer's house]]</div></div>
<<else>><<print setup.locationImageHtml("img/location/AC_Barn.png", "Ambercross barn")>>
<p>You enter the barn.</p>
<p>Bales of hay are stacked high against the walls, while large sacks of grain and feed are piled neatly in one corner. Rusted but well-used farming tools hang from the beams, their handles smooth from years of use. A loft above serves as extra storage, where more hay and supplies are kept, and it’s not uncommon to see barn cats lounging in the rafters, keeping watch over the mice that try to scavenge the grain. The barn also houses a pair of oxen, a few goats, and chickens.</p>
<div class="location-action-list">
<div class="bed-actions">[[Sleep|SleepBarn]] <<link "Change outfit" "ChangeOutfit">><<set $wardrobeReturn = "Ambercross Barn">><</link>> <<link "Wash up" "WashUp">><<set $wardrobeReturn = "Ambercross Barn">><</link>></div>
<div><<link "Go back to the farmer's house">><<run setup.advanceTime(5)>><<goto "Ambercross Farmer's house">><</link>></div>
</div><</if>><</nobr>><img src="img/menu/Cover.png" width="128" height="128">
Version: 0.2<<if $origin>><<run setup.ensurePlayerAppearance()>>
<div class="sidebar-status">
<div class="sidebar-status-date">Day <<print $time.day>> - <<print $daysOfWeek[$dayIndex]>></div>
<div class="sidebar-status-time"><<print setup.timeText()>> (<<print setup.timeOfDay()>>)</div>
<div id="sidebar-vitals" class="sidebar-status-values">
<<print setup.playerSidebarVitalsHtml()>>
</div>
</div>
<</if>>
<<script>>jQuery("#story-banner").toggle(!State.variables.playerCharacterConfirmed && !State.variables.gameStarted);<</script>>
<<if $playerCharacterConfirmed or visited("Arrival") gt 0>>
<div class="sidebar-character-portrait">
<img @src="$c.portrait" alt="">
</div>
<<set _cumStatus = setup.playerCumStatusText()>>
<<if _cumStatus>>
<div class="sidebar-cum-status"><<= _cumStatus >></div>
<</if>>
<</if>><<nobr>><<if setup.playerPublicAftermathNeedsScene(passage())>><<set $publicAftermathReturn = passage()>><<goto "NPCEncounterPublicRegret">><<else>><<if $personalityReputationQueue and $personalityReputationQueue.length gt 0>><<print setup.playerPersonalityReputationNoticeHtml()>><</if>><<set _loyaltyScene = setup.npcResumeInterruption() or setup.taxMaybeShowCollectionInterruption() or setup.taxMaybeShowPartnerInterruption() or setup.npcMaybeShowPartnerRumorInterruption() or setup.npcMaybeShowLoyaltyInterruption()>><<if !_loyaltyScene>><<set _approach = setup.npcMaybeCreateApproach()>>
<<if _approach>>
<div id="npc-approach-wrap" class="npc-approach-card">
<div class="npc-approach-title"><<= _approach.title >></div>
<div class="npc-approach-text"><<= _approach.text >></div>
<div class="npc-action-list">
<<if _approach.kind is "partner_rumor">>
<<link "Speak with them" "NPCPartnerConfrontation">><<run setup.npcAcceptApproach(_approach)>><</link>>
<<elseif _approach.kind is "relationship">>
<<link "Hear them out" "NPCRelationshipScene">><<run setup.npcAcceptApproach(_approach)>><<run setup.npcStartRelationshipScene(_approach.npcId, _approach.actionId, "npc", _approach.location)>><</link>>
<<elseif _approach.kind is "intimate">>
<<link "Go with them">><<run setup.npcAcceptProposition(_approach)>><<set $pendingNpcApproach = null>><<goto "NPCEncounter">><</link>>
<<elseif _approach.kind is "loan" and _approach.compensationOptionId>>
<<link "Accept demand">><<set $lastLoanResult = setup.npcAcceptLoanDemand(_approach)>><<if $lastLoanResult and $lastLoanResult.success and !$activeEncounter>><<goto "NPCLoanResult">><<else>><<goto "NPCEncounter">><</if>><</link>>
<<link "Talk about the debt" "NPCLoanMenu">><<run setup.npcAcceptApproach(_approach)>><</link>>
<<else>>
<<link "Speak with them" "NPCInteract">><<run setup.npcAcceptApproach(_approach)>><</link>>
<</if>>
<<link "Not now">><<run setup.npcDeclineApproach()>><<replace "#npc-approach-wrap">><</replace>><</link>>
</div>
</div>
<<else>>
<<set _drunkEvent = setup.playerMaybeCreateDrunkEvent()>>
<<if _drunkEvent>>
<div id="drunk-event-wrap" class="npc-approach-card">
<div class="npc-approach-title">The drink catches up</div>
<div class="npc-approach-text"><<= _drunkEvent.text >></div>
<div class="npc-action-list">
<<link "Steady yourself">><<run setup.playerClearDrunkEvent()>><<replace "#drunk-event-wrap">><</replace>><</link>>
</div>
</div>
<<else>>
<<set _privateMoment = setup.npcMaybeCreatePrivateMomentWitness()>>
<<if _privateMoment>>
<div id="npc-private-moment-wrap" class="npc-approach-card">
<div class="npc-approach-title"><<= _privateMoment.title >></div>
<div class="npc-approach-text"><<= _privateMoment.text >></div>
<div class="npc-action-list">
<<link "Follow the sound">><<if setup.npcBeginPrivateMomentWitness(_privateMoment)>><<goto "NPC Private Moment Witness">><<else>><<replace "#npc-private-moment-wrap">><</replace>><</if>><</link>>
<<link "Move on">><<run setup.npcIgnorePrivateMoment(_privateMoment)>><<replace "#npc-private-moment-wrap">><</replace>><</link>>
</div>
</div>
<<else>>
<<run setup.playerMaybeShowPersonalityLocationEventPopup()>>
<</if>>
<</if>>
<</if>>
<</if>><</if>><</nobr>><<if $gameStarted>>
[[Inventory]]
<<set _journalLabel = $taxLedger && $taxLedger.playerDebt > 0 ? "Journal (tax due)" : "Journal">><<link _journalLabel "Journal">><<set $journalTab = "character">><</link>>
<<link "Map">><<run setup.openCurrentAreaMap()>><</link>>
<<run setup.ensureNpcSystem()>><<set _nearbyCount = setup.npcNearbyCount()>><<set _nearbyLabel = "Nearby (" + _nearbyCount + ")">><<link _nearbyLabel "Nearby">><<run setup.npcPrepareNearbyFromSidebar()>><</link>>
[[Plans|NPCActivityPlans]]
<<link "Rest">><<run setup.beginRest(passage())>><<goto "Rest">><</link>>
<</if>>
<<link "Help" "Help">><<run setup.openHelpFromSidebar()>><</link>>
<<link "Save / Load">><<run UI.saves()>><</link>>
<<link "Restart">><<run UI.restart()>><</link>>
[[Changelog]]
<<nobr>><div class="character-creator-panel origin-selector-panel">
<div class="character-selector-title">Choose your backstory</div>
<div class="origin-selector-intro">Your origin shapes how the story will unfold for your character.</div>
<div class="origin-choice-grid">
<div class="origin-choice-card">
<div class="origin-choice-title">The Orphan</div>
<div class="origin-choice-text">Abandoned at a young age and raised by the kind but overburdened village elder, you grew up with a fierce sense of independence and survival. The world has never given you anything, so you learned to take what you needed. Your past remains a mystery, with only vague memories of your parents' disappearance.</div>
<div class="origin-bonus-list"><span id="Failure" class="origin-bonus">No starting bonus</span></div>
<div class="origin-choice-action">[[Select Orphan|Attributes][$origin to 1]]</div>
</div>
<div class="origin-choice-card">
<div class="origin-choice-title">The Farmer's Daughter</div>
<div class="origin-choice-text">Born and raised on your family's modest farm, you learned the values of hard work, perseverance, and loyalty. The land has shaped you into someone strong and capable, unafraid to get your hands dirty. Your parents' untimely disappearance during a mysterious raid on the village has sparked a need for justice, driving you to leave the quiet life behind and uncover the truth behind the attack.</div>
<div class="origin-bonus-list"><span id="Strgain" class="origin-bonus">2 Strength</span><span id="Fitnessgain" class="origin-bonus">5 Fitness</span><span class="origin-bonus origin-bonus-farmwork">10 Farmwork</span></div>
<div class="origin-choice-action">[[Select Farmer|Attributes][$origin to 2]]</div>
</div>
<div class="origin-choice-card">
<div class="origin-choice-title">The Soldier's Daughter</div>
<div class="origin-choice-text">As the daughter of a renowned soldier, you were raised with discipline and trained in the ways of combat from a young age. However, when he failed to return from a campaign against a growing threat to the kingdom, you were left with more questions than answers. Determined to follow in his footsteps, you seek not only to prove your worth, but also to uncover what truly happened to your father.</div>
<div class="origin-bonus-list"><span id="Strgain" class="origin-bonus">5 Strength</span><span id="Fitnessgain" class="origin-bonus">2 Fitness</span><span id="Energy" class="origin-bonus">60 Max Energy</span></div>
<div class="origin-choice-action">[[Select Soldier|Attributes][$origin to 3]]</div>
</div>
<div class="origin-choice-card">
<div class="origin-choice-title">The Noble's Bastard</div>
<div class="origin-choice-text">The illegitimate daughter of a nobleman, you grew up on the fringes of high society, neither fully accepted nor entirely rejected. Your mother, a servant, tried to protect you from the world of politics and deceit, but she couldn't shield you forever. Now, as tensions rise between noble factions, you are drawn into a world of power struggles, forced to flee in order to keep your lineage unknown.</div>
<div class="origin-bonus-list"><span id="Intgain" class="origin-bonus">5 Intelligence</span><span id="Charismagain" class="origin-bonus">3 Charisma</span><span id="Intgain" class="origin-bonus">Basic Reading</span></div>
<div class="origin-choice-action">[[Select Noble|Attributes][$origin to 4]]</div>
</div>
<div class="origin-choice-card">
<div class="origin-choice-title">The Merchant's Daughter</div>
<div class="origin-choice-text">Growing up in a traveling merchant family, you saw the world through the eyes of a wanderer, learning the art of negotiation, trade, and survival on the road. Though your life was one of constant motion, it was also one of danger, with bandits and rival traders always lurking. After your family was betrayed by a trusted ally, leading to their disappearance, you were left to rebuild from nothing. Now, you seek to carve out a new path for yourself.</div>
<div class="origin-bonus-list"><span id="Charismagain" class="origin-bonus">5 Charisma</span><span id="Lustgain" class="origin-bonus">7 Carnality</span><span id="Goldgain" class="origin-bonus">30 Gold</span><span id="Intgain" class="origin-bonus">Basic Reading</span></div>
<div class="origin-choice-action">[[Select Merchant|Attributes][$origin to 5]]</div>
</div>
</div>
</div><</nobr>><<set $dayIndex to 0>> <!-- 0 = Sunday -->
<<set $daysOfWeek to ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]>>
<<set $totalDays to 0>>
<<set $time = { hour: 8, minute: 0, day: 1 }>>
<<set $jobPropositionDaily to { day: 1, count: 0 }>>
<<set $c = {
name: "Isabella",
energy: 50,
maxenergy: 50,
strength: 1,
fitness: 1,
intelligence: 1,
charisma: 1,
literacy: 1,
carnality: 1,
depravity: 1,
hunger: 100,
thirst: 100,
arousal: 0,
intoxication: 0,
gold: 5,
virgin: true,
oralVirgin: true,
vaginalVirgin: true,
analVirgin: true,
virginities: { oral: true, vaginal: true, anal: true },
}>>
<<run setup.selectPlayerCharacter("redhead_wanderer")>>
<<set $playerCharacterConfirmed to false>>
<<set $energyregen = $c.maxenergy - $c.energy>>
<<set $sleepRisk = "">>
<<set $sleepEventMessage = "">>
<<set $Farmworkskill to 1>>
<<set $Cookingskill to 1>>
<<set $Tavernworkskill to 1>>
<<set $knownRecipes to ["garden_salad", "fried_eggs"]>>
<<set $knownRecipeBooks to []>>
<<set $discoveredRecipeBooks to []>>
<<set $purchasedRecipeBooks to []>>
<<set $ownedRecipeBooks to []>>
<<set $recipeBookStudy to {}>>
<<set $cookingMessage to "">>
<<set $cookingReturn to "">>
<<set $recipeBookMessage to "">>
<<set $recipeBookSource to "">>
<<set $recipeBookTradeSource to "">>
<<set $recipeBookTradeMessage to "">>
<<set $recipeBookTradeReturn to "">>
<<set $npcTradeMessage to "">>
<<set $npcTradeReturn to "">>
<<set $npcTradeHaggles to {}>>
<<set $readingSpotReturn to "">>
<<set $readingSpotName to "">>
<<set $readingLessonSource to "">>
<<set $readingLessonMessage to "">>
<<set $literacyTutors to {}>>
<<set $literacyScaleVersion to 2>>
<<set $produceShopMessage to "">>
<<set $produceShopType to "">>
<<set $invPotatoes to 0>>
<<set $invCarrots to 0>>
<<set $invOnions to 0>>
<<set $invCabbage to 0>>
<<set $invApples to 0>>
<<set $invBerries to 0>>
<<set $invEggs to 0>>
<<set $invMilk to 0>>
<<set $invHerbs to 0>>
<<set $FarmworkAccept to 0>>
<<set $FarmTrialStarted to false>>
<<set $FarmTrialWater to false>>
<<set $FarmTrialFence to false>>
<<set $FarmTrialFeed to false>>
<<set $Dockworkskill to 1>>
<<set $DockworkAccept to 0>>
<<set $Smithingskill to 1>>
<<set $ForgeworkAccept to 0>>
<<set $ForgeTrialStarted to false>>
<<set $ForgeTrialMetal to false>>
<<set $ForgeTrialBellows to false>>
<<set $ForgeTrialQuench to false>>
<<set $ForgeTrialScore to 0>>
<<set $forgeWorkLastPassage to "">>
<<set $lastForgeWorkResult to null>>
<<set $pendingForgeWorkFavor to null>>
<<set $DockTrialStarted to false>>
<<set $DockTrialCrates to false>>
<<set $DockTrialLines to false>>
<<set $DockTrialFailedTask to "">>
<<set $DockTrialRejectedDay to 0>>
<<set $dockWorkFavorDay to 0>>
<<set $pendingDockWorkEventFavor to null>>
<<set $dockWorkEventFavorResult to null>>
<<set $dockWorkChoiceResult to null>>
<<set $dockWorkFavorAction to "">>
<<set $dockWorkFavorGold to 0>>
<<set $dockWorkGiftDay to 0>>
<<set $dockWorkNpcChains to { pier: { npcId: "", stage: 0, lastEventDay: 0, encounters: 0, introduced: false, closed: false, declines: 0 }, merchant: { npcId: "", stage: 0, lastEventDay: 0, encounters: 0, introduced: false, closed: false, declines: 0 } }>>
<<set $dockWorkChainEventDay to 0>>
<<set $activeDockWorkChain to "">>
<<set $dockWorkLastChainRole to "">>
<<set $dockWorkShiftCount to 0>>
<<set $dockWorkLastOrdinaryPassage to "">>
<<set $dockWorkReputation to 0>>
<<set $dockWorkConsequences to { tornNetDay: 0, specialOrderDay: 0, buyerGrudgeDay: 0, crewRespect: false }>>
<<set $pendingDockWorkFollowup to "">>
<<set $dockWorkChainResult to null>>
<<set $pendingDockWorkChainEncounter to null>>
<<set $dockWorkChainEncounterResult to null>>
<<set $TavernworkAccept to 0>>
<<set $TavernServingAccept to 0>>
<<set $TavernCookingAccept to 0>>
<<set $TavernTrialStarted to false>>
<<set $TavernTrialMugs to false>>
<<set $TavernTrialTables to false>>
<<set $TavernTrialWater to false>>
<<set $TavernCookingTrialStarted to false>>
<<set $TavernCookingTrialPrep to false>>
<<set $TavernCookingTrialStew to false>>
<<set $TavernCookingTrialPlates to false>>
<<set $tavernWorkReturn to "Ambercross Tavern">>
<<set $tannery to 0>>
<<set $marrinIntroSeen to false>>
<<set $Workonfarm to 0>>
<<set $Gametime to 1>>
<<set $tavernroom to 0>>
<<set $tavernRoomExpiresAt to 0>>
<<set $coren = {
id : "special_coren",
name : "Coren Vale",
firstName : "Coren",
lastName : "Vale",
age : 46,
ageBracket : "middleaged",
gender : "male",
special : true,
interactable : false,
hiddenUntilQuest : true,
role : "Royal court envoy",
occupation : "courtier",
home : "Royal Court",
background : "An influential member of the royal court who may know more about your family than he admits.",
money : 2500,
gold : 2500,
appearance : {
height : "tall",
build : "average",
hairColor : "black",
hairLength : "short",
hairStyle : "short",
hair : "black",
skinTone : "tan",
complexion : "tan"
},
physicalDescription : "tall height and average build, with tan skin and black short hair",
traits : ["generous", "deceitful"],
discovered : {
met : false,
name : false,
age : false,
job : false,
home : false,
appearance : false,
traits : [],
relationship : false,
attraction : false,
arousal : false,
gold : false,
schedule : false
},
affection : 0,
lust : 0,
arousal : 0,
virgin : false,
portrait : "img/npcs/Special/Coren_full.jpg",
portraits : {
clothed : "img/npcs/Special/Coren_full.jpg",
upper : "img/npcs/Special/Coren_upper.jpg",
nude : "img/npcs/Special/Coren_nude.jpg"
},
}>>
<<set $knownNpcs = []>>
/* inventory items */
<<set $invBread = 0>>
<<set $invWater = 0>>
<<set $invDriedMeat = 0>>
<<set $invAleMug = 0>>
<<set $invHotStew = 0>>
<<run setup.initAmbercrossNpcs(setup.npcReleaseProfiles.length)>><<print setup.locationImageHtml("img/location/AC_Pillars.png", "Ancient Ambercross pillars", "img/location/AC_Pillarsnight.png")>>
You stand across two large, weathered stone pillars, each carved with ancient symbols that have long been forgotten by the villagers, yet still watched over with a quiet reverence.
Beyond the gates, a dirt road winds its way into the village north, flanked by rolling hills and fertile fields, dotted with quaint cottages and barns while the forest entrance lies further south. A wooden cart rests near the gates, seemingly abandonned by a passing trader.
<<travel "north" "Head to the village entrance" "Ambercross Entrance" 5>>
<<travel "southwest" "Head to the forest entrance" "Forest Entrance" 5>><<nobr>><div class="character-creator-panel">
<div class="character-selector">
<div class="character-selector-title">Choose your character</div>
<table class="character-choice-table" style="width:100%; border-collapse:collapse; margin-top:0.5rem;">
<tr>
<td style="width:15rem; padding:0 1rem 0 0; vertical-align:middle;"><div class="player-choice-portrait"><img @src="setup.playerOutfitById(setup.playerCharacters.redhead_wanderer.defaultOutfit).portrait" alt=""></div></td>
<td style="padding-left:1rem; border-left:1px solid rgba(212, 174, 93, 0.42); vertical-align:middle;">
<div class="player-choice-name">Red-haired Wanderer</div>
<div class="player-choice-description">An 18-year-old short, slim young woman with long redhead hair, pale skin, small breasts, and a slim ass.</div>
<span class="player-choice-status">Selected</span>
</td>
</tr>
</table>
</div>
<div class="character-name-form">
<span class="character-name-label">Enter your female character name</span>
<div class="character-name-row">
<<textbox "$c.name" $c.name>>
<<button "Confirm">>
<<set $c.name to $c.name.trim()>>
<<if $c.name is "">>
<<replace "#name-error">>Please enter a name.<</replace>>
<<else>>
<<run setup.selectPlayerCharacter("redhead_wanderer")>>
<<set $playerCharacterConfirmed to true>>
<<goto "Arrival">>
<</if>>
<</button>>
<span id="name-error" class="character-name-error"></span>
</div>
</div>
</div><</nobr>>
<<if $origin === 1>>
<</if>>
<<if $origin === 2>>
<<set $c.strength to 2>>
<<set $c.fitness to 5>>
<<set $Farmworkskill to 10>>
<</if>>
<<if $origin === 3>>
<<set $c.strength to 5>>
<<set $c.fitness to 2>>
<<set $c.energy to 60>>
<<set $c.maxenergy to 60>>
<</if>>
<<if $origin === 4>>
<<set $c.intelligence to 5>>
<<set $c.charisma to 3>>
<<set $c.literacy to 10>>
<</if>>
<<if $origin === 5>>
<<set $c.charisma to 5>>
<<set $c.carnality to 7>><<set $c.depravity to $c.carnality>>
<<set $c.gold to 30>>
<<set $c.literacy to 10>>
<</if>><<print setup.locationImageHtml("img/location/AC_Forestclearing.png", "Forest clearing", "img/location/AC_Forestclearingnight.png")>>
The forest clearing opens beneath the trees, offering a quiet place away from the village. A few logs and rough benches surround an old firepit, while gaps in the trees provide a distant view of Ambercross below. Villagers sometimes come here to rest, talk, or simply enjoy the peace of the forest.
<<dueActivityLinks "Forest Clearing">>
<<travel "east" "Enter the forest path" "Forest Path" 5>><<include [[roll FmW]]>><<include [[roll FhW]]>><<nobr>><<set _farmer = setup.farmWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !_farmer>><p>No one is taking on farm workers right now.</p>
<<elseif $origin === 2>>
<p>You approach while <<print setup.npcEventMentionHtml(_farmer, "the farmer")>> checks an ox's harness. He notices the practiced way you lift the loose yoke and set it back without pinching the animal's shoulder.</p>
<<print setup.npcEventDialogueHtml(_farmer, "You have carried harder loads than mine. I need hands that follow an order and stay until the job is done. Start with light work. The shed has tools, and I will pay you when the shift is over.", "The farmer")>>
<p>He points to the rows and leaves you to choose your first task. Your old training has spared you the usual trial, not the work itself.</p>
<<set $FarmworkAccept to 1>>
<<else>>
<p>You find <<print setup.npcEventMentionHtml(_farmer, "the farmer")>> working a stiff buckle on the ox's harness. He lets you ask for a paid place before looking you over, then points from the far rows to a loose fence and the waiting feed troughs.</p>
<<print setup.npcEventDialogueHtml(_farmer, "Water those rows without drowning the seedlings. Set the pen rail firmly enough that a goat cannot push through it. Then feed the animals and make sure every trough has its share. Finish all three and I will know you can follow a day's work without me standing over you.", "The farmer")>>
<p>The tools are where he said they would be. He has made the offer clear, and the choice to begin is yours.</p>
<div class="farm-trial-actions"><div><<link "Start the trial" "FarmWorkTrial">><<set $FarmTrialStarted to true>><</link>></div></div>
<</if>>
<div class="farm-trial-result-link">[[Return to the farm|Ambercross Farmer's house]]</div>
</div><</nobr>><<nobr>><<set _farmer = setup.farmWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>The far beds lie beyond the pump, the animal pen has a rail hanging loose, and hungry goats are already pushing against their trough. The farmer expects each chore finished before he agrees to put you on the wage list.</p>
<<if _farmer>><<print setup.npcEventDialogueHtml(_farmer, "Do them in whichever order suits you. Bring me the finished work, not a story about why it was difficult.", "The farmer")>><</if>>
<div class="farm-trial-actions">
<div><<if $FarmTrialWater>>Water the far rows <span class="farm-work-meta">Done</span><<elseif $c.energy gte 3>>[[Water the far rows|FarmTrialWater]] <b id="Energy">(-3 Energy)</b><<else>>You are too tired to carry water safely.<</if>></div>
<div><<if $FarmTrialFence>>Patch the loose fence <span class="farm-work-meta">Done</span><<elseif $c.energy gte 3>>[[Patch the loose fence|FarmTrialFence]] <b id="Energy">(-3 Energy)</b><<else>>You are too tired to brace the rail.<</if>></div>
<div><<if $FarmTrialFeed>>Feed the animals <span class="farm-work-meta">Done</span><<elseif $c.energy gte 3>>[[Feed the animals|FarmTrialFeed]] <b id="Energy">(-3 Energy)</b><<else>>You are too tired to haul feed.<</if>></div>
<<if $FarmTrialWater and $FarmTrialFence and $FarmTrialFeed>><div>[[Report to the farmer|FarmTrialComplete]]</div><</if>>
<div>[[Return to the farm|Ambercross Farmer's house]]</div>
</div>
</div><</nobr>><<nobr>><<set _passed = setup.playerAttributeMeets("fitness", 4)>><<set $c.energy -= 3>><<run setup.advanceTime(25)>><<set $FarmTrialWater to _passed>><<set $c.fitness += 0.2>><<set _farmer = setup.farmWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _passed>>
<p>You carry two buckets at a time from the pump, keeping an even pour around the young plants rather than emptying each pail into the nearest furrow. The return walk is longer than it looked from the yard. Mud climbs your boots and the handles bite into your palms by the last row.</p>
<<if _farmer>><<print setup.npcEventDialogueHtml(_farmer, "Good. The roots have water and the path is not a swamp. You will be carrying plenty more if I hire you, so learn that pace.", "The farmer")>><</if>>
<<else>>
<p>You start with two full buckets, but their weight pulls your pace apart. By the time you reach the upper beds, much of the water has sloshed into the path. You make another trip and overfill the low furrow trying to make up for it. The far seedlings still need a proper watering.</p>
<<if _farmer>><<print setup.npcEventDialogueHtml(_farmer, "Stop before you drown that row. I can send a hand to show you the lighter load and the right pace. It will take more time, but I will count work done properly.", "The farmer")>><</if>>
<<if $c.energy gte 2>><div>[[Ask for help and finish the watering|FarmTrialWaterHelp]] <b id="Energy">(-2 Energy)</b></div><</if>>
<</if>>
<p class="farm-work-gain-line"><b id="Fitnessgain">+0.2 Fitness</b> <b id="Energy">-3 Energy</b></p>
<div class="farm-trial-result-link">[[Continue the trial|FarmWorkTrial]]</div></div><</nobr>><<nobr>><<set _passed = setup.playerAttributeMeets("strength", 4)>><<set $c.energy -= 3>><<run setup.advanceTime(25)>><<set $FarmTrialFence to _passed>><<set $c.strength += 0.2>><<set _farmer = setup.farmWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _passed>>
<p>The rail hangs crooked because its post has loosened below the surface. You dig out the soft earth, drive a wedge against the sound side, and brace the timber while working the bent nails straight. A goat leans against the repair before you have put down the hammer. This time the fence holds.</p>
<<if _farmer>><<print setup.npcEventDialogueHtml(_farmer, "You fixed the post, not just the rail. That goat would have found a shortcut through a prettier repair before supper.", "The farmer")>><</if>>
<<else>>
<p>You drive the rail back into place, but the soft ground refuses to hold the post while you work alone. The first goat to lean against it opens the gap again. The farmer catches the animal before it reaches the beds, then leaves the loose timber where it stands.</p>
<<if _farmer>><<print setup.npcEventDialogueHtml(_farmer, "A fence has to hold after you put the hammer down. Ask another hand to brace that post while you reset it. I will count the repair when the goat cannot undo it.", "The farmer")>><</if>>
<<if $c.energy gte 2>><div>[[Ask for help and set the post again|FarmTrialFenceHelp]] <b id="Energy">(-2 Energy)</b></div><</if>>
<</if>>
<p class="farm-work-gain-line"><b id="Strgain">+0.2 Strength</b> <b id="Energy">-3 Energy</b></p>
<div class="farm-trial-result-link">[[Continue the trial|FarmWorkTrial]]</div></div><</nobr>><<nobr>><<set $c.energy -= 3>><<run setup.advanceTime(25)>><<set $FarmTrialFeed to true>><<set $Farmworkskill += 1>><<set _farmer = setup.farmWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>The chickens swarm the first scoop, the goats shove at the bucket, and the pigs make their impatience known from across the pen. You close each latch before moving on and divide the feed so the smaller animals are not pushed away from their share.</p>
<<if _farmer>><<print setup.npcEventDialogueHtml(_farmer, "Every trough is filled, and every gate is still shut. I need you to remember both parts when nobody is checking after you.", "The farmer")>><</if>>
<p class="farm-work-gain-line"><b>+1 Farmwork</b> <b id="Energy">-3 Energy</b></p>
<div class="farm-trial-result-link">[[Continue the trial|FarmWorkTrial]]</div></div><</nobr>><<nobr>><<set _farmer = setup.farmWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $FarmTrialWater and $FarmTrialFence and $FarmTrialFeed>>
<p>You return with mud on your hem and sore arms. The farmer walks the edge of the watered rows, presses once against the repaired rail, and checks the troughs before giving you an answer. You have finished the tasks he set, and the work is still sound after you leave it.</p>
<<if _farmer>><<print setup.npcEventDialogueHtml(_farmer, "You listened, finished, and left me nothing to redo. Come back during working hours and I will pay you for light farm work. Earn my trust before you ask for the heavier shifts.", "The farmer")>><</if>>
<<if $FarmworkAccept !== 1>><<set $FarmworkAccept to 1>><<set $Farmworkskill += 1>><</if>>
<<if !setup.playerHasOutfit("forest_traveller")>><<run setup.playerUnlockOutfit("forest_traveller")>><p>The farmer hands you a spare travelling cloak and sturdy work clothes. They are yours to keep for the paths and long days ahead.</p><p class="farm-work-gain-line"><b>+Forest Traveller outfit</b></p><</if>>
<p><b>Regular farm work is now available.</b></p>
<<else>><p>The farmer is waiting for all three chores to be finished before he decides.</p><</if>>
<div class="farm-trial-result-link">[[Return to the farm|Ambercross Farmer's house]]</div>
</div><</nobr>><<nobr>><<set _farmer = setup.farmWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !$FarmTrialWater and $c.energy gte 2>><<set $c.energy -= 2>><<run setup.advanceTime(15)>><<set $FarmTrialWater to true>>
<p>A farmhand takes one bucket and shows you where the path is firm. You carry less on each trip, but reach the far beds with enough water left to give each plant its share. Together you cut a narrow channel through the flooded edge so the excess runs clear of the roots.</p>
<<if _farmer>><<print setup.npcEventDialogueHtml(_farmer, "There. You saw the mistake, asked for the right help, and finished the rows. I will count it done.", "The farmer")>><</if>>
<p class="farm-work-gain-line"><b id="Energy">-2 Energy</b></p>
<<else>><p>The rows still need attention, but you cannot finish them this way right now.</p><</if>>
<div class="farm-trial-result-link">[[Continue the trial|FarmWorkTrial]]</div></div><</nobr>><<nobr>><<set _farmer = setup.farmWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !$FarmTrialFence and $c.energy gte 2>><<set $c.energy -= 2>><<run setup.advanceTime(15)>><<set $FarmTrialFence to true>>
<p>Another worker holds the post upright while you dig out the loose earth and pack stones beneath its base. You drive the wedge in again, set the rail straight, and stand back as the same stubborn goat presses its weight against the boards. Nothing moves.</p>
<<if _farmer>><<print setup.npcEventDialogueHtml(_farmer, "That is a repair. Knowing when a second pair of hands will save the job is part of farm work too.", "The farmer")>><</if>>
<p class="farm-work-gain-line"><b id="Energy">-2 Energy</b></p>
<<else>><p>The rail still needs to be set, but you cannot manage another lift right now.</p><</if>>
<div class="farm-trial-result-link">[[Continue the trial|FarmWorkTrial]]</div></div><</nobr>><<include [[roll FeW]]>><<nobr>><<set _farmWork = setup.farmWorkStart("easy")>>
<div class="npc-activity-panel">
<div class="npc-interact-name"><<= _farmWork.success ? _farmWork.tierLabel : "Farm work" >></div>
<<if !_farmWork.success>>
<p><<= _farmWork.text >></p>
<div class="farm-trial-result-link">[[Return|Ambercross Farmer's house]]</div>
<<else>>
<<include _farmWork.passage>>
<<if !_farmWork.choicePending>>
<<print setup.farmWorkRewardHtml(_farmWork)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div>
<</if>>
<</if>>
</div><</nobr>>You haul the feed bucket into the pen. Chickens swarm your boots, pecking and squawking. The pigs grunt, already pushing at the trough.
It’s easy work—just messy. You bend, pour, scatter. Your arms get a light burn from the weight, your shirt clings with sweat.
A young farmhand passes by, slowing just enough to get a look at your ass as you lean over.
<nobr>
[[Ignore him and keep working|FeW1a]]
<<if $c.carnality gte 5>>
[[Show him a bit more skin|FeW1b]]
<</if>>
</nobr>You kneel beside the goat, bucket in place, hands working the teats with slow, practiced squeezes. The rhythm is almost meditative—until you hear boots behind you.
<span class="dialogue-line dialogue-male">“You’re good with your hands,”</span> a voice says. Low. Amused.
You glance over your shoulder. One of the farmhands, leaning against the fence, arms crossed, eyes on your chest as it shifts with each pull.
<nobr>
[[Laugh it off and keep working|FeW2a]]
<<if $c.carnality gte 10>>
[[Turn the innuendo back on him|FeW2b]]
<</if>>
</nobr>You head to the edge of the property where chopped logs are scattered near the treeline. It’s easy work—pick up, stack, repeat. Your arms warm up quick, and so does your skin under the midday sun.
By the time you're hauling the third load, your shirt sticks to your back and your chest is rising fast.
A man sharpening tools near the barn stops to watch. <span class="dialogue-line dialogue-male">“You keep hauling wood like that, I’ll be needing a cold bucket.”</span>
<nobr>
[[Ignore his comment and continue working|FeW3a]]
<<if setup.playerAttributeMeets("charisma", 5)>>
<<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("charisma", "Make him earn the view")>><<link _attributeChoiceLabel "FeW3b">><</link>>
<</if>>
</nobr>
You roll up your sleeves and grab the brush. The water trough stinks—stale slop, algae, bits of old feed. It’s a filthy job, but someone’s got to do it.
You lean in, scrubbing hard, sweat beading on your neck. Your shirt slips low, sticking to your skin.
Behind you, you hear a soft whistle.
You glance back. A fieldhand’s leaning on the fence, chewing a straw, clearly enjoying the view.
<span class="dialogue-line dialogue-male">“You missed a spot,”</span> he says, nodding toward the far end of the trough—right where you’ll need to bend over to reach.
You flash a dry smile. <span class="dialogue-line dialogue-player">“You volunteering to polish it for me?”</span>
He laughs but stays put.
You stretch a little slower than you need to.You grab a broom and start sweeping out the barn—dust, straw, and whatever the animals left behind. The air’s warm, thick with hay and musk, and every stroke kicks up more grime.
You work slowly, hips swaying with the rhythm. It’s quiet—until you hear boots on the wood behind you.
<span class="dialogue-line dialogue-male">“You always put that much effort into a sweep?”</span> The voice is playful. Male. Close.
You glance over your shoulder, not stopping. <span class="dialogue-line dialogue-player">“Only when I know I’m being watched.”</span>
He leans on the doorframe, arms folded, eyes lingering. <span class="dialogue-line dialogue-male">“Might need the barn swept again tomorrow.”</span>
You smirk, dragging the broom just a little slower across the floor.<<nobr>><<set _farmWork = setup.farmWorkStart("medium")>>
<div class="npc-activity-panel">
<div class="npc-interact-name"><<= _farmWork.success ? _farmWork.tierLabel : "Farm work" >></div>
<<if !_farmWork.success>>
<p><<= _farmWork.text >></p>
<div class="farm-trial-result-link">[[Return|Ambercross Farmer's house]]</div>
<<else>>
<<include _farmWork.passage>>
<<if !_farmWork.choicePending>>
<<print setup.farmWorkRewardHtml(_farmWork)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div>
<</if>>
<</if>>
</div><</nobr>>You haul a hammer and a bundle of nails out to the broken section of fence near the eastern field. The posts are splintered, the rails half-rotted. You don’t ask what got through last night.
The sun beats down as you work—pulling out cracked boards, setting new ones, hammering them into place. The wood bites your palms. Sweat drips from your brow. No one comes to help.
By the time the last nail goes in, your arms are sore and your shirt clings damp to your back.You square up beside the stack, grab the first hay bale, and lift. It’s heavier than it looks—dense, scratchy, awkward. You grunt and drag it toward the barn.
By the fourth one, your arms burn and your back aches.
A man walks by, tall and shirtless, carrying his own bale with a smirk. <span class="dialogue-line dialogue-male">“Careful,”</span> he says, glancing at your form. <span class="dialogue-line dialogue-male">“One bad lift and you’ll be flat on your ass.”</span>
You straighten, sweaty and irritated. <span class="dialogue-line dialogue-player">“Then maybe you should walk behind me.”</span>
He laughs and keeps walking—but slows down.
You keep hauling. A little slower. A little lower.You step into the stable, greeted by the thick stench of manure and sweat. A pitchfork waits by the door, along with a wheelbarrow half-rotted from years of use.
You get to work—shoveling, dragging, dumping. It’s heavy, filthy, thankless. The kind of job no one volunteers for.
Halfway through, one of the ranch hands leans over the stall wall, chewing on a piece of straw. <span class="dialogue-line dialogue-male">“Didn’t think someone like you had the stomach for shit work.”</span>
You glance up, panting. <span class="dialogue-line dialogue-player">“I’m good at handling messes. Especially the ones that talk.”</span>
He chuckles but doesn’t say much after that.
By the time you’re done, your shirt’s plastered to your body and your boots are caked in filth. It’s disgusting—and oddly satisfying.You fill the buckets and drag them to the pen. The oxen stand there, massive and stubborn, coated in dried mud and filth. You strip off your overshirt—it’s already soaked from sweat—and climb into the pen with a stiff-bristled brush.
Water splashes as you scrub the beast’s side, arms straining, chest rising with the effort. Your soaked undershirt clings to your skin—transparent now—and you know it.
You hear a whistle behind you.
One of the younger hands leans against the fence, shamelessly watching. <span class="dialogue-line dialogue-male">“Need help rinsing off?”</span>
You glance over your shoulder. <span class="dialogue-line dialogue-player">“Only if you’re ready to get wet too.”</span>
His smile says he’s thinking about it.
You go back to work—slow, thorough scrubbing. Not just for the ox’s sake.The farmer tells you to oil the tools out back—plow blades, rusted hinges, an old lever press that groans when touched. You find the oil and a rag, crouch low, and get to work.
You’re bent over the press, rubbing oil along the shaft, working it deep into the grooves. It squeaks with every stroke.
Behind you, someone clears his throat. You glance back—just one of the hands, arms folded, eyes glued to the way your hips move.
<span class="dialogue-line dialogue-male">“You always polish that hard?”</span> he asks.
You smile without turning. <span class="dialogue-line dialogue-player">“Only when someone’s watching.”</span>
You keep stroking the lever, slow and steady, hips swaying just a little more than necessary. The squeak grows louder.
He doesn’t leave. You don’t ask him to.<<nobr>><<set _farmWork = setup.farmWorkStart("hard")>>
<div class="npc-activity-panel">
<div class="npc-interact-name"><<= _farmWork.success ? _farmWork.tierLabel : "Farm work" >></div>
<<if !_farmWork.success>>
<p><<= _farmWork.text >></p>
<div class="farm-trial-result-link">[[Return|Ambercross Farmer's house]]</div>
<<else>>
<<include _farmWork.passage>>
<<if !_farmWork.choicePending>>
<<print setup.farmWorkRewardHtml(_farmWork)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div>
<</if>>
<</if>>
</div><</nobr>>The sun’s high when they hand you the shovel. <span class="dialogue-line dialogue-male">“Dig straight, deep, and all the way to the fence line,”</span> the farmer says. <span class="dialogue-line dialogue-male">“Don’t stop ‘til you hit the stone marker.”</span>
You start digging. The dirt is dry and packed, every strike of the shovel jarring your arms. Your shirt’s off within minutes—sweat dripping down your spine, streaking through dust and grime.
By the time you're halfway through, your thighs burn and your breath comes in gasps. A pair of the older hands pass by, one slowing, watching the way you work the shovel into the soil—back arching, muscles flexing, skin slick with sweat.
<span class="dialogue-line dialogue-male">“You sure you’re not digging your own grave?”</span> one mutters with a grin.
You smirk, not stopping. <span class="dialogue-line dialogue-player">“If I am, I’ll look damn good going into it.”</span>
You keep digging—gritty, soaked, and breathless. You’re filthy, aching… and more than a little aware of who’s still watching.You’re handed the reins to the old plow rig—two oxen, stubborn as sin, and a field that hasn’t been turned in months. The farmer just gives you a nod. <span class="dialogue-line dialogue-male">“Think you can handle it?”</span>
You grip the handles and dig in. The plow bucks and jerks with every root you hit, the rig shaking through your arms and shoulders. Your boots slip in the dirt, your legs burn, and sweat runs down your inner thighs.
It’s brutal, rhythmic, primal. You push, grunt, drag.
At some point, you notice the stablemaster leaning on the fence, watching. His expression is unreadable—part impressed, part amused, part something else entirely.
You don’t stop. You roll your hips into the work, breath ragged, body straining with every thrust of the blade into the soil.
<span class="dialogue-line dialogue-male">“You’re not bad with a harness,”</span> he calls out.
You shoot him a look. <span class="dialogue-line dialogue-player">“I know how to take control.”</span>
That earns a slow grin.The drainage ditch overflowed in the last storm—mud, rocks, broken branches all packed in tight. You’re handed a shovel and told, simply, <span class="dialogue-line dialogue-male">“Clear it before nightfall.”</span>
You jump down into the trench, ankle-deep in cold muck. Every scoop is a fight—sticky, wet, and slow. The mud clings to your legs, your arms are shaking halfway through.
You strip down to your underthings, soaked through anyway, not caring who sees. The sun’s beating down, your skin slick, smeared with sweat and filth.
A shadow falls over the edge of the ditch.
<span class="dialogue-line dialogue-male">“Didn’t think you’d last this long,”</span> one of the men says, leaning on his rake, eyes dragging down your mud-streaked body. <span class="dialogue-line dialogue-male">“You look like hell.”</span>
You wipe your mouth with the back of your hand. <span class="dialogue-line dialogue-player">“Keep staring, you’ll end up in the ditch with me.”</span>
He chuckles but doesn’t move. Maybe he’s waiting to see if you mean it.
You keep digging, hips low, shoulders burning. Dirty work. Just the way you like it.You’re assigned to clear the southern field—rocks and boulders half-buried in the soil, some too large for one person. They give you a pry bar, a cart, and a smirk. <span class="dialogue-line dialogue-male">“Hope you’re strong,”</span> one of the men says.
You work hard, muscles burning, sweat rolling down your chest as you strain to lift and shove each stone onto the cart. Dirt smears your thighs, your back, your face.
A large shadow looms behind you. One of the older fieldhands, broad-shouldered, hands on his belt, watching.
<span class="dialogue-line dialogue-male">“You’re tougher than you look,”</span> he says, eyes lingering. <span class="dialogue-line dialogue-male">“Could lend you a hand… or just keep enjoying the view.”</span>
You pause, panting, chest rising under your half-open shirt. His tone’s casual, but the heat in his gaze isn’t.
<nobr>
[[Let him help|FhW4a]]
[[Play along, but keep him working|FhW4b]]
[[Shut him down|FhW4c]]
</nobr>You arch a brow, straightening slowly. <span class="dialogue-line dialogue-player">“Fine. Show me what you’re good for.”</span>
He steps in close to lift the next stone with you. His shoulder presses to yours, his hand brushes your hip, and neither of you pretends it is only about the work.
The cart fills faster with him beside you, though he spends nearly as much time watching you strain as he does hauling stones.
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>>
<<print setup.farmWorkBonusHtml({ charisma: 0.08, carnality: 0.12 }, "Reaction bonus")>>
[[Finish work|Ambercross Farmer's house]]<span class="dialogue-line dialogue-player">“If you’re gonna stand there, might as well lift something.”</span>
He laughs, rolls up his sleeves, and gets to work beside you. You keep him moving with sharp looks and sharper comments, letting him steal glances only after the rocks are in the cart.
By the end, he is sweating too, and you have turned his attention into useful labor.
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>>
<<print setup.farmWorkBonusHtml({ charisma: 0.1, farmwork: 0.2 }, "Reaction bonus")>>
[[Finish work|Ambercross Farmer's house]]<span class="dialogue-line dialogue-player">“You gonna talk, or actually help?”</span>
His grin fades. He grabs a stone without another word, and the two of you work in tense silence after that. It is not friendly, but it is efficient.
You finish the field sore, dirty, and satisfied that he learned where the line was.
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>>
<<print setup.farmWorkBonusHtml({ fitness: 0.1, strength: 0.08 }, "Reaction bonus")>>
[[Finish work|Ambercross Farmer's house]]The pit behind the barn is full again. No one volunteers, so they hand you the shovel.
You spend hours knee-deep in filth, the heat unbearable, the stench worse. Every scoop feels heavier than the last. Flies swarm your face. Your arms go numb. No one comes to check on you.
No one offers help. No one watches.
By the end, your body aches, your stomach’s turned, and your clothes are beyond saving.
You don’t say a word. Just dump the last load, wipe your mouth, and walk away.<<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You keep the bucket level and give the farmhand nothing to reward his staring. Chickens crowd your ankles while you finish the trough, forcing you to pay more attention to your footing than to the eyes on your ass.</p>
<p>When he still has not moved, you glance back. <span class="dialogue-line dialogue-player">"If you have enough time to inspect my work from there, you have enough time to refill the water."</span> He mutters something under his breath, but he takes the empty pail with him.</p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ charisma: 0.05 }, "Choice result")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>>You grab a wooden pail and head to the small vegetable patch behind the farmhouse. The soil’s dry, the morning sun just beginning to warm the ground.
You move row by row—carrots, beans, and herbs—pouring carefully around each plant. It's quiet work, just the sound of water hitting earth and the soft buzz of insects in the grass.
By the time you’re done, the bucket’s empty and your arms have a dull ache from hauling it back and forth.You’re given a few sacks of mixed seeds and a wooden table in the shade behind the barn. Your job: sort them by type—wheat, barley, beans—without mixing a single one.
It’s slow, repetitive work, but it takes focus. You study shapes, textures, colors. A few are damaged or moldy, and you set those aside.
By the time you’re finished, your back’s stiff and your fingers are sore—but everything’s clean, neat, and ready for planting.
Not hard labor, but it took more brain than brawn.You're asked to watch the small roadside stall for the morning—just a few baskets of vegetables, a crate of eggs, and a rusty coin box.
Villagers pass by here and there. You greet them, make change, chat a bit about the crops or the weather. Nothing deep, but enough to make them smile.
One older man compliments your honesty. A young boy tries to haggle—badly. You throw in an extra carrot for the effort.
By midday, the baskets are lighter, and the coin box is full.
Simple work—but you made it pleasant.<<nobr>><div class="npc-activity-panel farm-work-event-panel"><<print setup.npcIntimateMediaHtml("undress", null, "img/Media/Undress/UndressingF1.gif")>>
<p>You wait until he is certainly watching, then gather the back of your dress higher before bending over the trough. The movement exposes your panties and the shape beneath them while your smile makes it clear the glimpse was no accident.</p>
<p>The farmhand forgets whatever clever thing he meant to say. <span class="dialogue-line dialogue-male">"That is a dangerous way to feed pigs,"</span> he manages. <span class="dialogue-line dialogue-player">"Only for men who stand around with their mouths open."</span></p>
<p>You lower the dress and finish the task with his attention following every movement.</p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ carnality: 0.08, charisma: 0.05, arousal: 4 }, "Choice result")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>>You laugh under your breath and keep your hands steady on the chore.
<span class="dialogue-line dialogue-player">“Careful. Compliment me too much and I’ll make you fetch the next bucket.”</span>
Your confidence makes him smile, but he takes the hint and lets you finish your work.
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>>
[[Finish work|Ambercross Farmer's house]] <<nobr>><<set _favorNpc = setup.farmWorkPickScriptedFavorNpc()>><<set $farmWorkScriptedFavorNpcId = _favorNpc ? _favorNpc.id : "">><<set _willing = _favorNpc ? setup.farmWorkFavorWillingness({ optionId: "handjob", npcId: _favorNpc.id }) : { ok: false, text: "No farmhand is here to make the offer." }>><div class="npc-activity-panel farm-work-event-panel">
<p>You keep the milking rhythm steady and glance back over your shoulder. <span class="dialogue-line dialogue-player">"You want something milked too?"</span></p>
<p>His grin falters, then returns twice as bold. He looks toward the empty stall beside you. <span class="dialogue-line dialogue-male">"Put those hands around my cock and I will happily let you show me what they can do."</span></p>
<p>The joke has become a real offer. You can still leave him with nothing but the thought.</p>
<div class="npc-activity-choice-list"><<if _willing.ok>><div>[[Take him into the empty stall (handjob)|FeW2ba]]</div><<else>><div class="player-choice-status"><<= _willing.text >></div><</if>><div>[[Leave him with the joke|FeW2bb]]</div></div>
</div><</nobr>><<nobr>><<set _favorStart = setup.farmWorkStartScriptedFavor("handjob", $farmWorkScriptedFavorNpcId)>><<if _favorStart and _favorStart.success is false>>
<div class="npc-activity-panel farm-work-event-panel">
<p>The teasing hangs there for a moment, but the farmhand loses his nerve before either of you can slip away.</p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>>
<<print setup.farmWorkBonusHtml({ charisma: 0.08 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div>
</div>
<<else>><<goto "NPCEncounter">><</if>><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You let the silence stretch until he realizes the offer will go no further. <span class="dialogue-line dialogue-player">"I asked whether you wanted milking. I never promised I would do it."</span></p>
<p>He laughs despite the frustration in his face and steps away from the stall. You finish the goat without losing the rhythm, pleased that the last word and the choice both remained yours.</p>
<p>The joke still runs through your mind once he is gone, even while you keep your hands on the work you chose.</p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ charisma: 0.06 }, "Choice result")>>
<<print setup.jobRefusedIntimacyHtml($lastFarmWorkResult, "milking_joke")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You ignore the allusion and carry another armful of wood to the stack. The man waits for a reaction that never comes, then mutters, <span class="dialogue-line dialogue-male">"Stuck-up bitch."</span></p>
<p>You drop the logs squarely into place and turn to face him. <span class="dialogue-line dialogue-player">"Say it loudly enough for the farmer to hear, or carry the next load and make yourself useful."</span> He looks toward the barn, thinks better of testing you, and takes the heavier bundle.</p>
<p>The rest of the stack rises in silence. His resentment does not disappear, but neither does your boundary.</p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ charisma: 0.08, farmwork: 0.06 }, "Choice result")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You shift the logs against your hip and look him over. <span class="dialogue-line dialogue-player">"You can watch my ass while I bend for every piece, or you can help and earn a closer look."</span></p>
<p>He wipes his hands on his trousers and takes the other end of the next log. <span class="dialogue-line dialogue-male">"And what does a closer look buy me?"</span> You bend low for another piece, letting the dress pull tight across your hips. <span class="dialogue-line dialogue-player">"More work, if you keep asking foolish questions."</span></p>
<p>He laughs and keeps lifting. The stack grows twice as quickly, though the heat in his stare makes you increasingly aware of every time your clothing shifts.</p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ charisma: 0.08, carnality: 0.08, arousal: 4 }, "Choice result")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>>You lower yourself onto the edge of the old stone well in the village square, adjusting your cloak as merchants shout prices, carts rattle by, and villagers chat beneath the oak.
You glance around once, then lower your eyes and hold out your hand.
<span class="dialogue-line dialogue-player">“Spare a coin?”</span> you say quietly, to no one in particular. <span class="dialogue-line dialogue-player">“Just enough for a meal.”</span>
Some walk by without a glance. Others glance, then quickly look away. The air feels heavier when you're down here—on the ground, beneath their notice.
But someone always notices.
<<if $c.energy gte 2>>\
[[Wait|BeggoldWait]] <b id="Energy">(-2 Energy)</b>
<<else>>\
<b id="Failure">Not enough energy!</b>
<</if>>\
[[Stop begging|Ambercross Center]] <<run setup.beggingRollEvent()>><<goto "BeggingEvent">><<nobr>><<if $tannery === 1 and !$marrinIntroSeen>><<set $marrinIntroSeen = true>><<if $coren>><<set $coren.discovered.name = true>><</if>><<set _alreadyHadGiftOutfit = setup.playerHasOutfit("laced_ivory_linen")>><<run setup.playerUnlockOutfit("laced_ivory_linen")>>
<div class="marrin-intro-panel">
<h2>Marrin's Workroom</h2>
<div class="marrin-intro-layout">
<div class="marrin-intro-portrait"><img src="img/npcs/Special/Marrin_full.jpg" alt="Marrin"></div>
<div class="marrin-intro-text">
<p>A middle-aged woman looks up from a half-cut strip of leather as you step into the workroom. Her eyes move over you once, practical and sharp, then soften with recognition she does not bother to hide.</p>
<p><span class="dialogue-line dialogue-female">"You must be the girl Coren sent,"</span> she says, wiping her hands on her apron. <span class="dialogue-line dialogue-female">"He did not give his name, did he? That sounds like him. Coren Vale. Court blood, court manners, and secrets enough to choke on."</span></p>
<<if _alreadyHadGiftOutfit>>
<p>Her eyes catch on the familiar linen already among your things, and one eyebrow rises. <span class="dialogue-line dialogue-female">"So you found your way into one of my pieces already. Good. Then consider Coren's coin paid toward keeping you properly dressed."</span></p>
<div class="gift-note">The Laced Ivory Linen Dress is already in your wardrobe.</div>
<<else>>
<p>She lifts a folded dress from a shelf and presses it into your arms. <span class="dialogue-line dialogue-female">"He paid for this. Said you would need something clean before Ambercross decided what sort of woman you were."</span></p>
<div class="gift-note">You receive the Laced Ivory Linen Dress.</div>
<</if>>
<p><span class="dialogue-line dialogue-female">"I sell proper clothes during the day,"</span> Marrin adds. <span class="dialogue-line dialogue-female">"Linen, leather, bodices when coin allows. And Coren said he will want to meet you here later. Not today. Later."</span></p>
<div class="npc-activity-choice-list">
<<link "Preview gift" "MarrinGiftPreview">><</link>>
<<link "Continue" "Ambercross Tannery">><</link>>
</div>
</div>
</div>
</div><<else>><<print setup.locationImageHtml("img/location/AC_Tannery.png", "Ambercross tannery")>>
The small workshop is tucked among Ambercross’s homes, filled with leather hides, rolls of linen, tools, and half-finished clothing. Villagers come here to have simple garments, belts, boots, and other leather or linen equipment made or repaired.
<<if setup.marketIsOpen()>>[[Browse Marrin's outfits|MarrinShop]]
<<else>><span class="farm-work-meta">Marrin sells clothing during the day.</span>
<</if>>
<<dueActivityLinks "Ambercross Tannery">>
<<travel "west" "Exit towards the houses" "Ambercross Houses" 5>><</if>><</nobr>><<nobr>><<set _outfit = setup.playerOutfitById("laced_ivory_linen")>>
<div class="market-preview-shell">
<h2><<= _outfit.label >></h2>
<div class="market-preview-portrait"><img @src="_outfit.portrait" alt=""></div>
<p><<= _outfit.note >></p>
<p><b>Bonus:</b> <<= setup.playerOutfitBonusesText(_outfit) >><br>
<b>Style:</b> <<= setup.playerOutfitTagsText(_outfit) >></p>
<div class="npc-return-link">[[Back|Ambercross Tannery]]</div>
</div><</nobr>><<nobr>><<run setup.ensurePlayerAppearance()>>
<div class="market-shop-panel">
<h2>Marrin's Outfit Shop</h2>
<<if !setup.marketIsOpen()>>
<p>The workroom is closed for sales. The cutting tables are covered and the finished clothing is packed away until morning.</p>
<div class="npc-return-link">[[Return|Ambercross Tannery]]</div>
<<else>>
<div class="market-shop-dialogue"><div class="event-npc-dialogue"><span class="event-npc-face event-npc-face-static" aria-label="Marrin"><img src="img/npcs/Special/Marrin_full.jpg" alt=""></span><div class="event-npc-dialogue-body"><span class="dialogue-line dialogue-female">"Linen for respectability, leather for road dust, lace for when you want them looking twice. Tell me what you can afford, and I will tell you what it says about you."</span></div></div></div>
<<if $marrinShopMessage>><p><em><<= $marrinShopMessage >></em></p><<set $marrinShopMessage = "">><</if>>
<div>
<<for _item range setup.marrinOutfitStock()>>
<<capture _item>>
<div class="market-shop-row">
<div>
<div class="market-shop-name"><<= _item.label >></div>
<div class="wardrobe-note"><<= setup.playerOutfitBonusesText(_item) >> | <<= setup.playerOutfitTagsText(_item) >></div>
<<if _item.minCarnality>><div class="wardrobe-requirement"><<= setup.playerOutfitComfortText(_item) >></div><</if>>
</div>
<div class="market-shop-cost"><<= _item.cost >> gold</div>
<div class="cheat-actions"><<link "Preview" "MarrinOutfitPreview">><<set $marrinPreviewOutfit = _item.id>><</link>><<if setup.playerHasOutfit(_item.id)>><span class="market-shop-owned">Owned</span><<else>><<link "Buy" "MarrinShop">><<set _result = setup.playerBuyMarrinOutfit(_item.id)>><<set $marrinShopMessage = _result.text>><</link>><</if>></div>
</div>
<</capture>>
<</for>>
</div>
<div class="npc-return-link">[[Return|Ambercross Tannery]]</div>
<</if>>
</div><</nobr>><<nobr>><<run setup.ensurePlayerAppearance()>>
<<set _outfit = setup.playerOutfitById($marrinPreviewOutfit)>>
<<set _stock = setup.marrinOutfitForSale(_outfit.id)>>
<div class="market-shop-panel">
<h2><<= _outfit.label >></h2>
<div class="market-preview-card">
<div class="market-preview-portrait"><img @src="_outfit.portrait" alt=""></div>
<div>
<p><<= _outfit.note >></p>
<p><b>Cost:</b> <<= _stock ? _stock.cost : 0 >> gold<br>
<b>Bonus:</b> <<= setup.playerOutfitBonusesText(_outfit) >><br>
<b>Style:</b> <<= setup.playerOutfitTagsText(_outfit) >></p>
<<if _outfit.minCarnality>><p class="wardrobe-requirement"><<= setup.playerOutfitComfortText(_outfit) >></p><</if>>
<div class="npc-action-list">
<<if setup.playerHasOutfit(_outfit.id)>><span class="player-choice-status">Owned</span><<else>><<link "Buy" "MarrinShop">><<set _result = setup.playerBuyMarrinOutfit(_outfit.id)>><<set $marrinShopMessage = _result.text>><</link>><</if>>
<<link "Back" "MarrinShop">><</link>>
</div>
</div>
</div>
</div><</nobr>>
<<run setup.beggingRollEvent()>><<goto "BeggingEvent">>
You sit near the well, hand open, voice soft.
<span class="dialogue-line dialogue-player">“Please… just a coin. I haven’t eaten today.”</span>
A few villagers pass. Some glance your way and keep walking. Most don’t look at all.
Then someone stops.
<center><img src="img/event/RH_beg3.png" width="384" height="512"></center>
You start to speak, but he shakes his head.
<span class="dialogue-line dialogue-male">“Don’t thank me. Just survive.”</span>
He walks off without asking your name.
You stare at the coins for a long moment before closing your fingers around them.
<b id="Goldgain">You gain 2 gold</b> <<set $c.gold += 2>>
<<if $c.energy gte 2>>\
[[Continue begging|BeggoldWait]] <b id="Energy">(-2 Energy)</b>
<<else>>\
<b id="Failure">Not enough energy!</b>
<</if>>\
[[Stop|Ambercross Center]] You rest against the well, trying not to look too desperate—but your hand is still out, palm up.
A woman approaches from the market stalls. She doesn’t speak, just sets down her basket and kneels beside you. Her fingers press three small coins into your palm.
<center><img src="img/event/RH_beg2.png" width="384" height="512"></center>
<span class="dialogue-line dialogue-female">“Not much,”</span> she says softly. <span class="dialogue-line dialogue-female">“But I’ve been there. It’s enough for bread.”</span>
You nod, unsure how to respond. She doesn’t wait for thanks. She just stands, picks up her basket, and walks away into the crowd.
The coins are warm from her hand.
<b id="Goldgain">You gain 3 gold</b> <<set $c.gold += 3>>
<<if $c.energy gte 2>>\
[[Continue begging|BeggoldWait]] <b id="Energy">(-2 Energy)</b>
<<else>>\
<b id="Failure">Not enough energy!</b>
<</if>>\
[[Stop|Ambercross Center]] You sit with your hand out, barely watching the feet that pass. Just another hour of rejection.
Then you hear it—clink.
<center><img src="img/event/RH_beg3.png" width="384" height="512"></center>
A small leather pouch hits the cobblestones near you and rolls to a stop against your boot.
You glance up. A merchant in fine clothes is halfway across the square, too busy shouting at his apprentice to notice. The pouch must’ve fallen from his belt.
No one else sees.
You pick it up slowly. It’s heavier than you expected—thick with coins.
You could call out.
You don’t.
Instead, you slip the pouch beneath your cloak and walk away before anyone thinks to look.
<b id="Goldgain">You gain 4 gold</b> <<set $c.gold += 4>>
<<if $c.energy gte 2>>\
[[Continue begging|BeggoldWait]] <b id="Energy">(-2 Energy)</b>
<<else>>\
<b id="Failure">Not enough energy!</b>
<</if>>\
[[Stop|Ambercross Center]] You stay near the edge of the square, keeping your hand out even after your arm begins to ache.
<span class="dialogue-line dialogue-player">“Please,”</span> you murmur as another pair of boots passes. <span class="dialogue-line dialogue-player">“Anything helps.”</span>
For a while, no one answers. Then a young apprentice hurries by with a bundle of cloth under one arm. He slows just enough to look at you, guilt crossing his face before he digs into his pocket.
One small coin drops into your palm.
<span class="dialogue-line dialogue-male">“It isn’t much,”</span> he says, already backing away. <span class="dialogue-line dialogue-male">“But don’t let the market folk see me. My master counts everything.”</span>
He disappears into the crowd before you can thank him properly.
<b id="Goldgain">You gain 1 gold</b> <<set $c.gold += 1>>
<<if $c.energy gte 2>>\
[[Continue begging|BeggoldWait]] <b id="Energy">(-2 Energy)</b>
<<else>>\
<b id="Failure">Not enough energy!</b>
<</if>>\
[[Stop|Ambercross Center]] While you sit in silence, hand out, eyes low, a shadow pauses in front of you.
<center><img src="img/event/RH_beg5.png" width="384" height="512"></center>
<span class="dialogue-line dialogue-male">“You from the forest path?”</span> he asks. <span class="dialogue-line dialogue-male">“Saw someone pass that way yesterday. Figured they wouldn’t make it far.”</span>
You nod once. <span class="dialogue-line dialogue-player">“I made it.”</span>
He reaches into his satchel and pulls out a small coin pouch.
<span class="dialogue-line dialogue-male">“This’ll feed you a few days,”</span> he says. <span class="dialogue-line dialogue-male">“But if you’re not afraid of work, the tannery always needs help. You've probably missed it but it's around the set of houses east of here. Ask for Marrin.”</span>
You take the coins, feeling the warm weight of it in your palm.
<span class="dialogue-line dialogue-player">“Thank you,”</span> you say.
He nods, turns, and is gone before you can ask his name.
<b id="Goldgain">You gain 10 gold</b> <<set $c.gold += 10>>
<<if $c.energy gte 2>>\
[[Continue begging|BeggoldWait]] <b id="Energy">(-2 Energy)</b>
<<else>>\
<b id="Failure">Not enough energy!</b>
<</if>>\
[[Stop|Ambercross Center]]
<<set $tannery to 1>>You sit still, hand out, voice low.
<span class="dialogue-line dialogue-player">“Just a coin… anything.”</span>
Most don’t even look at you. A few do, but only with that tight-lipped expression—the kind people wear when they want to feel bad, but not enough to stop.
Time pass yet your hand is still empty.
Your pride aches worse.
Nothing for now.
<<if $c.energy gte 2>>\
[[Continue begging|BeggoldWait]] <b id="Energy">(-2 Energy)</b>
<<else>>\
<b id="Failure">Not enough energy!</b>
<</if>>\
[[Stop|Ambercross Center]] <<print setup.locationImageHtml("img/location/AC_Tavernupstairs.png", "Tavern upstairs hallway")>>
You stand in the upstairs hallway. A few cozy rooms are available for travelers seeking a place to stay the night. Though the rooms are simple, they are clean and comfortable, offering a warm bed and a quiet retreat from the lively tavern below.
<nobr>
<<if setup.tavernRoomIsRented()>>
<div class="location-action-list">
[[Enter room|Tavernroom]]
</div>
<</if>>
<<nobr>><<set _rooms = setup.npcKnownTavernRooms()>><<if _rooms.length>><div class="location-action-list"><<for _room range _rooms>><<capture _room>><div><<link _room.address "Tavern Lodging Door">><<run setup.npcSelectTavernRoom(_room.id)>><</link>></div><</capture>><</for>></div><</if>><</nobr>>
<<travel "down" "Return downstairs" "Ambercross Tavern" 3>>
</nobr><<if $FarmworkAccept !== 1>>The farmer has not given you permission to sleep in the barn yet.
[[Return to the farmhouse|Ambercross Farmer's house]]
<<else>><<set $sleepQuality = 40>>
<<set $sleepPlace = "the barn hayloft">>
<<set $sleepReturn = "Ambercross Barn">>
<<set $sleepPassage = "SleepBarn">>
<<set $sleepRisk = "">>
<<include "SleepOptions_body">><</if>><<set $sleepQuality = 20>>
<<set $sleepPlace = "a cold corner of Ambercross square">>
<<set $sleepReturn = "Ambercross Center">>
<<set $sleepPassage = "SleepStreet">>
<<set $sleepRisk = "Sleeping in the open is uncomfortable and risky. Trouble may find you before morning.">>
<<include "SleepOptions_body">><<nobr>>
<<set _incident = $streetSleepIncident>>
<<set _event = _incident ? setup.streetSleepEvents.find(entry => entry.id === _incident.id) : null>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _event>>
<div class="npc-interact-name"><<= _event.title >></div>
<<if $sleepMessage>><p><<= $sleepMessage >></p><<set $sleepMessage = "">><</if>>
<p><<= _event.intro >></p>
<div class="npc-activity-choice-list">
<<for _choice range _event.choices>><<capture _choice>>
<div><<if setup.playerWakeChoiceAvailable(_choice)>><<link _choice.label "Street Sleep Result">><<run setup.resolveStreetSleepIncident(_choice.id)>><</link>><<else>><span class="npc-activity-choice-locked"><<= _choice.label >></span> <span class="player-choice-status"><<= _choice.stat ? (_choice.stat + " " + _choice.minimum + " required") : ("Need " + _choice.minGold + " gold") >></span><</if>></div>
<</capture>><</for>>
</div>
<<else>><p>You can decide where to go next.</p><div class="npc-return-link">[[Continue|SleepStreet]]</div><</if>>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $streetSleepResult>><p><<= $streetSleepResult.text >></p><<print $streetSleepResult.effectsHtml>><<else>><p>The square carries on.</p><</if>>
<div class="npc-return-link"><<link "Continue" "SleepStreet">><<set $streetSleepResult = null>><</link>></div>
</div><</nobr>><<nobr>>
<<set _incident = $blackoutIncident>>
<<set _event = _incident ? setup.blackoutWakeEvents.find(entry => entry.id === _incident.id) : null>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _event>>
<div class="npc-interact-name"><<= _event.title >></div>
<p>The last clear moment is the drink in your hand. Several hours are gone before your thoughts settle enough to take stock.</p>
<p><<= _event.intro >></p>
<<if _incident.activityInterrupted>><p>The outing ended while you were unconscious. You will have to speak with your companion another time.</p><</if>>
<div class="npc-activity-choice-list">
<<for _choice range _event.choices>><<capture _choice>>
<div><<if setup.playerWakeChoiceAvailable(_choice)>><<link _choice.label "Blackout Result">><<run setup.playerResolveBlackoutWake(_choice.id)>><</link>><<else>><span class="npc-activity-choice-locked"><<= _choice.label >></span> <span class="player-choice-status"><<= _choice.stat ? (_choice.stat + " " + _choice.minimum + " required") : ("Need " + _choice.minGold + " gold") >></span><</if>></div>
<</capture>><</for>>
</div>
<<else>><p>The missing hours are behind you. You can return to the road.</p><div class="npc-return-link">[[Continue|Ambercross Center]]</div><</if>>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $blackoutWakeResult>><p><<= $blackoutWakeResult.text >></p><<print $blackoutWakeResult.effectsHtml>>
<div class="npc-return-link"><<link "Continue" $blackoutWakeResult.returnPassage>><<set $blackoutWakeResult = null>><</link>></div>
<<else>><p>The day moves on.</p><div class="npc-return-link">[[Continue|Ambercross Center]]</div><</if>>
</div><</nobr>>For 0,1
-Ways to regain energy (sleep, food)
-Ways to spend gold (shop,etc)
-Quest (1 or 2 max)
-Farming, begging, tannery, tavern operationnal
-Random events on locations
-sex framework
Advertise virginity
<div id="inventory">
<<set $msg = "">>
<<include "Inventory_body">>
</div>
<<link "Return to Game" $return>>
<<set $msg = "">><</link>><<nobr>><div class="changelog-shell">
<div class="changelog-title">Changelog</div>
<details class="changelog-entry" open>
<summary><span>Version 0.2</span></summary>
<div class="changelog-body">
<ul>
<li>Briar Hollow is now explorable, with its own residents, homes, and connections to Ambercross. The forest also has added locations.</li>
<li>Expanded activities around Ambercross, including the docks, forge, chapel, and town hall.</li>
<li>Reworked farmwork and added dockwork, tavern serving, tavern cooking, forge work, and chapel work. Each job has a way to earn employment and several levels of assignments.</li>
<li>Work shifts now include more varied incidents, choices, follow-ups, and good or bad outcomes. Skills, traits, work experience, items, and NPC relationships can change how you handle them.</li>
<li>Balanced skill gains across jobs.</li>
<li>Added repeatable multi-step location events that interrupt travel and ask you to deal with a situation before moving on.</li>
<li>Added NPC homes with house exteriors, doorstep conversations, visits, household work offers, and window events. Responses depend on your relationship with the resident and who else is at home.</li>
<li>NPC activities now have more choices and different dialogue and outcomes for friendly outings, dates, and established relationships. Partners and household circumstances can affect what happens.</li>
<li>Added walking NPC at their home and staying overnight, including tavern rooms for people who work away from their home village.</li>
<li>Reworked chat, flirt, social questions, and personal questions so NPCs give more specific answers and your replies have clearer consequences.</li>
<li>Added relationship milestones with conversations and decisions instead of only status buttons. NPCs can initiate some steps, reject advances, or reconsider an existing partnership.</li>
<li>Added more ways for relationships to become strained or hostile, along with confrontations about rumors and cheating.</li>
<li>Balanced personality trait progression to reflect your overall tendencies quicker. It required nearly perfect consistency in the first version which wasn't intended.</li>
<li>Added NPC face portraits and gender-matched dialogue colors across events, work scenes, conversations, and home interactions.</li>
<li>Added personal trading and expanded shop stock. NPCs carry possessions, earn and spend money, and only buy what they can afford after keeping money for their own needs.</li>
<li>Added haggling to trading. Depending on item price, different options will be available.</li>
<li>Added weekly taxes for homeowners and resident travelers, with a journal quest, shared household payments, debt notices, and consequences for falling behind.</li>
<li>Reworked clothing with new outfits, better bonuses and tags, different ways to obtain them, and comfort limits based on carnality.</li>
<li>Added a literacy quest, lessons, books to study, and rewards for reading.</li>
<li>The tavern room can now be rented for several days at once.</li>
<li>Added hunger and thirst, with some events related to it and many ways to manage it</li>
<li>Street sleeping has actual events instead of a short passage mention.</li>
<li>Expanded sexual encounters with more dialogue and media variations, clearer offers, more attention to first times, and better transitions when an act is refused or the encounter is stopped.</li>
<li>Added post-encounter cleanup choices. Actions during sexual encounters no longer consume energy.</li>
<li>Added option to masturbate when arousal is high with scenes and media.</li>
<li>Reworked begging events around identifiable NPCs and added more scenes to early employment quests.</li>
<li>Added journal links to NPC details and a Help menu with separate topics for the game's main systems.</li>
</ul>
</div>
</details>
<details class="changelog-entry">
<summary><span>Version 0.1</span></summary>
<div class="changelog-body">
<ul>
<li>Ambercross is explorable, with many locations.</li>
<li>Character creation with different origins and starting bonuses. Only one character available for now.</li>
<li>Added the journal, including character details, traits, relationships, known people, sexual history, clothing, and work skills.</li>
<li>40 initial generated NPCs with names, appearances, schedules, attraction, arousal, rumors, gossip, and relationship tracking.</li>
<li>Map menu in the sidebar to fast travel between locations if you have already visited the locations using travel links.</li>
<li>Inventory menu in order to use consummables and keep track of other static items. Only food/drinks available to buy and use for now.</li>
<li>Plans menu to keep track of your scheduled activities with NPCs and loans.</li>
<li>Cheats menu that will be available to subscribers in future versions.</li>
<li>Nearby menu that informs you how many interactable NPCs are on the location and allows you to begin an interaction with them.</li>
<li>Attraction system for NPCs with three major components. It is based on the physical characteristics of your chosen character, personality traits you slowly acquire while responding to questions in the same way consistently and current outfit tags. Each NPC has different preferences and having higher attraction lets you build relationship faster. </li>
<li>NPCs can approach you in some situations instead of waiting for you to start everything.</li>
<li>Added NPC loans, late payments, negotiation, and alternate compensation options.</li>
<li>Repeatable begging events in the village square. Just a few for now.</li>
<li>Risky street sleeping for when you do not have a proper bed.</li>
<li>Tavern shop, room rental, innkeeper talk and occasional gossip event, and a market clothing stall.</li>
<li>Added outfits, outfit bonuses, wardrobe changing, outfit previews, and outfit-based attraction.</li>
<li>Added washing up and body status text after sexual encounters.</li>
<li>Added the farmer's trial before most origins can work and sleep in the barn.</li>
<li>Farm work events, skill gains, wages, and occasional NPC interruptions while working.</li>
<li>Added the first version of the sexual encounter system, with arousal, NPC initiative, and media support.</li>
<li>Carnality system that measures your envy for sexual acts. The higher it is, the more open you are to sexual encounters with npcs who are not in a relationship with you.</li>
</ul>
</div>
</details>
<div class="npc-return-link"><<link "Return to Game" $return>><</link>></div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>The irrigation trench along the vegetable beds has collapsed into a muddy knot of stones, roots, and standing water. The farmer points with the handle of his hoe. <span class="dialogue-line dialogue-male">"Clear it before the beans drown."</span></p>
<p>You dig your boots into the muck and start dragging the channel open by hand. Water rushes around your wrists, cold at first, then warm with churned soil as you pry loose the stones blocking the flow.</p>
<p>When the trench finally runs clear, one of the farmhands gives a low whistle. The farmer only nods, but he does not hide that he noticed.</p>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You are sent into the grain shed with a slate, a piece of chalk, and a warning that the last count came up short. The sacks are stacked shoulder-high, marked in three different hands, and half the labels are smudged.</p>
<p>You work through the rows slowly, checking weights, marks, and damp corners where grain might spoil. By the second wall, the pattern starts to show: two barley sacks were logged as wheat, and one has split at the bottom.</p>
<p><span class="dialogue-line dialogue-male">"Good eyes,"</span> the farmer says when you bring him the slate. <span class="dialogue-line dialogue-male">"Saves me coin when people can count before they complain."</span></p>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>The market cart needs loading before noon. You carry baskets of greens, tied bundles of herbs, and crates of eggs while a farmhand leans against the wheel like he is supervising something important.</p>
<p><span class="dialogue-line dialogue-male">"Careful with those,"</span> he says as you lift a crate against your hip. <span class="dialogue-line dialogue-male">"Would be a shame if you needed someone to check you over after."</span></p>
<p>You give him a look sharp enough to make him grin and keep working. By the time the cart is tied down, he is carrying twice as much as before and trying not to stare every time you pass.</p>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>A cracked millstone sits half-sunk beside the shed, too heavy for the younger hands and too useful to abandon. The farmer sets a pry bar in your hands. <span class="dialogue-line dialogue-male">"Shift it onto the sled."</span></p>
<p>You brace, push, and feel the strain bite deep through your shoulders. The stone moves by inches, scraping over dirt while everyone around you remembers something else they should be doing.</p>
<p>When it finally thuds onto the sled, your arms tremble and your breath comes hard. The farmer spits aside, impressed despite himself. <span class="dialogue-line dialogue-male">"That will do."</span></p>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>The far lane has gone soft after rain, and the ox team refuses to pull the loaded cart through it. You take the reins while mud sucks greedily at your boots.</p>
<p>The first pull nearly throws you sideways. You plant your feet, curse under your breath, and snap the reins hard enough to make the team lurch. Wheels groan. Harness leather creaks. The cart inches forward.</p>
<p>By the time you reach solid ground, your legs ache and your dress is splashed dark to the thigh. A farmhand laughs once, then stops when he sees your face and quietly starts unloading.</p>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>A storm-bent beam in the barn roof has started to sag. The farmer sends you up the ladder with a brace board, nails, and a look that says falling would be inconvenient for everyone.</p>
<p>You balance on the loft edge, judge the angle, and wedge the brace where the old timber still has strength. Each hammer blow rings through the rafters and shakes dust loose into your hair.</p>
<p>When the beam settles firm, the whole barn seems to breathe easier. You climb down sweaty, sore, and satisfied, with the farmer watching the repair instead of finding something to criticize.</p>
</div><</nobr>>You step inside the small room. The air smells of old wood and ale. A narrow bed, a washbasin, and a single candle on the table — not much, but quiet enough.
<<print setup.locationImageHtml("img/location/AC_Tavernroombed.png", "Rented tavern room")>>
<div class="bed-actions">
<div>[[Sleep in bed|Sleeptavernbed]]</div>
<div><<link "Change outfit" "ChangeOutfit">><<set $wardrobeReturn = "Tavernroom">><</link>></div>
<div><<link "Wash up" "WashUp">><<set $wardrobeReturn = "Tavernroom">><</link>></div>
<<if setup.hasOwnedUnreadBooks()>>
<div><<link "Sit at a table and read" "RecipeBooks">><<set $readingSpotReturn = "Tavernroom">><<set $readingSpotName = "the small table in your rented room">><</link>></div>
<</if>>
<div>[[Leave the room|Ambercross Tavern Upstairs]]</div>
</div><<nobr>><<run setup.ensureCookingSystem()>><<set _counterNpc = setup.tavernCounterNpc()>>
<<print setup.tavernCounterIntroHtml()>>
<div class="location-action-list">
<<if !_counterNpc>>
<div><<link "Leave">><<run setup.advanceTime(3)>><<goto "Ambercross Tavern">><</link>></div>
<<else>>
<<set $activeNpcId = _counterNpc.id>>
<<set _chatLabel = "Chat with " + setup.tavernCounterPronoun("object")>>
<div><<link _chatLabel "InnkeeperTalk">><<run setup.tavernCounterTalkStart(_counterNpc.id)>><</link>></div>
<div>[[Rent or extend a room|TavernRoomRent]]</div>
<<if setup.tavernRoomIsRented()>><div class="farm-work-meta">Room paid through <<= setup.tavernRoomExpiryText() >>.</div><</if>>
<div><<link "Trade" "NPCTrade">><<set $activeNpcId = _counterNpc.id>><<set $npcTradeMode = "shop">><<set $npcTradeReturn = "Tavern innkeeper">><</link>></div>
<<if $TavernServingAccept === 1 or $TavernCookingAccept === 1>>
<div><<link "Talk about work" "TavernWorkMenu">><<set $tavernWorkReturn = "Tavern innkeeper">><</link>></div>
<<else>>
<div><<link "Ask about work" "TavernWorkIntro">><<set $tavernWorkReturn = "Tavern innkeeper">><</link>></div>
<</if>>
<<if $TavernCookingAccept === 1 and $cookingBookQuest.state is "locked">>
<div><<link "Ask how to become a better cook" "CookingBookQuestIntro">><<set $activeNpcId = _counterNpc.id>><</link>></div>
<</if>>
<div><<link "Leave">><<run setup.advanceTime(3)>><<goto "Ambercross Tavern">><</link>></div>
<</if>>
</div><</nobr>><<set $sleepQuality = 80>>
<<set $sleepPlace = "the tavern bed">>
<<set $sleepReturn = "Ambercross Tavern Upstairs">>
<<set $sleepPassage = "Sleeptavernbed">>
<<set $sleepRisk = "">>
<<include "SleepOptions_body">><<nobr>><div class="npc-activity-panel">
<<set _talk = $innkeeperTalk>><<set _npc = setup.tavernCounterTalkNpc()>>
<h3>Talk at the counter</h3>
<<if !_talk or !_npc>>
<p>The conversation has ended.</p>
<<elseif _talk.stage is "menu">>
<<if setup.tavernCounterNpcId() isnot _npc.id>>
<p>The person you were speaking with has stepped away from the counter.</p>
<<elseif setup.tavernCounterTalkTopics(_npc).length>>
<<print setup.npcEventDialogueHtml(_npc, "I have a moment between orders. What did you want to ask?")>>
<div class="house-visit-choice-list">
<<for _topic range setup.tavernCounterTalkTopics(_npc)>><<capture _topic>><div class="house-visit-choice"><<link _topic.label "InnkeeperTalk">><<run setup.tavernCounterTalkChooseTopic(_topic.id)>><</link>></div><</capture>><</for>>
</div>
<<else>>
<<print setup.npcEventDialogueHtml(_npc, "We have talked through enough for today. Let me get back to these tables.")>>
<</if>>
<<elseif _talk.stage is "question" and _talk.scene>>
<p><<print setup.npcEscapeHtml(_talk.scene.intro)>></p>
<<print setup.npcEventDialogueHtml(_npc, _talk.scene.line)>>
<div class="house-visit-choice-list">
<<for _choice range _talk.scene.options>><<capture _choice>><div class="house-visit-choice"><<link _choice.label "InnkeeperTalk">><<run setup.tavernCounterTalkChooseReply(_choice.id)>><</link>></div><</capture>><</for>>
</div>
<<elseif _talk.stage is "result" and _talk.result>>
<p><<print setup.npcEscapeHtml(_talk.result.text)>></p>
<<print setup.npcEventDialogueHtml(_npc, _talk.result.line)>>
<<print setup.tavernCounterTalkGainHtml(_talk.result)>>
<div><<link "Continue the conversation" "InnkeeperTalk">><<run setup.tavernCounterTalkContinue()>><</link>></div>
<</if>>
<div class="npc-return-link">[[End talk|Tavern innkeeper]]</div>
</div><</nobr>>
You strike up some small talk. He tells a few stories about Ambercross, mostly gossip.
You learn a bit about the regulars and some interesting details passing merchants have said about their trades.
<b id="Intgain">Your intelligence increased by 0.15.</b>
[[End talk|Tavern innkeeper]]
<<set $c.intelligence += 0.15>>You lean on the counter and trade small talk. The innkeeper has a natural charm — easy laugh, sharp eyes. He listens when you speak and answers with practiced warmth.
Before long, a few of the regulars glance over, smiling at your easy rapport.
When you finally step away, you realize you’ve been smiling too.
<b id="Charismagain">Your charisma increased by 0.15.</b>
[[End talk|Tavern innkeeper]]
<<set $c.charisma += 0.15>><<nobr>><<set _rumor = setup.npcInnkeeperRumor()>>
You keep the conversation light until the innkeeper glances toward the rest of the room.
<<= _rumor.text >>
[[End talk|Tavern innkeeper]]
<</nobr>>You strike up some small talk. He tells you some jokes, talks about the weather and some other things you probably already forgot. Nothing important but you had a good time.
[[End talk|Tavern innkeeper]]<div id="shop">
<<include "TavernShop_Body">>
</div>
<<nobr>><<if $msg and $msg != "">><p><em><<print $msg>></em></p><</if>>
<<set _seller = setup.tavernCounterNpc()>>
<<set _sellerDialogueClass = "dialogue-line " + setup.tavernCounterDialogueClass()>>
<div class="market-shop-dialogue"><<if _seller>><<= setup.npcDisplayName(_seller) >> gestures to the shelves behind the counter. <span @class="_sellerDialogueClass">"Food, drink, something for the road. Nothing fancy, but it keeps folk on their feet."</span><<else>>The shelves are stocked, but no one is free to sell from them right now.<</if>></div>
<div class="market-shop-panel">
<<if !setup.businessIsOpen("tavern")>>
<p>No one is free to serve from the tavern shelves right now.</p>
<<else>>
<<for _item range setup.tavernShopStock()>>
<<capture _item>>
<div class="market-shop-row">
<div>
<div class="market-shop-name"><<= _item.label >></div>
<div class="wardrobe-note"><<= _item.note >> Stock: <<= _item.stock >></div>
</div>
<div class="market-shop-cost"><<= _item.cost >> gold</div>
<div class="cheat-actions"><<link "Buy">><<set $msg = setup.buyTavernItem(_item.id)>><<replace "#shop">><<include "TavernShop_Body">><</replace>><<replace "#sidebar-vitals">><<print setup.playerSidebarVitalsHtml()>><</replace>><</link>></div>
</div>
<</capture>>
<</for>>
<</if>>
<div class="npc-return-link"><<link "Back" "Tavern innkeeper">><<set $msg = "">><</link>></div>
</div><</nobr>>
<<nobr>><<if $msg and $msg != "">><em><<print $msg>></em><br><</if>>
<hr>You take a look at your inventory.
<p class="cooking-note">Food: <<= setup.playerNeedBand("hunger") >> (<<= Math.round($c.hunger) >>%) | Water: <<= setup.playerNeedBand("thirst") >> (<<= Math.round($c.thirst) >>%)</p>
<div class="inventory-item-list">
<<for _item range setup.consumableInventoryItems()>>
<<capture _item>>
<<if setup.inventoryItemCount(_item) > 0>>
<div class="inventory-item-line">• <<= _item.label >> ×<<= setup.inventoryItemCount(_item) >> <span class="inventory-item-energy">(<<= _item.note >>)</span><<link "Use">>
<<set $msg = setup.useTavernInventoryItem(_item.id)>>
<<if $blackoutIncident>><<set $msg = "">><<goto "Blackout Wake">><<else>>
<<replace "#inventory">><<include "Inventory_body">><</replace>>
<<replace "#sidebar-vitals">><<print setup.playerSidebarVitalsHtml()>><</replace>>
<</if>>
<</link>></div>
<</if>>
<</capture>>
<</for>>
<<set _produceShown = 0>>
<<for _item range setup.produceInventoryItems()>>
<<capture _item>>
<<if setup.inventoryItemCount(_item) > 0>>
<<set _produceShown += 1>>
<div class="inventory-item-line">• <<= _item.label >> ×<<= setup.inventoryItemCount(_item) >> <span class="inventory-item-energy">(Cooking ingredient)</span></div>
<</if>>
<</capture>>
<</for>>
<<for _item range setup.recipeBookInventoryItems()>>
<<capture _item>>
<<if setup.inventoryItemCount(_item) > 0>>
<div class="inventory-item-line">• <<= _item.label >> ×<<= setup.inventoryItemCount(_item) >> <span class="inventory-item-energy">(<<= _item.note >>)</span></div>
<</if>>
<</capture>>
<</for>>
<<for _item range setup.studyBookInventoryItems()>>
<<capture _item>>
<div class="inventory-item-line">• <<= _item.label >> ×1 <span class="inventory-item-energy">(<<= _item.note >>)</span></div>
<</capture>>
<</for>>
</div><</nobr>><<nobr>><<set _counter = setup.tavernCounterNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>You ask about the upstairs room. <<if _counter>><<print setup.npcEventMentionHtml(_counter, "The innkeeper")>><<else>>The innkeeper<</if>> takes down the key and checks the room ledger.</p>
<<if _counter>><<print setup.npcEventDialogueHtml(_counter, setup.tavernRoomCost + " gold a day. You can pay for one night or keep the room longer; time you have already paid for will not be lost.", "The innkeeper")>><</if>>
<<if setup.tavernRoomIsRented()>><p>Your current key is good through <<= setup.tavernRoomExpiryText() >>.</p><</if>>
<div class="npc-activity-choice-list"><<for _days range setup.tavernRoomTerms>><<capture _days>><div><<set _label = (_days is 1 ? "Pay for 1 day" : "Pay for " + _days + " days") + " (" + (setup.tavernRoomCost * _days) + " gold)">><<link _label "TavernRoomRentResult">><<set $tavernRoomRentResult = setup.rentTavernRoom(_days)>><</link>></div><</capture>><</for>></div>
<div class="npc-return-link">[[Return to the counter|Tavern innkeeper]]</div>
</div><</nobr>><<nobr>><<if !$journalTab>><<set $journalTab = "character">><</if>>
<div class="journal-shell">
<div class="journal-header">
<div class="journal-title">Journal</div>
<div class="journal-subtitle">Personal records and known people</div>
</div>
<div class="journal-tabs">
<<if $journalTab is "character">><span class="journal-tab-active">Character</span><<else>><<link "Character" "Journal">><<set $journalTab = "character">><</link>><</if>>
<<if $journalTab is "traits">><span class="journal-tab-active">Character Traits</span><<else>><<link "Character Traits" "Journal">><<set $journalTab = "traits">><</link>><</if>>
<<if $journalTab is "sexual">><span class="journal-tab-active">Sexual History</span><<else>><<link "Sexual History" "Journal">><<set $journalTab = "sexual">><</link>><</if>>
<<if $journalTab is "relationships">><span class="journal-tab-active">Relationships</span><<else>><<link "Relationships" "Journal">><<set $journalTab = "relationships">><</link>><</if>>
<<if $journalTab is "quests">><span class="journal-tab-active">Quests</span><<else>><<link "Quests" "Journal">><<set $journalTab = "quests">><</link>><</if>>
<<if $journalTab is "people">><span class="journal-tab-active">People</span><<else>><<link "People" "Journal">><<set $journalTab = "people">><</link>><</if>>
<<if $journalTab is "taxes">><span class="journal-tab-active">Taxes</span><<else>><<link "Taxes" "Journal">><<set $journalTab = "taxes">><</link>><</if>>
</div>
<div id="journal-panel">
<<if $journalTab is "taxes">><<include "JournalTaxes_body">><<elseif $journalTab is "people">><<include "JournalNPC_body">><<elseif $journalTab is "quests">><<include "JournalQuests_body">><<elseif $journalTab is "relationships">><<include "JournalRelationships_body">><<elseif $journalTab is "sexual">><<include "JournalSexualHistory_body">><<elseif $journalTab is "traits">><<include "JournalTraits_body">><<else>><<include "JournalCharacter_body">><</if>>
</div>
<div class="npc-return-link"><<link "Return to Game" $return>><</link>></div>
</div><</nobr>><<nobr>><<run setup.ensurePlayerAppearance()>><<run setup.playerRefreshMaxEnergy()>>
<<if !$c>>
<div class="journal-person-empty">No character has been created yet.</div>
<<else>>
<<set _outfit = setup.playerCurrentOutfit()>>
<div class="journal-character-card">
<div class="journal-character-portrait"><div class="npc-portrait-slot"><<if $c.portrait>><img @src="$c.portrait" alt=""><<else>>Portrait<</if>></div></div>
<div class="journal-character-info">
<div class="journal-character-name"><<print $c.name>></div>
<div class="journal-character-description"><<print $c.physicalDescription>></div>
<div class="journal-character-sections">
<div class="journal-character-section">
<div class="journal-character-section-title">Identity</div>
<div class="journal-stat-grid">
<div class="journal-stat"><span>Age</span><span><<print $c.age>></span></div>
<div class="journal-stat"><span>Origin</span><span><<switch $origin>><<case 1>>Orphan<<case 2>>Farmer's Daughter<<case 3>>Soldier's Daughter<<case 4>>Noble's Bastard<<case 5>>Merchant's Daughter<<default>>Unknown<</switch>></span></div>
</div>
</div>
<div class="journal-character-section">
<div class="journal-character-section-title">Attributes</div>
<div class="journal-stat-grid">
<div class="journal-stat"><span><<print setup.playerAttributeTooltipHtml("strength")>></span><span><<print setup.playerStatDisplay("strength")>></span></div>
<div class="journal-stat"><span><<print setup.playerAttributeTooltipHtml("fitness")>></span><span><<print setup.playerStatDisplay("fitness")>></span></div>
<div class="journal-stat"><span>Maximum Energy</span><span><<print $c.maxenergy>></span></div>
<div class="journal-stat"><span><<print setup.playerAttributeTooltipHtml("intelligence")>></span><span><<print setup.playerStatDisplay("intelligence")>></span></div>
<div class="journal-stat"><span><<print setup.playerAttributeTooltipHtml("charisma")>></span><span><<print setup.playerStatDisplay("charisma")>></span></div>
<div class="journal-stat"><span>Literacy</span><span><<print setup.playerLiteracyDisplay()>></span></div>
</div>
</div>
<<print setup.playerCarnalityHtml()>>
<div class="journal-character-section">
<div class="journal-character-section-title">Current Clothing</div>
<div class="journal-clothing-note"><strong><<print _outfit.label>></strong> - <<print _outfit.note>></div>
<div class="journal-clothing-tags">Bonus: <<print setup.playerOutfitBonusesText(_outfit)>> | Style: <<print setup.playerOutfitTagsText(_outfit)>></div>
</div>
<div class="journal-character-section">
<div class="journal-character-section-title">Work Skills</div>
<div class="journal-stat-grid">
<div class="journal-stat"><span>Farmwork</span><span><<print $Farmworkskill>></span></div>
<div class="journal-stat"><span>Dockwork</span><span><<print setup.dockWorkSkill ? setup.dockWorkSkill() : ($Dockworkskill || 1)>></span></div>
<div class="journal-stat"><span>Cooking</span><span><<print setup.cookingSkill()>></span></div>
<div class="journal-stat"><span>Serving</span><span><<print setup.tavernWorkSkill()>></span></div>
<div class="journal-stat"><span>Smithing</span><span><<print setup.forgeWorkSkill ? setup.forgeWorkSkill() : ($Smithingskill || 1)>></span></div>
<div class="journal-stat"><span>Chapel service</span><span><<print setup.chapelWorkSkill ? setup.chapelWorkSkill() : ($Chapelworkskill || 1)>></span></div>
</div>
</div>
</div>
</div>
</div>
<</if>><</nobr>><<nobr>><<run setup.ensurePlayerAppearance()>>
<<if !$c>>
<div class="journal-person-empty">No character has been created yet.</div>
<<else>>
<<set _traits = $c.personalityTraits || []>>
<<set _progress = $c.personalityProgress || {}>>
<div class="journal-trait-section">
<div class="journal-trait-title">Established Traits</div>
<<if _traits.length is 0>>
<div class="journal-person-empty">No clear reputation has settled around your character yet.</div>
<<else>>
<div class="journal-trait-list">
<<for _trait range _traits>><<print setup.npcTraitTooltipHtml(_trait, "journal-trait-chip")>><</for>>
</div>
<</if>>
</div>
<div class="journal-trait-section">
<div class="journal-trait-title">Developing Tendencies</div>
<div class="journal-trait-list">
<<set _shown = 0>>
<<for _trait, _value range _progress>>
<<if _value > 0 and !_traits.includes(_trait)>>
<<set _shown += 1>>
<<print setup.npcTraitTooltipHtml(_trait, "journal-trait-chip")>>
<</if>>
<</for>>
<<if _shown is 0>><div class="journal-person-empty">No developing tendencies are clear enough to record yet.</div><</if>>
</div>
</div>
<</if>><</nobr>><<nobr>><<run setup.ensureNpcSystem()>>
<<if !$knownNpcs or $knownNpcs.length is 0>>
You have not spoken with anyone enough to make a useful entry yet.
<<else>>
<div class="journal-people-count">Ambercross residents known: <strong><<= $knownNpcs.length >></strong></div>
<div class="journal-people-layout">
<div class="journal-people-roster">
<<for _npc range $knownNpcs>>
<<capture _npc>>
<div class="nearby-card journal-people-card">
<div class="nearby-card-main">
<div class="npc-portrait-slot small"><<print setup.npcPortraitImgHtml(_npc, "clothed")>></div>
<div>
<div class="nearby-card-title"><<= setup.npcSidebarLabel(_npc) >></div>
<div class="npc-card-status"><<= setup.npcRelationshipStatusLabel(_npc) >></div>
<div class="nearby-card-actions"><<link "View" "JournalNPCDetails">><<set $journalNpcId = _npc.id>><<set $journalTab = "people">><</link>></div>
</div>
</div>
</div>
<</capture>>
<</for>>
</div>
</div>
<</if>><</nobr>><<nobr>><<run setup.ensurePlayerSexualHistory()>>
<div class="journal-detail-grid journal-history-grid">
<<print setup.playerVirginityHistoryHtml()>>
<<print setup.playerSexualHistoryHtml()>>
<<print setup.playerRecentSexualHistoryHtml()>>
</div><</nobr>><<nobr>><<run setup.ensureNpcSystem()>>
<<print setup.playerRelationshipHistoryHtml()>><</nobr>><div class="sleep-panel">
<<if $sleepMessage and $sleepMessage != "">><div class="sleep-result"><<print $sleepMessage>></div><<set $sleepMessage = "">><</if>>
<div class="sleep-current">
<div>You settle down in <<print $sleepPlace>>.</div>
<div>Sleep quality: <strong><<print $sleepQuality>>%</strong></div>
<<if $sleepRisk and $sleepRisk != "">><div class="sleep-risk"><<print $sleepRisk>></div><</if>>
</div>
<div class="sleep-divider">
<div class="sleep-actions">
<<if setup.playerCanMasturbateAtBed($sleepPlace)>><<link "Masturbate before sleeping" "Masturbation">><<set $masturbationReturn = $sleepPassage>><<set $lastMasturbationResult = setup.playerMasturbateAtBed()>><</link>><</if>>
<<link "Sleep 1 hour">><<run setup.sleepForHours(1, $sleepQuality)>><<goto setup.sleepOutcomePassage()>><</link>>
<<link "Sleep 2 hours">><<run setup.sleepForHours(2, $sleepQuality)>><<goto setup.sleepOutcomePassage()>><</link>>
<<link "Sleep 4 hours">><<run setup.sleepForHours(4, $sleepQuality)>><<goto setup.sleepOutcomePassage()>><</link>>
<<link "Sleep 6 hours">><<run setup.sleepForHours(6, $sleepQuality)>><<goto setup.sleepOutcomePassage()>><</link>>
<<link "Sleep 8 hours">><<run setup.sleepForHours(8, $sleepQuality)>><<goto setup.sleepOutcomePassage()>><</link>>
<<link "Sleep until 6 AM">><<run setup.sleepUntilMorning($sleepQuality)>><<goto setup.sleepOutcomePassage()>><</link>>
<<link "Stop sleeping" $sleepReturn>><</link>>
</div>
</div>
</div><<run setup.rest()>>
You sit down for a short rest, letting your breathing slow and your thoughts settle.
20 minutes pass.
You restored $energyregen energy.
<<link "Return to Game" setup.getRestReturnPassage()>><</link>><<nobr>><<run setup.ensureNpcSystem()>><<run setup.npcRestoreReturnAfterNearbyInteraction()>>
<<set _nearbyLocation = setup.npcSidebarLocation()>>
<<set _nearbyNpcs = setup.npcNearbyList()>>
<div class="nearby-heading">
<div class="nearby-heading-title">Nearby People</div>
<div class="nearby-heading-place"><<= _nearbyLocation >><br><<= _nearbyNpcs.length >> present</div>
</div>
<<if _nearbyNpcs.length is 0>>
<div class="nearby-empty">No one is close enough to approach right now.</div>
<<else>>
<div class="nearby-roster">
<<for _npc range _nearbyNpcs>>
<<capture _npc>>
<div class="nearby-card">
<div class="nearby-card-main">
<div class="npc-portrait-slot small"><<print setup.npcPortraitImgHtml(_npc, "clothed")>></div>
<div>
<div class="nearby-card-title"><<= setup.npcSidebarLabel(_npc) >></div>
<div class="npc-card-status"><<= setup.npcRelationshipStatusLabel(_npc) >></div>
<div class="nearby-card-actions"><<if setup.npcSidebarActiveHouse()>><<link "View person">><<run setup.openEventNpcPopup(_npc.id)>><</link>><<else>><<link "Interact" "NPCInteract">><<run setup.npcClearApproachInteractionBonus()>><<set $activeNpcId = _npc.id>><<set $return = "Nearby">><</link>><</if>></div>
</div>
</div>
</div>
<</capture>>
<</for>>
</div>
<</if>>
<div class="npc-return-link"><<link "Return to Game" setup.npcNearbyReturnPassage()>><</link>></div><</nobr>><<nobr>><<set _npc = setup.npcBeginInteraction($activeNpcId)>>
<<if !_npc>>
No one is close enough to speak with.
<div class="npc-return-link"><<link "Return" $return>><<run setup.npcClearApproachInteractionBonus()>><</link>></div>
<<else>>
<div class="npc-interact-panel">
<<include "NPCInteractIntro_body">>
<<if setup.npcHasAvailableQuestions(_npc, "basic")>>
<div class="npc-action-list">
<<link "Basic Questions">><<set $activeNpcQuestionGroup = "basic">><<goto "NPCQuestionMenu">><</link>>
</div>
<</if>>
<<if setup.npcRelationshipCanFlirt(_npc)>><div class="npc-action-list">
<<if setup.npcHasAvailableQuestions(_npc, "social")>><<link "Social Questions">><<set $activeNpcQuestionGroup = "social">><<goto "NPCQuestionMenu">><</link>><</if>>
<<if setup.npcHasAvailableQuestions(_npc, "personal")>><<link "Personal Questions">><<set $activeNpcQuestionGroup = "personal">><<goto "NPCQuestionMenu">><</link>><</if>>
</div><</if>>
<div class="npc-action-list">
<<link "Chat" "NPCChat">><</link>>
<<if setup.npcRelationshipCanFlirt(_npc)>>
<<link "Flirt" "NPCFlirt">><</link>>
<<link "Invite" "NPCActivityMenu">><</link>>
<</if>>
<<link "Money" "NPCLoanMenu">><</link>>
<<if setup.taxPartnerLoanAvailable(_npc)>><<link "Repay tax loan" "Tax Partner Loan Repayment">><<set $lastTaxPartnerRepayment = setup.taxRepayPartnerLoan(_npc.id, 5)>><</link>><</if>>
<<link "Relationship" "NPCRelationshipMenu">><</link>>
<<link "Trade" "NPCTrade">><<set $activeNpcId = _npc.id>><<set $npcTradeMode = "personal">><<set $npcTradeReturn = "NPCInteract">><</link>>
<<if setup.literacyTutorCanDiscuss(_npc)>><<link "Reading lessons" "LiteracyTutor">><<run setup.literacyTutorOpen(_npc)>><</link>><</if>>
<<if $return is "NPCHome" and _npc.relationship and _npc.relationship.homeAccess and setup.npcHomeOwnerPresent(_npc)>>
<<link "Private talk" "NPCHomePrivateTalk">><<set $activeHomeNpcId = _npc.id>><</link>>
<</if>>
<<set _encounterOptions = setup.npcPlayerEncounterOptions($activeNpcId) || []>>
<<for _encounterOption range _encounterOptions>><<capture _encounterOption>><<link _encounterOption.label>><<run setup.npcStartPlayerSexOffer($activeNpcId, _encounterOption.id)>><<goto "NPCSexOfferResponse">><</link>><</capture>><</for>>
</div>
<<set _sexRecoveryText = setup.npcSexRecoveryText(_npc)>>
<<if _sexRecoveryText>><p class="cooking-note"><<= _sexRecoveryText >></p><</if>>
<div class="npc-return-link"><<link "Return" $return>><<run setup.npcClearApproachInteractionBonus()>><</link>></div>
</div>
<</if>><</nobr>><div class="npc-interact-header">
<div class="npc-profile-portrait"><div class="npc-portrait-slot"><<print setup.npcPortraitImgHtml(_npc, "clothed")>></div></div>
<div class="npc-profile-info">
<div class="npc-interact-name"><<= _npc.discovered.name ? _npc.name : "An unfamiliar " + _npc.gender >></div>
<<print setup.npcRelationshipStatusBadgeHtml(_npc)>>
<div class="npc-interact-subtext">
<<= setup.npcAppearanceText(_npc) >><br>
<<if _npc.discovered.age>>Age: <<= _npc.age >><<else>>Approximate age: <<= setup.npcApproxAge(_npc) >><</if>>
<<if _npc.discovered.job>><br>Job: <<= _npc.job >><</if>>
<<if _npc.discovered.job>><br>Literacy: <<= setup.npcLiteracyLabel(_npc) >><</if>>
</div>
<<if _npc.discovered.traits and _npc.discovered.traits.length>>
<div class="npc-known-traits">
<<for _trait range _npc.discovered.traits>>
<<print setup.npcTraitTooltipHtml(_trait, "npc-known-trait")>>
<</for>>
</div>
<</if>>
<<print setup.npcRelationshipMetersHtml(_npc)>>
<<print setup.npcRelationshipMoodHtml(_npc)>>
<<print setup.npcPartnerWarningHtml(_npc)>>
</div>
</div><<set _npc = setup.getNpcById($activeNpcId)>>
<<if !_npc>>
They are no longer nearby.
<<link "Return" $return>><</link>>
<<else>>
<<include "NPCAskName_body">>
<<link "Continue" "NPCInteract">><</link>>
<</if>>You ask for their name.
"<<= _npc.name >>," they answer.<<set _npc = setup.getNpcById($activeNpcId)>>
<<if !_npc>>
They are no longer nearby.
<<link "Return" $return>><</link>>
<<else>>
<<include "NPCAskAge_body">>
<<link "Continue" "NPCInteract">><</link>>
<</if>>You ask how old they are.
"<<= _npc.age >>," they say.<<set _npc = setup.getNpcById($activeNpcId)>>
<<if !_npc>>
They are no longer nearby.
<<link "Return" $return>><</link>>
<<else>>
<<include "NPCAskWork_body">>
<<link "Continue" "NPCInteract">><</link>>
<</if>>You ask what they do around Ambercross.
"I work as a <<= _npc.job.toLowerCase() >>," they say.
<<nobr>>
<div class="village-map-wrap">
<div class="area-map-frame">
<<mapAreaArrow "west" "forest">>
<div class="village-map">
<div class="map-label">Ambercross</div>
<div class="map-feature water">bay and piers</div>
<div class="map-feature fields">fields</div>
<div class="map-feature woods">woods</div>
<div class="map-road north"></div>
<div class="map-road east"></div>
<div class="map-road south"></div>
<div class="map-road pillars"></div>
<div class="map-road west"></div>
<div class="map-road farm"></div>
<div class="map-road forest"></div>
<<mapNode "Piers" "Ambercross Piers" "50%" "14%">>
<<mapNode "West Houses" "Ambercross Houses W" "20%" "50%">>
<<mapNode "Houses" "Ambercross Houses" "78%" "30%">>
<<mapNode "Tannery" "Ambercross Tannery" "88%" "24%">>
<<mapNode "Forge" "Iron Ember Forge" "65%" "48%">>
<<mapNode "Chapel" "Chapel" "35%" "42%">>
<<mapNode "Town Hall" "Ambercross Town Hall" "54%" "38%">>
<<mapNode "Center" "Ambercross Center" "49%" "50%">>
<<mapNode "Tavern" "Ambercross Tavern" "36%" "57%">>
<<mapNode "Entrance" "Ambercross Entrance" "49%" "72%">>
<<mapNode "Pillars" "Ambercross Pillars" "49%" "88%">>
<<mapNode "Farmhouse" "Ambercross Farmer's house" "72%" "76%">>
<<if $FarmworkAccept === 1>>
<<mapNode "Barn" "Ambercross Barn" "70%" "90%">>
<</if>>
<<mapNode "Forest Gate" "Forest Entrance" "25%" "88%">>
</div>
<<mapAreaArrow "east">>
</div>
<div class="map-note">Travel time follows the known roads. Places appear here once you have reached them on foot.</div>
</div>
<</nobr>>
<<link "Return to Game" setup.areaMapReturnPassage()>><</link>><<nobr>><<set _npc = setup.getNpcById($activeNpcId)>>
<<if !_npc>>
They are no longer nearby.
<<link "Return" $return>><</link>>
<<else>>
<div class="npc-question-menu-panel">
<div class="npc-question-list">
<<set _questionIds = setup.npcQuestionGroups[$activeNpcQuestionGroup] || []>>
<<for _questionId range _questionIds>>
<<set _question = setup.npcQuestionDefinitions[_questionId]>>
<<set _alreadyKnown = setup.npcQuestionAnswered(_npc, _questionId)>>
<<set _available = setup.npcQuestionRelationshipReady(_npc, _questionId) and (!_question.available or _question.available(_npc))>>
<<if !_alreadyKnown and _available>>
<div class="npc-question-choice">
<<set _questionText = _question.askText || _question.label>>
<<capture _questionId _questionText>><<link _questionText>><<set $activeNpcQuestion = _questionId>><<goto "NPCQuestion">><</link>><</capture>>
</div>
<</if>>
<</for>>
<<if $activeNpcQuestionGroup is "social" and setup.npcNamedQuestionTargets(_npc).length gt 0>>
<div class="npc-question-choice npc-question-person-choice">
<<link "Ask about someone you know" "NPCQuestionPersonMenu">><</link>>
</div>
<</if>>
</div>
<div class="npc-return-link"><<link "Back" "NPCInteract">><</link>></div>
</div>
<</if>><</nobr>><<set _npc = setup.getNpcById($activeNpcId)>>
<<if !_npc>>
They are no longer nearby.
<<link "Return" $return>><</link>>
<<else>>
<<set _result = setup.npcAskQuestion(_npc.id, $activeNpcQuestion)>>
<<include "NPCQuestion_body">>
<<if !_result.canContinueExchange>><<link "Continue" "NPCInteract">><</link>><</if>>
<</if>><<nobr>><div class="npc-response-panel npc-question-result">
<<if _result.conversationProfile>><<print setup.npcQuestionConversationHtml(_result)>><<else>>
<div class="npc-actions-label"><<= _result.question ? _result.question.label : "Question" >></div>
<<if _result.questionId is "chapel_seal">><div class="npc-question-quest-answer"><<= _result.text >></div><<else>><p><<= _result.text >></p><</if>>
<<if _result.success>>
<<if _result.revealedTrait>>
<p>You learn that they seem <<= setup.npcTraitLabel(_result.revealedTrait).toLowerCase() >>.</p>
<</if>>
<<if _result.socialDiscovery>>
<p>You make a note of the connection in your journal.</p>
<</if>>
<<else>>
<p class="npc-exchange-boundary">They are not ready to answer that yet. You let the boundary stand without losing anything between you.</p>
<</if>>
<<if _result.canContinueExchange>><<print setup.npcQuestionExchangeHtml(_result)>><</if>>
<</if>></div><</nobr>><<nobr>><<set _npc = setup.getNpcById($activeNpcId)>>
<<if !_npc>>
They are no longer nearby.
<<link "Return" $return>><</link>>
<<else>>
<<run setup.advanceTime(5)>>
<<set _result = setup.npcApplyInteraction(_npc.id, "chat")>>
<<include "NPCChat_body">>
<<if !(_result and (_result.playerQuestion or _result.loyaltyPrompt or _result.relationshipPressurePrompt or _result.relationshipPrompt or _result.activityOffer or _result.proposition or _result.conversationMoment))>>
<<if _result and _result.endsConversation>>
<<link "Continue" $return>><</link>>
<<else>>
<<link "Continue" "NPCInteract">><</link>>
<</if>>
<</if>>
<</if>><</nobr>><<nobr>><div class="npc-response-panel">
<<if _result and _result.conversationMoment>>
<<print setup.npcConversationMomentHtml(_npc, _result.conversationMoment, _result.revealedTrait, _result)>>
<<else>>
<<if _result and _result.playerArousalInfluence>><p><<= _result.playerArousalInfluence.text >></p><<print _result.playerArousalInfluence.html>><</if>>
<<if _result and _result.conversationMoment>>
<<print setup.npcConversationMomentHtml(_npc, _result.conversationMoment, _result.revealedTrait)>>
<<else>>
<<if _result and _result.revealedTrait>><<print setup.npcTraitDiscoveryHtml(_npc, _result.revealedTrait, "chat")>><</if>>
<p><<= _result and _result.fallbackText ? _result.fallbackText : "You spend a few minutes learning how they carry a conversation." >></p>
<</if>>
<<if _result and _result.relationshipStateText>><p><<= _result.relationshipStateText >></p><</if>>
<<if _result and _result.aftermathText>><p><<= _result.aftermathText >></p><</if>>
<<if _result and _result.staleText>><p><<= _result.staleText >></p><</if>>
<<if _result and _result.socialDiscovery>><p><<= _result.socialDiscovery.text >></p><</if>>
<<if _result and _result.socialEventDiscovery>><p><<= _result.socialEventDiscovery.text >></p><</if>>
<<if _result and _result.partnerRisk and setup.npcPlayerKnowsNpcPartner(_npc)>>
<p>This could become complicated if word reaches <<= setup.npcDisplayName(setup.npcNpcPartner(_npc)) >>.</p>
<</if>>
<<if _result and _result.loyaltyPrompt>>
<<set $lastLoyaltyPrompt = _result.loyaltyPrompt>>
<div class="npc-actions-label">They ask you</div>
<p><<= _result.loyaltyPrompt.text >></p>
<div class="npc-action-list">
<<link "Reassure them">><<set $lastLoyaltyPromptResult = setup.npcResolveLoyaltyPrompt($lastLoyaltyPrompt, "reassure")>><<goto "NPCLoyaltyPromptResult">><</link>>
<<link "Deny it">><<set $lastLoyaltyPromptResult = setup.npcResolveLoyaltyPrompt($lastLoyaltyPrompt, "deny")>><<goto "NPCLoyaltyPromptResult">><</link>>
<<link "Admit it">><<set $lastLoyaltyPromptResult = setup.npcResolveLoyaltyPrompt($lastLoyaltyPrompt, "admit")>><<goto "NPCLoyaltyPromptResult">><</link>>
</div>
<</if>>
<<if _result and _result.relationshipPressurePrompt>>
<<set $lastRelationshipPressurePrompt = _result.relationshipPressurePrompt>>
<div class="npc-actions-label">They hesitate</div>
<p><<= _result.relationshipPressurePrompt.text >></p>
<div class="npc-action-list">
<<if _result.relationshipPressurePrompt.kind is "keep_secret">><<link "Keep it quiet">><<set $lastRelationshipPressureResult = setup.npcResolveRelationshipPressurePrompt($lastRelationshipPressurePrompt, "secret")>><<goto "NPCRelationshipPressureResult">><</link>><</if>>
<<if _result.relationshipPressurePrompt.kind isnot "fresh_break">><<link "Ask them to choose">><<set $lastRelationshipPressureResult = setup.npcResolveRelationshipPressurePrompt($lastRelationshipPressurePrompt, "choose")>><<goto "NPCRelationshipPressureResult">><</link>><</if>>
<<link "Give them space">><<set $lastRelationshipPressureResult = setup.npcResolveRelationshipPressurePrompt($lastRelationshipPressurePrompt, "step_back")>><<goto "NPCRelationshipPressureResult">><</link>>
<<link "Push past it">><<set $lastRelationshipPressureResult = setup.npcResolveRelationshipPressurePrompt($lastRelationshipPressurePrompt, "pressure")>><<goto "NPCRelationshipPressureResult">><</link>>
</div>
<</if>>
<<if _result and _result.relationshipPrompt>>
<<set $lastRelationshipPrompt = _result.relationshipPrompt>>
<div class="npc-actions-label">They ask you</div>
<p><<= _result.relationshipPrompt.text >></p>
<div class="npc-action-list">
<<link "Hear them out">><<run setup.npcStartRelationshipScene($lastRelationshipPrompt.npcId, $lastRelationshipPrompt.actionId, "npc", setup.npcConversationReturnPassage())>><<goto "NPCRelationshipScene">><</link>>
<<link "Not now">><<set $lastRelationshipPromptResult = setup.npcRelationshipScenePostpone($lastRelationshipPrompt.npcId, $lastRelationshipPrompt.actionId, false)>><<goto "NPCRelationshipPromptResult">><</link>>
</div>
<</if>>
<<if _result and _result.playerQuestion>>
<<set $activePlayerQuestion = _result.playerQuestion.id>>
<div class="npc-actions-label">They ask you</div>
<p><<= _result.playerQuestion.prompt >></p>
<div class="npc-action-list">
<<for _answer range _result.playerQuestion.answers>>
<<capture _answer>><<link _answer.label>><<run setup.playerPersonalityAnswer($activePlayerQuestion, _answer.id, $activeNpcId)>><<goto "NPCPlayerAnswer">><</link>><</capture>>
<</for>>
<<link "I would rather not answer">><<run setup.playerDeclineNpcQuestion($activePlayerQuestion, $activeNpcId)>><<goto "NPCPlayerAnswer">><</link>>
</div>
<</if>>
<<if _result and _result.activityOffer>>
<<set $lastActivityOffer = _result.activityOffer>>
<div class="npc-actions-label">They suggest a plan</div>
<p><<= _result.activityOffer.text >></p>
<div class="npc-action-list">
<<set _activityAcceptLabel = "Agree to day " + $lastActivityOffer.day + " at " + setup.formatClock($lastActivityOffer.minute)>>
<<link _activityAcceptLabel>><<set $lastActivityInvite = setup.npcAcceptActivityOffer($lastActivityOffer)>><<goto "NPCActivityInviteResult">><</link>>
<<link "Suggest a different time">><<set $lastActivityInvite = setup.npcChooseDifferentActivityTime($lastActivityOffer)>><<goto "NPCActivityInviteResult">><</link>>
<<link "Decline" setup.npcConversationReturnPassage()>><<run setup.npcDeclineActivityOffer($lastActivityOffer)>><</link>>
</div>
<</if>>
<<if _result and _result.proposition>>
<<set $lastNpcProposition = _result.proposition>>
<p><<= _result.proposition.text >></p>
<div class="npc-action-list">
<<link "Accept">><<run setup.npcAcceptProposition($lastNpcProposition)>><<goto "NPCEncounter">><</link>>
<<link "Decline" setup.npcConversationReturnPassage()>><<run setup.npcDeclineProposition($lastNpcProposition)>><</link>>
</div>
<</if>><</if>></div><</nobr>><<nobr>><<set _npc = setup.getNpcById($activeNpcId)>>
<<if !_npc>>
They are no longer nearby.
<<link "Return" $return>><</link>>
<<else>>
<<run setup.advanceTime(5)>>
<<set _result = setup.npcApplyInteraction(_npc.id, "flirt")>>
<<include "NPCFlirt_body">>
<<if !(_result and (_result.playerQuestion or _result.loyaltyPrompt or _result.relationshipPressurePrompt or _result.relationshipPrompt or _result.activityOffer or _result.proposition or _result.conversationMoment))>>
<<if _result and _result.endsConversation>>
<<link "Continue" $return>><</link>>
<<else>>
<<link "Continue" setup.npcConversationReturnPassage()>><</link>>
<</if>>
<</if>>
<</if>><</nobr>><<nobr>><div class="npc-response-panel">
<<if _result and _result.conversationMoment>>
<<print setup.npcConversationMomentHtml(_npc, _result.conversationMoment, _result.revealedTrait, _result)>>
<<else>>
<<if _result and _result.playerArousalInfluence>><p><<= _result.playerArousalInfluence.text >></p><<print _result.playerArousalInfluence.html>><</if>>
<<if _result and _result.conversationMoment>>
<<print setup.npcConversationMomentHtml(_npc, _result.conversationMoment, _result.revealedTrait)>>
<<else>>
<<if _result and _result.revealedTrait>><<print setup.npcTraitDiscoveryHtml(_npc, _result.revealedTrait, "flirt")>><</if>>
<p><<= _result and _result.fallbackText ? _result.fallbackText : "You let a warmer note enter the conversation and wait to see how they answer it." >></p>
<</if>>
<<if _result and _result.relationshipStateText>><p><<= _result.relationshipStateText >></p><</if>>
<<if _result and _result.aftermathText>><p><<= _result.aftermathText >></p><</if>>
<<if _result and _result.staleText>><p><<= _result.staleText >></p><</if>>
<<if _result and _result.socialDiscovery>><p><<= _result.socialDiscovery.text >></p><</if>>
<<if _result and _result.socialEventDiscovery>><p><<= _result.socialEventDiscovery.text >></p><</if>>
<<if _result and _result.loyaltyPrompt>>
<<set $lastLoyaltyPrompt = _result.loyaltyPrompt>>
<div class="npc-actions-label">They ask you</div>
<p><<= _result.loyaltyPrompt.text >></p>
<div class="npc-action-list">
<<link "Reassure them">><<set $lastLoyaltyPromptResult = setup.npcResolveLoyaltyPrompt($lastLoyaltyPrompt, "reassure")>><<goto "NPCLoyaltyPromptResult">><</link>>
<<link "Deny it">><<set $lastLoyaltyPromptResult = setup.npcResolveLoyaltyPrompt($lastLoyaltyPrompt, "deny")>><<goto "NPCLoyaltyPromptResult">><</link>>
<<link "Admit it">><<set $lastLoyaltyPromptResult = setup.npcResolveLoyaltyPrompt($lastLoyaltyPrompt, "admit")>><<goto "NPCLoyaltyPromptResult">><</link>>
</div>
<</if>>
<<if _result and _result.relationshipPressurePrompt>>
<<set $lastRelationshipPressurePrompt = _result.relationshipPressurePrompt>>
<div class="npc-actions-label">They hesitate</div>
<p><<= _result.relationshipPressurePrompt.text >></p>
<div class="npc-action-list">
<<if _result.relationshipPressurePrompt.kind is "keep_secret">><<link "Keep it quiet">><<set $lastRelationshipPressureResult = setup.npcResolveRelationshipPressurePrompt($lastRelationshipPressurePrompt, "secret")>><<goto "NPCRelationshipPressureResult">><</link>><</if>>
<<if _result.relationshipPressurePrompt.kind isnot "fresh_break">><<link "Ask them to choose">><<set $lastRelationshipPressureResult = setup.npcResolveRelationshipPressurePrompt($lastRelationshipPressurePrompt, "choose")>><<goto "NPCRelationshipPressureResult">><</link>><</if>>
<<link "Give them space">><<set $lastRelationshipPressureResult = setup.npcResolveRelationshipPressurePrompt($lastRelationshipPressurePrompt, "step_back")>><<goto "NPCRelationshipPressureResult">><</link>>
<<link "Push past it">><<set $lastRelationshipPressureResult = setup.npcResolveRelationshipPressurePrompt($lastRelationshipPressurePrompt, "pressure")>><<goto "NPCRelationshipPressureResult">><</link>>
</div>
<</if>>
<<if _result and _result.relationshipPrompt>>
<<set $lastRelationshipPrompt = _result.relationshipPrompt>>
<div class="npc-actions-label">They ask you</div>
<p><<= _result.relationshipPrompt.text >></p>
<div class="npc-action-list">
<<link "Hear them out">><<run setup.npcStartRelationshipScene($lastRelationshipPrompt.npcId, $lastRelationshipPrompt.actionId, "npc", setup.npcConversationReturnPassage())>><<goto "NPCRelationshipScene">><</link>>
<<link "Not now">><<set $lastRelationshipPromptResult = setup.npcRelationshipScenePostpone($lastRelationshipPrompt.npcId, $lastRelationshipPrompt.actionId, false)>><<goto "NPCRelationshipPromptResult">><</link>>
</div>
<</if>>
<<if _result and _result.playerQuestion>>
<<set $activePlayerQuestion = _result.playerQuestion.id>>
<div class="npc-actions-label">They ask you</div>
<p><<= _result.playerQuestion.prompt >></p>
<div class="npc-action-list">
<<for _answer range _result.playerQuestion.answers>>
<<capture _answer>><<link _answer.label>><<run setup.playerPersonalityAnswer($activePlayerQuestion, _answer.id, $activeNpcId)>><<goto "NPCPlayerAnswer">><</link>><</capture>>
<</for>>
<<link "I would rather not answer">><<run setup.playerDeclineNpcQuestion($activePlayerQuestion, $activeNpcId)>><<goto "NPCPlayerAnswer">><</link>>
</div>
<</if>>
<<if _result and _result.activityOffer>>
<<set $lastActivityOffer = _result.activityOffer>>
<div class="npc-actions-label">They suggest a plan</div>
<p><<= _result.activityOffer.text >></p>
<div class="npc-action-list">
<<set _activityAcceptLabel = "Agree to day " + $lastActivityOffer.day + " at " + setup.formatClock($lastActivityOffer.minute)>>
<<link _activityAcceptLabel>><<set $lastActivityInvite = setup.npcAcceptActivityOffer($lastActivityOffer)>><<goto "NPCActivityInviteResult">><</link>>
<<link "Suggest a different time">><<set $lastActivityInvite = setup.npcChooseDifferentActivityTime($lastActivityOffer)>><<goto "NPCActivityInviteResult">><</link>>
<<link "Decline" setup.npcConversationReturnPassage()>><<run setup.npcDeclineActivityOffer($lastActivityOffer)>><</link>>
</div>
<</if>>
<<if _result and _result.proposition>>
<<set $lastNpcProposition = _result.proposition>>
<p><<= _result.proposition.text >></p>
<div class="npc-action-list">
<<link "Accept">><<run setup.npcAcceptProposition($lastNpcProposition)>><<goto "NPCEncounter">><</link>>
<<link "Decline" setup.npcConversationReturnPassage()>><<run setup.npcDeclineProposition($lastNpcProposition)>><</link>>
</div>
<</if>><</if>></div><</nobr>><<nobr>><div class="npc-response-panel"><<if !$lastPersonalityAnswer>>
The moment passes.
<<link "Continue" setup.npcConversationReturnPassage()>><</link>>
<<else>>
<p><<= $lastPersonalityAnswer.text >></p>
<<link "Continue" setup.npcConversationReturnPassage()>><</link>>
<</if>></div><</nobr>><<run setup.ensureNpcSystem()>>'NPC Portrait Guide'<br><br><<print setup.npcReleasePortraitGuideHtml()>><br><<link "Return to Game" $return>><</link>><<set _npc = setup.getNpcById($journalNpcId)>>
<<nobr>><<if !_npc>>
<div class="journal-person-empty">Select someone to view their journal entry.</div>
<<else>>
<<set _activeLoan = setup.npcActiveLoanFor(_npc.id)>>
<div class="journal-person-detail">
<div class="npc-interact-header">
<div class="npc-profile-portrait"><div class="npc-portrait-slot"><<print setup.npcPortraitImgHtml(_npc, "clothed")>></div></div>
<div class="npc-profile-info">
<div class="npc-interact-name"><<= _npc.discovered.name ? _npc.name : "Unknown resident" >></div>
<div class="npc-interact-subtext">
<<if _npc.discovered.appearance>><<= setup.npcAppearanceText(_npc) >><<else>>Appearance unknown<</if>><br>
<<if _npc.discovered.age>>Age: <<= _npc.age >><<elseif _npc.discovered.approxAge>>Approximate age: <<= setup.npcApproxAge(_npc) >><<else>>Age unknown<</if>>
<<if _npc.discovered.job>><br>Job: <<= _npc.job >><</if>>
<<if _npc.discovered.job>><br>Literacy: <<= setup.npcLiteracyLabel(_npc) >><</if>>
</div>
<<print setup.npcJournalMetersHtml(_npc)>>
</div>
</div>
<div class="journal-detail-grid">
<div class="journal-detail-section">
<div class="journal-detail-title">Identity</div>
<div class="journal-detail-row"><span>Status</span><span><<= setup.npcRelationshipStatusLabel(_npc) >></span></div>
<div class="journal-detail-row"><span>Name</span><span><<= _npc.discovered.name ? _npc.name : "Unknown" >></span></div>
<div class="journal-detail-row"><span>Age</span><span><<if _npc.discovered.age>><<= _npc.age >><<elseif _npc.discovered.approxAge>><<= setup.npcApproxAge(_npc) >><<else>>Unknown<</if>></span></div>
<<if _npc.discovered.job>><div class="journal-detail-row"><span>Work</span><span><<= _npc.job >></span></div><</if>>
<<if _npc.discovered.job>><div class="journal-detail-row"><span>Literacy</span><span><<= setup.npcLiteracyLabel(_npc) >></span></div><</if>>
<<if _npc.discovered.home or _npc.discovered.homeArea>><div class="journal-detail-row"><span>Home</span><span><<= setup.npcKnownHomeText(_npc) >></span></div><</if>>
<<if setup.npcGoldKnown(_npc)>><div class="journal-detail-row"><span>Gold</span><span><<= _npc.gold >></span></div><</if>>
<div class="journal-detail-row"><span>Commitment</span><span><<= setup.npcRelationshipCommitmentLabel(_npc) >></span></div>
<div class="journal-detail-row"><span>Last spoken</span><span>Day <<= _npc.lastInteractionDay || "?" >></span></div>
<<if _npc.discovered.lastSeen>><div class="journal-detail-row"><span>Last seen</span><span><<= setup.npcLastSeenText(_npc) >></span></div><</if>>
</div>
<div class="journal-detail-section">
<div class="journal-detail-title">Traits</div>
<<if _npc.discovered.traits and _npc.discovered.traits.length>><div class="npc-known-traits"><<for _trait range _npc.discovered.traits>><<print setup.npcTraitTooltipHtml(_trait, "npc-known-trait")>><</for>></div><<else>><div class="journal-person-empty">Unknown</div><</if>>
</div>
<div class="journal-detail-section">
<div class="journal-detail-title">Known Connections</div>
<<print setup.npcKnownSocialLinksHtml(_npc)>>
</div>
<div class="journal-detail-section">
<div class="journal-detail-title">Recent Gossip</div>
<<print setup.npcKnownSocialEventsHtml(_npc)>>
</div>
<<if _npc.relationshipMemory and _npc.relationshipMemory.length>>
<div class="journal-detail-section journal-detail-section-wide">
<div class="journal-detail-title">Relationship Notes</div>
<<print setup.npcRelationshipMemoryHtml(_npc)>>
</div>
<</if>>
<<print setup.npcLoyaltyWarningsHtml(_npc)>>
<<if _activeLoan>>
<div class="journal-detail-section journal-detail-section-wide">
<div class="journal-detail-title">Loan</div>
<div class="journal-detail-row"><span>Borrowed</span><span><<= _activeLoan.amount >> gold</span></div>
<div class="journal-detail-row"><span>Due</span><span><<= _activeLoan.totalDue >> gold by day <<= _activeLoan.dueDay >></span></div>
<<if setup.npcCurrentDay() > _activeLoan.dueDay>><div class="journal-detail-row"><span>Late</span><span><<= setup.npcCurrentDay() - _activeLoan.dueDay >> day(s)</span></div><</if>>
</div>
<</if>>
<<if _npc.discovered.schedule or _npc.discovered.routineInfoLevel gte 0 or (_npc.discovered.scheduleObservations and Object.keys(_npc.discovered.scheduleObservations).length)>>
<div class="journal-detail-section journal-detail-section-wide">
<div class="journal-detail-title">Known Routine</div>
<<print setup.npcKnownRoutineHtml(_npc)>>
</div>
<</if>>
<<if _npc.notes>><div class="journal-detail-section journal-detail-section-wide">
<div class="journal-detail-title">Notes</div>
<div class="journal-detail-note"><<= _npc.notes >></div>
</div><</if>>
</div>
</div>
<</if>><</nobr>><<if $journalTab is "people" or !$journalReturnTab>><<set $journalReturnTab = "people">><</if>><<set $journalTab = "people">>
<<nobr>><div class="journal-shell">
<div class="journal-header">
<div class="journal-title">Journal</div>
<div class="journal-subtitle">People of Ambercross</div>
</div>
<div class="journal-tabs">
<<link "Character" "Journal">><<set $journalTab = "character">><</link>>
<<link "Character Traits" "Journal">><<set $journalTab = "traits">><</link>>
<span class="journal-tab-active">People</span>
</div>
<<include "JournalNPCDetails_body">>
<div class="journal-detail-actions">
<<link "Back to Journal" "Journal">><<set $journalTab = $journalReturnTab || "people">><</link>>
<<link "Return to Game" $return>><</link>>
</div>
</div><</nobr>><<nobr>><<set _data = setup.npcActiveEncounter()>>
<<if !_data or !_data.active or _data.active.blocked>>
<<goto "NPCEncounterUnavailable">>
<<elseif _data.active.ended and _data.active.endReason is "manual">>
<<goto "NPCEncounterStopped">>
<<elseif _data.active.ended and !setup.npcEncounterCurrentMediaPath()>>
<<goto "NPCEncounterAftermath">>
<<else>>
<div class="npc-encounter-panel">
<div class="npc-encounter-main">
<<set _mediaPath = setup.npcEncounterCurrentMediaPath()>><<set _playerPortraitPath = setup.playerSexPortraitPath()>><<set _portraitPath = setup.npcEncounterPortraitPath()>>
<div class="npc-encounter-visuals">
<div class="npc-encounter-player-portrait"><<if _playerPortraitPath>><img @src="_playerPortraitPath" alt=""><<else>>You<</if>></div>
<div class="npc-encounter-media"><<if _mediaPath>><img @src="_mediaPath" alt=""><<else>><<= _data.encounter ? _data.encounter.label : "Encounter" >><br>media slot<</if>></div>
<div class="npc-encounter-portrait"><<if _portraitPath>><img @src="_portraitPath" alt=""><<else>>Portrait<</if>></div>
</div>
<div class="npc-encounter-bars">
<<print setup.npcEncounterBarHtml("Character arousal", _data.active ? _data.active.playerArousal : 0)>>
<<print setup.npcEncounterBarHtml("NPC arousal", _data.active ? _data.active.npcSceneArousal : 0)>>
</div>
<div class="npc-encounter-text">
<p><<= setup.npcEncounterCurrentText() >></p>
<<if _data.active.blocked and _data.active.reasons and _data.active.reasons.length>>
<div class="npc-encounter-effects"><<for _reason range _data.active.reasons>><div><<= _reason >></div><</for>></div>
<</if>>
</div>
<<if _data.active.ended>>
<<print setup.npcEncounterAftermathHtml()>>
<<set _encounterReturn = _data.active.returnPassage || "NPCInteract">>
<div class="npc-encounter-choice-list"><div class="npc-encounter-choice-buttons">
<<if setup.playerHasCumStatus()>>
<<link "Clean up and continue" "NPCEncounterAftercare">><<run setup.playerResolveEncounterAftermath("clean")>><</link>>
<<if setup.playerCanLeaveEncounterAftermath(_data.active)>><<link "Leave the traces for now" "NPCEncounterAftercare">><<run setup.playerResolveEncounterAftermath("leave")>><</link>><</if>>
<<else>><<link "Continue" _encounterReturn>><<run setup.npcClearEncounter()>><</link>><</if>>
</div></div>
<<else>>
<<npcEncounterChoices>>
<</if>>
</div>
</div>
<</if>><</nobr>><<nobr>><<set _data = setup.npcActiveEncounter()>>
<div class="npc-encounter-result-panel">
<div class="npc-encounter-result-kicker">Intimate encounter</div>
<div class="npc-encounter-result-title">The moment does not begin</div>
<div class="npc-encounter-result-text"><p><<= setup.npcEncounterCurrentText() >></p></div>
<<if _data and _data.active and _data.active.reasons and _data.active.reasons.length>>
<div class="npc-encounter-effects"><<for _reason range _data.active.reasons>><div><<= _reason >></div><</for>></div>
<</if>>
<<set _encounterReturn = _data and _data.active ? (_data.active.returnPassage || "NPCInteract") : ($return || "NPCInteract")>>
<div class="npc-encounter-result-actions"><<link "Return" _encounterReturn>><<run setup.npcClearEncounter()>><</link>></div>
</div><</nobr>><<nobr>><<set _data = setup.npcActiveEncounter()>>
<div class="npc-encounter-result-panel">
<div class="npc-encounter-result-kicker">Intimate encounter</div>
<div class="npc-encounter-result-title">After the encounter</div>
<div class="npc-encounter-result-text"><p><<= setup.npcEncounterCurrentText() >></p></div>
<<print setup.npcEncounterAftermathHtml()>>
<<set _encounterReturn = _data and _data.active ? (_data.active.returnPassage || "NPCInteract") : ($return || "NPCInteract")>>
<div class="npc-encounter-result-actions">
<<if setup.playerHasCumStatus()>>
<<link "Clean up and continue" "NPCEncounterAftercare">><<run setup.playerResolveEncounterAftermath("clean")>><</link>>
<<if setup.playerCanLeaveEncounterAftermath(_data.active)>><<link "Leave the traces for now" "NPCEncounterAftercare">><<run setup.playerResolveEncounterAftermath("leave")>><</link>><</if>>
<<else>><<link "Continue" _encounterReturn>><<run setup.npcClearEncounter()>><</link>><</if>>
</div>
</div><</nobr>><<nobr>><<set _data = setup.npcActiveEncounter()>>
<<if !_data or !_data.active or !_data.active.ended or _data.active.endReason is not "manual">><<goto "NPCEncounterUnavailable">>
<<else>><<set _reaction = _data.active.stopReaction || setup.npcEncounterStopReaction(_data.npc, _data.active)>>
<div class="npc-encounter-result-panel">
<div class="npc-encounter-result-kicker">Intimate encounter</div>
<div class="npc-encounter-result-title">The encounter ends</div>
<div class="npc-encounter-result-text"><p><<= _reaction.intro >></p></div>
<<if _reaction.line>><<print setup.npcEventDialogueHtml(_data.npc, _reaction.line, "Your companion", null, _data.active.npcUndressed ? "nude" : "clothed")>><</if>>
<<if _data.active.stopConsequenceText>><div class="npc-encounter-result-text"><p><<= _data.active.stopConsequenceText >></p></div><</if>>
<<print setup.npcEncounterAftermathHtml()>>
<<set _encounterReturn = _data.active.returnPassage || "NPCInteract">>
<div class="npc-encounter-result-actions">
<<if setup.playerHasCumStatus()>>
<<link "Clean up and continue" "NPCEncounterAftercare">><<run setup.playerResolveEncounterAftermath("clean")>><</link>>
<<if setup.playerCanLeaveEncounterAftermath(_data.active)>><<link "Leave the traces for now" "NPCEncounterAftercare">><<run setup.playerResolveEncounterAftermath("leave")>><</link>><</if>>
<<else>><<link "Continue" _encounterReturn>><<run setup.npcClearEncounter()>><</link>><</if>>
</div></div><</if>><</nobr>><<nobr>><<set _aftercare = $encounterAftermathResult>>
<div class="npc-encounter-result-panel">
<div class="npc-encounter-result-kicker">After the encounter</div>
<div class="npc-encounter-result-title"><<= _aftercare and _aftercare.title ? _aftercare.title : "After the encounter" >></div>
<div class="npc-encounter-result-text"><p><<= _aftercare ? _aftercare.text : "The moment has passed." >></p></div>
<<set _aftercareReturn = _aftercare ? _aftercare.returnPassage : ($return || "NPCInteract")>>
<div class="npc-encounter-result-actions">
<<if _aftercare and _aftercare.publicWashOnReturn>>
<<link "Continue" "NPCEncounterPublicRegret">><<set $publicAftermathReturn = $encounterAftermathResult.returnPassage>><</link>>
<<else>>
<<link "Continue" _aftercareReturn>><<set $encounterAftermathResult = null>><</link>>
<</if>>
</div>
</div><</nobr>><<nobr>><<set _publicAftermath = setup.playerResolvePublicAftermathRegret()>>
<div class="npc-encounter-result-panel">
<div class="npc-encounter-result-kicker">After the encounter</div>
<div class="npc-encounter-result-title"><<= _publicAftermath.title >></div>
<div class="npc-encounter-result-text"><p><<= _publicAftermath.text >></p></div>
<div class="npc-encounter-result-actions"><<link "Continue" _publicAftermath.returnPassage>><<set $publicAftermathResult = null>><</link>></div>
</div><</nobr>><<nobr>><<set _npc = setup.getNpcById($activeNpcId)>>
<<if !_npc>>
They are no longer nearby.
<div class="npc-return-link"><<link "Return" $return>><</link>></div>
<<else>>
<div class="npc-activity-menu">
<div class="npc-interact-name">Invite <<= _npc.discovered.name ? _npc.firstName : "them" >></div>
<<set _activities = ['House Door', 'Tavern Lodging Door'].includes($return) ? setup.houseDoorActivityList(_npc) : setup.npcActivityList(_npc)>>
<<if !_activities.length>>
<div class="journal-person-empty">No invitation feels right for the relationship between you right now.</div>
<<else>>
<div class="npc-activity-list">
<<for _activity range _activities>>
<div class="npc-activity-card">
<div class="npc-activity-title"><<= _activity.label >></div>
<div class="npc-activity-note"><<= _activity.inviteText >><br>Meet at <<= setup.npcActivityLocationLabel(_activity) >>. Takes about <<= _activity.duration >> minutes.</div>
<div class="npc-activity-intent-links"><<set _intents = setup.npcActivityIntentOptions(_activity)>><<for _intent range _intents>><<capture _activity _intent>><<link setup.npcActivityIntentActionLabel(_intent)>><<set $lastActivityInvite = setup.npcInviteActivity($activeNpcId, _activity.id, _intent)>><<goto "NPCActivityInviteResult">><</link>><</capture>><</for>></div>
</div>
<</for>>
</div>
<</if>>
<div class="npc-return-link"><<link "Back" setup.npcConversationReturnPassage()>><</link>></div>
</div>
<</if>><</nobr>><<nobr>><<if !$lastActivityInvite>>
The invitation goes nowhere.
<div class="npc-return-link"><<link "Back" setup.npcConversationReturnPassage()>><</link>></div>
<<else>>
<div class="npc-activity-panel">
<div class="npc-interact-name"><<= $lastActivityInvite.activity ? $lastActivityInvite.activity.label : "Invitation" >></div>
<<if $lastActivityInvite.intent>><div class="npc-activity-intent-badge"><<= setup.npcActivityIntentLabel($lastActivityInvite.intent) >></div><</if>>
<p><<= $lastActivityInvite.text >></p>
<<if $lastActivityInvite.alternativeIntent>><div class="npc-activity-choice-list"><<link "Suggest meeting as friends instead">><<set $lastActivityInvite = setup.npcInviteActivity($lastActivityInvite.npcId, $lastActivityInvite.activityId, "friendly")>><<goto "NPCActivityInviteResult">><</link>></div><</if>>
<<if $lastActivityInvite.needsScheduling>>
<div class="npc-activity-note">Available times:</div>
<div class="npc-activity-choice-list">
<<if !$lastActivityInvite.windows or !$lastActivityInvite.windows.length>>
No good time is available right now.
<<else>>
<<set _i = 0>><<for _window range $lastActivityInvite.windows>>
<<capture _i _window>><<link setup.npcActivityWindowText(_window)>><<set $lastActivityInvite = setup.npcFinalizeActivityInvite($lastActivityInvite, _i)>><<goto "NPCActivityInviteResult">><</link>><</capture>>
<<set _i = _i + 1>>
<</for>>
<</if>>
</div>
<</if>>
<<if $lastActivityInvite.needsConflictChoice>>
<div class="npc-activity-note">Clashes with: <<= setup.npcActivitySummary($lastActivityInvite.conflict) >></div>
<div class="npc-activity-choice-list">
<<link "Replace old plan">><<set $lastActivityInvite = setup.npcFinalizeActivityInvite($lastActivityInvite, $lastActivityInvite.windowIndex, $lastActivityInvite.conflict.id)>><<goto "NPCActivityInviteResult">><</link>>
<<link "Choose another time">><<if $lastActivityInvite.activityOffer>><<set $lastActivityInvite = setup.npcChooseDifferentActivityTime($lastActivityInvite.activityOffer)>><<else>><<set $lastActivityInvite.needsConflictChoice = false>><<set $lastActivityInvite.needsScheduling = true>><</if>><<goto "NPCActivityInviteResult">><</link>>
</div>
<</if>>
<<if $lastActivityInvite.accepted and $lastActivityInvite.scheduled>>
<div class="npc-activity-note">Window: day <<= $lastActivityInvite.scheduled.day >>, <<= setup.formatClock($lastActivityInvite.scheduled.minute - 30) >> to <<= setup.formatClock($lastActivityInvite.scheduled.endMinute + 30) >> at <<= setup.npcActivityLocationLabel($lastActivityInvite.scheduled.location) >>.</div>
<div class="npc-activity-choice-list">
<<if $lastActivityInvite.now>><<link "Start now">><<run setup.npcBeginActivity($lastActivityInvite.scheduled.id)>><<goto "NPCActivity">><</link>><</if>>
<<link "View plans" "NPCActivityPlans">><</link>>
</div>
<</if>>
<<if $lastActivityInvite.needsConflictChoice or ($lastActivityInvite.needsScheduling and $lastActivityInvite.windows and $lastActivityInvite.windows.length)>>
<<else>>
<div class="npc-return-link"><<link "Continue" setup.npcConversationReturnPassage()>><</link>></div>
<</if>>
</div>
<</if>><</nobr>><<nobr>><<set _data = setup.npcActiveActivityData()>>
<<if !_data or !_data.activity or !_data.npc>>
The plan has passed.
<div class="npc-return-link"><<set _activityReturn = setup.npcActivityReturnPassage()>><<link "Return" _activityReturn>><<run setup.npcClearActivity()>><</link>></div>
<<else>>
<div class="npc-activity-panel">
<div class="npc-activity-header"><div><div class="npc-interact-name"><<= _data.activity.label >> with <<= _data.npc.discovered.name ? _data.npc.firstName : "someone" >></div>
<div class="npc-activity-intent-badge"><<= setup.npcActivityIntentLabel(_data.active.intent || _data.instance.intent) >></div></div>
<<print setup.npcEventFaceHtml(_data.npc)>></div>
<<if _data.active.mediaPath>><<print setup.npcIntimateMediaHtml("", _data.npc, _data.active.mediaPath)>><</if>>
<p><<= setup.npcActivityReturnText() >></p>
<<print setup.npcActivityAftermathHtml()>>
<div class="npc-activity-choice-list">
<<if _data.active.prompt>>
<<if _data.active.prompt.kind is "sexual">>
<<set _sexualCheck = setup.npcActivitySexualPromptCheck(_data)>>
<<if _sexualCheck.ok>><<link setup.npcActivityPromptAcceptLabel(_data.active.prompt)>><<run setup.npcAcceptActivitySexualPrompt()>><<goto "NPCEncounter">><</link>>
<<else>><div class="player-choice-status"><<= _sexualCheck.text >></div><</if>>
<<link setup.npcActivityPromptDeclineLabel(_data.active.prompt) "NPCActivity">><<run setup.npcResolveActivityPrompt("decline")>><</link>>
<<else>>
<<link setup.npcActivityPromptAcceptLabel(_data.active.prompt) "NPCActivity">><<run setup.npcResolveActivityPrompt("accept")>><</link>>
<<link setup.npcActivityPromptDeclineLabel(_data.active.prompt) "NPCActivity">><<run setup.npcResolveActivityPrompt("decline")>><</link>>
<</if>>
<<elseif _data.active.complete>>
<<if setup.npcActivityCanWalkHome(_data)>><<set _walkLabel = _data.active.walkedHomeChoice ? "Continue to their door" : "Walk them home">><<link _walkLabel "NPCActivityWalkHome">><<set $activityWalkHomeResult = setup.npcWalkHomeAfterActivity()>><</link>><</if>>
<<set _activityReturn = setup.npcActivityReturnPassage()>><<link "Part ways" _activityReturn>><<run setup.npcClearActivity()>><</link>>
<<else>>
<<set _choices = setup.npcActivityChoicesForStep(_data)>>
<<for _choice range _choices>>
<<capture _choice>><<set _availability = setup.npcActivityChoiceAvailability(_data, _choice)>>
<div class="npc-activity-choice">
<<if _availability.ok>><<link setup.npcActivityChoiceLabel(_choice)>><<run setup.npcApplyActivityChoice(_choice.id)>><<if $blackoutIncident>><<goto "Blackout Wake">><<else>><<goto "NPCActivity">><</if>><</link>>
<<else>><span class="npc-activity-choice-locked"><<= setup.npcActivityChoiceLabel(_choice) >></span> <span class="player-choice-status"><<= _availability.text >></span><</if>>
</div><</capture>>
<</for>>
<<set _activityReturn = setup.npcActivityReturnPassage()>><<link "Cancel" _activityReturn>><<run setup.npcClearActivity()>><</link>>
<</if>>
</div>
</div>
<</if>><</nobr>><<nobr>><<run setup.npcReviewOverdueLoans()>><<set _plans = setup.npcPendingActivities()>><<set _loans = setup.npcActiveLoans()>>
<div class="npc-activity-menu">
<div class="npc-interact-name">Plans</div>
<<if $lastPlanLoanResult>><div class="npc-activity-card"><<= $lastPlanLoanResult.text >></div><<set $lastPlanLoanResult = null>><</if>>
<div class="npc-activity-section-title">Activities</div>
<<if !_plans.length>>
<div class="journal-person-empty">You have no plans scheduled.</div>
<<else>>
<div class="npc-activity-list">
<<for _plan range _plans>>
<div class="npc-activity-card">
<div><<= setup.npcActivitySummary(_plan) >></div>
<div class="npc-activity-note">Window: <<= setup.formatClock(_plan.minute - 30) >> to <<= setup.formatClock(_plan.endMinute + 30) >>.</div>
<div class="npc-activity-choice-list">
<<capture _plan>><<if setup.npcActivityCanStart(_plan)>><<link "Start">><<run setup.npcBeginActivity(_plan.id)>><<goto "NPCActivity">><</link>><</if>><</capture>>
<<capture _plan>><<link "Cancel" "NPCActivityPlans">><<run setup.npcCancelActivity(_plan.id)>><</link>><</capture>>
</div>
</div>
<</for>>
</div>
<</if>>
<div class="npc-activity-section-title">Debts</div>
<<if !_loans.length>>
<div class="journal-person-empty">You owe no one money right now.</div>
<<else>>
<div class="npc-activity-list">
<<for _loan range _loans>>
<div class="npc-activity-card npc-debt-card">
<div><<= setup.npcLoanSummary(_loan) >></div>
<div class="npc-activity-note">Borrowed <<= _loan.amount >>, interest <<= _loan.interest >>. <<if setup.npcLoanIsOverdue(_loan)>>Trust is slipping each day this remains unpaid.<<else>>Repay by day <<= _loan.dueDay >> to build trust.<</if>><<if _loan.pressureNote>> <<= _loan.pressureNote >><</if>></div>
<div class="npc-activity-choice-list">
<<capture _loan>><<link "Repay" "NPCActivityPlans">><<set $lastPlanLoanResult = setup.npcRepayLoan(_loan.id)>><</link>><</capture>>
<<capture _loan>><<link "Cannot repay" "NPCActivityPlans">><<set $lastPlanLoanResult = setup.npcDefaultLoan(_loan.id)>><</link>><</capture>>
<<if setup.npcLoanIsOverdue(_loan)>>
<<set _loanNpc = setup.getNpcById(_loan.npcId)>>
<<set _compOptions = setup.npcLoanCompensationOptions(_loanNpc, _loan)>>
<<if _compOptions.length>>
<<for _compOption range _compOptions>><<capture _loan _compOption>><<set _compLabel = setup.npcLoanCompensationLabel(_loan, _compOption)>><<link _compLabel>><<set $activeNpcId = _loan.npcId>><<set $lastLoanResult = setup.npcOfferLoanCompensation(_loan.id, _compOption.id)>><<if $lastLoanResult.pendingEncounter>><<goto "NPCEncounter">><<else>><<set $lastPlanLoanResult = $lastLoanResult>><<goto "NPCActivityPlans">><</if>><</link>><</capture>><</for>>
<</if>>
<</if>>
</div>
</div>
<</for>>
</div>
<</if>>
<div class="npc-return-link"><<link "Return to Game" $return>><</link>></div>
</div><</nobr>><<nobr>><<set _npc = setup.getNpcById($activeNpcId)>>
<<if !_npc>>
They are no longer nearby.
<div class="npc-return-link"><<link "Return" $return>><</link>></div>
<<else>>
<<run setup.npcEnsureRelationship(_npc)>>
<div class="npc-activity-menu npc-relationship-menu">
<div class="npc-interact-name">Relationship</div>
<div class="npc-activity-note">Current status: <<= setup.npcRelationshipStatusLabel(_npc) >>. <<= setup.npcRelationshipCommitmentNote(_npc) >></div>
<<if $lastRelationshipResult>><div class="npc-activity-card"><<= $lastRelationshipResult.text >></div><<set $lastRelationshipResult = null>><</if>>
<<set _partnerChoice = setup.npcPartnerChoiceState(_npc)>>
<<if _partnerChoice.kind is "cooldown">><div class="npc-activity-note"><<= _partnerChoice.choice.status is "stayed" ? "They chose to stay with their partner. Give them space before raising this again." : "They have not made a new promise. Give them space before raising this again." >></div><</if>>
<<if ["available", "pending", "ready"].includes(_partnerChoice.kind)>>
<div class="npc-activity-card">
<div><strong><<= _partnerChoice.kind is "ready" ? "Hear their decision" : _partnerChoice.kind is "pending" ? "Give them time" : "Talk about their other relationship" >></strong></div>
<div class="npc-activity-note"><<= _partnerChoice.kind is "available" ? "Ask what their existing relationship means for the two of you. They will need time to decide." : _partnerChoice.kind is "pending" ? "They have asked for time to speak honestly with their partner." : "They are ready to tell you where things stand." >></div>
<div class="npc-activity-choice-list"><<link "Talk to them" "NPCPartnerChoice">><<set $lastPartnerChoiceResult = null>><</link>></div></div>
<</if>>
<<set _actions = setup.npcRelationshipActions(_npc)>>
<<if !_actions.length>>
<<if !["available", "pending", "ready"].includes(_partnerChoice.kind)>><div class="journal-person-empty"><<= _npc.relationship.manualStatus is "ex" ? "The breakup is still too recent or painful to revisit. Give them time." : setup.npcRelationshipConflictLevel(_npc) ? "They are not ready for another difficult conversation yet. Give the tension some time to settle." : "You are still getting to know each other. For now, the bond between you has not settled into anything that needs naming." >></div><</if>>
<<else>>
<div class="npc-activity-list">
<<for _action range _actions>>
<div class="npc-activity-card">
<div><strong><<= _action.label >></strong></div>
<div class="npc-activity-note"><<= _action.note >></div>
<div class="npc-activity-choice-list">
<<capture _action>><<link _action.label>><<if setup.npcRelationshipSceneDefinitions[_action.id]>><<run setup.npcStartRelationshipScene($activeNpcId, _action.id, "player", "NPCRelationshipMenu")>><<goto "NPCRelationshipScene">><<else>><<set $lastRelationshipResult = setup.npcSetRelationshipIntent($activeNpcId, _action.id)>><<if _action.id is "move_in" and $lastRelationshipResult.success>><<set $taxMoveInNpcId = $activeNpcId>><<goto "Tax Move In Notice">><<else>><<goto "NPCRelationshipMenu">><</if>><</if>><</link>><</capture>>
</div>
</div>
<</for>>
</div>
<</if>>
<div class="npc-return-link"><<link "Back" "NPCInteract">><</link>></div>
</div>
<</if>><</nobr>><<nobr>><<set _npc = setup.getNpcById($activeNpcId)>>
<<if !_npc>>
They are no longer nearby.
<div class="npc-return-link"><<link "Return" $return>><</link>></div>
<<else>>
<<run setup.npcEnsureRelationship(_npc)>>
<<set _loan = setup.npcActiveLoanFor(_npc.id)>>
<div class="npc-loan-panel">
<h2>Money</h2>
<p><<= setup.npcDisplayName(_npc) >></p>
<<if _loan>>
<div class="npc-loan-list">
<div class="npc-loan-card">
<div>
You owe <<= setup.npcDisplayName(_npc) >> <<= _loan.totalDue >> gold.
<div class="npc-loan-note">Borrowed <<= _loan.amount >>, interest <<= _loan.interest >>. Due day <<= _loan.dueDay >>.<<if setup.npcCurrentDay() > _loan.dueDay>> Late by <<= setup.npcCurrentDay() - _loan.dueDay >> day(s).<</if>><<if _loan.pressureNote>> <<= _loan.pressureNote >><</if>></div>
</div>
<div>
<<capture _loan>><<link "Repay">><<set $lastLoanResult = setup.npcRepayLoan(_loan.id)>><<goto "NPCLoanResult">><</link>><</capture>>
<<capture _loan>><<link "Cannot repay">><<set $lastLoanResult = setup.npcDefaultLoan(_loan.id)>><<goto "NPCLoanResult">><</link>><</capture>>
<<if setup.npcLoanIsOverdue(_loan)>>
<<set _compOptions = setup.npcLoanCompensationOptions(_npc, _loan)>>
<<if _compOptions.length>>
<div class="npc-loan-note">You can try to negotiate another kind of payment. They may refuse or ask for more.</div>
<<for _compOption range _compOptions>><<capture _loan _compOption>><<set _compLabel = setup.npcLoanCompensationLabel(_loan, _compOption)>><<link _compLabel>><<set $lastLoanResult = setup.npcOfferLoanCompensation(_loan.id, _compOption.id)>><<if $lastLoanResult.pendingEncounter>><<goto "NPCEncounter">><<else>><<goto "NPCLoanResult">><</if>><</link>><</capture>><</for>>
<</if>>
<</if>>
</div>
</div>
</div>
<<else>>
<<set _options = setup.npcLoanAmountOptions(_npc)>>
<<if !_options.length>>
<p><<= setup.npcDisplayName(_npc) >> does not have enough coin to loan right now.</p>
<<else>>
<div class="npc-loan-list">
<<for _amount range _options>>
<<capture _amount>><<set _terms = setup.npcLoanTerms(_npc, _amount)>><<set _check = setup.npcLoanChance(_npc, _amount)>><<set _available = setup.npcLoanAvailability(_npc, _amount)>><<set _buttonLabel = "Ask for " + _amount + " gold">>
<div class="npc-loan-card">
<div>
<strong><<= _amount >> gold</strong>
<div class="npc-loan-note">Repay <<= _terms.totalDue >> by day <<= _terms.dueDay >>. Interest: <<= _terms.interest >>. Chance: <<= _check.chance >>%.<<if !_available.ok>> <span class="npc-loan-unavailable"><<= _available.text >></span><</if>></div>
</div>
<div><<if _available.ok>><<link _buttonLabel>><<set $lastLoanResult = setup.npcRequestLoan($activeNpcId, _amount)>><<goto "NPCLoanResult">><</link>><<else>><span class="npc-loan-disabled">Unavailable</span><</if>></div>
</div>
<</capture>>
<</for>>
</div>
<</if>>
<</if>>
<div class="npc-return-link"><<link "Back" "NPCInteract">><</link>></div>
</div>
<</if>><</nobr>><<nobr>><div class="npc-loan-panel">
<<if !$lastLoanResult>>
<p>The matter passes without agreement.</p>
<<else>>
<<if $lastLoanResult.optionId>><<set _tameImage = ($lastLoanResult.optionId === "undress" && setup.playerNakedPortraitPath) ? setup.playerNakedPortraitPath() : (setup.playerSexPortraitPath ? setup.playerSexPortraitPath() : $c.portrait)>><<if _tameImage>><div class="npc-loan-tame-preview"><img @src="_tameImage" alt=""></div><</if>><</if>>
<p><<= $lastLoanResult.text >></p>
<</if>>
<div class="npc-action-list">
<<link "Money" "NPCLoanMenu">><</link>>
<<link "Return" "NPCInteract">><</link>>
</div>
</div><</nobr>><<nobr>><div class="npc-activity-menu npc-relationship-menu">
<<if !$lastLoyaltyPromptResult>>
<p>The moment passes.</p>
<<else>>
<p><<= $lastLoyaltyPromptResult.text >></p>
<</if>>
<div class="npc-return-link"><<link "Continue" setup.npcConversationReturnPassage()>><</link>></div>
</div><</nobr>><<nobr>><div class="npc-activity-menu npc-relationship-menu">
<<if !$lastRelationshipPromptResult>>
<p>The moment passes.</p>
<<else>>
<p><<= $lastRelationshipPromptResult.text >></p>
<</if>>
<div class="npc-return-link"><<if $lastRelationshipPromptResult && $lastRelationshipPromptResult.sceneStarted>><<link "Continue conversation" "NPCRelationshipScene">><</link>><<else>><<link "Continue" setup.npcConversationReturnPassage()>><</link>><</if>></div>
</div><</nobr>><<nobr>><<set _rumor = setup.npcPartnerRumorById($activePartnerRumorId)>>
<<set _npc = _rumor ? setup.getNpcById(_rumor.npcId) : null>>
<<set _partner = _rumor ? setup.getNpcById(_rumor.partnerId) : null>>
<div class="npc-activity-menu npc-relationship-menu">
<<if !_rumor or !_npc or !_partner>>
<p>The moment passes.</p>
<div class="npc-return-link"><<link "Continue" $return>><</link>></div>
<<elseif _rumor.resolved>>
<p>There is nothing more to settle right now.</p>
<div class="npc-return-link"><<link "Continue" $return>><</link>></div>
<<else>>
<div class="npc-interact-name"><<= setup.npcDisplayName(_partner) >></div>
<p><<= setup.npcDisplayName(_partner) >> has heard about <<= setup.npcPartnerRumorLabel(_rumor) >> with <<= setup.npcDisplayName(_npc) >>.</p>
<p>They wait for your answer, watching closely for whether you sound guilty, careless, or simply tired of explaining yourself.</p>
<div class="npc-action-list">
<<link "Apologize">><<set $lastPartnerRumorResult = setup.npcResolvePartnerRumorConfrontation($activePartnerRumorId, "apologize")>><<goto "NPCPartnerConfrontationResult">><</link>>
<<link "Deny it">><<set $lastPartnerRumorResult = setup.npcResolvePartnerRumorConfrontation($activePartnerRumorId, "deny")>><<goto "NPCPartnerConfrontationResult">><</link>>
<<link "Push back">><<set $lastPartnerRumorResult = setup.npcResolvePartnerRumorConfrontation($activePartnerRumorId, "pushback")>><<goto "NPCPartnerConfrontationResult">><</link>>
</div>
<</if>>
</div><</nobr>><<nobr>><div class="npc-activity-menu npc-relationship-menu">
<<if !$lastPartnerRumorResult>>
<p>The moment passes.</p>
<<else>>
<p><<= $lastPartnerRumorResult.text >></p>
<</if>>
<div class="npc-return-link"><<link "Continue" $return>><<set $activePartnerRumorId = null>><<set $lastPartnerRumorResult = null>><</link>></div>
</div><</nobr>><<nobr>><div class="npc-activity-menu npc-relationship-menu">
<<if !$lastRelationshipPressureResult>>
<p>The moment passes.</p>
<<else>>
<p><<= $lastRelationshipPressureResult.text >></p>
<</if>>
<div class="npc-return-link"><<link "Continue" setup.npcConversationReturnPassage()>><<set $lastRelationshipPressurePrompt = null>><<set $lastRelationshipPressureResult = null>><</link>></div>
</div><</nobr>><<print setup.locationImageHtml("img/location/AC_Forestentrance.png", "Forest entrance")>>
A narrow dirt path slips between old trees, tangled roots, moss-covered rocks, and thick undergrowth, with the canopy quickly closing overhead. The trail is still easy enough to follow near the village, but the deeper forest beyond feels darker and less traveled, making it clear that anyone continuing on is leaving the safety of Ambercross behind.
<<travel "west" "Enter the forest path" "Forest Path" 5>>
<<travel "east" "Head towards the pillars" "Ambercross Pillars" 5>><<print setup.locationImageHtml("img/location/AC_Forestpath.png", "Forest path")>>
The forest path winds deeper between tall trees, thick brush, and moss-covered rocks. The trail is narrow but well-worn, with roots and loose stones breaking up the ground. A smaller path branches off along the way, leading toward a quiet clearing used by villagers looking for a peaceful place to rest.
<<travel "northwest" "Exit into the small clearing" "Forest Clearing" 5>>
<<travel "west" "Continue beyond the familiar trail" "Forest Verge" 10>>
<<travel "east" "Head to the forest entrance" "Forest Entrance" 5>><<nobr>><<run setup.ensureChapelWorkSystem()>><<print setup.locationImageHtml("img/location/AC_Chapel.png", "Ambercross chapel")>>
<p>You enter the chapel, a quiet stone building with simple wooden pews, colored glass windows, and a small altar at the far end. Candles keep the room warm and softly lit, making it a peaceful place where villagers come to pray, reflect, or seek guidance.</p>
<<print setup.literacyQuestLocationHook("Chapel")>>
<div class="location-action-list">
<<set _chapelKeeper = setup.chapelEmployerNpc()>>
<<set _chapelKeeperHere = _chapelKeeper and setup.npcCurrentLocation(_chapelKeeper) is "Chapel">>
<<if _chapelKeeperHere>><div><<= setup.npcDisplayName(_chapelKeeper) >> is tending to the chapel.</div><</if>>
<<if setup.hasOwnedUnreadBooks()>><div><<link "Sit at a table and read" "RecipeBooks">><<set $readingSpotReturn = "Chapel">><<set $readingSpotName = "a quiet chapel side table">><</link>></div><</if>>
<<if $ChapelworkAccept is 1>><div>[[Choose chapel work|ChapelWorkMenu]]</div>
<<elseif $chapelWorkQuest and $chapelWorkQuest.state is "letter" and _chapelKeeperHere>><div>[[Bring the sealed reply to the keeper|ChapelTrialReport]]</div>
<<elseif $chapelWorkQuest and $chapelWorkQuest.state is "letter">><div class="farm-work-locked">The keeper is away. Return when they are at the chapel to give your report.</div>
<<elseif $chapelWorkQuest and $chapelWorkQuest.state is "deliver">><div class="farm-work-locked">The sealed parcel still needs to reach the ruined shrine.</div>
<<elseif _chapelKeeperHere>><div>[[Ask about chapel work|ChapelWorkIntro]]</div>
<<else>><div class="farm-work-locked">No one is free to discuss work right now.</div><</if>>
</div>
<<dueActivityLinks "Chapel">>
<<travel "south" "Exit towards the village center" "Ambercross Center" 5>><</nobr>><<print setup.locationImageHtml("img/location/AC_Townhall.png", "Ambercross town hall")>>
A sturdy timber-and-stone building where most of the village’s official business is handled. A large central table is used for meetings and discussions, while shelves of records, maps, and notices line the walls. At the far end, the village officials conduct business from a raised desk. The hall is usually quiet outside of meetings, but villagers often come here to ask questions, report problems, or check local notices.
<<print setup.literacyQuestLocationHook("Ambercross Town Hall")>>
<div class="location-action-list">
<div><<link "Review the tax register" "Town Taxes">><<set $taxReturn = "Ambercross Town Hall">><</link>></div>
<<if setup.ensureTaxSystem().pendingHouseId and setup.taxCollectorHere("Ambercross Town Hall")>><div>[[Register your shared household|Tax Registration]]</div><</if>>
<<if setup.hasOwnedUnreadBooks()>><div><<link "Sit at a table and read" "RecipeBooks">><<set $readingSpotReturn = "Ambercross Town Hall">><<set $readingSpotName = "one of the town hall tables">><</link>></div><</if>>
</div>
<<travel "south" "Exit towards the village center" "Ambercross Center" 5>><<nobr>><<set _npc = setup.getNpcById($activeHomeNpcId)>>
<<set _house = _npc ? setup.houseById($activeHouseId || _npc.homeId) : null>>
<<set _homeReturn = _house ? "House Exterior" : setup.houseReturnPassage(_npc)>>
<<if !_npc or !_house or !_house.residentIds.includes(_npc.id) or !setup.npcCanSleepAtHome(_npc) or (!setup.housePlayerLivesHere(_house) and !setup.houseResidentIsPresent(_npc, _house))>>
You do not have access to that home right now.
<div class="npc-return-link"><<link "Return" _homeReturn>><</link>></div>
<<else>>
<div class="npc-activity-menu npc-relationship-menu">
<div class="npc-interact-name"><<= _house ? _house.address : setup.npcDisplayName(_npc) + "'s house" >></div>
<<set _household = setup.householdContext(_house, _npc)>><p><<= _household.member ? "You are at home. The household carries on around the table, hearth, and sleeping places you share." : "You have been welcomed into this household. That permission does not make the other residents disappear." >></p><<if _household.hostPresent>><<print setup.npcHomeUpperPortraitHtml(_npc, _household.member ? "resident" : "visit")>><</if>><<if _household.present.length>><p>At home: <<= _household.present.map(setup.npcDisplayName).join(", ") >>.</p><</if>><<if _household.hostPresent and (_household.member or setup.houseVisitDailyState(_npc).visits < 1)>><div><<link "Spend time with the household" "House Visit Interior">><<run setup.houseVisitBegin({outcome: "accepted", npcId: _npc.id, houseId: _house.id, kind: "social"})>><</link>></div><</if>>
<<if $npcHomeResult>><div class="npc-activity-card"><<print $npcHomeResult>></div><<set $npcHomeResult = "">><</if>>
<div class="npc-home-actions">
<<if _household.member and setup.npcHomeOwnerPresent(_npc) and _household.private and setup.npcPartnerActivityPolicy(_npc, "date").allowDate>>
<div><<link "Spend the night together" "NPCPartnerHomeSleep">><<set $partnerSleepTogether = true>><<set $npcHomeResult = "">><<run setup.npcPartnerHomeSpendNight(_npc)>><<set $sleepMessage = "">><<set $npcHomeWakeEvent = null>><<set $activeHomeNpcId = _npc.id>><</link>></div>
<<else>>
<<if _household.member>><div><<link "Sleep in your household sleeping place" "NPCPartnerHomeSleep">><<set $partnerSleepTogether = false>><<set $activeHomeNpcId = _npc.id>><</link>></div><<elseif _household.hostPresent and setup.houseGuestRequestWindow() and setup.houseVisitDailyState(_npc).visits < 1>><div><<link "Ask about staying the night" "House Guest Request">><<run setup.houseVisitBegin({outcome: "accepted", npcId: _npc.id, houseId: _house.id, kind: "social"})>><<set $houseGuestStay = setup.houseGuestRequestStay()>><</link>></div><</if>>
<</if>>
<<if _household.member>>
<div><<link "Change outfit" "ChangeOutfit">><<set $activeHomeNpcId = _npc.id>><<set $wardrobeReturn = "NPCHome">><</link>></div>
<div><<link "Wash up" "WashUp">><<set $activeHomeNpcId = _npc.id>><<set $wardrobeReturn = "NPCHome">><</link>></div>
<div><<link "Cook a meal" "CookingMenu">><<set $activeHomeNpcId = _npc.id>><<set $cookingReturn = "NPCHome">><</link>></div>
<<if setup.hasOwnedUnreadBooks()>>
<div><<link "Sit at a table and read" "RecipeBooks">><<set $activeHomeNpcId = _npc.id>><<set $readingSpotReturn = "NPCHome">><<set $readingSpotName = setup.npcDisplayName(_npc) + "'s table">><</link>></div>
<</if>>
<</if>>
<<if _household.member and setup.houseResidentIsPresent(_npc, _house)>>
<<if _household.private and setup.npcPartnerActivityPolicy(_npc, "date").allowDate>><div><<link "Domestic intimacy" "NPCHomeDomesticIntimacy">><<set $activeHomeNpcId = _npc.id>><<set $activeNpcId = _npc.id>><</link>></div><</if>>
<</if>>
<div class="npc-home-section-gap"><<link "Leave" _homeReturn>><</link>></div>
</div>
</div>
<</if>><</nobr>><<nobr>><<set _npc = setup.getNpcById($activeHomeNpcId)>>
<<set _house = _npc ? setup.houseById($activeHouseId || _npc.homeId) : null>>
<<set _homeReturn = _house ? "House Exterior" : setup.houseReturnPassage(_npc)>>
<<if !_npc or !setup.npcCanSleepAtHome(_npc)>>
You do not have access to that bed right now.
<div class="npc-return-link"><<link "Return" _homeReturn>><</link>></div>
<<else>>
<<if $partnerSleepTogether>>
<<set $sleepQuality = 65>>
<<set $sleepPlace = "bed with " + setup.npcDisplayName(_npc)>>
<<else>>
<<set $sleepQuality = 60>>
<<set $sleepPlace = setup.npcDisplayName(_npc) + "'s bed">>
<</if>>
<<set $sleepReturn = "NPCHome">>
<<set $sleepPassage = "NPCPartnerHomeSleep">>
<<set $activeHomeNpcId = _npc.id>>
<<set $sleepRisk = "">>
<<if $npcHomeWakeEvent and $npcHomeWakeEvent.npcId is _npc.id>>
<div class="sleep-panel">
<div class="sleep-result"><<print $npcHomeWakeEvent.text>></div>
<div class="npc-action-list">
<<if $npcHomeWakeEvent.canAccept>>
<<link "Answer them">><<run setup.npcAcceptHomeWakeRequest($npcHomeWakeEvent)>><<goto "NPCEncounter">><</link>>
<<else>>
<div class="player-choice-status"><<print $npcHomeWakeEvent.refusalText>></div>
<</if>>
<<link "Tell them you need sleep">><<set $sleepMessage = setup.npcDeclineHomeWakeRequest($npcHomeWakeEvent)>><<goto "NPCPartnerHomeSleep">><</link>>
</div>
</div>
<<else>>
<<include "SleepOptions_body">>
<</if>>
<</if>><</nobr>><<nobr>><<set _npc = setup.getNpcById($activeHomeNpcId || $activeNpcId)>>
<<if !_npc or !setup.npcCanSleepAtHome(_npc)>>
The moment passes.
<div class="npc-return-link"><<link "Return" "NPCInteract">><</link>></div>
<<else>>
<div class="npc-activity-menu npc-relationship-menu">
<div class="npc-interact-name">A private talk with <<= setup.npcDisplayName(_npc) >></div>
<div class="npc-activity-card"><<print setup.npcPartnerHomeMoment(_npc, "private_talk")>></div>
<div class="npc-return-link"><<link "Continue" "NPCInteract">><<set $activeNpcId = _npc.id>><<set $return = "NPCHome">><</link>></div>
</div>
<</if>><</nobr>><<nobr>><<set _npc = setup.getNpcById($activeHomeNpcId || $activeNpcId)>>
<<if !_npc or !setup.npcCanSleepAtHome(_npc)>>
The moment passes.
<div class="npc-return-link"><<link "Return" "NPCHome">><</link>></div>
<<else>>
<<set $activeHomeNpcId = _npc.id>><<set $activeNpcId = _npc.id>>
<div class="npc-activity-menu npc-relationship-menu">
<div class="npc-interact-name">Domestic intimacy with <<= setup.npcDisplayName(_npc) >></div>
<p>Here, behind their door, closeness does not need an excuse. You can keep it gentle or make your own desire clear and let them answer.</p>
<<if $npcHomeResult>><div class="npc-activity-card"><<print $npcHomeResult>></div><<set $npcHomeResult = "">><</if>>
<div class="npc-action-list">
<<link "Hold them close" "NPCHomeDomesticIntimacy">><<set $npcHomeResult = setup.npcPartnerHomeIntimacy(_npc, "hug")>><</link>>
<<link "Kiss them" "NPCHomeDomesticIntimacy">><<set $npcHomeResult = setup.npcPartnerHomeIntimacy(_npc, "kiss")>><</link>>
<<if _npc.gender is "female">>
<<if setup.npcHomeSexOfferVisible(_npc, "touching_female")>><<link "Touch each other">><<run setup.npcPrepareHomeSexOffer(_npc.id, "touching_female", "NPCHomeDomesticIntimacy")>><<goto "NPCSexOfferResponse">><</link>><</if>>
<<if setup.npcHomeSexOfferVisible(_npc, "oral_give_female")>><<link "Go down on her">><<run setup.npcPrepareHomeSexOffer(_npc.id, "oral_give_female", "NPCHomeDomesticIntimacy")>><<goto "NPCSexOfferResponse">><</link>><</if>>
<<if setup.npcHomeSexOfferVisible(_npc, "oral_receive_female")>><<link "Ask her for oral pleasure">><<run setup.npcPrepareHomeSexOffer(_npc.id, "oral_receive_female", "NPCHomeDomesticIntimacy")>><<goto "NPCSexOfferResponse">><</link>><</if>>
<<else>>
<<if setup.npcHomeSexOfferVisible(_npc, "handjob")>><<link "Give him a handjob">><<run setup.npcPrepareHomeSexOffer(_npc.id, "handjob", "NPCHomeDomesticIntimacy")>><<goto "NPCSexOfferResponse">><</link>><</if>>
<<if setup.npcHomeSexOfferVisible(_npc, "blowjob")>><<link "Give him a blowjob">><<run setup.npcPrepareHomeSexOffer(_npc.id, "blowjob", "NPCHomeDomesticIntimacy")>><<goto "NPCSexOfferResponse">><</link>><</if>>
<</if>>
</div>
<div class="npc-return-link"><<link "Back home" "NPCHome">><</link>></div>
</div>
<</if>><</nobr>><<nobr>><<run setup.ensurePlayerAppearance()>>
<<if !$wardrobeReturn>><<set $wardrobeReturn = $return || "Tavernroom">><</if>>
<<set _current = setup.playerCurrentOutfit()>>
<div class="wardrobe-panel">
<h2>Change outfit</h2>
<div class="wardrobe-current">Current outfit: <b><<= _current.label >></b></div>
<div class="wardrobe-grid">
<<for _outfit range setup.playerUnlockedOutfits()>>
<<capture _outfit>>
<div class="wardrobe-card <<if _outfit.id is $c.currentOutfit>>active<</if>>">
<div class="wardrobe-portrait"><img @src="_outfit.portrait" alt=""></div>
<div>
<div class="wardrobe-name"><<= _outfit.label >></div>
<div class="wardrobe-note"><<= _outfit.note >></div>
<div class="wardrobe-tags"><<= setup.playerOutfitBonusesText(_outfit) >> | <<= setup.playerOutfitTagsText(_outfit) >></div>
<<if _outfit.minCarnality>><div class="wardrobe-requirement"><<= setup.playerOutfitComfortText(_outfit) >></div><</if>>
<div class="wardrobe-actions">
<<if _outfit.id is $c.currentOutfit>><span class="player-choice-status">Wearing</span><<elseif !setup.playerOutfitCanWear(_outfit)>><span class="player-choice-status">Not comfortable wearing this yet</span><<else>><<link "Wear" "ChangeOutfit">><<if setup.playerSetOutfit(_outfit.id)>><<run setup.npcRefreshAllAttraction()>><</if>><</link>><</if>>
</div>
</div>
</div>
<</capture>>
<</for>>
</div>
<div class="npc-return-link"><<link "Return" $wardrobeReturn>><</link>></div>
</div><</nobr>><<nobr>><<run setup.ensurePlayerAppearance()>>
<div class="market-shop-panel">
<h2>Market Stalls</h2>
<<if !setup.marketIsOpen()>>
<p>The stalls are closed for now. Only empty tables and tied-down canvas remain around the square.</p>
<div class="npc-return-link"><<link "Return" "Ambercross Center">><</link>></div>
<<else>>
<<set _merchant = setup.marketClothMerchantNpc()>>
<div class="market-shop-dialogue">
<p><<print setup.npcEventMentionHtml(_merchant, "The cloth merchant")>> gives you a quick look over, then lifts a folded sleeve from a neat stack of linen.</p>
<<print setup.npcEventDialogueHtml(_merchant, "Nothing royal here, but clean cloth can change how folk look at you.", "The cloth merchant", "female")>>
</div>
<<if $marketMessage>><p><em><<= $marketMessage >></em></p><<set $marketMessage = "">><</if>>
<div>
<<for _item range setup.marketOutfitStock()>>
<<capture _item>>
<div class="market-shop-row">
<div>
<div class="market-shop-name"><<= _item.label >></div>
<div class="wardrobe-note"><<= setup.playerOutfitBonusesText(_item) >> | <<= setup.playerOutfitTagsText(_item) >></div>
<<if _item.minCarnality>><div class="wardrobe-requirement"><<= setup.playerOutfitComfortText(_item) >></div><</if>>
</div>
<div class="market-shop-cost"><<= _item.cost >> gold</div>
<div class="cheat-actions"><<link "Preview" "MarketOutfitPreview">><<set $marketPreviewOutfit = _item.id>><</link>><<if setup.playerHasOutfit(_item.id)>><span class="market-shop-owned">Owned</span><<else>><<link "Buy" "Ambercross Market">><<set _result = setup.playerBuyMarketOutfit(_item.id)>><<set $marketMessage = _result.text>><</link>><</if>></div>
</div>
<</capture>>
<</for>>
</div>
<div class="npc-return-link"><<link "Return" "Ambercross Center">><</link>></div>
<</if>>
</div><</nobr>><<nobr>><<run setup.ensurePlayerAppearance()>>
<<set _outfit = setup.playerOutfitById($marketPreviewOutfit)>>
<<set _stock = setup.marketOutfitForSale(_outfit.id)>>
<div class="market-shop-panel">
<h2><<= _outfit.label >></h2>
<div class="market-preview-card">
<div class="market-preview-portrait"><img @src="_outfit.portrait" alt=""></div>
<div>
<p><<= _outfit.note >></p>
<p><b>Cost:</b> <<= _stock ? _stock.cost : 0 >> gold<br>
<b>Bonus:</b> <<= setup.playerOutfitBonusesText(_outfit) >><br>
<b>Style:</b> <<= setup.playerOutfitTagsText(_outfit) >></p>
<<if _outfit.minCarnality>><p class="wardrobe-requirement"><<= setup.playerOutfitComfortText(_outfit) >></p><</if>>
<div class="npc-action-list">
<<if setup.playerHasOutfit(_outfit.id)>><span class="player-choice-status">Owned</span><<else>><<link "Buy" "Ambercross Market">><<set _result = setup.playerBuyMarketOutfit(_outfit.id)>><<set $marketMessage = _result.text>><</link>><</if>>
<<link "Back" "Ambercross Market">><</link>>
</div>
</div>
</div>
</div><</nobr>><<nobr>><<if !$wardrobeReturn>><<set $wardrobeReturn = $return || "Tavernroom">><</if>>
<<set _washText = setup.playerWashUp()>>
<div class="npc-response-panel">
<p><<= _washText >></p>
<div class="npc-return-link"><<link "Return" $wardrobeReturn>><</link>></div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<div class="npc-interact-name">A calf in the ditch</div>
<p>The work is barely underway when a shout cuts across the yard. One of the smaller calves has slipped through a weak fence and gone down hard in the muddy ditch beyond the vegetable rows.</p>
<p>For a moment everyone talks at once. The farmer points, jaw tight. <span class="dialogue-line dialogue-male">"Do not just stand there. Get a rope under her before she breaks a leg."</span></p>
<p>You go in knee-deep, mud sucking at your boots while the frightened calf kicks and bawls. It is ugly, awkward work. You keep your voice low, hold the rope steady, and pull only when she stops fighting you. By the time she scrambles free, your arms shake from the strain and half the yard is watching.</p>
<p>The farmer says nothing at first. Then he gives one grudging nod. <span class="dialogue-line dialogue-male">"Good. You kept your head."</span></p>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<div class="npc-interact-name">A harder look</div>
<p>The afternoon turns sharp and bright. You finish one task, then another, sweat drying salt-stiff at your collar while the farmhands trade glances to see if you will complain.</p>
<p>You do not. You take the next tool before anyone can ask twice.</p>
<p>Near the barn door, the farmer watches you with his thumbs hooked in his belt. <span class="dialogue-line dialogue-male">"You are not fast yet,"</span> he says. <span class="dialogue-line dialogue-male">"But you listen, and you finish. That matters more than swagger."</span></p>
<p>The praise is rough, but it lands warm. The next chore feels a little less like begging for a place and a little more like earning one.</p>
</div><</nobr>><<goto "Ambercross Farmer's house">><<goto "Ambercross Farmer's house">><<nobr>><<set _farmWork = setup.farmWorkStart($farmWorkSelectedTier, $farmWorkSelectedAssignment)>>
<<if !_farmWork.success>><div class="npc-activity-panel farm-work-event-panel"><p><<= _farmWork.text >></p>[[Return to the farm|Ambercross Farmer's house]]</div>
<<elseif _farmWork.choicePending>><<include _farmWork.passage>>
<<else>><<include _farmWork.passage>><<print setup.farmWorkRewardHtml(_farmWork)>><div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div>
<</if>><</nobr>><<nobr>><<set _npc = setup.farmWorkEventNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>A gate gives way just as the goats are driven from the lower pen. One animal pushes through the gap and stops at the herb beds, ears forward, deciding whether the leaves are worth the shouting behind her. The loose post rocks every time the others press against it.</p>
<<if _npc>><p><<print setup.npcEventMentionHtml(_npc, "a farm worker")>> catches the rail before it falls entirely.</p><<print setup.npcEventDialogueHtml(_npc, "Keep that one from the herbs. I can hold the rest, but this post will not last if they all lean on it together.")>><<else>><p>A worker catches the rail and calls for you to stop the escaped goat before the rest follow.</p><</if>>
<p>You have moments to choose between holding the gate, drawing the goat back, or bringing someone else in before the pen empties.</p>
<div class="npc-activity-choice-list">
<<if setup.farmWorkDecisionAvailable("goat_brace")>><div><<set _label = setup.playerAttributeChoiceLabel("strength", "Brace the post and turn the herd")>><<link _label "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("goat_brace")>><</link>></div><</if>>
<<if setup.farmWorkDecisionAvailable("goat_apple")>><div><<link "Use an apple to lure her back" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("goat_apple")>><</link>></div><</if>>
<<if setup.farmWorkDecisionAvailable("goat_calm")>><div><<link "[Protective] Calm the frightened herd" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("goat_calm")>><</link>></div><</if>>
<<if setup.farmWorkDecisionAvailable("goat_organize")>><div><<link "[Farmwork] Split the crew between the gate and the goat" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("goat_organize")>><</link>></div><</if>>
<div><<link "Call for help and guard the herb beds" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("goat_call")>><</link>></div>
</div></div><</nobr>><<nobr>><<set _npc = setup.farmWorkEventNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>The upper rows are drying while the lower furrows turn to mud. You follow the water back to a clay collar that has cracked around the channel. The flow is escaping sideways, and the newest seedlings will wilt before evening if it stays that way.</p>
<<if _npc>><<print setup.npcEventDialogueHtml(_npc, "The channel needs a proper repair, not a boot pressed into the mud. If you cannot turn the water, tell me now so we can carry it before those rows are lost.")>><<else>><p>A worker asks you to stop the leak or carry water to the upper rows while someone fetches a new collar.</p><</if>>
<p>The broken clay is still warm from the sun. You can try a precise fix, make up the difference with buckets, or call the farmer before more time is wasted.</p>
<div class="npc-activity-choice-list">
<<if setup.farmWorkDecisionAvailable("rows_repair")>><div><<set _label = setup.playerAttributeChoiceLabel("intelligence", "Reset the collar and redirect the flow")>><<link _label "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("rows_repair")>><</link>></div><</if>>
<<if setup.farmWorkDecisionAvailable("rows_carry")>><div><<set _label = setup.playerAttributeChoiceLabel("fitness", "Carry water to the upper rows")>><<link _label "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("rows_carry")>><</link>></div><</if>>
<<if setup.farmWorkDecisionAvailable("rows_divert")>><div><<link "[Farmwork] Cut a temporary channel upstream" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("rows_divert")>><</link>></div><</if>>
<div><<link "Show the farmer the break and organize help" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("rows_report")>><</link>></div>
</div></div><</nobr>><<nobr>><<set _npc = setup.farmWorkEventNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>A buyer has sent word that the harvest wagon must leave before the road grows crowded. The baskets are ready, but someone has stacked the soft fruit beneath sacks of roots. If the load goes as it is, the fruit will arrive bruised and the farmer will hear about it before you do.</p>
<<if _npc>><<print setup.npcEventDialogueHtml(_npc, "I can drive, but you decide how we load it. We might earn a little more for meeting his hour. We will earn nothing extra if he opens a crate of crushed apples.")>><<else>><p>The driver asks whether to rebuild the load quickly or take the safer pace and miss the bonus.</p><</if>>
<p>The team is already harnessed. There is time for one decisive approach before the road takes the choice away.</p>
<div class="npc-activity-choice-list">
<<if setup.farmWorkDecisionAvailable("wagon_lift")>><div><<set _label = setup.playerAttributeChoiceLabel("strength", "Rebuild the load at speed")>><<link _label "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("wagon_lift")>><</link>></div><</if>>
<<if setup.farmWorkDecisionAvailable("wagon_count")>><div><<set _label = setup.playerAttributeChoiceLabel("intelligence", "Recount and balance the baskets")>><<link _label "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("wagon_count")>><</link>></div><</if>>
<<if setup.farmWorkDecisionAvailable("wagon_sort")>><div><<link "[Farmwork] Re-stack by the weight of each basket" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("wagon_sort")>><</link>></div><</if>>
<div><<link "Take the slower road with a safe load" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("wagon_safe")>><</link>></div>
<div><<link "Send the wagon as it is to meet the deadline" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("wagon_rush")>><</link>></div>
</div></div><</nobr>><<nobr>><<set _npc = setup.farmWorkEventNpc()>><<set _status = _npc ? setup.npcRelationshipStatus(_npc) : "stranger">>
<div class="npc-activity-panel farm-work-event-panel">
<p>The hay has to be carried into the loft before damp reaches the bales. The ladder is narrow enough that you and the worker above keep meeting at the same rung. Each time you pass, there is a moment when the work is very close and the rest of the farm is below you.</p>
<<if _npc>><<if _status is "partner" or _status is "spouse" or _status is "lover">><<print setup.npcEventDialogueHtml(_npc, "I like working beside you. I like it even more when you forget everyone can hear us from the yard. We can finish these bales first, then find a moment that belongs to us.")>>
<<elseif _status is "friend" or _status is "close_friend">><<print setup.npcEventDialogueHtml(_npc, "You always make a long chore pass faster. Stay a little after we stack the last bale, will you? I would rather talk to you than the rest of that crew.")>>
<<else>><<print setup.npcEventDialogueHtml(_npc, "Careful on the ladder. I would catch you, but then we would both have to explain why the hay is still down there. Unless you mean to give me a better excuse.")>><</if>>
<<else>><p>A worker passes the next bale down with a lingering look, then returns to the stack.</p><</if>>
<p>The work has not stopped, but you can decide whether the closeness becomes anything beyond a passing interruption.</p>
<div class="npc-activity-choice-list">
<div><<link "Keep your attention on the hay" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("hay_focus")>><</link>></div>
<<if _npc>><div><<link "Help them finish and stay to talk" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("hay_help")>><</link>></div>
<div><<link "Answer with a suggestive promise" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("hay_tease")>><</link>></div>
<<if setup.farmWorkDecisionAvailable("hay_kiss")>><div><<link "Kiss them behind the haystack" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("hay_kiss")>><</link>></div><</if>><</if>>
</div></div><</nobr>><<nobr>><<set _result = $farmWorkDecisionResult>><<set _npc = setup.farmWorkEventNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The work has already moved on.</p>
<<elseif _result.failed>>
<<if _result.choiceId is "goat_brace">><p>You shoulder the post and feel the whole pen press back. The rotten base gives way beneath your boots. The gate stays up long enough for the herd to pass, but the loose goat bolts across the lane before anyone can reach her.</p><p>The worker marks where she vanished. The fence can be fixed today; finding the animal will wait until someone has a clear stretch of daylight.</p>
<<elseif _result.choiceId is "rows_repair" or _result.choiceId is "rows_carry">><p>The water refuses to go where you need it. Your repair leaks again, or the upper rows drink the buckets faster than you can fill them. By evening the seedlings are alive but unevenly watered.</p><p>The farmer sets a new collar aside and asks you to return when the channel can be shut off properly. The problem has not gone away with the shift.</p>
<<elseif _result.choiceId is "wagon_lift" or _result.choiceId is "wagon_count">><p>The wagon leaves on time, but the load shifts at the first hard bend. At the market the buyer opens a basket of crushed fruit and sends word back with the driver. The extra payment is gone.</p><p>Someone will have to sort the salvageable harvest before it spoils. The farmer leaves the damaged baskets for another shift instead of pretending they can be sold as they are.</p>
<<else>><p>You try to settle the remaining problem quickly, but the day refuses to reward haste. The farmer takes over before the loss grows worse. Your ordinary wage stands, though there is no extra coin for this attempt.</p><</if>>
<<if _result.choiceId is "goat_brace" or _result.choiceId is "rows_repair" or _result.choiceId is "rows_carry" or _result.choiceId is "wagon_lift" or _result.choiceId is "wagon_count">><p>The farmer withholds <<if _result.choiceId is "wagon_lift" or _result.choiceId is "wagon_count">>two coins<<else>>one coin<</if>> from this shift to cover part of the loss.</p>
<<if _npc>><<print setup.npcEventDialogueHtml(_npc, "We will put the rest right tomorrow. Do not leave me to explain it alone when the farmer asks.")>><</if>>
<</if>>
<<elseif _result.choiceId is "goat_brace">><p>You drive your shoulder against the post, wedge your boot into the packed earth, and turn the goats back with the rail still in your hands. The escaped one hesitates at the herb beds long enough for another worker to lead her home.</p><<if _npc>><<print setup.npcEventDialogueHtml(_npc, "That was nearly tomorrow's work as well as today's. Hold the post while I set a fresh wedge; then take the extra coin before the farmer thinks I did it alone.")>><</if>>
<<elseif _result.choiceId is "goat_apple">><p>You hold out your own apple and let the goat choose the path back. She takes one cautious bite, then follows you through the gate as though the whole escape had been planned around her appetite.</p><p>The farmer notices the missing fruit in your hand and presses an egg from the morning gathering into it. It is not a wage, just an unasked-for trade.</p>
<<elseif _result.choiceId is "goat_calm">><p>You lower your voice and keep the herd from crowding the broken rail. The goat at the herbs looks up when you call, hears the others settle, and returns without a chase.</p><p>The worker beside you replaces the post while you hold the animals steady. Nothing dramatic happens after that, which is exactly why the herbs survive.</p>
<<elseif _result.choiceId is "goat_call">><p>You stand between the loose goat and the herbs and call for another pair of hands. By the time the farmer brings a rope, the animal has eaten through the tender edge of the bed. You get her back without losing the herd, but he takes a coin from the shift wage for the ruined plants.</p><<if _npc>><<print setup.npcEventDialogueHtml(_npc, "You were right to call. Next time, get someone on that gap before she reaches the herbs.")>><</if>>
<<elseif _result.choiceId is "goat_organize">><p>You send one worker to secure the gate while you and another circle wide of the herb beds. The goat turns toward the open pen instead of the shouting, and you close the post behind her. The farmer arrives to find the crop untouched and the crew already repairing the latch.</p>
<<elseif _result.choiceId is "rows_repair">><p>You dig out the cracked collar, clear the grit beneath it, and turn the channel a handspan upstream. The water finds the upper rows again without flooding the lower ones.</p><<if _npc>><<print setup.npcEventDialogueHtml(_npc, "You found the real break. I would have packed more clay over it and been back here tomorrow. The farmer owes you for saving the young plants.")>><</if>>
<<elseif _result.choiceId is "rows_carry">><p>You leave the broken collar for proper repair and carry water to the upper rows yourself. The buckets drag at your hands, but you keep an even pace until the seedlings have enough to survive the afternoon.</p><p>When the farmer arrives with a new fitting, he finds the plants still standing. The hard part of the rescue was already done before he came.</p>
<<elseif _result.choiceId is "rows_report">><p>You show the farmer the split instead of hiding the lost time. He sends one worker for fresh clay and another to carry water, but the upper seedlings have already begun to wilt by the time help reaches them. The damage is limited, not erased; he withholds a coin from the shift wage for what must be replanted.</p><<if _npc>><<print setup.npcEventDialogueHtml(_npc, "Thank you for telling us. We should have been here sooner, and tomorrow we will be.")>><</if>>
<<elseif _result.choiceId is "rows_divert">><p>You remember the shallow relief channel used after the last hard rain. A few cuts with the spade send enough water around the cracked collar to reach the upper rows. It is not a permanent repair, but the seedlings can wait for one now.</p>
<<elseif _result.choiceId is "wagon_lift">><p>You strip the roots from the bottom of the load and raise each heavy sack to the front of the wagon. Your arms shake by the last one. The fruit rides above the weight, and the team leaves while there is still room on the road.</p><p>The buyer opens a sound basket at the market and pays the promised extra coin. The driver hands you your share without pretending the hurried rebuilding was easy.</p>
<<elseif _result.choiceId is "wagon_count">><p>You match each basket to the tally, move the delicate fruit to the top, and tighten the ropes where the weight will shift on the bend. The driver can see the balance as soon as the wagon starts to roll.</p><p>At the market the buyer finds the right count and unbruised apples. The bonus is smaller than a reckless rush might have earned, but it is real coin in your hand.</p>
<<elseif _result.choiceId is "wagon_sort">><p>You have loaded enough wagons to see the problem before the driver finishes harnessing the team. You stack the roots low, spread the weight over the axle, and give the fruit room above it. The wagon leaves without a last-minute scramble, and the buyer accepts the load intact.</p>
<<elseif _result.choiceId is "wagon_safe">><p>You refuse to stack soft fruit beneath the sacks just to chase the buyer's deadline. The driver grumbles at the slower start, then takes the rutted road without having to stop and save a sliding load.</p><p>The buyer pays the ordinary price. Back at the farm, the driver admits that keeping the harvest whole mattered more than making him look fast.</p>
<<elseif _result.choiceId is "wagon_rush">><p>You leave the fruit beneath the roots and wave the driver on to meet the buyer's hour. At the first bend the sacks settle hard. The buyer opens two crushed baskets, refuses the promised premium, and sends the damaged fruit back. The farmer takes two coins from your wage and leaves the salvage for a later shift.</p>
<<elseif _result.choiceId is "hay_focus">><p>You take the next bale before the invitation can settle between you. The loft fills, the ladder empties, and the ordinary noise of the yard returns.</p><p>Whatever the worker hoped to start, you leave it there without turning the rest of the shift into a negotiation.</p>
<<elseif _result.choiceId is "hay_help">><p>You stay until the last bale is stacked and sit beside the worker for a moment in the loft's thin shade. The talk begins with chores, then drifts to things neither of you would have said within hearing of the yard.</p><p>When someone calls from below, you part without a promise. The worker asks whether you might make time after another shift.</p>
<<elseif _result.choiceId is "hay_tease">><p>You pass the next bale close enough that your words reach only the worker above. <span class="dialogue-line dialogue-player">"Finish the stack first. Then ask me when we have a door between us and the yard."</span></p><p>The answer makes the rest of the loading feel longer for both of you. They work quickly, but keep looking back each time you leave the ladder.</p>
<<elseif _result.choiceId is "hay_kiss">><p>You wait until the last bale blocks the view from below, then draw the worker into a kiss. It is brief enough that a call from the yard can break it, and warm enough to leave the next meeting unsettled.</p><p>They touch your wrist as you part. <span class="dialogue-line dialogue-npc">"Another day, when we are not stealing seconds between bales."</span></p>
<<elseif _result.choiceId is "follow_goat_search">><p>You follow small hoof marks beyond the far hedge and find the goat tangled in a patch of brambles. You free her carefully, walk her back by the rope, and bring both animal and news home before the farmer can gather a search party.</p><p>He pays a little extra for the trouble and adds a handful of carrots from the harvest pile.</p>
<<elseif _result.choiceId is "follow_goat_lure">><p>You return to the hedge with another apple. The goat recognizes the bargain before you have to call twice and follows you through the gap she found yesterday.</p><p>The worker fixes the gate while you keep her occupied. The farmer swaps an egg for the fruit you spent bringing her back.</p>
<<elseif _result.choiceId is "follow_goat_help">><p>You find the farmer, point out the tracks, and search the hedge together. It takes longer than either of you wanted, but the goat comes back unharmed and the new post is set before dusk.</p>
<<elseif _result.choiceId is "follow_water_fix">><p>With the flow shut off, you fit the new collar into clean clay and test each channel before opening the water fully. This time the upper rows drink and the lower rows stay firm beneath your boots.</p><p>The farmer gives you a little extra coin for finishing the repair and lets you take cooking herbs from the saved beds.</p>
<<elseif _result.choiceId is "follow_water_carry">><p>You keep the young plants alive with water carried from the well while someone else repairs the collar. The work is monotonous and heavy, but by afternoon both halves of the field are green again.</p>
<<elseif _result.choiceId is "follow_crop_sort">><p>You open every damaged basket and separate fruit that can still travel from fruit that must be used today. The count is smaller, but honest; the buyer accepts it and pays for what remains.</p><p>The farmer shares the recovered coin and lets you keep a sound apple.</p>
<<elseif _result.choiceId is "follow_crop_repack">><p>You repack the sound fruit and carry the bruised pieces to the kitchen before they spoil. Nothing is hidden beneath better produce this time. The market order loses its bonus, but not the whole harvest.</p>
<<elseif _result.choiceId is "follow_private_work">><<if _npc>><p>You take the worker's offer of help without agreeing to anything more. Together you finish the hay before the loft grows dim, then return to the yard by the same ladder everyone else uses.</p><p>They accept the boundary and thank you for staying to work beside them.</p><<else>><p>With the worker away, you finish the last of the hay alone. The invitation can wait; the bales cannot.</p><</if>>
<<else>><p>You leave the remaining matter to the farmer and return to your own work. No further bargain is made.</p><</if>>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print _result.bonusHtml>><<print _result.itemHtml>><<print _result.relationshipHtml>><<print _result.personalityHtml>><<print _result.arousalHtml>><<print _result.intimateHtml>>
<<if _result.choiceId is "follow_private_work" and _npc>><p>You meant the boundary, though the invitation lingers as you finish the hay.</p><<print setup.jobRefusedIntimacyHtml(_result, "private_invite")>><</if>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>><<nobr>><<set _key = $farmWorkActiveLead>><<set _lead = $farmWorkLeads && $farmWorkLeads[_key]>><<set _npc = setup.farmWorkEventNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !_lead>><p>The matter you came to settle has already been taken care of. The farmer finds you other work until the shift ends.</p><<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div>
<<elseif _lead.kind is "escaped_goat">>
<p>The gate has a new post, but the goat that escaped yesterday is still beyond the hedge. Her tracks cross a wet strip of earth and disappear into the brambles. The farmer has kept a rope by the fence and left the rest of the herd shut in.</p>
<<if _npc>><<print setup.npcEventDialogueHtml(_npc, "She will not come back for shouting. Take the hedge slowly. If you find her caught, hold her still and call me before you pull her free.")>><<else>><p>A worker hands you a rope and points to the last tracks in the mud.</p><</if>>
<p>You can search the hedge, spend some food to tempt her home, or bring the farmer with you.</p>
<div class="npc-activity-choice-list">
<<if setup.farmWorkDecisionAvailable("follow_goat_search")>><div><<set _label = setup.playerAttributeChoiceLabel("fitness", "Follow the tracks through the hedge")>><<link _label "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("follow_goat_search")>><</link>></div><</if>>
<<if setup.farmWorkDecisionAvailable("follow_goat_lure")>><div><<link "Offer one of your apples" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("follow_goat_lure")>><</link>></div><</if>>
<div><<link "Ask the farmer to search with you" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("follow_goat_help")>><</link>></div>
</div>
<<elseif _lead.kind is "water_damage">>
<p>A new clay collar waits beside the channel. The seedlings survived the night, though their upper leaves have begun to curl. The farmer has closed the water upstream so the fitting can be seated without fighting the current.</p>
<<if _npc>><<print setup.npcEventDialogueHtml(_npc, "We saved enough yesterday to make today matter. Fit it carefully, or keep the plants watered while I do. I do not want another quick repair that breaks after we leave.")>><<else>><p>The farmer asks you to repair the fitting or keep the young plants watered while someone else does it.</p><</if>>
<div class="npc-activity-choice-list">
<<if setup.farmWorkDecisionAvailable("follow_water_fix")>><div><<set _label = setup.playerAttributeChoiceLabel("intelligence", "Fit the new collar and test the channels")>><<link _label "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("follow_water_fix")>><</link>></div><</if>>
<div><<link "Carry water while the fitting is repaired" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("follow_water_carry")>><</link>></div>
</div>
<<elseif _lead.kind is "bruised_crop">>
<p>The damaged baskets have come back from the buyer. Sweet fruit is beginning to spoil at the bottom, but the top pieces are still sound. If the order is left untouched, none of it will be worth hauling tomorrow.</p>
<<if _npc>><<print setup.npcEventDialogueHtml(_npc, "Open every basket. We sell only what is sound, and we use the rest here before it rots. The buyer may pay less, but at least he will know the count is honest.")>><<else>><p>The farmer leaves you with the returned baskets and asks you to sort the fruit.</p><</if>>
<div class="npc-activity-choice-list">
<<if setup.farmWorkDecisionAvailable("follow_crop_sort")>><div><<set _label = setup.playerAttributeChoiceLabel("intelligence", "Recount the sound fruit for a smaller order")>><<link _label "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("follow_crop_sort")>><</link>></div><</if>>
<div><<link "Repack the sound fruit and carry the rest to the kitchen" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("follow_crop_repack")>><</link>></div>
</div>
<<elseif _lead.kind is "private_invite">>
<p>The last load of hay is waiting where you left it. The worker from yesterday has kept a place beside the ladder, though the yard is busy enough that nobody else is watching your reunion. You can finish the task together and leave it there, or take up the invitation once the bales are stacked.</p>
<<if _npc>><<print setup.npcEventDialogueHtml(_npc, "I meant what I said yesterday. We can simply work, or we can find a little privacy when the loft is clear. Tell me which you want before I start making promises for both of us.")>><<else>><p>The worker has gone home early. You can still finish the hay or leave it to the next shift.</p><</if>>
<div class="npc-activity-choice-list">
<div><<link "Finish the hay together, without another offer" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("follow_private_work")>><</link>></div>
<<if _npc and _npc.gender is "male" and setup.farmWorkFollowupFavorAvailable("handjob")>><div><<link "Stay with him in private (handjob)">><<set _started = setup.farmWorkStartFollowupFavor("handjob")>><<if _started.success>><<goto "NPCEncounter">><<else>><<goto "FarmWorkFollowup">><</if>><</link>></div><</if>>
<<if _npc and _npc.gender is "female" and setup.farmWorkFollowupFavorAvailable("female_touch")>><div><<link "Stay with her in private (intimate touch)">><<set _started = setup.farmWorkStartFollowupFavor("female_touch")>><<if _started.success>><<goto "NPCEncounter">><<else>><<goto "FarmWorkFollowup">><</if>><</link>></div><</if>>
</div>
<<else>><p>The farm has changed its plans since yesterday. You finish the ordinary work and let the matter pass.</p><<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div>
<</if>>
<<if _lead and (_lead.kind is "escaped_goat" or _lead.kind is "water_damage" or _lead.kind is "bruised_crop" or _lead.kind is "private_invite")>><div class="farm-trial-result-link"><<link "Leave the matter to the others" "FarmWorkDecisionResult">><<run setup.farmWorkResolveDecision("follow_leave")>><</link>></div><</if>>
</div><</nobr>><<nobr>><<set _favor = $pendingFarmWorkFavor>><<set _npc = _favor ? setup.getNpcById(_favor.npcId) : null>>
<div class="npc-activity-panel farm-work-event-panel">
<div class="npc-interact-name">An intimate interruption</div>
<<if !_favor or !_npc>>
<p>The interruption passes before it can become anything.</p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div>
<<else>>
<<print setup.farmWorkFavorRequestHtml(_npc, setup.farmWorkFavorOption(_favor.optionId))>>
<<set _willing = setup.farmWorkFavorWillingness(_favor)>>
<div class="npc-activity-choice-list">
<<if _willing.ok>><div><<link "Accept">><<set $lastFarmWorkFavorResult = null>><<set _accepted = setup.farmWorkAcceptFavor()>><<if $lastFarmWorkFavorResult and $lastFarmWorkFavorResult.success>><<goto "FarmWorkTameFavorResult">><<else>><<goto "NPCEncounter">><</if>><</link>></div><<else>><div class="player-choice-status"><<= _willing.text >></div><</if>>
<div><<link "Tease them and keep working" "FarmWorkNpcFavorTease">><</link>></div>
<div><<link "Refuse plainly" "FarmWorkNpcFavorRefuse">><</link>></div>
</div>
<</if>>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<<if !$lastFarmWorkFavorResult>>
<p>The moment passes.</p>
<<else>>
<div><<= $lastFarmWorkFavorResult.text >></div>
<</if>>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div>
</div><</nobr>><<nobr>><<set _favor = $pendingFarmWorkFavor>><<set _npc = _favor ? setup.getNpcById(_favor.npcId) : null>>
<div class="npc-activity-panel farm-work-event-panel">
<p><<if _npc>>You let <<= setup.npcDisplayName(_npc) >> wait on your answer while you bend back to the work. <span class="dialogue-line dialogue-player">"Maybe if you ask sweeter another day,"</span> you say, smiling just enough to make it worse.<<else>>You let the offer hang unanswered and return to work.<</if>></p>
<p>The refusal is not cold enough to kill the heat, only sharp enough to make them remember it.</p>
<<if _npc>><<run setup.npcArousalChange(_npc, 4, "farm_favor_tease", { source: "farmwork", location: "Ambercross Farmer's house" })>><<run setup.npcApplyDailyRelationshipGain(_npc, "affection", 0.25)>><</if>><<set $pendingFarmWorkFavor = null>>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>>
<<print setup.farmWorkBonusHtml({ charisma: 0.06 }, "Reaction bonus")>>
<<if _favor>><<print setup.jobRefusedIntimacyHtml($lastFarmWorkResult, "favor_tease")>><</if>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div>
</div><</nobr>><<nobr>><<set _favor = $pendingFarmWorkFavor>><<set _npc = _favor ? setup.getNpcById(_favor.npcId) : null>>
<div class="npc-activity-panel farm-work-event-panel">
<p>You meet the offer directly and shake your head. <span class="dialogue-line dialogue-player">"No. I am here to work."</span></p>
<p><<if _npc>><<= setup.npcDisplayName(_npc) >> takes the answer with a tight breath and a look that lingers too long before stepping away.<<else>>The farm settles back around you, rough and ordinary again.<</if>></p>
<<set _refusalHtml = setup.farmWorkDeclineFavor()>>
<p>You return to the task, but the offer is harder to forget than you expected. Saying no settled the question with them; it has not settled every thought it stirred in you.</p>
<<print _refusalHtml>>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>The farmer sends you along the west fence with a bundle of twine and a warning that the goats keep finding new places to escape. The rails look fine at first glance, but the knots tell another story.</p>
<p>You move post by post, testing each tie, counting missing stakes, and marking the weak spots with bits of straw. By the end, you have found three gaps nobody noticed from the yard.</p>
<p>A farmhand comes to check your work and scratches the back of his neck. <span class="dialogue-line dialogue-male">"Would have chased goats half the afternoon if you missed those."</span></p>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>A skittish goat gets loose near the drying racks, hopping between baskets like the whole farm exists to amuse her. The farmer points after it. <span class="dialogue-line dialogue-male">"Catch her before she ruins the herbs."</span></p>
<p>You slow your steps, soften your voice, and ease closer with a handful of oats. The goat watches you suspiciously, then noses your palm and lets you loop the rope around her neck.</p>
<p>The farmhands expected shouting and chasing. Instead, you lead her back calm as you please, earning a few surprised looks and one grudging smile.</p>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>The herb racks need turning before the afternoon heat spoils the leaves. It sounds easy until you are carrying trays back and forth between shade and sun, careful not to crush anything under your fingers.</p>
<p>The scent clings to you: mint, bitter green stems, and the sharp sweetness of drying flowers. You work steadily, learning which leaves need air and which need shelter.</p>
<p>By the time the racks are set right, your hands smell like the field and your legs have earned the short walk back to the yard.</p>
</div><</nobr>><<nobr>><<run setup.ensureTavernWorkSystem()>><<run setup.ensureCookingSystem()>>
<div class="npc-activity-panel">
<div class="npc-interact-name">Tavern work</div>
<<set _worker = setup.tavernCounterNpc()>>
<div class="farm-work-actions">
<<if !_worker>>
<p>No one is free to put you on shift right now.</p>
<<elseif $TavernServingAccept !== 1 and $TavernCookingAccept !== 1>>
<p>You have not earned a regular place in either half of the tavern yet. New applicants need to speak with whoever is working the counter.</p>
<<else>>
<p><<npcMention _worker "The innkeeper">> looks you over, weighing the hour against the room behind you.</p>
<<npcSay _worker "If you want coin, I can use quick feet out front or steady hands in the kitchen. Do the work clean, and I will keep calling on you." "The innkeeper">>
<p>Serving: <b><<= setup.tavernWorkSkill() >></b> | Cooking: <b><<= setup.cookingSkill() >></b></p>
<<print setup.playerWorkNeedWarningHtml(120)>>
<div class="npc-activity-section-title">Serving work</div>
<<if $TavernServingAccept === 1>>
<div>[[Light serving shift|Tavern serve light work]] <span class="farm-work-meta"><<= setup.tavernWorkTierInfo("serve_light") >></span></div>
<div>[[Busy evening serving shift|Tavern serve evening work]] <span class="farm-work-meta"><<= setup.tavernWorkTierInfo("serve_evening") >></span></div>
<<else>><div>[[Apply to serve tables|TavernServingIntro]]</div><</if>>
<div class="npc-activity-section-title">Kitchen work</div>
<<if $TavernCookingAccept === 1>>
<div>[[Kitchen prep|Tavern kitchen prep work]] <span class="farm-work-meta"><<= setup.tavernWorkTierInfo("kitchen_prep") >></span></div>
<div>[[Cook shift|Tavern cook shift work]] <span class="farm-work-meta"><<= setup.tavernWorkTierInfo("cook_shift") >></span></div>
<<else>><div>[[Apply for kitchen work|TavernCookingIntro]]</div><</if>>
<</if>>
<div class="npc-home-section-gap"><<if $tavernWorkReturn is "Tavern innkeeper">>[[Return|Tavern innkeeper]]<<else>>[[Return|Ambercross Tavern]]<</if>></div>
</div>
</div><</nobr>><<nobr>><<run setup.ensureTavernWorkSystem()>>
<<set _worker = setup.tavernCounterNpc()>>
<div class="npc-activity-panel">
<h2>Tavern work</h2>
<<if !_worker>>
<p>The counter is unattended right now. There is no one here with time to talk about work.</p>
<div><<if $tavernWorkReturn is "Tavern innkeeper">>[[Return|Tavern innkeeper]]<<else>>[[Return|Ambercross Tavern]]<</if>></div>
<<elseif $TavernServingAccept === 1 and $TavernCookingAccept === 1>>
<p><<print setup.npcEventMentionHtml(_worker, "The innkeeper")>> nods toward the common room and kitchen.</p><<print setup.npcEventDialogueHtml(_worker, "You have proved yourself on both sides of that door. Pick the work you can handle.", "The innkeeper")>>
<div><<link "Choose a shift" "TavernWorkMenu">><</link>></div>
<<else>>
<p><<npcMention _worker "The innkeeper">> rests both palms on the counter.</p><<npcSay _worker "Serving tables and cooking meals are different work. Out there, you need memory, speed, and enough nerve to manage drunken mouths. In the kitchen, you need clean hands, judgment, and respect for every scrap I paid for. Choose what you mean to prove." "The innkeeper">>
<div class="npc-activity-section-title">Serving</div>
<<if $TavernServingAccept === 1>><div class="farm-work-meta">You are already employed as a server.</div><<else>><div>[[Apply to serve tables|TavernServingIntro]]</div><</if>>
<div class="npc-activity-section-title">Cooking</div>
<<if $TavernCookingAccept === 1>><div class="farm-work-meta">You are already employed in the kitchen.</div><<else>><div>[[Apply for kitchen work|TavernCookingIntro]]</div><</if>>
<div><<if $tavernWorkReturn is "Tavern innkeeper">>[[Return|Tavern innkeeper]]<<else>>[[Return|Ambercross Tavern]]<</if>></div>
<</if>>
</div><</nobr>><<nobr>><<run setup.ensureTavernWorkSystem()>>
<div class="npc-activity-panel">
<p>The innkeeper puts you where the tables are narrowest and the orders overlap. Mugs, dirty boards, and a full tray must all be dealt with before the final rush reaches your part of the room.</p>
<<set _worker = setup.tavernCounterNpc()>><<if _worker>><<npcSay _worker "Do the ordinary work first. Then I will see how you handle the part nobody can rehearse." "The innkeeper">><</if>>
<div class="farm-trial-actions">
<div><<if $TavernTrialMugs>>Carry clean mugs <span class="farm-work-meta">Done</span><<elseif $c.energy gte 2>>[[Carry clean mugs|TavernTrialMugs]] <b id="Energy">(-2 Energy)</b><<else>>Too tired to carry mugs safely.<</if>></div>
<div><<if $TavernTrialTables>>Wipe the common tables <span class="farm-work-meta">Done</span><<elseif $c.energy gte 2>>[[Wipe the common tables|TavernTrialTables]] <b id="Energy">(-2 Energy)</b><<else>>Too tired to clear the tables.<</if>></div>
<div><<if $TavernTrialWater>>Carry the full tray <span class="farm-work-meta">Done</span><<elseif $c.energy gte 2>>[[Carry a full tray|TavernTrialWater]] <b id="Energy">(-2 Energy)</b><<else>>Too tired to carry the tray.<</if>></div>
<<if $TavernTrialMugs and $TavernTrialTables and $TavernTrialWater>><div>[[Face the last rush|TavernServingFinalTest]]</div><</if>>
<div class="npc-home-section-gap"><<if $tavernWorkReturn is "Tavern innkeeper">>[[Return|Tavern innkeeper]]<<else>>[[Return|Ambercross Tavern]]<</if>></div>
</div>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel">
<<if $TavernTrialStarted and !$TavernTrialMugs and $c.energy gte 2>><<set $c.energy -= 2>><<run setup.advanceTime(20)>><<set $TavernTrialMugs to true>><<set $Tavernworkskill += 0.2>>
<p>You carry stacks of clean mugs from the wash basin to the bar, keeping your grip steady while the room keeps trying to shoulder into you. By the last trip, you know where to step before anyone moves.</p>
<p>You gain <b id="Goldgain">+0.2 Serving</b> <b id="Energy">-2 Energy</b></p>
<<else>><p>That part of the trial is already finished, or you need to rest before continuing.</p><</if>>
<div class="farm-trial-result-link">[[Continue the trial|TavernWorkTrial]]</div>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel">
<<if $TavernTrialStarted and !$TavernTrialTables and $c.energy gte 2>><<set $c.energy -= 2>><<run setup.advanceTime(20)>><<set $TavernTrialTables to true>><<set $Tavernworkskill += 0.2>>
<p>You wipe ale, grease, crumbs, and worse from the common tables while patrons lift elbows only when you make them. It is not graceful work, but the room looks sharper after you pass through it.</p>
<p>You gain <b id="Goldgain">+0.2 Serving</b> <b id="Energy">-2 Energy</b></p>
<<else>><p>That part of the trial is already finished, or you need to rest before continuing.</p><</if>>
<div class="farm-trial-result-link">[[Continue the trial|TavernWorkTrial]]</div>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel">
<<if $TavernTrialStarted and !$TavernTrialWater and $c.energy gte 2>><<set $c.energy -= 2>><<run setup.advanceTime(20)>><<set $TavernTrialWater to true>><<set $Tavernworkskill += 0.2>>
<p>The innkeeper loads a tray with four brimming ales and points toward a table beyond the dice players. You keep the mugs level while shoulders turn into your path and one patron laughs that a pretty server ought to spill something on herself. You reach the table dry, set each drink before the right person, and return with every coin accounted for.</p>
<<print setup.npcEventDialogueHtml(setup.tavernCounterNpc(), "Good. They can stare at your tits or shout about your ass all they please. Your eyes stay on the tray and their coin stays in my hand.", "The innkeeper")>>
<p>You gain <b id="Goldgain">+0.2 Serving</b> <b id="Energy">-2 Energy</b></p>
<<else>><p>That part of the trial is already finished, or you need to rest before continuing.</p><</if>>
<div class="farm-trial-result-link">[[Continue the trial|TavernWorkTrial]]</div>
</div><</nobr>><<nobr>><<run setup.ensureTavernWorkSystem()>>
<<if $TavernServingTrialReady and $TavernServingAccept neq 1 and $TavernTrialMugs and $TavernTrialTables and $TavernTrialWater>>
<<set _worker = setup.tavernCounterNpc()>>
<<set $TavernServingAccept to 1>><<set $TavernworkAccept to 1>><<set $TavernServingTrialReady to false>><<set $TavernTrialStarted to false>><<set $Tavernworkskill += 0.25>><<set $c.gold += 2>><<run setup.businessSpendGold("tavern", 2)>>
<<set _newOutfit = !setup.playerHasOutfit("charcoal_serving_bodice")>><<run setup.playerUnlockOutfit("charcoal_serving_bodice")>>
<div class="npc-activity-panel">
<p>You come back with damp sleeves, tired feet, and enough proof that nobody had to chase you through the work.</p>
<p>The innkeeper gives the common room one last glance before nodding.</p>
<<print setup.npcEventDialogueHtml(_worker, "You kept the orders straight, the ale upright, and your temper under your tongue. Fine. When the tavern is open, you can serve for pay. The patrons will test every part of you they think they can reach. Make certain the only thing they take without permission is a better view.", "The innkeeper")>>
<<if _newOutfit>><p>The innkeeper sets aside a dark serving outfit from the tavern stores. It is yours for your shifts and the evenings between them.</p><</if>>
<p>You gain <b id="Goldgain">+2 Gold</b> <b id="Goldgain">+0.25 Serving</b></p>
<<if _newOutfit>><p class="farm-work-gain-line"><b>+Charcoal Serving Bodice outfit</b></p><</if>>
<div class="farm-trial-result-link">[[Choose a shift|TavernWorkMenu]]</div>
</div>
<<else>>
<<goto "TavernWorkTrial">>
<</if>><</nobr>><<include [[roll TavernServeLight]]>><<include [[roll TavernServeEvening]]>><<include [[roll TavernKitchenPrep]]>><<include [[roll TavernCookShift]]>><<nobr>><<set _tavernWork = setup.tavernWorkStart("serve_light")>>
<div class="npc-activity-panel">
<div class="npc-interact-name"><<= _tavernWork.success ? _tavernWork.tierLabel : "Tavern work" >></div>
<<if !_tavernWork.success>>
<p><<= _tavernWork.text >></p>
<div class="farm-trial-result-link">[[Return|TavernWorkMenu]]</div>
<<else>>
<<include _tavernWork.passage>>
<<if !_tavernWork.choicePending>>
<<print setup.tavernWorkRewardHtml(_tavernWork)>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div>
<</if>>
<</if>>
</div><</nobr>><<nobr>><<set _tavernWork = setup.tavernWorkStart("serve_evening")>>
<div class="npc-activity-panel">
<div class="npc-interact-name"><<= _tavernWork.success ? _tavernWork.tierLabel : "Tavern work" >></div>
<<if !_tavernWork.success>>
<p><<= _tavernWork.text >></p>
<div class="farm-trial-result-link">[[Return|TavernWorkMenu]]</div>
<<else>>
<<include _tavernWork.passage>>
<<if !_tavernWork.choicePending>>
<<print setup.tavernWorkRewardHtml(_tavernWork)>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div>
<</if>>
<</if>>
</div><</nobr>><<nobr>><<set _tavernWork = setup.tavernWorkStart("kitchen_prep")>>
<div class="npc-activity-panel">
<div class="npc-interact-name"><<= _tavernWork.success ? _tavernWork.tierLabel : "Tavern work" >></div>
<<if !_tavernWork.success>>
<p><<= _tavernWork.text >></p>
<div class="farm-trial-result-link">[[Return|TavernWorkMenu]]</div>
<<else>>
<<include _tavernWork.passage>>
<<if !_tavernWork.choicePending>>
<<print setup.tavernWorkRewardHtml(_tavernWork)>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div>
<</if>>
<</if>>
</div><</nobr>><<nobr>><<set _tavernWork = setup.tavernWorkStart("cook_shift")>>
<div class="npc-activity-panel">
<div class="npc-interact-name"><<= _tavernWork.success ? _tavernWork.tierLabel : "Tavern work" >></div>
<<if !_tavernWork.success>>
<p><<= _tavernWork.text >></p>
<div class="farm-trial-result-link">[[Return|TavernWorkMenu]]</div>
<<else>>
<<include _tavernWork.passage>>
<<if !_tavernWork.choicePending>>
<<print setup.tavernWorkRewardHtml(_tavernWork)>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div>
<</if>>
<</if>>
</div><</nobr>><p>The first tables are easy enough: bread, ale, stew, a few tired villagers who only want food and warmth. You learn the room by walking it, counting lifted fingers and empty cups before anyone has to shout.</p>
<p>The innkeeper catches you turning with three mugs balanced between both hands.</p><<print setup.npcEventDialogueHtml(setup.tavernWorkInnkeeperNpc(), "Good. Keep seeing what they want before they ask.", "The innkeeper")>><p>A table of patrons comes in smelling of rain and cold wind, laughing loud enough to shake foam over the rims of their mugs. They test your patience with jokes, wrong orders, and coins left just out of reach.</p>
<p>You keep smiling anyway, sliding the right drinks to the right hands until their teasing turns into grudging respect. One of them taps an extra coin onto the table.</p><<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc("male"), "Fast feet. Sharp memory. Come back when the next crowd arrives; I may have a harder order for you.", "A patron", "male")>><p>A merchant complains before you even reach his table. The stew is too thin, the ale is too warm, the bench is too hard. Every sentence sounds like a trap looking for a victim.</p>
<p>You let him run out of breath, then answer with enough polish that nearby patrons start listening. By the end, he has what he asked for and no clean reason to keep scowling.</p><p>Someone knocks a tray from your hands near the hearth. Cups clatter, ale spreads across the boards, and half the room turns at once.</p>
<p>You move before embarrassment can root you in place. Cloth, bucket, replacement drinks. The mess is gone quickly enough that the laughter never really has time to settle.</p><p>A woman waves you close and lowers her voice over a plate of stew. She knows who drinks too much, who pays late, and which travelers should never be trusted with an unattended purse.</p>
<<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc("female"), "Watch the door when the market closes. The ones who arrive hungry are easier than the ones who arrive looking for someone.", "A patron", "female")>><p>You listen while working, carrying gossip as carefully as mugs. By the end of the shift, the tavern feels a little less like noise and a little more like a map.</p><p>The room fills in uneven waves. You carry plates to the front table, mugs to the back, then hurry upstairs with clean water for a rented room before someone calls you down again.</p>
<p>By the time the rush calms, your calves ache and your sleeves smell of spilled ale, but the innkeeper nods as if you have proven something useful.</p><p>Evening hits all at once. Dice slap tables, chairs scrape the floor, and voices rise until orders become a storm of fingers, mugs, and shouted names.</p>
<p>You stop trying to move politely and start moving well. Shoulder through, pivot, serve, collect, smile when it helps and stare when it does not. A table near the hearth leaves a tip because you never let their cups sit empty.</p><p>A drunk patron catches your wrist while you set down his ale, grip loose enough to pretend innocence and firm enough to show what he means.</p><<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc("male"), "Stay a breath. The cup can wait while I look at you.", "A patron", "male")>>
<p>You twist free with a practiced smile and enough steel in your voice to make the nearest table go quiet. The innkeeper notices. More importantly, so does the room.</p><p>Two men start arguing over dice, both loud, both certain the other cheated. The game is seconds from becoming broken furniture.</p>
<p>You step in with fresh mugs and a bright lie about the innkeeper keeping a watchful eye. It gives them a way to back down without looking afraid, and the table returns to muttering instead of swinging.</p><p>A traveling couple arrives late and hungry, their cloaks damp from the road. They argue over coin until you suggest one shared stew, extra bread, and watered ale enough to warm them both.</p>
<p>The innkeeper raises an eyebrow when they pay without complaint.</p><<print setup.npcEventDialogueHtml(setup.tavernWorkInnkeeperNpc(), "You just saved me an argument and sold the room besides. A small supper paid for is worth more than a large one left on the table.", "The innkeeper")>><p>The kitchen starts with onions. Piles of them. Enough to sting your eyes and leave your fingers smelling sharp no matter how often you wipe them on your apron.</p>
<p>The cook shows you how thin to slice them for stew and how thick to cut them for frying. It is dull work, but the rhythm settles into your hands.</p><<set _cook = setup.tavernWorkKitchenNpc()>>
<p>A pot of broth simmers over the fire, pale and bland until the cook pushes herbs toward you.</p>
<<npcSay _cook "Smell before you throw anything in. Your nose learns faster than your pride." "The cook">>
<p>You test each pinch carefully. Bitter leaf, sweet root, salt, pepper, then patience. By the end, the broth tastes like something someone might pay for.</p><p>The bread dough fights you from the moment your hands sink into it. Too wet, then too dry, then stubborn as rope under your palms.</p>
<p>You knead until your wrists ache, learning by feel when the dough stops tearing and starts stretching smooth. The cook grunts approval without looking up.</p><p>A pan begins to smoke while the cook is busy dressing a roast. For one awful second you smell burnt butter and see the whole batch going black.</p>
<p>You pull it aside, scrape what can be saved, and start again with a lower flame. The mistake costs you sweat, but it teaches faster than a lecture.</p><p>The washbasin becomes your kingdom for an hour: greasy bowls, dull knives, sticky cups, heavy pots blackened by the hearth.</p>
<p>It is not cooking, not exactly, but you learn the shape of the kitchen by cleaning it. Which knives matter. Which pans are never lent out. Which pot makes the stew everyone asks for.</p><p>A basket of bruised apples arrives from the market, too soft to serve fresh and too good to waste. The cook tells you to make them useful.</p>
<p>You cut away the bad spots, soften the rest near the fire, and sweeten them with berries until the kitchen smells warm and bright. It is a small dish, but it feels like yours.</p><p>The lunch stew is yours today. The cook watches from the side, arms folded, saying nothing while you judge the pot by color, scent, and the way the spoon drags through it.</p>
<p>You add roots first, onions after, herbs late enough to stay alive on the tongue. When bowls start leaving the kitchen, nobody sends them back.</p><p>A roast comes out uneven, one side pale and one side threatening to char. The cook swears under his breath and shoves the platter toward you.</p>
<p>You turn it, baste it, and nurse it close to the heat without letting the fire take it. It is tense work, but the final slices look deliberate instead of rescued.</p><p>A noble traveler wants something better than tavern stew and makes sure everyone hears it. The innkeeper gives you a look that says this problem is now yours.</p>
<p>You plate eggs with herbs, warmed bread, and fruit cut clean enough to look intentional. The traveler sniffs, tastes, and finally stops complaining.</p><p>The cook runs short on carrots halfway through the evening meal. There is no time to buy more, only a table of hungry patrons and a pot that suddenly tastes thin.</p>
<p>You stretch the flavor with onions, herbs, and patience, building depth from what is left. It is not the original recipe, but the bowls come back empty.</p><p>A pilgrim with cracked lips counts his coins three times before ordering watered ale and the cheapest bread. He tries to make himself small at the edge table, embarrassed by how little he can afford.</p>
<p>You stretch the serving without making a show of charity: a fuller cup, a heel of bread that would have been thrown out, a quiet word that keeps the room from noticing. The innkeeper sees it anyway, but only gives you a short nod.</p><p>A rush of travelers comes in together, all boots, cloaks, hunger, and impatience. Orders cross over each other until the room feels like a knot pulled tight.</p>
<p>You sort them by memory instead of noise: stew to the woman with the red scarf, ale to the road captain, hot water upstairs for the man coughing into his sleeve. By the end, nobody has what they first shouted for, but everyone has what they meant to ask for.</p><p>The hearth table drinks hard and talks harder. Every time you pass, someone asks for another mug before you have finished setting down the last one.</p>
<p>You stop treating the table like separate patrons and start serving them like a single unruly crowd: mugs in pairs, bread before complaints, water when the oldest one begins blinking too slowly. It keeps the laughter loud and the fists open.</p><p>A card game at the corner table begins quietly and grows dangerous by inches. One player keeps winning, one keeps losing, and the third keeps touching the knife at his belt as if reminding himself it exists.</p>
<p>You arrive with fresh drinks and a cheerful interruption timed so well it almost looks accidental. By the time you leave, the winner has agreed to buy the next round and the knife hand has found a mug instead.</p><p>The cook sets a basket of mushrooms in front of you and gives one warning: some are worth coin, some are only fit for the refuse pail, and some will make a patron curse your family for a week.</p>
<p>You sort slowly, learning by smell and bruising, trimming the good ones clean while the bad go into a separate bowl. It is fussy work, but the stew tastes deeper for it.</p><p>A delivery arrives late: sacks of flour, onions, turnips, and salted fish that all need carrying before the rain reaches them. The kitchen groans as if the work has weight before anyone lifts a thing.</p>
<p>You shoulder what you can and keep moving. By the fourth trip, your arms ache and your apron is streaked with flour, but the stores are dry and the cook stops muttering about ruined supper.</p><p>A guest asks for a meal without meat, then looks ready to apologize for being trouble. The cook snorts, already turning away, but the request stays with you.</p>
<p>You build the plate from what the kitchen has: fried onions, soft roots, herbs, warm bread, and a spoonful of sharp berry relish. The guest eats slowly at first, then with real hunger. When the plate returns clean, there is an extra coin tucked beneath it.</p><p>The stew thickens too fast near the bottom of the pot. One careless scrape would drag a burnt taste through the whole batch, and the room outside is already waiting.</p>
<p>You lower the heat, skim what can be saved, and wake the flavor back up with herbs and a splash of cider. It is not pretty work, but it is the kind that keeps a mistake from becoming a disaster.</p><<nobr>><p>A drunk patron hooks two fingers around your wrist as you set down his ale. His smile is loose, but his grip is not accidental.</p>
<<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc("male"), "Stay close. Pretty service tastes better.", "A patron", "male")>>
<div class="npc-activity-choice-list">
<<if setup.playerAttributeMeets("strength", 6)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("strength", "Pull free and shame him")>><<link _attributeChoiceLabel "TavServeChoice1a">><</link>></div><</if>>
<<if setup.playerAttributeMeets("charisma", 6)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("charisma", "Smile until he tips")>><<link _attributeChoiceLabel "TavServeChoice1b">><</link>></div><</if>>
<div>[[Call the innkeeper over|TavServeChoice1c]]</div>
</div><</nobr>><<nobr>><p>You twist out of his grip and let your voice carry. <span class="dialogue-line dialogue-player">"Hands stay on the mug, unless you want everyone here to hear how badly you need manners taught to you."</span></p>
<p>The nearby tables go quiet. He reddens, grumbles, and lets you go. The room remembers that you are not an easy target.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ charisma: 0.08 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You leave your smile in place and turn it sharp enough to cut. <span class="dialogue-line dialogue-player">"Generous men get better service. Grabby ones wait thirsty."</span></p>
<p>He laughs because the table laughs first, then pushes an extra coin toward you to save face. You take it before his courage can return.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ gold: 1, charisma: 0.05, carnality: 0.03 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You look straight past him and raise your voice. <span class="dialogue-line dialogue-player">"Innkeeper. This table needs reminding what service costs."</span></p>
<p>The innkeeper arrives with a stare heavy enough to flatten the man into his bench. Nobody cheers, but nobody bothers you at that table again either.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ tavernwork: 0.08, charisma: 0.03 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>A patron sends a cup of wine over the table with one careless elbow, then points at you before the spill has stopped spreading.</p>
<<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc("male"), "Clumsy girl. Replace it.", "A patron", "male")>><p>His friends watch, hungry for embarrassment more than drink.</p>
<div class="npc-activity-choice-list">
<div>[[Apologize and replace it|TavServeChoice2a]]</div>
<<if setup.playerAttributeMeets("intelligence", 6)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("intelligence", "Answer him carefully")>><<link _attributeChoiceLabel "TavServeChoice2b">><</link>></div><</if>>
<<if setup.playerAttributeMeets("charisma", 7)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("charisma", "Make him laugh at himself")>><<link _attributeChoiceLabel "TavServeChoice2c">><</link>></div><</if>>
</div><</nobr>><<nobr>><p>You swallow the insult, clean the table, and return with wine before pride can cost you coin. The patron gets his little victory, but the innkeeper notices the room stayed calm.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ tavernwork: 0.08 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You give him a small bow. <span class="dialogue-line dialogue-player">"Of course. I will bring a fresh cup, and perhaps one with a wider base for safer company."</span></p>
<p>His friends laugh before he decides whether to be angry. That saves you. He accepts the replacement with a stiff jaw and no further complaint.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ charisma: 0.08, intelligence: 0.03 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You widen your eyes at the spilled wine. <span class="dialogue-line dialogue-player">"A tragic death. Shall I tell the priest, or will another cup ease the mourning?"</span></p>
<p>The table breaks into laughter. Even the patron relents enough to wave you off with a smirk, and the replacement wine earns a better mood than the first cup deserved.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ charisma: 0.1 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>The sauce catches at the bottom of the pan while the cook is shouting for plates. Bitter smoke curls up before you can pretend nothing happened.</p>
<div class="npc-activity-choice-list">
<div>[[Start it over honestly|TavKitchenChoice1a]]</div>
<<if setup.playerAttributeMeets("intelligence", 7)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("intelligence", "Rescue it with herbs")>><<link _attributeChoiceLabel "TavKitchenChoice1b">><</link>></div><</if>>
<div>[[Hide the taste under salt|TavKitchenChoice1c]]</div>
</div><</nobr>><<nobr>><p>You throw out what cannot be saved and admit the mistake before the cook finds it. He curses, but his anger is cleaner than a ruined table of meals would have been.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ cooking: 0.08, intelligence: 0.03 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You move fast: clean pan, good top layer, cider, herbs, and a little fat to round the bitterness away. The cook tastes it with narrowed eyes, then grunts because he cannot find a reason to complain.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ cooking: 0.12, intelligence: 0.05 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You bury the burnt edge under salt and strong herbs. It passes the first taste, but every bowl that leaves the kitchen makes you tense until the last one comes back empty.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ intelligence: 0.04 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><p>Near the end of the shift, a patron catches your sleeve and presses two coins into your palm before you can step away.</p>
<<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc("male"), "You kept the ale coming and the fools away from my purse. That is rarer than a pretty smile.", "A patron", "male")>>
<p>It is your first real tavern tip, heavy enough to make the whole shift feel different.</p><p>The regulars lift their mugs when you pass, not loudly enough to embarrass themselves, but loudly enough for the room to hear.</p>
<<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc("male"), "To quick feet and a sharper tongue.", "A regular", "male")>><p>The others laugh and drink, and for a moment the tavern feels like a place making room for you.</p><p>The cook catches you watching the stew being seasoned and, after a long suspicious silence, beckons you closer.</p>
<<print setup.npcEventDialogueHtml(setup.tavernWorkKitchenNpc(), "Small pinch of crushed juniper when the meat is poor. Too much and it tastes like medicine. Enough, and people think you bought better cuts.", "The cook")>>
<p>You smell the difference twice before being allowed to touch the pot.</p><p>A bowl comes back from the common room with nothing left in it but a smear of sauce and a coin balanced inside.</p>
<p>The innkeeper reads the gesture faster than you do.</p><<print setup.npcEventDialogueHtml(setup.tavernWorkInnkeeperNpc(), "That means they know someone in the kitchen did more than keep them alive.", "The innkeeper")>>
<p>The cook pretends not to hear, but leaves the coin for you.</p><<nobr>><<set _favor = $pendingTavernWorkFavor>><<set _npc = _favor ? setup.getNpcById(_favor.npcId) : null>>
<div class="npc-activity-panel farm-work-event-panel">
<div class="npc-interact-name">An intimate interruption</div>
<<if !_favor or !_npc>>
<p>The interruption passes before it can become anything.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div>
<<else>>
<<set _option = setup.tavernWorkFavorOption(_favor.optionId)>>
<<print setup.tavernWorkFavorRequestHtml(_npc, _option)>>
<<set _willing = setup.tavernWorkFavorWillingness(_favor)>>
<div class="npc-activity-choice-list">
<<if _willing.ok>><div><<link "Accept">><<set $lastTavernWorkFavorResult = null>><<set _accepted = setup.tavernWorkAcceptFavor()>><<if $lastTavernWorkFavorResult and $lastTavernWorkFavorResult.success>><<goto "TavernWorkTameFavorResult">><<else>><<goto "NPCEncounter">><</if>><</link>></div><<else>><div class="player-choice-status"><<= _willing.text >></div><</if>>
<div>[[Tease them and keep working|TavernWorkNpcFavorTease]]</div>
<div>[[Refuse plainly|TavernWorkNpcFavorRefuse]]</div>
</div>
<</if>>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<<if !$lastTavernWorkFavorResult>>
<p>The moment passes.</p>
<<else>>
<div><<= $lastTavernWorkFavorResult.text >></div>
<</if>>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div>
</div><</nobr>><<nobr>><<set _favor = $pendingTavernWorkFavor>><<set _npc = _favor ? setup.getNpcById(_favor.npcId) : null>>
<div class="npc-activity-panel farm-work-event-panel">
<p><<if _npc>>You let <<= setup.npcDisplayName(_npc) >> wait on your answer while you lift the next tray. <span class="dialogue-line dialogue-player">"Maybe later, if you behave well enough to deserve it."</span><<else>>You let the offer hang unanswered and return to work.<</if>></p>
<p><<if _npc>>The look <<if _npc.gender is "female">>she<<else>>he<</if>> gives you is not satisfied, but it follows your hips across the room and leaves you distinctly aware of what you postponed.<<else>>The tavern closes over the unfinished exchange.<</if>></p>
<<if _npc>><<run setup.npcArousalChange(_npc, 4, "tavern_favor_tease", { source: "tavernwork", location: "Ambercross Tavern" })>><<run setup.npcApplyDailyRelationshipGain(_npc, "affection", 0.2)>><</if>><<set $pendingTavernWorkFavor = null>>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ charisma: 0.06, carnality: 0.04 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div>
</div><</nobr>><<nobr>><<set _favor = $pendingTavernWorkFavor>><<set _npc = _favor ? setup.getNpcById(_favor.npcId) : null>>
<div class="npc-activity-panel farm-work-event-panel">
<p>You hold <<if _npc and _npc.gender is "female">>her<<elseif _npc>>his<<else>>their<</if>> gaze and keep your voice quiet enough not to draw the whole room. <span class="dialogue-line dialogue-player">"No. I am working."</span></p>
<p><<if _npc>><<= setup.npcDisplayName(_npc) >> takes the refusal with a tight little smile and steps back before the pause becomes noticeable. Whatever <<if _npc.gender is "female">>she<<else>>he<</if>> wanted from your body remains only an offer, and you return to the room on your own terms.<<else>>The tavern noise closes around you again.<</if>></p>
<<run setup.tavernWorkDeclineFavor()>>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div>
</div><</nobr>><<nobr>><p>Two gamblers accuse each other of cheating. The dice sit between them like a lit fuse, and the room starts making space for violence.</p>
<div class="npc-activity-choice-list">
<div>[[Distract them with drinks|TavServeChoice3a]]</div>
<<if setup.playerAttributeMeets("strength", 8)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("strength", "Threaten to throw them out")>><<link _attributeChoiceLabel "TavServeChoice3b">><</link>></div><</if>>
<<if setup.playerAttributeMeets("intelligence", 8)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("intelligence", "Point out the real cheat")>><<link _attributeChoiceLabel "TavServeChoice3c">><</link>></div><</if>>
</div><</nobr>><<nobr>><p>You arrive with mugs before either man can stand. A drink in each hand gives them something to hold besides anger, and your easy chatter pulls the watching crowd into laughter instead of shouting.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ charisma: 0.07 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You plant yourself beside the table and let your voice harden. <span class="dialogue-line dialogue-player">"Break a chair and you pay for it. Break each other and you bleed outside."</span></p>
<p>Neither wants to be the first man dragged through the door. The game ends ugly, but intact.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ tavernwork: 0.1, charisma: 0.04 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You glance at the dice, then at the quiet third man whose sleeve sits too close to the table edge. <span class="dialogue-line dialogue-player">"Funny. The loudest two are the only ones not hiding anything."</span></p>
<p>The cheater goes pale. The anger turns away from you, and the innkeeper later admits that was either clever or foolish. Maybe both.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ intelligence: 0.08, charisma: 0.04 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><<set _cook = setup.tavernWorkKitchenNpc()>><p><<npcMention _cook "A kitchen worker">> keeps finding reasons to work beside you. Hip against hip at the basin, shoulder brushing yours near the shelves, fingers grazing your wrist when a knife is passed handle-first.</p>
<<npcSay _cook "Crowded kitchen." "The kitchen worker">>
<div class="npc-activity-choice-list">
<div>[[Keep the worker focused|TavKitchenChoice2a]]</div>
<<if setup.playerAttributeMeets("charisma", 6)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("charisma", "Flirt back softly")>><<link _attributeChoiceLabel "TavKitchenChoice2b">><</link>></div><</if>>
<div>[[Ask for room to work|TavKitchenChoice2c]]</div>
</div><</nobr>><<nobr>><p>You pass the worker a stack of bowls before another excuse to linger can appear. <span class="dialogue-line dialogue-player">"Crowded hands can still be useful."</span></p>
<p>The worker laughs and gets back to work, the flirtation tucked away without spoiling the shift.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ charisma: 0.04, cooking: 0.05 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You lean just close enough to be noticed. <span class="dialogue-line dialogue-player">"Careful. If you keep distracting me, you had better be worth the ruined soup."</span></p>
<p>The grin you receive turns helpless for a second, and the kitchen feels hotter than the hearth. Somehow, the work still gets done.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ charisma: 0.06, carnality: 0.05 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You set the knife down and wait until the smile fades. <span class="dialogue-line dialogue-player">"I need room to work. If you want to impress me, stop getting in my way."</span></p>
<p>The worker backs off, chastened but not cruelly embarrassed. The next hour goes smoother for it.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ tavernwork: 0.05, charisma: 0.04 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>Halfway through the meal rush, you find the onion basket nearly empty. The pot needs sweetness and body, and the cook is too busy carving meat to solve it for you.</p>
<div class="npc-activity-choice-list">
<div>[[Use carrots and herbs|TavCookChoice1a]]</div>
<div>[[Stretch it with bread|TavCookChoice1b]]</div>
<div>[[Warn the innkeeper honestly|TavCookChoice1c]]</div>
</div><</nobr>><<nobr>><p>You dice carrots small, sweat them in fat, and finish with herbs bright enough to make the missing onion less obvious. The stew changes, but it changes into something deliberate.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ cooking: 0.12, intelligence: 0.04 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You tear day-old bread into the pot and let it thicken what flavor remains. It is humble, but filling, and hungry patrons forgive a great deal when the bowl feels heavy.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ cooking: 0.08, tavernwork: 0.05 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You tell the innkeeper before anyone orders what cannot be served. He grimaces, changes the chalkboard, and sells the night around what the kitchen can honestly make.</p>
<p>It costs a little pride, but no one pays for a promise you cannot keep.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<<print setup.tavernWorkBonusHtml({ charisma: 0.04, intelligence: 0.06 }, "Reaction bonus")>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><<set $produceShopType = "square">>
<div id="produce-shop"><<include "ProduceShop_Body">></div><</nobr>><<nobr>><<set $produceShopType = "farm">>
<div id="produce-shop"><<include "ProduceShop_Body">></div><</nobr>><<nobr>><<run setup.ensureCookingSystem()>>
<<if $produceShopType is "farm">><<set _businessId = "farm">><<else>><<set _businessId = "produce_stall">><</if>>
<div class="market-shop-panel">
<h2><<if $produceShopType is "farm">>Farm Produce<<else>>Produce Stall<</if>></h2>
<<if !setup.businessIsOpen(_businessId)>>
<p>The produce is packed away for now. No one is free to sell ingredients at the moment.</p>
<div class="npc-return-link"><<if $produceShopType is "farm">><<link "Return" "Ambercross Farmer's house">><<set $produceShopMessage = "">><</link>><<else>><<link "Return" "Ambercross Center">><<set $produceShopMessage = "">><</link>><</if>></div>
<<else>>
<div class="market-shop-dialogue"><<if $produceShopType is "farm">><<= setup.businessClerkName("farm") >> sorts the day's produce into rough baskets. "If you can cook it, we can spare it," they say, wiping dirt from their hands.<<else>><<= setup.businessClerkName("produce_stall") >> arranges baskets of fruit, roots, and herbs beneath the market canvas. "Fresh enough for a proper meal," they say.<</if>></div>
<<if $produceShopMessage>><p><em><<= $produceShopMessage >></em></p><<set $produceShopMessage = "">><</if>>
<<for _item range setup.produceShopStock($produceShopType)>>
<<capture _item>>
<div class="market-shop-row">
<div>
<div class="market-shop-name"><<= _item.label >></div>
<div class="wardrobe-note">Owned: <<= setup.inventoryItemCount(_item) >> | Stock: <<= _item.stock >></div>
</div>
<div class="market-shop-cost"><<= _item.cost >> gold</div>
<div class="cheat-actions"><<link "Buy">><<set $produceShopMessage = setup.buyProduceItem($produceShopType, _item.id)>><<replace "#produce-shop">><<include "ProduceShop_Body">><</replace>><<replace "#sidebar-vitals">><<print setup.playerSidebarVitalsHtml()>><</replace>><</link>></div>
</div>
<</capture>>
<</for>>
<div class="npc-return-link"><<if $produceShopType is "farm">><<link "Return" "Ambercross Farmer's house">><<set $produceShopMessage = "">><</link>><<else>><<link "Return" "Ambercross Center">><<set $produceShopMessage = "">><</link>><</if>></div>
<</if>>
</div><</nobr>><div id="cooking-panel"><<include "CookingMenu_Body">></div><<nobr>><<run setup.ensureCookingSystem()>>
<<if !$cookingReturn>><<set $cookingReturn = "Ambercross Houses">><</if>>
<div class="cooking-panel">
<h2>Cooking</h2>
<div class="cooking-status">Cooking skill: <b><<= setup.cookingSkill() >></b></div>
<<if $cookingMessage>><div class="cooking-message"><<= $cookingMessage >></div><<set $cookingMessage = "">><</if>>
<details class="cooking-entry" open>
<summary>Available recipes</summary>
<div class="cooking-body">
<<set _available = setup.cookingAvailableRecipes()>>
<<if _available.length is 0>>
<div class="cooking-empty">You know recipes, but you lack the ingredients or skill to cook any of them right now.</div>
<<else>>
<<for _recipe range _available>>
<<capture _recipe>>
<div class="cooking-recipe-row">
<<print setup.cookingRecipeInfoHtml(_recipe)>>
<div class="cheat-actions"><<link "Cook">><<set $cookingMessage = setup.cookRecipe(_recipe.id)>><<replace "#cooking-panel">><<include "CookingMenu_Body">><</replace>><<replace "#sidebar-vitals">><<print setup.playerSidebarVitalsHtml()>><</replace>><</link>></div>
</div>
<</capture>>
<</for>>
<</if>>
</div>
</details>
<details class="cooking-entry">
<summary>Unavailable known recipes</summary>
<div class="cooking-body">
<<set _unavailable = setup.cookingUnavailableRecipes()>>
<<if _unavailable.length is 0>>
<div class="cooking-empty">Every recipe you know is available right now.</div>
<<else>>
<<for _recipe range _unavailable>>
<<capture _recipe>>
<div class="cooking-recipe-row"><<print setup.cookingRecipeInfoHtml(_recipe)>></div>
<</capture>>
<</for>>
<</if>>
</div>
</details>
<div class="npc-return-link"><<link "Return" $cookingReturn>><<set $cookingMessage = "">><</link>></div>
</div><</nobr>><div id="recipe-books"><<include "RecipeBooks_Body">></div><<nobr>><<run setup.ensureCookingSystem()>>
<<set _books = setup.availableRecipeBooksToStudy()>>
<<set _return = $readingSpotReturn || $return || "Inventory">>
<div class="cooking-panel">
<h2>Sit at a Table and Read</h2>
<div class="cooking-status">Literacy: <b><<= setup.playerLiteracyDisplay() >></b></div>
<<if $readingSpotName>><p>You settle in at <<= $readingSpotName >> and spread your notes where the light is good enough to make the letters behave.</p><</if>>
<<if $recipeBookMessage>><div class="cooking-message"><<= $recipeBookMessage >></div><<set $recipeBookMessage = "">><</if>>
<details class="cooking-entry" open>
<summary>Owned cooking books</summary>
<div class="cooking-body">
<<if _books.length is 0>>
<div class="cooking-empty">You have no unfinished cooking books to study right now.</div>
<<else>>
<<for _book range _books>>
<<capture _book>>
<<set _status = setup.recipeBookStatus(_book)>>
<div class="cooking-recipe-row">
<div class="cooking-recipe-info">
<div class="cooking-recipe-title"><<= _book.label >></div>
<div class="cooking-recipe-meta">Requires <<= setup.playerLiteracyTier(_book.minLiteracy).label >>, <<= _book.minutes >> minutes per study</div>
<div class="cooking-recipe-meta">Study: <<= _status.studyCount >>/<<= _status.studyNeeded >></div>
<div class="cooking-recipe-meta">Recipes: <<= setup.recipeBookRecipeLabels(_book) >></div>
<div class="cooking-note"><<= _book.note >></div>
<<if _status.read>>
<div class="cooking-empty">Learned.</div>
<<elseif !_status.canRead>>
<div class="cooking-missing">Your reading is not strong enough to understand this yet.</div>
<<elseif _status.unreadRecipes.length is 0>>
<div class="cooking-empty">You already know these recipes, but studying the notes still helps your reading.</div>
<</if>>
</div>
<<if !_status.read and _status.canRead>>
<div class="cheat-actions"><<link "Study" "BookStudyResult">><<set $bookStudyResult = setup.beginBookStudy("recipe", _book.id)>><</link>></div>
<</if>>
</div>
<</capture>>
<</for>>
<</if>>
</div>
</details>
<<set _studyBooks = setup.availableStudyBooksToRead()>>
<details class="cooking-entry" open>
<summary>Owned study books</summary>
<div class="cooking-body">
<<if _studyBooks.length is 0>><div class="cooking-empty">You have no unfinished study books to read right now.</div>
<<else>><<for _book range _studyBooks>><<capture _book>>
<div class="cooking-recipe-row"><div class="cooking-recipe-info">
<div class="cooking-recipe-title"><<= _book.label >></div>
<div class="cooking-recipe-meta">Requires <<= setup.playerLiteracyTier(_book.minLiteracy).label >> | Study: <<= setup.studyBookProgress(_book.id) >>/<<= _book.studyNeeded >></div>
<div class="cooking-note"><<= _book.note >></div>
<<if setup.playerLiteracy() lt _book.minLiteracy>><div class="cooking-missing">Your reading is not strong enough to understand this yet.</div><</if>>
</div>
<<if setup.playerLiteracy() gte _book.minLiteracy>><div class="cheat-actions"><<link "Study" "BookStudyResult">><<set $bookStudyResult = setup.beginBookStudy("study", _book.id)>><</link>></div><</if>>
</div>
<</capture>><</for>><</if>>
</div>
</details>
<div class="npc-return-link">
<<link "Return" _return>><<set $recipeBookMessage = "">><<set $readingSpotReturn = "">><<set $readingSpotName = "">><</link>>
</div>
</div><</nobr>><<nobr>><<set _quest = setup.ensureLiteracyQuest()>><<set _lesson = setup.literacyLessonEvents[_quest.activeLessonId]>>
<div class="npc-activity-panel farm-work-event-panel literacy-tutor-shell">
<<if !_lesson or !_quest.activeLessonPaid>>
<div class="literacy-heading">The lesson has passed</div>
<p>There is no active reading exercise waiting on the table.</p>
<div class="npc-return-link">[[Return to your tutor|LiteracyTutor]]</div>
<<else>>
<div class="literacy-heading"><<= _lesson.title >></div>
<div class="literacy-level">Literacy: <b><<= setup.playerLiteracyDisplay() >></b></div>
<p><<= _lesson.intro >></p>
<p><span class="dialogue-line"><<= _lesson.dialogue >></span></p>
<div class="literacy-choice-list">
<<for _choice range _lesson.choices>><<capture _choice>>
<<if !_choice.stat or setup.playerAttributeMeets(_choice.stat, _choice.required)>>
<div class="literacy-choice-row"><<link _choice.label "ReadingLessonResult">><<set $readingLessonResult = setup.literacyCompleteLesson(_choice.id)>><</link>></div>
<</if>>
<</capture>><</for>>
</div>
<div class="npc-return-link">[[Leave the lesson unfinished|LiteracyTutor]]</div>
<</if>>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<div class="npc-interact-name">Back to the farm work</div>
<p>You pull yourself back together and return to the yard before the absence becomes too obvious. The work is still waiting, rough and ordinary, but the interruption leaves heat under your skin for the rest of the shift.</p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<div class="npc-interact-name">Back to the shift</div>
<p>You return to the tavern noise with your clothes straightened and your pulse still refusing to settle. Mugs need filling, plates need carrying, and the room keeps moving as if nothing happened.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>>
<div class="farm-trial-result-link">[[Finish shift|Ambercross Tavern]]</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<<run setup.discoverRecipeBook("farmhouse_notes")>>
<div class="npc-interact-name">A shelf by the hearth</div>
<p>The farmer sends you inside with a sack of onions and a warning not to track mud over his floor. The kitchen is cramped, warm, and busy with the smell of old smoke. While you look for the right shelf, you notice a folded bundle of grease-marked pages pinned beneath a clay jar.</p>
<p>Most of it is written in a rough hand: roots, milk, eggs, stew quantities for hungry workers. You cannot make all of it out at a glance, but you recognize enough to know it is useful.</p>
<p>When you return, the farmer catches you looking back toward the door. <span class="dialogue-line dialogue-male">"Kitchen notes,"</span> he says. <span class="dialogue-line dialogue-male">"Ask me after work if you want a copy. Do not waste my time if you cannot read."</span></p>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<<run setup.discoverRecipeBook("tavern_pot_recipes")>>
<div class="npc-interact-name">Notes under the flour sack</div>
<p>The supper rush leaves the kitchen looking like a battlefield of onion skins, spilled flour, and half-clean knives. While dragging a flour sack back under the table, your fingers brush a wrapped packet tucked where damp cannot reach it.</p>
<p>Inside are several pages written in a cramped, practical hand: big pots, cheap roots, cabbage, potatoes, and ways to stretch flavor when the room is full of hungry patrons. The cook notices before you can decide whether to put them back.</p>
<<print setup.npcEventDialogueHtml(setup.tavernWorkKitchenNpc(), "Found my pot notes, did you? Ask the innkeeper for a copy if you want to learn from them. I am not reading over your shoulder every night.", "The cook")>>
</div><</nobr>><<nobr>><<run setup.ensureCookingSystem()>>
<<set _source = $recipeBookTradeSource || $recipeBookSource || "townhall">>
<<set _trade = setup.recipeBookTradeSource(_source)>>
<<set _books = setup.recipeBookTradeItems(_source)>>
<<set _return = _trade ? ($recipeBookTradeReturn || _trade.returnPassage) : "Ambercross Center">>
<div id="recipe-book-trade" class="cooking-panel">
<h2><<= _trade ? _trade.title : "Cooking Books" >></h2>
<<if !_trade>>
<p>There is no one offering cooking notes here right now.</p>
<div class="npc-return-link">[[Return|Ambercross Center]]</div>
<<else>>
<p><<= _trade.text >></p>
<<if $recipeBookTradeMessage>><div class="cooking-message"><<= $recipeBookTradeMessage >></div><<set $recipeBookTradeMessage = "">><</if>>
<details class="cooking-entry" open>
<summary>Available books</summary>
<div class="cooking-body">
<<if _books.length is 0>>
<div class="cooking-empty">There is nothing new for you to buy or take here right now.</div>
<<else>>
<<for _book range _books>>
<<capture _book>>
<div class="cooking-recipe-row">
<div class="cooking-recipe-info">
<div class="cooking-recipe-title"><<= _book.label >></div>
<div class="cooking-recipe-meta"><<if _book.cost gt 0>>Cost: <<= _book.cost >> gold<<else>>Cost: free<</if>> | Requires <<= setup.playerLiteracyTier(_book.minLiteracy).label >> to study</div>
<div class="cooking-recipe-meta">Recipes: <<= setup.recipeBookRecipeLabels(_book) >></div>
<div class="cooking-note"><<= _book.note >></div>
</div>
<div class="cheat-actions"><<if _book.cost gt 0>><<link "Buy">><<set $recipeBookTradeMessage = setup.buyRecipeBook(_book.id)>><<replace "#recipe-book-trade">><<include "RecipeBookTrade">><</replace>><<replace "#sidebar-vitals">><<print setup.playerSidebarVitalsHtml()>><</replace>><</link>><<else>><<link "Take">><<set $recipeBookTradeMessage = setup.buyRecipeBook(_book.id)>><<replace "#recipe-book-trade">><<include "RecipeBookTrade">><</replace>><<replace "#sidebar-vitals">><<print setup.playerSidebarVitalsHtml()>><</replace>><</link>><</if>></div>
</div>
<</capture>>
<</for>>
<</if>>
</div>
</details>
<div class="npc-return-link"><<link "Return" _return>><<set $recipeBookTradeMessage = "">><<set $recipeBookTradeReturn = "">><</link>></div>
<</if>>
</div><</nobr>><<nobr>><<set _favor = $npcTradeFavorResult>>
<div class="npc-activity-panel">
<h2>Haggling</h2>
<<if _favor>>
<<if _favor.completed>><p><<if _favor.quantity>>They give you <<= _favor.quantity >> <<= _favor.itemLabel >> at no gold cost, as promised.<<else>>The bargain is settled. The agreed price for <<= _favor.itemLabel >> is <<= _favor.price >> gold for the rest of the day.<</if>></p><<else>><p>You stopped the private bargain. No goods changed hands, and the original price still stands.</p><</if>>
<<else>>
<p>The private bargain is settled, and the trade can continue.</p>
<</if>>
<div class="npc-return-link"><<link "Return to trade" "NPCTrade">><<set $npcTradeFavorResult = null>><</link>></div>
</div><</nobr>><<nobr>><<run setup.ensureCookingSystem()>>
<<set _npc = setup.getNpcById($activeNpcId)>>
<<set _return = $npcTradeReturn || "NPCInteract">>
<<if !_npc>>
No one is close enough to trade with.
<div class="npc-return-link"><<link "Return" _return>><<set $npcTradeMessage = "">><<set $npcTradeMode = "">><<set $npcTradeReturn = "">><</link>></div>
<<else>>
<<set _mode = setup.npcTradeMode()>>
<<set _items = setup.npcTradeItems(_npc, _mode)>>
<<set _shopOffers = _mode is "shop" ? setup.npcTradeBusinessOffers(_npc) : []>>
<<set _openShops = _mode is "shop" ? setup.npcTradeOpenBusinessIds(_npc) : []>>
<<set _sellable = _mode is "personal" ? setup.npcSellablePlayerItems(_npc) : []>>
<<set _demand = _mode is "personal" ? setup.npcTradeDemand(_npc) : null>>
<<if _mode is "personal" and $npcTradeIntroFor isnot _npc.id>>
<div class="house-visit-shell"><p>You ask <<npcMention _npc>> whether they have anything to trade. They consider what they could sell or buy.</p>
<<set _tradeGreeting = setup.npcTradeGreeting(_npc)>><<npcSay _npc _tradeGreeting>>
<div class="house-visit-choice-list"><div class="house-visit-choice"><<link "See what they have" "NPCTrade">><<set $npcTradeIntroFor = _npc.id>><</link>></div></div>
<div class="npc-return-link"><<link "Return" _return>><<set $npcTradeMessage = "">><<set $npcTradeIntroFor = null>><<set $npcTradeMode = "">><<set $npcTradeReturn = "">><</link>></div></div>
<<else>>
<div id="npc-trade" class="cooking-panel">
<<print setup.npcTradeHeaderHtml(_npc)>>
<<if $npcTradeMessage>><div class="cooking-message"><<= $npcTradeMessage >></div><<set $npcTradeMessage = "">><</if>>
<<if _items.length is 0 and _sellable.length is 0 and _shopOffers.length is 0>><p><<= _mode is "shop" ? "The shop has nothing to trade right now." : setup.npcDisplayName(_npc) + " has nothing to trade right now." >></p><</if>>
<<if _items.length gt 0>>
<details class="cooking-entry" open>
<summary><<= _mode is "shop" ? "Buy from shop" : "Buy from them" >></summary>
<div class="cooking-body">
<<for _item range _items>>
<<capture _item>>
<div class="cooking-recipe-row">
<div class="cooking-recipe-info">
<div class="cooking-recipe-title"><<= _item.label >></div>
<div class="cooking-recipe-meta">Cost: <<= _item.cost >> gold | Stock: <<= _item.stock >></div>
<div class="cooking-note"><<= _item.note >></div>
<<if _item.requiresService and _item.serviceRequest>><div class="cooking-note"><span class="dialogue-line">"<<= _item.serviceRequest >>"</span></div><</if>>
</div>
<div class="cheat-actions">
<<if _item.requiresService>>
<<link _item.serviceLabel "NPCTrade">><<set _serviceResult = setup.cookingBookServiceComplete(_item.tradeId.split(":")[1], _npc.id)>><<set $npcTradeMessage = _serviceResult.text>><</link>>
<<else>>
<<if setup.npcHaggleCanOffer(_item)>><<link "Haggle">><<run setup.showHagglingDialog(_npc.id, _item.tradeId)>><</link>><</if>> <<link "Buy" "NPCTrade">><<set $npcTradeMessage = setup.npcBuyTradeItem(_npc.id, _item.tradeId, _mode)>><</link>>
<</if>>
</div>
</div>
<</capture>>
<</for>>
</div>
</details>
<</if>>
<<if _openShops.length gt 0>>
<details class="cooking-entry" open><summary>Sell to shop</summary><div class="cooking-body">
<<if _shopOffers.length is 0>><p class="cooking-note">The shop cannot buy anything you carry right now.</p><</if>>
<<for _offer range _shopOffers>><<capture _offer>>
<div class="cooking-recipe-row"><div class="cooking-recipe-info"><div class="cooking-recipe-title"><<= _offer.label >></div>
<div class="cooking-recipe-meta">Offer: <<= _offer.price >> gold | You have: <<= _offer.owned >> | Shop stock: <<= _offer.stock >>/<<= _offer.maxStock >></div>
<div class="cooking-note"><<= _offer.businessLabel >></div></div>
<div class="cheat-actions"><<link "Sell to shop" "NPCTrade">><<set $npcTradeMessage = setup.npcSellToBusiness(_npc.id, _offer.businessId, _offer.id)>><</link>></div></div>
<</capture>><</for>>
</div></details>
<</if>>
<<if _mode is "personal">>
<details class="cooking-entry" open><summary>Sell to them</summary><div class="cooking-body">
<<if _demand>><p class="npc-trade-request">Looking for <<= _demand.label >> today: <<= _demand.price >> gold for one.</p><</if>>
<<if _sellable.length is 0>><p class="cooking-note">They cannot buy anything you carry right now.</p><</if>>
<<for _sale range _sellable>><<capture _sale>>
<div class="cooking-recipe-row"><div class="cooking-recipe-info"><div class="cooking-recipe-title"><<= _sale.label >></div><div class="cooking-recipe-meta">Offer: <<= _sale.price >> gold | You have: <<= _sale.owned >><<if _sale.requested>> | Wanted today<</if>></div></div>
<div class="cheat-actions"><<link "Sell one" "NPCTrade">><<set $npcTradeMessage = setup.npcSellTradeItem(_npc.id, _sale.id)>><</link>></div></div>
<</capture>><</for>>
</div></details>
<</if>>
<div class="npc-return-link"><<link "Return" _return>><<set $npcTradeMessage = "">><<set $npcTradeIntroFor = null>><<set $npcTradeMode = "">><<set $npcTradeReturn = "">><</link>></div>
</div>
<</if>>
<</if>><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>>
<div class="npc-activity-panel">
<div class="npc-interact-name">Dock work</div>
<<set _worker = setup.businessCounterNpc("fishmonger")>>
<<if !_worker>>
<p>No one is organizing paid work on the piers right now.</p>
<div class="npc-return-link">[[Return|Ambercross Piers]]</div>
<<else>>
<p><<= setup.npcDisplayName(_worker) >> looks you over, then nods toward the wet boards, stacked crates, and nets waiting by the posts. <span class="dialogue-line dialogue-male">"If you can carry without dropping half the catch into the bay, there is coin in it."</span></p>
<div class="cooking-status">Dockwork skill: <b><<= setup.dockWorkSkill() >></b></div>
<<print setup.dockWorkStandingHtml()>>
<<print setup.playerWorkNeedWarningHtml(120)>>
<div class="farm-work-actions">
<<for _entry range setup.dockWorkTierEntries()>>
<<set _tierId = _entry.id>><<set _tier = _entry.tier>><<set _check = setup.dockWorkCanStart(_tier)>>
<<capture _tierId _tier _check>>
<<if _check.ok>>
<div class="dock-work-assignment"><b><<= _tier.label >></b> <span class="farm-work-meta"><<= _tier.minutes >> minutes, <<= setup.dockWorkDisplayedGold(_tierId, _tier) >> gold,</span> <b id="Energy">-<<= setup.playerWorkEnergyCost(_tier.energy, _tier.minutes, true) >> Energy</b>
<div class="dock-work-assignment-links"><<link setup.dockWorkAssignments.any.label>><<set $dockWorkStartResult = setup.dockWorkStart(_tierId, "any")>><<if $dockWorkStartResult.success>><<goto $dockWorkStartResult.passage>><<else>><<set $dockWorkMessage = $dockWorkStartResult.text>><<goto "DockWorkMenu">><</if>><</link>></div></div>
<<else>>
<div class="farm-work-locked"><<= _check.text >></div>
<</if>>
<</capture>>
<</for>>
</div>
<<if $dockWorkCargoQuest.state is "offered">><div class="npc-return-link"><<link "Ask about the missing baskets" "DockWorkCargoIntro">><<set $dockWorkCargoQuest.fromShift to false>><</link>></div><</if>>
<<if $dockWorkMessage>><p><em><<= $dockWorkMessage >></em></p><<set $dockWorkMessage = "">><</if>>
<div class="npc-return-link">[[Return|Ambercross Piers]]</div>
<</if>>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>A fishing boat noses in low enough that the mate has to lean down to toss you the first rope handle. Behind him, a line of iced crates is already sliding toward the open hatch. The tide is turning, and the salt shed will need the whole catch before the boards go under.</p>
<p><span class="dialogue-line dialogue-male">"Keep the boxes level,"</span> he calls. <span class="dialogue-line dialogue-male">"If you bruise my fish, I will know exactly whose hands carried it."</span> A porter beside you offers to take the other end of each load, but there are enough crates that a faster method would earn notice.</p>
<div class="npc-activity-choice-list">
<div><<link "Carry one crate at a time" "DockWorkTaskOutcome">><<set $dockWorkTaskResult = setup.dockWorkResolveTaskChoice("crates_single")>><</link>></div>
<div><<link "Flirt while the crew passes crates" "DockWorkTaskOutcome">><<set $dockWorkTaskResult = setup.dockWorkResolveTaskChoice("crates_tease")>><</link>></div>
<<if setup.dockWorkTaskAvailable("crates_double")>><div><<link "[Strength] Carry two crates together">><<set $dockWorkTaskResult = setup.dockWorkResolveTaskChoice("crates_double")>><<if $dockWorkTaskResult.failed>><<goto "DockWorkTaskSetback">><<else>><<goto "DockWorkTaskOutcome">><</if>><</link>></div><</if>>
<<if setup.dockWorkTaskAvailable("crates_direct")>><div><<link "[Dominant] Direct the crew into a passing line" "DockWorkTaskOutcome">><<set $dockWorkTaskResult = setup.dockWorkResolveTaskChoice("crates_direct")>><</link>></div><</if>>
<<if setup.dockWorkTaskFavorAvailable()>><div>[[Ask the fishmonger about a private bonus|DockWorkCratePrivateOffer]]</div><</if>>
</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>The morning net reaches the pier wrapped around itself, heavy with weed and a catch that will not survive much longer in the tangled mesh. A skipper drops a short knife beside your knee.</p>
<p><span class="dialogue-line dialogue-male">"Save the net if you can. Save the fish if you cannot. Just decide before both are worthless."</span></p>
<div class="npc-activity-choice-list">
<div><<link "Work the knots loose" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("nets_patient")>><</link>></div>
<div><<link "Cut the worst tangle" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("nets_cut")>><</link>></div>
<div><<link "Rescue the last trapped fish" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("nets_fish")>><</link>></div>
</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>A wedge kicks loose beneath a salt barrel. The barrel rolls away from the stack, gathering speed toward a crowded stretch of quay while every nearby worker discovers a different word for panic.</p>
<div class="npc-activity-choice-list">
<div><<link "Chase it down" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("barrels_chase")>><</link>></div>
<div><<link "Brace yourself in its path" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("barrels_brace")>><</link>></div>
<div><<link "Warn the workers ahead" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("barrels_warn")>><</link>></div>
</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>The fishmonger puts a chalk board in your hands while baskets move from boat to stall faster than he can count them himself. <span class="dialogue-line dialogue-male">"One mark when it lands, one slash when it sells. If the board and the pier disagree, the missing coin comes out of someone's pocket."</span></p>
<p>Buyers interrupt with questions and porters call numbers over one another, but you keep the columns straight. By the end, the remaining baskets match the unsold marks exactly.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>A merchant boat arrives after the usual unloading crews have begun packing away their hooks. Its master points to sacks of lamp oil seed and promises an extra coin if the cargo reaches dry storage before the tide covers the lower landing.</p>
<p><span class="dialogue-line dialogue-male">"Lift together, turn together, and nobody tries to be a hero alone,"</span> the senior porter tells you. You follow his count until the last sack lands safely inside and the boatmaster pays the promised bonus.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>The wind catches a returning boat broadside and pushes it toward the neighboring hull. Its skipper throws a line, but it falls short and lands on the wet edge of the pier. A young porter lunges for it with one hand already wrapped in rope.</p>
<p><span class="dialogue-line dialogue-male">"Let go of that loop!"</span> the mate shouts at him. Then he turns to you. <span class="dialogue-line dialogue-male">"Get us tied before the boats strike. Use the bollard, not your wrist."</span> There is time to work together, or to attempt the dangerous crossing yourself.</p>
<div class="npc-activity-choice-list">
<div><<link "Take the line with the mate" "DockWorkTaskOutcome">><<set $dockWorkTaskResult = setup.dockWorkResolveTaskChoice("lines_team")>><</link>></div>
<<if setup.dockWorkTaskAvailable("lines_run")>><div><<link "[Fitness] Run the length of the berth with the line">><<set $dockWorkTaskResult = setup.dockWorkResolveTaskChoice("lines_run")>><<if $dockWorkTaskResult.failed>><<goto "DockWorkTaskSetback">><<else>><<goto "DockWorkTaskOutcome">><</if>><</link>></div><</if>>
<<if setup.dockWorkTaskAvailable("lines_protect")>><div><<link "[Protective] Pull the porter clear, then catch the line" "DockWorkTaskOutcome">><<set $dockWorkTaskResult = setup.dockWorkResolveTaskChoice("lines_protect")>><</link>></div><</if>>
</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>The fishmonger plants a knife in the stained board and demonstrates the work once: open, clean, rinse, and move on before the flesh warms. <span class="dialogue-line dialogue-male">"A customer pays for fish, not hesitation. Keep the blade close and your fingers farther away."</span></p>
<p>Your first fish is ugly work. By the sixth, the motions begin to connect, and the old fisherman beside you stops checking every cut.</p>
<<set _gift = setup.dockWorkTryFishGift()>><<if _gift>><p>At the end of the shift, he picks out a small but sound fish and wraps it in scrap cloth. <span class="dialogue-line dialogue-male">"Too small for the stall, large enough for your pan. Take it before the owner remembers every scale has a price."</span></p><<print _gift>><</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>A fisherman drops a torn net across your knees, passes you a wooden needle, and shows you the knot twice. When you ask for a third demonstration, he snorts. <span class="dialogue-line dialogue-male">"The fish will find every hole you leave. They are clever when it costs us money."</span></p>
<p>The first repair sits crooked. The next follows the old mesh more closely. By the end, you can pull the net taut without opening your work again.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>A cook in the square has threatened to leave without the basket he ordered. The fishmonger knots a cloth over the catch and pushes the handle into your hands.</p>
<p><span class="dialogue-line dialogue-male">"Get there before his cart moves and there are two extra coins in it. Bring me bruised fish and you can explain the loss yourself."</span></p>
<div class="npc-activity-choice-list">
<div><<link "Run through the back lanes" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("market_fast")>><</link>></div>
<div><<link "Take the safer road" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("market_careful")>><</link>></div>
<div><<link "Try to sell him the whole basket" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("market_sell")>><</link>></div>
</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>The catch must be packed before the afternoon heat reaches the shed. When you open the last salt barrel, the upper layer looks white enough, but the bottom has turned damp and clotted where seawater slipped beneath the lid. The fishmonger is outside arguing over a delivery, and nobody else has stopped filling casks.</p>
<p><span class="dialogue-line dialogue-male">"We have not got the day to waste,"</span> the packer beside you mutters. <span class="dialogue-line dialogue-male">"Use what is there or find me something dry. If the fish spoils, he will come for whoever sealed it."</span></p>
<div class="npc-activity-choice-list">
<<if setup.dockWorkTaskAvailable("salt_own")>><div><<link "Use a portion of your own salt" "DockWorkTaskOutcome">><<set $dockWorkTaskResult = setup.dockWorkResolveTaskChoice("salt_own")>><</link>></div><</if>>
<<if setup.dockWorkTaskAvailable("salt_fetch")>><div><<link "Run to the market stores for dry salt" "DockWorkTaskOutcome">><<set $dockWorkTaskResult = setup.dockWorkResolveTaskChoice("salt_fetch")>><</link>></div><</if>>
<div><<link "Spread the damp salt to dry it">><<set $dockWorkTaskResult = setup.dockWorkResolveTaskChoice("salt_dry")>><<if $dockWorkTaskResult.failed>><<goto "DockWorkTaskSetback">><<else>><<goto "DockWorkTaskOutcome">><</if>><</link>></div>
<<if setup.dockWorkTaskAvailable("salt_report")>><div><<link "[Honest] Show the spoiled supply to the fishmonger" "DockWorkTaskOutcome">><<set $dockWorkTaskResult = setup.dockWorkResolveTaskChoice("salt_report")>><</link>></div><</if>>
</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>Water spills over the lowest boards earlier than the crew expected. Someone has left baskets, hooks, and a crate of tools on the landing, and every wave lifts them a little closer to the edge.</p>
<p><span class="dialogue-line dialogue-male">"Tools first, catch second, empty baskets last!"</span> the foreman calls. You follow the order, running each load above the wet line until the final basket comes away with water swirling around your ankles.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>Halfway through unloading a shellfish boat, the bottom of a basket gives way. Mussels scatter across the deck and one furious crab claims the open pier, claws raised at anyone foolish enough to approach.</p>
<p><span class="dialogue-line dialogue-male">"Do not just admire him,"</span> the skipper calls. <span class="dialogue-line dialogue-male">"That little bastard is still part of my cargo."</span></p>
<div class="npc-activity-choice-list">
<div><<link "Catch it and return it" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("crab_return")>><</link>></div>
<div><<link "Ask to keep it as payment" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("crab_keep")>><</link>></div>
<div><<link "Guide it back into the water" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("crab_release")>><</link>></div>
</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>A buyer insists that two baskets never reached his cart. The fishmonger says the pier tally is complete. Their voices rise while porters begin slowing down to listen.</p>
<p>The fishmonger pushes the chalk board toward you. <span class="dialogue-line dialogue-male">"You handled the stack. Find me the truth before his temper starts costing more than the fish."</span></p>
<div class="npc-activity-choice-list">
<div><<link "Rebuild the count from the marks" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("ledger_recount")>><</link>></div>
<div><<link "Challenge the buyer's story" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("ledger_confront")>><</link>></div>
<div><<link "Give the facts to the fishmonger" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveChoice("ledger_owner")>><</link>></div>
</div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>The horizon disappears behind a grey wall and the harbor birds abandon the water all at once. The fishmonger looks up, swears, and starts issuing orders before the first gust reaches the pier.</p>
<p><span class="dialogue-line dialogue-male">"Canvas tied at all four corners. Loose crates inside. Boats get a second line. Move now or chase everything through the village later."</span></p>
<p>Rain strikes while you are securing the final cover. He checks the knot, finds it sound, and adds a coin to your wage for staying in the weather until the pier is ready.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>>
<div class="npc-activity-panel">
<<set _worker = setup.dockWorkTrialNpc()>>
<<if not _worker>>
<p>No one is hiring for dock work right now.</p>
<div class="npc-return-link">[[Return|Ambercross Piers]]</div>
<<elseif $DockworkAccept is 1>>
<p><<= setup.npcDisplayName(_worker) >> gives you a short nod. <span class="dialogue-line dialogue-male">"You are already on the list. If you want coin, pick up work while there is daylight."</span></p>
<div class="npc-return-link">[[Return|Ambercross Piers]]</div>
<<elseif $DockTrialRejectedDay is setup.npcCurrentDay()>>
<p><<= setup.npcDisplayName(_worker) >> sees you approaching and turns back to the fish laid across his cutting board.</p>
<p><span class="dialogue-line dialogue-male">"Not today. Come back tomorrow when you are ready to finish what you start."</span></p>
<div class="npc-return-link">[[Return|Ambercross Piers]]</div>
<<else>>
<p>You wait until <<print setup.npcEventMentionHtml(_worker, "the fishmonger")>> has finished weighing a basket of silver-scaled fish before asking whether the piers have room for another pair of hands. He wipes his knife, gives your arms and stance a measured look, and points along the quay.</p>
<<print setup.npcEventDialogueHtml(_worker, "Start with those iced crates. Carry them from the landing to the salt shed without dropping the catch. After that, take the bow line from the next boat and make her fast before the tide swings her into the posts.", "The fishmonger")>>
<p>His gaze settles on you again. <span class="dialogue-line dialogue-male">"Do both without making yourself someone else's problem, and I will put your name on the work list."</span></p>
<div class="farm-trial-actions">
<div><<link "Start the trial" "DockWorkTrial">><<set $DockTrialStarted to true>><</link>></div>
<<if setup.dockWorkCanOfferShortcut()>>
<div>[[Offer a blowjob instead|DockTrialBlowjobOffer]]</div>
<</if>>
<div>[[Leave|Ambercross Piers]]</div>
</div>
<</if>>
</div><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>The tide is coming in beneath the boards, lifting the moored boats until their ropes creak against the posts. The fishmonger leaves you no time to settle in: the catch must be moved before the ice melts, and the next boat is already drifting toward its berth.</p>
<div class="farm-trial-actions">
<div><<if $DockTrialCrates>>Haul the fish crates <span class="farm-work-meta">Done</span><<elseif $c.energy gte 3>><<link "Haul the fish crates">><<set $c.energy -= 3>><<run setup.advanceTime(25)>><<if $c.strength gte 10>><<set $DockTrialCrates to true>><<goto "DockTrialCratesPass">><<else>><<set $DockTrialFailedTask to "crates">><<goto "DockTrialHandjobOwed">><</if>><</link>> <b id="Energy">(-3 Energy)</b><<else>><b id="Failure">You are too exhausted to risk lifting the iced crates.</b><</if>></div>
<div><<if $DockTrialLines>>Secure the mooring lines <span class="farm-work-meta">Done</span><<elseif $c.energy gte 3>><<link "Secure the mooring lines">><<set $c.energy -= 3>><<run setup.advanceTime(25)>><<if $c.fitness gte 8>><<set $DockTrialLines to true>><<goto "DockTrialLinesPass">><<else>><<set $DockTrialFailedTask to "lines">><<goto "DockTrialHandjobOwed">><</if>><</link>> <b id="Energy">(-3 Energy)</b><<else>><b id="Failure">You are too exhausted to work safely at the water's edge.</b><</if>></div>
<<if $DockTrialCrates and $DockTrialLines>><div>[[Report to the fishmonger|DockTrialComplete]]</div><</if>>
<div>[[Return|Ambercross Piers]]</div>
</div>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<p>Cold water runs over your fingers as you hook both hands beneath the first crate. It is packed tight with fish and crushed ice, heavy enough to pull at your shoulders with every step. You carry it across the uneven boards, set it inside the salt shed, and return for the next before anyone has to call for you.</p>
<p>By the last trip, your sleeves are wet and your arms ache, but the landing is clear and not a single fish has been lost beneath the pier.</p>
<p><b id="Strgain">You prove you have the strength for pier work.</b></p>
<div class="farm-trial-result-link">[[Continue the trial|DockWorkTrial]]</div>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<p>The incoming boat rides higher on the tide than you expect. Its bow line lands across the wet boards with a slap, and you seize it before the current can pull it back. The rope strains through your hands while the hull swings toward the timber posts.</p>
<p>You move with the pull instead of fighting it, brace one foot against the bollard, and take up the slack at the right moment. The knot holds. The boat settles against its fenders without striking the pier.</p>
<p><b id="Fitnessgain">You prove you can keep your footing on the pier.</b></p>
<div class="farm-trial-result-link">[[Continue the trial|DockWorkTrial]]</div>
</div><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $DockTrialCrates and $DockTrialLines>>
<<set $DockworkAccept to 1>><<set $Dockworkskill to Math.max($Dockworkskill || 1, 1.5)>>
<p>You report back with sore arms, damp shoes, and no excuses worth mentioning. The fishmonger studies you for a moment before giving a grudging nod.</p>
<p><span class="dialogue-line dialogue-male">"Fine. Come during working hours and I will put you where you are useful."</span></p>
<p><b>Dock work is now available at the piers.</b></p>
<<else>>
<p>You have not finished the trial yet.</p>
<</if>>
<div class="farm-trial-result-link">[[Return to the piers|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<set _worker = setup.dockWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $DockTrialFailedTask is "crates">>
<p>The second crate shifts as you lift it. Its sodden rope handle bites into your palm, your arms give, and one corner strikes the boards hard enough to split a slat. Meltwater and fish spill across the landing while two dockhands abandon their own work to save the catch.</p>
<<else>>
<p>The bow line snaps taut before you are ready. Your boots skid across the wet boards and the rope tears free of your grip. A dockhand catches it before the boat strikes the posts, but only after dropping the basket he had been carrying.</p>
<</if>>
<p><<print setup.npcEventMentionHtml(_worker, "The fishmonger")>> sends the others back to work, then faces you with his jaw set.</p>
<<print setup.npcEventDialogueHtml(_worker, "You cost me time and pulled good hands away from their work. If you still want your name on my list, come behind the stall and use your hand to make the loss worth mine. Otherwise, walk away and try another day when you can actually do something right.", "The fishmonger")>>
<p>The demand is unmistakable. He is offering you the job despite the failed trial, but only if you agree to settle the matter on his terms.</p>
<div class="farm-trial-actions">
<<if setup.dockWorkTrialFavorAvailable("handjob")>><div>[[Accept his demand|DockTrialHandjobAccept]]</div><</if>>
<div>[[Refuse and walk away|DockTrialWalkAway]]</div>
</div>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !setup.dockWorkCanOfferShortcut()>>
<p>You think about offering something more direct, but the nerve is not quite there.</p>
<div class="farm-trial-result-link">[[Return|DockWorkAsk]]</div>
<<else>>
<p>Instead of reaching for the crates, you stay beside the counter and lower your voice. You tell him plainly that you could prove useful on your knees, without making him spend the afternoon judging your work.</p>
<p>The fishmonger studies your face to make certain the offer is deliberate. Then he hooks a thumb toward the canvas partition behind the stall. <span class="dialogue-line dialogue-male">"Finish what you just offered, and I will put your name on the list. No crates. No ropes."</span></p>
<p>You know what following him means. The public pier will be only a sheet of canvas away, and you will have to satisfy him before he considers the bargain paid.</p>
<div class="farm-trial-result-link"><<link "Follow him">><<set $DockTrialStarted to true>><<set _start = setup.dockWorkStartTrialFavor("blowjob")>><<if _start.success is false>><<set $dockWorkMessage = _start.text>><<goto "Ambercross Piers">><<else>><<goto "NPCEncounter">><</if>><</link>></div>
<</if>>
</div><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>><<set $DockworkAccept to 1>><<set $DockTrialCrates to true>><<set $DockTrialLines to true>><<set $DockTrialFailedTask to "">><<set $DockTrialRejectedDay to 0>><<set $Dockworkskill to Math.max($Dockworkskill || 1, 1.25)>>
<div class="npc-activity-panel farm-work-event-panel">
<p>You return to the open air with the smell of salt and fish waiting like nothing changed. The fishmonger straightens his coat and gives you a practical nod.</p>
<p><span class="dialogue-line dialogue-male">"Come back during working hours,"</span> he says. <span class="dialogue-line dialogue-male">"I will find something for you to do."</span></p>
<p><b>Dock work is now available at the piers.</b></p>
<div class="farm-trial-result-link">[[Return to the piers|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<set _worker = setup.dockWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if setup.dockWorkTrialFavorAvailable("handjob")>>
<p>Walking away would leave the failed trial as the only thing he remembers about you. You hold his gaze and give a small nod instead.</p>
<p><span class="dialogue-line dialogue-player">"All right. I will make it worth your time."</span></p>
<p><<if _worker>><<= setup.npcDisplayName(_worker) >><<else>>The fishmonger<</if>> lifts the side of the canvas partition and waits for you to pass. Your pulse quickens as you step out of sight of the quay. In a moment, he expects your hand on him and your full attention until he is satisfied; afterward, your place among the dockworkers will be settled.</p>
<div class="farm-trial-result-link"><<link "Follow him behind the stall">><<set _start = setup.dockWorkStartTrialFavor("handjob")>><<if _start.success is false>><<set $dockWorkMessage = _start.text>><<goto "Ambercross Piers">><<else>><<goto "NPCEncounter">><</if>><</link>></div>
<<else>>
<p>You cannot bring yourself to accept his terms. The failed trial is all he will have to judge you by today.</p>
<div class="farm-trial-result-link">[[Refuse and walk away|DockTrialWalkAway]]</div>
<</if>>
</div><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>><<set _worker = setup.dockWorkTrialNpc()>><<set $DockTrialRejectedDay to setup.npcCurrentDay()>><<set $DockTrialStarted to false>><<set $DockTrialCrates to false>><<set $DockTrialLines to false>><<set $DockTrialFailedTask to "">>
<div class="npc-activity-panel farm-work-event-panel">
<p>You refuse. Whatever chance the trial offered, you will not pay for the mistake that way. You leave him beside the stall and step back into the traffic of the quay.</p>
<p><<if _worker>><<= setup.npcDisplayName(_worker) >><<else>>The fishmonger<</if>> does not follow. <span class="dialogue-line dialogue-male">"Then we are finished for today. Try again tomorrow, when you can actually do something right."</span></p>
<p><b id="Failure">The dock trial has ended. You may ask again on another day.</b></p>
<p>You have no wish to go back on your answer. Even so, the private bargain he named returns to mind as you leave the pier.</p>
<<set $dockTrialRefusalRewards = $dockTrialRefusalRewards || {}>>
<<print setup.jobRefusedIntimacyHtml($dockTrialRefusalRewards, "trial_" + $DockTrialRejectedDay)>>
<div class="farm-trial-result-link">[[Return to the piers|Ambercross Piers]]</div>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $dockWorkChoiceResult>>
<<print $dockWorkChoiceResult.text>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<print $dockWorkChoiceResult.bonusHtml>>
<<print $dockWorkChoiceResult.itemHtml>>
<<if $dockWorkChoiceResult.standingHtml>><<print $dockWorkChoiceResult.standingHtml>><</if>>
<<set $dockWorkChoiceResult to null>>
<<else>>
<p>The rest of the work passes without incident.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<</if>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !$dockWorkTaskResult or $dockWorkTaskResult.invalid>>
<p>The assignment is already over.</p>
<<else>>
<<set _choice = $dockWorkTaskResult.choiceId>>
<<if _choice is "crates_single">>
<p>You and the porter settle into a steady exchange. He passes a crate up, you carry it level to the shed, and you return before the next one reaches the boards. It is not a showy pace, but not a single lid cracks or fish spills.</p>
<p>The mate tests the last crate with his boot. <span class="dialogue-line dialogue-male">"Good. I can sell every one of these."</span> His praise is plain, which makes it more convincing.</p>
<<elseif _choice is "crates_double">>
<p>You take a handle in each hand and lift two crates at once. The rope bites deep, but you keep the loads apart and walk slowly enough that neither box tilts. The waiting crew parts to let you through.</p>
<p>When you set them down, the mate drops two extra coins beside your ordinary wage. <span class="dialogue-line dialogue-male">"That saved us another trip against the tide. Do it again when I have a boat to empty."</span></p>
<<elseif _choice is "crates_direct">>
<p>You stop the shouting and put each worker in a place where the crates can pass from hand to hand. One man starts to object, but the next load is already moving before he finds the words.</p>
<p>The mate watches the line clear the hatch. <span class="dialogue-line dialogue-male">"You could have asked first,"</span> he says, then glances at the empty boat. <span class="dialogue-line dialogue-male">"But I would have told you to do exactly that."</span></p>
<<elseif _choice is "crates_tease">>
<p>A dockhand watches you bend for another crate instead of reaching for his end. <span class="dialogue-line dialogue-male">"Keep lifting like that and I will forget the fish to watch your tits,"</span> he says. You make him take the handle before you answer.</p>
<p><span class="dialogue-line dialogue-player">"Watch the load, or you will owe me for doing your half too."</span> He laughs, flushed, and gets back to work. You keep the crates moving, though his attention leaves a warmth that stays with you after the shift.</p>
<<elseif _choice is "lines_team">>
<p>You call the mate to the other side of the bollard. He takes the first pull while you feed slack around the timber, then you change places as the boat swings. The rope never touches a wrist, and the hull settles softly against its fenders.</p>
<p>The young porter rubs his freed hand. <span class="dialogue-line dialogue-male">"I thought I could hold it myself."</span> You show him where the line should have gone instead.</p>
<<elseif _choice is "lines_run">>
<p>You take the line and run the full berth, boots striking wet planks while the hull bears down on its neighbor. At the last post you loop the rope around a bollard and lean back. The vessel turns just enough to clear the other boat.</p>
<p>The skipper steps ashore, looks at the narrow gap between the hulls, and presses a rush payment into your palm. <span class="dialogue-line dialogue-male">"That was close enough. Next time I will aim the throw properly."</span></p>
<<elseif _choice is "lines_protect">>
<p>You seize the porter by the back of his coat and drag him clear before the rope can tighten around his hand. Then you catch the loose end against the post while the mate takes the strain. The boat comes in hard but safely.</p>
<p>The porter stares at his unhurt fingers. <span class="dialogue-line dialogue-male">"I did not see the loop."</span> The mate nods toward you. <span class="dialogue-line dialogue-male">"She did. Remember that."</span></p>
<<elseif _choice is "salt_own">>
<p>You bring out a portion of your own dry salt and work it carefully between the last layers of fish. The cask seals without a damp pocket. The fishmonger notices the missing supply only when you show him the spoiled barrel.</p>
<p><span class="dialogue-line dialogue-male">"You used yours? Then I owe you for that and for thinking before the catch went bad."</span> He repays you from the sale and marks the barrel for replacement.</p>
<p class="farm-work-gain-line"><b>-1 Salt</b> from your supplies.</p>
<<elseif _choice is "salt_dry">>
<p>You spread the damp salt thin over a clean board and turn it until the worst of the moisture is gone. It costs part of the shift, but the grains separate again. You pack only after testing a fistful against the dry salt above it.</p>
<p>The fishmonger breaks the seal on one cask and checks your work. <span class="dialogue-line dialogue-male">"Not the method I expected. It will keep."</span></p>
<<elseif _choice is "salt_fetch">>
<p>You leave the casks unsealed and hurry to the market stores for a dry barrel. The run costs you time and breath, but you return before the fish begins to warm. The packer grumbles until he sees the fresh supply, then helps you finish the layers properly.</p>
<p><span class="dialogue-line dialogue-male">"Better twenty minutes late than a winter barrel full of rot,"</span> the fishmonger says when he checks the work.</p>
<p class="farm-work-gain-line"><b id="Energy">-2 Energy</b> and twenty additional minutes.</p>
<<else>>
<p>You carry the clotted salt out into daylight and call the fishmonger over before another cask is sealed. He swears at the leaking barrel, then orders fresh salt fetched from the market rather than risk the winter store.</p>
<p><span class="dialogue-line dialogue-male">"That delay is cheaper than spoiled fish,"</span> he says. <span class="dialogue-line dialogue-male">"Next time somebody tells you to hide a bad supply, tell me who."</span></p>
<</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<print $dockWorkTaskResult.bonusHtml>>
<<print $dockWorkTaskResult.standingHtml>>
<<print $dockWorkTaskResult.personalityHtml>>
<<print $dockWorkTaskResult.arousalHtml>>
<<set $dockWorkTaskResult to null>>
<</if>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<set _worker = setup.dockWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !$dockWorkTaskResult or !$dockWorkTaskResult.failed>>
<p>The damaged load has already been dealt with.</p>
<div>[[Return to the piers|Ambercross Piers]]</div>
<<else>>
<<if $dockWorkTaskResult.event is "crates">>
<p>The second crate slips as you turn toward the shed. It hits the boards on one corner and splits open. Fish and ice skid toward the water, and two porters leave their own loads to stop the loss.</p>
<<elseif $dockWorkTaskResult.event is "lines">>
<p>Your foot slips on a wet plank before you can set the line. The boat clips a fender hard enough to tear it loose, and another worker has to haul the rope clear of the water while you recover your footing.</p>
<<else>>
<p>The salt looked dry on the board, but the first sealed cask begins to weep through the stave. The fishmonger opens it and finds damp clumps against the fish. It has to be unpacked before the catch spoils.</p>
<</if>>
<p><<if _worker>><<= setup.npcDisplayName(_worker) >><<else>>The fishmonger<</if>> looks at the interrupted work, then at you. <span class="dialogue-line dialogue-male">"You earned the ordinary wage. This mistake is another matter. Put it right, pay for what was lost, or leave me to remember who caused it."</span></p>
<<print $dockWorkTaskResult.standingHtml>>
<<if $dockWorkTaskFavorRefusalHtml>><p>You turn down the private solution. His suggestion follows you back to the damaged load, but it has no place in the debt you choose to settle.</p><<print $dockWorkTaskFavorRefusalHtml>><<set $dockWorkTaskFavorRefusalHtml = null>><</if>>
<div class="npc-activity-choice-list">
<<if $c.energy gte 2>><div><<link "Stay and repair the damage" "DockWorkTaskSetbackResult">><<set $dockWorkSetbackResult = setup.dockWorkResolveSetback("repair")>><</link>></div><</if>>
<div><<link "Let him withhold two gold" "DockWorkTaskSetbackResult">><<set $dockWorkSetbackResult = setup.dockWorkResolveSetback("pay")>><</link>></div>
<<if setup.dockWorkTaskFavorCanOffer()>><div>[[Hear his private offer|DockWorkTaskFavorIntro]]</div><</if>>
<div><<link "Leave the matter unsettled" "DockWorkTaskSetbackResult">><<set $dockWorkSetbackResult = setup.dockWorkResolveSetback("leave")>><</link>></div>
</div>
<</if>>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $dockWorkSetbackResult>>
<<if $dockWorkSetbackResult.choiceId is "repair">>
<p>You stay after the rest of the crew has moved on. Wet rope, broken boards, and spoiled packing are not repaired by excuses, so you work beside the fishmonger until the damage is contained. He tests the last knot himself.</p>
<p><span class="dialogue-line dialogue-male">"That is the answer I wanted. Next time, make the first attempt as careful as this one."</span></p>
<p class="farm-work-gain-line"><b id="Energy">-2 Energy</b> and twenty more minutes on the pier.</p>
<<elseif $dockWorkSetbackResult.choiceId is "pay">>
<p>You let him deduct the loss from your wage. He counts out the remainder where you can see it, then sends another hand to finish the damaged work.</p>
<p><span class="dialogue-line dialogue-male">"Square between us. Do better on the next load."</span></p>
<<else>>
<p>You leave the pier without offering coin or another hour of labor. The fishmonger does not follow, but the crew hears him name the job you left unfinished.</p>
<p><span class="dialogue-line dialogue-male">"I will remember who I can trust when the boats come in tomorrow."</span></p>
<</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<print $dockWorkSetbackResult.bonusHtml>>
<<print $dockWorkSetbackResult.standingHtml>>
<<set $dockWorkSetbackResult to null>>
<</if>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<set _worker = setup.dockWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>The fishmonger waits until the others are out of earshot. He tilts his head toward the canvas screen behind the stall. <span class="dialogue-line dialogue-male">"There is another way you could make it worth my trouble. Use your hand on my cock until I am satisfied, and we can forget the loss."</span></p>
<p>The suggestion is his, not a condition of keeping the wage you already earned. You can refuse and settle the damage another way. If you accept, the canvas will hide you from the quay but not carry you away from what you have agreed to do.</p>
<div class="npc-activity-choice-list">
<<if setup.dockWorkTaskFavorAvailable()>><div><<link "Go behind the screen (handjob)">><<set _start = setup.dockWorkStartTaskFavor()>><<if _start.success is false>><<set $dockWorkEventFavorResult = { paid: false }>><<goto "DockWorkTaskFavorReturn">><<else>><<goto "NPCEncounter">><</if>><</link>></div><</if>>
<<if not setup.dockWorkTaskFavorAvailable()>><p>You cannot bring yourself to accept what he is asking. His proposal changes nothing about the other ways you can settle the damage.</p><</if>>
<div><<link "Go back and choose another way" "DockWorkTaskSetback">><<set $dockWorkTaskFavorRefusalHtml = setup.jobRefusedIntimacyHtml($dockWorkTaskResult, "setback_favor")>><</link>></div>
</div>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $dockWorkEventFavorResult and $dockWorkEventFavorResult.paid>>
<p>You straighten your clothes behind the screen before joining the crew again. The fishmonger meets your eyes only long enough to nod toward the next boat.</p>
<p><span class="dialogue-line dialogue-male">"We are square. Nothing more owed for that mistake."</span></p>
<<print $dockWorkEventFavorResult.standingHtml>>
<<else>>
<p>The private arrangement did not settle the loss. The ordinary wage remains yours, but the damage still weighs on how the fishmonger sees your work.</p>
<</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<set $dockWorkEventFavorResult to null>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>><<set _worker = setup.dockWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>The catch is counted twice on the pier: once when the boats unload and again when the buyers take their baskets. Today the numbers refuse to agree. <<print setup.npcEventMentionHtml(_worker, "The fishmonger")>> turns a chalk board around so you can see two empty spaces where paid cargo should have been.</p>
<<print setup.npcEventDialogueHtml(_worker, "It has happened before. Not enough to ruin me, enough to make me look foolish. I want to know whether a buyer is cheating us or one of my own hands is taking fish out the back. You have worked here long enough to notice what I miss.", "The fishmonger")>>
<p>He does not name a suspect. The next load is coming in, and there are several ways to start looking without announcing that anyone is under suspicion.</p>
<div class="npc-activity-choice-list">
<<if setup.playerAttributeMeets("intelligence", 8)>><div><<link "[Intelligence] Compare the chalk marks and receipts" "DockWorkCargoLeadResult">><<set $dockWorkCargoLeadBonus = setup.dockWorkCargoTakeLead("tally")>><</link>></div><</if>>
<<if setup.playerAttributeMeets("fitness", 8)>><div><<link "[Fitness] Follow the departing carts" "DockWorkCargoLeadResult">><<set $dockWorkCargoLeadBonus = setup.dockWorkCargoTakeLead("path")>><</link>></div><</if>>
<div><<link "Ask the older porter what he saw" "DockWorkCargoLeadResult">><<set $dockWorkCargoLeadBonus = setup.dockWorkCargoTakeLead("witness")>><</link>></div>
<div><<link "Leave the question for another day" "DockWorkCargoLeadResult">><<set $dockWorkCargoQuest.state to "offered">><</link>></div>
</div>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $dockWorkCargoQuest.state is "offered">>
<p>You tell the fishmonger you have not seen enough to accuse anyone. He lowers the tally board and does not press you.</p>
<p><span class="dialogue-line dialogue-male">"Fair. The numbers will still be here when you are ready to look."</span></p>
<<else>>
<<if $dockWorkCargoQuest.clue is "tally">>
<p>You compare the chalk marks with the buyer receipts. The missing baskets were marked as unloaded but never struck off as sold. Whoever moved them knew which side of the board the fishmonger would check first.</p>
<<elseif $dockWorkCargoQuest.clue is "path">>
<p>You follow the carts far enough to see one turn down a storehouse lane that serves no buyer on the list. The driver has no reason to notice you among the other people crossing the square, but you remember the worn red cord on his load.</p>
<<else>>
<p>The older porter keeps coiling rope while you ask. Only when the others walk off does he admit he saw a basket carried toward the back stores after the count was finished. He will tell you more if you catch him alone on another shift.</p>
<</if>>
<p>The fishmonger listens without interrupting. <span class="dialogue-line dialogue-male">"Keep that to yourself for now. Watch the next shipment, then bring me a name I can defend in front of the crew."</span></p>
<<print $dockWorkCargoLeadBonus>>
<<set $dockWorkCargoLeadBonus to "">>
<</if>>
<<if $dockWorkCargoQuest.fromShift>><<print setup.dockWorkRewardHtml($lastDockWorkResult)>><<set $dockWorkCargoQuest.fromShift to false>><</if>>
<div class="farm-trial-result-link">[[Return to the piers|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>><<set _worker = setup.dockWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $dockWorkCargoQuest.state !== "active">>
<p>The matter is no longer in your hands.</p>
<div>[[Return to the piers|Ambercross Piers]]</div>
<<else>>
<p>Another boat unloads while <<print setup.npcEventMentionHtml(_worker, "the fishmonger")>> pretends to concern himself only with the price. He leaves you near the tally board with a clear view of the carts, the back stores, and the crew passing baskets between them.</p>
<<if $dockWorkCargoQuest.clue is "tally">>
<p>A fresh mark appears on the unloading side of the board. The same hand reaches toward the sales column a moment later, ready to erase a basket before any buyer has paid for it.</p>
<<elseif $dockWorkCargoQuest.clue is "path">>
<p>A cart with worn red cord waits at the edge of the quay again. Its driver glances toward the main market road, then begins to turn toward the back lane you followed yesterday.</p>
<<else>>
<p>The older porter catches your eye and touches two fingers to his cap. He knows more than he said yesterday, but he will not name a fellow worker with the whole crew listening.</p>
<</if>>
<<print setup.npcEventDialogueHtml(_worker, "Do you have the answer?", "The fishmonger")>>
<p>He asks without looking up from his ledger. He wants proof more than a performance.</p>
<div class="npc-activity-choice-list">
<<if $dockWorkCargoQuest.clue is "tally" and setup.playerAttributeMeets("intelligence", 8)>><div><<link "[Intelligence] Catch the false entry as it is made" "DockWorkCargoOutcome">><<set $dockWorkCargoResult = setup.dockWorkCargoResolve("ledger")>><</link>></div><</if>>
<<if $dockWorkCargoQuest.clue is "path" and setup.playerAttributeMeets("fitness", 8)>><div><<link "[Fitness] Follow the red-cord cart to its buyer" "DockWorkCargoOutcome">><<set $dockWorkCargoResult = setup.dockWorkCargoResolve("cart")>><</link>></div><</if>>
<<if $dockWorkCargoQuest.clue is "witness">><div><<link "Speak to the porter away from the crew" "DockWorkCargoOutcome">><<set $dockWorkCargoResult = setup.dockWorkCargoResolve("porter")>><</link>></div><</if>>
<<if setup.playerHasTrait("dominant")>><div><<link "[Dominant] Stop the shipment and demand an account" "DockWorkCargoOutcome">><<set $dockWorkCargoResult = setup.dockWorkCargoResolve("command")>><</link>></div><</if>>
<div><<link "Follow the lead quietly and show the fishmonger" "DockWorkCargoOutcome">><<set $dockWorkCargoResult = setup.dockWorkCargoResolve("careful")>><</link>></div>
<div><<link "Accuse the first porter before the cargo leaves" "DockWorkCargoOutcome">><<set $dockWorkCargoResult = setup.dockWorkCargoResolve("guess")>><</link>></div>
</div>
<</if>>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $dockWorkCargoResult and $dockWorkCargoResult.success>>
<<if $dockWorkCargoResult.approach is "careful">>
<p>You stay out of the way until the missing basket reaches its hiding place. Then you bring the fishmonger to the back store and show him the unmarked cargo. The worker responsible has little room left for excuses, though the matter stays between the crew.</p>
<p><span class="dialogue-line dialogue-male">"Quiet work. I can settle this without turning every boat into an argument."</span> He gives you a share of what was recovered.</p>
<<elseif $dockWorkCargoResult.approach is "porter">>
<p>You wait for the older porter beside the back store. Away from the crew, he finally tells you which worker carried off a basket after the unloading count. Together you follow the man and find the fish hidden beneath an empty canvas.</p>
<p>The fishmonger sees the basket for himself before speaking to the worker. <span class="dialogue-line dialogue-male">"You gave me a witness and the catch. No one can call that a rumor."</span> He sends the fish back to the stall and shares the recovered sale with you.</p>
<<elseif $dockWorkCargoResult.approach is "ledger">>
<p>You catch the second chalk stroke before it can erase the basket from the sales side of the tally. The worker holding the board claims a mistake, but the basket is already behind the stores instead of on a buyer's cart.</p>
<p>The fishmonger checks both marks against the crate seal. <span class="dialogue-line dialogue-male">"That is the gap I could not find. Good eyes."</span> He reclaims the fish and shares the recovered sale with you.</p>
<<elseif $dockWorkCargoResult.approach is "cart">>
<p>You trail the red-cord cart through the market, keeping enough distance that its driver never looks back. It stops at a storehouse with no buyer's mark over the door. You fetch the fishmonger before the load can disappear inside.</p>
<p>He checks the seal on the hidden basket, then turns to you. <span class="dialogue-line dialogue-male">"A fast pair of legs was worth more than another argument on the pier."</span> He recovers the fish and gives you part of the sale.</p>
<<else>>
<p>You stop the next load and make the crew account for every basket before anyone can move on. One porter tries to hurry a crate past without a buyer's mark. When you insist on opening it, the missing fish is still inside.</p>
<p>The fishmonger sends the catch back to the stall and pays you from the recovered sale. <span class="dialogue-line dialogue-male">"You made them answer while the proof was still in their hands. That matters here."</span></p>
<</if>>
<<else>>
<p>You point to a porter before the missing basket has passed through his hands. He opens his empty cart for everyone to see. The real load disappears into the back lane while the crew argues over your accusation.</p>
<p>The fishmonger cuts the quarrel short. <span class="dialogue-line dialogue-male">"I asked you for proof, not a name to shout. Keep watching. We will try again when there is another shipment."</span></p>
<</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<if $dockWorkCargoResult>><<print $dockWorkCargoResult.bonusHtml>><<print $dockWorkCargoResult.standingHtml>><</if>>
<<set $dockWorkCargoResult to null>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<set _worker = setup.dockWorkTrialNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>You finish the last ordinary crate before approaching <<print setup.npcEventMentionHtml(_worker, "the fishmonger")>>. The mate has gone back aboard, leaving the two of you beside the salt shed where the crew cannot hear every word. You tell him you could offer a more personal kind of help if there is coin in it.</p>
<p>He takes his time looking you over.</p>
<<print setup.npcEventDialogueHtml(_worker, "Three extra gold for a handjob below deck. Your ordinary wage is yours either way. I will only pay the extra if you finish what you offered.", "The fishmonger")>>
<p>The boat's small storage cabin is empty for the moment. You can take the bargain there or leave him with his coins and return to the public pier.</p>
<div class="npc-activity-choice-list">
<<if _worker and setup.dockWorkTaskFavorAvailable()>>
<div><<link "Follow him below deck (handjob)">><<if setup.jobPropositionRecord()>><<set $pendingDockWorkEventFavor = { npcId: _worker.id, tone: "ordinary" }>><<set _start = setup.dockWorkStartEventFavor("handjob", 3, "DockWorkCrateSexReturn")>><<if _start.success is false>><<set $dockWorkMessage = _start.text>><<goto "Ambercross Piers">><<else>><<goto "NPCEncounter">><</if>><<else>><<goto "Ambercross Piers">><</if>><</link>></div>
<</if>>
<div>[[Keep the ordinary wage and go|DockWorkCratePrivateRefuse]]</div>
</div>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<p>You decide the additional coin is not worth leaving the shift for. The fishmonger closes his hand around the three gold without complaint.</p>
<p><span class="dialogue-line dialogue-male">"Fair enough. There is always another boat to unload."</span> The matter stays between you.</p>
<p>You keep your wage and your answer. The private suggestion follows you back to the crates longer than the fishmonger does.</p>
<<print setup.jobRefusedIntimacyHtml($lastDockWorkResult, "crate_private")>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<p>You climb back to the pier as the last crates are stacked by the salt shed. The fishmonger comes up behind you and checks the load before he speaks, keeping the private bargain away from the crew.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<if $dockWorkEventFavorResult and $dockWorkEventFavorResult.paid>>
<p><span class="dialogue-line dialogue-male">"The fish is in good order, and I keep my word."</span> He adds the promised coins to your ordinary wage.</p>
<p class="farm-work-gain-line">Private arrangement: <b id="Goldgain">+<<= $dockWorkEventFavorResult.gold >> Gold</b></p>
<<if $dockWorkEventFavorResult.standingHtml>><<print $dockWorkEventFavorResult.standingHtml>><</if>>
<<else>>
<p>The extra bargain was not completed, so there are no extra coins. The ordinary wage for the crates remains yours.</p>
<</if>>
<<set $dockWorkEventFavorResult to null>><<set $dockWorkFavorAction to "">><<set $dockWorkFavorGold to 0>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<set _offer = $dockWorkBreastOffer>><<set _npc = _offer ? setup.getNpcById(_offer.npcId) : null>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _npc>>
<p>The last crate reaches the shed while the other hands argue over whose turn it is to scrub the deck. <<print setup.npcEventMentionHtml(_npc, "The fishmonger")>> asks you to bring the tally beneath his canvas awning. He checks the count, then folds the paper without dismissing you.</p>
<<print setup.npcEventDialogueHtml(_npc, "You have earned your wage. I would add two gold if you let me touch your breasts for a moment. No one else needs to know, and saying no will not cost you the work you did.", "The fishmonger")>>
<p>The awning screens you from the crew, but the choice is still yours. He waits for an answer rather than reaching for you.</p>
<div class="npc-activity-choice-list">
<<if setup.dockWorkBreastOfferCanAccept()>><div>[[Accept and bare your breasts|DockWorkBreastOfferUndress]]</div><<else>><p>You cannot bring yourself to agree to this bargain.</p><</if>>
<div>[[Keep the ordinary wage|DockWorkBreastOfferDecline]]</div>
</div>
<<else>>
<p>The fishmonger is called away before you can answer. The work is finished, and your ordinary wage remains yours.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
<</if>>
</div><</nobr>><<nobr>><<set _revealed = setup.dockWorkBreastOfferDecline()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _revealed>>
<p>You draw your clothing back into place and tell him the bargain stops here. He steps aside so you can return to the crew without another word about the extra coins.</p>
<<else>>
<p>You tell the fishmonger you came to move cargo, not to make a private bargain. He puts the two coins away and turns the tally back toward the waiting crew.</p>
<</if>>
<p><span class="dialogue-line dialogue-male">"Fair enough. The wage for the crates is still yours."</span></p>
<p>You chose where the bargain ended. That does not mean the thought vanishes the instant you return to work.</p>
<<if $dockWorkBreastOffer>><<print $dockWorkBreastOffer.refusalHtml>><</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<set _offer = $dockWorkBreastOffer>><<set _reveal = setup.dockWorkBreastOfferReveal()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _offer and _offer.undressMedia>><div class="npc-activity-media dock-work-media"><<print '<img src="' + _offer.undressMedia + '" alt="Undressing behind the awning">'>></div><</if>>
<p>You step into the narrow space behind the awning and loosen the front of your clothing. The sounds of the quay are still close: ropes dragging, a porter calling for another crate. The fishmonger stays where you can see him and lets you set the pace.</p>
<p><span class="dialogue-line dialogue-male">"You can stop,"</span> he says quietly. <span class="dialogue-line dialogue-male">"Or you can let me make good on what I offered."</span></p>
<p class="farm-work-gain-line"><<print setup.playerIntimateExperienceResultHtml(_reveal)>></p>
<div class="npc-activity-choice-list">
<<if _offer and not _offer.finished>><div>[[Let him touch your breasts|DockWorkBreastOfferTouch]]</div><div>[[Stop and return to work|DockWorkBreastOfferDecline]]</div>
<<else>><div>[[Return to the piers|Ambercross Piers]]</div><</if>>
</div>
</div><</nobr>><<nobr>><<set _offer = $dockWorkBreastOffer>><<set _result = setup.dockWorkBreastOfferComplete()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _result>>
<<if _offer and _offer.touchMedia>><div class="npc-activity-media dock-work-media"><<print '<img src="' + _offer.touchMedia + '" alt="Breast touching">'>></div><</if>>
<p>He waits for your nod, then steps close and puts his hands on your breasts. Beyond the canvas, the crew keeps working as though nothing has changed. You let the brief moment run its course before drawing your clothing closed again.</p>
<p><span class="dialogue-line dialogue-male">"I said two extra,"</span> he murmurs, pressing the coins into your palm. <span class="dialogue-line dialogue-male">"And I keep my bargains."</span></p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<print _result.bonusHtml>>
<<print _result.arousalHtml>>
<p class="farm-work-gain-line"><b id="Carnalitygain">+0.08 Carnality</b> and ten additional minutes on the pier.</p>
<<else>>
<p>The private bargain was not completed. Your ordinary wage remains yours.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<</if>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<set _favor = $pendingDockWorkEventFavor>><<set _npc = _favor ? setup.getNpcById(_favor.npcId) : null>>
<div class="npc-activity-panel farm-work-event-panel">
<<if not _npc>>
<p>The sailor who called for you is gone by the time the load is secured. The rest of the shift passes without interruption.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
<<else>>
<<if _favor.tone is "pressuring">>
<p>The last crate is nearly ashore when <<print setup.npcEventMentionHtml(_npc)>> orders you to carry a coil of rope into the boat's cramped storage cabin. Once the hatch closes, he stays squarely between you and the ladder and looks at you as though your poor standing has already made the decision for you.</p>
<p>He shows you three coins.</p>
<<print setup.npcEventDialogueHtml(_npc, "You need friends on this quay more than I need another coil put away. Use that hand properly, and perhaps I speak better of you.", "The fishmonger")>>
<p>The offer carries an ugly presumption, but the voices above are close and the hatch is not locked. You can accept the coins or make him move.</p>
<<else>>
<p>The last crate is nearly ashore when <<print setup.npcEventMentionHtml(_npc)>> asks you to carry a coil of rope into the boat's cramped storage cabin. Once the hatch cuts off the noise of the quay, he stays between you and the ladder.</p>
<p>He turns three coins across his knuckles.</p>
<<print setup.npcEventDialogueHtml(_npc, "You have worked hard enough for the ordinary wage. Use that hand on me before we go back up, and these are yours as well.", "The fishmonger")>>
<p>He makes no move to stop you from leaving. The proposition is blunt, private, and entirely separate from the pay you have already earned.</p>
<</if>>
<div class="npc-activity-choice-list">
<<if setup.dockWorkCanAcceptBonusFavor("handjob")>>
<div><<link "Accept for three coins (handjob)" "DockWorkPrivateAccept">><<set $dockWorkFavorAction to "handjob">><<set $dockWorkFavorGold to 3>><</link>></div>
<<else>>
<div class="farm-work-locked">You cannot bring yourself to accept that kind of bargain.</div>
<</if>>
<<if setup.dockWorkCanAcceptBonusFavor("blowjob")>>
<div><<link "Ask for five coins (blowjob)" "DockWorkPrivateAccept">><<set $dockWorkFavorAction to "blowjob">><<set $dockWorkFavorGold to 5>><</link>></div>
<</if>>
<div>[[Refuse and return to the quay|DockWorkPrivateRefuse]]</div>
</div>
<</if>>
</div><</nobr>><<nobr>><<set _favor = $pendingDockWorkEventFavor>><<set _npc = _favor ? setup.getNpcById(_favor.npcId) : null>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $dockWorkFavorAction is "blowjob">>
<p>You glance at the three coins and tell him that what he wants is worth five if he expects you to use your mouth instead. His surprise becomes a slow grin, and two more coins join the first three on the crate beside him.</p>
<p><span class="dialogue-line dialogue-male">"Five, then. Earn them, and no one above needs to know why unloading took longer."</span></p>
<p>You hear boots crossing the deck overhead as you lower yourself in the narrow space. In a moment the bargain will become physical, and you will have to finish what you offered before collecting the extra pay.</p>
<<else>>
<p>You look once toward the ladder, then back to the coins in his hand. <span class="dialogue-line dialogue-player">"Three coins, and this stays below deck."</span></p>
<p>He agrees and sets the money where you can both see it. You step closer, already aware of what he expects from your hand and how little room the cabin leaves between you.</p>
<</if>>
<div class="farm-trial-result-link"><<set _choiceLabel = $dockWorkFavorAction is "blowjob" ? "Begin the blowjob" : "Begin the handjob">><<link _choiceLabel>><<set _start = setup.dockWorkStartEventFavor($dockWorkFavorAction, $dockWorkFavorGold)>><<if _start.success is false>><<set $dockWorkMessage = _start.text>><<goto "Ambercross Piers">><<else>><<goto "NPCEncounter">><</if>><</link>></div>
</div><</nobr>><<nobr>><<set _favor = $pendingDockWorkEventFavor>><<set _npc = _favor ? setup.getNpcById(_favor.npcId) : null>><<set _pressuring = _favor and _favor.tone is "pressuring">><<set _refusalHtml = setup.dockWorkDeclineEventFavor()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>You leave the coil of rope on the cabin floor and turn back toward the ladder. <span class="dialogue-line dialogue-player">"The wage is enough. Find someone else for the rest."</span></p>
<<if _pressuring>>
<p><<if _npc>><<= setup.npcDisplayName(_npc) >><<else>>The sailor<</if>> scowls and starts to say something about your place on the quay. A shout passes over the hatch above, and he thinks better of being overheard. He moves aside. Your ordinary wage remains yours, though his resentment plainly does not vanish with the offer.</p>
<<else>>
<p><<if _npc>><<= setup.npcDisplayName(_npc) >><<else>>The sailor<</if>> closes his hand around the coins and moves aside. <span class="dialogue-line dialogue-male">"Fair answer. Back to the load, then."</span> He does not punish the refusal or mention it once you return to the crew.</p>
<</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<print setup.dockWorkBonusHtml({ charisma: 0.04 }, "Choice result")>>
<p>You leave the proposition behind in the cabin, though part of your attention catches on it again before the next load is finished.</p>
<<print _refusalHtml>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<p>You straighten your clothes and climb into the salt air. The crew has reached the last few pieces of cargo, and nobody asks why the rope took so long to put away.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<if $dockWorkEventFavorResult and $dockWorkEventFavorResult.paid>>
<p class="farm-work-gain-line">Private arrangement: <b id="Goldgain">+<<= $dockWorkEventFavorResult.gold >> Gold</b></p>
<<if $dockWorkEventFavorResult.standingHtml>><<print $dockWorkEventFavorResult.standingHtml>><</if>>
<<else>>
<p class="farm-work-locked">The private arrangement was not completed, so no extra coins change hands.</p>
<</if>>
<<set $dockWorkEventFavorResult to null>><<set $dockWorkFavorAction to "">><<set $dockWorkFavorGold to 0>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>><<set _state = setup.dockWorkChainState("pier")>><<set _npc = setup.dockWorkChainNpc("pier")>><<set _stage = _state ? _state.stage : 0>><<set _dialogueClass = _npc and _npc.gender is "female" ? "dialogue-line dialogue-female" : "dialogue-line dialogue-male">>
<div class="npc-activity-panel farm-work-event-panel">
<<if not _npc>>
<p>The worker assigned beside you is called away, leaving you to finish the load without interruption.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
<<elseif _stage is 0>>
<p>You and <<= setup.npcDisplayName(_npc) >> are carrying opposite ends of a narrow crate when a wave shifts the boat beneath you. Your boot slips. <<if _npc.gender is "female">>She<<else>>He<</if>> catches you around the waist and keeps holding on after your footing is secure.</p>
<p><span @class="_dialogueClass">"Careful,"</span> <<if _npc.gender is "female">>she<<else>>he<</if>> says near your ear. <span @class="_dialogueClass">"I would rather not fish you out."</span></p>
<div class="npc-activity-choice-list">
<div><<link "Step away and finish the crate" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("pier", "professional")>><</link>></div>
<div><<link "Stay close and flirt" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("pier", "flirt")>><</link>></div>
<<if setup.dockWorkChainCanChoose("kiss", "pier")>><div><<link "Kiss them behind the stacked crates" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("pier", "kiss")>><</link>></div><</if>>
</div>
<<elseif _stage is 1>>
<p><<= setup.npcDisplayName(_npc) >> volunteers to help carry torn nets into the mending shed. Inside, damp mesh hangs like curtains and hides the doorway from most of the pier.</p>
<p><<if _npc.gender is "female">>She<<else>>He<</if>> brushes a strand of hair away from your face. <span @class="_dialogueClass">"Still think I need to try harder?"</span></p>
<div class="npc-activity-choice-list">
<div><<link "Put the nets between you" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("pier", "professional")>><</link>></div>
<<if setup.dockWorkChainCanChoose("kiss", "pier")>><div><<link "Answer with a kiss" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("pier", "kiss")>><</link>></div><</if>>
<div><<link "Promise something later" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("pier", "tease")>><</link>></div>
</div>
<<else>>
<p><<= setup.npcDisplayName(_npc) >> finds you while the crew is changing loads and points toward an unused sail loft above the storage shed. <span @class="_dialogueClass">"We have a little time before they need either of us. You told me to find somewhere private."</span></p>
<p>The invitation asks for more than flirting now. You can keep it brief, let the encounter go further, or make clear that today is only for work.</p>
<div class="npc-activity-choice-list">
<<if setup.dockWorkChainCanChoose("brief", "pier")>><div><<set _choiceLabel = "Meet them in the sail loft (" + setup.dockWorkChainActLabel(_npc, "brief") + ")">><<link _choiceLabel "DockWorkChainIntimateAccept">><<run setup.dockWorkPrepareChainEncounter("pier", "brief")>><</link>></div><</if>>
<<if setup.dockWorkChainCanChoose("full", "pier")>><div><<set _choiceLabel = "Stay longer in the sail loft (" + setup.dockWorkChainActLabel(_npc, "full") + ")">><<link _choiceLabel "DockWorkChainIntimateAccept">><<run setup.dockWorkPrepareChainEncounter("pier", "full")>><</link>></div><</if>>
<div><<link "Not today; return to work" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("pier", "decline_today")>><</link>></div>
<div><<link "Tell them not to ask again" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("pier", "end_interest")>><</link>></div>
</div>
<</if>>
</div><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>><<set _state = setup.dockWorkChainState("merchant")>><<set _npc = setup.dockWorkChainNpc("merchant")>><<set _stage = _state ? _state.stage : 0>><<set _dialogueClass = _npc and _npc.gender is "female" ? "dialogue-line dialogue-female" : "dialogue-line dialogue-male">>
<div class="npc-activity-panel farm-work-event-panel">
<<if not _npc>>
<p>The merchant expected at the pier never arrives. You finish sorting the cargo and collect your ordinary wage.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
<<elseif _stage is 0>>
<p><<= setup.npcDisplayName(_npc) >> arrives to inspect a shipment of smoked fish. Rather than checking the seals, <<if _npc.gender is "female">>she<<else>>he<</if>> keeps asking you to bend for crates and reach across the cart while watching with increasingly little discretion.</p>
<p><span @class="_dialogueClass">"Attentive service deserves a private tip,"</span> <<if _npc.gender is "female">>she<<else>>he<</if>> says, letting a tally token rest against your palm.</p>
<div class="npc-activity-choice-list">
<div><<link "Return the token and stay professional" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("merchant", "professional")>><</link>></div>
<div><<link "Close your fingers around theirs" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("merchant", "flirt")>><</link>></div>
<<if setup.dockWorkChainCanChoose("kiss", "merchant")>><div><<link "Kiss them behind the loaded cart" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("merchant", "kiss")>><</link>></div><</if>>
</div>
<<elseif _stage is 1>>
<p>The merchant returns with another shipment and sets a wrapped smoked fish beside your tally board. <span @class="_dialogueClass">"For your supper. A gift, unless you would like to make it the beginning of a negotiation."</span></p>
<div class="npc-activity-choice-list">
<div><<link "Accept the gift without promising more" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("merchant", "take_gift")>><</link>></div>
<<if setup.dockWorkChainCanChoose("kiss", "merchant")>><div><<link "Give them a kiss in return" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("merchant", "kiss")>><</link>></div><</if>>
<div><<link "Tell them to bring a better offer next time" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("merchant", "tease")>><</link>></div>
<div><<link "Decline the gift for today" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("merchant", "decline_today")>><</link>></div>
<div><<link "Make clear this remains business" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("merchant", "end_interest")>><</link>></div>
</div>
<<else>>
<p><<= setup.npcDisplayName(_npc) >> waits until the fishmonger is occupied, then gives you the key to a warehouse room where the new cargo has supposedly been miscounted.</p>
<p><span @class="_dialogueClass">"Help me inspect it privately. I will make the interruption worth more than your ordinary wage."</span></p>
<div class="npc-activity-choice-list">
<<if setup.dockWorkChainCanChoose("brief", "merchant")>><div><<set _choiceLabel = "Join them in the warehouse (" + setup.dockWorkChainActLabel(_npc, "brief") + ")">><<link _choiceLabel "DockWorkChainIntimateAccept">><<run setup.dockWorkPrepareChainEncounter("merchant", "brief")>><</link>></div><</if>>
<<if setup.dockWorkChainCanChoose("full", "merchant")>><div><<set _choiceLabel = "Stay longer for better payment (" + setup.dockWorkChainActLabel(_npc, "full") + ")">><<link _choiceLabel "DockWorkChainIntimateAccept">><<run setup.dockWorkPrepareChainEncounter("merchant", "full")>><</link>></div><</if>>
<div><<link "Not today; finish the cargo" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("merchant", "decline_today")>><</link>></div>
<div><<link "Tell them not to ask again" "DockWorkChainResult">><<set $dockWorkChainResult = setup.dockWorkChainResolve("merchant", "end_interest")>><</link>></div>
</div>
<</if>>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $dockWorkChainResult>>
<<print $dockWorkChainResult.text>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<print $dockWorkChainResult.bonusHtml>>
<<print $dockWorkChainResult.itemHtml>>
<<print $dockWorkChainResult.arousalHtml>>
<<set $dockWorkChainResult to null>>
<<else>>
<p>The personal moment fades back into the noise of the shift.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<</if>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<set _request = $pendingDockWorkChainEncounter>><<set _npc = _request ? setup.getNpcById(_request.npcId) : null>>
<div class="npc-activity-panel farm-work-event-panel">
<<if not _request or not _npc>>
<p>The opportunity disappears before you can act on it.</p>
<div class="farm-trial-result-link">[[Return to the piers|Ambercross Piers]]</div>
<<else>>
<p>You wait until nobody is watching closely, then follow <<= setup.npcDisplayName(_npc) >> away from the active quay. <<if _request.role is "merchant">>The warehouse door closes behind you, muting the carts and bargaining outside.<<else>>The sail loft smells of rope and dry canvas, with only narrow lines of daylight between the boards.<</if>></p>
<p>The arrangement you agreed to is clear: <<= setup.dockWorkChainActLabel(_npc, _request.level) >>. You can still leave if you change your mind.</p>
<div class="farm-trial-result-link"><<if setup.npcCanStartEncounter(_npc, "dock_work_connection", _request.actionId).ok>><<set _choiceLabel = "Begin (" + setup.dockWorkChainActLabel(_npc, _request.level) + ")">><<link _choiceLabel>><<set _start = setup.dockWorkStartChainEncounter()>><<if _start.success is false>><<set $dockWorkMessage = _start.text>><<goto "Ambercross Piers">><<else>><<goto "NPCEncounter">><</if>><</link>><</if>> [[Return to the piers|Ambercross Piers]]</div>
<</if>>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<p>You return to the open pier separately, leaving enough time between you to avoid the most obvious questions. The cargo still needs moving, but the familiar face across the quay now carries a private history with it.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<if $dockWorkChainEncounterResult and $dockWorkChainEncounterResult.completed>>
<<if $dockWorkChainEncounterResult.gold>><p class="farm-work-gain-line">Private arrangement: <b id="Goldgain">+<<= $dockWorkChainEncounterResult.gold >> Gold</b></p><</if>>
<<print $dockWorkChainEncounterResult.itemHtml>>
<<else>>
<p class="farm-work-locked">The private encounter did not reach what was agreed, and no special payment is added.</p>
<</if>>
<<set $dockWorkChainEncounterResult to null>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>At the end of the load, the fishmonger drops a damp bundle beside your boots. The section of net you cut has been tied off with red cord so nobody can mistake it for another worker's damage.</p>
<p><span class="dialogue-line dialogue-male">"Saving the catch was sensible,"</span> he says. <span class="dialogue-line dialogue-male">"Leaving the repair for someone else was not. Decide how you are making it right."</span></p>
<div class="npc-activity-choice-list">
<div><<link "Stay and mend the net" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveFollowup("net_mend")>><</link>> <span class="farm-work-meta">Unpaid time and effort</span></div>
<<if $c.gold gte 1>><div><<link "Pay for the damaged cord" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveFollowup("net_pay")>><</link>> <span class="farm-work-meta">1 gold</span></div><<else>><div class="farm-work-locked">You do not have a coin to offer for the repair.</div><</if>>
<div><<link "Defend the decision and refuse" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveFollowup("net_refuse")>><</link>></div>
</div>
</div><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>The cook who bought your late basket returns before the shift is over. This time he has a written order, an impatient customer waiting in the square, and no runner willing to leave the quay during the busiest part of the tide.</p>
<p><span class="dialogue-line dialogue-male">"You sold me the catch when I did not mean to buy it,"</span> he says. <span class="dialogue-line dialogue-male">"Now show me you can deliver as well as you talk. There is extra coin in it."</span></p>
<div class="npc-activity-choice-list">
<<if setup.playerAttributeMeets("fitness", 8)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("fitness", "Take the rush delivery")>><<link _attributeChoiceLabel "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveFollowup("order_rush")>><</link>></div><</if>>
<<if setup.playerAttributeMeets("charisma", 8)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("charisma", "Negotiate before accepting")>><<link _attributeChoiceLabel "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveFollowup("order_bargain")>><</link>></div><</if>>
<div><<link "Decline the extra work" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveFollowup("order_decline")>><</link>></div>
</div>
</div><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>The buyer whose hidden tally token exposed him appears near the fish stall again. He waits until the fishmonger turns toward the boats, then blocks the narrow space between you and the stacked baskets.</p>
<p><span class="dialogue-line dialogue-male">"You made me a thief in front of half the market,"</span> he says, close enough that the threat does not need to be shouted. <span class="dialogue-line dialogue-male">"You are going to correct that story."</span></p>
<div class="npc-activity-choice-list">
<<if setup.playerAttributeMeets("strength", 10)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("strength", "Stand your ground")>><<link _attributeChoiceLabel "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveFollowup("grudge_stand")>><</link>></div><</if>>
<<if setup.playerAttributeMeets("charisma", 10)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("charisma", "Try to defuse the confrontation")>><<link _attributeChoiceLabel "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveFollowup("grudge_defuse")>><</link>></div><</if>>
<div><<link "Call the fishmonger over" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveFollowup("grudge_help")>><</link>></div>
<<if $dockWorkConsequences.crewRespect>><div><<link "Call the crew over" "DockWorkChoiceResult">><<set $dockWorkChoiceResult = setup.dockWorkResolveFollowup("grudge_crew")>><</link>></div><</if>>
</div>
</div><</nobr>><<nobr>><<run setup.ensureDockWorkSystem()>><<set _role = $activeDockWorkArousalRole>><<set _npc = setup.dockWorkChainNpc(_role)>>
<div class="npc-activity-panel farm-work-event-panel">
<<if not _npc>>
<p>The worker assigned beside you is called elsewhere before the interruption becomes personal.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
<<else>>
<<print setup.dockWorkArousalAttemptHtml(_role)>>
<p>The approach is deliberate. <<= setup.npcDisplayName(_npc) >> is trying to leave you worked up enough that a more direct request will sound tempting later.</p>
<div class="npc-activity-choice-list">
<div><<link "Step away and concentrate on the work" "DockWorkArousalResult">><<set $dockWorkArousalResult = setup.dockWorkResolveArousalAttempt("focus")>><</link>></div>
<div><<link "Let the teasing continue" "DockWorkArousalResult">><<set $dockWorkArousalResult = setup.dockWorkResolveArousalAttempt("allow")>><</link>></div>
<div><<link "Encourage them to be more explicit" "DockWorkArousalResult">><<set $dockWorkArousalResult = setup.dockWorkResolveArousalAttempt("encourage")>><</link>></div>
<<if setup.dockWorkChainCanChoose("kiss", _role)>><div><<link "Answer the provocation with a kiss" "DockWorkArousalResult">><<set $dockWorkArousalResult = setup.dockWorkResolveArousalAttempt("kiss")>><</link>></div><</if>>
<div><<link "Tell them to stop trying" "DockWorkArousalResult">><<set $dockWorkArousalResult = setup.dockWorkResolveArousalAttempt("end_interest")>><</link>></div>
</div>
<</if>>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel">
<<if $dockWorkArousalResult>>
<<print $dockWorkArousalResult.text>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<<print $dockWorkArousalResult.bonusHtml>>
<<print $dockWorkArousalResult.arousalHtml>>
<<set $dockWorkArousalResult to null>>
<<else>>
<p>The suggestive interruption fades back into the noise of the shift.</p>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>>
<</if>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div>
</div><</nobr>><<nobr>><<run setup.ensureQuestSystem()>>
<<set _activeQuests = setup.questJournalList("active")>>
<<set _completedQuests = setup.questJournalList("completed")>>
<div class="journal-quest-list">
<details class="journal-quest-group" open>
<summary><span>Active quests</span><span class="journal-quest-count"><<= _activeQuests.length >></span></summary>
<div class="journal-quest-contents">
<<if _activeQuests.length is 0>>
<div class="journal-quest-empty">You have no active quests.</div>
<<else>>
<<for _quest range _activeQuests>><<capture _quest>>
<div class="journal-quest-entry">
<div class="journal-quest-entry-header"><span class="journal-quest-title"><<= _quest.title || "Unnamed quest" >></span><span class="journal-quest-type"><<= _quest.type || "Side quest" >></span></div>
<<if _quest.description>><div class="journal-quest-description"><<= _quest.description >></div><</if>>
<<if _quest.objectives and _quest.objectives.length>><ul class="journal-quest-objectives"><<for _objective range _quest.objectives>><li @class="_objective.complete ? 'journal-quest-objective-complete' : ''"><<= _objective.text || _objective >></li><</for>></ul><</if>>
</div>
<</capture>><</for>>
<</if>>
</div>
</details>
<details class="journal-quest-group">
<summary><span>Completed quests</span><span class="journal-quest-count"><<= _completedQuests.length >></span></summary>
<div class="journal-quest-contents">
<<if _completedQuests.length is 0>>
<div class="journal-quest-empty">You have not completed any quests yet.</div>
<<else>>
<<for _quest range _completedQuests>><<capture _quest>>
<div class="journal-quest-entry">
<div class="journal-quest-entry-header"><span class="journal-quest-title"><<= _quest.title || "Unnamed quest" >></span><span class="journal-quest-type"><<= _quest.type || "Side quest" >></span></div>
<<if _quest.description>><div class="journal-quest-description"><<= _quest.description >></div><</if>>
<<if _quest.reward>><div class="journal-quest-reward"><b>Reward:</b> <<= _quest.reward >></div><</if>>
</div>
<</capture>><</for>>
<</if>>
</div>
</details>
</div><</nobr>><<nobr>><<set _event = setup.beggingActiveEvent()>>
<<if _event>>
<<set _passage = setup.beggingEventPassage(_event)>>
<<if _passage>><<goto _passage>><<else>><<goto "BeggingResult">><</if>>
<<else>>
<div class="npc-activity-panel farm-work-event-panel begging-event-panel">
<div class="npc-interact-name">The moment has passed</div>
<p>The square has already swallowed the encounter.</p>
<div class="npc-activity-choice-list">
<<if $c.energy gte 2>><div>[[Keep begging|BeggoldWait]] <b id="Energy">(-2 Energy)</b></div><</if>>
<div>[[Leave the well|Ambercross Center]]</div>
</div>
<</if>>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel begging-event-panel">
<div class="npc-interact-name">Back beside the well</div>
<<if $lastBeggingResult>><<print $lastBeggingResult.text>><<else>><p>The encounter ends without changing your circumstances.</p><</if>>
<div class="npc-activity-choice-list">
<<if $c.energy gte 2>><div>[[Keep begging|BeggoldWait]] <b id="Energy">(-2 Energy)</b></div><<else>><div class="player-choice-status">You are too tired to continue begging.</div><</if>>
<div>[[Leave the well|Ambercross Center]]</div>
</div>
</div><</nobr>><<nobr>><<set _event = setup.beggingActiveEvent()>>
<div class="npc-activity-panel farm-work-event-panel begging-event-panel">
<div class="npc-interact-name">Away from the square</div>
<<if _event>>
<<set _npc = setup.getNpcById(_event.npcId)>>
<p>You give <<print setup.npcDisplayName(_npc)>> your answer. Their expression changes at once: less charitable, more intent.</p>
<p><<if _npc.gender is "female">><span class="dialogue-line dialogue-female">"Then come with me,"</span><<else>><span class="dialogue-line dialogue-male">"Then come with me,"</span><</if>> they say. <<if _event.tier is "full">>They lead you toward a rented room behind the market row.<<else>>They lead you toward the shadowed rear of a storehouse.<</if>></p>
<p><<if _npc.gender is "female">><span class="dialogue-line dialogue-female">"You will have what I promised when we are finished."</span><<else>><span class="dialogue-line dialogue-male">"You will have what I promised when we are finished."</span><</if>></p>
<p>You rise from the well and follow. The square remains only a few steps away, but its noise fades as the two of you leave public view.</p>
<div class="npc-activity-choice-list">
<div><<link "Follow through with the bargain">><<set _start = setup.beggingStartFavor()>><<if _start.success and _start.tame>><<goto "BeggingFavorReturn">><<elseif _start.success>><<goto "NPCEncounter">><<else>><<set $lastBeggingResult = { text: "<p>" + _start.text + "</p>" }>><<goto "BeggingResult">><</if>><</link>></div>
<div><<link "Change your mind" _event.passage>><<run setup.beggingDeclineProposition()>><</link>></div>
</div>
<<else>>
<p>The offer has already passed.</p>
<div class="npc-return-link">[[Return to the well|Beggold]]</div>
<</if>>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel farm-work-event-panel begging-event-panel">
<div class="npc-interact-name">The bargain settled</div>
<<if $lastBeggingResult and $lastBeggingResult.outcome is "kiss">>
<<set _npc = setup.getNpcById($lastBeggingResult.npcId)>>
<<if _npc>><<print setup.npcIntimateMediaHtml("kiss", _npc)>><</if>>
<p>The promised kiss begins cautiously, a measured exchange behind the shelter of the market buildings. Their hand settles at your waist when neither of you immediately pulls away.</p>
<p>It warms into something less businesslike before footsteps in the nearby lane make you separate. They straighten your cloak, still watching your mouth, and place the agreed payment in your hand.</p>
<<print $lastBeggingResult.gainHtml>>
<<elseif $lastBeggingResult>><<print $lastBeggingResult.text>>
<<else>><p>You return to the square without the promised payment.</p><</if>>
<div class="npc-activity-choice-list">
<<if $c.energy gte 2>><div>[[Return to the well|Beggold]]</div><</if>>
<div>[[Leave the square|Ambercross Center]]</div>
</div>
</div><</nobr>><div class="npc-activity-choice-list"><<if $c.energy gte 2>><div>[[Keep begging|BeggoldWait]] <b id="Energy">(-2 Energy)</b></div><<else>><div class="player-choice-status">You are too tired to continue begging.</div><</if>><div>[[Leave the well|Ambercross Center]]</div></div><<nobr>><<run setup.beggingComplete(null, null, "quiet")>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">An empty hour</div><p>The square remains busy, but its movement parts around you as if you were another stone in the road. A few people look. None stop.</p><p>A merchant pauses close enough that hope makes you straighten. He only adjusts the strap of his satchel.</p><p>When the hour passes, your hand is still empty.</p><<include "Begging - Continue Links">></div><</nobr>><<nobr>><<run setup.beggingComplete(null, null, "quiet")>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">An empty hour</div><p>You repeat your request until the words lose their shape. Boots pass, cart wheels rattle, and every promising pause becomes someone checking a buckle or speaking to a friend.</p><p><span class="dialogue-line dialogue-male">"Not today,"</span> one man mutters without slowing. Another pretends not to hear.</p><p>No one gives you anything this hour.</p><<include "Begging - Continue Links">></div><</nobr>><<nobr>><<run setup.beggingComplete(null, null, "quiet")>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">An empty hour</div><p>A child notices you and begins to approach, but an adult catches their shoulder and guides them away. Their quiet argument disappears into the market noise.</p><p><span class="dialogue-line dialogue-female">"We cannot help everyone,"</span> the adult says. The child looks back twice.</p><p>You remain beside the well with nothing to show for the time.</p><<include "Begging - Continue Links">></div><</nobr>><<nobr>><<run setup.beggingComplete(null, null, "quiet")>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">An empty hour</div><p>Two villagers nearly stop. One pats an empty pocket; the other avoids your eyes. The sun shifts across the stones while your open hand slowly begins to ache.</p><p>A woman offers an apologetic shake of her head. <span class="dialogue-line dialogue-female">"I have children waiting on the same coin,"</span> she says.</p><p>Charity does not find you this time.</p><<include "Begging - Continue Links">></div><</nobr>><<nobr>><<set _event = setup.beggingActiveEvent()>><<set _result = $lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">A quiet kindness</div><<if _event and _event.id is "quiet_charity">><p>A traveler slows near the well after watching three other people pass you by. He crouches just long enough to keep the exchange private and folds two coins into your palm.</p><p><span class="dialogue-line dialogue-male">"Do not spend breath thanking me,"</span> he says. <span class="dialogue-line dialogue-male">"Spend it getting through tomorrow."</span></p><div class="npc-activity-choice-list"><div><<link "Accept what he offers" "Begging - Quiet Kindness">><<run setup.beggingComplete()>><</link>></div></div><<elseif _result and _result.eventId is "quiet_charity">><p>You close your fingers around the coins. The traveler catches the beginning of your thanks and shakes his head.</p><p><span class="dialogue-line dialogue-male">"Tomorrow,"</span> he reminds you, already standing. <span class="dialogue-line dialogue-male">"Get there first. Thank me after."</span></p><p>He rejoins the road before you can ask his name.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event = setup.beggingActiveEvent()>><<set _result = $lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">Someone who remembers</div><<if _event and _event.id is "market_woman">><p>A woman carrying an almost-empty market basket stops and studies you with an expression that is neither pity nor suspicion. She kneels, presses three warm coins into your hand, and closes your fingers around them.</p><p><span class="dialogue-line dialogue-female">"I have sat where you are sitting,"</span> she says softly. <span class="dialogue-line dialogue-female">"That is all you need to know."</span></p><div class="npc-activity-choice-list"><div><<link "Accept the coins" "Begging - Someone Remembers">><<run setup.beggingComplete()>><</link>></div></div><<elseif _result and _result.eventId is "market_woman">><p>You accept the coins. Her roughened thumb presses once against your knuckles before she lets go.</p><p><span class="dialogue-line dialogue-female">"This square teaches people to look past anyone sitting down,"</span> she says. <span class="dialogue-line dialogue-female">"Do not let it teach you that you are invisible."</span></p><p>She leaves with her empty basket swinging at her side.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event = setup.beggingActiveEvent()>><<set _result = $lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">A hurried coin</div><<if _event and _event.id is "apprentice_coin">><p>A young apprentice hurries past with folded cloth under one arm. Guilt catches him two steps beyond you. He doubles back, glances toward the stalls, and drops a coin into your hand.</p><p><span class="dialogue-line dialogue-male">"My master counts everything,"</span> he whispers. <span class="dialogue-line dialogue-male">"So you never saw me."</span></p><div class="npc-activity-choice-list"><div><<link "Hide the coin quickly" "Begging - Hurried Coin">><<run setup.beggingComplete()>><</link>></div></div><<elseif _result and _result.eventId is "apprentice_coin">><p>You hide the coin quickly enough to satisfy him. The apprentice attempts a dignified nod, then nearly collides with a vegetable cart while checking whether his master saw.</p><p><span class="dialogue-line dialogue-male">"I meant that,"</span> he hisses over his shoulder. <span class="dialogue-line dialogue-male">"You saw no one."</span></p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">Bread before coin</div><<if _event and _event.id is "bread_gift">><p>A baker's assistant pauses with a covered tray balanced against her hip. She has no coin to spare, but she pulls out a small loaf that split along one side in the oven.</p><p><span class="dialogue-line dialogue-female">"It will not sell looking like that,"</span> she says, offering it to you. <span class="dialogue-line dialogue-female">"It will still fill your stomach."</span></p><div class="npc-activity-choice-list"><div><<link "Accept the loaf" "Begging - Bread Gift">><<run setup.beggingComplete()>><</link>></div></div><<elseif _result and _result.eventId is "bread_gift">><p>You take the misshapen loaf while warmth still clings to its crust. The assistant adjusts the cloth over her tray and glances toward the bakery.</p><p><span class="dialogue-line dialogue-female">"If anyone asks, it fell from the tray,"</span> she says. Her smile appears only after she has turned away.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">Food for the road</div><<if _event and _event.id is "meat_gift">><p>An older traveler notices the way your attention follows the food in his pack. He unwraps a strip of dried meat, breaks off a generous portion, and holds it out.</p><p><span class="dialogue-line dialogue-male">"Coin disappears quickly when you are hungry,"</span> he says. <span class="dialogue-line dialogue-male">"Keep this for when the square is less kind."</span></p><div class="npc-activity-choice-list"><div><<link "Accept the food" "Begging - Meat Gift">><<run setup.beggingComplete()>><</link>></div></div><<elseif _result and _result.eventId is "meat_gift">><p>You wrap the meat carefully and tuck it away. The traveler watches until he is certain you will not devour it from desperation.</p><p><span class="dialogue-line dialogue-male">"Small bites and plenty of water,"</span> he advises. <span class="dialogue-line dialogue-male">"Make kindness last when you can."</span></p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">A bowl set aside</div><<if _event and _event.id is "stew_gift">><p>A tavern runner crosses the square with a lidded clay bowl. A customer never collected it, and the kitchen will not serve it after it cools. He places it carefully beside you.</p><p><span class="dialogue-line dialogue-male">"Still warm,"</span> he says. <span class="dialogue-line dialogue-male">"Better in your hands than in the slop bucket."</span></p><div class="npc-activity-choice-list"><div><<link "Accept the stew" "Begging - Stew Gift">><<run setup.beggingComplete()>><</link>></div></div><<elseif _result and _result.eventId is "stew_gift">><p>You cup both hands around the warm bowl. The runner loosens with visible relief when you promise to return the dish to the tavern.</p><p><span class="dialogue-line dialogue-male">"Tell the cook it found a customer after all,"</span> he says. <span class="dialogue-line dialogue-male">"She hates waste more than she hates complaints."</span></p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">A filled waterskin</div><<if _event and _event.id is "water_gift">><p>A woman returning from the well fills a spare waterskin before she leaves. She ties the neck tightly and sets it within your reach.</p><p><span class="dialogue-line dialogue-female">"Hunger makes people forget thirst,"</span> she says. <span class="dialogue-line dialogue-female">"Do not make that mistake."</span></p><div class="npc-activity-choice-list"><div><<link "Accept the waterskin" "Begging - Water Gift">><<run setup.beggingComplete()>><</link>></div></div><<elseif _result and _result.eventId is "water_gift">><p>You test the knot, then thank her. She crouches to tighten it herself and shows you how to keep the stopper from working loose.</p><p><span class="dialogue-line dialogue-female">"A waterskin is no gift if it empties down your leg,"</span> she says, satisfied at last.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">A useful direction</div><<if _event and _event.id is "tannery_tip">><p>A well-dressed stranger asks whether you came through the forest. When you nod, he passes you a small coin pouch and points toward the eastern houses.</p><p><span class="dialogue-line dialogue-male">"This will feed you for a few days. After that, find Marrin at the tannery. She respects work more than pride."</span></p><div class="npc-activity-choice-list"><div><<link "Accept his help" "Begging - Tannery Tip">><<run setup.beggingComplete()>><</link>></div></div><<elseif _result and _result.eventId is "tannery_tip">><p>You accept the pouch and repeat Marrin's name and the direction of the tannery until the stranger is satisfied.</p><p><span class="dialogue-line dialogue-male">"Do not arrive expecting rescue,"</span> he warns. <span class="dialogue-line dialogue-male">"Ask for work and show her you can finish it. That is the language Marrin trusts."</span></p><p>You watch him disappear toward the western road, then secure the unexpectedly heavy pouch beneath your clothing.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">A purse in the dust</div><<if _event and _event.id is "dropped_purse">><p>A distracted merchant strides past while arguing with a porter. A small purse slips from his belt and lands beside the well without either man noticing.</p><p>It is heavy enough to matter. The merchant is already being swallowed by the crowd.</p><div class="npc-activity-choice-list"><div><<link "Hide the purse beneath your cloak" "Begging - Dropped Purse">><<run setup.beggingComplete({gold:5},null,"keep")>><<run setup.playerChangeCarnality(0.05)>><</link>></div><div><<link "Call after its owner" "Begging - Dropped Purse">><<run setup.beggingComplete({gold:2},null,"return")>><</link>></div></div><<elseif _result and _result.eventId is "dropped_purse" and _result.outcome is "keep">><p>You cover the purse with your cloak and wait until the merchant vanishes into the market. A moment later, his distant voice rises above the crowd as he realizes something is missing.</p><p><span class="dialogue-line dialogue-male">"Stop! My purse - has anyone seen it?"</span></p><p>You keep your eyes lowered until his questions move farther down the street. Only then do you slip the purse away. Need quiets the guilt, though it does not erase it.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><<elseif _result and _result.eventId is "dropped_purse">><p>You call out. The merchant checks his belt, returns at a run, and counts the purse before looking at you again.</p><p><span class="dialogue-line dialogue-male">"Honesty from someone who needs every coin,"</span> he says, handing you two. <span class="dialogue-line dialogue-male">"That deserves more than thanks."</span></p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">Coin for a strong back</div><<if _event and _event.id is "basket_errand">><p>A produce seller stops with a basket whose handle has begun to split. She looks from the load to you, then nods toward a cart on the far side of the square.</p><p><span class="dialogue-line dialogue-female">"Carry this before the handle gives way and I will pay you three coins,"</span> she offers.</p><div class="npc-activity-choice-list"><div><<link "Carry the basket across the square" "Begging - Basket Errand">><<set $c.energy=Math.max(0,$c.energy-1)>><<run setup.beggingComplete({gold:3},null,"help")>><</link>></div><div><<link "Remain beside the well" "Begging - Basket Errand">><<run setup.beggingComplete(null,null,"decline")>><</link>></div></div><<elseif _result and _result.eventId is "basket_errand" and _result.outcome is "help">><p>You take the basket before its handle tears and carry it through the press of bodies. Its weight drags against your arms while the seller clears a path toward her cart.</p><p>When you finally lower it onto the boards, she tests the failing handle and gives an approving grunt. <span class="dialogue-line dialogue-female">"You listened, moved quickly, and did not complain,"</span> she says, paying exactly what she promised. <span class="dialogue-line dialogue-female">"That already puts you ahead of half the helpers in this square."</span></p><p class="farm-work-gain-line"><b id="Energy">-1 Energy</b></p><<print _result.gainHtml>><<include "Begging - Continue Links">><<elseif _result and _result.eventId is "basket_errand">><p>You apologize and remain beside the well. The seller studies you for a moment, adjusts her grip, and turns toward the crowd.</p><p><span class="dialogue-line dialogue-female">"Then keep your feet clear of people still using theirs,"</span> she says, more tired than cruel, before continuing her search for help.</p><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">The performer notices</div><<if _event and _event.id is "performer_attention">><p>A street performer gathers a loose circle near the well. Bells at her ankles mark the rhythm while her skirts turn around her legs, drawing cheers from laborers and merchants alike.</p><p>Halfway through the dance, she catches you watching. Instead of looking elsewhere, she slows one deliberate step and holds your gaze.</p><p><span class="dialogue-line dialogue-female">"Even an empty purse can offer appreciation,"</span> she says, loud enough to make the nearest onlookers laugh.</p><div class="npc-activity-choice-list"><div><<link "Hold her gaze and watch" "Begging - Performer Attention">><<run setup.beggingComplete({gold:1},{arousal:6},"watch")>><</link>></div><div><<link "Lower your eyes and keep begging" "Begging - Performer Attention">><<run setup.beggingComplete({gold:1},null,"look_away")>><</link>></div></div><<elseif _result and _result.eventId is "performer_attention" and _result.outcome is "watch">><p>You let yourself watch. The dancer turns each measured step toward you until the performance feels uncomfortably private despite the crowd between you.</p><p>When the song ends, she retrieves a coin from her bowl and flicks it into your lap. <span class="dialogue-line dialogue-female">"For paying such close attention,"</span> she says with a knowing smile.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><<elseif _result and _result.eventId is "performer_attention">><p>You lower your eyes before the attention can settle beneath your skin. A moment later, a coin rings against the stone beside your knee.</p><p><span class="dialogue-line dialogue-female">"Shy, then?"</span> the performer calls before turning back to her audience.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">A hand too familiar</div><<if _event and _event.id is "coin_at_collar">><p>A broad-shouldered patron leaves the tavern with warmth still coloring his cheeks. He hears your request, rolls three coins across his knuckles, and crouches in front of you.</p><p>When you reach for them, he closes his fist. His other hand lifts toward the open edge of your collar.</p><p><span class="dialogue-line dialogue-male">"People snatch coins from beggars,"</span> he says. <span class="dialogue-line dialogue-male">"Let me put these somewhere safer."</span></p><div class="npc-activity-choice-list"><div><<link "Let him place the coins where he wants" "Begging - Coin at Collar">><<run setup.beggingComplete({gold:3},{arousal:9},"allow")>><</link>></div><div><<link "Hold out your hand instead" "Begging - Coin at Collar">><<run setup.beggingComplete({gold:2},null,"hand")>><</link>></div><div><<link "Refuse the attention" "Begging - Coin at Collar">><<run setup.beggingComplete(null,null,"refuse")>><</link>></div></div><<elseif _result and _result.eventId is "coin_at_collar" and _result.outcome is "allow">><p>You hold still. His fingers linger at the edge of your collar as he slips the coins beneath the cloth one at a time, taking far longer than the task requires.</p><p><span class="dialogue-line dialogue-male">"There,"</span> he murmurs, meeting your eyes before withdrawing his hand. <span class="dialogue-line dialogue-male">"Somewhere they will not be stolen."</span></p><<print _result.gainHtml>><<include "Begging - Continue Links">><<elseif _result and _result.eventId is "coin_at_collar" and _result.outcome is "hand">><p>You catch his wrist before he reaches your collar and present your open palm. His smile turns rueful, but he drops two coins into it.</p><p><span class="dialogue-line dialogue-male">"Clear boundaries,"</span> he says. <span class="dialogue-line dialogue-male">"Fair enough."</span></p><<print _result.gainHtml>><<include "Begging - Continue Links">><<else>><p>You lean away and tell him to keep both his hand and his money. Surprise crosses his face before he raises both palms and steps back into the crowd.</p><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">Kind words with an edge</div><<if _event and _event.id is "soft_spoken_admirer">><p>A neatly dressed woman stops after passing you twice. On the third pass she abandons the pretense, approaches the well, and studies you with open curiosity.</p><p><span class="dialogue-line dialogue-female">"Forgive me,"</span> she says. <span class="dialogue-line dialogue-female">"You are striking. I kept thinking it each time I walked by, and it began to feel rude not to say it."</span></p><p>The compliment is gentle, but her lingering gaze gives it a warmer meaning.</p><div class="npc-activity-choice-list"><div><<link "Encourage the conversation" "Begging - Soft Spoken Admirer">><<run setup.beggingComplete({gold:2},{arousal:5},"encourage")>><</link>></div><div><<link "Thank her without inviting more" "Begging - Soft Spoken Admirer">><<run setup.beggingComplete({gold:2},null,"thanks")>><</link>></div></div><<elseif _result and _result.eventId is "soft_spoken_admirer" and _result.outcome is "encourage">><p>You ask what caught her attention. She answers without hesitation, describing your mouth, your figure, and the stubborn way you keep meeting the eyes of people who look down on you.</p><p>Heat gathers beneath the embarrassment. Before leaving, she presses two coins into your palm. <span class="dialogue-line dialogue-female">"Eat something,"</span> she says. <span class="dialogue-line dialogue-female">"I would like that mouth to keep smiling."</span></p><<print _result.gainHtml>><<include "Begging - Continue Links">><<else>><p>You accept the compliment without opening the door any wider. She understands the careful distance in your answer and gives you two coins without trying to purchase anything more.</p><p><span class="dialogue-line dialogue-female">"Take care of yourself,"</span> she says before leaving.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">A distracting fragrance</div><<if _event and _event.id is "perfume_sample">><p>A perfume seller notices you watching customers test her little glass bottles. She approaches with one uncorked vial held carefully between two fingers.</p><p><span class="dialogue-line dialogue-female">"No coin required,"</span> she says. <span class="dialogue-line dialogue-female">"If the scent draws attention, that is advertisement enough."</span></p><p>The fragrance is warm, floral, and unexpectedly intimate at this distance.</p><div class="npc-activity-choice-list"><div><<link "Let her apply it to your throat" "Begging - Perfume Sample">><<run setup.beggingComplete({gold:1},{arousal:7},"throat")>><</link>></div><div><<link "Ask for a drop on your wrist" "Begging - Perfume Sample">><<run setup.beggingComplete(null,{arousal:2},"wrist")>><</link>></div><div><<link "Decline the sample" "Begging - Perfume Sample">><<run setup.beggingComplete(null,null,"decline")>><</link>></div></div><<elseif _result and _result.eventId is "perfume_sample" and _result.outcome is "throat">><p>You lift your chin. She paints the scent beneath your ear and along your throat with a fingertip, leaning close enough for her breath to disturb your hair.</p><p><span class="dialogue-line dialogue-female">"There,"</span> she murmurs after a final, unnecessary touch. <span class="dialogue-line dialogue-female">"Now let us see who notices."</span></p><p>She leaves a coin for your cooperation.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><<elseif _result and _result.eventId is "perfume_sample" and _result.outcome is "wrist">><p>She dabs the fragrance on your wrist. Even at that polite distance, the warmth of it follows every movement and keeps drawing your attention back to your own skin.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><<else>><p>You decline. The seller recorks the vial without offense and returns to customers more willing to become advertisements.</p><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">An intimate distraction</div><<if _event and _event.id is "passing_couple">><p>A laughing couple slips behind a cloth merchant's hanging wares, apparently believing the thin fabric hides them from the square. Their whispering quickly gives way to a long, hungry kiss.</p><p>You can still see their silhouettes pressed together. One wandering hand makes the cloth sway.</p><div class="npc-activity-choice-list"><div><<link "Keep watching from the well" "Begging - Passing Couple">><<run setup.beggingComplete({gold:2},{arousal:10},"watch")>><</link>></div><div><<link "Turn your attention back to the crowd" "Begging - Passing Couple">><<run setup.beggingComplete(null,null,"turn")>><</link>></div></div><<elseif _result and _result.eventId is "passing_couple" and _result.outcome is "watch">><p>You keep watching. The cloth shifts just enough to reveal flushed faces and clothing tugged out of place before one of them notices you.</p><p>Instead of anger, she laughs and tosses two coins toward the well. <span class="dialogue-line dialogue-female">"For your discretion,"</span> she says, pulling her companion deeper into hiding.</p><p>Their muffled laughter follows you even after you force your eyes elsewhere.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><<else>><p>You look away and concentrate on the people passing your open hand. The sounds behind the hanging cloth remain difficult to ignore, but you deny them any more of your attention.</p><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">Questions from the watch</div><<if _event and _event.id is "guard_patrol">><p>A town guard breaks from his patrol and stops over you, one hand resting near his belt. People make room without being asked.</p><p><span class="dialogue-line dialogue-male">"The merchants say you have been troubling customers,"</span> he says. <span class="dialogue-line dialogue-male">"Give me one reason I should let you remain beside the well."</span></p><div class="npc-activity-choice-list"><div><<link "Explain your situation calmly" "Begging - Guard 2">><<run setup.beggingContinuePassage("Begging - Guard 2")>><</link>></div><div><<link "Gather yourself and leave" "Begging - Guard 1">><<run setup.beggingComplete(null,null,"leave")>><</link>></div></div><<elseif _result and _result.eventId is "guard_patrol">><p>You decide that pride is worth less than avoiding trouble with the watch. The guard follows you with his eyes until you leave the well behind.</p><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">The guard listens</div><<if _event and _event.id is "guard_patrol">><p>You tell him how you arrived in Ambercross and how little remains to you. His stern expression survives most of the explanation, but not all of it.</p><p>At last, he exhales and takes a wrapped heel of bread from his satchel. <span class="dialogue-line dialogue-male">"You may stay if you keep the road clear,"</span> he says. <span class="dialogue-line dialogue-male">"And take this before I reconsider being charitable."</span></p><div class="npc-activity-choice-list"><div><<link "Accept the bread and his warning" "Begging - Guard 2">><<run setup.beggingComplete({itemId:"bread",quantity:1},null,"accept")>><</link>></div></div><<elseif _result and _result.eventId is "guard_patrol">><p>You promise not to obstruct the market road. He puts the bread in your hands with a gruff nod, then resumes his patrol before anyone can comment on the gesture.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">Shelter from the rain</div><<if _event and _event.id is "rain_shelter">><p>A sudden shower drives shoppers beneath every awning around the square. You remain exposed beside the well until a traveler lifts the edge of his cloak and gestures toward the narrow shelter beside him.</p><p><span class="dialogue-line dialogue-male">"There is room for two if neither of us insists on comfort,"</span> he calls over the rain.</p><div class="npc-activity-choice-list"><div><<link "Join him beneath the awning" "Begging - Rain 2">><<run setup.beggingContinuePassage("Begging - Rain 2")>><</link>></div><div><<link "Remain beside the well" "Begging - Rain 1">><<run setup.beggingComplete(null,null,"remain")>><</link>></div></div><<elseif _result and _result.eventId is "rain_shelter">><p>You decline and endure the shower. He watches for another moment, then closes his cloak and leaves you to the rain.</p><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">Close quarters</div><p>The shelter is smaller than it appeared. Your shoulder presses against his chest whenever the wind throws rain beneath the awning, and his cloak settles around both of you.</p><p><span class="dialogue-line dialogue-male">"I may have exaggerated the available room,"</span> he admits, smiling. <span class="dialogue-line dialogue-male">"You can blame the weather or me. I deserve either."</span></p><div class="npc-activity-choice-list"><div><<link "Ease closer and share his warmth" "Begging - Rain 3">><<run setup.beggingContinuePassage("Begging - Rain 3",{arousal:4})>><</link>></div><div><<link "Keep as much distance as possible" "Begging - Rain 3">><<run setup.beggingContinuePassage("Begging - Rain 3")>><</link>></div></div></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">When the rain eases</div><<if _event and _event.id is "rain_shelter">><p>The rain softens to a silver curtain at the awning edge. He does not move away immediately. Instead, his thumb brushes a damp strand of hair from your cheek.</p><p><span class="dialogue-line dialogue-male">"I only meant to keep you dry,"</span> he says, though the warmth in his expression suggests his intentions have changed.</p><<print _event.noticeHtml>><div class="npc-activity-choice-list"><div><<link "Let the closeness linger" "Begging - Rain 3">><<run setup.beggingComplete({gold:3},{arousal:7},"linger")>><</link>></div><div><<link "Thank him and step back" "Begging - Rain 3">><<run setup.beggingComplete({gold:2},null,"thank")>><</link>></div></div><<elseif _result and _result.eventId is "rain_shelter" and _result.outcome is "linger">><p>You remain beneath the cloak after the rain has nearly stopped. The moment never becomes an explicit bargain, but his hand lingers at your waist and your body notices every careful point of contact.</p><p>Before leaving, he presses three coins into your hand. <span class="dialogue-line dialogue-male">"For a dry meal somewhere,"</span> he says. <span class="dialogue-line dialogue-male">"And for the company."</span></p><<print _result.gainHtml>><<include "Begging - Continue Links">><<else>><p>You step out as soon as the shower weakens. He accepts the boundary without complaint and offers two coins for a warm meal before continuing on his way.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">The sealed message</div><<if _event and _event.id is "sealed_message">><p>A nervous clerk circles the well twice before approaching. He keeps one hand inside his coat and checks the town hall windows before producing a folded message sealed with plain wax.</p><p><span class="dialogue-line dialogue-male">"Carry this to the spice seller beneath the red canopy,"</span> he whispers. <span class="dialogue-line dialogue-male">"Bring back her answer without opening it, and I will pay you."</span></p><div class="npc-activity-choice-list"><div><<link "Accept the errand" "Begging - Message 2">><<run setup.beggingContinuePassage("Begging - Message 2")>><</link>></div><div><<link "Refuse the suspicious errand" "Begging - Message 1">><<run setup.beggingComplete(null,null,"decline")>><</link>></div></div><<elseif _result and _result.eventId is "sealed_message">><p>You return the message unopened. The clerk looks relieved and disappointed in equal measure, then disappears toward the town hall.</p><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">Across the market</div><p>You tuck the message safely away and cross the crowded market. A cart blocks the direct route while two traders argue loudly over spilled grain.</p><p>The clerk watches from beside the well, trying and failing to look unconcerned.</p><div class="npc-activity-choice-list"><div><<link "Push through the crowded shortcut" "Begging - Message 3">><<run setup.beggingContinuePassage("Begging - Message 3")>><</link>></div><div><<link "Take the slower clear route" "Begging - Message 3">><<run setup.beggingContinuePassage("Begging - Message 3")>><</link>></div></div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">The spice seller</div><p>The spice seller breaks the seal, reads the brief message, and laughs under her breath. She writes a reply on the reverse side before folding it again.</p><p><span class="dialogue-line dialogue-female">"Did my timid admirer tell you what this concerns?"</span> she asks, holding the reply just beyond your reach. <span class="dialogue-line dialogue-female">"Or has he made you carry his courage as well as his words?"</span></p><div class="npc-activity-choice-list"><div><<link "Protect the clerk's confidence" "Begging - Message 4">><<run setup.beggingContinuePassage("Begging - Message 4")>><</link>></div><div><<link "Admit that he told you nothing" "Begging - Message 5">><<run setup.beggingContinuePassage("Begging - Message 5")>><</link>></div></div></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">Discretion rewarded</div><<if _event and _event.id is "sealed_message">><p>You say only that you were paid to deliver a sealed message. The seller nods, finally surrendering the reply.</p><p>Back at the well, the clerk reads her answer. Relief transforms him so completely that he laughs aloud. <span class="dialogue-line dialogue-male">"You carried this with more dignity than I did,"</span> he says.</p><div class="npc-activity-choice-list"><div><<link "Accept the promised payment" "Begging - Message 4">><<run setup.beggingComplete({gold:6},null,"discreet")>><</link>></div></div><<elseif _result and _result.eventId is "sealed_message">><p>He counts six coins into your hand, including two more than he first intended. Whatever the message contained, discretion was worth paying for.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">An awkward return</div><<if _event and _event.id is "sealed_message">><p>You admit the clerk gave you no explanation at all. The seller rolls her eyes, writes a second line, and sends you back with the reply.</p><p>The clerk reads it and turns scarlet. <span class="dialogue-line dialogue-male">"She says I owe my messenger an apology for involving her blindly,"</span> he mutters.</p><div class="npc-activity-choice-list"><div><<link "Accept what he offers" "Begging - Message 5">><<run setup.beggingComplete({gold:3},null,"open")>><</link>></div></div><<elseif _result and _result.eventId is "sealed_message">><p>He gives you three coins and a hurried apology. It is less than discretion might have earned, but more than another empty hour beside the well.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><<if _event>><<set _npc=setup.getNpcById(_event.npcId)>><<elseif _result>><<set _npc=setup.getNpcById(_result.npcId)>><</if>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">A price for tenderness</div><<if _event and _event.id is "proposition_kiss" and _npc>><p><<print setup.npcDisplayName(_npc)>> stops close enough that the crowd shields the conversation. Their attention lingers on your mouth before dropping to your open hand.</p><p><<if _npc.gender is "female">><span class="dialogue-line dialogue-female">"I could spare <<print setup.beggingRewardLabel(_event.reward)>>," they murmur. "But I would like a kiss worth remembering first. Nothing more, unless we both decide otherwise."</span><<else>><span class="dialogue-line dialogue-male">"I could spare <<print setup.beggingRewardLabel(_event.reward)>>," they murmur. "But I would like a kiss worth remembering first. Nothing more, unless we both decide otherwise."</span><</if>></p><<set _willingness=setup.beggingFavorWillingness(_event)>><div class="npc-activity-choice-list"><<if _willingness.ok>><div>[[Accept the private bargain|BeggingFavorAccept]]</div><<else>><div class="player-choice-status"><<= _willingness.text>></div><</if>><div><<link "Refuse the condition" "Begging - Proposition Kiss">><<run setup.beggingDeclineProposition()>><</link>></div></div><<elseif _result and _result.eventId is "proposition_kiss" and _result.outcome is "decline">><p>You refuse the condition. The offered payment disappears with them into the crowd, leaving your hand empty but the choice entirely yours.</p><<if _npc>><p><<print setup.npcDisplayName(_npc)>> gives a small, unreadable shrug. <<if _npc.gender is "female">><span class="dialogue-line dialogue-female">"Then we have no bargain."</span><<else>><span class="dialogue-line dialogue-male">"Then we have no bargain."</span><</if>></p><</if>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><<if _event>><<set _npc=setup.getNpcById(_event.npcId)>><<elseif _result>><<set _npc=setup.getNpcById(_result.npcId)>><</if>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">An indecent bargain</div><<if _event and _event.id is "proposition_touch" and _npc>><p><<print setup.npcDisplayName(_npc)>> listens to your plea, then glances toward a narrow service lane between two market buildings. Their hand closes around a purse, but they do not offer it yet.</p><p><<if _npc.gender is "female">><span class="dialogue-line dialogue-female">"I have <<print setup.beggingRewardLabel(_event.reward)>> for you if those hands can offer something more interesting than begging," they say. "Somewhere private. You know what I mean."</span><<else>><span class="dialogue-line dialogue-male">"I have <<print setup.beggingRewardLabel(_event.reward)>> for you if those hands can offer something more interesting than begging," they say. "Somewhere private. You know what I mean."</span><</if>></p><<set _willingness=setup.beggingFavorWillingness(_event)>><div class="npc-activity-choice-list"><<if _willingness.ok>><div>[[Accept the private bargain|BeggingFavorAccept]]</div><<else>><div class="player-choice-status"><<= _willingness.text>></div><</if>><div><<link "Refuse the condition" "Begging - Proposition Touch">><<run setup.beggingDeclineProposition()>><</link>></div></div><<elseif _result and _result.eventId is "proposition_touch" and _result.outcome is "decline">><p>You refuse the condition. The offered payment disappears with them into the crowd, leaving your hand empty but the choice entirely yours.</p><<if _npc>><p><<print setup.npcDisplayName(_npc)>> gives a small, unreadable shrug. <<if _npc.gender is "female">><span class="dialogue-line dialogue-female">"Then we have no bargain."</span><<else>><span class="dialogue-line dialogue-male">"Then we have no bargain."</span><</if>></p><</if>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><<if _event>><<set _npc=setup.getNpcById(_event.npcId)>><<elseif _result>><<set _npc=setup.getNpcById(_result.npcId)>><</if>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">More than charity</div><<if _event and _event.id is "proposition_oral" and _npc>><p><<print setup.npcDisplayName(_npc)>> lets a small purse hang visibly from one hand. The other gestures toward the shuttered rear of a storehouse where the square cannot easily see.</p><p><<if _npc.gender is "female">><span class="dialogue-line dialogue-female">"Come somewhere private and give me <<= _event.offerLabel>>," they say. "Do that properly, and the <<print setup.beggingRewardLabel(_event.reward)>> is yours."</span><<else>><span class="dialogue-line dialogue-male">"Come somewhere private and give me <<= _event.offerLabel>>," they say. "Do that properly, and the <<print setup.beggingRewardLabel(_event.reward)>> is yours."</span><</if>></p><<set _willingness=setup.beggingFavorWillingness(_event)>><div class="npc-activity-choice-list"><<if _willingness.ok>><div>[[Accept the private bargain|BeggingFavorAccept]]</div><<else>><div class="player-choice-status"><<= _willingness.text>></div><</if>><div><<link "Refuse the condition" "Begging - Proposition Oral">><<run setup.beggingDeclineProposition()>><</link>></div></div><<elseif _result and _result.eventId is "proposition_oral" and _result.outcome is "decline">><p>You refuse the condition. The offered payment disappears with them into the crowd, leaving your hand empty but the choice entirely yours.</p><<if _npc>><p><<print setup.npcDisplayName(_npc)>> gives a small, unreadable shrug. <<if _npc.gender is "female">><span class="dialogue-line dialogue-female">"Then we have no bargain."</span><<else>><span class="dialogue-line dialogue-male">"Then we have no bargain."</span><</if>></p><</if>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><<if _event>><<set _npc=setup.getNpcById(_event.npcId)>><<elseif _result>><<set _npc=setup.getNpcById(_result.npcId)>><</if>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">A costly private offer</div><<if _event and _event.id is "proposition_full" and _npc>><p><<print setup.npcDisplayName(_npc)>> studies you for a long moment, weighing need against opportunity. When they finally speak, their voice is low and direct.</p><p><<if _npc.gender is "female">><span class="dialogue-line dialogue-female">"I will give you <<print setup.beggingRewardLabel(_event.reward)>> for <<= _event.offerLabel>>," they offer. "There is a private room nearby. You can walk away now, but the offer will not wait."</span><<else>><span class="dialogue-line dialogue-male">"I will give you <<print setup.beggingRewardLabel(_event.reward)>> for <<= _event.offerLabel>>," they offer. "There is a private room nearby. You can walk away now, but the offer will not wait."</span><</if>></p><<set _willingness=setup.beggingFavorWillingness(_event)>><div class="npc-activity-choice-list"><<if _willingness.ok>><div>[[Accept the private bargain|BeggingFavorAccept]]</div><<else>><div class="player-choice-status"><<= _willingness.text>></div><</if>><div><<link "Refuse the condition" "Begging - Proposition Full">><<run setup.beggingDeclineProposition()>><</link>></div></div><<elseif _result and _result.eventId is "proposition_full" and _result.outcome is "decline">><p>You refuse the condition. The offered payment disappears with them into the crowd, leaving your hand empty but the choice entirely yours.</p><<if _npc>><p><<print setup.npcDisplayName(_npc)>> gives a small, unreadable shrug. <<if _npc.gender is "female">><span class="dialogue-line dialogue-female">"Then we have no bargain."</span><<else>><span class="dialogue-line dialogue-male">"Then we have no bargain."</span><</if>></p><</if>><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><<if _event>><<set _npc=setup.getNpcById(_event.npcId)>><<elseif _result>><<set _npc=setup.getNpcById(_result.npcId)>><</if>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">A private look</div><<if _event and _event.id is "sexual_exposure" and _npc>><p><<print setup.npcDisplayName(_npc)>> crouches beside the well and keeps four coins hidden beneath one palm. Their eyes travel over the neckline of your clothing before returning to your face.</p><p><span class="dialogue-line">"Behind the dyer's shed,"</span> they say quietly. <span class="dialogue-line">"Open your clothes and let me look for a moment. No touching. Four coins."</span></p><<set _willingness=setup.beggingFavorWillingness(_event)>><div class="npc-activity-choice-list"><<if _willingness.ok>><div><<link "Accept the private look" "Begging - Private Look">><<run setup.beggingResolveMiniFavor("expose")>><</link>></div><<else>><div class="player-choice-status"><<= _willingness.text>></div><</if>><div><<link "Refuse the offer" "Begging - Private Look">><<run setup.beggingDeclineProposition()>><</link>></div></div><<elseif _result and _result.eventId is "sexual_exposure" and _result.outcome is "accept">><<if _npc>><<print setup.npcIntimateMediaHtml("undress",_npc)>><</if>><p>You follow them behind the shed, where stacked barrels hide you from the square. Your fingers hesitate at the fastenings before you pull the cloth open and expose yourself to their gaze.</p><p>They keep the promised distance, but their attention feels almost physical as it moves over your bare skin. <span class="dialogue-line">"Slowly,"</span> they murmur when you begin to cover yourself. <span class="dialogue-line">"I paid for a moment, not a frightened glimpse."</span></p><p>When they are satisfied, the four coins are placed in your hand exactly as promised.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><<else>><p>You refuse. Their attention lingers for one final moment before the coins disappear back into their purse.</p><p><span class="dialogue-line">"Your choice,"</span> they say, and return to the market.</p><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<set _event=setup.beggingActiveEvent()>><<set _result=$lastBeggingResult>><<if _event>><<set _npc=setup.getNpcById(_event.npcId)>><<elseif _result>><<set _npc=setup.getNpcById(_result.npcId)>><</if>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">Coins for a touch</div><<if _event and _event.id is "sexual_grope" and _npc>><p><<print setup.npcDisplayName(_npc)>> listens to your request and steps close enough to block you from the crowd's view. Seven coins click together inside their closed fist.</p><p><span class="dialogue-line">"Let me put my hands beneath that outfit,"</span> they say. <span class="dialogue-line">"I want to feel your breasts while you stand still for me. Agree, and these are yours."</span></p><<set _willingness=setup.beggingFavorWillingness(_event)>><div class="npc-activity-choice-list"><<if _willingness.ok>><div><<link "Accept the intimate touch" "Begging - Paid Touch">><<run setup.beggingResolveMiniFavor("grope")>><</link>></div><<else>><div class="player-choice-status"><<= _willingness.text>></div><</if>><div><<link "Refuse the offer" "Begging - Paid Touch">><<run setup.beggingDeclineProposition()>><</link>></div></div><<elseif _result and _result.eventId is "sexual_grope" and _result.outcome is "accept">><p>You follow them into the narrow space between two shuttered stalls. The market remains close enough to hear, but the hanging canvas hides what happens beneath your cloak.</p><p>Their palms settle over your breasts through the loosened neckline, testing your shape before squeezing with slow confidence. You agreed to remain still, yet your breathing betrays every touch.</p><p><span class="dialogue-line">"You react more honestly than you beg,"</span> they whisper, thumbs lingering before their hands finally withdraw.</p><p>They straighten your clothing and count seven coins into your palm.</p><<print _result.gainHtml>><<include "Begging - Continue Links">><<else>><p>You refuse and pull your cloak more securely around yourself. Their fist closes over the coins.</p><p><span class="dialogue-line">"Then keep asking the square,"</span> they say before walking away.</p><<include "Begging - Continue Links">><</if>></div><</nobr>><<nobr>><<run setup.beggingComplete(null,null,"tired")>><div class="npc-activity-panel farm-work-event-panel begging-event-panel"><div class="npc-interact-name">Too tired to continue</div><p>You try to settle beside the well again, but exhaustion makes even holding out your hand feel like work.</p><p>For now, you need rest more than another hour beneath the square's indifferent eyes.</p><div class="npc-activity-choice-list"><div>[[Leave the well|Ambercross Center]]</div></div></div><</nobr>><<print setup.locationImageHtml("img/location/AC_Varioushousewest.png", "Ambercross west-side houses", "img/location/AC_Varioushousewestnight.png")>>
Small cottages crowd along a narrow, uneven lane, their walls patched with stone, timber, and worn plaster. Sagging thatched roofs, crooked fences, stacked firewood, laundry lines, and tiny vegetable gardens make the area feel cramped but lived-in.
The road is rougher here than elsewhere in the village, with broken cobbles giving way to dirt and mud.
<<nobr>><div class="location-action-list">
<div><<link "Approach a house" "House Street">><<set $houseStreetReturn = "Ambercross Houses W">><</link>></div>
</div><</nobr>>
<<travel "east" "Go towards the village center" "Ambercross Center" 5>><<nobr>><<run setup.ensureNpcSystem()>><<set _location = $houseStreetReturn || "Ambercross Houses">><<set _streetLabel = _location is "BH Homes" ? "Briar Lane" : (_location is "Ambercross Houses W" ? "West Lane" : "East Lane")>><<set _houses = setup.housesForLocation(_location)>>
<div class="house-directory-shell">
<div class="house-directory-heading"><<print _streetLabel + " houses">></div>
<p class="house-directory-intro">You walk along the street, taking in the doors, narrow paths, and windows facing the lane. Some homes are familiar; others reveal nothing about who lives behind them.</p>
<div class="house-directory-grid">
<<for _house range _houses>><<capture _house>><div class="house-directory-entry"><<link setup.houseDirectoryLabel(_house) "House Exterior">><<run setup.houseSelect(_house.id)>><</link>></div><</capture>><</for>>
</div>
<div class="house-return-link"><<link "Return to the street" _location>><</link>></div>
</div><</nobr>><<nobr>><<set _house = setup.houseById($activeHouseId)>>
<<if !_house>><p>You lose track of which house you meant to approach.</p><div class="house-return-link">[[Return to the houses|House Street]]</div>
<<else>>
<div class="house-exterior-shell">
<<print setup.houseExteriorImageHtml(_house)>>
<div class="house-address-heading"><<= _house.address >></div>
<p class="house-exterior-description"><<= _house.description >></p>
<<set _knownResidents = setup.houseKnownResidentsText(_house)>><<if _knownResidents>><p class="house-known-residents"><<= _knownResidents >></p><</if>>
<div class="house-exterior-detail">The front step is close enough to the road that a knock would be plainly heard. A side window can be reached by following the wall into the narrow space beside the house.</div>
<div class="house-action-list">
<<if setup.housePlayerLivesHere(_house)>><div><<link "Enter your home" "NPCHome">><<run setup.houseEnterSelected()>><</link>></div><<else>><div><<link "Knock on the door" "House Door">><<set $houseDoorResult = setup.houseKnock(_house)>><</link>></div><</if>>
<<if _house.windowPeekDay isnot setup.houseDoorstepDay()>><div><<link "Look through a window">><<set $houseWindowEvent = setup.houseWindowEvent(_house)>><<goto setup.houseWindowPassage($houseWindowEvent)>><</link>></div><</if>>
<div class="house-return-link"><<link "Return to the house list" "House Street">><<set $houseStreetReturn = _house.location>><</link>></div>
</div></div><</if>><</nobr>><<nobr>><<set _house = setup.houseById($activeHouseId)>><<set _result = $houseDoorResult>>
<div class="house-door-shell"><div class="house-address-heading"><<= _house ? _house.address : "The house" >></div>
<div class="house-door-result">
<<if !_house or !_result>><p>The moment at the door passes.</p>
<<elseif _result.outcome is "vacant">><p>Your knock sounds hollow inside. Dust has gathered along the threshold, and a closer look shows that the shutters have been secured from within. No one currently lives here.</p>
<<elseif _result.outcome is "no_answer">><p>You knock twice and wait. No footsteps answer from within. Whoever lives here is not home right now.</p>
<<elseif _result.outcome is "answered">><<set _npc = setup.getNpcById(_result.npcId)>><<set _options = setup.houseDoorOptions(_npc, _house, _result)>><p>Footsteps cross the room before the door opens. <<= setup.npcDisplayName(_npc) >> stands on the other side, one hand still resting on the latch.</p>
<<if _npc.gender is "female">><p><span class="dialogue-line dialogue-female">"Yes? What do you need?"</span> she asks.</p><<else>><p><span class="dialogue-line dialogue-male">"Yes? What do you need?"</span> he asks.</p><</if>>
<div class="house-door-choice-grid">
<<if _options.enter>><div class="house-door-choice"><<link "Step inside" "NPCHome">><<run setup.houseEnterSelected()>><</link>></div><</if>>
<<if _options.chat>><div class="house-door-choice"><<link "Chat at the door" "House Door Chat">><<run setup.houseDoorChatBegin(_npc.id)>><</link>></div><</if>>
<<if _options.visit>><div class="house-door-choice"><<link "Ask to visit" "House Visit Request">><<set $houseVisitResult = setup.houseVisitRequest(_npc.id, "social")>><</link>></div><</if>>
<<if _options.work>><div class="house-door-choice"><<link "Offer household work" "House Visit Request">><<set $houseVisitResult = setup.houseVisitRequest(_npc.id, "help_house")>><</link>></div><</if>>
<<if _options.food>><div class="house-door-choice"><<link "Ask for something to eat" "House Visit Request">><<set $houseVisitResult = setup.houseVisitAskForFood(_npc.id)>><</link>></div><</if>>
<<if _options.flirt>><div class="house-door-choice"><<link "Flirt at the doorstep" "NPCFlirt">><<run setup.houseDoorFlirtBegin(_npc.id)>><</link>></div><</if>>
<<if _options.activity>><div class="house-door-choice"><<link "Invite to activity" "NPCActivityMenu">><<set $activeNpcId = _npc.id>><<set $return = "House Door">><</link>></div><</if>>
<<if _options.trade>><div class="house-door-choice"><<link "Trade" "NPCTrade">><<set $activeNpcId = _npc.id>><<set $npcTradeMode = "personal">><<set $npcTradeReturn = "House Door">><</link>></div><</if>>
</div>
<</if>></div>
<div class="house-return-link">[[Step away from the door|House Exterior]]</div></div><</nobr>><<nobr>><<set _house = setup.houseById($activeHouseId)>><div class="house-window-shell"><div class="house-address-heading">A quiet window</div><div class="house-window-result"><p>You edge close to the glass and shade your eyes with one hand. The room beyond is empty and still. Nothing moves except a curtain stirring near the hearth.</p><p>Either the residents are away or the house is vacant. There is nothing here to learn right now.</p></div><div class="house-return-link">[[Return to the front of the house|House Exterior]]</div></div><</nobr>><<nobr>><<set _house = setup.houseById($activeHouseId)>><<set _event = $houseWindowEvent>><<set _npc = setup.getNpcById(_event.npcId)>><div class="house-window-shell"><div class="house-address-heading">Life behind the shutters</div><div class="house-window-result"><p>Through a gap in the shutters, you see <<= setup.npcDisplayName(_npc) >> occupied with the ordinary work of home: sorting a small stack of belongings, tending the fire, and setting the room in order.</p><p>There is no secret in it, only a private life continuing beyond the street.</p></div><div class="house-return-link">[[Return to the front of the house|House Exterior]]</div></div><</nobr>><<nobr>><<set _event = $houseWindowEvent>><<set _npc = setup.getNpcById(_event.npcId)>><div class="house-window-shell"><div class="house-address-heading">A private moment</div><div class="house-window-result">
<<if _event.activity is "masturbate" and _npc.gender is "female">><p>You find her alone near the bed, skirts gathered above her thighs. One hand presses between her legs while the other grips the edge of the mattress, her careful silence broken by a shallow breath.</p>
<<elseif _event.activity is "masturbate">><p>You find him alone near the bed with his trousers open, his fist working slowly over his cock. His attention is turned entirely inward, unaware of the watcher beyond the glass.</p>
<<else>><p><<= setup.npcDisplayName(_npc) >> crosses the room while changing clothes, briefly standing bare before reaching for a clean garment. The glimpse is ordinary to them and unexpectedly intimate to you.</p><</if>>
<<if _event.arousalGain>><p id="Arousalgain">Arousal +<<= _event.arousalGain >></p><</if>></div><div class="house-return-link">[[Return to the front of the house|House Exterior]]</div></div><</nobr>><<nobr>><<set _event = $houseWindowEvent>><<set _npc = setup.getNpcById(_event.npcId)>><<set _other = setup.getNpcById(_event.otherId)>><<set _woman = _npc.gender is "female" ? _npc : _other>><<set _man = _npc.gender is "male" ? _npc : _other>><div class="house-window-shell"><div class="house-address-heading">More than conversation</div><div class="house-window-result">
<<if _event.activity is "oral" and _event.speakerGender is "female">><p>The pair have abandoned any pretense of conversation. The woman reclines against the bed while the man kneels between her open thighs. <span class="dialogue-line dialogue-female">"Stop teasing and eat my pussy,"</span> she whispers, pulling him closer by the hair.</p>
<<elseif _event.activity is "oral">><p>The pair have abandoned any pretense of conversation. The man sits at the edge of the bed while the woman kneels between his legs. <span class="dialogue-line dialogue-male">"Suck my cock,"</span> he says softly, one hand settling behind her head.</p>
<<else>><p><<= setup.npcDisplayName(_npc) >> and <<= setup.npcDisplayName(_other) >> stand close beside the hearth, kissing with the unhurried familiarity of people who have done this many times before. One draws the other nearer when they begin to part.</p><</if>>
<p>Whatever else the village knows, you now have little doubt that these two share more than an address.</p><<if _event.arousalGain>><p id="Arousalgain">Arousal +<<= _event.arousalGain >></p><</if>></div><div class="house-return-link">[[Return to the front of the house|House Exterior]]</div></div><</nobr>><<nobr>><<set _event = $houseWindowEvent>><<set _npc = setup.getNpcById(_event.npcId)>><<set _other = setup.getNpcById(_event.otherId)>><<set _partner = _npc.social and _npc.social.partnerId ? setup.getNpcById(_npc.social.partnerId) : null>><div class="house-window-shell"><div class="house-address-heading">Someone who should not be here</div><div class="house-window-result"><p><<= setup.npcDisplayName(_npc) >> is pressed against someone who does not live here. Their kiss is hungry, hands already slipping beneath loosened clothing as they move toward the bed.</p>
<<if _npc.gender is "female">><p><span class="dialogue-line dialogue-female">"We have time before anyone comes back,"</span> she says. <span class="dialogue-line dialogue-female">"Make me cum before you leave."</span></p><<else>><p><span class="dialogue-line dialogue-male">"We have time before anyone comes back,"</span> he says, pulling the visitor closer. <span class="dialogue-line dialogue-male">"You're going to make me cum before you leave."</span></p><</if>>
<p><<if _partner>>Their partner, <<= setup.npcDisplayName(_partner) >>, is nowhere in sight. <</if>>You have witnessed something that could damage or end a relationship if it becomes known.</p><<if _event.arousalGain>><p id="Arousalgain">Arousal +<<= _event.arousalGain >></p><</if>></div><div class="house-return-link">[[Return to the front of the house|House Exterior]]</div></div><</nobr>><<nobr>><<set _event = $houseWindowEvent>><<set _npc = setup.getNpcById(_event.npcId)>><div class="house-window-shell"><div class="house-address-heading">Caught at the window</div><div class="house-window-result"><p>Someone is looking straight back through the glass: <<= setup.npcDisplayName(_npc) >>. Their expression hardens immediately.</p><<if _npc.gender is "female">><p><span class="dialogue-line dialogue-female">"Get away from my window,"</span> she snaps. <span class="dialogue-line dialogue-female">"I will not ask twice."</span></p><<else>><p><span class="dialogue-line dialogue-male">"Get away from my window,"</span> he snaps. <span class="dialogue-line dialogue-male">"I will not ask twice."</span></p><</if>><p id="Trustloss">Trust -1.5 | Affection -1</p></div><div class="house-return-link">[[Retreat to the front of the house|House Exterior]]</div></div><</nobr>><<nobr>><<set _result = $houseVisitResult>><<set _npc = _result ? setup.getNpcById(_result.npcId) : null>><<set _house = _result ? setup.houseById(_result.houseId) : null>>
<div class="house-visit-shell"><div class="house-address-heading"><<= _house ? _house.address : "At the door" >></div><div class="house-visit-result">
<<if !_result or !_npc or !_house or _result.outcome is "gone">>
<p><<= _house and _house.kind is "tavern_lodging" ? "The conversation is interrupted before it can begin. Someone calls from downstairs, and your host closes the room door to answer." : "The conversation is interrupted before it can begin. A sound deeper in the house draws the resident away, and the door closes again." >></p>
<<elseif _result.kind is "food">>
<<if _result.outcome is "accepted">><p>You admit that you have not eaten enough. <<= setup.npcDisplayName(_npc) >> studies you for a moment, then brings you <<= _result.foodDescription || "something to eat" >> from the house and a cup of water.</p>
<<if _result.tone is "direct">><p><span class="dialogue-line">"Eat it here,"</span> they say. <span class="dialogue-line">"I will not have you dropping it in the road after asking me for it."</span></p>
<<elseif _result.tone is "cautious">><p><span class="dialogue-line">"This is what I can spare,"</span> they say quietly. <span class="dialogue-line">"Make it last until you find a proper meal."</span></p>
<<else>><p><span class="dialogue-line">"Here. No one should have to bargain before every mouthful,"</span> they say, waiting until you begin to eat.</p><</if>>
<p><<print setup.houseVisitGainHtml(_result)>></p>
<<elseif _result.outcome is "already_asked">><p>They remember the request. <span class="dialogue-line">"I already answered you today,"</span> they say. <span class="dialogue-line">"I cannot keep feeding every knock at the door."</span></p>
<<elseif _result.outcome is "player_limit">><p>The request reaches your tongue, but you cannot bring yourself to make another household responsible for feeding you today. You change the subject before the words leave your mouth.</p>
<<elseif _result.outcome is "not_hungry">><p>You consider asking for food, then realize hunger is not truly driving the request. You let the thought pass.</p>
<<elseif _result.outcome is "no_food">><p>They glance toward the hearth. There is nothing ready to spare today, and they tell you so without making a show of it.</p>
<<else>><p>You ask whether they can spare anything to eat. Their expression closes before the request is finished.</p><p><span class="dialogue-line">"Not today,"</span> they say. <span class="dialogue-line">"What is in this house already has somewhere to go."</span></p><</if>>
<<else>>
<<if _result.kind is "social" and (_result.status is "hostile" or _result.status is "disliked")>><p>You ask for a moment inside. The request makes the tension between you impossible to ignore.</p>
<<elseif _result.kind is "social" and setup.npcRelationshipStageRank[_result.status] >= 4>><p>You came to spend time with someone whose company has become important to you. Their hand eases on the latch as they recognize you.</p>
<<elseif _result.kind is "social" and setup.npcRelationshipStageRank[_result.status] >= 2>><p>You came to spend time with a friend. Their hand eases on the latch as they recognize you.</p>
<<elseif _result.kind is "social">><p>You tell them that you came to see them rather than to ask after work or coin. For a moment, the reason seems to surprise them more than the knock itself.</p>
<<elseif _result.kind is "help_house">><p>You glance past the doorway and offer an extra pair of hands for whatever work the house still needs. The offer sounds more serious once spoken aloud.</p>
<<else>><p>You ask plainly whether you may come inside for a little while. Their hand remains on the door as they decide how much welcome to give you.</p><</if>>
<<if _result.outcome is "accepted" and _result.kind is "help_house">>
<p>They glance back at the unfinished work and step aside. This is a job, not a social call; you agree to settle payment once the task is done.</p>
<<npcSay _npc "There is something you can do. Come in, and I will show you what needs putting right.">>
<<elseif _result.outcome is "accepted">>
<<if _result.explanation>><p>They think over what you have said without pretending the trouble between you has vanished.</p><<npcSay _npc "I will hear you out for a little while. Do not mistake that for everything being settled.">>
<<elseif _result.status is "hostile" or _result.status is "disliked">><p>They open the door only enough to make room for you. The invitation is cautious, not forgiving.</p><<npcSay _npc "Come in for a moment. We still have things to settle.">>
<<elseif setup.npcRelationshipStageRank[_result.status] >= 4>><p>Recognition softens their face as soon as they see you.</p><<npcSay _npc "Come in. I was hoping we would have a little time together.">>
<<elseif setup.npcRelationshipStageRank[_result.status] >= 2>><p>Recognition softens their face as soon as they see you.</p><<npcSay _npc "You hardly need to ask. Come in and tell me how your day has gone.">>
<<elseif _result.tone is "warm">><p>Their expression opens into easy warmth.</p><<if _house.kind is "tavern_lodging">><<npcSay _npc "Come in before someone else in the hallway decides to join our conversation.">><<else>><<npcSay _npc "You came all this way to stand on the step? Come inside before the whole street joins the conversation.">><</if>>
<<elseif _result.tone is "cautious">><p>They hesitate, glance once into the room behind them, then widen the door.</p><<npcSay _npc "For a little while. I was not expecting company.">>
<<elseif _result.tone is "direct">><p>They make the decision without ceremony and step aside.</p><<npcSay _npc "Come in, then. If you have something to say or do, say it properly.">>
<<else>><p>They consider you for another breath before opening the door farther.</p><<npcSay _npc "All right. You can come in for a while.">><</if>>
<<if _result.otherIds and _result.otherIds.length>><p class="house-visit-context">Someone else is moving about inside. This will not be an entirely private visit.</p><</if>>
<<elseif _result.outcome is "explain">><p>They stop you before you can pass the threshold. The strain between you is still there, but they have not shut the door.</p><<npcSay _npc "You can say why you came. That does not mean I will let you in.">>
<div class="house-visit-choice-list">
<div class="house-visit-choice"><<link "Acknowledge what went wrong" "House Visit Request">><<run setup.houseVisitExplainRequest("acknowledge")>><</link>></div>
<div class="house-visit-choice"><<link "Ask to hear their side" "House Visit Request">><<run setup.houseVisitExplainRequest("listen")>><</link>></div>
<div class="house-visit-choice"><<link "Insist they let you in" "House Visit Request">><<run setup.houseVisitExplainRequest("press")>><</link>></div></div>
<<elseif _result.outcome is "explain_refused">><<if _result.explanation is "press">><p>Your insistence hardens their expression.</p><<if _house.kind is "tavern_lodging">><<npcSay _npc "No. You do not get to demand a place in my room.">><<else>><<npcSay _npc "No. You do not get to demand a place in my home.">><</if>><<else>><p>They hear you out, but keep hold of the door.</p><<npcSay _npc "I heard you. I need more than one conversation before I can welcome you inside.">><</if>>
<<elseif _result.outcome is "enough">><p>They have already answered this request today.</p><<npcSay _npc "Another day. I have given you my answer.">>
<<else>>
<<if _result.kind is "help_house">><p>They look back at the work, then shake their head. They are not taking on help today.</p><<else>>
<<if _result.status is "hostile" or _result.status is "disliked">><p>Their hand does not leave the latch.</p><<npcSay _npc "We are not at a point where I want you inside. Leave me be today.">>
<<elseif _result.tone is "cautious">><p>They keep most of their body behind the door, already drawing it inward.</p><<npcSay _npc "I would rather talk another time.">>
<<elseif _result.tone is "direct">><p>The refusal arrives cleanly.</p><<if _house.kind is "tavern_lodging">><<npcSay _npc "No. This is my room, and I am not receiving company today.">><<else>><<npcSay _npc "No. This is my home, and I am not opening it to company today.">><</if>>
<<else>><p>They offer an apologetic shake of the head.</p><<npcSay _npc "This is not a good time. Find me elsewhere, or try another day.">><</if>>
<</if>><</if>><</if>>
<<if _result and _result.explanation and _result.trustGain>><p><<print setup.houseVisitGainHtml(_result)>></p><</if>>
</div>
<div class="house-action-list"><<if _result and _result.canEnter and _result.kind is "help_house" and !setup.houseVisitDailyState(_npc).householdHelp>><div><<link "Start the household job" "House Work">><<run setup.houseWorkBegin(_result)>><</link>></div><<elseif _result and _result.canEnter and _result.kind isnot "help_house" and (setup.housePlayerLivesHere(_house) or setup.houseVisitDailyState(_npc).visits < 1)>><div><<link "Follow them inside" "House Visit Interior">><<run setup.houseVisitBegin(_result)>><</link>></div><</if>><<set _doorReturn = _house and _house.kind is "tavern_lodging" ? "Tavern Lodging Door" : "House Door">><div class="house-return-link"><<link "Return to the doorstep" _doorReturn>><</link>></div></div></div><</nobr>><<nobr>><<set _house = setup.houseById($activeHouseId)>><<set _result = $houseDoorResult>><<set _npc = _house ? setup.getNpcById(_house.residentIds[0]) : null>>
<div class="house-visit-shell"><div class="house-address-heading"><<= _house ? _house.address : "Upstairs at the tavern" >></div>
<<if !_house or _house.kind isnot "tavern_lodging" or !_npc>><p>The room cannot be found.</p>
<<elseif !_result or _result.outcome is "no_answer">><p>You knock and wait beside the narrow door. No one answers. Your acquaintance may be at work, out in the village, or back in Briar Hollow.</p>
<<else>><<set _options = setup.houseDoorOptions(_npc, _house, _result)>><p>Footsteps cross the floor before the latch lifts. <<npcMention _npc>> opens the door, with a work bag and a folded blanket visible beyond their shoulder. The room is hired for the working week, not a second house.</p>
<<npcSay _npc "Hello. I was not expecting a knock. Did you come up to see me?">>
<<if _options.visit>><div class="house-visit-choice"><<link "Ask if they have time for a visit" "House Visit Request">><<set $houseVisitResult = setup.houseVisitRequest(_npc.id, "social")>><</link>></div><</if>>
<<if _options.chat>><div class="house-visit-choice"><<link "Chat at the door" "House Door Chat">><<run setup.houseDoorChatBegin(_npc.id)>><</link>></div><</if>>
<<if _options.flirt>><div class="house-visit-choice"><<link "Flirt at the doorstep" "NPCFlirt">><<run setup.houseDoorFlirtBegin(_npc.id)>><</link>></div><</if>>
<<if _options.activity>><div class="house-visit-choice"><<link "Invite to activity" "NPCActivityMenu">><<set $activeNpcId = _npc.id>><<set $return = "Tavern Lodging Door">><</link>></div><</if>>
<<if _options.trade>><div class="house-visit-choice"><<link "Trade" "NPCTrade">><<set $activeNpcId = _npc.id>><<set $npcTradeMode = "personal">><<set $npcTradeReturn = "Tavern Lodging Door">><</link>></div><</if>><</if>>
<div class="house-return-link">[[Return to the hallway|Ambercross Tavern Upstairs]]</div></div><</nobr>><<nobr>><<set _data = setup.houseVisitActiveData()>>
<<if !_data>><<set _emptyHouse = setup.houseById($activeHouseId)>><<set _emptyReturn = _emptyHouse and _emptyHouse.kind is "tavern_lodging" ? "Ambercross Tavern Upstairs" : "House Exterior">><<set _emptyLabel = _emptyHouse and _emptyHouse.kind is "tavern_lodging" ? "Return to the hallway" : "Return outside">><div class="house-visit-shell"><p>The visit has already ended.</p><div class="house-return-link"><<link _emptyLabel _emptyReturn>><</link>></div></div>
<<else>><<set _visit = _data.visit>><<set _npc = _data.npc>><<set _house = _data.house>><<set _others = setup.houseVisitOtherResidentsAtHome(_house, _npc)>><<set _returning = Object.keys(_visit.actions).length > 0>>
<div class="house-visit-shell"><div class="house-address-heading">Inside <<= _house.address >></div>
<<print setup.householdVisitTextHtml(_data)>>
<<if !_visit.hostGone>><<print setup.npcHomeUpperPortraitHtml(_npc, setup.housePlayerLivesHere(_house) ? "resident" : "visit")>><</if>>
<div class="house-visit-choice-list">
<<for _option range setup.householdVisitChoices(_data)>><<capture _option>><div class="house-visit-choice"><<link _option.label>><<run setup.householdResolveVisit(_option.id)>><<goto setup.householdChoicePassage(_option.id)>><</link>></div><</capture>><</for>>
<<if !_visit.hostGone and !_visit.householdScene>>
<<if setup.houseAcquaintanceAvailable(_data)>><<set _acquaintanceLabel = _visit.acquaintance ? "Continue getting acquainted" : "Get acquainted">><div class="house-visit-choice"><<link _acquaintanceLabel>><<if setup.houseAcquaintanceBegin()>><<goto "House Visit Acquaintance">><<else>><<goto "House Visit Interior">><</if>><</link>></div>
<<elseif _house.kind isnot "tavern_lodging" and setup.houseVisitEventAvailable()>><div class="house-visit-choice"><<link setup.houseVisitSocialLabel(_npc)>><<set _event = setup.houseVisitChooseEvent()>><<if _event>><<goto _event.passage>><<else>><<goto "House Visit Interior">><</if>><</link>></div><</if>>
<<if _house.kind isnot "tavern_lodging" and _visit.hospitality and !_visit.actions.hospitality>><div class="house-visit-choice"><<link "Accept their hospitality" "House Visit Action">><<set $houseVisitActionResult = setup.houseVisitResolveAction("hospitality")>><</link>></div><</if>>
<<if _house.kind isnot "tavern_lodging" and !setup.housePlayerLivesHere(_house) and !_visit.actions.sleepRequest and setup.houseGuestRequestWindow()>><div class="house-visit-choice"><<link "Ask to stay the night" "House Guest Request">><<set $houseGuestStay = setup.houseGuestRequestStay()>><</link>></div><</if>>
<</if>>
<<if setup.housePlayerLivesHere(_house)>><div class="house-visit-choice"><<link "Return to your household" "NPCHome">><<run setup.houseVisitEnd()>><</link>></div><</if>>
<div class="house-visit-choice"><<set _visitReturn = _house.kind is "tavern_lodging" ? "Ambercross Tavern Upstairs" : "House Exterior">><<link "End the visit" _visitReturn>><<run setup.houseVisitEnd()>><</link>></div>
</div></div><</if>><</nobr>><<nobr>><<set _result = $houseVisitActionResult>><<set _npc = _result ? setup.getNpcById(_result.npcId) : null>><<set _house = _result ? setup.houseById(_result.houseId) : null>>
<div class="house-visit-shell"><div class="house-address-heading"><<= _house ? _house.address : "The visit" >></div><div class="house-visit-result">
<<if !_result or !_npc or _result.outcome is "unavailable">><p>The opportunity passes before anything comes of it.</p>
<<elseif _result.outcome is "repeated">><p>You have already given that part of the visit enough time. Pressing it again would only make the exchange feel forced.</p>
<<elseif _result.outcome is "tired">><p>You offer to help, but the first look at the work makes your tired limbs answer for you. <<= setup.npcDisplayName(_npc) >> notices and waves you away from it.</p><p><span class="dialogue-line">"Sit down before helping you becomes the next task,"</span> they say.</p>
<<elseif _result.action is "talk">>
<<if _result.variant is 0>><p>You settle near the hearth and let the conversation grow at its own pace. Without market noise or work interrupting, small answers become longer ones. <<= setup.npcDisplayName(_npc) >> speaks about the shape of an ordinary week and asks questions in return rather than merely waiting to be heard.</p>
<<elseif _result.variant is 1>><p>The table gives the conversation an unexpected steadiness. You trade stories about Ambercross, difficult employers, and neighbors who somehow know every private mistake by supper. By the time the talk quiets, you understand each other a little better.</p>
<<else>><p>At first you speak about harmless things: weather, work, the price of bread. Privacy gradually loosens the words. <<= setup.npcDisplayName(_npc) >> shares an opinion they would have swallowed in public, then watches carefully to see what you make of it.</p><</if>>
<p><<print setup.houseVisitGainHtml(_result)>></p>
<<elseif _result.action is "task">>
<<if _result.variant is 0>><p>A loose shutter has been knocking against the wall whenever the wind turns. You hold it steady while <<= setup.npcDisplayName(_npc) >> resets the hinge, passing nails and tools until the frame finally sits square.</p><p><span class="dialogue-line">"That sound has been following me into my sleep,"</span> they admit. <span class="dialogue-line">"You have done me a real kindness."</span></p>
<<elseif _result.variant is 1>><p>You carry split wood from the cramped yard and stack it beside the hearth while they clear old ash and sweep the floor. It is plain work, but shared effort makes the room change quickly.</p><p><span class="dialogue-line">"Most visitors find a chair before they find the broom,"</span> they say, plainly pleased.</p>
<<else>><p>A heavy storage chest needs to be shifted away from damp creeping through the wall. The two of you strain it across the floor, stop to argue about the angle, then laugh when the final shove sends both of you stumbling.</p><p><span class="dialogue-line">"Useful and entertaining,"</span> they decide. <span class="dialogue-line">"I may let you visit again."</span></p><</if>>
<p><<print setup.houseVisitGainHtml(_result)>></p>
<<elseif _result.action is "hospitality">><<if _result.itemLabel or _result.hungerGain>><p><<= setup.npcDisplayName(_npc) >> sets water and <<= _result.foodDescription || "some food" >> on the table. You share the quiet meal while the room settles around you.</p><<npcSay _npc "A guest should not leave my table hungrier than they arrived.">><<else>><p>There is little food to spare, but <<= setup.npcDisplayName(_npc) >> fills a cup with water and makes room for you at the table.</p><<npcSay _npc "It is not much, but you are welcome to sit a while.">><</if>><p><<print setup.houseVisitGainHtml(_result)>></p>
<<elseif _result.action is "private">>
<<if _result.variant is 0>><p>With no one else in the room, you lower your voice and ask what has truly been troubling them. <<= setup.npcDisplayName(_npc) >> avoids the question at first, then gives an answer too honest for the street.</p><p><span class="dialogue-line">"Do not repeat that,"</span> they say. <span class="dialogue-line">"I told you because I think you understand the cost of it."</span></p>
<<elseif _result.variant is 1>><p>The quiet allows both of you to stop performing confidence. They speak about a fear they have carried alone, and you answer with something of your own. Neither confession solves anything, but the exchange leaves less distance between you.</p>
<<else>><p>You ask about the life they imagined before Ambercross settled around them. The answer comes slowly, shaped by old choices and plans that never quite died. When they finish, they look relieved and slightly exposed.</p><p><span class="dialogue-line">"It sounded less foolish while you were listening,"</span> they say.</p><</if>>
<p><<print setup.houseVisitGainHtml(_result)>></p>
<</if>></div><div class="house-return-link">[[Continue the visit|House Visit Interior]]</div></div><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">A quiet hour</div><p>The conversation thins without becoming uncomfortable. The fire settles into a low red glow, and the village beyond the shutters sounds very far away. <<= setup.npcDisplayName(_data.npc) >> turns a cup slowly between both hands, thinking before speaking.</p><p><span class="dialogue-line">"Most people rush to fill silence,"</span> they say. <span class="dialogue-line">"Then they wonder why they never hear anything honest. I do not mind this. Sitting here without performing for anyone."</span></p><p>Their eyes lift to yours. The admission is small, but the trust behind it is not.</p><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Let them speak when they are ready" "House Event Result">><<run setup.houseVisitResolveEvent("listen")>><</link>></div><div class="house-visit-choice"><<link "Break the silence with a gentle joke" "House Event Result">><<run setup.houseVisitResolveEvent("joke")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">Work carried home</div><p>A tool, ledger, or half-finished piece of work has been left on the table. <<= setup.npcDisplayName(_data.npc) >> notices you looking and exhales through their nose, the sort of tired sound that comes from an argument repeated all day.</p><p><span class="dialogue-line">"They expect the work done quickly, cheaply, and perfectly,"</span> they say. <span class="dialogue-line">"Pick any two, I told them. They laughed as though I had made a joke."</span></p><p>The complaint soon becomes a fuller account of the people involved, the mistake that started it, and the burden they have not admitted carrying. By the end, it is clear they want more than polite sympathy.</p><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Listen without trying to fix it" "House Event Result">><<run setup.houseVisitResolveEvent("listen")>><</link>></div><div class="house-visit-choice"><<link "Offer practical advice" "House Event Result">><<run setup.houseVisitResolveEvent("advise")>><</link>></div><div class="house-visit-choice"><<link "Help finish what can be done here" "House Event Result">><<run setup.houseVisitResolveEvent("help")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">Needle and thread</div><p><<= setup.npcDisplayName(_data.npc) >> pulls a basket closer and produces a shirt with a long tear beneath one arm. Their first attempt at threading the needle misses twice, earning a muttered curse and a reluctant smile.</p><p><span class="dialogue-line">"I can manage harder things than this,"</span> they insist. <span class="dialogue-line">"Apparently cloth has decided to humble me."</span></p><p>They shift beside you on the bench, close enough that your knees touch whenever either of you reaches into the basket.</p><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Take the needle and help" "House Event Result">><<run setup.houseVisitResolveEvent("help")>><</link>></div><div class="house-visit-choice"><<link "Stay close and let them struggle through it" "House Event Result">><<run setup.houseVisitResolveEvent("close")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">What the cupboard allows</div><p>A pot near the hearth holds more than <<= setup.npcDisplayName(_data.npc) >> expected to eat alone. They uncover it, consider the contents, then begin dividing the meal before you have answered.</p><p><span class="dialogue-line">"It is only onions, broth, and yesterday's bread,"</span> they say. <span class="dialogue-line">"But it is hot, and there is enough. Sit down before pride makes both of us foolish."</span></p><p>The bowl smells plain and comforting. Beside it lies a sound heel of bread that would travel well wrapped in cloth.</p><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Share the meal now" "House Event Result">><<run setup.houseVisitResolveEvent("eat")>><</link>></div><div class="house-visit-choice"><<link "Ask to save the bread for later" "House Event Result">><<run setup.houseVisitResolveEvent("save")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">Something kept aside</div><p><<= setup.npcDisplayName(_data.npc) >> searches a shelf and returns with a small object wrapped in worn cloth: a carved token, polished stone, or little brass charm. It is not valuable enough to sell, which somehow makes offering it feel more personal.</p><p><span class="dialogue-line">"I saw it and thought of you,"</span> they admit, then immediately look annoyed at their own honesty. <span class="dialogue-line">"Do not make me explain why. I had a reason before you arrived."</span></p><p>They hold it out on an open palm and wait, trying to appear indifferent to your answer.</p><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Accept it warmly" "House Event Result">><<run setup.houseVisitResolveEvent("accept")>><</link>></div><div class="house-visit-choice"><<link "Tell them the thought is enough" "House Event Result">><<run setup.houseVisitResolveEvent("refuse")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">An old letter</div><p>While clearing space on the table, <<= setup.npcDisplayName(_data.npc) >> uncovers a folded letter with a broken seal. Their fingers remain on it longer than necessary before they push it toward you.</p><p><span class="dialogue-line">"I know enough letters to catch the important words,"</span> they say. <span class="dialogue-line">"Not enough to trust what I think it says. It came from someone who stopped writing years ago."</span></p><p>The ink is faded, but the hand is careful. Whatever is written here matters to them more than they want to show.</p><div class="house-visit-choice-list"><<if setup.playerLiteracy() gte 10>><div class="house-visit-choice"><<link "Read it aloud carefully" "House Event Result">><<run setup.houseVisitResolveEvent("read")>><</link>></div><<else>><div class="player-choice-status">You cannot yet read the letter reliably enough to help.</div><</if>><div class="house-visit-choice"><<link "Leave the letter folded" "House Event Result">><<run setup.houseVisitResolveEvent("leave")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc or !_data.other>>The disagreement has already passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">A disagreement with an audience</div><p><<= setup.npcDisplayName(_data.other) >> enters from the adjoining room carrying an empty water pitcher and asks why it was never refilled. <<= setup.npcDisplayName(_data.npc) >> answers too quickly. Within moments, the pitcher is forgotten beneath a week's worth of smaller grievances.</p><p><span class="dialogue-line">"You always do this when someone is here,"</span> one accuses. The other points toward you. <span class="dialogue-line">"Then let our guest decide whether I am being unreasonable."</span></p><p>Both turn to you. The house has become painfully quiet around the three of you.</p><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Help them find the real disagreement" "House Event Result">><<run setup.houseVisitResolveEvent("mediate")>><</link>></div><div class="house-visit-choice"><<link "Refuse to take sides" "House Event Result">><<run setup.houseVisitResolveEvent("withdraw")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">A neighbor at the door</div><p>A hard knock interrupts the room. The neighbor outside does not wait to be invited before asking whether <<= setup.npcDisplayName(_data.npc) >> borrowed a bucket three days ago and forgot to return it.</p><p><<= setup.npcDisplayName(_data.npc) >> glances at the very bucket beside the hearth, then at you. <span class="dialogue-line">"That is a remarkably familiar-looking bucket,"</span> they whisper. <span class="dialogue-line">"I would value a second opinion."</span></p><p>The neighbor knocks again, louder and considerably less patient.</p><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Admit where the bucket is" "House Event Result">><<run setup.houseVisitResolveEvent("honest")>><</link>></div><div class="house-visit-choice"><<link "Play along with the terrible lie" "House Event Result">><<run setup.houseVisitResolveEvent("play_along")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">Rain against the shutters</div><p>Rain begins as a soft hiss and quickly becomes a hard rattle against the shutters. Water runs from the roof in sheets, turning the lane outside into mud and trapping you comfortably inside.</p><p><<= setup.npcDisplayName(_data.npc) >> lays another piece of wood on the fire. <span class="dialogue-line">"You could leave,"</span> they say, looking toward the door. <span class="dialogue-line">"You would be soaked before reaching the next house. I suspect neither of us is in such a hurry."</span></p><p>There is one blanket within reach and enough room beneath it for two people sitting close.</p><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Stay by the fire and talk" "House Event Result">><<run setup.houseVisitResolveEvent("talk")>><</link>></div><div class="house-visit-choice"><<link "Share the blanket" "House Event Result">><<run setup.houseVisitResolveEvent("blanket")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">A dance without music</div><p><<= setup.npcDisplayName(_data.npc) >> mentions a tune heard earlier in the market and taps the rhythm against the table. The beat is uneven, but recognizable. After a moment, they stand and offer you a hand with an expression caught between challenge and embarrassment.</p><p><span class="dialogue-line">"There is barely enough floor,"</span> they admit. <span class="dialogue-line">"That only means you cannot wander far when I step on your feet."</span></p><p>The fire provides the only music now. Their hand remains extended between you.</p><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Take their hand and dance" "House Event Result">><<run setup.houseVisitResolveEvent("dance")>><</link>></div><div class="house-visit-choice"><<link "Decline without mocking the offer" "House Event Result">><<run setup.houseVisitResolveEvent("decline")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">A question with weight behind it</div><p>The conversation circles twice around the same subject before <<= setup.npcDisplayName(_data.npc) >> finally asks what they came to ask. Their voice is controlled, but one thumb worries at the edge of the cup in their hands.</p><p><span class="dialogue-line">"People talk when they have nothing useful to do,"</span> they begin. <span class="dialogue-line">"They say you have been spending time with someone else. I do not want gossip. I want your answer."</span></p><p>They hold your gaze. Whatever you say next will be remembered more clearly than the rumor itself.</p><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Reassure them of what they mean to you" "House Event Result">><<run setup.houseVisitResolveEvent("reassure")>><</link>></div><div class="house-visit-choice"><<link "Answer with complete honesty" "House Event Result">><<run setup.houseVisitResolveEvent("honest")>><</link>></div><div class="house-visit-choice"><<link "Deflect the question" "House Event Result">><<run setup.houseVisitResolveEvent("deflect")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">A touch that lingers</div><p>You both reach for the same cup. <<= setup.npcDisplayName(_data.npc) >>'s fingers close over yours and remain there after the mistake is obvious. The room seems to contract around that small point of contact.</p><p>Their thumb passes once across your knuckles. <span class="dialogue-line">"Tell me to move my hand,"</span> they say quietly. <span class="dialogue-line">"I will. But I would rather you came closer."</span></p><p>They wait instead of deciding for you, their mouth close enough that accepting would take only a few inches.</p><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Close the distance and kiss them" "House Event Result">><<run setup.houseVisitResolveEvent("kiss")>><</link>></div><div class="house-visit-choice"><<link "Draw your hand back" "House Event Result">><<run setup.houseVisitResolveEvent("pull_away")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">Deliberate distraction</div><p><<= setup.npcDisplayName(_data.npc) >> notices your attention wandering and decides to make it worse. They move behind you under the excuse of reaching a shelf, letting their body brush slowly across your back instead of taking the easier path around the table.</p><p><span class="dialogue-line">"You went very still,"</span> they murmur near your ear. Their hand settles briefly at your waist. <span class="dialogue-line">"Should I apologize, or do that again properly?"</span></p><p>The touch is light, but intentionally placed. They are watching to see whether your body answers before your mouth does.</p><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Encourage the teasing" "House Event Result">><<run setup.houseVisitResolveEvent("encourage")>><</link>></div><div class="house-visit-choice"><<link "Tell them to stop" "House Event Result">><<run setup.houseVisitResolveEvent("stop")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc or !_data.event.proposition>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><<set _prop = _data.event.proposition>><<set _check = setup.houseVisitSexCheck()>><div class="house-visit-shell"><div class="house-address-heading">The reason the door is shut</div><p>Conversation gives way to a silence that is neither shy nor accidental. <<= setup.npcDisplayName(_data.npc) >> rises, checks the latch, and returns without sitting. Their arousal has become difficult to hide, and they have stopped trying.</p><<if _data.npc.gender is "female">><<if _prop.offerId is "oral_give_female">><p>She steps between your knees and guides one of your hands beneath her skirt, letting you feel the heat through her underclothes. <span class="dialogue-line dialogue-female">"I want your mouth on me,"</span> she says. <span class="dialogue-line dialogue-female">"Get on the bed, spread my legs, and eat my pussy until I tell you I have had enough."</span></p><<elseif _prop.offerId is "oral_receive_female">><p>She kneels in front of you and lets her hands travel slowly up your thighs. <span class="dialogue-line dialogue-female">"Lie back and open your legs for me,"</span> she says. <span class="dialogue-line dialogue-female">"I want to taste your pussy and hear exactly what makes you lose control."</span></p><<else>><p>She catches your hips and presses herself against you, the intent unmistakable even through your clothes. <span class="dialogue-line dialogue-female">"Take these off,"</span> she says. <span class="dialogue-line dialogue-female">"I want your pussy against mine until one of us cannot keep quiet."</span></p><</if>><<else>><<if _prop.offerId is "vaginal">><p>He takes your hand and presses it against the hard shape beneath his clothes. <span class="dialogue-line dialogue-male">"I want to fuck you,"</span> he says, watching your face. <span class="dialogue-line dialogue-male">"Not a careful little kiss at the door. I want you naked in my bed with my cock inside you."</span></p><<elseif _prop.offerId is "blowjob">><p>He loosens his belt without looking away from you, arousal plain beneath the cloth. <span class="dialogue-line dialogue-male">"Get on your knees and suck my cock,"</span> he says. <span class="dialogue-line dialogue-male">"I have been thinking about your mouth since I let you through that door."</span></p><<else>><p>He guides your hand down between his legs and holds it there over the hard shape beneath his clothes. <span class="dialogue-line dialogue-male">"Use your hand on my cock,"</span> he says. <span class="dialogue-line dialogue-male">"Slowly at first. I want to watch you decide how badly you want to make me cum."</span></p><</if>><</if>><p>The request is unmistakable, but they leave the final distance between you open for your answer.</p><div class="house-visit-choice-list"><<if _check.ok>><div class="house-visit-choice">[[Accept the invitation|House Event Sex Transition]]</div><<else>><div class="player-choice-status"><<= setup.playerSexualWillingnessText(_check.willingness) >></div><</if>><div class="house-visit-choice"><<link "Refuse without leaving" "House Event Result">><<run setup.houseVisitResolveEvent("decline")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc or !_data.other>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><div class="house-visit-shell"><div class="house-address-heading">Across a shared room</div><p><<= setup.npcDisplayName(_data.other) >> is occupied at the far side of the house when <<= setup.npcDisplayName(_data.npc) >> looks at you. It is not the casual attention of a host checking on a guest. Their gaze drops to your mouth, then lower, lingering with dangerous confidence.</p><p>Their partner is only a few steps away. Even so, they lean close under the excuse of reaching past you. <span class="dialogue-line">"Do not look so alarmed,"</span> they whisper. <span class="dialogue-line">"I have not touched you. Yet."</span></p><p>The final word hangs between you while ordinary household sounds continue around it.</p><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Quietly encourage them" "House Event Result">><<run setup.houseVisitResolveEvent("encourage")>><</link>></div><div class="house-visit-choice"><<link "Warn them that their partner is here" "House Event Result">><<run setup.houseVisitResolveEvent("warn")>><</link>></div><div class="house-visit-choice"><<link "Pretend not to notice" "House Event Result">><<run setup.houseVisitResolveEvent("ignore")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _result = $houseVisitEventResult>><<set _data = setup.houseVisitActiveEvent()>><<set _npc = _data ? _data.npc : null>><div class="house-visit-shell"><div class="house-address-heading">The visit continues</div><<if !_result or _result.outcome isnot "success" or !_npc>><p>The moment has already passed.</p><<elseif _result.eventId is "quiet_hour">><<if _result.choice is "listen">><p>You let the silence remain spacious rather than empty. Eventually, <<= setup.npcDisplayName(_npc) >> begins speaking again, this time about a fear they usually disguise as irritation. You do not interrupt or offer easy reassurance. When they finish, their shoulders sit lower than before.</p><p><span class="dialogue-line">"Thank you for not telling me what I should feel,"</span> they say. <span class="dialogue-line">"Most people listen only long enough to prepare their own answer."</span></p><<else>><p>Your joke catches them unprepared. They try to remain solemn, fail, and cover their laughter with one hand. The quiet afterward is easier, freed from the weight both of you had placed upon it.</p><p><span class="dialogue-line">"That was terrible,"</span> they say, still smiling. <span class="dialogue-line">"You may stay, but only because I need time to think of something worse."</span></p><</if>>
<<elseif _result.eventId is "work_burden">><<if _result.choice is "help">><p>You move the work into the firelight and take the least complicated part for yourself. The task still takes time, but conversation makes it lighter. By the time you stop, the pile is smaller and the problem waiting for morning no longer feels impossible.</p><p><span class="dialogue-line">"You came to visit and I put you to work,"</span> they say. <span class="dialogue-line">"Come back anyway. Next time I may even behave like a proper host."</span></p><<elseif _result.choice is "advise">><p>You ask careful questions until the problem becomes smaller and more specific. Your suggestion is not perfect, but it gives them something concrete to try instead of another night spent rehearsing the argument.</p><p><span class="dialogue-line">"That might actually work,"</span> they admit. <span class="dialogue-line">"I was hoping you would agree with me. This is probably more useful."</span></p><<else>><p>You let them complain until anger gives way to exhaustion. They do not solve the problem tonight, but saying it plainly seems to keep it from following them around the room.</p><p><span class="dialogue-line">"I needed to say that somewhere it would not cost me work,"</span> they tell you.</p><</if>>
<<elseif _result.eventId is "mending">><<if _result.choice is "help">><p>You guide the needle through the torn cloth while they hold the fabric taut. Your stitches are not elegant, but they are strong. The two of you bend over the same small task until the repair is finished and the shirt can survive another week.</p><p><span class="dialogue-line">"There. Useful and almost respectable,"</span> they say. <span class="dialogue-line">"I will claim I did it unless someone compliments the stitching."</span></p><<else>><p>You stay beside them and offer advice only when asked. Each time their knee presses yours, neither of you moves away. By the time the tear is closed, the warmth between you has become more distracting than the work.</p><p><span class="dialogue-line">"You are not helping much,"</span> they murmur. <span class="dialogue-line">"I did not say I wanted you to stop."</span></p><</if>>
<<elseif _result.eventId is "supper">><<if _result.choice is "save">><p>They wrap the bread in a square of cloth and press it into your hands, refusing your first attempt to argue. The gesture is practical, almost stern, but they watch until you put it safely away.</p><p><span class="dialogue-line">"Eat it before it turns hard enough to mend a roof,"</span> they say. <span class="dialogue-line">"And do not call it charity. I invited you in."</span></p><<else>><p>You eat together from mismatched bowls while steam clouds the space between you. The food is simple, but hot broth and quiet company make it feel more substantial than its ingredients should allow.</p><p><span class="dialogue-line">"There is always room for one more bowl if both people pretend not to count the onions,"</span> they say.</p><</if>>
<<elseif _result.eventId is "keepsake">><<if _result.choice is "accept">><p>You close your fingers around the small keepsake and thank them without teasing. Their guarded expression softens when they realize you understand that the value lies entirely in having been remembered.</p><p><span class="dialogue-line">"Keep it somewhere you will see it,"</span> they say. <span class="dialogue-line">"Or somewhere no one else will. I suppose both mean something."</span></p><<else>><p>You fold their fingers gently back over the object and tell them the thought is enough. They look disappointed for a breath, then nod when they understand you are not rejecting the feeling behind it.</p><p><span class="dialogue-line">"Then I will keep it until you change your mind,"</span> they decide.</p><</if>>
<<elseif _result.eventId is "old_letter">><<if _result.choice is "read">><p>You work through the faded lines slowly, sounding out the uncertain words and repeating the sentences that matter. It is not a grand confession, only news from a distant road and a promise to return that history never kept.</p><p><<= setup.npcDisplayName(_npc) >> listens without interrupting. <span class="dialogue-line">"I remembered the promise,"</span> they say when you finish. <span class="dialogue-line">"I had forgotten everything around it. Thank you for giving that back to me."</span></p><<else>><p>You leave the letter folded and tell them that some words deserve patience instead of guessing. They return it to the shelf with visible relief, grateful that you did not turn their uncertainty into embarrassment.</p><p><span class="dialogue-line">"Another day, then,"</span> they say. <span class="dialogue-line">"When one of us can face what it says."</span></p><</if>>
<<elseif _result.eventId is "household_argument">><<if _result.choice is "mediate">><p>You refuse the invitation to choose a winner and ask instead who was meant to fetch the water. The answer uncovers a missed promise, then a worry neither had named. By the time the pitcher is filled, the argument has become a conversation they can continue without you.</p><p><span class="dialogue-line">"That was annoyingly sensible,"</span> your host tells you. <span class="dialogue-line">"You are welcome back after we have found a less embarrassing reason to argue."</span></p><<else>><p>You tell them plainly that a guest cannot settle a grievance built before they arrived. The refusal disappoints both of them, but it also denies them an easy ally. After an awkward pause, the argument retreats into lower voices.</p><p><span class="dialogue-line">"Fair enough,"</span> your host concedes. <span class="dialogue-line">"You came for company, not judgment."</span></p><</if>>
<<elseif _result.eventId is "neighbor">><<if _result.choice is "play_along">><p>You solemnly claim the bucket arrived with you, which would be more convincing if the neighbor had not carved their initials into its side. The lie collapses immediately. Even the neighbor laughs while carrying it away.</p><p><span class="dialogue-line">"You are terrible at this,"</span> your host tells you after the door closes. <span class="dialogue-line">"Next time, invent something involving bandits."</span></p><<else>><p>You point toward the hearth. Your host surrenders the bucket beneath the neighbor's triumphant stare and waits until the door closes before turning back to you.</p><p><span class="dialogue-line">"Honest, reliable, and completely useless in a conspiracy,"</span> they say. <span class="dialogue-line">"I suppose those are mostly virtues."</span></p><</if>>
<<elseif _result.eventId is "rain">><<if _result.choice is "blanket">><p>You settle beneath the same blanket, shoulders and thighs pressed together while rain drums above you. <<= setup.npcDisplayName(_npc) >> shifts closer in careful increments until pretending the contact is accidental becomes impossible.</p><p><span class="dialogue-line">"The road can stay flooded a little longer,"</span> they murmur. Their breath warms your temple. <span class="dialogue-line">"I am beginning to appreciate the weather."</span></p><<else>><p>You remain by the fire while rain seals the house away from the village. The conversation wanders into memories usually crowded out by work, and neither of you checks the door until the downpour begins to soften.</p><p><span class="dialogue-line">"Bad weather makes honest company easy to recognize,"</span> they say.</p><</if>>
<<elseif _result.eventId is "dance">><<if _result.choice is "dance">><p>You take their hand. The first turn nearly sends both of you into the table, but the second finds the rhythm. Soon you are laughing too hard to hear the tune either of you is humming, holding each other close simply because the room leaves no other choice.</p><p>When the dance ends, <<= setup.npcDisplayName(_npc) >> does not immediately release your waist. <span class="dialogue-line">"See? Only stepped on you twice,"</span> they whisper. <span class="dialogue-line">"That deserves another dance someday."</span></p><<else>><p>You decline gently. They withdraw their hand with dignity intact, returning to the table and tapping the last bars of the imagined song against the wood.</p><p><span class="dialogue-line">"Another evening, perhaps,"</span> they say. <span class="dialogue-line">"Preferably after I remember how the tune actually goes."</span></p><</if>>
<<elseif _result.eventId is "jealousy">><<if _result.choice is "reassure">><p>You move closer and answer the fear beneath the accusation. You tell them what they mean to you without pretending gossip can be erased by a single sentence. The tension leaves their hands slowly.</p><p><span class="dialogue-line">"That is what I needed to hear,"</span> they admit. <span class="dialogue-line">"Not because I own you. Because I did not know whether I still understood us."</span></p><<elseif _result.choice is "honest">><p>You answer without polishing the truth. Some of it is uncomfortable, but you leave them no hidden edge to discover later. They listen, ask one difficult question, and accept the answer even when it is not flattering.</p><p><span class="dialogue-line">"I can work with honesty,"</span> they say. <span class="dialogue-line">"Uncertainty is harder."</span></p><<else>><p>You laugh off the rumor and turn the question back on the people spreading it. <<= setup.npcDisplayName(_npc) >> allows the subject to change, but their expression does not. The doubt remains seated between you.</p><p><span class="dialogue-line">"That was not an answer,"</span> they say quietly.</p><</if>>
<<elseif _result.eventId is "lingering_touch">><<if _result.choice is "kiss">><<print setup.npcIntimateMediaHtml("kiss", _npc)>><p>You close the distance. Their mouth meets yours with restrained hunger, one hand rising to your jaw while the other remains wrapped around your fingers. The kiss deepens slowly, testing permission at every change until both of you are breathing harder than the moment should require.</p><p><span class="dialogue-line">"That was what I meant,"</span> they whisper against your lips. <span class="dialogue-line">"I am glad you understood."</span></p><<print setup.playerIntimateExperienceResultHtml(_result.intimate)>><<else>><p>You draw your hand away. They release you immediately and lean back, disappointment visible but contained.</p><p><span class="dialogue-line">"All right,"</span> they say. <span class="dialogue-line">"Thank you for answering clearly. We can leave it there."</span></p><</if>>
<<elseif _result.eventId is "deliberate_teasing">><<if _result.choice is "encourage">><p>You lean back into them instead of moving away. Their hand tightens at your waist and slides across your stomach, stopping just short of becoming an unmistakably sexual touch. The restraint makes the heat beneath your skin worse.</p><p><span class="dialogue-line">"There you are,"</span> they murmur, lips brushing the edge of your ear. <span class="dialogue-line">"I wanted to know how easily I could make you think about something other than talking."</span></p><p>They step away before giving you relief, leaving your everyday arousal sharpened for whatever the rest of the day brings.</p><<else>><p>You tell them to stop. Their hand leaves your waist at once, and they put a respectful span of floor between you.</p><p><span class="dialogue-line">"Understood,"</span> they say, without argument or wounded performance. <span class="dialogue-line">"I misread the moment. I will not press it."</span></p><</if>>
<<elseif _result.eventId is "proposition">><p>You refuse. The sexual tension does not vanish, but <<= setup.npcDisplayName(_npc) >> steps back and restores the space between you without trying to bargain past your answer.</p><p><span class="dialogue-line">"All right,"</span> they say, fastening or smoothing their clothes. <span class="dialogue-line">"The invitation ends there. You are still welcome in my house."</span></p>
<<elseif _result.eventId is "forbidden_glance">><<if _result.choice is "encourage">><p>You hold their gaze and let your own drop just as deliberately. Their mouth curves with private understanding. Nothing happens in front of their partner, but the possibility has now been acknowledged by both of you.</p><p><span class="dialogue-line">"Later, then,"</span> they breathe when the other resident turns away. The promise is quiet enough to deny and dangerous enough to remember.</p><<elseif _result.choice is "warn">><p>You remind them in a low voice that their partner is within hearing distance. The heat in their expression gives way to shame, irritation, or both. They retreat before the moment becomes something harder to excuse.</p><p><span class="dialogue-line">"You are right,"</span> they admit. <span class="dialogue-line">"That was unfair to everyone in this room."</span></p><<else>><p>You behave as though the look never happened. Your host follows your example, returning to ordinary conversation while the unspoken tension remains beneath every harmless sentence.</p><p>Their partner notices nothing obvious, though once or twice you catch them studying the space between you.</p><</if>><</if>>
<p><<print setup.houseVisitGainHtml(_result)>></p><div class="house-return-link">[[Continue the visit|House Visit Interior]]</div></div><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc or !_data.event.proposition>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>><<set _prop = _data.event.proposition>><div class="house-visit-shell"><div class="house-address-heading">Away from the window</div><<if _data.npc.gender is "female">><p>Your answer changes her expression immediately. <<= setup.npcDisplayName(_data.npc) >> takes your wrist and leads you toward the bed, drawing the curtain across the window before turning back to you. The practical room becomes private by inches: the secured latch, the banked fire, the clothes she begins loosening without looking away.</p><<if _prop.offerId is "oral_give_female">><p>She sits on the edge of the mattress and opens her legs, skirt gathered above her thighs. <span class="dialogue-line dialogue-female">"Come here,"</span> she says. <span class="dialogue-line dialogue-female">"I asked for your mouth. Show me you meant yes."</span></p><<elseif _prop.offerId is "oral_receive_female">><p>She presses you back toward the mattress and settles between your knees, hands already working your clothing aside. <span class="dialogue-line dialogue-female">"Let me see you,"</span> she says. <span class="dialogue-line dialogue-female">"Then let me make you cum with my tongue."</span></p><<else>><p>She draws you against her and begins pulling impatiently at the layers between your bodies. <span class="dialogue-line dialogue-female">"No more pretending this is innocent,"</span> she says. <span class="dialogue-line dialogue-female">"I want to feel you naked against me."</span></p><</if>><<else>><p>Your answer strips the last restraint from his smile. <<= setup.npcDisplayName(_data.npc) >> leads you away from the front room and pushes the bedroom door closed with one hand. The house is quiet enough that every buckle and breath sounds louder than it should.</p><<if _prop.offerId is "vaginal">><p>He pulls his shirt free and reaches for you, guiding your hand back to the erection beneath his loosened clothes. <span class="dialogue-line dialogue-male">"Undress,"</span> he says. <span class="dialogue-line dialogue-male">"I want to see you before I put my cock inside you."</span></p><<elseif _prop.offerId is "blowjob">><p>He opens his trousers and frees his hard cock in front of you, one hand stroking it slowly while he watches your reaction. <span class="dialogue-line dialogue-male">"On your knees,"</span> he says. <span class="dialogue-line dialogue-male">"Take it in your mouth and make me cum."</span></p><<else>><p>He opens his trousers and takes your hand, wrapping your fingers around his cock. <span class="dialogue-line dialogue-male">"That is what I wanted,"</span> he says. <span class="dialogue-line dialogue-male">"Keep your hand there and show me how you touch a man when no one is watching."</span></p><</if>><</if>><div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Follow through">><<run setup.houseVisitAcceptProposition()>><<goto "NPCEncounter">><</link>></div><div class="house-visit-choice"><<link "Stop before it goes further" "House Event Result">><<run setup.houseVisitResolveEvent("decline")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _innkeeper = setup.getNpcById($activeNpcId)>><<run setup.startCookingBookQuest($activeNpcId)>>
<div class="npc-activity-panel">
<div class="npc-interact-name">Recipes worth seeking</div>
<p>You wait until the counter thins out, then ask what would help you become more useful in the kitchen. The innkeeper dries both hands on a cloth and studies you with the guarded patience of someone deciding whether ambition will survive its first difficult week.</p>
<p><span class="dialogue-line">"Practice teaches your hands, but good recipes keep those hands from wasting food,"</span> <<= _innkeeper ? setup.npcDisplayName(_innkeeper) : "the innkeeper" >> says. <span class="dialogue-line">"There are books and loose collections around Ambercross. I could not name every owner. Ask people. Someone always knows who keeps an old volume tucked away."</span></p>
<p>After another moment, the innkeeper reaches below the counter and places a thick, stained bundle where you can see it without touching it.</p>
<p><span class="dialogue-line">"This one is mine: <b><<= setup.recipeBookDefinitions.tavern_pot_recipes.label >></b>. I still use it, so I will not give it away cheaply. The usual price is <<= setup.recipeBookDefinitions.tavern_pot_recipes.cost >> gold, though my mood may change what I ask. Other owners may want coin, work, or a more personal kind of persuasion before they part with theirs."</span></p>
<p class="cooking-note">A new side quest has been added to your Journal. You can now ask NPCs about cooking books through Basic Questions.</p>
<div class="npc-return-link">[[Continue|Tavern innkeeper]]</div>
</div><</nobr>><<nobr>><<set _npc = setup.getNpcById($activeNpcId)>>
<div class="npc-activity-panel">
<div class="npc-interact-name">Cooking books</div>
<p>Books, conditions, favors, and prices are now handled together with the rest of this person's goods. There is no separate agreement to keep track of.</p>
<<if _npc>><div class="npc-action-list"><<link "Open trade" "NPCTrade">><<set $npcTradeMode = "personal">><<set $npcTradeReturn = "NPCInteract">><</link>></div><</if>>
<div class="npc-return-link">[[Return|NPCInteract]]</div>
</div><</nobr>><<nobr>><<set _response = $npcSexOfferResponse>><<set _npc = _response ? setup.getNpcById(_response.npcId) : null>>
<<if !_response or !_npc>>
<div class="npc-activity-panel"><div class="npc-interact-name">The moment passes</div><p>The proposition is lost before either of you can answer it.</p><div class="npc-return-link">[[Return|NPCInteract]]</div></div>
<<else>>
<div class="npc-activity-panel npc-relationship-menu">
<div class="npc-interact-name">An intimate proposition</div>
<<print _response.approachHtml>>
<<print _response.responseHtml>>
<div class="npc-action-list">
<<if _response.accepted>><<link _response.continueLabel>><<set _encounter = setup.npcCommitPlayerSexOffer()>><<if _encounter>><<goto "NPCEncounter">><<else>><<goto "NPCSexOfferResponse">><</if>><</link>>
<<link "Change your mind" _response.returnPassage>><<run setup.npcCancelPlayerSexOffer()>><</link>>
<<else>><<link "Continue" _response.returnPassage>><<run setup.npcCancelPlayerSexOffer()>><</link>><</if>>
</div>
</div>
<</if>><</nobr>><<nobr>><<run setup.ensureTavernWorkSystem()>><<set _worker = setup.tavernCounterNpc()>>
<div class="npc-activity-panel">
<h2>Apply to serve tables</h2>
<<if $TavernServingAccept === 1>>
<p>You already have a place serving the common room.</p>
<div>[[Choose a shift|TavernWorkMenu]]</div>
<<elseif !_worker>>
<p>No one with authority to hire you is working the counter right now.</p>
<div>[[Return|TavernWorkIntro]]</div>
<<else>>
<p><<= setup.npcDisplayName(_worker) >> looks from your face to the crowded tables, where raised mugs, impatient voices, and wandering eyes all demand attention at once.</p>
<<print setup.npcEventDialogueHtml(_worker, "Serving is not carrying cups from one end of a room to the other. Drunk guests will call you sweetheart, stare at your breasts, and swear a hand on your ass was an accident. Others will pay twice what the ale is worth if you make them feel noticed. Show me you know the difference between a customer, a fool, and a threat.", "The innkeeper")>>
<p>The trial is unpaid except for a small finishing wage. You will be tested on speed, memory, and control of the room.</p>
<div class="npc-activity-choice-list"><<if $TavernServingTrialRejectedDay is setup.npcCurrentDay()>><p>The innkeeper tells you to try again tomorrow, after the room has had time to settle.</p><<else>><div><<link "Begin the serving trial" "TavernWorkTrial">><<run setup.tavernTrialBegin("serving")>><</link>></div><</if>><div>[[Consider the other jobs|TavernWorkIntro]]</div></div>
<</if>>
</div><</nobr>><<nobr>><<run setup.ensureTavernWorkSystem()>><<set _worker = setup.tavernCounterNpc()>>
<div class="npc-activity-panel">
<h2>Apply for kitchen work</h2>
<<if $TavernCookingAccept === 1>>
<p>You already have a place in the tavern kitchen.</p>
<div>[[Choose a shift|TavernWorkMenu]]</div>
<<elseif !_worker>>
<p>No one with authority to hire you is working the counter right now.</p>
<div>[[Return|TavernWorkIntro]]</div>
<<else>>
<p><<= setup.npcDisplayName(_worker) >> takes you through the swinging door. Heat presses against your face. Knives strike boards, broth bubbles over flame, and every shelf contains something bought with coin that cannot be wasted.</p>
<<print setup.npcEventDialogueHtml(_worker, "The common room can forgive a crooked smile. It will not forgive burnt stew or sickness in the pot. Show me you can prepare ingredients, correct a mistake, and send a full order through that door while everyone around you is shouting.", "The innkeeper")>>
<p>The kitchen trial is separate from serving work and unlocks its own shifts.</p>
<div class="npc-activity-choice-list"><<if $TavernCookingTrialRejectedDay is setup.npcCurrentDay()>><p>The kitchen has no second trial for you today. You may try again tomorrow.</p><<else>><div><<link "Begin the kitchen trial" "TavernCookingTrial">><<run setup.tavernTrialBegin("kitchen")>><</link>></div><</if>><div>[[Consider the other jobs|TavernWorkIntro]]</div></div>
<</if>>
</div><</nobr>><<nobr>><<run setup.ensureTavernWorkSystem()>>
<div class="npc-activity-panel">
<p>The cook claims one corner of the kitchen for you and sets out roots, a troublesome pot, and a stack of waiting plates. The room is hot enough to make haste tempting. Each mistake would reach a paying guest.</p>
<<set _cook = setup.tavernWorkKitchenNpc()>><<if _cook>><<print setup.npcEventDialogueHtml(_cook, "Show me you can prepare food, save a pot, and send out an order. Then I will give you a problem I have not solved for you.", "The cook")>><</if>>
<div class="farm-trial-actions">
<div><<if $TavernCookingTrialPrep>>Prepare roots and herbs <span class="farm-work-meta">Done</span><<elseif $c.energy gte 2>>[[Prepare the ingredients|TavernCookingTrialPrep]] <b id="Energy">(-2 Energy)</b><<else>>Too tired to prepare ingredients.<</if>></div>
<div><<if $TavernCookingTrialStew>>Correct the stew <span class="farm-work-meta">Done</span><<elseif $c.energy gte 2>>[[Correct the stew|TavernCookingTrialStew]] <b id="Energy">(-2 Energy)</b><<else>>Too tired to tend the stew.<</if>></div>
<div><<if $TavernCookingTrialPlates>>Plate a complete order <span class="farm-work-meta">Done</span><<elseif $c.energy gte 2>>[[Plate the waiting order|TavernCookingTrialPlates]] <b id="Energy">(-2 Energy)</b><<else>>Too tired to finish the order.<</if>></div>
<<if $TavernCookingTrialPrep and $TavernCookingTrialStew and $TavernCookingTrialPlates>><div>[[Face the last order|TavernCookingFinalTest]]</div><</if>>
<div class="npc-home-section-gap">[[Return|TavernWorkIntro]]</div></div>
</div><</nobr>><<nobr>><<set _cook = setup.tavernWorkKitchenNpc()>>
<div class="npc-activity-panel"><<if $TavernCookingTrialStarted and !$TavernCookingTrialPrep and $c.energy gte 2>><<set $c.energy -= 2>><<run setup.advanceTime(20)>><<set $TavernCookingTrialPrep to true>><<set $Cookingskill += 0.2>><p>The cook gives you onions, turnips, carrots, and a fistful of herbs without explaining what belongs where. You separate bruised pieces from sound ones, cut each root to cook at the same pace, and keep the bitter herbs away from the sweet.</p>
<p>The cook tests the cuts between thumb and knife.</p>
<<npcSay _cook "Even enough for the pot. Small enough that a paying guest does not have to fight supper." "The cook">>
<p>You gain <b id="Goldgain">+0.2 Cooking</b> <b id="Energy">-2 Energy</b></p><<else>><p>That part of the trial is already finished, or you need to rest before continuing.</p><</if>><div>[[Continue the trial|TavernCookingTrial]]</div></div><</nobr>><<nobr>><<set _cook = setup.tavernWorkKitchenNpc()>>
<div class="npc-activity-panel"><<if $TavernCookingTrialStarted and !$TavernCookingTrialStew and $c.energy gte 2>><<set $c.energy -= 2>><<run setup.advanceTime(20)>><<set $TavernCookingTrialStew to true>><<set $Cookingskill += 0.2>><p>A neglected pot has begun to catch at the bottom. You resist the urge to scrape the burnt layer into the broth, lower the heat, move the clean stew into another pot, and rebuild its flavor with stock, onion, and a measured pinch of herbs.</p>
<p>The cook tastes twice.</p>
<<npcSay _cook "You cannot undo a mistake. You can stop it from reaching the customer. That is most of this work." "The cook">>
<p>You gain <b id="Goldgain">+0.2 Cooking</b> <b id="Energy">-2 Energy</b></p><<else>><p>That part of the trial is already finished, or you need to rest before continuing.</p><</if>><div>[[Continue the trial|TavernCookingTrial]]</div></div><</nobr>><<nobr>><<set _cook = setup.tavernWorkKitchenNpc()>>
<div class="npc-activity-panel"><<if $TavernCookingTrialStarted and !$TavernCookingTrialPlates and $c.energy gte 2>><<set $c.energy -= 2>><<run setup.advanceTime(20)>><<set $TavernCookingTrialPlates to true>><<set $Cookingskill += 0.2>><p>Three orders arrive together: two stews, one without meat, bread for every plate, and a request for extra relish shouted through the door after you begin. You arrange the bowls in order, keep the meatless serving separate, wipe every rim, and send the full tray out while the food is still steaming.</p>
<p>Nothing returns but empty plates. The cook nods when you show them.</p>
<<npcSay _cook "They stopped complaining long enough to eat. In this room, that means you did well." "The cook">>
<p>You gain <b id="Goldgain">+0.2 Cooking</b> <b id="Energy">-2 Energy</b></p><<else>><p>That part of the trial is already finished, or you need to rest before continuing.</p><</if>><div>[[Continue the trial|TavernCookingTrial]]</div></div><</nobr>><<nobr>><<run setup.ensureTavernWorkSystem()>>
<<if $TavernCookingTrialReady and $TavernCookingAccept neq 1 and $TavernCookingTrialPrep and $TavernCookingTrialStew and $TavernCookingTrialPlates>><<set $TavernCookingAccept to 1>><<set $TavernworkAccept to 1>><<set $TavernCookingTrialReady to false>><<set $TavernCookingTrialStarted to false>><<set $Cookingskill += 0.25>><<set $c.gold += 2>><<run setup.businessSpendGold("tavern", 2)>>
<<set _newOutfit = !setup.playerHasOutfit("blue_work_dress")>><<run setup.playerUnlockOutfit("blue_work_dress")>>
<div class="npc-activity-panel"><p>The innkeeper checks the prepared basket, tastes what remains of the rescued stew, and questions the server who carried your plates. Only then does the silence ease.</p>
<<set _worker = setup.tavernCounterNpc()>><<print setup.npcEventDialogueHtml(_worker, "You used what I bought, saved what could be saved, and did not send confusion through my door. You can work my kitchen for pay. Prep first. Earn your place at the main pot after you have learned its temper.", "The innkeeper")>>
<<if _newOutfit>><p>From a shelf behind the counter, the innkeeper takes down a blue work dress with sleeves fit for a busy kitchen. You may keep it.</p><</if>>
<p>You gain <b id="Goldgain">+2 Gold</b> <b id="Goldgain">+0.25 Cooking</b></p><<if _newOutfit>><p class="farm-work-gain-line"><b>+Blue Work Dress outfit</b></p><</if>><div>[[Choose a shift|TavernWorkMenu]]</div></div>
<<else>><<goto "TavernCookingTrial">><</if>><</nobr>><p>Three laborers turn ordering ale into a debate over your body. One prefers your breasts, another swears your ass is the better reason to call you back, and the third insists the argument cannot be settled until someone sees what the dress hides.</p>
<p>You place their mugs down one by one and keep your expression composed. <span class="dialogue-line dialogue-player">"You have spent six coins between you and already imagined an entire night with me. That may be the cheapest entertainment this tavern sells."</span></p>
<p>Their laughter follows you to the counter. So do their eyes. The exchange leaves heat beneath your skin even though you never gave them more than words.</p><p>A woman drinking alone asks you to lean closer, supposedly because the room is loud. Her gaze drops openly into your neckline before she speaks.</p>
<p>Her fingertip circles the rim of her cup as she studies your expression.</p><<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc("female"), "The men here keep asking whether you are as innocent as you look. I told them a woman with that mouth knows exactly what she is doing. Shall I keep defending you?", "A patron", "female")>>
<p>You refill her cup without answering, but her knowing smile stays with you through the next several tables.</p><<nobr>><p>A traveler places four coins beneath two fingers and waits until you notice.</p><<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc("male"), "One for the ale, and three if you loosen that neckline and pour slowly enough that I can enjoy what I am buying.", "A traveler", "male")>>
<p>The request is quiet and deliberate. He has not touched you, and the extra coin could be yours, but the choice of what your service includes remains with you.</p>
<div class="npc-activity-choice-list"><div>[[Give him the view he offered to buy|TavServeChoice4a]]</div><div>[[Make him pay for imagination instead|TavServeChoice4b]]</div><div>[[Serve the ale and refuse the bargain|TavServeChoice4c]]</div></div><</nobr>><<nobr>><p>You collect all four coins, loosen the top fastening of your dress, and bend over his cup as you pour. The cloth parts enough to show the upper curves of your breasts. His eyes stay fixed there, following every small movement while the ale foams toward the rim.</p>
<<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc("male"), "Worth every coin.", "The traveler", "male")>><p>You straighten, fasten your dress, and leave him with the clear understanding that he bought a view, not ownership of anything he saw.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print setup.tavernWorkBonusHtml({ gold: 3, charisma: 0.05, carnality: 0.08, arousal: 5 }, "Choice result")>><div>[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You cover his coins with your palm but leave your dress untouched. <span class="dialogue-line dialogue-player">"Four coins buy the ale and the hope that I might change my mind before I reach the table. If you require certainty, certainty costs more."</span></p>
<p>He laughs, impressed despite himself, and releases two of the extra coins. You pour normally. He watches as if imagination has provided the missing view anyway.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print setup.tavernWorkBonusHtml({ gold: 2, charisma: 0.1, arousal: 2 }, "Choice result")>><div>[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You take only the price of the ale and push the other coins back. <span class="dialogue-line dialogue-player">"You bought a drink. If staring into my dress is necessary for you to swallow it, you may leave thirsty."</span></p>
<p>The traveler measures your expression, then accepts the cup without another word. When you return later, his hands and his offers both remain on his side of the table.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print setup.tavernWorkBonusHtml({ tavernwork: 0.1, charisma: 0.06 }, "Choice result")>><div>[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><<set _carnality = setup.playerEffectiveCarnality ? setup.playerEffectiveCarnality() : 0>><<set _arousal = Number($c.arousal || 0)>><<set _woman = setup.tavernWorkEventGuest()>><<set _man = setup.tavernWorkSceneCompanion()>><p>A couple renting an upstairs room orders wine after the common room has begun to thin. When you deliver it, <<npcMention _man "the man">> is shirtless and <<npcMention _woman "the woman">> is sitting on the bed with her dress gathered above her thighs.</p>
<p>She takes the cups but leaves the door open. Her smile sharpens when she sees you hesitate.</p>
<<npcSay _woman "You can set the bottle down and leave. Or stay and watch him fuck me. If the sight makes that pretty pussy wet, perhaps we will let you closer." "The woman">>
<div class="npc-activity-choice-list"><div>[[Deliver the wine and return downstairs|TavServeChoice5a]]</div><<if _carnality gte 8 or _arousal gte 20>><div>[[Stay at the door and watch|TavServeChoice5b]]</div><<else>><div class="farm-work-meta">You cannot quite bring yourself to stay and watch.</div><</if>><<if _carnality gte 16 or _arousal gte 32>><div>[[Step inside and accept their attention|TavServeChoice5c]]</div><<else>><div class="farm-work-meta">Stepping inside would take more nerve than you can summon.</div><</if>></div><</nobr>><<nobr>><<set _woman = setup.tavernWorkEventGuest()>><p>You put the wine within reach and pull the door closed from the hallway. <span class="dialogue-line dialogue-player">"The bottle is included. The server is not."</span></p>
<p>A laugh from <<npcMention _woman "the woman">> follows you downstairs, followed shortly by the renewed rhythm of the bed against the wall. You return to the common room with the order completed and your boundary intact.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print setup.tavernWorkBonusHtml({ tavernwork: 0.1, charisma: 0.03 }, "Choice result")>><div>[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><<set _man = setup.tavernWorkSceneCompanion()>><p>You remain just inside the doorway. The woman lies back and spreads her legs while her companion settles between them. He enters her slowly at first, both of them watching you watch. Soon the bed begins striking the wall and her restraint breaks into open cries.</p>
<p><<npcMention _man "The man">> looks back at you as she pulls him closer.</p>
<<npcSay _man "Look at her. She loves knowing she has made you wet." "The man">>
<p>You leave before either invites you closer, carrying the empty tray in front of the heat between your thighs.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print setup.tavernWorkBonusHtml({ gold: 2, carnality: 0.1, arousal: 9 }, "Choice result")>><div>[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><<set _woman = setup.tavernWorkEventGuest()>><p>You close the door behind you. The woman rises from the bed and kisses you while her companion watches, one hand slipping beneath your dress to squeeze your ass. She tastes of wine when her mouth moves to your neck.</p>
<p><<npcMention _woman "The woman">> slides her fingers over the cloth between your thighs until your breath catches.</p>
<<npcSay _woman "Not enough time to keep you. Enough time to make serving us difficult to forget." "The woman">>
<p>They release you before the innkeeper comes looking and press three coins into your palm for the delay.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print setup.tavernWorkBonusHtml({ gold: 3, carnality: 0.15, arousal: 12 }, "Choice result")>><div>[[Finish shift|TavernWorkMenu]]</div><</nobr>><<set _cook = setup.tavernWorkKitchenNpc()>>
<p>A wheel of cheese arrives with mold spreading beneath the rind. Throwing it away would waste several days of value, but serving it carelessly would ruin more than one meal.</p>
<p>You cut deep around every spoiled patch, smell each remaining piece, and melt the sound cheese into a thick sauce with ale and herbs. The cook tastes it, then points a spoon at the discarded rind.</p>
<<npcSay _cook "Saving food does not mean pretending rot is flavor. Remember where thrift ends." "The cook">><p>A merchant offers an extra coin for supper that will impress two prospective partners. He cannot name what he wants, only that ordinary stew will make him look ordinary too.</p>
<p>You roast onions until sweet, slice the best remaining meat thin, and build the plates around bright berry relish and crisp bread. The merchant stops performing long enough to taste it. Later, all three plates return clean with the promised coin tucked beneath yours.</p><<nobr>><p>Six unexpected travelers order supper together just as the kitchen reaches the bottom of its meat pot. There is enough for three honest servings or six disappointing ones, and the common room is already growing impatient.</p>
<p>The cook is occupied at the oven. For this moment, the choice of what the tavern promises belongs to you.</p>
<div class="npc-activity-choice-list"><<if setup.playerAttributeMeets("intelligence", 8)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("intelligence", "Turn the remaining meat into a rich shared pie")>><<link _attributeChoiceLabel "TavKitchenChoice3a">><</link>></div><</if>><div>[[Offer a cheaper onion-and-cheese supper|TavKitchenChoice3b]]</div><div>[[Thin the stew and hope hunger hides it|TavKitchenChoice3c]]</div></div><</nobr>><<nobr>><<set _cook = setup.tavernWorkKitchenNpc()>><p>You chop the meat small, bind it with onions and thick gravy, and seal everything beneath a rough bread crust. The pie takes longer than stew, so you send warm bread and relish first and tell the servers to promise something worth waiting for.</p>
<p>When the crust breaks at the table, the smell settles every complaint. The cook later inspects the empty dish and gives a reluctant nod.</p>
<<npcSay _cook "You made one portion feed six without making any of them feel cheated. That is cooking for a business." "The cook">>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print setup.tavernWorkBonusHtml({ cooking: 0.14, intelligence: 0.06 }, "Choice result")>><div>[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You tell the server exactly what remains and suggest a cheaper platter of fried onions, melted cheese, eggs, and bread. The travelers grumble until they hear the lower price, then agree to try it.</p>
<p>The food is simple, hot, and honestly sold. Nothing returns except clean plates. The innkeeper values that you protected both the pantry and the tavern's word.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print setup.tavernWorkBonusHtml({ cooking: 0.1, charisma: 0.06 }, "Choice result")>><div>[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><p>You add broth, roots, and salt until six bowls can be filled. The portions look respectable, but the first spoonful exposes what the eye cannot: weak flavor and almost no meat.</p>
<p>Two bowls return unfinished. The cook says nothing while tasting the remainder, which is worse than shouting. You finish the shift knowing exactly why stretching food and disguising scarcity are not the same skill.</p>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print setup.tavernWorkBonusHtml({ cooking: 0.04, intelligence: 0.02 }, "Choice result")>><div>[[Finish shift|TavernWorkMenu]]</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>A young pig forces its snout beneath a loose gate and bolts into the vegetable rows before anyone can catch the latch. The farmer points after it with a look that makes the next part your problem. <span class="dialogue-line dialogue-male">"Do not chase it through the cabbages. Think first."</span></p>
<p>You take a handful of bruised apples from the feed basket, crouch beside the path, and wait. The pig circles twice, suspicious but greedy, then follows the scent close enough for you to catch its hind leg and turn it away from the crops.</p>
<p>A farmhand closes the gate behind you while the pig complains at full volume. <span class="dialogue-line dialogue-male">"Ugly little bastard,"</span> he says. <span class="dialogue-line dialogue-player">"The pig or the person who left the latch loose?"</span> His sudden interest in the gate hinge answers the question.</p>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>A cart wheel drops into a rut beside the orchard and overturns two baskets of apples. Fruit rolls through mud and crushed grass while the driver curses the road, the wheel, and finally the apples themselves.</p>
<p>The farmer sets three empty baskets beside you. <span class="dialogue-line dialogue-male">"Sound fruit for market, bruised fruit for the kitchen, rot for the pigs. Sort by what it is worth, not by what is easiest to reach."</span></p>
<div class="npc-activity-choice-list"><<if setup.playerAttributeMeets("intelligence", 6)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("intelligence", "Sort every apple carefully")>><<link _attributeChoiceLabel "FeWChoice4a">><</link>></div><</if>><div>[[Turn the bruised fruit into a kitchen opportunity|FeWChoice4b]]</div><<if setup.playerAttributeMeets("fitness", 7)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("fitness", "Clear the road as quickly as possible")>><<link _attributeChoiceLabel "FeWChoice4c">><</link>></div><</if>></div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You test each apple with your thumb, wipe away mud, and cut open the ones whose bruises hide deeper damage. It takes patience, but the market basket remains clean and almost nothing edible reaches the pig trough.</p>
<p>The farmer lifts one of the sorted baskets and nods toward two small apples left on the cloth. <span class="dialogue-line dialogue-male">"Those will not sell. Take them before someone wastes time counting them again."</span></p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ farmwork: 0.12, intelligence: 0.06 }, "Choice result")>><<print setup.farmWorkGiveProduce("apples", 2, "You keep two sound but undersized apples.")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You carry the bruised fruit straight to the farmhouse kitchen before the damage can darken. The worst pieces go to the pigs, but most only need trimming, heat, and enough berries to become a sweet preserve.</p>
<p>When you explain it, the farmer turns one apple in his hand and gives a reluctant grunt. <span class="dialogue-line dialogue-male">"Food does not stop having value because the market dislikes its face. Put these by the cooking pot."</span></p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ intelligence: 0.08, cooking: 0.08 }, "Choice result")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You gather the fruit by handfuls, clearing the road before another cart arrives. The work is fast and practical, though several bruised apples land among the market fruit and will need sorting again later.</p>
<p>The driver gets his cart moving and calls thanks over his shoulder. The farmer watches the mixed baskets instead. <span class="dialogue-line dialogue-male">"Quick hands are useful. Quick hands that create tomorrow's work are less so."</span></p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ fitness: 0.08 }, "Choice result")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>Shearing looks gentle from outside the pen. Inside, the first ewe plants all four hooves, twists her full weight against your legs, and makes it clear that nobody explained the work to her.</p>
<p>An experienced farmhand shows you how to brace the animal without hurting her and where to begin the cut. <span class="dialogue-line dialogue-male">"Keep the wool in one piece. Nick her skin and she will remember you longer than you remember her."</span></p>
<p>You work slowly around the belly and legs, keeping the shears flat while warm wool falls across your lap. When the ewe finally springs free, she looks half her former size and twice as offended. The fleece comes away clean enough to earn an approving nod.</p>
</div><</nobr>><<nobr>><<set _carnality = setup.playerEffectiveCarnality ? setup.playerEffectiveCarnality() : 0>><<set _arousal = Number($c.arousal || 0)>><div class="npc-activity-panel farm-work-event-panel">
<p>The clay collar on an irrigation line bursts while you are clearing weeds beside it. Water strikes your chest and stomach hard enough to make you gasp, then turns the soil around your knees into mud. Your clothing clings to every curve, leaving the shape of your breasts and nipples plainly visible.</p>
<p>Two nearby farmhands stop pretending not to look. One gives a low laugh. <span class="dialogue-line dialogue-male">"Either cover yourself or take it off. That cloth is not hiding a damned thing."</span> The broken line continues pouring water into the field while they wait to see what you do.</p>
<div class="npc-activity-choice-list"><div>[[Cover yourself and repair the line|FmWChoice1a]]</div><div>[[Put their staring to work|FmWChoice1b]]</div><<if _carnality gte 8 or _arousal gte 18>><div>[[Strip off the soaked layers and keep working|FmWChoice1c]]</div><<else>><div class="player-choice-status">You cannot bring yourself to undress in front of the yard.</div><</if>></div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You pull your soaked clothing away from your chest, wrap a spare grain cloth around yourself, and kneel beside the break. The collar has split cleanly; wet clay will not hold, but leather binding and two wooden braces might.</p>
<p>You fit the pieces together, tighten the leather until the leak becomes a trickle, and pack fresh clay around the repair. By the time you stand, the workers have remembered their own jobs and the field is taking water at the proper pace again.</p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ intelligence: 0.08, farmwork: 0.12 }, "Choice result")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You leave the wet cloth exactly where it is and point to the split line. <span class="dialogue-line dialogue-player">"If my tits have made you forget the flood, come closer. One of you holds the pipe and the other brings leather."</span></p>
<p>Their laughter turns embarrassed, then useful. Four hands make the repair faster, and neither man dares complain when you order the braces tightened again. One still watches your chest whenever he thinks you are looking away. You make him carry the heaviest bucket back to the shed.</p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ charisma: 0.12, farmwork: 0.1, carnality: 0.05, arousal: 3 }, "Choice result")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You hold their gaze while pulling the soaked dress and undershirt over your head. Your breasts settle bare in the warm air, streaked with water and mud, while wet underclothes cling between your thighs.</p>
<p><span class="dialogue-line dialogue-player">"There. Now decide whether you came to stare or work."</span> Neither farmhand finds a clever answer. They brace the line while you bind it, eyes repeatedly dropping to your nipples whenever you lean over the pipe.</p>
<p>The repair holds. You dress again slowly enough that the heat in the yard has little to do with the sun, then send both men back to their chores with something vivid to remember.</p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ fitness: 0.08, charisma: 0.08, carnality: 0.12, arousal: 7 }, "Choice result")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>A cow begins calving before the farmer expects it. The first warning is a frightened bellow from the lower stall; the second is the farmer pushing past you with rope, cloth, and none of his usual patience.</p>
<p><span class="dialogue-line dialogue-male">"Wash your hands and get behind her,"</span> he orders. <span class="dialogue-line dialogue-male">"The calf is turned. When I say pull, you pull with the contraction, not against it."</span></p>
<p>The stall becomes heat, blood, strained muscle, and the cow's rolling fear. You keep the rope steady around the calf's legs and follow the farmer's count. Nothing moves at first. Then the calf slides free all at once, heavy and wet in your arms, and draws its first ragged breath beneath your hands.</p>
<p>The farmer checks mother and calf before looking at you. <span class="dialogue-line dialogue-male">"Hard work is not always lifting,"</span> he says quietly. <span class="dialogue-line dialogue-male">"Sometimes it is knowing when not to panic."</span></p>
</div><</nobr>><<nobr>><<set _favorNpc = setup.farmWorkPickScriptedFavorNpc()>><<set $farmWorkScriptedFavorNpcId = _favorNpc ? _favorNpc.id : "">><<set _favorWilling = _favorNpc ? setup.farmWorkFavorWillingness({ optionId: "blowjob", npcId: _favorNpc.id }) : { ok: false, text: "No farmhand is here to make the offer." }>><div class="npc-activity-panel farm-work-event-panel">
<p>A produce wagon breaks an axle at the far edge of the field. The load has to reach the market road before evening, which means unloading every crate, lifting the wagon, binding a new brace, and loading it all again.</p>
<p>One of the stronger farmhands watches you test the wagon's weight. He could make the work much faster, but he stays against the fence with a slow, knowing smile.</p>
<p><span class="dialogue-line dialogue-male">"I will put my shoulder under that axle for you,"</span> he says. <span class="dialogue-line dialogue-male">"Afterward, you come behind the hay shed, get on your knees, and suck my cock until I cum. Otherwise, that wagon is all yours."</span></p>
<div class="npc-activity-choice-list"><div>[[Unload and repair the wagon yourself|FhWChoice2a]]</div><div>[[Call the farmer and demand proper help|FhWChoice2b]]</div><<if _favorNpc and _favorWilling.ok>><div>[[Accept his condition (blowjob)|FhWChoice2c]]</div><<elseif !_favorWilling.ok>><div class="player-choice-status"><<= _favorWilling.text >></div><</if>></div>
</div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You refuse to pay for help with your mouth. Crate by crate, you strip the wagon down until the frame is light enough to raise with a lever and a stack of flat stones.</p>
<p>The repair takes most of the remaining daylight. Your shoulders shake when you load the final crate, but the axle holds when the wagon begins moving. The farmhand's smile has disappeared by then. <span class="dialogue-line dialogue-player">"Keep leaning on that fence,"</span> you tell him. <span class="dialogue-line dialogue-player">"You have almost made yourself useful as a post."</span></p>
<p>You have no regret about the bargain you refused. Even so, the image he planted returns uninvited while you finish the last crate.</p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ strength: 0.15, fitness: 0.1, farmwork: 0.12 }, "Choice result")>>
<<print setup.jobRefusedIntimacyHtml($lastFarmWorkResult, "wagon_refuse")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You leave the wagon where it stands and call loudly enough for the farmer to hear from the next field. When he arrives, you explain the broken axle, the waiting load, and the worker who has decided that doing his job requires a private payment from you.</p>
<p>The farmer's expression hardens. <span class="dialogue-line dialogue-male">"I already pay him to lift,"</span> he says. <span class="dialogue-line dialogue-male">"He can earn that wage now or discover how much lighter his purse feels without it."</span></p>
<p>The repair is finished with three people on the axle and no further bargaining. The farmhand avoids your eyes, but the farmer gives you an extra coin for protecting the delivery instead of quietly accepting the delay.</p>
<p>Calling for help was the right choice. His proposal still crosses your mind on the walk back, though it has no claim on your answer.</p>
<<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ gold: 1, charisma: 0.12, farmwork: 0.08 }, "Choice result")>>
<<print setup.jobRefusedIntimacyHtml($lastFarmWorkResult, "wagon_report")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>><<nobr>><<set _favorStart = setup.farmWorkStartScriptedFavor("blowjob", $farmWorkScriptedFavorNpcId)>><<if _favorStart and _favorStart.success is false>><div class="npc-activity-panel farm-work-event-panel">
<p>You agree, but the private bargain falls apart before either of you can leave the field. He has lost his nerve, or the moment has simply passed. Together you repair the wagon without pretending another payment is still owed.</p>
<p><<= _favorStart.text >></p><<print setup.farmWorkRewardHtml($lastFarmWorkResult)>><<print setup.farmWorkBonusHtml({ farmwork: 0.08 }, "Choice result")>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><<else>><<goto "NPCEncounter">><</if>><</nobr>><<nobr>><<run setup.ensureForgeWorkSystem()>><<set _worker = setup.getNpcById($activeNpcId)>><<set _master = setup.forgeMasterNpc()>>
<div class="npc-activity-panel">
<div class="npc-interact-name"><<= _worker ? setup.npcDisplayName(_worker) : "The forge" >></div>
<p>The hammering does not stop merely because you approach. Hot iron has its own timing, and you wait beyond the reach of the sparks until the current piece is returned to the coals.</p>
<<if _worker>><p><<= setup.npcDisplayName(_worker) >> wipes soot from one wrist and gives you a look sharpened by heat and interrupted concentration. <span class="dialogue-line">"Speak clearly. Metal will wait for neither of us."</span></p><</if>>
<div class="npc-action-list">
<<if _worker>><div><<link "Speak with them" "NPCInteract">><<set $return = "Forge Master">><</link>></div><</if>>
<<if $ForgeworkAccept is 0 and _worker and _master and _worker.id is _master.id and !$ForgeTrialStarted>><div>[[Ask for forge work|ForgeWorkIntro]]</div><</if>>
<<if $ForgeworkAccept is 0 and _worker and _master and _worker.id isnot _master.id and !$ForgeTrialStarted>><div class="farm-work-locked">Only the forge master can take on another worker.</div><</if>>
<<if $ForgeworkAccept is 1>><div>[[Choose forge work|ForgeWorkMenu]]</div><</if>>
</div>
<div class="npc-return-link">[[Return to the forge|Iron Ember Forge]]</div>
</div><</nobr>><<nobr>><<set _master = setup.forgeMasterNpc()>>
<div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Work at the Iron Ember</div>
<p>You ask whether the forge has work for another pair of hands. <<print setup.npcEventMentionHtml(_master, "The forge master")>> looks from your shoulders to your palms, then turns one of your hands over as if calluses might answer more honestly than you will.</p>
<<print setup.npcEventDialogueHtml(_master, "I do not need someone who likes the idea of a forge. I need someone who can hear an instruction over the hammer, remember it near the fire, and admit a mistake before bad iron becomes a broken tool.", "The forge master")>>
<p>He points first to a mixed heap of scrap and usable stock, then to the bellows, and finally to a practice bar glowing dull red beside the quench trough. None of it is glamorous. All of it can go wrong.</p>
<div class="npc-activity-choice-list"><<if $forgeTrialRejectedDay is setup.npcCurrentDay()>><p>The forge master tells you to return tomorrow, when there is fresh stock for another trial.</p><<else>><div><<link "Accept the trial" "ForgeWorkTrial">><<run setup.forgeTrialBegin()>><</link>></div><</if>><div>[[Not today|Forge Master]]</div></div>
</div><</nobr>><<nobr>><<run setup.ensureForgeWorkSystem()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !$ForgeTrialStarted>><p>The trial is not underway. Speak to the forge master when you are ready to begin.</p><div>[[Return to the forge|Forge Master]]</div><<else>>
<p>The forge master gives you no second set of hands. Three ordinary tasks wait among the smoke, noise, and heat. He watches whether you can work safely and learn from what goes wrong.</p>
<<set _master = setup.forgeMasterNpc()>><<print setup.npcEventDialogueHtml(_master, "Sort the stock, hold the heat, and quench the practice bar. Tell me when you are uncertain. Bad iron can be remade; a burned hand cannot.", "The forge master")>>
<div class="farm-trial-actions">
<<if $ForgeTrialMetal>><div>Sort the metal stock <span class="farm-work-meta">Done</span></div><<elseif $c.energy gte 2>><div>[[Sort the metal stock|ForgeTrialMetal]] <b id="Energy">(-2 Energy)</b></div><</if>>
<<if $ForgeTrialBellows>><div>Work the bellows <span class="farm-work-meta">Done</span></div><<elseif $c.energy gte 2>><div>[[Work the bellows|ForgeTrialBellows]] <b id="Energy">(-2 Energy)</b></div><</if>>
<<if $ForgeTrialQuench>><div>Quench the practice piece <span class="farm-work-meta">Done</span></div><<elseif $c.energy gte 2>><div>[[Quench the practice piece|ForgeTrialQuench]] <b id="Energy">(-2 Energy)</b></div><</if>>
<<if $ForgeTrialMetal and $ForgeTrialBellows and $ForgeTrialQuench>><div>[[Ask for the forge master's judgment|ForgeTrialComplete]]</div><</if>>
</div><div class="npc-return-link">[[Step outside|Iron Ember Forge]]</div><</if>></div><</nobr>><<nobr>><<set $forgeTrialResult = setup.forgeTrialResolve("metal")>>
<div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Good iron and bad</div>
<p>The heap looks simple until you kneel beside it. Bent nails can be reheated, cracked straps may be cut down, and bright metal is not always sound metal. You test weight, color, and the ring each piece makes against the stone.</p>
<<if $forgeTrialResult.success>><p>You separate the stock slowly but sensibly. The forge master checks three pieces, then leaves the rest untouched. <span class="dialogue-line dialogue-male">"You looked before deciding. Keep that habit."</span></p><<else>><p>The forge master plucks two pieces from the wrong pile and strikes one against the anvil. A hidden crack answers with a dead sound. <span class="dialogue-line dialogue-male">"Pretty iron can still betray you. Listen before you trust your eyes."</span></p><</if>>
<div class="farm-trial-result-link">[[Continue the trial|ForgeWorkTrial]]</div></div><</nobr>><<nobr>><<set $forgeTrialResult = setup.forgeTrialResolve("bellows")>>
<div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Feeding the fire</div>
<p>You take the bellows handle and push. The leather folds with a deep breath, the coals brighten, and heat rolls over your face hard enough to dry your mouth. The trick is not simply force. It is keeping the air steady while the smith watches the iron instead of you.</p>
<<if $forgeTrialResult.success>><p>You find the rhythm and hold it until the bar reaches a clean yellow heat. <span class="dialogue-line dialogue-male">"Good. Fire hates impatience almost as much as iron does."</span></p><<else>><p>Your rhythm breaks as your shoulders begin to burn. The coals flare, dim, then flare again. The smith takes the handle long enough to show you the pace. <span class="dialogue-line dialogue-male">"Do not fight it. Breathe with it."</span></p><</if>>
<div class="farm-trial-result-link">[[Continue the trial|ForgeWorkTrial]]</div></div><</nobr>><<nobr>><<set $forgeTrialResult = setup.forgeTrialResolve("quench")>>
<div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">The quench</div>
<p>The practice bar glows along its edge. You take it in the tongs, keep its weight away from your body, and lower it toward the trough. Steam bursts upward the moment the iron touches water, hiding your hands in a white cloud.</p>
<<if $forgeTrialResult.success>><p>You keep the piece moving and withdraw it without twisting. The forge master studies the cooling surface and gives a small nod. <span class="dialogue-line dialogue-male">"No panic when it hissed. That can be taught into something useful."</span></p><<else>><p>The violent hiss makes you jerk the bar sideways. The forge master catches your wrist before hot water can splash across you. <span class="dialogue-line dialogue-male">"The noise is warning, not command. You decide where the iron goes."</span></p><</if>>
<div class="farm-trial-result-link">[[Ask for their judgment|ForgeTrialComplete]]</div></div><</nobr>><<nobr>><<run setup.ensureForgeWorkSystem()>><<set _master = setup.forgeMasterNpc()>>
<div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Taken on at the forge</div>
<<if $ForgeworkAccept is 1>><p>You already have a place on the forge floor.</p><div>[[Choose forge work|ForgeWorkMenu]]</div>
<<elseif !$ForgeTrialStarted>><p>The forge master has finished judging that attempt. Speak to them about another trial when the forge is ready.</p><div>[[Return to the forge|Forge Master]]</div>
<<elseif !($ForgeTrialMetal and $ForgeTrialBellows and $ForgeTrialQuench)>><p>The forge master glances toward the unfinished tasks. <span class="dialogue-line dialogue-male">"A trial is not complete because you grew tired of it."</span></p><div>[[Return to the trial|ForgeWorkTrial]]</div>
<<elseif $ForgeTrialScore lt 2>><<set $ForgeTrialStarted to false>><<set $forgeTrialRejectedDay to setup.npcCurrentDay()>>
<p>The forge master sets the practice bar beside the stock you worked and points out where the trial came apart. He does not raise his voice; he lets you see what would have failed under a customer's hand.</p>
<<print setup.npcEventDialogueHtml(_master, "You stayed at the work, but I had to stop too much of it. Come back tomorrow. Listen to the metal first, then ask me to trust you with someone else's tools.", "The forge master")>>
<div>[[Return to the forge|Iron Ember Forge]]</div>
<<else>>
<<if $ForgeworkAccept is 0>><<set $ForgeworkAccept = 1>><<set $ForgeTrialStarted to false>><<set $Smithingskill = Math.max($Smithingskill, 2)>><<set $c.gold += 2>><<run setup.businessSpendGold("forge", 2)>><</if>>
<p>The forge master turns the practice bar in the light, then sets it down among the scrap.</p><<print setup.npcEventDialogueHtml(_master, "You are rough, but you pay attention. Start with coal, water, and bellows. When I trust your hands, I will put tools in them.", "The forge master")>>
<p>Two coins are placed in your palm for the trial. More importantly, you now have a place on the forge floor whenever the Iron Ember is open.</p>
<p class="farm-work-gain-line"><b id="Goldgain">+2 Gold</b> <b>Smithing established</b></p>
<div class="farm-trial-result-link">[[Choose forge work|ForgeWorkMenu]]</div><</if>>
</div><</nobr>><<nobr>><<run setup.ensureForgeWorkSystem()>>
<div class="npc-activity-panel"><div class="npc-interact-name">Forge work</div>
<p>The forge floor is divided by trust. New hands feed the fire and move stock. Proven assistants work beside the anvil. Only practiced workers are allowed to take responsibility for a customer's commission.</p>
<p class="cooking-note">Smithing: <b><<= setup.forgeWorkSkill() >></b></p>
<<print setup.playerWorkNeedWarningHtml(120)>>
<div class="farm-work-actions">
<<set _forgeCheck = setup.forgeWorkCanStart(setup.forgeWorkTiers.labor)>><<if _forgeCheck.ok>><div><<link "Take a forge labor shift">><<set _forgeStart = setup.forgeWorkStart("labor")>><<goto _forgeStart.passage>><</link>> <span class="farm-work-meta">1 hour, 4 gold,</span> <b id="Energy">-<<= setup.playerWorkEnergyCost(6, 60, true) >> Energy</b></div><<else>><div class="farm-work-locked"><<= _forgeCheck.text >></div><</if>>
<<set _forgeCheck = setup.forgeWorkCanStart(setup.forgeWorkTiers.assistant)>><<if _forgeCheck.ok>><div><<link "Work as the smith's assistant">><<set _forgeStart = setup.forgeWorkStart("assistant")>><<goto _forgeStart.passage>><</link>> <span class="farm-work-meta">1.5 hours, 8 gold,</span> <b id="Energy">-<<= setup.playerWorkEnergyCost(11, 90, true) >> Energy</b></div><<else>><div class="farm-work-locked"><<= _forgeCheck.text >></div><</if>>
<<set _forgeCheck = setup.forgeWorkCanStart(setup.forgeWorkTiers.commission)>><<if _forgeCheck.ok>><div><<link "Take commission work">><<set _forgeStart = setup.forgeWorkStart("commission")>><<goto _forgeStart.passage>><</link>> <span class="farm-work-meta">2 hours, 14 gold,</span> <b id="Energy">-<<= setup.playerWorkEnergyCost(16, 120, true) >> Energy</b></div><<else>><div class="farm-work-locked"><<= _forgeCheck.text >></div><</if>>
</div><div class="npc-return-link">[[Return to the forge|Iron Ember Forge]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Coal by the basket</div><p>The coal pile sits under a lean-to behind the forge. You fill each basket low enough to carry without spilling, shoulder it through the narrow doorway, and empty it beside the fire where the smith can reach it without breaking rhythm.</p><p>By the fourth journey, black dust has found every damp place on your skin. The apprentice glances at your soot-streaked face and laughs. <span class="dialogue-line dialogue-male">"Now you look employed."</span></p><p>You answer by dropping the next basket beside his boots hard enough to dust both of them. The forge master hides the beginning of a smile behind his hammer.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Holding the heat</div><p>The smith gives you a color rather than a time. <span class="dialogue-line dialogue-male">"Bright orange. Hold it there."</span> You work the bellows while he turns the bar, learning to read the fire through the iron instead of the flame.</p><p>Your arms begin to tremble before he is finished. You shorten the stroke rather than losing the rhythm, and the iron stays where he wants it. When he finally nods, the silence of the bellows feels louder than the hammering did.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">A clean floor</div><p>Hammer scale gathers around the anvil like black glass, sharp enough to cut through a thin sole. You sweep between heats, clear the tongs from walking paths, and learn which tools must never be moved from the smith's reach.</p><p>A customer steps backward without looking and finds clear stone instead of a hooked poker. The forge master notices. <span class="dialogue-line dialogue-male">"People think the hammer makes a forge safe. It is the person watching the floor."</span></p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Water before sparks</div><p>The quench trough is low and the fire bucket lower. You carry water from the well in paired pails, walking carefully as customers and workers cross the yard without caring about your path.</p><p>The last bucket is barely set down when a coal snaps from the forge and lands against a scrap of dry sacking. You drown it before the flame can take. <span class="dialogue-line dialogue-male">"That,"</span> the smith says, <span class="dialogue-line dialogue-male">"is why the bucket is filled before it is needed."</span></p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">A shoe that sits true</div><p>A carter brings in a horse with one shoe worn thin along the outside edge. The smith makes you study the old piece before heating the new blank. <span class="dialogue-line dialogue-male">"The hoof tells you how the animal walks. Ignore it and your work makes the next problem."</span></p><p>You hold the tongs while he draws the curve, then take the hammer for the final adjustments. The shoe is plain, balanced, and worth more than anything decorative that fails under weight.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">A hundred small measures</div><p>Nails are simple only to someone who has never made them. You draw the rod, cut each length, form every head, and drop the finished piece into a growing pile while the apprentice counts aloud.</p><p>Your first nails vary enough to look like a family. By the end, they lie nearly identical. The forge master rolls three beneath his palm. <span class="dialogue-line dialogue-male">"A roof does not care whether the work bored you. Every nail must hold."</span></p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">The farmer's mattock</div><p>A mattock arrives with its eye stretched and the handle loose. Replacing the whole head would be easy money, but the smith shows you where the metal can be upset and tightened instead.</p><p><span class="dialogue-line dialogue-male">"Sell people what they need, not what empties their purse,"</span> he says. You heat only the damaged section and work it back into shape. The farmer leaves with a sound tool and enough coin left for seed.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Judging the color</div><p>The smith hands you responsibility for a row of small blades. You normalize each piece, watch the color fade evenly, then bring it back to heat before the quench. One hurried movement could warp the entire batch.</p><p>Steam veils your face and dampens the front of your clothes. When the last blade comes out straight, the apprentice taps one against the bench and grins at the clean ring. <span class="dialogue-line dialogue-male">"No cracks. I was ready to blame you for all of them."</span></p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">A pot that will not rock</div><p>The tavern needs a broad iron pot that can sit over uneven coals without tipping. You build the base thicker than the walls, shape the handles away from the hottest surface, and test the empty pot on three different trivets.</p><p>The innkeeper presses one palm against the rim and fails to make it rock. <span class="dialogue-line dialogue-male">"Good. If the stew lands on the floor now, I can blame the cook instead of you."</span> The forge master lets you mark the underside with your own small stamp.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">The hall's stubborn latch</div><p>The town hall brings you a latch that has failed twice. The wood swells in wet weather, forcing the bolt out of alignment. You measure the play, lengthen the guide, and leave enough tolerance for the door to move without letting it rattle.</p><p>The clerk tests it until everyone is tired of hearing the click. It closes cleanly every time. A little extra coin appears beside the agreed payment, and the forge master slides it toward you without ceremony.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">An edge for harvest</div><p>A farm crew needs a replacement blade before the next morning. You draw the edge thin without starving the spine, correct a slight curve over the horn, and temper the steel while the forge master watches without interrupting.</p><p>The finished blade bites through a hanging bundle of reeds in one clean pull. <span class="dialogue-line dialogue-male">"That will earn its keep before sunrise,"</span> the smith says. The urgency brings a small bonus with the farmer's thanks.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">A flaw under the hammer</div><p>A bar meant for hinges begins to split along one edge. The flaw is small enough to conceal beneath another heat, but large enough to fail after the work leaves the forge. The customer is waiting, and the forge master is occupied across the yard.</p><p>You have enough time to decide what sort of worker you intend to be before anyone notices.</p><div class="npc-activity-choice-list"><div>[[Call the forge master over|ForgeBadMetalHonest]]</div><<if setup.playerAttributeMeets("intelligence", 8)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("intelligence", "Cut away the flaw and salvage the bar")>><<link _attributeChoiceLabel "ForgeBadMetalSalvage">><</link>></div><</if>><div>[[Hide the split and finish quickly|ForgeBadMetalHide]]</div></div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You call the forge master before touching the bar again. He finds the split, checks the rest of the stock, and sends the customer away with an honest delay instead of a dangerous hinge.</p><p><span class="dialogue-line dialogue-male">"Mistakes cost iron. Hidden mistakes cost names,"</span> he tells you. <span class="dialogue-line dialogue-male">"You protected mine. Remember that I noticed."</span></p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print setup.forgeWorkBonusHtml({ intelligence: 0.08, smithing: 0.12 }, "Decision")>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You mark the crack, cut the damaged end away, and redraw the remaining metal into two smaller hinges. The original order will be short one piece, but nothing unsafe leaves your hands.</p><p>The forge master checks your work and grunts. <span class="dialogue-line dialogue-male">"You saved the iron. Next time, tell me before you change the order."</span> It is correction, not condemnation.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print setup.forgeWorkBonusHtml({ smithing: 0.18 }, "Decision")>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You close the split beneath quick hammer blows and file the surface smooth. The hinge looks finished. It also gives a faint, wrong click when you test it.</p><p>The forge master hears it from across the room. He breaks the piece open with one strike and lets the cracked metal fall at your feet. <span class="dialogue-line dialogue-male">"Scrap is cheaper than shame. Do not make me teach you that twice."</span></p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print setup.forgeWorkBonusHtml({ smithing: 0.05 }, "Hard lesson")>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><<set _forgeFlirt = setup.forgeWorkFavorNpc()>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Heat with nowhere to go</div><p>The forge grows brutal near midday. Sweat runs beneath your clothes, and you loosen the neckline just enough to breathe. One of the workers catches the movement and lets his attention linger before forcing it back to the iron.</p><p><span class="dialogue-line dialogue-male">"Careful,"</span> he says, mouth crooked. <span class="dialogue-line dialogue-male">"There is already enough in here to make a man lose concentration."</span></p><p>The comment is light, but the look behind it is not. You can feed the tension, end it, or leave him wondering whether he imagined your response.</p><div class="npc-activity-choice-list"><<if setup.playerAttributeMeets("charisma", 7)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("charisma", "Flirt back without stopping work")>><<link _attributeChoiceLabel "ForgeHeatBanterFlirt">><</link>></div><</if>><div>[[Tell him to watch the iron|ForgeHeatBanterFirm]]</div><div>[[Pretend not to notice|ForgeHeatBanterQuiet]]</div></div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You bend to collect the tongs with deliberate care, aware of exactly where his eyes have gone. <span class="dialogue-line dialogue-player">"Then keep your hammer steady and prove you can manage both kinds of heat."</span></p><p>His next strike lands harder than intended. The sound rings through the forge while a private warmth settles lower in your body, following you through the rest of the shift.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print setup.forgeWorkBonusHtml({ charisma: 0.08, carnality: 0.05, arousal: 4 }, "Reaction")>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You point the tongs toward the brightening bar. <span class="dialogue-line dialogue-player">"If it burns while you stare at my breasts, you can explain the waste to the master."</span></p><p>He snaps his attention back to the coals. The apprentice laughs once, sharply, before pretending the sound came from the bellows. No one mistakes the boundary after that.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print setup.forgeWorkBonusHtml({ charisma: 0.08 }, "Reaction")>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You tighten your grip on the bellows and give him nothing. Without an answer, the remark loses its courage and falls beneath the hammering.</p><p>He watches once more when he thinks you cannot see, but keeps his mouth shut. The rest of the shift passes in productive heat rather than argument.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print setup.forgeWorkBonusHtml({ smithing: 0.08 }, "Focus")>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Coin against the clock</div><p>A courier arrives with a snapped wagon pin and a promise of extra coin if the replacement is ready immediately. The forge master looks at the other orders already waiting, then leaves the decision with you.</p><p><span class="dialogue-line dialogue-male">"Fast work is useful. Rushed work is expensive. Decide which one you can give him."</span></p><div class="npc-activity-choice-list"><div>[[Take the time to make it properly|ForgeRushOrderQuality]]</div><<if setup.playerAttributeMeets("fitness", 10)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("fitness", "Work through the break for the bonus")>><<link _attributeChoiceLabel "ForgeRushOrderOvertime">><</link>></div><</if>><div>[[Refuse to disrupt the other orders|ForgeRushOrderRefuse]]</div></div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You refuse the courier's impossible promise but offer a dependable one. The pin will be ready soon, not instantly. He curses the delay, waits, and leaves with a piece that will carry the wagon farther than the next bend.</p><p>The forge master weighs the finished pin in his hand. <span class="dialogue-line dialogue-male">"A customer remembers waiting for an hour. He remembers a broken wheel for years."</span></p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print setup.forgeWorkBonusHtml({ smithing: 0.18, intelligence: 0.05 }, "Decision")>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You clear a corner of the fire and work without stopping. The courier pumps the bellows under your direction while you draw and shape the pin. Sweat runs into your eyes, but the metal comes true.</p><p>He pays the promised bonus and hurries away. Your arms feel the cost, though the extra coins in your hand make the ache easier to forgive.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print setup.forgeWorkBonusHtml({ gold: 3, smithing: 0.12, fitness: 0.05 }, "Rush bonus")>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You tell the courier the forge will not push three promised repairs aside for one louder voice. He leaves angry, carrying the broken pin to search for another smith.</p><p>The customers already waiting hear the exchange. One nods his thanks. The forge master says nothing until the man is gone. <span class="dialogue-line dialogue-male">"Coin is useful. A queue that trusts your word is worth more."</span></p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print setup.forgeWorkBonusHtml({ charisma: 0.06 }, "Decision")>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">The decorated knife</div><p>A prosperous merchant wants a belt knife that looks costly at a feast but will probably never cut more than cheese. He asks for curling filework, a polished spine, and a handle shaped to make other people notice it.</p><p>The commission pays well, but the decoration threatens to consume time better spent on the blade itself. You decide what deserves your attention.</p><div class="npc-activity-choice-list"><<if setup.playerAttributeMeets("intelligence", 12)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("intelligence", "Balance beauty and function")>><<link _attributeChoiceLabel "ForgeCommissionBalanced">><</link>></div><</if>><div>[[Give him every ornament he requested|ForgeCommissionOrnate]]</div><div>[[Make the best blade and ignore vanity|ForgeCommissionPlain]]</div></div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You keep the blade sound, then choose two decorations that follow its shape instead of weakening it. The merchant turns it under the light, pleased by the shine, while the forge master tests the edge with a private nod.</p><p>The commission satisfies both men for entirely different reasons. That may be the most useful kind of craftsmanship.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print setup.forgeWorkBonusHtml({ smithing: 0.2, charisma: 0.06, gold: 2 }, "Commission bonus")>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You give the merchant flourishes enough to display from across a room. The work is fussy, exacting, and far removed from hammering plowshares, but his delighted expression turns into a generous payment.</p><p>The forge master examines the knife after the merchant leaves. <span class="dialogue-line dialogue-male">"Not every tool needs to be humble. Just make certain pretty work still deserves to be called work."</span></p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print setup.forgeWorkBonusHtml({ gold: 4, charisma: 0.08 }, "Commission bonus")>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You spend the time on geometry, temper, and edge. The finished knife is austere and excellent. The merchant's face falls when he sees how little of his requested decoration survived.</p><p>He pays the agreed amount without a bonus. The forge master waits until he is gone before taking the knife from its sheath again. <span class="dialogue-line dialogue-male">"You made the better blade. Next time, remember that the customer was buying a story too."</span></p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print setup.forgeWorkBonusHtml({ smithing: 0.28 }, "Commission result")>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><<set _favor = $pendingForgeWorkFavor>><<set _npc = _favor ? setup.getNpcById(_favor.npcId) : null>><<set _willing = _favor ? setup.farmWorkFavorWillingness(_favor) : { ok: false, text: "The moment has passed." }>>
<div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Behind the coal shed</div>
<<if !_npc>><p>The private interruption disappears into the noise of the forge before it becomes anything more.</p>
<<elseif _npc.gender is "female">><p><<= setup.npcDisplayName(_npc) >> catches you alone while you return the tongs. Her hand settles against your hip, leaving a streak of soot there as she leans close enough for the heat of her breath to compete with the forge.</p><p><span class="dialogue-line dialogue-female">"Come behind the coal shed,"</span> she murmurs. <span class="dialogue-line dialogue-female">"Get on your knees and eat my pussy until I can think about work again."</span></p>
<<else>><p><<= setup.npcDisplayName(_npc) >> blocks your path beside the rear door, his skin bright with heat and his apron hanging low on his hips. He glances toward the coal shed where the wall hides anyone standing close behind it.</p><p><span class="dialogue-line dialogue-male">"Come back there with me,"</span> he says. <span class="dialogue-line dialogue-male">"Wrap that hand around my cock and make me cum before the master notices we are gone."</span></p><</if>>
<p>It is a direct request, not part of your wages. The choice is yours, and the forge will still be waiting when the moment ends.</p>
<div class="npc-activity-choice-list"><<if _willing.ok>><div><<link "Go with them">><<set _started = setup.forgeWorkAcceptFavor()>><<goto "NPCEncounter">><</link>></div><<else>><div class="player-choice-status"><<= _willing.text >></div><</if>><div>[[Refuse and return to work|ForgeWorkFavorRefuse]]</div></div>
</div><</nobr>><<nobr>><<set _favor = $pendingForgeWorkFavor>><<set _npc = _favor ? setup.getNpcById(_favor.npcId) : null>><div class="npc-activity-panel farm-work-event-panel"><p>You step around them and take the tongs from the rack. <span class="dialogue-line dialogue-player">"Cool yourself in the trough if you cannot manage it. I came here to work."</span></p><p><<if _npc>><<= setup.npcDisplayName(_npc) >> gives you a frustrated look but moves aside. Within moments the hammering has swallowed the exchange, leaving your refusal exactly where you put it.<<else>>The interruption passes and the forge returns to its ordinary rhythm.<</if>></p><<run setup.forgeWorkDeclineFavor()>><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Back to the hammering</div><p>You straighten your clothes, wipe what soot you can from your hands, and return by a different side of the yard. The forge has not paused for either of you. Hammer, bellows, and hissing water cover the last traces of whatever happened behind the shed.</p><p>No one asks where you were. Whether that means no one noticed is another question.</p><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><div class="farm-trial-result-link">[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><<run setup.ensureChapelWorkSystem()>>
<p>The village path thins beneath a denser canopy. Old wheel ruts fade into roots and leaf litter, while strips of cloth tied to low branches mark the safest way back toward Ambercross.</p>
<<print setup.locationImageHtml("img/location/DF_Forestverge.png", "Forest verge", "img/location/DF_Forestvergenight.png")>>
<<dueActivityLinks "Forest Verge">>
<<travel "west" "Follow the marked path deeper" "Forked Oak" 10>>
<<travel "east" "Return to the familiar forest path" "Forest Path" 10>><</nobr>><<nobr>><p>A lightning-split oak rises where several woodland tracks divide. Its pale inner trunk can be seen from every approach, making it the closest thing the deeper forest has to a signpost.</p>
<<print setup.locationImageHtml("img/location/DF_Forkedoak.png", "Forked oak", "img/location/DF_Forkedoaknight.png")>>
<<dueActivityLinks "Forked Oak">>
<<travel "north" "Take the narrow trail toward the hunters" "Hunter's Camp" 10>>
<<travel "west" "Follow the old cart ruts" "Old Cart Track" 10>>
<<travel "south" "Descend toward running water" "Coldwater Ford" 10>>
<<travel "east" "Return toward the forest verge" "Forest Verge" 10>><</nobr>><<nobr>><p>Low shelters, drying racks, and a carefully smothered fire occupy a patch of firm ground between the trees. The camp looks temporary, but every rope and tool has a practiced place.</p>
<<dueActivityLinks "Hunter's Camp">>
<<travel "south" "Return to the forked oak" "Forked Oak" 10>><</nobr>><<nobr>><p>Two shallow ruts run beneath weeds and fallen needles, remnants of a road once used to haul timber. Broken wheel pins and old axe marks still appear where the undergrowth has not swallowed them.</p>
<<print setup.locationImageHtml("img/location/DF_Oldcarttrack.png", "Old cart track", "img/location/DF_Oldcarttracknight.png")>>
<<dueActivityLinks "Old Cart Track">>
<<travel "northwest" "Follow the sound of axes uphill" "Woodcutter's Clearing" 10>>
<<travel "southwest" "Follow the smoke through the lower trees" "Charcoal Burner's Camp" 10>>
<<travel "east" "Return to the forked oak" "Forked Oak" 10>><</nobr>><<nobr>><<run setup.ensureChapelWorkSystem()>>
<p>A roofless wayside shrine leans beneath ivy and old stonework. Someone still clears the altar, replaces the smallest candles, and keeps one dry corner fit for travelers caught far from the village.</p>
<<print setup.locationImageHtml("img/location/DF_Ruineswaysideshrine.png", "Ruined wayside shrine", "img/location/DF_Ruineswaysideshrinenight.png")>>
<<if setup.chapelQuestCanDeliver()>><div class="location-action-list"><div>[[Look for the chapel's contact|ChapelTrialDelivery]]</div></div><<elseif $chapelWorkQuest.state is "favor" or $chapelWorkQuest.state is "found">><div class="location-action-list"><div>[[Speak with the chapel contact|ChapelTrialFavor]]</div></div><</if>>
<<dueActivityLinks "Ruined Wayside Shrine">>
<<travel "west" "Follow the old road toward Briar Hollow" "BH East Path" 10>>
<<travel "east" "Return to Coldwater Ford" "Coldwater Ford" 10>><</nobr>><<nobr>><p>Dark earth and stacked timber surround several turf-covered charcoal mounds. Thin smoke escapes through their vents, and every nearby surface carries a soft coat of black dust.</p>
<<print setup.locationImageHtml("img/location/DF_Charcoalburnerscamp.png", "Charcoal burner camp", "img/location/DF_Charcoalburnerscampnight.png")>>
<div class="location-action-list"><div><<link "Look into the workers' shelter" "Camp Shelter">><<set $campShelterLocation = "Charcoal Burner's Camp">><</link>></div></div>
<<dueActivityLinks "Charcoal Burner's Camp">>
<<travel "northeast" "Climb back toward the old cart track" "Old Cart Track" 10>><</nobr>><<nobr>><p>Fresh-cut rounds and split logs are stacked around a broad working space. Sawdust softens the ground, and several marked trees wait along the clearing's edge for the next day's labor.</p>
<<print setup.locationImageHtml("img/location/DF_Woodcuttersclearing.png", "Woodcutter clearing", "img/location/DF_Woodcuttersclearingnight.png")>>
<div class="location-action-list"><div><<link "Look into the workers' shelter" "Camp Shelter">><<set $campShelterLocation = "Woodcutter's Clearing">><</link>></div></div>
<<dueActivityLinks "Woodcutter's Clearing">>
<<travel "southeast" "Descend toward the old cart track" "Old Cart Track" 10>><</nobr>><<nobr>><p>A quick, clear stream spreads over flat stones before narrowing again beneath alder roots. The crossing is shallow, though the water remains painfully cold even under the afternoon sun.</p>
<<print setup.locationImageHtml("img/location/DF_Coldwaterford.png", "Coldwater ford", "img/location/DF_Coldwaterfordnight.png")>>
<<dueActivityLinks "Coldwater Ford">>
<<travel "west" "Follow the stream toward the ruined shrine" "Ruined Wayside Shrine" 10>>
<<travel "north" "Climb back toward the forked oak" "Forked Oak" 10>><</nobr>><<nobr>><div class="village-map-wrap">
<div class="area-map-frame">
<<mapAreaArrow "west" "briar">>
<div class="village-map forest-map">
<div class="map-label">Deep Forest</div>
<div class="map-feature water">Coldwater stream</div>
<div class="map-feature ridge">old wooded ridge</div>
<div class="forest-map-road r1"></div><div class="forest-map-road r2"></div><div class="forest-map-road r3"></div>
<div class="forest-map-road r4"></div><div class="forest-map-road r5"></div><div class="forest-map-road r6"></div><div class="forest-map-road r7"></div><div class="forest-map-road r8"></div>
<<mapNode "Forest Path" "Forest Path" "88%" "53%" 10>>
<<mapNode "Clearing" "Forest Clearing" "84%" "30%" 10>>
<<mapNode "Verge" "Forest Verge" "73%" "52%" 10>>
<<mapNode "Forked Oak" "Forked Oak" "56%" "52%" 10>>
<<mapNode "Hunter's Camp" "Hunter's Camp" "48%" "25%" 10>>
<<mapNode "Cart Track" "Old Cart Track" "36%" "52%" 10>>
<<mapNode "Woodcutters" "Woodcutter's Clearing" "20%" "37%" 10>>
<<mapNode "Charcoal Camp" "Charcoal Burner's Camp" "18%" "68%" 10>>
<<mapNode "Coldwater Ford" "Coldwater Ford" "55%" "72%" 10>>
<<mapNode "Ruined Shrine" "Ruined Wayside Shrine" "30%" "82%" 10>>
</div>
<<mapAreaArrow "east" "ambercross">>
</div>
<div class="map-note">Only places reached on foot are shown. Travel time follows the known paths.</div>
</div>
<div class="npc-return-link"><<link "Return to Game" setup.areaMapReturnPassage()>><</link>></div><</nobr>><<nobr>><<run setup.ensureChapelWorkSystem()>><<set _keeper = setup.chapelEmployerNpc()>>
<div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Work for the chapel</div>
<<if $ChapelworkAccept is 1>><p>You have already earned a place among the chapel's working hands.</p><div>[[Choose chapel work|ChapelWorkMenu]]</div>
<<elseif $chapelWorkQuest.state is "deliver">><p>The sealed parcel remains in your care. It must reach the ruined wayside shrine before the chapel will discuss regular work.</p>
<<elseif $chapelWorkQuest.state is "favor" or $chapelWorkQuest.state is "search" or $chapelWorkQuest.state is "found">><p>The parcel was delivered, but the contact wants a favor before sending his answer. Settle that at the shrine before you report.</p>
<<elseif $chapelWorkQuest.state is "letter">><p>You have the contact's sealed reply. The keeper is ready to hear your account.</p><div>[[Give your report|ChapelTrialReport]]</div>
<<elseif !_keeper>><p>No one with authority to hire you is free to speak at the moment.</p>
<<else>>
<p>You wait until <<print setup.npcEventMentionHtml(_keeper, "the chapel keeper")>> has finished binding a jar of salve in cloth, then ask whether the chapel has paid work. The answer is not immediate. Their gaze moves over your hands, your boots, and finally your face, measuring patience more than strength.</p>
<<print setup.npcEventDialogueHtml(_keeper, "Sweeping floors is easy. Being trusted beyond these walls is not. A sealed parcel must reach someone sheltering at the old wayside shrine. Take it unopened, place it in the right hands, and come back with a clear account. Do that, and I will know what sort of help you are.", "The chapel keeper")>>
<p>The parcel is small enough for one hand, wrapped in waxed cloth and tied with chapel thread. Whatever it contains is meant to survive rain, distance, and curiosity.</p>
<div class="npc-activity-choice-list"><div><<link "Accept the delivery">><<set _start = setup.chapelQuestStart()>><<if _start.success>><<goto "ChapelWorkIntro">><<else>><<replace ".chapel-start-message">><p><<= _start.text >></p><</replace>><</if>><</link>></div><div>[[Not yet|Chapel]]</div></div>
<div class="chapel-start-message"></div>
<</if>>
<div class="npc-return-link">[[Return to the chapel|Chapel]]</div></div><</nobr>><<nobr>><<run setup.ensureChapelWorkSystem()>><<set _recipient = setup.chapelQuestRecipient()>><div class="npc-activity-panel farm-work-event-panel">
<<if !setup.chapelQuestCanDeliver() or !_recipient>><p>There is no sealed parcel left to deliver here.</p>
<<else>>
<p>You find <<print setup.npcEventMentionHtml(_recipient, "the chapel contact")>> in the driest corner of the ruined shrine, one boot removed and a strip of linen wound around an ankle. A bow and travel pack rest within reach. They study the chapel thread still looped around the parcel in your hand.</p>
<<print setup.npcEventDialogueHtml(_recipient, "So they sent someone after all. The salve is mine. The folded paper stays beneath the cloth until I have something worth answering. Is the wrapping sound?", "The chapel contact")>>
<p>The parcel survived the forest. You can place it directly in their hands, inspect it with them, or help with the injured ankle before leaving. You still owe the chapel an accurate account.</p>
<div class="npc-activity-choice-list"><div><<link "Hand over the sealed parcel" "ChapelTrialDeliveryResult">><<set $chapelWorkDeliveryResult = setup.chapelQuestDeliver("plain")>><</link>></div>
<<if setup.playerAttributeMeets("intelligence", 8)>><div><<link "[Intelligence] Inspect the parcel together" "ChapelTrialDeliveryResult">><<set $chapelWorkDeliveryResult = setup.chapelQuestDeliver("inspect")>><</link>></div><</if>>
<<if setup.playerAttributeMeets("fitness", 8)>><div><<link "[Fitness] Help tend the ankle before leaving" "ChapelTrialDeliveryResult">><<set $chapelWorkDeliveryResult = setup.chapelQuestDeliver("care")>><</link>></div><</if>></div>
<</if>><div class="npc-return-link">[[Return to the shrine|Ruined Wayside Shrine]]</div></div><</nobr>><<nobr>><<set _report = setup.chapelQuestComplete()>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">A place among the working hands</div>
<<if !_report.success>><p><<= _report.text >></p>
<<else>><<set _keeper = _report.employer>>
<p>You place the contact's sealed reply beside the returned chapel thread. <<print setup.npcEventMentionHtml(_keeper, "The chapel keeper")>> checks the seal, reads the brief account, and asks what the errand cost you. You answer plainly.</p>
<<print setup.npcEventDialogueHtml(_keeper, "You delivered the medicine, settled the matter at the shrine, and brought back a reply I can trust. Come during the working day and there will be honest tasks for honest pay.", "The chapel keeper")>>
<p>A small stack of five coins is placed beside the returned thread. The payment is modest, but the right to choose chapel work remains after the coins are spent.</p>
<p class="farm-work-gain-line"><b id="Goldgain">+5 Gold</b> <b>Chapel employment unlocked</b></p><p>Your journal has been updated.</p>
<</if>><div class="npc-return-link">[[Continue|Chapel]]</div></div><</nobr>><<nobr>><<run setup.ensureChapelWorkSystem()>><div class="npc-activity-panel"><div class="npc-interact-name">Chapel work</div>
<p>The chapel's labor changes with the trust placed in you. New hands keep the building clean and supplied. Reliable helpers carry aid into the village. Skilled readers are allowed near private correspondence and permanent records.</p>
<p class="cooking-note">Chapel service: <b><<= setup.chapelWorkSkill()>></b></p>
<<print setup.playerWorkNeedWarningHtml(120)>>
<div class="farm-work-actions">
<<set _chores = setup.chapelWorkCanStart(setup.chapelWorkTiers.chores)>><<if _chores.ok>><div><<link "Chapel chores">><<set $lastChapelWorkResult = setup.chapelWorkStart("chores")>><<if $lastChapelWorkResult.success>><<goto $lastChapelWorkResult.passage>><<else>><<goto "ChapelWorkMenu">><</if>><</link>> <span class="farm-work-meta">1 hour, 3 gold,</span> <b id="Energy">-<<= setup.playerWorkEnergyCost(4, 60, false) >> Energy</b></div><<else>><div class="farm-work-locked">Chapel chores: <<= _chores.text >></div><</if>>
<<set _parish = setup.chapelWorkCanStart(setup.chapelWorkTiers.parish)>><<if _parish.ok>><div><<link "Parish service">><<set $lastChapelWorkResult = setup.chapelWorkStart("parish")>><<if $lastChapelWorkResult.success>><<goto $lastChapelWorkResult.passage>><<else>><<goto "ChapelWorkMenu">><</if>><</link>> <span class="farm-work-meta">1.5 hours, 6 gold,</span> <b id="Energy">-<<= setup.playerWorkEnergyCost(8, 90, false) >> Energy</b></div><<else>><div class="farm-work-locked">Parish service: <<= _parish.text >></div><</if>>
<<set _records = setup.chapelWorkCanStart(setup.chapelWorkTiers.records)>><<if _records.ok>><div><<link "Records and correspondence">><<set $lastChapelWorkResult = setup.chapelWorkStart("records")>><<if $lastChapelWorkResult.success>><<goto $lastChapelWorkResult.passage>><<else>><<goto "ChapelWorkMenu">><</if>><</link>> <span class="farm-work-meta">2 hours, 9 gold,</span> <b id="Energy">-<<= setup.playerWorkEnergyCost(10, 120, false) >> Energy</b></div><<else>><div class="farm-work-locked">Records and correspondence: <<= _records.text >></div><</if>>
</div><div class="npc-return-link">[[Return to the chapel|Chapel]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Dust beneath the pews</div><p>Morning light exposes what candlelight politely hides. You drag each bench aside, sweep grit from the flagstones, and scrape old wax from the places where nervous fingers have worried candles down to their holders.</p><p>An elderly visitor pauses at the aisle while you work. <span class="dialogue-line dialogue-male">"People think quiet rooms stay clean by holiness,"</span> he says. <span class="dialogue-line dialogue-male">"Mostly it is someone with a broom."</span> You finish the far row before moving the benches back into a straight line.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">A steady flame</div><p>You trim blackened wicks, melt broken candle ends into fresh cups, and move every open flame away from dry cloth. The work is slow enough to invite carelessness and delicate enough to punish it.</p><p>The chapel keeper tests one repaired candle with a taper. Its flame rises cleanly without smoking. <span class="dialogue-line">"A prayer can be untidy,"</span> they say, shielding the light with one palm. <span class="dialogue-line">"The fire beside it cannot."</span></p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">White cloth and cold water</div><p>The altar linens look light until they are soaked. You carry them to the wash basin, work soap through wax and old oil, then rinse each piece until the water runs clear.</p><p>Your hands redden in the cold. A younger helper reaches for the finished stack too early, and you stop them before dirty fingers undo an hour of work. Together you hang the cloth where smoke from the lamps cannot reach it.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Names tied to jars</div><p>The healer's shelf holds dried leaves that look dangerously alike. You sort them by scent, shape, and the faded marks tied around each neck, keeping feverfew far from stronger preparations meant only for measured doses.</p><p><span class="dialogue-line">"Never guess because two jars are nearly the same,"</span> the healer warns. <span class="dialogue-line">"Nearly is where harm lives."</span> You ask before placing the last bundle, and their approving nod is worth more than pretending certainty.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Bread without spectacle</div><p>A basket of coarse loaves draws a quiet line near the side door. Your task is to remember who has received one without turning hunger into a public interrogation.</p><p>One man circles back with his cap pulled lower. Instead of shaming him, you ask whether the second loaf is for someone unable to stand in line. His shoulders loosen. <span class="dialogue-line dialogue-male">"My sister has the fever,"</span> he admits. You wrap the extra bread and add her name to the healer's visit list.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Names beneath the moss</div><p>Rain has pushed soil away from several grave markers and left one wooden cross leaning toward the path. You carry a spade, straighten the marker, and pack gravel where the next storm would otherwise wash the earth hollow.</p><p>A widow watches from beneath the chapel eaves. When the cross stands firm, she touches two fingers to her lips and then to the weathered name. She offers no coin and you ask for none. The chapel keeper records the labor all the same.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">A bowl carried carefully</div><p>You carry broth and clean bandages to a cooper confined to bed with an infected cut. His workshop smells of shavings and stale sweat, and pride makes him insist he can change the dressing himself.</p><p><span class="dialogue-line dialogue-player">"Then hold the lamp while I do the part that needs two hands,"</span> you tell him. The compromise lets him keep some dignity without keeping the filthy cloth. By the time you leave, the wound is clean and the empty bowl is wrapped under your arm.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">A son's letter</div><p>A woman brings a folded letter whose seal has already been broken by impatient hands. She knows the marks belong to her son but cannot turn them into his voice. You read slowly, keeping your tone plain where the handwriting grows uncertain.</p><p>The letter contains no grand news: fair wages, sore feet, a roof that leaks, and a promise to return before winter. The woman's eyes close at the final line. <span class="dialogue-line dialogue-female">"Read that promise once more,"</span> she asks. You do, exactly as written, without improving it for comfort.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">Ink that must outlast memory</div><p>The old register has begun to split at its binding. You copy births, deaths, debts of grain, and small charitable payments onto fresh pages while the clerk checks every fifth line against the original.</p><p>A single wrong surname could attach a debt to the wrong household years from now. You sand each finished section, wait for the ink to settle, and read the names backward before moving on. The work is exhausting in a way no heavy basket manages to be.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">What the winter will require</div><p>The healer counts jars while you compare them to last winter's ledger. Willow bark is low, clean linen is lower, and three households have promised honey that has not yet arrived.</p><p>You mark what can be gathered, what must be bought, and what should be rationed before the first frost. <span class="dialogue-line">"Healing begins before anyone is sick,"</span> the healer says, tapping the shortage list. <span class="dialogue-line">"Usually with someone willing to count."</span></p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">A coin beneath the bench</div><p>Your broom strikes a silver coin beneath the rear pew. It is too large to have fallen from the chapel's small offering bowl and clean enough that its owner probably noticed the loss before reaching home.</p><p>No one is watching closely. You decide what to do before another pair of feet carries it elsewhere.</p><div class="npc-activity-choice-list"><div>[[Place it with the chapel keeper|ChapelLostCoinKeeper]]</div><<if setup.playerAttributeMeets("charisma", 6)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("charisma", "Ask quietly among the morning visitors")>><<link _attributeChoiceLabel "ChapelLostCoinAsk">><</link>></div><</if>><div>[[Keep it|ChapelLostCoinKeep]]</div></div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You set the coin on the keeper's desk and describe exactly where it lay. They wrap it in scrap cloth and write the location on the outside.</p><p><span class="dialogue-line">"An honest return needs enough detail to refuse a dishonest claim,"</span> they say. The lesson is practical, not ceremonial.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print setup.chapelWorkBonusHtml({ chapelwork: 0.18, charisma: 0.04 }, "Choice result")>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You ask who lost something without naming the object. Three people shake their heads; a fourth describes the stamped edge and the place she last opened her purse.</p><p>Her relief is immediate when you return it. <span class="dialogue-line dialogue-female">"That buys lamp oil for a month,"</span> she says. <span class="dialogue-line dialogue-female">"I thought carelessness had taken it from me."</span></p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print setup.chapelWorkBonusHtml({ chapelwork: 0.12, charisma: 0.1 }, "Choice result")>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You close your fingers around the coin and slip it away. The movement is small enough to vanish beneath the scrape of the broom.</p><p>Later, a woman searches under the benches with growing panic. You keep sweeping while she asks whether anyone has seen silver. The extra weight in your pocket feels much larger than a single coin.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print setup.chapelWorkBonusHtml({ gold: 1, chapelwork: -0.2 }, "Choice result")>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">One loaf short</div><p>The bread basket empties with one child still waiting. He tries to pretend he joined the line by mistake, but his attention follows every crumb as the cloth is folded over the empty wicker.</p><p>The pantry has food reserved for tomorrow, and your own purse could buy something warm today. Turning him away would preserve both plans exactly as written.</p><div class="npc-activity-choice-list"><div>[[Buy him a hot meal|ChapelHungryBuy]]</div><<if setup.playerAttributeMeets("intelligence", 7)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("intelligence", "Rework tomorrow's ration plan")>><<link _attributeChoiceLabel "ChapelHungryPantry">><</link>></div><</if>><div>[[Explain that the bread is gone|ChapelHungryRefuse]]</div></div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><<if $c.gold gte 3>><<set $c.gold -= 3>><p>You take the child to the market and buy a bowl of stew with your own coin. He eats too quickly until you tell him no one is waiting to steal it.</p><p>The chapel keeper hears what you did before you return. <span class="dialogue-line">"Mercy is easier with someone else's pantry,"</span> they say. <span class="dialogue-line">"You measured yours against his hunger. Remember both costs."</span></p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print setup.chapelWorkBonusHtml({ chapelwork: 0.25, charisma: 0.08 }, "Choice result")>><p class="farm-work-gain-line"><b id="Goldloss">-3 Gold</b></p><<else>><p>You reach for your purse and find too little to make the promise real. The child sees the answer before you speak.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><</if>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You take tomorrow's smallest loaf and record it honestly on the pantry slate. The child tears it in half, hides one piece inside his coat, and eats the other where he stands.</p><p><span class="dialogue-line dialogue-player">"For someone at home?"</span> you ask. He nods. The single loaf was already serving two hungers.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print setup.chapelWorkBonusHtml({ chapelwork: 0.18, intelligence: 0.04 }, "Choice result")>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You tell him the truth: today's bread is gone and tomorrow's has already been counted. He nods with an obedience that makes the answer feel worse, then leaves before anyone can reconsider.</p><p>The books remain correct. The chapel keeper does not condemn you, but adds the household to the next distribution list and asks you to remember that a well-kept record can still describe a failure.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print setup.chapelWorkBonusHtml({ intelligence: 0.05 }, "Choice result")>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">More than the errand</div><p>You deliver lamp oil to a widow who keeps finding reasons not to let you leave: a stiff shutter, a heavy wood basket, a kettle that needs lifting. None is urgent. The silence waiting after them might be.</p><p>Your remaining rounds are written on the slate back at the chapel. You choose what kind of help this visit needs.</p><div class="npc-activity-choice-list"><<if setup.playerAttributeMeets("charisma", 6)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("charisma", "Sit and listen for a while")>><<link _attributeChoiceLabel "ChapelWidowListen">><</link>></div><</if>><<if setup.playerAttributeMeets("strength", 6)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("strength", "Finish the physical chores quickly")>><<link _attributeChoiceLabel "ChapelWidowChores">><</link>></div><</if>><div>[[Leave for the remaining rounds|ChapelWidowLeave]]</div></div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You set the slate aside and sit near the hearth. Once the widow begins speaking, the small complaints fall away. She tells you which floorboard her husband always avoided, how badly he sang, and how quiet the house became when no one was left to annoy her.</p><p>You offer no clever answer. When you finally rise, the lamp is lit and the room feels inhabited again.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print setup.chapelWorkBonusHtml({ chapelwork: 0.22, charisma: 0.1 }, "Choice result")>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You mend the shutter pin, carry wood beside the hearth, and fill the kettle before she can invent a fourth task. The work gives her company without forcing either of you to name loneliness aloud.</p><p>At the door she presses two apples into your hands, payment too small to be wages and too deliberate to refuse.</p><<set $invApples = ($invApples || 0) + 2>><p class="farm-work-gain-line"><b>+2 Apples</b></p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print setup.chapelWorkBonusHtml({ chapelwork: 0.16, fitness: 0.06 }, "Choice result")>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You explain that three more households are waiting and place the lamp oil safely by the hearth. The widow nods, embarrassed by needs she never stated plainly.</p><p>You finish every remaining round on time. Back at the chapel, the keeper listens to your account and marks a longer visit beside the widow's name for tomorrow.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print setup.chapelWorkBonusHtml({ chapelwork: 0.1, intelligence: 0.06 }, "Choice result")>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><div class="npc-interact-name">A private petition in the wrong bundle</div><p>A folded petition slips from the public accounts. The outer line names a household you recognize, but the first sentence concerns an illness and a debt that were never meant for the clerk's open desk.</p><p>The chapel keeper is across the room. You can restore the privacy quietly, report the filing mistake, or read enough to decide whether the request is urgent.</p><div class="npc-activity-choice-list"><div>[[Return it unread to the private box|ChapelPetitionPrivate]]</div><<if setup.playerAttributeMeets("intelligence", 7)>><div><<set _attributeChoiceLabel = setup.playerAttributeChoiceLabel("intelligence", "Trace the filing mistake")>><<link _attributeChoiceLabel "ChapelPetitionReport">><</link>></div><</if>><div>[[Read further before deciding|ChapelPetitionRead]]</div></div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You recognize the private seal, refold the page without opening it farther, and place it in the locked petition box. No one else sees the name.</p><p>When you mention the loose page later without identifying the household, the keeper checks the bindings and thanks you for protecting what was not yours to know.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print setup.chapelWorkBonusHtml({ chapelwork: 0.22, literacy: 0.06 }, "Choice result")>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You carry the page directly to the keeper with the writing turned inward. Together you discover that damp loosened several folded sheets from their cords.</p><p>The remaining records are moved before more private petitions can slip into public bundles. One careful interruption prevents a week of quiet damage.</p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print setup.chapelWorkBonusHtml({ chapelwork: 0.18, intelligence: 0.08 }, "Choice result")>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p>You read far enough to learn that the debt belongs to someone you know and the illness is more intimate than the village suspects. The request is not urgent. It is merely private.</p><p>You return the letter to the correct box, but cannot return the knowledge to the page. The keeper notices your unsettled expression and understands more than you say.</p><p><span class="dialogue-line">"Literacy gives access,"</span> they say quietly. <span class="dialogue-line">"Character decides whether access becomes trespass."</span></p><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print setup.chapelWorkBonusHtml({ literacy: 0.08, chapelwork: -0.12 }, "Choice result")>><div class="farm-trial-result-link">[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><<set _data = setup.houseGuestStayData()>>
<<if !_data>><div class="house-visit-shell"><p>The question goes unanswered.</p><div class="house-return-link">[[Return to the visit|House Visit Interior]]</div></div>
<<else>><<set _stay = _data.stay>><<set _npc = _data.npc>><<set _name = setup.npcDisplayName(_npc)>>
<div class="house-visit-shell"><div class="house-address-heading">A bed for the night</div>
<p>You wait for a quiet point in the conversation, then ask whether you might remain until morning. <<= _name >> considers where you could sleep without taking someone else's place.</p>
<<if _stay.outcome is "refused">><p>The strain between you makes the answer quick. <span class="dialogue-line">"Not while things stand as they do. I cannot have you under this roof all night."</span></p><div class="house-visit-choice">[[Continue the visit|House Visit Interior]]</div>
<<elseif _stay.sharedSpace>>
<p>This is a shared home. Your host can ask about a blanket by the hearth, but cannot promise someone else's sleeping place alone.</p>
<<if _stay.householdRefused>><p>Their partner is not comfortable with an overnight guest after this evening. Your host does not override that answer. You will need another place to sleep.</p>
<<elseif _stay.householdConsent>><p>The others agree to a place by the hearth. <span class="dialogue-line">"We will leave a blanket out for you. Stay until morning."</span></p><<if _stay.helpAmount and !_stay.helped>><p>Your host mentions a tight week and asks whether you can spare <<= _stay.helpAmount >> gold toward the household. The blanket is yours either way.</p><<if $c.gold gte _stay.helpAmount>><<set _helpLabel = "Offer " + _stay.helpAmount + " gold">><div class="house-visit-choice"><<link _helpLabel "House Guest Request">><<run setup.houseGuestOfferHelp()>><</link>></div><</if>><</if>><div class="house-visit-choice">[[Settle in for the night|House Guest Sleep]]</div>
<<elseif setup.householdContext(_data.house, _npc).others.length>><div class="house-visit-choice"><<link "Ask the household together" "House Guest Request">><<run setup.houseGuestApproveHousehold()>><</link>></div>
<<else>><p>Your host would rather wait until the other residents can agree. They do not offer someone else's sleeping space behind their back.</p><</if>>
<div class="house-visit-choice">[[Continue the visit|House Visit Interior]]</div>
<<elseif _stay.outcome is "free">>
<<if setup.npcRelationshipRank(setup.npcRelationshipStatus(_npc)) gte 7>><p>Their answer is immediate. <span class="dialogue-line">"You never need to pay me for a place beside me. Come in and rest."</span></p>
<<elseif setup.npcRelationshipRank(setup.npcRelationshipStatus(_npc)) gte 4>><p>They look relieved that you asked. <span class="dialogue-line">"I was hoping you might stay. No coin, no bargain. Just stay."</span></p>
<<elseif setup.npcRelationshipRank(setup.npcRelationshipStatus(_npc)) gte 2>><p>They recognize the request as one a friend can make. <span class="dialogue-line">"Stay. I would rather know you are warm than wonder where you spent the night."</span></p>
<<elseif setup.npcTraitIncludes(_npc, "generous")>><p><span class="dialogue-line">"There is a spare place, and I can offer it for tonight."</span> They set out water and bedding without asking for payment.</p>
<<else>><p>After a pause, they nod. <span class="dialogue-line">"One night is all right. We can talk in the morning."</span></p><</if>>
<<if _stay.helpAmount and !_stay.helped>><p>They admit money is tight and ask whether you could spare <<= _stay.helpAmount >> gold. They make clear the bed does not depend on it.</p><<if $c.gold gte _stay.helpAmount>><<set _helpLabel = "Offer " + _stay.helpAmount + " gold">><div class="house-visit-choice"><<link _helpLabel "House Guest Request">><<run setup.houseGuestOfferHelp()>><</link>></div><</if>><<elseif _stay.helped>><p><span class="dialogue-line">"Thank you. I meant it about the bed either way."</span></p><</if>>
<div class="house-visit-choice-list"><div class="house-visit-choice">[[Accept the bed|House Guest Sleep]]</div><div class="house-visit-choice">[[Decline and continue the visit|House Visit Interior]]</div></div>
<<elseif _stay.outcome is "money">>
<<if _stay.settled>>
<p>The price is settled. Your host leaves the bedding ready for you.</p>
<div class="house-visit-choice">[[Settle in for the night|House Guest Sleep]]</div>
<<else>>
<p>You are not close enough for them to offer a bed freely. <span class="dialogue-line">"I can make room for <<= _stay.cost >> gold. That covers the extra fire and bedding."</span></p>
<div class="house-visit-choice-list"><<if $c.gold gte _stay.cost>><<set _payLabel = "Pay " + _stay.cost + " gold">><div class="house-visit-choice"><<link _payLabel "House Guest Sleep">><<run setup.houseGuestPay()>><</link>></div><<else>><div class="player-choice-status">You do not have enough gold.</div><</if>><div class="house-visit-choice">[[Refuse the price|House Visit Interior]]</div></div>
<</if>>
<<else>><<set _ready = setup.houseGuestCanAcceptFavor(_stay)>>
<p>They state their condition before you settle in. <span class="dialogue-line">"I will offer the bed if we share <<= _stay.favor.label >> first. You can say no and leave the matter there."</span></p><p>The condition is theirs, not a debt you have already incurred. You can refuse without entering the encounter.</p>
<div class="house-visit-choice-list"><<if _ready.ok>><div class="house-visit-choice"><<link "Agree to the private bargain">><<run setup.houseGuestStartFavor("upfront")>><<goto "NPCEncounter">><</link>></div><<else>><div class="player-choice-status"><<= _ready.reason >></div><</if>><div class="house-visit-choice">[[Refuse and continue the visit|House Visit Interior]]</div></div>
<</if>></div><</if>><</nobr>><<nobr>><<set _data = setup.houseGuestStayData()>>
<<if !_data or !_data.stay.approved>><div class="house-visit-shell"><p>No invitation to sleep here remains.</p><div class="house-return-link">[[Return to the visit|House Visit Interior]]</div></div>
<<else>><div class="house-visit-shell"><div class="house-address-heading">Settling in for the night</div><p><<= setup.householdSleepText(_data) >></p><p>You loosen your clothes enough to rest and listen as the house settles around you.</p><div class="house-visit-choice-list"><<if setup.houseGuestOptionalOfferReady(_data)>><p>Your host hesitates near the bedding. <span class="dialogue-line">"If you want to be closer, we could share <<= _data.stay.optionalFavor.label >>. You can sleep here just the same if you would rather rest."</span></p><div class="house-visit-choice"><<link "Accept their private invitation">><<if setup.houseGuestStartIntimacy("optional")>><<goto "NPCEncounter">><<else>><<goto "House Guest Sleep">><</if>><</link>></div><</if>><<if !_data.stay.sharedSpace and setup.playerCanMasturbateAtBed("the offered bed")>><div class="house-visit-choice"><<link "Masturbate before sleeping" "Masturbation">><<set $masturbationReturn = "House Guest Sleep">><<set $lastMasturbationResult = setup.playerMasturbateAtBed()>><</link>></div><</if>><div class="house-visit-choice"><<link "Sleep until morning">><<set _next = setup.houseGuestBeginSleep()>><<goto _next>><</link>></div><div class="house-visit-choice">[[Change your mind|House Visit Interior]]</div></div></div><</if>><</nobr>><<nobr>><<goto "House Guest Sleep">>
<</nobr>><<nobr>><<set _data = setup.houseGuestStayData()>>
<<if !_data>><div class="house-visit-shell"><p>The arrangement has fallen apart.</p><div class="house-return-link">[[Return outside|House Exterior]]</div></div>
<<elseif _data.stay.settled>>
<div class="house-visit-shell"><div class="house-address-heading">The bargain kept</div><p>The arrangement is settled on the terms you both named earlier. Your host leaves the blanket and water within reach.</p><p><span class="dialogue-line">"The bed is yours until morning."</span></p><div class="house-visit-choice-list"><div class="house-visit-choice">[[Settle into bed|House Guest Sleep]]</div></div></div>
<<else>><<run setup.houseGuestKickOut()>><<goto "House Guest Kicked Out">><</if>><</nobr>><<nobr>><<set _data = setup.houseGuestStayData()>>
<div class="house-visit-shell"><div class="house-address-heading">Morning beneath another roof</div>
<<if _data and _data.stay.slept>><p>Morning light finds you beneath a roof instead of out on the cold street. The offered place was enough to let you rest.</p><<if _data.stay.wakeSecret>><p>The house keeps its ordinary morning sounds. Whatever happened in the dark, neither of you speaks of it in front of the other residents.</p><<elseif _data.stay.sharedSpace>><p>The household begins stirring around the hearth. Your host folds the spare blanket and gives you room to gather your things.</p><<else>><p>Your host is already awake. <span class="dialogue-line">"The village will be moving soon. Did you sleep all right?"</span></p><</if>><p><<print $sleepMessage>></p><<else>><p>The promised night never truly begins.</p><</if>>
<div class="house-return-link">[[Step outside|House Exterior]]</div></div><</nobr>><<nobr>><<set _data = setup.houseGuestStayData()>>
<div class="house-visit-shell"><div class="house-address-heading">Put out into the night</div>
<<if _data>><p>The private bargain ends without the act you discussed. Your host does not press you to continue, but withdraws the overnight offer. You gather your things and step back into the street.</p><<else>><p>The door closes behind you, leaving you outside without a bed.</p><</if>>
<div class="house-return-link">[[Step away from the house|House Exterior]]</div></div><</nobr>><<nobr>><<set _data = setup.houseGuestStayData()>>
<<if !_data or _data.stay.slept or !_data.stay.wakeSecret>><<goto "House Guest Sleep Result">>
<<else>><div class="house-visit-shell"><div class="house-address-heading">A whisper after midnight</div>
<p>A quiet touch wakes you. Your host waits until you are fully aware, then glances toward the room where their partner sleeps. They ask you to follow them beyond the sleeping area, where a low voice will not carry as easily.</p>
<<if _data.stay.wakeOfferId is "vaginal">><p><span class="dialogue-line">"I know what this risks. I want to have sex with you tonight, if you want it too. Say no and I will let you sleep."</span></p>
<<else>><p><span class="dialogue-line">"My partner is asleep. I want to be with you tonight, somewhere they will not see us. Only if you want the same."</span></p><</if>>
<div class="house-visit-choice-list"><<if _data.stay.wakeOfferId is "vaginal">><div class="house-visit-choice"><<link "Follow them (vaginal sex)">><<if setup.houseGuestStartIntimacy("wake")>><<goto "NPCEncounter">><<else>><<run setup.houseGuestSleepNow()>><<goto "House Guest Sleep Result">><</if>><</link>></div>
<<else>><div class="house-visit-choice"><<link "Follow her (intimate rubbing)">><<if setup.houseGuestStartIntimacy("wake")>><<goto "NPCEncounter">><<else>><<run setup.houseGuestSleepNow()>><<goto "House Guest Sleep Result">><</if>><</link>></div><</if>>
<div class="house-visit-choice"><<link "Decline and go back to sleep">><<run setup.houseGuestSleepNow()>><<goto "House Guest Sleep Result">><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseGuestStayData()>>
<<if !_data>><div class="house-visit-shell"><p>The visit has ended.</p><div class="house-return-link">[[Step outside|House Exterior]]</div></div>
<<elseif _data.stay.wakeSecret and _data.stay.wakeSeen>><<run setup.houseGuestSleepNow()>><<goto "House Guest Sleep Result">>
<<else>><div class="house-visit-shell"><p>Your host leaves the blanket where they promised it. Whether the moment went further or ended early, staying the night was never conditional on it.</p><div class="house-visit-choice">[[Settle in for the night|House Guest Sleep]]</div></div><</if>><</nobr>><<nobr>><<set _result = $lastMasturbationResult>>
<div class="sleep-panel masturbation-panel"><div class="npc-interact-name">A private release</div>
<<if !_result>><p>The urge passes before you act on it.</p><div class="sleep-actions">[[Return to bed|Masturbation Leave]]</div>
<<else>><<if _result.completed or _result.gain !== undefined>><<include "Masturbation Finish Body">>
<<else>><<if _result.mediaPath>><div class="masturbation-media"><img @src="_result.mediaPath" alt=""></div><</if>>
<p>You wait until the sounds around the bed settle. The restlessness that followed you here has not gone away, and for once there is enough privacy to answer it.</p>
<<if _result.first>><p>You hesitate over the unfamiliar freedom of choosing this for yourself, then let curiosity outrun the nerves.</p><<else>><p>You know how to give yourself this time without having to explain the choice to anyone.</p><</if>>
<<if _result.arousal >= 85>><p>The need has been building for hours; even a moment of attention makes it difficult to keep still.</p><</if>>
<div class="sleep-actions masturbation-choices">[[Take your time|Masturbation Slow]] [[Seek quick relief|Masturbation Quick]] [[Leave it for tonight|Masturbation Leave]]</div>
<</if>><</if>></div><</nobr>><<nobr>><<set _result = setup.playerFinishMasturbation("slow")>><div class="sleep-panel masturbation-panel"><div class="npc-interact-name">A private release</div><<include "Masturbation Finish Body">></div><</nobr>><<nobr>><<set _result = setup.playerFinishMasturbation("quick")>><div class="sleep-panel masturbation-panel"><div class="npc-interact-name">A private release</div><<include "Masturbation Finish Body">></div><</nobr>><<nobr>><<set _result = $lastMasturbationResult>>
<<if _result and (_result.completed or _result.gain !== undefined)>><<if _result.mediaPath>><div class="masturbation-media"><img @src="_result.mediaPath" alt=""></div><</if>>
<<if _result.pace == "slow">><p>You let the feeling build at its own pace, pausing to listen to the quiet around you before returning to it.</p><<else>><p>You follow the urgency instead of drawing it out, keeping your attention on the relief you came here for.</p><</if>>
<p>When the tension finally breaks, you lie still until your breathing steadies. You straighten the bedding and settle back, able to think about sleep again.</p>
<<if _result.first>><p>The surprise of choosing this for yourself lingers even after the restlessness is gone.</p><</if>>
<p><span id="Arousalloss">Arousal cleared</span> <span id="Lustgain">Carnality +<<= _result.gain >></span><<if _result.first>> <span class="npc-encounter-aftermath-first">First recorded: Masturbation.</span><</if>></p>
<<else>><p>The moment passes without a result.</p><</if>><div class="sleep-actions masturbation-choices">[[Return to bed|Masturbation Leave]]</div><</nobr>><<set $lastMasturbationResult = null>><<goto $masturbationReturn>><<nobr>><<set _quest = setup.ensureLiteracyQuest()>><<set _tutor = setup.literacyQuestTutor()>><<if _tutor>><<run setup.literacyTutorOpen(_tutor)>><<set _terms = setup.literacyTutorTerms(_tutor)>><<set _status = setup.literacyTutorLessonStatus()>><</if>>
<div class="npc-activity-panel farm-work-event-panel literacy-tutor-shell">
<<if !_tutor>><div class="literacy-heading">No teacher found</div><p>The person you meant to speak with cannot be found.</p><div class="npc-return-link">[[Return|Ambercross Center]]</div>
<<else>>
<div class="literacy-heading">Lessons with <<= setup.npcDisplayName(_tutor) >></div>
<div class="literacy-level">Literacy: <b><<= setup.playerLiteracyDisplay() >></b></div>
<<if $readingLessonMessage>><div class="literacy-message"><<= $readingLessonMessage >></div><<set $readingLessonMessage = "">><</if>>
<<if !_quest.enrolled>>
<div class="literacy-enrollment-text"><<print setup.literacyTutorEnrollmentText(_tutor)>></div>
<div class="literacy-choice-list">
<<if _terms.kind is "service">><div class="literacy-choice-row"><<link "Do the work they asked for">><<set _result = setup.literacyTutorEnroll("service")>><<set $readingLessonMessage = _result.text>><<goto "LiteracyTutor">><</link>></div><</if>>
<<if _terms.kind is "private">><div class="literacy-choice-row"><<link "Accept their choice of private material">><<set _result = setup.literacyTutorEnroll("private")>><<set $readingLessonMessage = _result.text>><<goto "LiteracyTutor">><</link>></div><</if>>
<div class="literacy-choice-row"><<set _enrollLabel = "Pay the " + _terms.enrollmentFee + " gold enrollment fee">><<link _enrollLabel>><<set _result = setup.literacyTutorEnroll("gold")>><<set $readingLessonMessage = _result.text>><<goto "LiteracyTutor">><</link>></div>
<<if _terms.intimate>><<set _ready = setup.literacyTutorFavorReadiness(_tutor)>><<if _ready.ok>><div class="literacy-choice-row literacy-choice-private"><<link "Offer a sexual favor instead of the fee">><<run setup.literacyTutorStartFavor("enrollment")>><<goto "NPCEncounter">><</link>></div><</if>><</if>>
</div>
<<else>>
<<if _quest.state is "completed">><p>The original course is complete, but <<= setup.npcDisplayName(_tutor) >> is still willing to set harder texts before you. Further lessons continue to improve your literacy.</p>
<<elseif _quest.advancedStart>><p>Your tutor chooses ledgers, petitions, and disputed accounts: writing that can be read correctly and still misunderstood. Each lesson is less about sounding out words than noticing what their writer hopes you will overlook.</p>
<<else>><p>A slate, several scraps of writing, and a stub of charcoal wait on the table. Your tutor insists that each lesson will use words people in Ambercross actually rely upon, not pages copied merely because they look respectable.</p><</if>>
<<if !_status.ok>><div class="literacy-message"><<= _status.text >></div>
<<else>><div class="literacy-choice-list">
<<if _quest.lessonCreditDay is setup.npcCurrentDay()>><div class="literacy-choice-row"><<link "Begin the lesson already paid for">><<set _begin = setup.literacyBeginLesson("credit")>><<if _begin.ok>><<goto "ReadingLesson">><<else>><<set $readingLessonMessage = _begin.text>><<goto "LiteracyTutor">><</if>><</link>></div>
<<else>><div class="literacy-choice-row"><<set _lessonPayLabel = "Pay " + _terms.lessonCost + " gold for today's lesson">><<link _lessonPayLabel>><<set _begin = setup.literacyBeginLesson("gold")>><<if _begin.ok>><<goto "ReadingLesson">><<else>><<set $readingLessonMessage = _begin.text>><<goto "LiteracyTutor">><</if>><</link>></div>
<<if _terms.intimate>><<set _ready = setup.literacyTutorFavorReadiness(_tutor)>><<if _ready.ok>><div class="literacy-choice-row literacy-choice-private"><<link "Offer a sexual favor for today's lesson">><<run setup.literacyTutorStartFavor("lesson")>><<goto "NPCEncounter">><</link>></div><</if>><</if>>
<</if>></div><</if>>
<<set _bookStock = setup.studyBookTutorStock(_tutor)>>
<<if _bookStock.length>><details class="cooking-entry literacy-book-stock"><summary>Books they are willing to sell</summary><div class="cooking-body">
<<for _book range _bookStock>><<capture _book>><div class="cooking-recipe-row"><div class="cooking-recipe-info"><div class="cooking-recipe-title"><<= _book.label >></div><div class="cooking-recipe-meta"><<= _book.cost >> gold | Skill book</div><div class="cooking-note"><<= _book.note >></div></div><div class="cheat-actions"><<link "Buy">><<set $readingLessonMessage = setup.buyStudyBookFromTutor(_book.id)>><<goto "LiteracyTutor">><</link>></div></div><</capture>><</for>>
</div></details><</if>>
<</if>>
<div class="npc-return-link">[[Return to the conversation|NPCInteract]]</div>
<</if>>
</div><</nobr>><<nobr>><<set _result = $readingLessonResult>>
<div class="npc-activity-panel farm-work-event-panel literacy-tutor-shell"><div class="literacy-heading">The page yields</div>
<<if !_result or !_result.ok>><p>The exercise ends before anything useful can be learned.</p>
<<else>><p><<= _result.text >></p><p class="literacy-gains"><<print setup.literacyLessonGainHtml(_result)>></p>
<<if _result.bookAward>><p>Your tutor closes the lesson by pressing <i><<= _result.bookAward >></i> into your hands. <span class="dialogue-line">"Keep it. You clearly found the material memorable."</span> The book has been added to your inventory and can be studied at a table.</p><</if>>
<<if _result.completed>><p>Your tutor closes the book and asks you to read one final line without help. You do. <span class="dialogue-line">"That is enough for the course,"</span> they say. <span class="dialogue-line">"Not enough to know everything. Enough to stop every page from deciding who you are allowed to be."</span></p><</if>><</if>>
<div class="npc-return-link"><<link "Return to your tutor" "LiteracyTutor">><<set $readingLessonResult = null>><</link>></div></div><</nobr>><<nobr>><<if _event.choiceError>><p class="player-choice-status"><<print _event.choiceError>></p><</if>><<print _event.rewardHtml || "">><<if _event.finished>><<print '<div class="npc-return-link"><a href="javascript:void(0)" class="location-event-finish" data-token="' + setup.npcEscapeHtml(_event.token) + '">Continue</a></div>'>><</if>><</nobr>><<nobr>><<set _event = $locationEventView>><<set _actor = setup.locationEventActor()>><<set _other = setup.locationEventActor(1)>>
<<if !_event or _event.id isnot "damaged_stall">><p>The situation has already been dealt with.</p>
<<else>>
<<if _event.stage is "opening">>
<p>A gust catches the canvas above a small stall and pulls one corner upward. <<npcMention _actor>> reaches for the tie, but the supporting pole leans toward a basket of loaves and several jars. A customer steps back just as the first jar begins to slide.</p>
<<npcSay _actor "Mind the pole! If somebody holds that side, I can get the goods clear. Do not put yourself underneath it.">>
<p>The loose corner needs attention now. You can brace the frame, move the goods before it falls, direct the people already beside it, or warn everyone clear and help make space for the owner to lower it.</p>
<<locationEventChoice "brace" "Try to brace the frame while the owner clears the goods (-2 Energy)">>
<<locationEventChoice "goods" "Move the basket and jars clear before the pole falls (-1 Energy)">>
<<locationEventChoice "direct" "Direct the nearby customers to the canvas and goods">>
<<locationEventChoice "clear" "Warn everyone clear and help the owner lower the canvas">>
<<elseif _event.stage is "assessment">>
<<switch _event.outcome>>
<<case "collapsed">>
<p>You catch the frame, but the wind pulls harder than your grip can hold. You step clear as the pole drops. The owner saves the basket, but a jar cracks against the boards before the canvas settles.</p>
<<npcSay _actor "Leave the pole down. Nobody was hit, and that matters more than one jar. We need to make it safe before it goes up again.">>
<<case "braced">>
<p>You hold the frame long enough for the owner to move the jars and release the opposite tie. The canvas comes down without burying the goods beneath it.</p>
<<npcSay _actor "Good. Let it rest on the boards. I would rather lose a few customers than have it fall on one.">>
<<case "goods_saved">>
<p>You move the basket first, then the jars, keeping clear of the leaning pole. The owner lowers the canvas onto an empty patch of boards instead of a table full of goods.</p>
<<npcSay _actor "That would have been the whole morning's stock under the canvas. Thank you for being quick.">>
<<case "directed">>
<p>You have one person move the jars and another release the far tie while the owner controls the pole. The canvas folds onto the cleared table instead of dragging the frame over.</p>
<<npcSay _actor "There. Four people doing different things is better than four people pulling the same rope.">>
<<case "cleared">>
<p>Your warning moves the customers clear of the falling corner. The owner releases the remaining ties and lets the canvas settle slowly over the table. Nothing hits anyone, though trade will stop until the frame is secure.</p>
<<npcSay _actor "I can work around a lowered canvas. I cannot work around somebody getting hurt beneath it.">>
<</switch>>
<p>The frayed tie has failed where it rubbed against a sharp notch. The owner has spare cord, but tying it onto the same damaged edge may not hold. A nearby seller has a sound fastening for three coins.</p>
<<locationEventChoice "repair" "Pad the sharp notch and secure the cord correctly (-1 Energy)">>
<<locationEventChoice "tie" "Try to retie the cord without replacing the fastening (-1 Energy)">>
<<locationEventChoice "materials" "Buy a sound fastening for the owner (-3 Gold)">>
<<locationEventChoice "guard" "Watch the goods while the owner obtains a safe replacement">>
<<elseif _event.stage is "reward">>
<<switch _event.outcome>>
<<case "repaired">>
<p>You smooth the pressure on the cord with folded canvas and move the tie away from the notch. The owner raises the pole a little, tests it twice, then brings the frame upright. The knot no longer bears against the sharp edge.</p>
<<case "tied">>
<p>You work the spare cord around a sound part of the frame and tighten it evenly. The owner tests the fastening before raising the pole, then checks again when the canvas catches the breeze. This time the tie holds.</p>
<<case "supplied">>
<p>You buy the sound fastening and hand it to the owner. It replaces the damaged tie instead of disguising it. The canvas is raised only after the new fitting has been tested.</p>
<</switch>>
<<npcSay _actor "I can open the table again. Take a loaf, or two coins for helping me put it right. I know you gave up part of your day.">>
<p>The reward is for finishing the repair. Any time, effort, or money you already spent is still spent; accepting the coins is not a refund of every cost.</p>
<<locationEventChoice "bread" "Accept a loaf of bread">>
<<locationEventChoice "gold" "Accept two coins">>
<<locationEventChoice "decline" "Leave the reward with the stall owner">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "tie_failed">>
<p>You tighten the spare cord, but the pull remains uneven. The owner tests the pole before lifting it fully. One side slips, and the frame has to be lowered again.</p>
<<npcSay _actor "No. We are not opening it on a knot that shifts like that. Leave it down while I get a proper fitting.">>
<p>The test prevents another collapse, but your repair has not restored the stall. No reward is offered for the failed fastening.</p>
<<case "guarded">>
<p>You stay beside the lowered frame and keep customers from stepping over the goods. The owner returns with a replacement fastening and puts the stall back in order.</p>
<<npcSay _actor "It helped to know I could leave the table without leaving everything unattended. Thank you.">>
<p>You receive no coins, but the owner knows you stayed for the less exciting part of the trouble.</p>
<<case "bread">>
<p>A loaf is wrapped and handed to you before the next customer is served. The canvas stays steady above the table, and the bread is yours to carry away.</p>
<<npcSay _actor "Here. Something useful for useful help.">>
<<case "paid">>
<p>The owner counts two coins into your hand, then returns the jars to the table. Customers approach cautiously at first, reassured when the next gust leaves the frame upright.</p>
<<npcSay _actor "Two, as offered. Thank you for seeing the repair through.">>
<<case "thanks">>
<p>You decline the loaf and coins. The owner puts them back with the other supplies, then gives the repaired corner one more glance.</p>
<<npcSay _actor "Then take my thanks. I will remember who stayed to help instead of only watching it fall.">>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><<set _event = $locationEventView>><<set _actor = setup.locationEventActor()>><<set _other = setup.locationEventActor(1)>>
<<if !_event or _event.id isnot "misplaced_delivery">><p>The situation has already been dealt with.</p>
<<else>>
<<if _event.stage is "opening">>
<p>Two tied parcels have been set on the same bench: one long and narrow, the other round. <<npcMention _actor>> reaches for the long parcel at the same moment as <<npcMention _other>>. Both stop before either has lifted it.</p>
<<npcSay _actor "Mine was wrapped in pale cloth. These both are. The carrier said to collect it here, but not which knot to look for.">>
<<npcSay _other "I was told there would be a blue thread at the tie. There is blue on both of them. I am not going home with somebody else's things.">>
<p>The parcels remain sealed. You can hear what each person expects, compare their small matching tags to the marks on the ties, or ask the nearby receiving keeper to witness the handover.</p>
<<locationEventChoice "listen" "Ask what each person expects inside the parcel">>
<<locationEventChoice "marks" "Compare the matching tags, knots, and colored threads">>
<<locationEventChoice "separate" "Have them put down the parcels and explain one at a time">>
<<locationEventChoice "witness" "Ask the receiving keeper to witness the parcel check">>
<<elseif _event.stage is "accounts">>
<p>The accounts become clearer once both parcels are left on the bench. The first person expects a bundle of narrow wooden pieces; the second expects a folded length of cloth. A blue thread marks the delivery route, not the recipient.</p>
<<npcSay _actor "The little tag has a cut across one corner. I thought that meant the wrapper was damaged, not that it matched anything.">>
<<npcSay _other "Mine has two round holes. If the tags match the ties, we should not have to open somebody else's parcel to find out.">>
<p>The shapes suggest an answer, but the tags offer a better check. You can compare them carefully, guess that the more insistent person should get the long parcel, or bring the keeper into the check.</p>
<<locationEventChoice "compare" "Compare both tags with the marks beside the parcel knots">>
<<locationEventChoice "guess" "Give the long parcel to the second person without checking">>
<<locationEventChoice "witness" "Have the receiving keeper check the tags with them">>
<<elseif _event.stage is "challenge">>
<p>You hand the long parcel toward <<npcMention _other>>, but <<npcMention _actor>> stops the exchange and holds the cut-corner tag beside its tie. The marks match. The two holes belong with the round parcel.</p>
<<npcSay _actor "That is the one I brought the tag for. You can see the mark beside the knot. Why would we ignore it now?">>
<p>The parcels are still sealed and within reach. You can acknowledge the mistake and correct it, or insist that your first decision should stand despite the matching marks.</p>
<<locationEventChoice "admit" "Admit the mistake and match the parcels properly">>
<<locationEventChoice "insist" "Insist on your first decision despite the evidence">>
<<elseif _event.stage is "settlement">>
<<if _event.outcome is "corrected">>
<p>You put the long parcel back on the bench and check both tags before trying again. The cut corner matches the long parcel; the two holes match the round one. Your first guess is corrected without opening either package.</p>
<<else>>
<p>You match the cut-corner tag to the long parcel and the two-hole tag to the round one. The blue thread is identical because both traveled with the same delivery. It was never a personal mark.</p>
<</if>>
<<npcSay _actor "That makes sense. I would rather wait for a proper check than discover the mistake after somebody has gone.">>
<p>You can witness each person taking the matching parcel and ensure that nothing is left behind, or return the tags and let them complete the exchange themselves.</p>
<<locationEventChoice "finish" "Witness the handover and make sure both parcels go to the right person">>
<<locationEventChoice "handover" "Return their tags and let them complete the handover">>
<<elseif _event.stage is "reward">>
<p>You remain until both parcels and tags are accounted for. <<npcMention _other>> checks the round package once more and nods; <<npcMention _actor>> puts the long bundle beneath an arm.</p>
<<npcSay _actor "You saved us a second journey and an argument at the wrong door. I can give you two coins for taking the time.">>
<p>The offer comes from the first recipient, not from a purse left in your care. Both deliveries have already been handed over correctly.</p>
<<locationEventChoice "accept" "Accept the two coins">>
<<locationEventChoice "decline" "Say a settled delivery is thanks enough">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "witnessed">>
<p>You ask the receiving keeper to compare the tags with both villagers watching. Each takes the matching parcel only after the marks have been agreed.</p>
<<npcSay _other "Good. Now nobody has to trust a guess, and neither package has been opened.">>
<p>You earn no payment, but both people saw you arrange a fair check instead of taking a side.</p>
<<case "insisted">>
<p>You defend your first assignment even after the tags have shown it wrong. Neither person agrees to leave with the wrong parcel. They ask the receiving keeper to take over and stop treating you as a useful witness.</p>
<<npcSay _actor "We asked for help sorting the delivery, not for a reason to ignore the marks on it.">>
<p>The keeper corrects the exchange. You receive no reward, and your insistence has cost both recipients confidence in you.</p>
<<case "handed_over">>
<p>You return the matching tags and explain the marks once more. Both villagers complete the exchange without opening the wrong parcel.</p>
<<npcSay _other "We can finish it now. Thank you for making the difference clear.">>
<<case "paid">>
<p>The first recipient gives you two coins before the parcels are carried away. The bench is left empty, with neither a disputed package nor an unpaid promise of thanks.</p>
<<npcSay _actor "Here. We are settled, and the delivery is finally settled too.">>
<<case "thanks">>
<p>You decline payment and wish them a less confusing journey home. The coins are put away, and both villagers leave carrying the parcels their tags identified.</p>
<<npcSay _actor "Then thank you. I will pay more attention to those marks next time.">>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><<set _event = $locationEventView>><<set _actor = setup.locationEventActor()>><<set _other = setup.locationEventActor(1)>>
<<if !_event or _event.id isnot "medicine_pouch">><p>The situation has already been dealt with.</p>
<<else>>
<<if _event.stage is "opening">>
<p><<npcMention _actor>> stops to check a basket, then checks it again with increasing concern. A wrapped medicine pouch was meant to be carried on from here. Several small bundles lie under a folded blanket, but the expected blue cord is nowhere in sight.</p>
<<npcSay _actor "It was with the other bundles when I set the basket down. I cannot carry on until I know whether it fell out or slipped beneath something. I was entrusted with it, not told to guess.">>
<p>The search can stay near the bench and the short approach to it. You can check the path, retrace it quickly, divide the search into clear steps, or help the carrier empty and repack the basket before looking farther away.</p>
<<locationEventChoice "search" "Search the nearby path and verge (-1 Energy)">>
<<locationEventChoice "retrace" "Retrace the short approach before the tracks are disturbed (-1 Energy)">>
<<locationEventChoice "method" "Plan a careful search, keeping the carrier and basket in sight">>
<<locationEventChoice "belongings" "Help the carrier unpack and check every layer of the basket">>
<<elseif _event.stage is "setback">>
<p>You search beyond the bench, but the footprints cross and the grass gives no clear sign of a dropped bundle. The time spent widening the search has not produced the missing pouch.</p>
<<npcSay _actor "We may be searching too far before we have checked what is still here. There is no point making the circle bigger without a reason.">>
<p>You can examine the disturbed grass beside the basket for a specific trail, or return to the folded blanket and help check the belongings properly. Neither approach requires you to buy a replacement for an unidentified item.</p>
<<locationEventChoice "tracks" "Examine the grass beside the basket for signs of a dropped bundle">>
<<locationEventChoice "belongings" "Return to the basket and check the folded blanket">>
<<elseif _event.stage is "found">>
<<if _event.outcome is "in_basket">>
<p>You help lift each layer out separately. The blanket's fold has caught the blue-cord pouch and a smaller spare bundle together. Both come free when the cloth is opened flat, explaining why a glance inside the basket missed them.</p>
<<else>>
<p>You find a fold of cloth caught beside the basket, where it slipped as the blanket was lifted. The blue-cord pouch and a smaller spare bundle have rolled into the same shallow hollow. You bring both back without opening either.</p>
<</if>>
<<npcSay _actor "There it is. But let me check the tag before I put it away again. The smaller bundle was packed for a different purpose.">>
<p>The medicine pouch has a matching tag and seal; the spare bundle does not. Finding both is not the same as checking which one was entrusted to the carrier. You can compare the marks, ask the carrier to verify them, or urge a hurried departure without checking.</p>
<<locationEventChoice "check" "Compare the matching tag and the intact seal before handing it back">>
<<locationEventChoice "verify" "Have the carrier identify the pouch and check its seal">>
<<locationEventChoice "rush" "Urge them to take the nearest bundle and leave without checking">>
<<elseif _event.stage is "reward">>
<p>The blue-cord pouch is identified by its matching tag and checked seal. The carrier puts it in a separate part of the basket where it cannot become tangled in the blanket again. Neither bundle has been opened or used.</p>
<<npcSay _actor "Thank you. I can finish carrying what I was asked to carry, rather than return with an excuse or the wrong bundle. Take three coins for the trouble, if you will.">>
<p>The search has ended here; you are not being asked to travel elsewhere or administer anything. You can accept the offered payment or leave the carrier with the money.</p>
<<locationEventChoice "accept" "Accept three coins for recovering and checking the pouch">>
<<locationEventChoice "decline" "Decline payment and wish them a safe onward journey">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "rushed">>
<p>You urge the carrier to grab the nearest bundle and move on. Instead, <<npcMention _actor>> stops and compares its tag with the one kept in the basket. The first bundle is the spare, not the entrusted pouch.</p>
<<npcSay _actor "No. I said I needed to be certain. Leaving with the wrong bundle would waste more time than checking it now.">>
<p>The carrier identifies the correct pouch without your help and packs both safely. Nothing is used or lost, but your impatience has made you less useful to someone already worried about getting the task right. No reward is offered.</p>
<<case "paid">>
<p>Three coins are counted into your hand. The carrier checks the basket fastening before leaving, with the verified pouch secured separately from the spare bundle.</p>
<<npcSay _actor "Here. You stayed until the missing thing was found and accounted for. That deserves something back.">>
<<case "thanks">>
<p>You decline the payment. The carrier puts the coins away, then thanks you again before lifting the repacked basket.</p>
<<npcSay _actor "Then I hope somebody takes the same care for you when you need it. Thank you for keeping a muddled search from becoming a worse mistake.">>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><<set _event = $locationEventView>><<set _actor = setup.locationEventActor()>>
<<if !_event or _event.id isnot "lost_purse">><p>The purse has already been dealt with.</p>
<<else>>
<<if _event.stage is "opening">>
<p>A small purse lies against the edge of a wheel rut, its red cord pressed into the mud. You lift it before another cart can pass over it. Four coins shift inside the leather.</p>
<p><<npcMention _actor>> is searching nearby, looking beneath a basket and then along the ground. The search is becoming hurried; nobody else has noticed what you are holding.</p>
<<npcSay _actor "Brown leather, red cord. I had it when I paid for the flour. Please, did anyone see it fall?">>
<<locationEventChoice "return" "Hold up the purse and call its owner over">>
<<locationEventChoice "identify" "Check the purse against the owner's description before returning it">>
<<locationEventChoice "hide" "Conceal it and see whether the owner notices">>
<<elseif _event.stage is "search">>
<p>You cover the red cord with your fingers and keep the purse close to your clothing. The owner turns toward you before you have decided what to do next.</p>
<<npcSay _actor "You were looking down here. Was there anything beside that wheel?">>
<p>You could still return it. Denying the find means answering face to face, with the purse in your hand; slipping away avoids that conversation but leaves the loss behind.</p>
<<locationEventChoice "confess" "Admit you found it and hand it back">>
<<locationEventChoice "lie" "Deny finding anything and keep the coins">>
<<locationEventChoice "leave" "Slip away with the purse without answering">>
<<elseif _event.stage is "offer">>
<<if _event.outcome is "identified">><p>You ask for a description before opening your hand. The color of the cord, a split seam, and the number of coins all match. The owner takes the purse with visible relief.</p>
<<elseif _event.outcome is "confessed">><p>You bring the purse out and return it before the moment becomes harder to explain. The owner counts the coins, then lets out a breath.</p>
<<else>><p>You call the owner over and place the purse in their hand. The red cord is checked first, then the coins. All four are still there.</p><</if>>
<<npcSay _actor "I thought I would have to leave half my shopping behind. I've a loaf in the basket if that would help you. Or let me give you something for stopping.">>
<p>The offer is sincere, but the money is clearly being counted carefully. You can accept something useful without pretending the thanks alone must be enough.</p>
<<locationEventChoice "thanks" "Say their thanks are enough">>
<<locationEventChoice "bread" "Accept the offered loaf">>
<<locationEventChoice "reward" "Ask for two coins as a finder's reward">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "thanks">><p>You shake your head and leave the owner with the shopping money intact. The purse is tied inside the basket this time, where a passing wheel cannot reach it.</p><<npcSay _actor "Then thank you. Not everyone would have given me the chance to keep shopping.">>
<<case "bread">><p>The owner unwraps a fresh loaf and places it in your hands. It is not a promise to be remembered later; it is food you can take with you now.</p><<npcSay _actor "Take it. I can replace the loaf more easily than I could have replaced that purse.">>
<<case "reward">><p>You name two coins. The owner pauses, counts them out, and reties the purse with less money inside.</p><<npcSay _actor "You did return it. I will remember that, even if I wish the thanks had cost a little less.">>
<<case "caught">><p>You say you found nothing, but the red cord slips into view as you turn your hand. The owner reaches for the purse before you can hide it again. You let it go; no coins reach your pocket.</p><<npcSay _actor "You could have simply handed it back. I would have thanked you.">><p>The owner steps away from you and checks every coin.</p>
<<case "lie">><p>You answer without looking toward your closed hand. The owner hesitates, then continues searching farther down the road. Once their attention has moved, you empty the purse into your own.</p><p>The four coins are yours to spend. The owner has no proof of what you did, and your silence does not make the loss any smaller.</p>
<<case "stolen">><p>You leave while the owner is still looking beneath the cart. The purse disappears beneath your clothing and, out of sight, the four coins join your own.</p><p>No accusation follows you. Nobody witnessing an honest return is not the same as somebody knowing a theft took place.</p>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><<set _event = $locationEventView>><<set _actor = setup.locationEventActor()>><<set _other = setup.locationEventActor(1)>>
<<if !_event or _event.id isnot "tavern_quarrel">><p>The room has settled down.</p>
<<else>>
<<if _event.stage is "opening">>
<p><<npcMention _actor>> and <<npcMention _other>> are standing over the same bench. One cup lies on its side, darkening the wood. Nearby conversations have grown quieter, not because the room is peaceful but because people are listening for the first shove.</p>
<<npcSay _actor "That was my drink. Moving it did not make the place yours.">>
<<npcSay _other "There was nobody sitting here. You cannot claim half the room with a cup.">>
<p>They have noticed the audience and begun arguing for it. You could hear what happened, distract them, or leave the staff to manage their room.</p>
<<locationEventChoice "listen" "Ask both of them what happened">>
<<locationEventChoice "joke" "Give them a joke they can both retreat behind">>
<<locationEventChoice "command" "Separate them and make the next steps clear">>
<<locationEventChoice "staff" "Ask the staff to intervene">>
<<elseif _event.stage is "accounts">>
<p>You ask them to speak one at a time. The first account gives the spilled drink a long history; the second makes the empty bench sound like the only seat in the building. Listening does at least slow their approach toward each other.</p>
<<npcSay _actor "I stepped away for a moment. I came back to find my cup moved and half of it on the table.">>
<<npcSay _other "I thought it had been left. I moved it badly, yes. That does not mean I was trying to insult anyone.">>
<p>The spill is real; the intended insult is less certain. There is an empty place at another table now, if they can accept it without feeling dismissed.</p>
<<locationEventChoice "compromise" "Suggest an apology for the spill and a separate seat">>
<<locationEventChoice "drink" "Buy a replacement drink and settle the practical loss (-3 Gold)">>
<<locationEventChoice "side" "Back the first account without considering the second">>
<<locationEventChoice "staff" "Leave the decision to the staff">>
<<elseif _event.stage is "last_call">>
<p>You suggest an apology and another seat, but neither patron wants to be the first to give ground. Your words are heard and then talked over. The argument has become about losing face, not finding a bench.</p>
<<npcSay _actor "Why am I the one being sent elsewhere?">>
<<npcSay _other "And why am I the only one expected to apologize?">>
<p>A server has stopped nearby. You can pay for the actual loss or ask the staff to take over; repeating the same suggestion more loudly will not improve it.</p>
<<locationEventChoice "drink" "Buy a replacement drink (-3 Gold)">>
<<locationEventChoice "staff" "Let the staff separate them">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "joke">><p>You glance at the fallen cup and ask whether the bench has begun charging rent for drinks. A nearby table laughs before either patron can decide to be offended. The interruption gives them an excuse to stop performing.</p><<npcSay _actor "Fine. The bench can keep the spilled half. I will take another seat.">><p>The other patron rights the cup and offers an awkward apology. Your intervention is remembered as help, not a public judgment.</p>
<<case "command">><p>You point out the empty place, ask for the spill to be wiped up, and give each person a task before either can begin another accusation. The room starts talking again as the work replaces the quarrel.</p><<npcSay _other "All right. I moved it. Let me clean the table and we can stop making everyone listen.">>
<<case "compromise">><p>You make the distinction between an accident and an insult plain enough for both to hear. The apology is grudging, but it is offered. The empty seat is accepted without anyone being marched there as punishment.</p><<npcSay _actor "The drink mattered more than the bench. I should have said that first.">>
<<case "drink">><p>You pay for a replacement and ask that it be carried to the empty table. The spilled drink has been replaced without requiring either patron to win the whole argument.</p><<npcSay _other "You should not have had to pay for my clumsy hands. Thank you for making it possible to stop.">><p>They settle apart, quieter now. The three coins are spent on their drink, not added to your inventory.</p>
<<case "side">><p>You endorse the first account before the second has finished explaining. One patron welcomes the support; the other turns away from you with a tight expression. Your intervention has created an ally and offended someone else, without settling the spill.</p><<npcSay _other "Then there was little point asking me what happened, was there?">><p>The staff finally separate them. You are not thanked by everyone who heard you speak.</p>
<<case "staff">><p>You catch a server's attention and step back to leave room. The patrons are sent to separate tables, the spilled cup is collected, and the bench becomes ordinary furniture again.</p><p>You have not solved their disagreement or paid for it. You have let the people responsible for the room prevent it becoming a fight.</p>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><<set _event = $locationEventView>><<set _actor = setup.locationEventActor()>>
<<if !_event or _event.id isnot "runaway_cart">><p>The road is clear again.</p>
<<else>>
<<if _event.stage is "opening">>
<p>A loaded handcart moves while <<npcMention _actor>> is checking a loose strap. The stone beneath one wheel rolls clear. For a heartbeat nothing happens; then the cart begins gathering speed toward a porter crossing the road.</p>
<<npcSay _actor "The brake! Catch the lever on the side!">>
<p>You are close enough to reach the rail, though holding the weight will take more than a firm intention. The porter has not yet understood the warning.</p>
<<locationEventChoice "warn" "Warn the porter and keep clear of the wheels">>
<<locationEventChoice "brace" "Catch the rail and try to hold the cart (-2 Energy)">>
<<locationEventChoice "brake" "Reach the brake before the cart gathers speed (-1 Energy)">>
<<locationEventChoice "direct" "Direct the nearby workers to the brake and shafts">>
<<elseif _event.stage is "aftermath">>
<<if _event.outcome is "slipped">><p>You catch the rail, but the cart pulls you two stumbling steps before your grip gives way. Your warning still gets the porter clear. The wheel strikes a stack of baskets and stops among split wicker and scattered straps.</p><<npcSay _actor "Let go before it takes you under! There. Nobody hurt. We can mend a rail; we cannot mend you so easily.">><p>Your effort mattered, but the cart still needs attention before it can move again.</p>
<<elseif _event.outcome is "warned">><p>The porter jumps clear at your shout. The owner reaches the brake a moment later and brings the cart to a stop against the verge. A strap has loosened, but nobody is hurt.</p><<npcSay _actor "That warning was well timed. Now I need to make sure it stays here while I secure the load.">>
<<elseif _event.outcome is "directed">><p>You send one worker to the brake and another to the shafts. The owner joins them, and the cart is turned away from the porter before it reaches the narrowest part of the road.</p><<npcSay _actor "Keep that wheel blocked a moment. You have everyone looking the right way; I might as well make use of it.">>
<<elseif _event.outcome is "braked">><p>You reach the lever while the owner holds the shafts. The brake bites, the wheels drag, and the cart stops short of the porter.</p><<npcSay _actor "Good. Hold it there while I wedge the wheel properly this time.">>
<<else>><p>You lean back against the rail and hold until the owner reaches the brake. A second worker steadies the shafts. The cart stops with the porter still safely beyond its path.</p><<npcSay _actor "I felt that weight pull. Thank you for staying with it long enough for me to reach the lever.">><</if>>
<p>The immediate danger has passed. You can help with the remaining work, ask for payment if the load was saved intact, or leave the owner to finish.</p>
<<locationEventChoice "help" "Stay to gather the straps and steady the load (-1 Energy)">>
<<locationEventChoice "repair" "Reset the rail and brace the wheel securely (-1 Energy)">>
<<locationEventChoice "payment" "Ask for three coins for saving the load">>
<<locationEventChoice "leave" "Leave the remaining work to its owner">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "helped">><p>You gather the scattered straps and hold the load while the owner reties it. The work is not glorious, but it leaves the cart safe to move. When you step back, the wheel has a solid block beneath it.</p><<npcSay _actor "Most people leave when the exciting part is over. I appreciate you staying for the useful part.">>
<<case "repaired">><p>You reset the rail against its fastening and choose a better brace for the wheel. The owner tests both, then counts two coins into your palm.</p><<npcSay _actor "That is work done, not a debt I can leave as a thank-you. Here.">>
<<case "payment">><p>You wait until the load is secure before asking for three coins. The owner looks from you to the cart, then pays.</p><<npcSay _actor "Cheaper than losing it. I would have liked to know there was a price before I thanked you, though.">>
<<case "departed">><p>You make sure the road is clear, then leave the straps and fastening to the person responsible for them. The owner gives you a brief nod and returns to work.</p>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><<set _event = $locationEventView>><<set _actor = setup.locationEventActor()>><<set _other = setup.locationEventActor(1)>>
<<if !_event or _event.id isnot "hungry_child">><p>The situation has already been dealt with.</p>
<<else>>
<<if _event.stage is "opening">>
<p>A child stands beside a basket of bread being carried past, watching until the carrier notices. Then the child looks away. <<npcMention _actor>>, who has been helping the child reach the village's food distribution, stops beside you.</p>
<<npcSay _actor "The meal pot was empty when we got there. I was told to try again later, but later is a long time when you have not eaten. Do you know somewhere we can ask?">>
<p>The child stays close to the adult rather than approaching strangers alone. You can offer food, pay for a simple meal, or help them reach someone responsible for distributing it.</p>
<<locationEventChoice "ask" "Ask what they have already tried">>
<<locationEventChoice "bread" "Give the child a loaf from your bag (-1 Bread Loaf)">>
<<locationEventChoice "buy" "Pay for bread and a simple meal (-2 Gold)">>
<<locationEventChoice "refer" "Help them speak to the person distributing food">>
<<elseif _event.stage is "plan">>
<p>You ask where they went first. The answer is a queue, a closed pot, and a promise that somebody might bring more food. <<npcMention _actor>> has been sent between people who each thought somebody else was dealing with it.</p>
<<npcSay _actor "I do not need a feast. I need someone to say where we should wait, and make sure the child actually gets a bowl when it arrives.">>
<p>There is food nearby, but some is reserved for paying customers. You could provide something yourself or persuade its keeper to set aside one portion for the next distribution.</p>
<<locationEventChoice "bread" "Give a loaf from your bag (-1 Bread Loaf)">>
<<locationEventChoice "buy" "Buy a meal rather than wait (-2 Gold)">>
<<locationEventChoice "arrange" "Persuade the food keeper to set aside a portion">>
<<locationEventChoice "refer" "Make sure the distribution keeper hears their request">>
<<elseif _event.stage is "meal">>
<<if _event.outcome is "fed">>
<p>You hand over your loaf. The adult breaks it into manageable pieces and lets the child eat before asking anything else. The food has come from your bag, not from a promise that somebody might keep later.</p>
<<elseif _event.outcome is "bought">>
<p>You pay for a plain meal and have it handed directly to the adult. The child takes the first piece of bread while the bowl cools. Your two coins are spent feeding them; no food is added to your own bag.</p>
<<else>>
<p>You explain the missed distribution without turning it into a public accusation. The food keeper agrees to release one portion from the reserve, and the child finally sits down with a bowl.</p>
<</if>>
<<npcSay _actor "Thank you. It is easier to think about what comes next when the first problem is no longer an empty stomach.">>
<p>You can stay until the child finishes, or make your departure quietly so the help does not become a performance.</p>
<<locationEventChoice "stay" "Stay until the child has finished eating">>
<<locationEventChoice "discreet" "Wish them well and leave without making a spectacle">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "referred">>
<p>You accompany them to the person managing food distribution and wait until the request is acknowledged. A place in the next serving is agreed, rather than another instruction to ask elsewhere.</p>
<<npcSay _actor "At least we know who is expecting us now. Thank you for staying long enough to make that clear.">>
<p>No meal has been served yet, but they are no longer being passed between strangers without an answer.</p>
<<case "stayed">>
<p>You remain nearby while the child eats, leaving the adult free to arrange the next part of the journey. By the time the bowl is empty, the child's attention has moved from watching other people's food to counting stones beside the bench.</p>
<<npcSay _actor "You gave us a little time as well as help. I will remember that.">>
<<case "discreet">>
<p>You wish them a better afternoon and step away while the meal is still warm. The adult thanks you without calling the rest of the street to witness it.</p>
<<npcSay _actor "Go on with your day. We have what we needed for this part of ours.">>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><<set _event = $locationEventView>><<set _actor = setup.locationEventActor()>><<set _other = setup.locationEventActor(1)>>
<<if !_event or _event.id isnot "doorway_argument">><p>The situation has already been dealt with.</p>
<<else>>
<<if _event.stage is "opening">>
<p>A broken storage jar lies across a threshold. <<npcMention _actor>> points to a loose shelf inside the doorway; <<npcMention _other>> points to the pieces outside. Their voices have begun carrying into the lane.</p>
<<npcSay _actor "I set it down where you told me. The shelf gave way. I am not paying for wood that was already coming loose.">>
<<npcSay _other "It stood there this morning. Now my jar is broken and you are telling me it is my fault.">>
<p>They ask you to settle what happened, but neither has stopped speaking long enough to hear the other. You can investigate, quiet the argument, or pay for the jar without assigning blame.</p>
<<locationEventChoice "listen" "Ask each person to explain what happened">>
<<locationEventChoice "command" "Stop the shouting and have them speak one at a time">>
<<locationEventChoice "pay" "Pay for a replacement jar to settle the loss (-3 Gold)">>
<<locationEventChoice "separate" "Separate them and ask a neighbor to witness the dispute">>
<<elseif _event.stage is "evidence">>
<p>You get two versions of the same moment. One says the shelf sagged before the jar fell; the other remembers an elbow catching the edge. A bent fastening is visible beneath the shelf, but neither person agrees when it loosened.</p>
<<npcSay _actor "Look at the peg. That did not pull out because a jar was set down gently.">>
<<npcSay _other "Then explain why nobody noticed it until my things were on the ground.">>
<p>You can inspect the fastening, propose that they share the repair, or take a side without settling the evidence. A quick accusation may stop the conversation without solving the problem.</p>
<<locationEventChoice "inspect" "Inspect the fastening and identify the cause">>
<<locationEventChoice "mediate" "Try to agree on a repair instead of assigning all the blame">>
<<locationEventChoice "blame" "Back the first account before checking the shelf">>
<<locationEventChoice "separate" "Bring in a neighbor rather than decide without evidence">>
<<elseif _event.stage is "settlement">>
<<if _event.outcome is "fault_found">>
<p>You find an old split around the peg and show it to both people. The fastening had been failing before the jar touched the shelf. That does not replace the jar, but it makes the accusation of carelessness much harder to maintain.</p>
<<npcSay _other "All right. The wood was going. I should have checked it before asking anyone to use the shelf.">>
<<else>>
<p>You separate the cost of a jar from the need to repair the shelf. After a few reluctant exchanges, both agree that sharing the work is better than continuing to charge each other for the argument.</p>
<<npcSay _actor "I will gather the pieces if we actually fix what dropped them. I do not want to have this conversation again tomorrow.">>
<</if>>
<p>A spare peg and a sound board are brought to the doorway. You can help brace the shelf or have the two people state their agreement clearly before you leave.</p>
<<locationEventChoice "repair" "Brace the board and help replace the fastening (-1 Energy)">>
<<locationEventChoice "agree" "Have them agree who will repair the shelf and replace the jar">>
<<elseif _event.stage is "impasse">>
<p>You suggest sharing the repair, but the answer comes back as two separate demands for an apology. Neither accepts your attempt to divide the responsibility. The broken pieces remain where they were.</p>
<<npcSay _other "A compromise does not help if it starts by saying I should pay for somebody else's mistake.">>
<p>You can pay for the immediate loss or bring in a witness who can keep the dispute from becoming another shouting match. Repeating the same proposal will not settle it.</p>
<<locationEventChoice "pay" "Pay for the replacement jar (-3 Gold)">>
<<locationEventChoice "separate" "Ask a neighbor to witness their accounts">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "paid">>
<p>You offer three coins toward a replacement. Both people stop trying to win long enough to count the actual loss. The jar is accounted for, though the shelf will still need attention.</p>
<<npcSay _other "You should not have had to pay for our argument. Thank you. We can discuss the board without making you pay for that too.">>
<<case "separated">>
<p>You ask a neighbor to listen and move the two people clear of the broken pieces. They repeat their accounts at a lower volume, with someone else ready to challenge a detail rather than shout over it.</p>
<p>You have not decided who owes what. You have made sure the dispute has a witness and that nobody needs to keep blocking the lane.</p>
<<case "blamed">>
<p>You support the first account before examining the fastening. <<npcMention _actor>> welcomes the support, but <<npcMention _other>> refuses your judgment and asks for a different witness.</p>
<<npcSay _other "You asked what happened, then decided before you looked. I do not call that settling anything.">>
<p>The lane becomes quieter, but the disagreement remains. One person's approval has cost you another's confidence.</p>
<<case "repaired">>
<p>You hold the board level while a sound peg is driven home. Both people test it before putting anything back. The broken jar is swept away and the doorway becomes a doorway again.</p>
<<npcSay _actor "That is something useful to show for all the noise. Thank you for seeing it through.">>
<<case "agreed">>
<p>You have them repeat the agreement in plain terms: who will repair the board, who will clear the pieces, and how the jar will be replaced. It is not a perfect reconciliation, but it is a plan both have heard.</p>
<<npcSay _other "Fine. That is what we will do. No more arguing through the doorway.">>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><<set _event = $locationEventView>><<set _actor = setup.locationEventActor()>><<set _other = setup.locationEventActor(1)>>
<<if !_event or _event.id isnot "misfiled_petition">><p>The situation has already been dealt with.</p>
<<else>>
<<if _event.stage is "opening">>
<p>A folded petition slides from a bundle onto a public table. <<npcMention _actor>>, who brought the papers to be filed, is searching a different stack. A waiting visitor leans toward the exposed writing.</p>
<<npcSay _actor "There should be one more page with the others. Please tell me it has not been carried off with somebody else's papers.">>
<p>The seal and filing ribbon are visible even if you cannot read the page. You can turn the writing inward and return it, report the careless handling, or read farther if your literacy is sufficient.</p>
<<locationEventChoice "protect" "Fold the petition closed and return it discreetly">>
<<locationEventChoice "expose" "Call attention to the exposed papers without repeating their contents">>
<<locationEventChoice "read" "Read the private details before returning it [Literacy 10]">>
<<elseif _event.stage is "filing">>
<<if _event.outcome is "reported">>
<p>You call attention to the loose page. A keeper of the table collects the other exposed papers and asks that bundles remain tied until they are received. <<npcMention _actor>> retrieves the petition, embarrassed to have become the center of the room's attention.</p>
<<npcSay _actor "You could have told me quietly. Still, it is back with the right papers now.">>
<<else>>
<p>You fold the writing inward before handing the page back. <<npcMention _actor>> checks the seal and secures it beneath the ribbon.</p>
<<npcSay _actor "Thank you. Some things need to be recorded without becoming everybody's conversation.">>
<</if>>
<p>The bundle still needs to reach the right table. Several ribbons and seals look similar, and the receiving keeper is occupied. You could help match the markings, accompany the bearer, or hand the task back without guessing.</p>
<<locationEventChoice "sort" "Match the seal and filing marks to the correct bundle">>
<<locationEventChoice "accompany" "Wait with them until the receiving keeper accepts the petition">>
<<locationEventChoice "handover" "Return the tied bundle and let them handle the filing">>
<<elseif _event.stage is "privacy">>
<p>You can read enough to understand that the petition concerns a household's debt and a request for relief. A private account of illness is included to explain why the payment was missed. Nothing on the page was written for the waiting room.</p>
<<npcSay _actor "There it is. Have you seen where the rest of that bundle went?">>
<p>The visitor beside you asks what was on the loose page. You can keep the details to yourself, or repeat them while their bearer is close enough to hear.</p>
<<locationEventChoice "discretion" "Close the page and refuse to discuss its contents">>
<<locationEventChoice "gossip" "Repeat the private details to the waiting visitor">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "sorted">>
<p>You compare the seal and ribbon markings instead of guessing from the size of the papers. A mismatched cover is separated, the petition is secured with its proper bundle, and the keeper accepts it without another search.</p>
<<npcSay _actor "I would have spent the afternoon looking under the wrong cover. Take these two coins for the trouble you saved me.">>
<<case "delivered">>
<p>You stay beside the bearer until the receiving keeper has checked the bundle and acknowledged the petition. This time there is a clear answer about who has it.</p>
<<npcSay _actor "That is all I wanted: to know it arrived, rather than hope somebody picked it up. Thank you for waiting.">>
<<case "handed_over">>
<p>You return the papers tied and closed. Their bearer moves to the receiving table without leaving anything else exposed.</p>
<<npcSay _actor "I have it from here. Thank you for finding the missing page.">>
<<case "gossiped">>
<p>You repeat what you read. The visitor listens, but <<npcMention _actor>> turns at the sound of the details and takes the petition from your hand.</p>
<<npcSay _actor "Finding the page was helpful. Making its contents public was not. I will keep the rest of it with me.">>
<p>You have not gained a private lead about a named villager. You have made someone less willing to trust you with their papers.</p>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><<set _event = $locationEventView>><<set _actor = setup.locationEventActor()>><<set _other = setup.locationEventActor(1)>>
<<if !_event or _event.id isnot "spilled_grain">><p>The situation has already been dealt with.</p>
<<else>>
<<if _event.stage is "opening">>
<p>The seam of a grain sack splits as <<npcMention _actor>> lifts it from a cart. Barley pours onto the path, collecting in the wheel ruts. The owner lowers the sack and tries to hold the torn mouth shut while another cart approaches.</p>
<<npcSay _actor "Stop a moment! There is grain under your wheel. If you drive through it, we lose the rest as well.">>
<p>A spare board and an empty sack lie beside the cart. You can start gathering the clean grain, organize help, divert the traffic, or call the nearby workers over without trying to lift anything yourself.</p>
<<locationEventChoice "gather" "Help scoop the clean grain onto the spare board (-1 Energy)">>
<<locationEventChoice "organize" "Assign the nearby workers to sacks, boards, and traffic">>
<<locationEventChoice "divert" "Find a clear route for the approaching carts">>
<<locationEventChoice "call" "Call the nearby workers over and warn the driver">>
<<elseif _event.stage is "cleanup">>
<<switch _event.outcome>>
<<case "gathered">>
<p>You scoop the grain from the cleanest patch first. The owner steadies the board while another worker holds an empty sack. Some barley has already been ground into the mud, but the main pile is saved.</p>
<<case "organized">>
<p>You put one person in front of the traffic, another beside the sack, and a third at the scattered grain. The separate tasks keep people from trampling what they are trying to save.</p>
<<case "diverted">>
<p>You spot enough space beside the cart for the waiting driver to pass without crossing the spill. Once the wheels are out of the way, the workers can collect the grain without rushing.</p>
<<case "called">>
<p>Your warning stops the driver before the wheels reach the pile. Two nearby workers bring the board and start gathering grain while you keep the path clear.</p>
<</switch>>
<<npcSay _actor "We have saved enough to matter. But that sack will open again if we put the weight back in it like this.">>
<p>A sound sack is available, though lifting the filled board into it will take strength. Alternatively, you can try tying the torn seam around a wooden slat. An improvised patch may fail if you do not judge the fastening well.</p>
<<locationEventChoice "lift" "Lift the rescued grain into the sound sack (-1 Energy)">>
<<locationEventChoice "patch" "Try to reinforce the torn seam around a slat (-1 Energy)">>
<<locationEventChoice "leave" "Hand the remaining work to the workers already helping">>
<<elseif _event.stage is "reward">>
<<if _event.outcome is "lifted">>
<p>You lift the board steadily while the owner guides its edge into the sound sack. The grain settles inside without another spill. The new sack is tied before anybody moves it.</p>
<<else>>
<p>You wrap the torn seam around the slat and tie the load above it, keeping the damaged cloth from carrying the full weight. The owner tests the fastening, then lifts it a little clear of the ground. It holds.</p>
<</if>>
<<npcSay _actor "That is a load I can still use. Let me give you a loaf from the basket, or a couple of coins if you would rather have those.">>
<p>The offer is payment for help already given, not another task. You can choose what would be useful or leave the owner with the supplies intact.</p>
<<locationEventChoice "bread" "Accept a loaf of bread">>
<<locationEventChoice "gold" "Accept two coins">>
<<locationEventChoice "decline" "Say their thanks are enough">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "patch_failed">>
<p>You tie the cloth around the slat, but the fastening takes the weight unevenly. When the owner tests it, the seam opens farther. The workers catch the sack before the whole load spills, then empty it into the sound one.</p>
<<npcSay _actor "Leave that knot. We need a different sack, not another attempt with this one.">>
<p>Your earlier help still saved grain, but this repair did not work. No reward is offered for the failed fastening.</p>
<<case "handed_over">>
<p>You point out the torn seam and leave the spare sack within reach. The workers take over the lifting while you make sure the driver knows the path will soon be clear.</p>
<<npcSay _actor "We can finish it from here. Thank you for not letting the cart run over the pile.">>
<<case "bread">>
<p>The owner hands you a wrapped loaf from the basket. The rescued load is tied and ready to move, and you leave with food you can use rather than a promise of payment later.</p>
<<npcSay _actor "Take it. There would have been a much emptier cart without the help.">>
<<case "paid">>
<p>Two coins are counted into your hand. The workers move the grain clear of the path before the waiting carts resume their journey.</p>
<<npcSay _actor "Work deserves something back. We are settled.">>
<<case "thanks">>
<p>You decline the offer and help point the cart toward the clear path. The owner puts the coins away with a grateful nod.</p>
<<npcSay _actor "Then I owe you my thanks, and I will not pretend that means nothing.">>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><<set _event = $locationEventView>><<set _actor = setup.locationEventActor()>><<set _other = setup.locationEventActor(1)>>
<<if !_event or _event.id isnot "extra_coin">><p>The situation has already been dealt with.</p>
<<else>>
<<if _event.stage is "opening">>
<p>A small basket of goods sits beside <<npcMention _actor>>, who is trying to check its contents while keeping a second bundle from sliding off a bench. You are asked to move the basket to the receiving table a few paces away.</p>
<<npcSay _actor "One coin if you can get that over there and make sure everything is accounted for. I have too many things in my hands to do a good job of either.">>
<p>You can carry it yourself, help check the contents while its owner does the lifting, or explain that you cannot take on the errand. Payment only follows work actually done.</p>
<<locationEventChoice "carry" "Carry the basket to the receiving table (-1 Energy)">>
<<locationEventChoice "count" "Check the contents while its owner carries the basket">>
<<locationEventChoice "decline" "Explain that you cannot take on the errand">>
<<elseif _event.stage is "payment">>
<<if _event.outcome is "carried">>
<p>You set the basket on the receiving table and wait until its owner has checked the contents. Everything arrived together.</p>
<<else>>
<p>You separate the contents into clear groups and check the tally while the owner moves the basket. A repeated mark is corrected before the goods are handed over.</p>
<</if>>
<p>Still distracted by the bundles, <<npcMention _actor>> counts three coins into your palm instead of the one agreed. They remain in your open hand; you have not put any of them into your purse yet.</p>
<<npcSay _actor "There. Thank you. Now, where did I leave that other tally?">>
<p>You know the agreed wage. You can return the excess, ask to count it together, or close your hand over all three before the mistake is noticed.</p>
<<locationEventChoice "return" "Point out the mistake and return the two extra coins">>
<<locationEventChoice "recount" "Ask them to count the payment with you">>
<<locationEventChoice "keep" "Conceal the extra payment and see whether they notice">>
<<elseif _event.stage is "thanks">>
<p>The count is corrected before the money reaches your purse. <<npcMention _actor>> looks at you more carefully than when the errand was offered.</p>
<<npcSay _actor "I said one, and gave you three. Thank you for noticing before I spent the rest of the day accusing my own arithmetic.">>
<p>Your agreed wage is still available. You can take it, make a case for a small bonus, or decline payment altogether. None of the money has been added to your gold yet.</p>
<<locationEventChoice "wage" "Take the agreed one-coin wage">>
<<locationEventChoice "bonus" "Ask for a two-coin wage for the extra care">>
<<locationEventChoice "decline" "Decline the wage as well">>
<<elseif _event.stage is "check">>
<p>You close your hand, but the next count stops short. <<npcMention _actor>> turns back before you have left the table.</p>
<<npcSay _actor "Wait. Did I put one coin there, or three? I am short by two and I have not paid anybody else since you.">>
<p>You can return the excess now, or try to deny receiving it. A poor lie will not change a count that can be checked in front of you.</p>
<<locationEventChoice "confess" "Admit the mistake and keep only the agreed wage">>
<<locationEventChoice "lie" "Deny receiving extra coins and try to keep all three">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "declined">>
<p>You explain that you cannot take the errand and steady the loose bundle long enough for its owner to put it down. Somebody else is asked to move the basket.</p>
<<npcSay _actor "Fair enough. Better to tell me now than leave it halfway across the path.">>
<p>No work was accepted and no wage is paid.</p>
<<case "wage">>
<p>You put the agreed coin into your purse. The remaining two stay with their owner, and the next count begins with a clear tally.</p>
<<npcSay _actor "An honest account. That is worth remembering.">>
<<case "bonus">>
<p>You point out that you checked the contents and corrected the payment as well as helping with the basket. Your argument earns a second coin, deliberately counted this time.</p>
<<npcSay _actor "Two, then. Not three by accident. We both know what was paid.">>
<<case "gift">>
<p>You return the last coin too. The owner pauses, then puts all three safely away.</p>
<<npcSay _actor "Thank you. You have made a rather muddled part of the day easier.">>
<<case "confessed">>
<p>You open your hand and return the excess. The owner sets two coins aside and lets you keep the one earned by the errand.</p>
<<npcSay _actor "That is the count we agreed. I wish you had said so before I asked, but we can leave it there.">>
<<case "caught">>
<p>You deny the extra payment, but the three coins are still together in your hand. The owner recounts them, takes back the two that were not owed, and leaves you the agreed wage.</p>
<<npcSay _actor "One for the errand. Nothing for trying to make me doubt a count we can both see.">>
<<case "lie">>
<p>You speak confidently enough that the owner turns back to the tally instead of asking you to open your hand. Only after leaving the table do you put all three coins into your purse.</p>
<p>You have gained two coins beyond the wage. The owner has not established what happened, but that does not turn the excess into honest payment.</p>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><<set _event = $locationEventView>><<set _actor = setup.locationEventActor()>><<set _other = setup.locationEventActor(1)>>
<<if !_event or _event.id isnot "old_offering">><p>The situation has already been dealt with.</p>
<<else>>
<<if _event.stage is "opening">>
<p>A blue thread is tied around a weathered stone. Beneath it lie dried flowers, a heel of bread, and a small copper coin. <<npcMention _actor>> has stopped beside the same stones and notices you examining them.</p>
<<npcSay _actor "That thread is new. Somebody has been here since the rain, whatever age the stones might be.">>
<p>The coin has not been abandoned with a lost purse. It was placed with the flowers. You can ask about the custom, inspect the signs of a recent visit, move the offering out of the water, or take the coin in plain view.</p>
<<locationEventChoice "ask" "Ask what the offering is meant to represent">>
<<locationEventChoice "inspect" "Examine the fresh thread and the marks around the stone">>
<<locationEventChoice "protect" "Move the offering clear of the runoff without taking anything">>
<<locationEventChoice "take" "Pick up the offering's coin in front of the witness">>
<<elseif _event.stage is "custom">>
<<if _event.outcome is "inspected">>
<p>You notice that the thread is tied above the old rain line and that the flowers were laid on a dry patch after the ground became wet. The offering is recent, not a relic nobody remembers.</p>
<<else>>
<p>You ask before touching the flowers. <<npcMention _actor>> studies the thread, then points to the small dry patch chosen beneath the stone.</p>
<</if>>
<<npcSay _actor "People leave things here when they ask for a safe road, or when somebody has come back from one. I could not tell you who left this. It is not mine to promise away.">>
<p>The custom does not require you to share its beliefs. You can contribute a coin, secure the loose stone so the offering stays dry, or leave everything intact after hearing the explanation.</p>
<<locationEventChoice "offer" "Leave a coin beside the flowers (-1 Gold)">>
<<locationEventChoice "mend" "Secure the loose stone and clear the runoff (-1 Energy)">>
<<locationEventChoice "respect" "Leave the offering intact without adding to it">>
<<elseif _event.stage is "challenge">>
<p>You lift the coin. <<npcMention _actor>> notices immediately; there is no crowd or distraction to hide what you are doing.</p>
<<npcSay _actor "You can say you do not believe in the custom. That still leaves somebody else's offering in your hand. Will you put it back?">>
<p>The copper has not been added to your purse. You can replace it without paying anything yourself, or keep it despite the witness's objection.</p>
<<locationEventChoice "replace" "Put the offering's coin back">>
<<locationEventChoice "keep" "Keep the coin despite the objection">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "protected">>
<p>You move the flowers, bread, and coin onto the dry part of the stone without putting anything in your bag. The thread stays tied where its owner left it.</p>
<<npcSay _actor "That should keep it out of the next shower. Whoever comes back will find what they left.">>
<<case "offered">>
<p>You set one of your own coins beside the first, then leave the flowers undisturbed. The addition is a contribution, not payment for a promise the witness can make.</p>
<<npcSay _actor "A safe road, then. I hope yours is one.">>
<<case "mended">>
<p>You settle the loose stone against its support and clear the little channel carrying water toward the flowers. When you test it again, the stone holds without shifting.</p>
<<npcSay _actor "That will last longer than another coin. Useful work, whatever one thinks about the prayers.">>
<<case "respected">>
<p>You step back without adding or taking anything. Asking about the custom has not obliged you to follow it.</p>
<<npcSay _actor "There is room to leave something alone without agreeing with every reason it was put there.">>
<<case "replaced">>
<p>You replace the copper beside the flowers. Nothing has been taken from your own purse, and nothing from the offering has entered it.</p>
<<npcSay _actor "Thank you. That is enough. We need not turn it into an argument about every old belief in the village.">>
<<case "kept">>
<p>You put the copper into your purse after hearing the objection. <<npcMention _actor>> steps aside rather than trying to wrest it from you.</p>
<<npcSay _actor "Then you heard what it was and took it anyway. I will remember the choice, not just the coin.">>
<p>The gold is yours to spend. The witness's confidence in you has paid part of its price.</p>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><div class="personality-reputation-shell">
<p class="personality-reputation-intro">A reputation is rarely announced to the person carrying it. It grows in repeated stories, in warnings exchanged across counters, and in the confidence with which someone decides what to expect from you.</p>
<<print setup.playerPersonalityReputationEntriesHtml()>>
<div class="personality-reputation-actions"><<button "Close">><<run Dialog.close()>><</button>></div>
</div><</nobr>><<nobr>><<set _speaker = setup.getNpcById($activeNpcId)>>
<<if !_speaker>>
<p>They are no longer nearby.</p>
<div class="npc-return-link"><<link "Return" $return>><</link>></div>
<<else>>
<div class="npc-question-menu-panel">
<p>You think through the people whose names you know. Asking about someone directly may reveal an opinion, a connection, or a rumor, but only if your companion knows them and trusts you enough to speak.</p>
<div class="npc-question-list">
<<set _targets = setup.npcNamedQuestionTargets(_speaker)>>
<<for _target range _targets>>
<<set _targetId = _target.id>><<set _targetName = setup.npcDisplayName(_target)>>
<<capture _targetId _targetName>><div class="npc-question-choice"><<link _targetName>><<set $activeNpcQuestionTargetId = _targetId>><<goto "NPCQuestionPersonTopics">><</link>></div><</capture>>
<</for>>
<<if !_targets.length>><p>You do not yet know anyone else by name well enough to ask about them.</p><</if>>
</div>
<div class="npc-return-link"><<link "Back to social questions" "NPCQuestionMenu">><</link>></div>
</div>
<</if>><</nobr>><<nobr>><<set _speaker = setup.getNpcById($activeNpcId)>><<set _target = setup.getNpcById($activeNpcQuestionTargetId)>>
<<if !_speaker or !_target or !_target.discovered or !_target.discovered.name>>
<p>The person you meant to ask about is no longer clear in your mind.</p>
<div class="npc-return-link"><<link "Choose someone else" "NPCQuestionPersonMenu">><</link>></div>
<<else>>
<div class="npc-question-menu-panel">
<p>You turn the conversation toward <strong><<= setup.npcDisplayName(_target) >></strong>.</p>
<div class="npc-question-list">
<div class="npc-question-choice"><<link "What do you think of them?">><<set $lastNpcPersonQuestionResult = setup.npcAskAboutKnownPerson(_speaker.id, _target.id, "opinion")>><<goto "NPCQuestionPersonResult">><</link>></div>
<div class="npc-question-choice"><<link "Have you heard anything about them?">><<set $lastNpcPersonQuestionResult = setup.npcAskAboutKnownPerson(_speaker.id, _target.id, "gossip")>><<goto "NPCQuestionPersonResult">><</link>></div>
<<if setup.npcPersonQuestionKnownPartner(_speaker, _target)>>
<div class="npc-question-choice"><<set _partnerQuestion = "How are things between you and " + setup.npcDisplayName(_target) + "?">><<link _partnerQuestion>><<set $lastNpcPersonQuestionResult = setup.npcAskAboutKnownPerson(_speaker.id, _target.id, "partner")>><<goto "NPCQuestionPersonResult">><</link>></div>
<</if>>
</div>
<div class="npc-return-link"><<link "Choose someone else" "NPCQuestionPersonMenu">><</link>> <<link "Return to the conversation" "NPCInteract">><</link>></div>
</div>
<</if>><</nobr>><<nobr>><<set _result = $lastNpcPersonQuestionResult>>
<div class="npc-response-panel npc-question-result">
<<if _result and _result.conversationProfile>><<print setup.npcQuestionConversationHtml(_result)>><<elseif _result and _result.html>><<print _result.html>><<else>><p>The thread of the conversation has been lost.</p><</if>>
<<if _result and _result.socialDiscovery>><p class="npc-exchange-note">You make a note of the connection in your journal.</p><</if>>
<<if _result and _result.rumorDiscovery>><p class="npc-exchange-note">You remember the rumor, though it may still need confirming.</p><</if>>
<<if !_result or !_result.conversationProfile>><div class="npc-return-link"><<link "Ask about this person again" "NPCQuestionPersonTopics">><</link>> <<link "Ask about someone else" "NPCQuestionPersonMenu">><</link>> <<link "Return to the conversation" "NPCInteract">><</link>></div><</if>>
</div><</nobr>><<nobr>><<set _result = $activityWalkHomeResult>><<set _npc = _result and _result.npcId ? setup.getNpcById(_result.npcId) : null>>
<div class="npc-activity-panel house-visit-shell">
<div class="npc-interact-name"><<= _result and _result.lodging ? "At their tavern room" : "At the doorstep" >></div>
<<if !_result or !_result.ok or !_npc>>
<p><<= _result and _result.text ? _result.text : "The chance to walk together has passed." >></p>
<div class="npc-return-link"><<set _activityReturn = setup.npcActivityReturnPassage()>><<link "Continue" _activityReturn>><<run setup.npcClearActivity()>><</link>></div>
<<else>>
<div class="house-address-heading"><<= _result.address >></div>
<p><<= _result.arrivalText >></p>
<p><span @class="'dialogue-line ' + (_npc.gender === 'female' ? 'dialogue-female' : 'dialogue-male')">"<<= _result.dialogue >>"</span></p>
<p><span class="house-visit-gains"><<if _result.addressNew>><<= _result.lodging ? "Weekday lodging discovered" : "Address discovered" >><<if _result.affectionGain or _result.trustGain>> | <</if>><</if>><<if _result.affectionGain>>Affection +<<= Math.round(_result.affectionGain * 100) / 100 >><<if _result.trustGain>> | <</if>><</if>><<if _result.trustGain>>Trust +<<= Math.round(_result.trustGain * 100) / 100 >><</if>></span></p>
<div class="npc-activity-choice-list">
<<if _result.invited>><div class="npc-activity-choice"><<link "Accept the invitation" "House Visit Interior">><<run setup.npcBeginActivityHomeVisit(_result)>><<run setup.npcClearActivity()>><</link>></div>
<div class="npc-activity-choice"><<link "Say goodnight at the door" _result.location>><<run setup.npcClearActivity()>><</link>></div>
<<else>><div class="npc-activity-choice"><<link "Say goodnight" _result.location>><<run setup.npcClearActivity()>><</link>></div><</if>>
</div>
<</if>>
</div><</nobr>><<nobr>>
<<set _camp = $campShelterLocation>><<set _workers = setup.npcCampShelterOccupants(_camp)>>
<div class="npc-activity-panel"><div class="npc-interact-name">Workers' shelter</div>
<p>A rough canvas roof keeps the bedding dry. The blankets and spare tools belong to the camp; workers take whichever space is free when a long shift keeps them in the forest overnight.</p>
<<if _workers.length>><p>Someone has settled in for the night.</p><div class="npc-activity-choice-list"><<for _worker range _workers>><<capture _worker>><div><<link setup.npcDisplayName(_worker) "NPCInteract">><<set $activeNpcId = _worker.id>><<set $return = "Camp Shelter">><</link>></div><</capture>><</for>></div><<else>><p>The bedding is empty for now.</p><</if>>
<div class="npc-return-link"><<link "Return to camp" _camp>><</link>></div></div><</nobr>><<nobr>>
<<print setup.locationImageHtml("img/location/BH_Chapel.png", "Briar Hollow chapel")>>
<p>The hamlet chapel is small enough that voices stay low without anyone asking. Fresh candles and a bowl of clean water suggest someone has been tending it today.</p>
<<dueActivityLinks "BH Chapel">>
<<travel "south" "Return to the center of Briar Hollow" "BH Center" 5>><</nobr>><<nobr>>
<<print setup.locationImageHtml("img/location/BH_Eastpath.png", "East path out of Briar Hollow", "img/location/BH_Eastpathnight.png")>>
<p>The last roofs of Briar Hollow give way to a narrow road beneath the trees. Footprints and cart tracks point toward the old shrine deeper in the forest.</p>
<<dueActivityLinks "BH East Path">>
<<travel "west" "Follow the path into the hamlet" "BH Center" 5>>
<<travel "east" "Take the old forest road to the ruined shrine" "Ruined Wayside Shrine" 10>><</nobr>><<nobr>>
<<print setup.locationImageHtml("img/location/BH_Houses.png", "Briar Hollow homes", "img/location/BH_Housesnight.png")>>
<p>A short lane gathers the hamlet's cottages close together. Each door has its own repairs and weather marks; behind some, you can hear the ordinary sounds of someone at home.</p>
<div class="location-action-list"><div><<link "Approach a house" "House Street">><<set $houseStreetReturn = "BH Homes">><</link>></div></div>
<<dueActivityLinks "BH Homes">>
<<travel "east" "Return to the center of Briar Hollow" "BH Center" 5>><</nobr>><<nobr>>
<<print setup.locationImageHtml("img/location/BH_Alehouse.png", "Briar Hollow alehouse")>>
<p>A small hearth and closely packed tables give the alehouse its warmth. Workers arriving from the forest trade news with neighbors who never left the hamlet.</p>
<<set _alehouseSeller = setup.businessCounterNpc("briar_alehouse")>>
<<if _alehouseSeller>><div class="location-action-list"><div><<link "Trade at the alehouse" "NPCTrade">><<set $activeNpcId = _alehouseSeller.id>><<set $npcTradeMode = "shop">><<set $npcTradeReturn = "BH Alehouse">><</link>></div></div><</if>>
<<dueActivityLinks "BH Alehouse">>
<<travel "north" "Return to the center of Briar Hollow" "BH Center" 5>><</nobr>><<nobr>>
<<print setup.locationImageHtml("img/location/BH_Communalbarn.png", "Briar Hollow communal barn", "img/location/BH_Communalbarnnight.png")>>
<p>The communal barn holds tools, feed, and the animals that cannot be kept near the cottages. Several households share its upkeep, so the doors are seldom still for long.</p>
<<dueActivityLinks "BH Communal Barn">>
<<travel "northeast" "Return to the center of Briar Hollow" "BH Center" 5>><</nobr>><<nobr>>
<<print setup.locationImageHtml("img/location/BH_Center.png", "Center of Briar Hollow", "img/location/BH_Centernight.png")>>
<p>Briar Hollow's paths meet around a small open space. The chapel, cottages, barn, and alehouse are all close enough that a familiar voice carries across the hamlet.</p>
<<set _taxDebtor = setup.taxDebtorAt("BH Center")>>
<<if _taxDebtor>><div class="location-action-list"><div><<link "A neighbor with a tax notice" "Tax Debtor">><<set $taxEventNpcId = _taxDebtor.id>><<set $taxEventReturn = "BH Center">><</link>></div></div><</if>>
<<dueActivityLinks "BH Center">>
<<travel "north" "Walk toward the chapel" "BH Chapel" 5>>
<<travel "west" "Head toward the homes" "BH Homes" 5>>
<<travel "southwest" "Follow the lane to the communal barn" "BH Communal Barn" 5>>
<<travel "south" "Walk down to the alehouse" "BH Alehouse" 5>>
<<travel "east" "Take the road toward the forest" "BH East Path" 5>><</nobr>><<nobr>><div class="village-map-wrap">
<div class="area-map-frame">
<<mapAreaArrow "west">>
<div class="village-map briar-map">
<div class="map-label">Briar Hollow</div>
<div class="map-feature woodland">old forest road</div>
<div class="map-feature fields">shared pasture</div>
<div class="briar-map-road chapel"></div><div class="briar-map-road homes"></div>
<div class="briar-map-road barn"></div><div class="briar-map-road alehouse"></div>
<div class="briar-map-road east"></div><div class="briar-map-road forest"></div>
<<mapNode "Center" "BH Center" "50%" "52%" 5>>
<<mapNode "Chapel" "BH Chapel" "50%" "17%" 5>>
<<mapNode "Homes" "BH Homes" "15%" "43%" 5>>
<<mapNode "Communal Barn" "BH Communal Barn" "25%" "82%" 5>>
<<mapNode "Alehouse" "BH Alehouse" "58%" "84%" 5>>
<<mapNode "East Path" "BH East Path" "84%" "58%" 5>>
</div>
<<mapAreaArrow "east" "forest">>
</div>
<div class="map-note">Only places reached on foot are shown. Travel time follows the known roads.</div>
</div>
<div class="npc-return-link"><<link "Return to Game" setup.areaMapReturnPassage()>><</link>></div><</nobr>><<nobr>><<set _owner = setup.dockWorkTrialNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>A trader wants a barrel of fish that will survive the journey inland. The last of the pier salt has gone damp, and the fishmonger refuses to stamp his mark on a barrel he cannot trust.</p>
<<set _bond = setup.dockWorkRelationshipContext(_owner)>>
<<if _bond.stage is 'partner'>><<print setup.npcEventDialogueHtml(_owner, 'You know how much I need this order. Stay with me at the bench and tell me honestly if the salt is no good. I trust your hands, but neither of us should guess with a buyer waiting.', 'The fishmonger')>>
<<elseif _bond.stage is 'romantic' and !_bond.attachedOther>><<print setup.npcEventDialogueHtml(_owner, 'I would like to keep you here longer for better reasons, but this barrel comes first. Find me dry salt or help me test what we have. I trust you to tell me if it will not hold.', 'The fishmonger')>>
<<elseif _bond.level >= 1>><<print setup.npcEventDialogueHtml(_owner, 'You know why I will not mark a doubtful barrel. Help me find dry salt or test this batch with me. I would rather hear bad news from you now than from a buyer tomorrow.', 'The fishmonger')>>
<<else>><<print setup.npcEventDialogueHtml(_owner, 'This order is worth keeping. Find me dry salt, or prove this batch will hold. I will not have a customer opening a rotten barrel with my name on it.', 'The fishmonger')>><</if>>
<p>The fish are already laid out. Their skins grow tacky while you decide how to preserve them.</p>
<<if setup.dockWorkTaskAvailable('cure_salt')>><div><<link "Use your own salt" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('cure_salt')>><</link>></div><</if>>
<<if setup.dockWorkTaskAvailable('cure_fetch')>><div><<link "Run to the stores for dry salt" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('cure_fetch')>><</link>></div><</if>>
<div><<link "Test the damp salt and pack carefully" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('cure_test')>><</link>></div>
<div><<link "Pack the barrel as it is" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('cure_pack')>><</link>></div></div><</nobr>><<nobr>><<set _owner = setup.dockWorkTrialNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>The morning nets have brought more than fish. Small shellfish lie tangled among the weed, some tightly closed, others open and smelling of mud. A careless sort would send spoiled food to a cooking pot.</p>
<<set _bond = setup.dockWorkRelationshipContext(_owner)>>
<<if _bond.level >= 1>><<print setup.npcEventDialogueHtml(_owner, 'Come here. I can show you the trick I use when the shells all look alike. We have time to do this together, and you can keep a few of the good ones.', 'The fishmonger')>>
<<else>><<print setup.npcEventDialogueHtml(_owner, 'Keep the sound ones. Throw the doubtful ones back. Take your time if you have to; I would sooner lose a basket than make someone ill.', 'The fishmonger')>><</if>>
<p>A porter sets two empty baskets beside you and leaves the choice of method to you.</p>
<<if setup.dockWorkTaskAvailable('shell_sort')>><div><<link "[Intelligence] Sort by shell and scent" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('shell_sort')>><</link>></div><</if>>
<div><<link "Rinse and inspect them one by one" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('shell_rinse')>><</link>></div>
<<if setup.dockWorkTaskAvailable('shell_friend')>><div><<link "Ask him to show you his sorting trick" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('shell_friend')>><</link>></div><</if>>
<div><<link "Ask to keep a few sound shellfish as your share" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('shell_keep')>><</link>></div></div><</nobr>><<nobr>><<set _porter = setup.dockWorkPortraitNpc('porter')>><div class="npc-activity-panel farm-work-event-panel">
<p>The afternoon heat settles under the canvas awning. You and a porter work shoulder to shoulder, wrapping fish for the road while the rest of the crew carries the heavier baskets outside. Your sleeves stick to your arms, and he notices when you pause to push back your hair.</p>
<<set _bond = setup.dockWorkRelationshipContext(_porter)>>
<<if _bond.knownOtherPartner>><<print setup.npcEventDialogueHtml(_porter, 'It is close under here. I should mind the parcels and give you room; neither of us needs the crew carrying another story home.', 'The porter')>>
<<elseif _bond.stage is 'partner'>><<print setup.npcEventDialogueHtml(_porter, 'I thought working beside you would make this shift easier. Instead I keep wanting to pull you close. Tell me to concentrate and I will try.', 'The porter')>>
<<elseif _bond.stage is 'romantic'>><<print setup.npcEventDialogueHtml(_porter, 'We were meant to wrap fish, not stand here remembering the last time we were alone. Do you want me to stop talking?', 'The porter')>>
<<elseif _bond.stage is 'friend'>><<print setup.npcEventDialogueHtml(_porter, 'You know I can finish these parcels faster when someone keeps me company. I promise not to blame you if I lose my place.', 'The porter')>>
<<else>><<print setup.npcEventDialogueHtml(_porter, 'We can keep our hands on the work, if that is what you want. Though you are making it rather hard for me to think about fish.', 'The porter')>><</if>>
<p>He waits for your answer without touching you. The work still needs doing, whichever way you respond.</p>
<div><<link "Keep the talk on the work" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('heat_focus')>><</link>></div>
<div><<link "Tease him while you finish packing" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('heat_tease')>><</link>></div>
<<if setup.dockWorkTaskAvailable('heat_kiss')>><div><<link "Steal a brief kiss before returning to work" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('heat_kiss')>><</link>></div><</if>>
<<if setup.dockWorkTaskAvailable('heat_command')>><div><<link "[Dominant] Put him to work and make him earn your attention" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('heat_command')>><</link>></div><</if>></div><</nobr>><<nobr>><<set _owner = setup.dockWorkTrialNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>A buyer has taken two baskets, but his receipt carries no mark. His runner insists the tally is wrong and will not pay until someone settles it. The fishmonger puts the board in your hands before the argument gathers a crowd.</p>
<<set _bond = setup.dockWorkRelationshipContext(_owner)>>
<<if _bond.stage is 'partner'>><<print setup.npcEventDialogueHtml(_owner, 'You know where I keep the full ledger. Take it with you if the marks on this board are not enough. I trust you to settle the account without making a spectacle of us.', 'The fishmonger')>>
<<elseif _bond.level >= 1>><<print setup.npcEventDialogueHtml(_owner, 'I will let you see my ledger if you need it. Count the baskets first, then tell me whether the runner owes us or I have made a mistake.', 'The fishmonger')>>
<<else>><<print setup.npcEventDialogueHtml(_owner, 'Go to him. Count what left my pier, and come back with either the money or an honest reason why I am not getting it.', 'The fishmonger')>><</if>>
<p>The runner waits by the cart, already impatient. You can compare the tally, win him over, or return with the dispute unresolved.</p>
<<if setup.dockWorkTaskAvailable('receipt_reconcile')>><div><<link "[Intelligence] Reconcile the baskets with the tally" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('receipt_reconcile')>><</link>></div><</if>>
<<if setup.dockWorkTaskAvailable('receipt_persuade')>><div><<link "[Charisma] Persuade the runner to check his cart" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('receipt_persuade')>><</link>></div><</if>>
<<if setup.dockWorkTaskAvailable('receipt_friend')>><div><<link "Compare the receipt with his private ledger" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('receipt_friend')>><</link>></div><</if>>
<div><<link "Return and report the dispute" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('receipt_return')>><</link>></div>
<div><<link "Guess a number and ask him to pay it" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('receipt_guess')>><</link>></div></div><</nobr>><<nobr>><<set _porter = setup.dockWorkPortraitNpc('porter')>><div class="npc-activity-panel farm-work-event-panel">
<p>A cart rattles away with the good catch while the one waiting for the market holds the cheaper river fish. You spot the switched labels just as the first driver turns toward the upper road. The porter follows your gaze and swears under his breath.</p>
<<set _bond = setup.dockWorkRelationshipContext(_porter)>>
<<if _bond.level >= 1>><<print setup.npcEventDialogueHtml(_porter, 'You take the cart on the road and I will stop the one here, or give me another plan. We have worked together long enough that I will follow your lead.', 'The porter')>>
<<else>><<print setup.npcEventDialogueHtml(_porter, 'That load belongs at the market. We have a moment to stop him. Tell me what you want me to do.', 'The porter')>><</if>>
<p>You could run after the cart, send a shout down the pier, or quietly exchange the labels and hope nobody checks.</p>
<<if setup.dockWorkTaskAvailable('cart_chase')>><div><<link "[Fitness] Chase the departing cart" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('cart_chase')>><</link>></div><</if>>
<div><<link "Call the mistake out and halt both carts" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('cart_announce')>><</link>></div>
<<if setup.dockWorkTaskAvailable('cart_friend')>><div><<link "Split up and stop a cart each" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('cart_friend')>><</link>></div><</if>>
<div><<link "Swap the labels without telling anyone" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('cart_swap')>><</link>></div></div><</nobr>><<nobr>><<set _owner = setup.dockWorkTrialNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>A customer returns a clean receipt with a note folded inside it. She asks you to bring it to the fishmonger yourself, away from the men shouting over the unloading. The paper is closed, but her smile makes the errand feel less ordinary than a tally run.</p>
<<set _bond = setup.dockWorkRelationshipContext(_owner)>>
<<if _bond.stage is 'partner'>><<print setup.npcEventDialogueHtml(_owner, 'Another customer who wants to keep secrets? Give me the note. You can tell me what you think of her after the carts leave; I would rather have a quiet moment with you than another errand.', 'The fishmonger')>>
<<elseif _bond.knownOtherPartner>><<print setup.npcEventDialogueHtml(_owner, 'A private note? Hand it over. I have enough to explain at home without the crew inventing stories about this one.', 'The fishmonger')>>
<<elseif _bond.stage is 'romantic'>><<print setup.npcEventDialogueHtml(_owner, 'You chose to bring this to me yourself. Is the note the only thing you wanted me to read, or do you have something to say once we are alone?', 'The fishmonger')>>
<<elseif _bond.stage is 'friend'>><<print setup.npcEventDialogueHtml(_owner, 'You look like you have a story to go with that paper. Give it here, then tell me what the customer actually said.', 'The fishmonger')>>
<<else>><<print setup.npcEventDialogueHtml(_owner, 'A private note? Give it here, then. Unless you have something you would rather say to my face.', 'The fishmonger')>><</if>>
<p>He holds out his hand and studies you over the top of the ledger. You can keep the exchange businesslike, answer his invitation, or try to read the note first.</p>
<div><<link "Hand over the note and return to work" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('note_deliver')>><</link>></div>
<<if setup.dockWorkTaskAvailable('note_flirt')>><div><<link "Flirt before giving him the note" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('note_flirt')>><</link>></div><</if>>
<<if setup.dockWorkTaskAvailable('note_partner')>><div><<link "Ask for a quiet moment together after work" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('note_partner')>><</link>></div><</if>>
<<if setup.dockWorkTaskAvailable('note_read')>><div><<link "[Literacy] Read the note before handing it over" "DockWorkAssignmentOutcome">><<run setup.dockWorkResolveTaskChoice('note_read')>><</link>></div><</if>></div><</nobr>><<nobr>><<set _result = $dockWorkTaskResult>><<set _owner = setup.dockWorkTrialNpc()>><<set _porter = setup.dockWorkPortraitNpc('porter')>><<set _ownerBond = setup.dockWorkRelationshipContext(_owner)>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The shift has moved on.</p>[[Return to the piers|Ambercross Piers]]
<<else>>
<<if _result.choiceId is 'cure_salt'>><p>You open your own salt and work it between the fish, checking every layer before closing the barrel. The fishmonger tests the lid, then sets aside a new order for the next market cart.</p><<print setup.npcEventDialogueHtml(_owner, 'That is a barrel I can put my name on. Come back when the trader asks for the rest.', 'The fishmonger')>>
<</if>><<if _result.choiceId is 'cure_fetch'>><p>You return breathless with a dry sack from the stores. The fishmonger makes room for you at the bench, and together you repack the fish before the trader grows tired of waiting.</p><<print setup.npcEventDialogueHtml(_owner, 'A longer errand than I wanted, but the catch will keep. Next time we check the salt before the carts arrive.', 'The fishmonger')>>
<</if>><<if _result.choiceId is 'cure_test' and !_result.failed>><p>You press a pinch of the damp salt into the first layer and wait. The moisture stays in the fish, but the outer grains draw it away cleanly; you turn the layers until you are satisfied the barrel will hold.</p><<print setup.npcEventDialogueHtml(_owner, 'You watched it instead of guessing. Good. Seal it.', 'The fishmonger')>>
<</if>><<if (_result.choiceId is 'cure_test' and _result.failed) or _result.choiceId is 'cure_pack'>><p>The barrel is closed, but brine seeps past the rim before the cart departs. The fishmonger puts a chalk mark on the lid and tells the driver to hold it. Tomorrow you will have to account for what can still be saved.</p><<print setup.npcEventDialogueHtml(_owner, 'I warned you about that salt. We will open it again when the rush is over.', 'The fishmonger')>>
<</if>><<if _result.choiceId is 'shell_sort' and !_result.failed>><p>You learn the feel of a sound shell as you work. By the end, the good ones fill a clean basket and the doubtful ones are back in the water. The fishmonger lets you keep a few for a meal of your own.</p><<print setup.npcEventDialogueHtml(_owner, 'You have an eye for this. Better that than finding the bad ones in a cooking pot.', 'The fishmonger')>>
<</if>><<if _result.choiceId is 'shell_sort' and _result.failed>><p>You are less certain than you hoped. The fishmonger checks the basket and pulls out several shells you thought were sound. He shows you the sour edge of their scent before throwing them back.</p><<print setup.npcEventDialogueHtml(_owner, 'When you cannot tell, set them aside. No one loses sleep over a smaller basket.', 'The fishmonger')>>
<</if>><<if _result.choiceId is 'shell_friend'>><p>You draw your basket close to his. He shows you how a sound shell resists the slightest pressure and makes you test the next few yourself. By the time the catch is sorted, you can tell which ones he would reject before he says a word. He puts a small portion aside for you.</p><<print setup.npcEventDialogueHtml(_owner, 'There. Now you can show me when I get careless. Keep those for your supper.', 'The fishmonger')>>
<</if>><<if _result.choiceId is 'shell_rinse'>><p>The slow rinse leaves your fingers cold, but it gives you time to examine each shell. The clean basket is smaller than the pile you began with, and safe enough for the kitchens.</p>
<</if>><<if _result.choiceId is 'shell_keep'>><p>You ask plainly for a few of the sound shellfish. The fishmonger gives you a small portion after the order is filled, then points you back to the baskets that still need sorting.</p>
<</if>><<if _result.choiceId is 'heat_focus'>><p>You keep your hands busy and answer his teasing with a request for another sheet of wrapping. He understands the boundary and works beside you without another remark. The last parcel is tied before the others return.</p><<print setup.npcEventDialogueHtml(_porter, 'All right. Fish first. I can manage that.', 'The porter')>>
<</if>><<if _result.choiceId is 'heat_tease'>><p>You lean close enough to make him miss a knot, then make him tie it again. His attention follows your hands when you fold the next parcel. The game leaves you warmer than the awning alone could account for.</p><<print setup.npcEventDialogueHtml(_porter, 'You know exactly what you are doing to me. Now let me finish this before someone comes back.', 'The porter')>>
<</if>><<if _result.choiceId is 'heat_command'>><p>You hand him the heaviest stack and make him match your pace. He stops teasing long enough to prove himself, then grins when you inspect the finished parcels. A few extra coins find their way into your wage.</p><<print setup.npcEventDialogueHtml(_porter, 'There. Did I earn another look?', 'The porter')>>
<</if>><<if _result.choiceId is 'heat_kiss'>><p>You wait until the crew passes beyond the awning, then draw him close for a brief kiss. He answers it without letting go of the parcel in his hand. When the next worker calls for the load, you step apart and finish tying it with far less concentration than before.</p><<print setup.npcEventDialogueHtml(_porter, 'I can finish the shift. I am not promising to stop thinking about that.', 'The porter')>>
<</if>><<if _result.choiceId is 'receipt_reconcile' and !_result.failed>><p>You lay the marks beside the basket count. One mark belongs to yesterday's catch; once it is struck through, the runner can see what he owes. He pays, and the fishmonger checks your count without changing a figure.</p><<print setup.npcEventDialogueHtml(_owner, 'That is why I sent you instead of shouting across the pier. Put the payment here.', 'The fishmonger')>>
<</if>><<if _result.choiceId is 'receipt_persuade' and !_result.failed>><p>You keep your voice level until the runner agrees to open the cart. He finds the missing basket beneath a cloth and pays rather than argue in front of the driver. The fishmonger watches him leave, amused.</p><<print setup.npcEventDialogueHtml(_owner, 'You got farther with words than I would have. I would have called him a thief.', 'The fishmonger')>>
<</if>><<if _result.choiceId is 'receipt_friend' and !_result.failed>><p>The private ledger gives you the missing context: one basket was credited to a buyer who never took it. You correct the receipt in front of the runner and bring back payment for the actual order. The fishmonger takes the ledger from you with a look of relief.</p><<print setup.npcEventDialogueHtml(_owner, 'I do not hand that book to just anyone. You gave it back with the account straight.', 'The fishmonger')>>
<</if>><<if _result.choiceId is 'receipt_friend' and _result.failed>><p>Even with the private ledger, you cannot find a clean answer before the runner leaves. The fishmonger takes the book back and pins the disputed receipt beside it. He is disappointed by the missing payment, but does not turn your attempt to help into an accusation.</p><<print setup.npcEventDialogueHtml(_owner, 'You tried with the whole account in front of you. We will face him together when he comes back.', 'The fishmonger')>>
<</if>><<if (_result.choiceId is 'receipt_reconcile' or _result.choiceId is 'receipt_persuade') and _result.failed>><p>The marks refuse to settle the argument. The runner drives off with the baskets and no payment, leaving you to bring a bad tally back to the fishmonger. He pins the disputed receipt where it cannot be forgotten.</p><<print setup.npcEventDialogueHtml(_owner, 'We will take this up when he comes through again. Keep the receipt.', 'The fishmonger')>>
<</if>><<if _result.choiceId is 'receipt_return'>><p>You return without taking a guess. The fishmonger sends another worker to hold the cart while he checks the account himself. It takes time, but no false number enters the ledger.</p>
<</if>><<if _result.choiceId is 'receipt_guess'>><p>The runner pays the figure you name, though you cannot show how you reached it. When the fishmonger compares the coins with his board, the sum is short. He puts the receipt aside for tomorrow.</p><<print setup.npcEventDialogueHtml(_owner, 'A confident guess is still a guess. We are going to find the missing coin.', 'The fishmonger')>>
<</if>><<if _result.choiceId is 'cart_chase' and !_result.failed>><p>You catch the driver before the upper road. He curses the delay, but turns back when you show him the labels. Both carts leave with the right loads, and your legs ache pleasantly once you stop running.</p><<print setup.npcEventDialogueHtml(_porter, 'I thought you would miss him. Remind me not to wager against you.', 'The porter')>>
<</if>><<if _result.choiceId is 'cart_chase' and _result.failed>><p>You run until the cart is lost beyond the bend. By the time you return, the second driver has gone as well. The porter helps you write down both routes so the wrong buyer can be found tomorrow.</p><<print setup.npcEventDialogueHtml(_porter, 'You tried. Now we track the loads instead of pretending they went to the right people.', 'The porter')>>
<</if>><<if _result.choiceId is 'cart_announce'>><p>Your shout stops the near cart, and the porter carries it farther down the pier. The first driver turns back to see what the commotion is. You correct the labels in front of both men, leaving no doubt about the loads.</p>
<</if>><<if _result.choiceId is 'cart_friend'>><p>You and the porter split without another explanation. He stops the cart at the landing while you catch the one on the upper road. By the time the drivers meet again, both loads are accounted for. The porter grins at how little you had to say to work together.</p><<print setup.npcEventDialogueHtml(_porter, 'That went better than shouting. I knew you would take the road.', 'The porter')>>
<</if>><<if _result.choiceId is 'cart_swap'>><p>You exchange the labels without stopping either driver. For a moment it seems to work, until you see the market seal already tied to the wrong basket. You take the extra coin offered for speed, knowing someone may bring the error back.</p>
<</if>><<if _result.choiceId is 'note_deliver'>><p>You give the fishmonger the folded note and wait while he reads it. He files it beneath the day's receipts, then asks you to take the empty basket back to the customer. His expression gives nothing away.</p>
<</if>><<if _result.choiceId is 'note_flirt'>><p>You make him wait for the note while you tell him the customer wanted it delivered privately. His eyes linger on you, and he lowers his voice before taking the paper. The promise of another private errand stays with you through the rest of the shift.</p><<if _ownerBond.knownOtherPartner>><<print setup.npcEventDialogueHtml(_owner, 'Come back when the carts have gone. If we speak privately, we should both understand what that might cost outside this stall.', 'The fishmonger')>><<else>><<print setup.npcEventDialogueHtml(_owner, 'Come back tomorrow when the carts have gone. I may have work I would rather discuss without an audience.', 'The fishmonger')>><</if>>
<</if>><<if _result.choiceId is 'note_partner'>><p>You hand him the note, then ask him to put the ledger aside for a little while after the carts leave tomorrow. He catches your hand before you return to the baskets. The invitation is between the two of you, not another bargain for wages.</p><<print setup.npcEventDialogueHtml(_owner, 'I would like that. Come back after the work is done and I will make time for us.', 'The fishmonger')>>
<</if>><<if _result.choiceId is 'note_read' and !_result.failed>><p>You sound out the short note before giving it over: the customer wants a quieter delivery next time and has written a compliment about the person who brought this one. The fishmonger catches you folding it closed.</p><<print setup.npcEventDialogueHtml(_owner, 'You could have asked me. Now tell me what she wrote.', 'The fishmonger')>>
<</if>><<if _result.choiceId is 'note_read' and _result.failed>><p>You cannot make sense of the note before he notices. He takes it without an argument, but the errand ends under a cool look.</p><</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>><<print _result.bonusHtml>><<print _result.itemHtml>><<print _result.standingHtml>><<print _result.relationshipHtml>><<print _result.arousalHtml>><<print _result.intimateHtml>><<print _result.personalityHtml>>
<<set $dockWorkTaskResult = null>><div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div><</if>></div><</nobr>><<nobr>><<set _lead = $dockWorkAssignmentLeads.catch>><<set _owner = setup.dockWorkTrialNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_lead>><p>There is no old order to settle.</p>[[Return to the piers|Ambercross Piers]]
<<elseif _lead.kind is 'special_order'>>
<p>The barrel you helped save has arrived in good condition. The trader wants one more before he takes the inland road, and the fishmonger has set a fresh catch aside. There is enough time to pack it properly if you stay after the ordinary shift.</p>
<<if setup.dockWorkRelationshipContext(_owner).level >= 1>><<print setup.npcEventDialogueHtml(_owner, 'The trader came back because of the barrel we saved together. Stay and fill another with me for extra pay, or take a fish home. Either way, I wanted you to hear the good news from me.', 'The fishmonger')>><<else>><<print setup.npcEventDialogueHtml(_owner, 'Your salt kept the first one sound. I can pay extra for another hour at the bench, or you can take a fish from this catch and call us even.', 'The fishmonger')>><</if>>
<<if setup.dockWorkTaskAvailable('catch_follow_extra')>><div><<link "Stay and fill the second order" "DockWorkAssignmentFollowupOutcome">><<run setup.dockWorkResolveTaskChoice('catch_follow_extra')>><</link>></div><</if>>
<div><<link "Take a fish as your share" "DockWorkAssignmentFollowupOutcome">><<run setup.dockWorkResolveTaskChoice('catch_follow_fish')>><</link>></div>
<<else>>
<p>The marked barrel is still on the pier. When you lift the lid, a sour smell rises through the brine. Some of the catch may yet be saved, but someone must sort it before the trader sees the damage.</p>
<<if setup.dockWorkRelationshipContext(_owner).level >= 1>><<print setup.npcEventDialogueHtml(_owner, 'I know you did not mean for this to happen. Help me save what we can, with dry salt or your time. If you need to walk away, say it plainly; I would rather have the truth from you.', 'The fishmonger')>><<else>><<print setup.npcEventDialogueHtml(_owner, 'We do not sell this as it stands. Help me make it right, give me dry salt if you have it, or walk away. I will remember which you choose.', 'The fishmonger')>><</if>>
<<if setup.dockWorkTaskAvailable('catch_follow_salt')>><div><<link "Use your salt to save the sound fish" "DockWorkAssignmentFollowupOutcome">><<run setup.dockWorkResolveTaskChoice('catch_follow_salt')>><</link>></div><</if>>
<<if setup.dockWorkTaskAvailable('catch_follow_repack')>><div><<link "Stay and repack what can be saved" "DockWorkAssignmentFollowupOutcome">><<run setup.dockWorkResolveTaskChoice('catch_follow_repack')>><</link>></div><</if>>
<div><<link "Leave the spoiled order to him" "DockWorkAssignmentFollowupOutcome">><<run setup.dockWorkResolveTaskChoice('catch_follow_walk')>><</link>></div><</if>></div><</nobr>><<nobr>><<set _lead = $dockWorkAssignmentLeads.errands>><<set _owner = setup.dockWorkTrialNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_lead>><p>The day's accounts have already been settled.</p>[[Return to the piers|Ambercross Piers]]
<<elseif _lead.kind is 'private_invite'>><<set _bond = setup.dockWorkRelationshipContext(_owner)>>
<p>The last cart rolls away, leaving the ledger and a stack of empty baskets between you and the fishmonger. He remembers what you said over the customer's note. He has paid work to offer, but his look makes clear that it is not the only possibility on his mind.</p>
<<if _bond.stage is 'partner'>><<print setup.npcEventDialogueHtml(_owner, 'I kept my word and made time for us. You can help with the accounts, leave if you are tired, or stay with me behind the stall. I would like your hand on me, but this is not another part of your wage.', 'The fishmonger')>>
<<elseif _bond.knownOtherPartner>><<print setup.npcEventDialogueHtml(_owner, 'I have another life beyond this pier, and you know it. You can help with the accounts for extra coin or leave. If you choose the private offer, give me a handjob behind the stall for two more coins; do not pretend it is without consequences.', 'The fishmonger')>>
<<elseif _bond.stage is 'romantic'>><<print setup.npcEventDialogueHtml(_owner, 'I wanted another moment alone with you. We can work through the accounts, or you can leave. If you want me too, meet me behind the stall and give me a handjob. I will add two coins, but I hope you know the money is not why I asked.', 'The fishmonger')>>
<<else>><<print setup.npcEventDialogueHtml(_owner, 'I meant what I said. You can help me finish the accounts for extra coin, or leave. If you want the private offer, give me a handjob behind the stall and I will pay two more coins. Say yes only if you want to; I will not mistake a smile for an answer.', 'The fishmonger')>><</if>>
<<if setup.dockWorkTaskAvailable('errand_follow_extra')>><div><<link "Stay and finish the accounts" "DockWorkAssignmentFollowupOutcome">><<run setup.dockWorkResolveTaskChoice('errand_follow_extra')>><</link>></div><</if>>
<<if setup.dockWorkAssignmentPrivateAvailable()>><div><<link "Meet him behind the stall (handjob)">><<set _start = setup.dockWorkStartErrandPrivate()>><<if _start.success>><<goto 'NPCEncounter'>><<else>><<goto 'DockWorkErrandFollowup'>><</if>><</link>></div><</if>>
<div><<link "Thank him and leave for the day" "DockWorkAssignmentFollowupOutcome">><<run setup.dockWorkResolveTaskChoice('errand_follow_decline')>><</link>></div>
<<else>>
<<if _lead.kind is 'wrong_delivery'>><p>A buyer has returned with the wrong baskets. The seals show which cart took which load, but the drivers blame each other. The fishmonger lays both delivery slips on the counter and waits for you to help untangle them.</p>
<<else>><p>The runner has come back, still insisting he paid the right amount. The fishmonger sets yesterday's receipt beside today's ledger. A missing coin will not ruin him, but an uncertain account will invite the next buyer to try the same thing.</p><</if>>
<<if setup.dockWorkRelationshipContext(_owner).level >= 1>><<print setup.npcEventDialogueHtml(_owner, 'Let us settle this while everyone is here. I will speak to the buyer if you check the marks, or we can find the driver together. You can leave it with me, too. I want an honest answer, not another guess.', 'The fishmonger')>><<else>><<print setup.npcEventDialogueHtml(_owner, 'We settle this while everyone is here to answer for it. Check the marks, find the right cart or payment, or tell me you will not help. No more guessing.', 'The fishmonger')>><</if>>
<<if setup.dockWorkTaskAvailable('errand_follow_recount')>><div><<link "[Intelligence] Recount the slips and ledger" "DockWorkAssignmentFollowupOutcome">><<run setup.dockWorkResolveTaskChoice('errand_follow_recount')>><</link>></div><</if>>
<<if setup.dockWorkTaskAvailable('errand_follow_find')>><div><<link "Find the driver and settle it in person" "DockWorkAssignmentFollowupOutcome">><<run setup.dockWorkResolveTaskChoice('errand_follow_find')>><</link>></div><</if>>
<div><<link "Leave the dispute with the fishmonger" "DockWorkAssignmentFollowupOutcome">><<run setup.dockWorkResolveTaskChoice('errand_follow_leave')>><</link>></div><</if>></div><</nobr>><<nobr>><<set _result = $dockWorkTaskResult>><<set _owner = setup.dockWorkTrialNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The matter is already settled.</p>[[Return to the piers|Ambercross Piers]]
<<else>>
<<if _result.choiceId is 'catch_follow_extra'>><p>You spend another hour at the bench, layering the fresh catch until the barrel is full. The trader checks the seal and pays before leaving. Your arms ache, but the extra coins are yours.</p><<print setup.npcEventDialogueHtml(_owner, 'He will ask for another next market day. You made this one worth the trouble.', 'The fishmonger')>>
<<elseif _result.choiceId is 'catch_follow_fish'>><p>You take a fish from the clean catch. The trader's second barrel will have to wait for another pair of hands, but the first order is complete and the fishmonger owes you nothing further.</p>
<<elseif _result.choiceId is 'catch_follow_salt'>><p>Your dry salt saves the firmest fish. The rest goes into a discard basket. The fishmonger closes the sound portion in a smaller barrel and marks the old order resolved.</p><<print setup.npcEventDialogueHtml(_owner, 'There is still a loss, but you have stopped it growing. I can sell what remains honestly.', 'The fishmonger')>>
<<elseif _result.choiceId is 'catch_follow_repack'>><p>You stay to sort every layer. By the time the spoiled fish are thrown away, the remaining catch can be packed for local sale. It is tedious work, but the fishmonger does it beside you rather than leaving you alone with the smell.</p>
<<elseif _result.choiceId is 'catch_follow_walk'>><p>You leave the barrel where it stands. The fishmonger calls another worker to help him empty it. He pays the wage for the shift already done, but watches you go without a word.</p>
<<elseif _result.choiceId is 'errand_follow_recount' and !_result.failed>><p>You work backward through the marks until the error reveals itself: a basket counted twice, or a payment entered against the wrong buyer. The fishmonger corrects the ledger in front of everyone, and the argument finally ends.</p><<print setup.npcEventDialogueHtml(_owner, 'There it is. Next time we settle the count before a cart leaves.', 'The fishmonger')>>
<<elseif _result.choiceId is 'errand_follow_recount'>><p>The numbers still refuse to agree. The fishmonger takes the slips and closes the disputed account at his own cost. He appreciates that you tried, but the missing payment remains a lesson for both of you.</p>
<<elseif _result.choiceId is 'errand_follow_find'>><p>You find the driver unloading at the far end of the quay. With the fishmonger beside you, the baskets and coins are finally set against the right slips. You return late and tired, but no one can claim the matter was ignored.</p>
<<elseif _result.choiceId is 'errand_follow_leave'>><p>You say the account is his to settle. He nods once and calls for another worker. The ordinary wage is still yours, though your refusal makes the next errand less likely to come your way.</p>
<<elseif _result.choiceId is 'errand_follow_extra'>><p>You remain after the carts leave and sort the day's receipts by buyer. The fishmonger works across from you and keeps his promise that this is paid work and nothing more.</p><<if setup.dockWorkRelationshipContext(_owner).stage is 'partner'>><<print setup.npcEventDialogueHtml(_owner, 'Thank you for staying with me. The extra coin is for the accounts. Come sit with me afterward if you still have the energy.', 'The fishmonger')>><<else>><<print setup.npcEventDialogueHtml(_owner, 'Thank you for staying. The extra coin is for the accounts, whatever else I may have hoped for.', 'The fishmonger')>><</if>>
<<else>><p>You thank him for the offer and head back toward the open pier. He accepts the answer without argument, and the ledger stays on his side of the counter.</p><</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>><<print _result.bonusHtml>><<print _result.itemHtml>><<print _result.standingHtml>><<print _result.arousalHtml>><<print _result.personalityHtml>>
<<if _result.choiceId is 'errand_follow_decline'>><p>The invitation still comes to mind on your way off the pier, but leaving was your answer.</p><<print setup.jobRefusedIntimacyHtml(_result, 'private_errand')>><</if>>
<<set $dockWorkTaskResult = null>><div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div><</if>></div><</nobr>><<nobr>><<set _favor = $dockWorkEventFavorResult>><<set _owner = setup.dockWorkTrialNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if _favor and _favor.paid>>
<<if setup.dockWorkRelationshipContext(_owner).stage is 'partner'>><p>You return to the quiet counter together. He closes the ledger instead of finding another task to keep you there, and rests his hand briefly over yours. Your wage is unchanged; the time you shared was never part of the bargain.</p><<print setup.npcEventDialogueHtml(_owner, 'I am glad you stayed. We can go home when the last basket is put away.', 'The fishmonger')>>
<<else>><p>You return from the private meeting while the pier grows quiet. The fishmonger has left the extra coins beside the ledger, separate from your ordinary wage. He looks up when you take them, then closes the book for the night.</p><<print setup.npcEventDialogueHtml(_owner, 'We agreed on this. The rest is between us, and tomorrow you can choose your work as before.', 'The fishmonger')>><p class="farm-work-gain-line">Private arrangement: <b id="Goldgain">+<<= _favor.gold >> Gold</b></p><</if>><<if _favor.standingHtml>><<print _favor.standingHtml>><</if>>
<<else>><p>The private arrangement did not take place. Your ordinary wage remains yours, and the fishmonger turns back to his work without demanding an explanation.</p><</if>>
<<print setup.dockWorkRewardHtml($lastDockWorkResult)>><<set $dockWorkEventFavorResult = null>><div class="farm-trial-result-link">[[Finish work|Ambercross Piers]]</div></div><</nobr>><<nobr>><<set _guest = setup.tavernWorkEventGuest()>><div class="npc-activity-panel farm-work-event-panel">
<p>You have carried three rounds to the same corner table. The final cup is still in your hand when <<print setup.npcEventMentionHtml(_guest, "a patron")>> slides four coins across the boards, well beyond the price of another ale. The room is noisy enough that nobody hears the invitation beneath it.</p>
<<if _guest and _guest.gender is "female">><<print setup.npcEventDialogueHtml(_guest, "One coin for the drink. The rest if you come behind the stairs and use those fingers on me. I have watched your hands all evening.", "The patron")>>
<<else>><<print setup.npcEventDialogueHtml(_guest, "One coin for the drink. The rest if you come behind the stairs and give me a handjob. I have watched your hands all evening.", "The patron")>><</if>>
<p>The coins remain on the table. You can take the order, negotiate the tip, or consider the private offer. None of those choices changes the wage you have already earned.</p>
<div class="npc-activity-choice-list"><div><<link "Hear what they expect" "TavServePrivateAnswer">><</link>></div><div><<link "Serve the drink and refuse the offer" "TavServePrivateResult">><<run setup.tavernWorkResolveEventChoice("private_refuse")>><</link>></div></div>
</div><</nobr>><<nobr>><<set _guest = setup.tavernWorkEventGuest()>><div class="npc-activity-panel farm-work-event-panel">
<p>You set the cup down without touching the coins. <span class="dialogue-line dialogue-player">"If I step away from this room, someone will ask where I went. Say plainly what you are paying for."</span></p>
<p><<print setup.npcEventMentionHtml(_guest, "The patron")>> glances toward the back stairs, then back to you. The direct answer leaves little room to pretend this is a joke. Even a refusal will not make the thought disappear as quickly as the drink.</p>
<div class="npc-activity-choice-list">
<<if setup.tavernWorkEventChoiceAvailable("private_bargain")>><div><<set _label = setup.playerAttributeChoiceLabel("charisma", "Talk them into paying for your company, not your body")>><<link _label "TavServePrivateResult">><<run setup.tavernWorkResolveEventChoice("private_bargain")>><</link>></div><</if>>
<<if setup.tavernWorkPrivateFavorAvailable()>><div><<set _label = _guest and _guest.gender is "female" ? "Go behind the stairs (fingering)" : "Go behind the stairs (handjob)">><<link _label>><<set _start = setup.tavernWorkStartPrivateFavor()>><<if _start.success>><<goto "NPCEncounter">><<else>><<goto "TavServePrivateAnswer">><</if>><</link>></div><</if>>
<div><<link "Take only the price of the drink" "TavServePrivateResult">><<run setup.tavernWorkResolveEventChoice("private_refuse")>><</link>></div></div>
</div><</nobr>><<nobr>><<set _result = $tavernWorkEventResult>><<set _guest = setup.tavernWorkEventGuest()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The table has already settled its bill.</p><<else>>
<<if _result.choiceId is "private_refuse">><p>You count out the price of the drink and push the rest back across the table. <span class="dialogue-line dialogue-player">"The ale is yours. I am not on the bill."</span> They study your face, then close a hand over the returned coins. No argument follows you to the next table.</p>
<<else>><p>You lean on the table long enough to let them believe you might accept, then name your own price: three coins for conversation and a well-poured drink, nothing behind a closed door. They laugh at being outbid, but pay. When you finally move on, they know exactly which part of the bargain you kept.</p><<if _guest>><<print setup.npcEventDialogueHtml(_guest, "Fair. I asked. You answered. I will remember the answer before I ask again.", "The patron")>><</if>><</if>>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print _result.bonusHtml>><<print _result.arousalHtml>><<print _result.refusalHtml>><</if>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div></div><</nobr>><<nobr>><<set _favor = $tavernWorkPrivateFavorResult>><div class="npc-activity-panel farm-work-event-panel">
<<if _favor and _favor.paid>><p>You return to the common room before anyone has reason to look for you. The patron places the promised four coins in your hand beneath the edge of the bar. Your next order is already being shouted across the room, but the private interruption follows you through it.</p><p class="farm-work-gain-line">Private tip: <b id="Goldgain">+<<= _favor.gold >> Gold</b> <b id="Lustgain">+0.1 Carnality</b></p>
<<else>><p>The promised tip never changes hands. You return to the common room with your ordinary wage intact and the rest of the arrangement unfinished.</p><</if>>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div></div><</nobr>><<nobr>><<set _guest = setup.tavernWorkEventGuest()>><div class="npc-activity-panel farm-work-event-panel">
<p>The same patron has asked for you each time a mug runs dry. On your fourth visit, <<print setup.npcEventMentionHtml(_guest, "the regular")>> moves their cup aside instead of handing it over. Their attention has been following your walk through the room, and now they want you to notice it.</p>
<<print setup.npcEventDialogueHtml(_guest, "You keep coming back to my table. Tell me whether that is only because I pay for ale, or because you like the way I look at you.", "The regular")>>
<p>Behind you, the next order is already waiting. You have time for one answer before the room claims you again.</p>
<div class="npc-activity-choice-list"><div><<link "Keep the exchange professional" "TavServeRegularResult">><<run setup.tavernWorkResolveEventChoice("regular_focus")>><</link>></div><div>[[Answer their challenge|TavServeRegularAnswer]]</div></div>
</div><</nobr>><<nobr>><<set _guest = setup.tavernWorkEventGuest()>><div class="npc-activity-panel farm-work-event-panel">
<p>You pause with the empty mug between you. <span class="dialogue-line dialogue-player">"You are certain I came back for you? Perhaps you should give me a reason to remember this table."</span> They set down a coin, then another, never taking their eyes off yours.</p>
<p>The offer is a game, but the closeness is real. You can keep it to words, turn it into a brief kiss behind the stair, or take the coins and finish your route.</p>
<div class="npc-activity-choice-list"><div><<link "Flirt and take the tip" "TavServeRegularResult">><<run setup.tavernWorkResolveEventChoice("regular_flirt")>><</link>></div>
<<if setup.tavernWorkEventChoiceAvailable("regular_kiss")>><div><<link "Draw them behind the stair for a kiss" "TavServeRegularResult">><<run setup.tavernWorkResolveEventChoice("regular_kiss")>><</link>></div><</if>>
<div><<link "Take the empty mug and return to work" "TavServeRegularResult">><<run setup.tavernWorkResolveEventChoice("regular_focus")>><</link>></div></div>
</div><</nobr>><<nobr>><<set _result = $tavernWorkEventResult>><<set _guest = setup.tavernWorkEventGuest()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The table is empty by the time you return.</p><<elseif _result.choiceId is "regular_focus">><p>You lift the mug and tell them you will be back with another drink. The look they give you follows you halfway to the bar. You do not encourage it, but you cannot pretend you missed it either.</p>
<<elseif _result.choiceId is "regular_flirt">><p>You let your fingers linger over theirs when you collect the coin. <span class="dialogue-line dialogue-player">"Then you have bought one reason to remember me. Try not to spend it all at once."</span> Their grin lasts until your next circuit of the room. Your own pulse takes longer to settle.</p>
<<else>><p>You make them wait until the stairwell clears, then pull them into a kiss hidden by the turn of the wall. It lasts only a few breaths; the room beyond keeps calling for drinks. They release you with a look that promises this is not the last conversation, while you return to the bar knowing the kiss was your decision.</p><</if>>
<<if _result and !_result.invalid>><<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print _result.bonusHtml>><<print _result.arousalHtml>><<print _result.intimateHtml>><</if>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div></div><</nobr>><<nobr>><<set _guest = setup.tavernWorkEventGuest()>><<set _keeper = setup.tavernWorkInnkeeperNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>A guest at the upstairs landing waves a room tally in your face. <<print setup.npcEventMentionHtml(_guest, "The guest")>> says they paid for a bed and supper, but the ink includes a second jug of wine nobody brought. Their voice carries down to the common room, where other guests have begun listening.</p>
<<print setup.npcEventDialogueHtml(_guest, "I will pay for what I drank. I will not pay for someone else's cup because your book says I did. Count it in front of me.", "The guest")>>
<p>The mistake could be a crossed mark, a forgotten delivery, or a dishonest claim. You can check it yourself, settle the guest with tact, or bring the innkeeper into the dispute.</p>
<div class="npc-activity-choice-list">
<<if setup.tavernWorkEventChoiceAvailable("dispute_count")>><div><<set _label = setup.playerAttributeChoiceLabel("intelligence", "Reconcile the room tally")>><<link _label "TavServeDisputeResult">><<run setup.tavernWorkResolveEventChoice("dispute_count")>><</link>></div><</if>>
<<if setup.tavernWorkEventChoiceAvailable("dispute_charm")>><div><<set _label = setup.playerAttributeChoiceLabel("charisma", "Settle the complaint without an audience")>><<link _label "TavServeDisputeResult">><<run setup.tavernWorkResolveEventChoice("dispute_charm")>><</link>></div><</if>>
<<if setup.tavernWorkEventChoiceAvailable("dispute_honest")>><div><<link "[Honest] Admit the mark might be wrong" "TavServeDisputeResult">><<run setup.tavernWorkResolveEventChoice("dispute_honest")>><</link>></div><</if>>
<<if setup.tavernWorkEventChoiceAvailable("dispute_experience")>><div><<link "[Serving] Check the cellar copy of the tally" "TavServeDisputeResult">><<run setup.tavernWorkResolveEventChoice("dispute_experience")>><</link>></div><</if>>
<div><<link "Ask the innkeeper to check the account" "TavServeDisputeResult">><<run setup.tavernWorkResolveEventChoice("dispute_owner")>><</link>></div>
<div><<link "Insist the guest owes for the second jug" "TavServeDisputeResult">><<run setup.tavernWorkResolveEventChoice("dispute_accuse")>><</link>></div></div>
</div><</nobr>><<nobr>><<set _result = $tavernWorkEventResult>><<set _keeper = setup.tavernWorkInnkeeperNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The account has already been settled.</p><<elseif _result.choiceId is "dispute_count">><p>You trace the room number through three lines of hurried ink. The second wine belongs to another guest whose mark crossed the margin. You correct both entries and show the visitor the clean total. The guest pays, then leaves two coins in your hand for refusing to guess.</p>
<<elseif _result.choiceId is "dispute_charm">><p>You lower your voice and move the argument away from the listening stairs. You promise to check the cellar count before the guest pays for the disputed jug. The offer of a fair answer, rather than a public victory, calms them enough to settle the rest of the bill. They leave you a coin when the extra mark is struck.</p>
<<elseif _result.choiceId is "dispute_honest">><p>You tell the guest you cannot vouch for the second mark until you have checked it. They stop arguing long enough to follow you to the counter. The innkeeper finds the crossed line, removes the charge, and appreciates that you did not turn an uncertain tally into an accusation.</p><<if _keeper>><<print setup.npcEventDialogueHtml(_keeper, "Good. A guest can forgive a mistake more easily than a lie defended to their face.", "The innkeeper")>><</if>>
<<elseif _result.choiceId is "dispute_experience">><p>You have seen this sort of crossed mark before. The cellar copy lists only one jug for the room; the second belongs to a table downstairs. You bring both tallies back to the landing and correct them in front of the guest. Their shoulders drop, and the innkeeper nods when you return the book without needing to call him from the bar.</p>
<<elseif _result.choiceId is "dispute_accuse">><p>You point to the mark and insist the guest pay. They demand the innkeeper, who brings the cellar copy and finds the jug against another room. He refunds the guest and adds a drink for the public insult. Two coins come out of your wage, and his disappointment is harder to dismiss than the guest's anger.</p><<if _keeper>><<print setup.npcEventDialogueHtml(_keeper, "A tally is something to check, not a reason to call a paying guest a liar. Bring me the book next time.", "The innkeeper")>><</if>>
<<else>><p>You call the innkeeper with the ledger. Together you find the crossing mark and put it right. The guest's anger cools once someone with the book answers plainly. The room resumes its noise, and you remember which tally line caused the trouble.</p><<if _keeper>><<print setup.npcEventDialogueHtml(_keeper, "Good call. A wrong bill is cheaper to correct now than an angry guest is tomorrow.", "The innkeeper")>><</if>><</if>>
<<if _result and !_result.invalid>><<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print _result.bonusHtml>><<print _result.relationshipHtml>><</if>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div></div><</nobr>><<nobr>><<set _cook = setup.tavernWorkKitchenNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>The fish delivery arrives wet and late. A few are firm and fresh; others are soft at the belly and already smell wrong beneath the salt. The supper board promises fish tonight, but promising it does not make a bad catch safe to serve.</p>
<<print setup.npcEventDialogueHtml(_cook, "Sort the sound ones first. If there are not enough, tell me before I light the pan. I would rather rewrite the board than feed a guest something we should have thrown away.", "The kitchen worker")>>
<p>You have a narrow window to make the meal work. A quick guess might save the order, or leave tomorrow's kitchen answering for it.</p>
<div class="npc-activity-choice-list">
<<if setup.tavernWorkEventChoiceAvailable("catch_sort")>><div><<set _label = setup.playerAttributeChoiceLabel("intelligence", "Sort every fish by scent and firmness")>><<link _label "TavKitchenCatchResult">><<run setup.tavernWorkResolveEventChoice("catch_sort")>><</link>></div><</if>>
<<if setup.tavernWorkEventChoiceAvailable("catch_herbs")>><div><<link "Use your herbs to stretch the sound portion" "TavKitchenCatchResult">><<run setup.tavernWorkResolveEventChoice("catch_herbs")>><</link>></div><</if>>
<<if setup.tavernWorkEventChoiceAvailable("catch_protective")>><div><<link "[Protective] Stop the fish orders before anyone is served" "TavKitchenCatchResult">><<run setup.tavernWorkResolveEventChoice("catch_protective")>><</link>></div><</if>>
<<if setup.tavernWorkEventChoiceAvailable("catch_experience")>><div><<link "[Cooking] Change the supper board before service" "TavKitchenCatchResult">><<run setup.tavernWorkResolveEventChoice("catch_experience")>><</link>></div><</if>>
<div><<link "Reject the doubtful fish and change the board" "TavKitchenCatchResult">><<run setup.tavernWorkResolveEventChoice("catch_reject")>><</link>></div>
<div><<link "Make a quick judgment and keep the order" "TavKitchenCatchResult">><<run setup.tavernWorkResolveEventChoice("catch_risk")>><</link>></div></div>
</div><</nobr>><<nobr>><<set _result = $tavernWorkEventResult>><<set _cook = setup.tavernWorkKitchenNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The kitchen has moved on to the next order.</p>
<<elseif _result.choiceId is "catch_sort">><p>You cut the doubtful fish away from the sound catch and check each piece before it reaches the pan. The good portion is smaller than the order, but good enough to serve. The cook adjusts the board, then hands you a fresh fish from the spare basket for your own supper.</p>
<<elseif _result.choiceId is "catch_herbs">><p>You reject the fish that has turned and poach the safe portion with your herbs and a little onion. The fragrance fills the kitchen before the plates go out. The cook counts two extra coins into your hand for spending your own ingredients instead of gambling with a guest's meal.</p>
<<elseif _result.choiceId is "catch_protective">><p>You block the first plate at the hatch and tell the servers to stop promising fish. The cook checks the pan, then sends them out with a different supper while there is still time to change every order. The bad catch is discarded before anyone has to discover it by taste.</p><<if _cook>><<print setup.npcEventDialogueHtml(_cook, "You stopped it when it mattered. I can explain a changed board; I cannot explain a sick guest.", "The kitchen worker")>><</if>>
<<elseif _result.choiceId is "catch_experience">><p>You recognize the bad catch before the first pan is hot. Instead of promising fish you cannot safely serve, you move the sound portion to tomorrow's salt pot and write a replacement supper on the board. The servers have time to tell their tables, and no one is charged for a meal that never existed.</p>
<<elseif _result.choiceId is "catch_reject">><p>You show the cook what you would throw away, then change the board to a simpler supper. The announcement comes too late for one prepaid order; a coin from your wage covers the refund. No one at the tables eats a bad delivery, but the lost sale still stings.</p>
<<elseif _result.failed>><p>You move too quickly. A guest sends back a plate with a sour smell before eating more than a bite. The cook takes every remaining fish off the fire, refunds the table, and prepares a replacement meal. Two coins come out of your wage. Tomorrow, you will help account for what this mistake cost.</p><<if _cook>><<print setup.npcEventDialogueHtml(_cook, "We do not gamble with someone's supper. Come back tomorrow and help me make this right.", "The kitchen worker")>><</if>>
<<else>><p>Your quick inspection finds enough sound fish to fill the order. You set the soft ones aside before the pan is hot, and the plates leave the kitchen without a complaint. The cook gives you the extra coin for keeping the promise on the board.</p><</if>>
<<if _result and !_result.invalid>><<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print _result.bonusHtml>><<print _result.relationshipHtml>><<print _result.itemHtml>><</if>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div></div><</nobr>><<nobr>><<set _cook = setup.tavernWorkKitchenNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>A traveler pays for supper before explaining that the person waiting upstairs cannot stomach the heavy stew on the board. They want something warm, light, and worth the extra coin. The fire is busy, the bread is nearly gone, and the usual pot cannot be changed for one room.</p>
<<print setup.npcEventDialogueHtml(_cook, "We have roots, broth, and a little cheese. Make a proper dish from what is here, or tell the guest what we can honestly serve. Do not take their coin and send them a bowl of excuses.", "The kitchen worker")>>
<p>You can plan a separate dish, spend one of your own eggs to enrich it, or offer a simpler meal at the ordinary price.</p>
<div class="npc-activity-choice-list">
<<if setup.tavernWorkEventChoiceAvailable("order_plan")>><div><<set _label = setup.playerAttributeChoiceLabel("intelligence", "Build a light supper from the kitchen stores")>><<link _label "TavCookSpecialResult">><<run setup.tavernWorkResolveEventChoice("order_plan")>><</link>></div><</if>>
<<if setup.tavernWorkEventChoiceAvailable("order_eggs")>><div><<link "Use one of your eggs for a fresh dish" "TavCookSpecialResult">><<run setup.tavernWorkResolveEventChoice("order_eggs")>><</link>></div><</if>>
<<if setup.tavernWorkEventChoiceAvailable("order_experience")>><div><<link "[Cooking] Rework the kitchen's next batch" "TavCookSpecialResult">><<run setup.tavernWorkResolveEventChoice("order_experience")>><</link>></div><</if>>
<div><<link "Offer broth and bread at the ordinary price" "TavCookSpecialResult">><<run setup.tavernWorkResolveEventChoice("order_simple")>><</link>></div>
<div><<link "Promise the special anyway and hope the kitchen can make it" "TavCookSpecialResult">><<run setup.tavernWorkResolveEventChoice("order_promise")>><</link>></div></div>
</div><</nobr>><<nobr>><<set _result = $tavernWorkEventResult>><<set _cook = setup.tavernWorkKitchenNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The special order has already left the kitchen.</p>
<<elseif _result.choiceId is "order_plan">><p>You sweat the roots slowly, bind them with a little cheese, and serve them beside clear broth instead of the heavy stew. The upstairs guest sends the empty bowl back with a message that the meal let them eat without worry. The traveler pays the promised extra before leaving.</p>
<<elseif _result.choiceId is "order_eggs">><p>Your own egg becomes a soft supper with herbs and a little toasted bread. The cook watches you spend it, then watches the plate come back clean. The traveler pays more than the egg cost. The kitchen worker makes certain the extra coin reaches your hand, not the common till.</p>
<<elseif _result.choiceId is "order_experience">><p>You know which part of the next batch can be changed without delaying every table. You lift out clear broth before the fat goes in, soften roots in a separate pan, and finish the upstairs meal with the last of the cheese. The rest of the stew still serves the common room on time.</p><<if _cook>><<print setup.npcEventDialogueHtml(_cook, "You saw where the pot could bend without making the whole service wait. That is a cook's judgment.", "The kitchen worker")>><</if>>
<<elseif _result.choiceId is "order_promise">><p>You promise a rich special and take the traveler's extra coin before checking what remains. By the time you reach the hearth, the bread is gone and the stew is too heavy for the guest upstairs. The cook sends a plain bowl at no charge and returns the extra payment. Two coins are taken from your wage for the promise the kitchen could not keep.</p><<if _cook>><<print setup.npcEventDialogueHtml(_cook, "Do not sell what is not in my pot. I can change a meal; I cannot make an empty shelf feed someone.", "The kitchen worker")>><</if>>
<<else>><p>You tell the traveler what the kitchen can make without pretending it is a grand special. They accept the lower price and carry warm broth upstairs. The cook approves of the honest sale: no wasted food, no promise the hearth could not keep.</p><</if>>
<<if _result and !_result.invalid>><<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print _result.bonusHtml>><<print _result.relationshipHtml>><</if>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div></div><</nobr>><<nobr>><<set _cook = setup.tavernWorkKitchenNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>The guest who returned the fish yesterday has come back for the meal they were promised. The bad catch is gone, but the kitchen still owes an answer. A fresh pot is on the fire; the cook has left its finishing to you.</p>
<<print setup.npcEventDialogueHtml(_cook, "They paid for supper, not an apology. Make the replacement yourself, cover what was lost, or tell me plainly that you will leave it to me. I will not let another doubtful plate through this door.", "The kitchen worker")>>
<div class="npc-activity-choice-list"><div><<link "Prepare the replacement meal" "TavKitchenFollowResult">><<run setup.tavernWorkResolveEventChoice("catch_follow_repair")>><</link>></div>
<<if setup.tavernWorkEventChoiceAvailable("catch_follow_pay")>><div><<link "Cover the two-coin loss" "TavKitchenFollowResult">><<run setup.tavernWorkResolveEventChoice("catch_follow_pay")>><</link>></div><</if>>
<div><<link "Leave the replacement to the cook" "TavKitchenFollowResult">><<run setup.tavernWorkResolveEventChoice("catch_follow_leave")>><</link>></div></div>
</div><</nobr>><<nobr>><<set _result = $tavernWorkEventResult>><<set _cook = setup.tavernWorkKitchenNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The replacement was settled without you.</p>
<<elseif _result.choiceId is "catch_follow_repair">><p>You take the sound ingredients yourself, check them twice, and finish a fresh plate while the cook watches the fire. The guest eats it in the common room. This time nothing returns but an empty dish, and the cook closes the complaint in the ledger.</p>
<<elseif _result.choiceId is "catch_follow_pay">><p>You put two coins beside the kitchen ledger. The cook pays for the replacement from that sum and prepares it while you carry the next order. The mistake is accounted for, though you know you learned less than you might have by fixing the dish yourself.</p>
<<else>><p>You tell the cook to settle the complaint without you. They do, carefully, and the guest finally receives a safe meal. Your wage for this shift stands, but the cook keeps the next important order on their own side of the hearth. They will remember that you left the repair to them.</p><</if>>
<<if _result and !_result.invalid>><<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print _result.bonusHtml>><<print _result.relationshipHtml>><</if>>
<div class="farm-trial-result-link">[[Finish shift|TavernWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>A table near the door insists its last round was already paid. The tally says otherwise. You can see three empty cups, two wet rings on the board, and a coin under someone's thumb, but the noise around you makes every account sound certain.</p>
<<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc(), "I will pay what I owe. I will not pay twice because this room is loud.", "A patron")>>
<p>The innkeeper is busy drawing ale. The table will wait for an answer, though not forever.</p>
<div class="npc-activity-choice-list">
<<if setup.tavernWorkEventChoiceAvailable("tab_count")>><div><<link "[Intelligence] Rebuild the tally from the cups" "TavServeLostTabResult">><<run setup.tavernWorkResolveEventChoice("tab_count")>><</link>></div><</if>>
<<if setup.tavernWorkEventChoiceAvailable("tab_experience")>><div><<link "[Serving] Compare the ledger with the bar tally" "TavServeLostTabResult">><<run setup.tavernWorkResolveEventChoice("tab_experience")>><</link>></div><</if>>
<div><<link "Ask the innkeeper to settle the account" "TavServeLostTabResult">><<run setup.tavernWorkResolveEventChoice("tab_keeper")>><</link>></div>
<div><<link "Let the disputed cup go" "TavServeLostTabResult">><<run setup.tavernWorkResolveEventChoice("tab_forgive")>><</link>></div>
<div><<link "Insist the table pay again" "TavServeLostTabResult">><<run setup.tavernWorkResolveEventChoice("tab_accuse")>><</link>></div></div></div><</nobr>><<nobr>><<set _result = $tavernWorkEventResult>><<set _keeper = setup.tavernWorkInnkeeperNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The account has already been settled.</p>
<<elseif _result.choiceId is "tab_count">><p>You match the wet rings to the cups, then find the missing payment chalked against the next table's order. The guest sees the mistake at the same moment you do. You correct the mark in front of them rather than asking them to trust your word.</p><<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc(), "There. That is all I wanted: someone willing to count before calling me a liar.", "The patron")>>
<<elseif _result.choiceId is "tab_experience">><p>You remember the bar tally kept beside the cask and bring it to the table. The same payment is marked there against the last round. You correct the room ledger and return the coin to its owner before the argument can spread.</p><<if _keeper>><<print setup.npcEventDialogueHtml(_keeper, "Good. The second tally is there for evenings exactly like this one.", "The innkeeper")>><</if>>
<<elseif _result.choiceId is "tab_keeper">><p>You bring the innkeeper over before the complaint spreads. Together you check the ledger and find a payment entered on the wrong line. The delay costs a little pride, but the guest leaves with the correct change and the room stays calm.</p><<print setup.npcEventDialogueHtml(_keeper, "A disputed coin is worth checking. Next time, bring me the book before the whole table joins in.", "The innkeeper")>>
<<elseif _result.choiceId is "tab_forgive">><p>You strike the cup from the bill to get the table moving. The guest thanks you, but the innkeeper notices the missing coin at closing. He takes it from your wage rather than charge the table twice. The room stays calm; your shortcut still cost someone.</p><<print setup.npcEventDialogueHtml(_keeper, "Kindness can keep a guest. So can accurate accounts. Learn when each one is needed.", "The innkeeper")>>
<<else>><p>You insist the table pay again and the guest calls the innkeeper over. He checks the bar tally and finds their payment recorded against the next table. The guest receives an apology and a fresh cup, while two coins come out of your wage. The innkeeper lets you finish the shift but will not leave you alone with the ledger tomorrow.</p><<print setup.npcEventDialogueHtml(_keeper, "You can ask me to check a mark. You cannot make a guest pay for our mistake twice.", "The innkeeper")>><</if>>
<<if _result and !_result.invalid>><<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><<print _result.bonusHtml>><<print _result.relationshipHtml>><</if>><div>[[Finish shift|TavernWorkMenu]]</div></div><</nobr>><p>A traveler comes in soaked through, too cold to take hold of the cup you bring. You set the ale aside, bring hot broth instead, and make room beside the hearth before another table can claim the bench.</p>
<<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc(), "I thought I would have to choose between warming my hands and paying for supper. You noticed before I had to ask.", "A traveler")>>
<p>When the traveler can finally hold a spoon, the innkeeper gives you an approving glance. The next orders are already waiting, but the room feels kinder for a moment.</p><p>Two strangers are assigned the same narrow table. One wants quiet, the other wants an audience for every story from the road. Their first exchange threatens to sour both suppers before the food arrives.</p>
<p>You bring bread between them, ask the talkative guest about the road, then give the quieter one a chance to answer without being interrupted. By the time the stew arrives, they have found a subject neither minds sharing.</p>
<<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc(), "You have a knack for seating people who should have argued and making them finish a meal instead.", "A guest")>>
<p>You leave them talking and carry two empty bowls back to the kitchen. Keeping a table peaceful is work too, even when nobody tips for it.</p><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>The hearth is sinking toward embers when a patron asks for another round. The innkeeper has already counted the cask and started turning chairs onto tables. The guest offers to pay well for one more drink, but their voice is slurring and they can barely follow your finger to the stairs.</p>
<<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc(), "One more, and I will be no trouble. Or stay a little and tell me why you are in such a hurry to leave me alone.", "A patron")>>
<div class="npc-activity-choice-list">
<div><<link "Offer water and help them to a seat" "TavServeLastRoundResult">><<set $tavernServingDecision = "water">><</link>></div>
<<if setup.playerAttributeMeets("charisma", 8)>><div><<link "[Charisma] Persuade them to pay for a room instead" "TavServeLastRoundResult">><<set $tavernServingDecision = "room">><</link>></div><</if>>
<div><<link "Tell the innkeeper they need help" "TavServeLastRoundResult">><<set $tavernServingDecision = "keeper">><</link>></div></div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<<if $tavernServingDecision is "water">><p>You replace the promised drink with water and sit them near the fire until their hands stop shaking. They complain once, softly, then drink. You finish the last tables while keeping an eye on the bench.</p><<print setup.npcEventDialogueHtml(setup.tavernWorkSceneNpc(), "You could have sold me the ale. I suppose I should thank you for not doing it.", "The patron")>><<print setup.tavernWorkBonusHtml({ charisma: 0.08, tavernwork: 0.08 }, "Choice result")>>
<<elseif $tavernServingDecision is "room">><p>You turn the offer into a night's lodging and explain the price before they can mistake your help for another sort of invitation. The guest pays, takes the key, and makes it upstairs with the railing under one hand.</p><<print setup.npcEventDialogueHtml(setup.tavernWorkInnkeeperNpc(), "A bed is a better sale than another cup to someone who can hardly stand. Well handled.", "The innkeeper")>><<print setup.tavernWorkBonusHtml({ gold: 2, charisma: 0.1, tavernwork: 0.08 }, "Choice result")>>
<<else>><p>You ask the innkeeper to take a look before you serve anything else. Together you steer the guest to a bench away from the closing work, fetch water, and agree to call a friend if they cannot walk home. The last round ends without another cup.</p><<print setup.npcEventDialogueHtml(setup.tavernWorkInnkeeperNpc(), "Good. You noticed the trouble before it reached the floor. Finish the chairs; I will watch the door.", "The innkeeper")>><<print setup.tavernWorkBonusHtml({ tavernwork: 0.12, charisma: 0.04 }, "Choice result")>><</if>>
<<print setup.tavernWorkRewardHtml($lastTavernWorkResult)>><div>[[Finish shift|TavernWorkMenu]]</div></div><</nobr>><<nobr>><<run setup.ensureTavernWorkSystem()>>
<div class="npc-activity-panel">
<<if !$TavernTrialStarted or !$TavernTrialMugs or !$TavernTrialTables or !$TavernTrialWater>><p>The innkeeper has not yet finished testing your ordinary work.</p><div>[[Return to the trial|TavernWorkTrial]]</div>
<<else>><p>A dice player calls for another round just as a merchant insists his change is short. The tray is heavy, the room loud, and a second patron catches your sleeve to ask when you will bring his drink. The innkeeper folds his arms and leaves you to put it right.</p>
<<set _worker = setup.tavernCounterNpc()>><<if _worker>><<print setup.npcEventDialogueHtml(_worker, "Both tables want your attention. Keep the orders straight and keep my coin straight. What do you do first?", "The innkeeper")>><</if>>
<div class="npc-activity-choice-list">
<<if setup.playerAttributeMeets("charisma", 8)>><div><<link "[Charisma] Settle the patrons and carry the round" "TavernTrialDecisionResult">><<run setup.tavernTrialResolve("serving", "charm")>><</link>></div><</if>>
<<if setup.playerAttributeMeets("intelligence", 8)>><div><<link "[Intelligence] Recount the orders and missing change" "TavernTrialDecisionResult">><<run setup.tavernTrialResolve("serving", "tally")>><</link>></div><</if>>
<<if $c.energy gte 3>><div><<link "Handle one table at a time (-3 Energy, 25 minutes)" "TavernTrialDecisionResult">><<run setup.tavernTrialResolve("serving", "steady")>><</link>></div><</if>>
<div><<link "Rush the whole room at once (risky)" "TavernTrialDecisionResult">><<run setup.tavernTrialResolve("serving", "rush")>><</link>></div>
<div>[[Return to the chores|TavernWorkTrial]]</div></div><</if>></div><</nobr>><<nobr>><<run setup.ensureTavernWorkSystem()>>
<div class="npc-activity-panel">
<<if !$TavernCookingTrialStarted or !$TavernCookingTrialPrep or !$TavernCookingTrialStew or !$TavernCookingTrialPlates>><p>The cook has not yet seen you finish the preparation.</p><div>[[Return to the trial|TavernCookingTrial]]</div>
<<else>><p>The last order is a bowl of fish broth for a guest who paid for supper before the boats came in. One mouthful tells you the stock is sharp and thin. The guest is already asking the server where her food has gone, and the cook wants to see whether you can save it without hiding a mistake.</p>
<<set _cook = setup.tavernWorkKitchenNpc()>><<if _cook>><<print setup.npcEventDialogueHtml(_cook, "That bowl goes to a person, not a tally mark. Taste it. Tell me what you will change before you send it out.", "The cook")>><</if>>
<div class="npc-activity-choice-list">
<<if setup.playerAttributeMeets("intelligence", 8)>><div><<link "[Intelligence] Balance the broth with stock and onion" "TavernTrialDecisionResult">><<run setup.tavernTrialResolve("kitchen", "diagnose")>><</link>></div><</if>>
<<if $invHerbs gt 0>><div><<link "Use your cooking herbs to round out the flavor" "TavernTrialDecisionResult">><<run setup.tavernTrialResolve("kitchen", "herbs")>><</link>></div><</if>>
<<if $c.energy gte 3>><div><<link "Start a fresh broth (-3 Energy, 25 minutes)" "TavernTrialDecisionResult">><<run setup.tavernTrialResolve("kitchen", "rebuild")>><</link>></div><</if>>
<div><<link "Season it quickly and hope the guest will not notice (risky)" "TavernTrialDecisionResult">><<run setup.tavernTrialResolve("kitchen", "bluff")>><</link>></div>
<div>[[Return to the chores|TavernCookingTrial]]</div></div><</if>></div><</nobr>><<nobr>><<set _result = $tavernTrialLastResult>><div class="npc-activity-panel">
<<if !_result or _result.invalid>><p>The trial is not ready for a decision.</p><div>[[Return to the tavern|Ambercross Tavern]]</div>
<<else>>
<<if _result.track is "serving">>
<<if _result.choiceId is "charm">><p>You take the merchant's complaint seriously without letting him hold up the entire room. A clear word to the dice players buys you space for the tray. By the time you return, both tables have their orders and the change is counted in the merchant's open hand.</p>
<<elseif _result.choiceId is "tally">><p>You set the tray down, repeat each order aloud, and trace the coins back through the last round. The merchant had counted an old copper twice. With the account settled, you carry the drinks to the right hands while the argument loses its audience.</p>
<<elseif _result.choiceId is "steady">><p>You refuse to be hurried into spilling ale or losing coin. One table waits while you settle the other, and you return for the second round with tired arms but a clear account. It takes longer, yet no one has to redo your work.</p>
<<elseif _result.success>><p>You thread the tray through the crowded room, answer the merchant over your shoulder, and somehow keep every order in mind. The innkeeper checks the coins twice, then gives a grudging nod.</p>
<<else>><p>You try to serve both tables in one breath. A jostled mug tips across the dice, and in the confusion you return the wrong change. The innkeeper has to leave his counter to put the room back in order.</p><</if>>
<<set _worker = setup.tavernCounterNpc()>><<if _worker>><<print setup.npcEventDialogueHtml(_worker, _result.success ? "You kept your head. I can use someone who does that when the room turns loud." : "Not today. Come back tomorrow and show me you can keep the room, the ale, and the coin in order.", "The innkeeper")>><</if>>
<<else>>
<<if _result.choiceId is "diagnose">><p>You taste the broth again, draw out the sharpness with clean stock, and soften the finish with onion. The cook tastes beside you before the server takes it through the door.</p>
<<elseif _result.choiceId is "herbs">><p>You bruise your own herbs between your fingers and add them a pinch at a time. They lift the fish without covering it. The cook takes the bowl himself to make sure the guest receives it hot.</p>
<<elseif _result.choiceId is "rebuild">><p>You tell the server there will be a wait and put a fresh pot over the fire. The cook watches you make a smaller, sounder broth from the beginning. It costs time and effort, but the guest finishes the bowl.</p>
<<elseif _result.success>><p>You make a quick correction, taste once more, and send the bowl out. The guest asks for bread rather than a complaint; the cook takes that as an answer.</p>
<<else>><p>You scatter seasoning over the sharp stock and send it out before tasting again. The bowl comes back almost full. The cook sets it between you and waits until you taste what the guest did.</p><</if>>
<<set _cook = setup.tavernWorkKitchenNpc()>><<if _cook>><<print setup.npcEventDialogueHtml(_cook, _result.success ? "You thought about who would eat it. That matters more than looking quick." : "A guest should not have to pay for your guess. Try again tomorrow, and taste before you send anything through my door.", "The cook")>><</if>>
<</if>>
<<if _result.success>><div><<if _result.track is "serving">>[[Accept the serving job|TavernTrialComplete]]<<else>>[[Accept the kitchen job|TavernCookingTrialComplete]]<</if>></div>
<<else>><div>[[Return to the tavern|Ambercross Tavern]]</div><</if>>
<</if>></div><</nobr>><<nobr>><<set _master = setup.forgeMasterNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>A carter arrives for the wheel pins he paid for, but the finished pieces are mixed with two other orders. Their marks are hidden beneath soot. The cart outside is already loaded, and choosing the wrong pins would send it onto the road with metal that does not fit.</p>
<<print setup.npcEventDialogueHtml(_master, "I need his order, not something that looks near enough. Find the mark, count each pin, and tell me before he leaves.", "The forge master")>>
<div class="npc-activity-choice-list"><<if setup.forgeWorkBranchAvailable("order_trace")>><div><<link "[Intelligence] Trace the maker's marks" "ForgeScatteredResult">><<run setup.forgeWorkResolveBranch("order_trace")>><</link>></div><</if>>
<div><<link "Count and test every pin (15 minutes)" "ForgeScatteredResult">><<run setup.forgeWorkResolveBranch("order_recount")>><</link>></div>
<div><<link "Choose the closest set and send him off (risky)" "ForgeScatteredResult">><<run setup.forgeWorkResolveBranch("order_guess")>><</link>></div></div></div><</nobr>><<nobr>><<set _result = $forgeWorkChoiceResult>><<set _master = setup.forgeMasterNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The order has already left the forge.</p>
<<elseif _result.id is "order_trace">><p>You turn each pin beneath the window light until the faint cuts left by the maker separate one order from another. The carter checks the fit against his old piece and gives you a loaf from his travel bag along with two extra coins. He would rather lose his lunch than a wheel on the road.</p>
<<elseif _result.id is "order_recount">><p>You make the carter wait while you measure each piece against the old pin. He complains until the right set slides into place and the others plainly do not. The forge master backs your choice, and the cart leaves late but sound.</p>
<<elseif _result.failed>><p>You pick the neatest set and wave the cart away. A little later the carter returns, one wheel loose and his temper worse. The forge master has to remake the fitting. He tells you the mistake will be yours to put right on your next shift.</p>
<<else>><p>Your quick choice happens to be right. The pins settle into the wheel without a fight, and the carter pays for speed. The forge master accepts the coin but reminds you that luck does not leave a reliable mark on iron.</p><</if>>
<<if _result and !_result.invalid>><<print setup.npcEventDialogueHtml(_master, _result.failed ? "The replacement iron comes out of this shift's pay. We will put the wheel right when he comes back." : "A customer takes our judgment onto the road. Remember that before you hurry the next order.", "The forge master")>><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print _result.bonusHtml>><<print _result.itemHtml>><<print _result.relationshipHtml>><</if>>
<div>[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><<set _master = setup.forgeMasterNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>A younger worker grabs a tong handle left too close to the fire and pulls away with a sharp cry. The skin is red, not blistered, but they are trying to hide the hand beneath an apron rather than admit what happened. An unfinished batch still waits beside the coals.</p>
<<print setup.npcEventDialogueHtml(_master, "Put the iron down. The hand comes first. Tell me what you need, then we decide who finishes the batch.", "The forge master")>>
<div class="npc-activity-choice-list"><div><<link "Cool the hand and take over the batch" "ForgeBurnResult">><<run setup.forgeWorkResolveBranch("burn_cool")>><</link>></div>
<<if setup.forgeWorkBranchAvailable("burn_herbs")>><div><<link "Use your herbs for a poultice" "ForgeBurnResult">><<run setup.forgeWorkResolveBranch("burn_herbs")>><</link>></div><</if>>
<div><<link "Keep the batch moving yourself (risky)" "ForgeBurnResult">><<run setup.forgeWorkResolveBranch("burn_push")>><</link>></div></div></div><</nobr>><<nobr>><<set _result = $forgeWorkChoiceResult>><<set _master = setup.forgeMasterNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The forge has already moved past the accident.</p>
<<elseif _result.id is "burn_cool">><p>You get the worker's hand beneath cool water and make them keep it there while you move their unfinished stock away from the heat. The batch takes longer in your hands, but nothing is lost. When the worker returns, they thank you for taking the embarrassment as seriously as the burn.</p>
<<elseif _result.id is "burn_herbs">><p>Once the heat is out of the skin, you make a plain poultice from your own herbs. The forge master pays you back for using them and sends the worker to rest. You finish the next pieces together, with a closer eye on where the tongs are laid.</p>
<<elseif _result.failed>><p>You snatch up the waiting tongs and try to do two workers' work at once. A piece cools before you can shape it and has to be reheated from fresh fuel. The master takes the hammer from you long enough to make the point: haste has cost an extra coin as well as time.</p>
<<else>><p>You hold the fire and finish the batch while the other worker rests. It is rough work, but the pieces come out true, and the master adds a coin to your pay for keeping the order moving without asking the injured worker back too soon.</p><</if>>
<<if _result and !_result.invalid>><<print setup.npcEventDialogueHtml(_master, _result.failed ? "The batch can wait. We lost a coin's fuel because you tried to do two jobs at once." : "The injured worker rests. You kept the order moving without sending them back to the fire.", "The forge master")>><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print _result.bonusHtml>><<print _result.relationshipHtml>><</if>><div>[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><<set _npc = setup.forgeWorkPrivateNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>The two of you are fitting a new hinge against its wooden pattern when <<print setup.npcEventMentionHtml(_npc, "the other worker")>> steps close enough to steady your wrist. The work needs care, but the hand remains a moment longer than the hinge does.</p>
<<print setup.npcEventDialogueHtml(_npc, "You know I could hold this while you check the fit. Or we could leave it here and find a quieter place when the master turns his back.", "The worker")>>
<p>The invitation is unmistakable. The order still needs to be finished, and neither answer belongs to your wages.</p>
<div class="npc-activity-choice-list"><div><<link "Keep the fitting professional" "ForgeMeasureResult">><<run setup.forgeWorkResolveBranch("measure_work")>><</link>></div>
<div><<link "Flirt while you finish the hinge" "ForgeMeasureResult">><<run setup.forgeWorkResolveBranch("measure_flirt")>><</link>></div>
<div><<link "Refuse the private invitation" "ForgeMeasureResult">><<run setup.forgeWorkResolveBranch("measure_refuse")>><</link>></div></div></div><</nobr>><<nobr>><<set _result = $forgeWorkChoiceResult>><<set _npc = setup.forgeWorkPrivateNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The hinge has already been fitted.</p>
<<elseif _result.id is "measure_work">><p>You turn the pattern back toward the light and ask them to keep their hand on the wood. The two of you finish the fitting cleanly. The look between you remains private; the hinge does not.</p>
<<elseif _result.id is "measure_flirt">><p>You let the closeness stand while you mark the last hole. <span class="dialogue-line dialogue-player">"Finish this properly and I may let you make that invitation again."</span> Their smile follows you back to the anvil, and the heat in your face is not all from the fire.</p>
<<else>><p>You move their hand back to the pattern and tell them you came to finish an order. They take the answer without argument. Even so, the suggestion returns to you once the workshop grows quiet.</p><</if>>
<<if _result and !_result.invalid>><<print setup.npcEventDialogueHtml(_npc, _result.id === 'measure_work' ? "Fair. Hold it there and I will set the last rivet." : _result.id === 'measure_flirt' ? "Then I will give you a reason to remember the invitation." : "I heard you. The hinge first.", "The worker")>><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print _result.bonusHtml>><<print _result.arousalHtml>><<print _result.refusalHtml>><</if>><div>[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><<set _master = setup.forgeMasterNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>The carter has left the loose wheel outside again. He needs the correct pins before the road turns muddy. The master lays the returned set on the bench and leaves the decision about making it right to you.</p>
<<print setup.npcEventDialogueHtml(_master, "You sent these out. You may refit the wheel, cover what it cost us, or let me do it. Say which, and do not pretend yesterday's mistake vanished overnight.", "The forge master")>>
<div class="npc-activity-choice-list"><div><<link "Make and fit the replacement pins" "ForgeFollowResult">><<run setup.forgeWorkResolveBranch("order_follow_repair")>><</link>></div>
<<if setup.forgeWorkBranchAvailable("order_follow_pay")>><div><<link "Cover the two-coin cost" "ForgeFollowResult">><<run setup.forgeWorkResolveBranch("order_follow_pay")>><</link>></div><</if>>
<div><<link "Leave the repair to the master" "ForgeFollowResult">><<run setup.forgeWorkResolveBranch("order_follow_leave")>><</link>></div></div></div><</nobr>><<nobr>><<set _result = $forgeWorkChoiceResult>><<set _master = setup.forgeMasterNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The carter's repair was settled without you.</p>
<<elseif _result.id is "order_follow_repair">><p>You compare the old pin with the axle before striking new iron. The carter tests the wheel under a loaded cart, then shakes your hand rather than asking for his money back. The master lets you close the order in the ledger yourself.</p>
<<elseif _result.id is "order_follow_pay">><p>You put two coins beside the order book. The master takes them, then has an apprentice make and fit the replacement. The debt is settled, though the lesson has stayed on someone else's side of the anvil.</p>
<<else>><p>You tell the master to finish the repair. He does, but the next customer order stays with him as well. Your ordinary wage is yours; his trust will take more work to recover.</p><</if>>
<<if _result and !_result.invalid>><<print setup.npcEventDialogueHtml(_master, _result.id === 'order_follow_repair' ? "That is the fitting I wanted yesterday. Now I know you can put a mistake right." : _result.id === 'order_follow_pay' ? "The cost is covered. Watch the fitting when the apprentice makes it." : "I will see to it. The next order stays with me until I trust your judgment again.", "The forge master")>><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print _result.costHtml>><<print _result.bonusHtml>><<print _result.relationshipHtml>><</if>><div>[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><<set _keeper = setup.chapelEmployerNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>Rain breaks over the village while you are sorting blankets. A family at the edge of Ambercross has a leaking roof and a feverish child. The keeper sets aside dry cloth and a small parcel of food, but the path will be slick before you reach them.</p>
<<print setup.npcEventDialogueHtml(_keeper, "They need the blankets dry, not quickly ruined. Decide what to carry, how to reach them, and what you can honestly promise when you arrive.", "The chapel keeper")>>
<div class="npc-activity-choice-list"><<if setup.chapelWorkBranchAvailable("rain_plan")>><div><<link "[Intelligence] Pack the cloth and choose a sheltered route" "ChapelRainResult">><<run setup.chapelWorkResolveBranch("rain_plan")>><</link>></div><</if>>
<<if setup.chapelWorkBranchAvailable("rain_bread")>><div><<link "Add your bread to the family's parcel" "ChapelRainResult">><<run setup.chapelWorkResolveBranch("rain_bread")>><</link>></div><</if>>
<div><<link "Carry the blankets carefully" "ChapelRainResult">><<run setup.chapelWorkResolveBranch("rain_carry")>><</link>></div>
<div><<link "Run the shortest path through the rain (risky)" "ChapelRainResult">><<run setup.chapelWorkResolveBranch("rain_rush")>><</link>></div></div></div><</nobr>><<nobr>><<set _result = $chapelWorkChoiceResult>><<set _keeper = setup.chapelEmployerNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The relief parcel has already gone out.</p>
<<elseif _result.id is "rain_plan">><p>You wrap the blankets in spare oilcloth and take the lane beside the stone wall. At the house, the family can put dry layers around the child at once. You show them where the roof is dripping and promise to tell the keeper what repairs remain.</p>
<<elseif _result.id is "rain_bread">><p>You give the family your own loaf with the chapel parcel. The parent breaks it for the children while you hang the blankets away from the leak. Your gift does not mend the roof, but it gives them one less decision to make in the cold.</p>
<<elseif _result.id is "rain_carry">><p>You keep the bundle close beneath your cloak and walk slowly where the stones shine with rain. The blankets arrive dry enough to use. The family thanks you, and you make a careful note of the roof before returning to the chapel.</p>
<<elseif _result.failed>><p>You run the shortest lane and slip at the last turn. The food survives, but one blanket lands in muddy water. The family takes the clean ones and asks whether you can bring the missing dry layer tomorrow. The chapel buys a replacement now, taking two coins from your wage, and the keeper expects you to deliver it on your next shift.</p>
<<else>><p>You reach the house ahead of the worst rain with the parcel intact. The family puts the dry blankets around the child while you check the ceiling for another leak. The keeper adds two coins to your wage for making the trip in time.</p><</if>>
<<if _result and !_result.invalid>><<print setup.npcEventDialogueHtml(_keeper, _result.failed ? "They still need a dry blanket. Bring one back tomorrow, and remember that haste did not keep this one dry." : "The parcel reached them. Thank you for noticing what else that household needs.", "The chapel keeper")>><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print _result.bonusHtml>><<print _result.relationshipHtml>><</if>><div>[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><<set _keeper = setup.chapelEmployerNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>A visitor waits until the last bench is empty, then asks whether the chapel can send help to a household that has stopped coming for bread. They will not say why in front of the other workers. The keeper is nearby, but the visitor's hands are shaking around the folded address.</p>
<<print setup.npcEventDialogueHtml(_keeper, "You may hear them out, or bring the request to me without making them repeat it in public. Whatever you learn here is not a story for the market.", "The chapel keeper")>>
<div class="npc-activity-choice-list"><div><<link "Listen privately and arrange help" "ChapelQuietResult">><<run setup.chapelWorkResolveBranch("quiet_listen")>><</link>></div>
<<if setup.chapelWorkBranchAvailable("quiet_read")>><div><<link "[Intelligence] Check the address against the aid ledger" "ChapelQuietResult">><<run setup.chapelWorkResolveBranch("quiet_read")>><</link>></div><</if>>
<div><<link "Ask around town for the household's story" "ChapelQuietResult">><<run setup.chapelWorkResolveBranch("quiet_gossip")>><</link>></div></div></div><</nobr>><<nobr>><<set _result = $chapelWorkChoiceResult>><<set _keeper = setup.chapelEmployerNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The visitor's request has already been heard.</p>
<<elseif _result.id is "quiet_listen">><p>You move to the far side of the chapel and let the visitor speak without interruption. The household's eldest has fallen ill and is ashamed to ask for help twice. You take the address to the keeper, leaving out the details that do not matter to the delivery.</p>
<<elseif _result.id is "quiet_read">><p>You check the ledger quietly and find that the household's last bread allotment was missed, not refused. The keeper prepares a parcel and corrects the record. The visitor sees the help arranged without having to explain their family to the entire room.</p>
<<else>><p>You try to learn more in the market before making the delivery. By noon, people are speculating about the family, and one neighbor pays you a coin for a detail you should not have repeated. The keeper sends the aid anyway but asks whether curiosity was worth the breach of trust.</p><</if>>
<<if _result and !_result.invalid>><<print setup.npcEventDialogueHtml(_keeper, _result.id === 'quiet_gossip' ? "Help may be public. Their trouble was not yours to sell." : "Thank you for letting the aid reach them without making their need a spectacle.", "The chapel keeper")>><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print _result.bonusHtml>><<print _result.relationshipHtml>><</if>><div>[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><<set _npc = setup.chapelWorkPrivateNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>After helping you carry linens into the side room, <<print setup.npcEventMentionHtml(_npc, "the visitor")>> remains by the door. The chapel is quiet enough that the change in their voice feels louder than the work you were doing.</p>
<<print setup.npcEventDialogueHtml(_npc, _npc && _npc.gender === 'female' ? "You have been looking at me all afternoon. Stay a little longer and put those hands somewhere they will be remembered." : "You have been looking at me all afternoon. Stay a little longer and use those hands on me instead of the linen.", "The visitor")>>
<p>They are asking for a private sexual favor, not another chapel task. You can answer without agreeing to anything beyond this conversation.</p>
<div class="npc-activity-choice-list"><<if setup.chapelWorkPrivateAvailable()>><div><<set _label = _npc.gender is "female" ? "Stay with her (fingering)" : "Stay with him (handjob)">><<link _label>><<set _start = setup.chapelWorkStartPrivate()>><<if _start.blocked>><<goto "ChapelPrivateReturn">><<else>><<goto "NPCEncounter">><</if>><</link>></div><</if>>
<div><<link "Keep talking, but stay in the public room" "ChapelPrivateResult">><<run setup.chapelWorkResolveBranch("visitor_talk")>><</link>></div>
<div><<link "Refuse and return to work" "ChapelPrivateResult">><<run setup.chapelWorkResolveBranch("visitor_refuse")>><</link>></div></div></div><</nobr>><<nobr>><<set _result = $chapelWorkChoiceResult>><<set _npc = setup.chapelWorkPrivateNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The visitor has gone back to the main room.</p>
<<elseif _result.id is "visitor_talk">><p>You move back where others can see you and keep talking while you fold the remaining linens. The visitor accepts the boundary and stays for the conversation. The offer still lingers in your thoughts after they leave.</p>
<<else>><p>You tell them plainly that your work here is not an invitation. They step aside and let you finish. Even as you turn back to the linen, you notice how strongly the possibility had caught your attention.</p><</if>>
<<if _result and !_result.invalid>><<print setup.npcEventDialogueHtml(_npc, _result.id === 'visitor_talk' ? "Then let us talk. I can ask again another day, if you wish." : "I understand. I will leave you to your work.", "The visitor")>><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print _result.bonusHtml>><<print _result.arousalHtml>><<print _result.refusalHtml>><</if>><div>[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel">
<p>You return to the linens after the private encounter. The chapel has not changed around you: the same folded cloth, the same light in the narrow window. What happened with the visitor belongs to the two of you, and the remaining work still needs your hands.</p>
<<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><div>[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><<set _keeper = setup.chapelEmployerNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>The household from yesterday still needs the dry blanket lost in the rain. The keeper has set one aside. Your regular duties remain, but the unfinished delivery is waiting beside them.</p>
<<print setup.npcEventDialogueHtml(_keeper, "They managed the night with what arrived. We promised another dry layer. You can take it yourself, cover its cost, or ask me to send someone else. Tell me now.", "The chapel keeper")>>
<div class="npc-activity-choice-list"><div><<link "Carry the replacement blanket yourself" "ChapelRainFollowResult">><<run setup.chapelWorkResolveBranch("rain_follow_repair")>><</link>></div>
<<if setup.chapelWorkBranchAvailable("rain_follow_pay")>><div><<link "Cover the two-coin cost" "ChapelRainFollowResult">><<run setup.chapelWorkResolveBranch("rain_follow_pay")>><</link>></div><</if>>
<div><<link "Leave the errand to another worker" "ChapelRainFollowResult">><<run setup.chapelWorkResolveBranch("rain_follow_leave")>><</link>></div></div></div><</nobr>><<nobr>><<set _result = $chapelWorkChoiceResult>><<set _keeper = setup.chapelEmployerNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The replacement was delivered without you.</p>
<<elseif _result.id is "rain_follow_repair">><p>You take the dry blanket to the same house and ask after the child before you leave. They are warmer and drinking broth. The parent thanks you for returning with what was promised rather than treating yesterday as the end of the matter.</p>
<<elseif _result.id is "rain_follow_pay">><p>You place two coins beside the chapel ledger. Another worker carries the replacement while you finish your assigned round. The family gets the blanket, though the keeper notes that the debt was more than a number in the book.</p>
<<else>><p>You leave the task to the keeper. The replacement goes out, but they put the next urgent errand in someone else's hands. Your ordinary wage remains yours; so does the knowledge that you could have made the return yourself.</p><</if>>
<<if _result and !_result.invalid>><<print setup.npcEventDialogueHtml(_keeper, _result.id === 'rain_follow_repair' ? "You returned with what we promised. That is what they will remember." : _result.id === 'rain_follow_pay' ? "The blanket is paid for. Another worker will take it, and I will mark the errand complete." : "I will send someone else, but I had hoped you would finish the errand yourself.", "The chapel keeper")>><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print _result.costHtml>><<print _result.bonusHtml>><<print _result.relationshipHtml>><</if>><div>[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><<set _delivery = $chapelWorkDeliveryResult>><div class="npc-activity-panel farm-work-event-panel">
<<if !_delivery or !_delivery.success>><p>The handoff could not be completed.</p><div>[[Return to the shrine|Ruined Wayside Shrine]]</div>
<<else>><<set _recipient = _delivery.recipient>>
<<if _delivery.method is "inspect">><p>You ask the recipient to witness the thread before you loosen it. Together you check the waxed cloth for rain damage, then lay out the salve, clean bandage, bread, and folded letter. Nothing is missing. They fold the paper away without opening it in front of you.</p>
<<elseif _delivery.method is "care">><p>You pass over the medicine, then stay to help clean and bind the injured ankle. The recipient tests their weight before sitting again. It costs time and effort, but they can now manage the short path to water without leaning on the ruined wall.</p>
<<else>><p>You place the parcel into the right hands without breaking the seal yourself. The recipient opens the wrapping, checks the medicine and bandage, and tucks the private letter away. You ask only what the chapel needs to know for its report.</p><</if>>
<<print setup.npcEventDialogueHtml(_recipient, "The medicine is here, but I need a favor before I seal my answer to the chapel. Hear me out before you take that thread back.", "The chapel contact")>>
<p class="farm-work-gain-line"><b id="Energy">-<<= _delivery.energy >> Energy</b></p><p>Your journal has been updated.</p><div>[[Hear the request|ChapelTrialFavor]]</div><</if>>
</div><</nobr>><<nobr>><<set _master = setup.forgeMasterNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>A rivet snaps as you lift a glowing hinge from the coals. One jaw of the tongs opens wider than it should, and the iron slips back toward the fire. The customer is waiting at the bench. You could keep working with the damaged tool, but one bad grip could ruin the hinge or send hot metal across the room.</p>
<<print setup.npcEventDialogueHtml(_master, "Set it down. I need that hinge finished, but I need every hand in this room intact. Tell me how you intend to do both.", "The forge master")>>
<div class="npc-activity-choice-list">
<<if setup.forgeWorkBranchAvailable("tongs_repair")>><div><<link "[Smithing] Reset the rivet and test the grip" "ForgeTongsResult">><<run setup.forgeWorkResolveBranch("tongs_repair")>><</link>></div><</if>>
<<if setup.forgeWorkBranchAvailable("tongs_warn")>><div><<link "[Honest] Show the broken tongs to the master" "ForgeTongsResult">><<run setup.forgeWorkResolveBranch("tongs_warn")>><</link>></div><</if>>
<<if setup.forgeWorkBranchAvailable("tongs_replace")>><div><<link "Pay 2 gold for a sound pair from the tool seller" "ForgeTongsResult">><<run setup.forgeWorkResolveBranch("tongs_replace")>><</link>></div><</if>>
<div><<link "Use another grip and try to finish the hinge (risky)" "ForgeTongsResult">><<run setup.forgeWorkResolveBranch("tongs_improvise")>><</link>></div>
<div><<link "Hide the damage and let the next worker use them" "ForgeTongsResult">><<run setup.forgeWorkResolveBranch("tongs_hide")>><</link>></div></div></div><</nobr>><<nobr>><<set _result = $forgeWorkChoiceResult>><<set _master = setup.forgeMasterNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The tools have already been dealt with.</p>
<<elseif _result.id is "tongs_repair">><p>You drive a fresh rivet through the joint, close the jaws on a cold bar, and lift it twice before going near the fire. The hinge comes out square. The master leaves the repaired tongs on your side of the bench: he trusts your hands with them now.</p>
<<elseif _result.id is "tongs_warn">><p>You lay the broken tool where the master can see it and explain what happened before anyone else reaches for it. He swaps in a sound pair and takes the damaged one out of use. The customer waits a few minutes, but no one is injured and the hinge is finished properly.</p>
<<elseif _result.id is "tongs_replace">><p>You spend two of your own coins on a sound pair from the tool seller's cart. The master tests the jaws, then lets you finish the hinge. You have paid to keep the order moving, and he notices that you did not make someone else bear the risk.</p>
<<elseif _result.id is "tongs_hide">><p>You leave the cracked tool on the rack. Another worker takes it, loses a hot offcut, and the master stops the work before anyone is hurt. He saw you handle the tongs earlier. The wasted iron comes out of your shift pay, and his trust is harder to replace than the rivet.</p>
<<elseif _result.failed>><p>You try to pinch the hinge with an awkward grip. It slips, twists in the coals, and must be remade from fresh stock. The master moves you away from the fire while he corrects the order. Two coins for ruined iron come out of the wage you just earned.</p>
<<else>><p>You catch the hinge by its cooler end and transfer it to sound tongs before the metal warps. The master checks the finished piece twice. It holds, and he adds a little to your pay, though he puts the broken tool aside himself.</p><</if>>
<<if _result and !_result.invalid>><<print setup.npcEventDialogueHtml(_master, _result.id === 'tongs_hide' ? "A broken tool left for someone else is not an accident. Speak up next time." : _result.failed ? "The iron can be replaced. I need you to recognize the danger before it leaves your hands." : "Good. We finish orders with sound tools and clear heads.", "The forge master")>><<print setup.forgeWorkRewardHtml($lastForgeWorkResult)>><<print _result.costHtml>><<print _result.bonusHtml>><<print _result.relationshipHtml>><<print _result.personalityHtml>><</if>>
<div>[[Finish shift|ForgeWorkMenu]]</div></div><</nobr>><<nobr>><<set _keeper = setup.chapelEmployerNpc()>><div class="npc-activity-panel farm-work-event-panel">
<p>The last bread cart arrives with a damp sack at the bottom. The loaves nearest the canvas smell sour. A line has already formed outside, and the stores ledger says there is no spare bread for everyone waiting. The keeper puts the sack in front of you before the door opens.</p>
<<print setup.npcEventDialogueHtml(_keeper, "Do not hand a spoiled loaf to anyone because the numbers frighten you. Work out what can be saved, or tell me exactly what we must replace.", "The chapel keeper")>>
<div class="npc-activity-choice-list">
<<if setup.chapelWorkBranchAvailable("stores_sort")>><div><<link "[Intelligence] Sort the safe loaves and adjust the portions" "ChapelStoresResult">><<run setup.chapelWorkResolveBranch("stores_sort")>><</link>></div><</if>>
<<if setup.chapelWorkBranchAvailable("stores_experience")>><div><<link "[Chapel service] Call in the baker's standing promise" "ChapelStoresResult">><<run setup.chapelWorkResolveBranch("stores_experience")>><</link>></div><</if>>
<<if setup.chapelWorkBranchAvailable("stores_protect")>><div><<link "[Protective] Warn the line and organize a second delivery" "ChapelStoresResult">><<run setup.chapelWorkResolveBranch("stores_protect")>><</link>></div><</if>>
<<if setup.chapelWorkBranchAvailable("stores_buy")>><div><<link "Buy replacement bread for 2 gold" "ChapelStoresResult">><<run setup.chapelWorkResolveBranch("stores_buy")>><</link>></div><</if>>
<div><<link "Serve the sour bread and hope no one notices" "ChapelStoresResult">><<run setup.chapelWorkResolveBranch("stores_serve")>><</link>></div></div></div><</nobr>><<nobr>><<set _result = $chapelWorkChoiceResult>><<set _keeper = setup.chapelEmployerNpc()>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or _result.invalid>><p>The bread has already been dealt with.</p>
<<elseif _result.id is "stores_sort">><p>You separate the sound loaves from the damp ones, then count the waiting households against the ledger. Smaller portions will cover everyone today, and the keeper can send a proper replacement tomorrow. You explain the change before opening the door, so no one mistakes it for favoritism.</p>
<<elseif _result.id is "stores_experience">><p>You remember the baker offered to replace any bread spoiled in transit. You bring the sour sack back and return with fresh loaves before the line breaks up. The keeper has no need to spend the chapel's scant reserve, and the baker admits the cart cover needs mending.</p>
<<elseif _result.id is "stores_protect">><p>You step outside and tell the waiting families why distribution will be late. Then you organize two workers to fetch sound bread from the baker. The wait is uncomfortable, but every household leaves with food it can safely eat.</p>
<<elseif _result.id is "stores_buy">><p>You use two coins from your own purse to buy what the cart failed to bring. The line moves again. The keeper thanks you, then makes a note to settle the matter with the baker instead of assuming you can pay for every future mistake.</p>
<<else>><p>You place the sour loaves beneath the sound ones. A parent notices the smell before the family reaches the door and brings the bread back. The keeper withdraws the whole sack, pays for replacements, and takes two coins from your wage. Their disappointment is plain when they ask why you said nothing.</p><</if>>
<<if _result and !_result.invalid>><<print setup.npcEventDialogueHtml(_keeper, _result.id === 'stores_serve' ? "A mistake in the cart was the baker's. Passing it on knowingly was yours." : "People came here trusting us to feed them. You kept that promise.", "The chapel keeper")>><<print setup.chapelWorkRewardHtml($lastChapelWorkResult)>><<print _result.costHtml>><<print _result.bonusHtml>><<print _result.relationshipHtml>><<print _result.personalityHtml>><</if>>
<div>[[Finish work|ChapelWorkMenu]]</div></div><</nobr>><<nobr>><<set _data = setup.houseAcquaintanceData()>>
<div class="house-visit-shell house-acquaintance-shell">
<<if !_data>><p>The visit has ended. There is no one here to continue that conversation with.</p><div class="house-return-link">[[Return outside|House Exterior]]</div>
<<else>><<set _npc = _data.npc>><<set _scene = _data.acquaintance>><<set _context = setup.householdContext(_data.house, _npc)>>
<<if _scene.stage is "result">>
<<include "House Acquaintance Result">>
<p><<print setup.houseVisitGainHtml(_scene.result)>></p>
<div class="house-return-link">[[Continue the visit|House Visit Interior]]</div>
<<elseif !_data.available>>
<p>The conversation pauses as the household changes around you. This is not the moment to carry on as though nothing has happened.</p>
<div class="house-return-link">[[Return to the household|House Visit Interior]]</div>
<<else>>
<<if _scene.stage is "purpose">><<include "House Acquaintance Purpose">>
<<else>>
<<if _scene.wasUnknown>><p>Your host introduces themselves as <<npcMention _npc>> before the conversation goes further. The stranger whose door you knocked on now has a name.</p><</if>>
<<set _acquaintancePassage = "House Acquaintance " + _scene.branch>><<include _acquaintancePassage>>
<</if>>
<div class="house-visit-choice-list">
<<for _option range setup.houseAcquaintanceChoices(_data)>><<capture _option>>
<div class="house-visit-choice"><<link _option.label>><<run setup.houseAcquaintanceChoose(_option.id)>><<goto "House Visit Acquaintance">><</link>></div>
<</capture>><</for>>
<div class="house-visit-choice">[[Leave the conversation for now|House Visit Interior]]</div>
</div>
<</if>><</if>></div><</nobr>><p>Now that you are inside, the easy answer you gave at the door no longer quite explains the visit. <<npcMention _npc>> moves a stool away from the hearth, leaving you somewhere to sit without asking you to make yourself completely at home.</p>
<<if _context.others.length>><p>The other residents carry on nearby. Your host keeps the conversation in the shared room, where nobody has to wonder what is happening behind a closed door.</p><</if>>
<<if _scene.tone is "cautious">>
<p>Your host takes a moment before sitting. The welcome is real, but careful: a place beside the fire is not yet an invitation to every private thought.</p>
<<npcSay _npc "I do not usually have people calling without a reason. Nothing wrong with it, I suppose. But what brought you to my door?">>
<<elseif _scene.tone is "warm">>
<p>Your host shifts something off the stool and gives it a friendly pat. There is warmth in the gesture, though curiosity soon follows it.</p>
<<npcSay _npc "There. Better than standing in the doorway. Now, did you need something, or have we finally decided to stop being strangers?">>
<<elseif _scene.tone is "direct">>
<p>Your host settles where they can see both you and the door. Rather than fill the room with polite guesses, they wait for you to explain yourself.</p>
<<npcSay _npc "You came all this way. Tell me what you had in mind. I would rather hear a plain answer than spend the evening guessing.">>
<<else>>
<p>Your host sits opposite you, rubbing a little soot from one thumb. The silence is not unfriendly; it is simply waiting for you to give the conversation a beginning.</p>
<<npcSay _npc "We have passed each other often enough. I know surprisingly little about you. Was there something you wanted to ask, or did you just want a little company?">>
<</if>><p>Your answer seems to make the visit easier to understand. Your host rests their hands in their lap rather than busying them with the cups, but does not immediately begin offering stories about their life.</p>
<<npcSay _npc "Company is pleasant enough when it does not turn into an examination. Some people ask one question, and before you know it they want your whole life laid out on the table.">>
<p>They glance toward the hearth, then back at you. It sounds less like a warning than an explanation of what makes them uneasy. You could offer a little of yourself first, or leave them room to choose their own subject. Either way, there is no need to make a stranger prove they trust you before you can enjoy their company.</p><p>Your host reaches for a covered basket and breaks off a small piece of bread for themselves. After a moment, they lift a second loaf and set it on the table between you. This is an offer, not a price for being allowed to stay.</p>
<<npcSay _npc "If you are getting to know your neighbors, you may as well learn which ones send you away with something to eat. Take that for the road, if you would use it.">>
<p>They make no attempt to press the loaf into your hands. You can accept without promising anything in exchange, or leave it for the people who live here. The conversation continues around the offer rather than stopping until you give the answer your host supposedly wants.</p><p>Your host looks from you to a loose pile of kindling beside the hearth. A few pieces have slipped across the floor, just where someone getting up from the stool might catch a foot on them.</p>
<<npcSay _npc "If you really want something to do, those sticks have been waiting to trip someone all evening. Nothing grand. We can talk while they go back where they belong.">>
<p>It is a small task, not a test of whether you deserve the visit. Stacking the wood would take a little energy. Looking at the space beside the hearth, you might instead find a better way to keep it from spilling. If you are too tired, it is better to say so than turn an offer of help into work your host must finish for you.</p><p>Your host nods at your admission that you are still finding your feet. They lean forward a little, now that your visit has a question they can actually answer.</p>
<<npcSay _npc "The place seems simple until you need somebody who is never where you expected. A door is not much use if you keep knocking while the person behind it is at work.">>
<p>They point out that making a living and getting to know the neighbors are two different problems, though knowing people can make the first one easier. You could ask when they are usually home, without demanding their whole daily routine. Or you could ask where a newcomer should begin looking for honest paid work.</p><p>Your host smiles at the idea of finally becoming more than two faces passing each other in the lane. They begin describing how easy it is to recognize everyone in a small place and still know almost nothing about them.</p>
<<npcSay _npc "We can spend half our lives nodding at people. One day you realize you know the sound of their boots better than anything they enjoy. I would rather manage a proper conversation before that happens to us.">>
<p>The observation gives you an opening without turning the visit into an interrogation. You might trade a lighthearted story, letting your host see how you look at the world. Or ask what keeps them fond of the place on the days when ordinary village life becomes tiresome.</p><<if _scene.choice is "bread">>
<p>You accept the loaf with thanks rather than an apology for needing something. Your host wraps it in a scrap of clean cloth while the conversation wanders back to the village.</p>
<<npcSay _npc "There. A visit and something useful to take away from it. Come by another day, if you like. Just do not mistake every knock for a promise of supper.">>
<<elseif _scene.choice is "decline_food">>
<p>You thank your host, but leave the loaf for the household. They put it back without arguing, plainly pleased that you considered the people who would eat here after you had gone.</p>
<<npcSay _npc "Thoughtful of you. You are welcome to call again. Next time you need not spend the whole visit worrying whether you have taken too much.">>
<<elseif _scene.choice is "stack">>
<p>You gather the scattered kindling and stack it where it cannot catch someone's feet. Your host holds the basket steady and talks while you work. By the time you finish, the awkwardness of arriving unannounced has given way to the ease of having done something together.</p>
<<npcSay _npc "That looks better. You need not find a chore every time you visit, you know. But I will remember that you offered.">>
<<elseif _scene.choice is "organize">>
<p>You point out a steadier place for the kindling, where it will remain dry without spilling into the path. Your host tries a few pieces there and sees what you meant.</p>
<<npcSay _npc "A sensible suggestion. Better than moving the same pile every evening. Come by again; perhaps next time we can keep the conversation clear of the household chores.">>
<<elseif _scene.choice is "admit_tired">>
<p>You admit that you offered more than your tired limbs can manage. Your host leaves the kindling where it is and draws it out of the walking space with one foot.</p>
<<npcSay _npc "Then sit. I would rather you tell me than make a show of helping and fall asleep halfway through it. We can leave that for another day.">>
<<elseif _scene.choice is "routine">>
<<if _scene.routineSlot>>
<p>Your host explains that <<print setup.npcEscapeHtml(_scene.routineSlot.replace(/([A-Z])/g, " $1").toLowerCase())>> is usually a better time to find them at home. It is a useful starting point, not a promise that every day will be identical.</p>
<<npcSay _npc "Try me then. If I do not answer, do not spend an hour arguing with the door. I may have something else to do.">>
<p><span class="reward-trust">You learned part of their routine.</span></p>
<<else>>
<p>Your host explains that their days are too irregular to promise a reliable hour at home. They do welcome another short visit, provided you are willing to take an unanswered knock as an answer for that day.</p>
<<npcSay _npc "You can try me again. I would rather admit I cannot promise a time than have you waiting outside because I sounded certain.">>
<</if>>
<<elseif _scene.choice is "work">>
<p>Your host suggests trying <<print setup.npcEscapeHtml(_scene.workPlace)>>. Those are places to ask about work, not promises of employment; you will still have to speak with whoever is hiring and show what you can do.</p>
<<npcSay _npc "Tell them plainly what you want. A day's work is easier to ask for than waiting for somebody to guess you need it. And come back sometime to tell me how you got on.">>
<<elseif _scene.choice is "quiet">>
<p>You offer a small detail about yourself without attaching a question to it. Your host listens, then shares an ordinary preference of their own: they enjoy an evening when nobody needs anything urgently. It is not a dramatic confession, but it is an answer freely given.</p>
<<npcSay _npc "I like that. A conversation can be small and still be worth having. You may call another day, if this is the sort of company you meant.">>
<<elseif _scene.choice is "story">>
<p>You trade a lighthearted story. Your host interrupts once to ask a question, then laughs at the part you had hoped would amuse them. The room feels less like somewhere you have been admitted and more like somewhere you have spent a pleasant few minutes.</p>
<<npcSay _npc "Now I will think of that whenever I see you in the lane. Come by again. I ought to have a story ready in return.">>
<<else>>
<p>You give your host room to choose the subject. They talk about the relief of coming back to a familiar door after a difficult day, and the difference between having neighbors and feeling watched by them. You listen without turning every pause into another personal question.</p>
<<npcSay _npc "Thank you. It is good to speak without feeling I will be questioned on every word. You are welcome to call again.">>
<</if>>
<p>The visit has given you something to remember each other by. It does not make you close friends overnight, but the next knock need not begin with two complete strangers.</p><<nobr>><<set _data = setup.houseDoorChatData()>><<set _house = setup.houseById($activeHouseId)>><<set _return = _house and _house.kind is "tavern_lodging" ? "Tavern Lodging Door" : "House Door">><div class="house-visit-shell">
<<if !_data>><p>The resident has left. The conversation cannot continue.</p><<link "Return to the doorstep" _return>><</link>>
<<else>><<set _npc = _data.npc>><<set _chat = _data.chat>>
<<if _chat.stage is "opening">>
<p>You stay on the step. <<npcMention _npc>> leaves the door open just wide enough to talk, without turning a short exchange into a visit.</p>
<<set _opening = setup.houseDoorChatOpening(_chat)>><<npcSay _npc _opening>>
<div class="house-visit-choice-list">
<<for _topic range setup.houseDoorChatTopics(_npc, _chat)>><<capture _topic>><div class="house-visit-choice"><<link _topic.label "House Door Chat">><<run setup.houseDoorChatChoose(_topic.id)>><</link>></div><</capture>><</for>>
<div class="house-visit-choice"><<link "Leave them to their day" _return>><</link>></div></div>
<<elseif _chat.stage is "answer">>
<p><<= _chat.answer.text >></p><<npcSay _npc _chat.answer.line>>
<div class="house-visit-choice-list">
<<for _response range setup.houseDoorChatFollowups(_chat.topic)>><<capture _response>><div class="house-visit-choice"><<link _response.label "House Door Chat">><<run setup.houseDoorChatRespond(_response.id)>><</link>></div><</capture>><</for>>
<div class="house-visit-choice"><<link "Leave the conversation here" _return>><</link>></div></div>
<<else>>
<p><<= _chat.result.text >></p><<npcSay _npc _chat.result.line>>
<<print setup.houseVisitGainHtml(_chat.result)>>
<<if _chat.topic is "plans" and _chat.response is "join" and setup.houseDoorActivityList(_npc).length>>
<div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Suggest an activity" "NPCActivityMenu">><<set $activeNpcId = _npc.id>><<set $return = _return>><</link>></div></div>
<</if>>
<div class="house-return-link"><<link "Return to the doorstep" _return>><</link>></div>
<</if>><</if>></div><</nobr>><<nobr>><<set _data = setup.houseWorkData()>><div class="house-visit-shell house-work-shell">
<<if !_data>><p>The household job is no longer available.</p><div class="house-return-link"><<link "Leave the house" "House Exterior">><<run setup.houseWorkEnd()>><</link>></div>
<<else>><<set _npc = _data.npc>><<set _work = _data.work>>
<<if _work.stage is "offer" or _work.stage is "result">>
<<if _work.reward is "food">><p>Your host hands you <<= _work.result.foodDescription || "some food" >> from the household stores as payment. The work is settled.</p>
<<elseif _work.reward is "money">><p>Your host counts out <<= _work.result.goldGain >> gold for the job. The work is settled.</p>
<<else>><p>You decline payment. Your host accepts the kindness without treating it as a promise of more work.</p><</if>>
<p><<print setup.houseVisitGainHtml(_work.result)>></p>
<<if _work.stage is "offer" and setup.houseWorkPropositionCheck()>>
<<set _desire = setup.npcPropositionDesireLabel(_work.proposition)>>
<<if _work.scenario is "laundry">><p>As you reach for the door, they catch your eye over the last sheet on the line. The paid work is over; what they ask now is separate.</p>
<<else>><p>The bed is made and your payment settled. They linger beside it, then make a separate invitation you can freely refuse.</p><</if>>
<<set _offerWords = "I would like " + _desire + " with you, if you want it too. Otherwise, we can leave things here.">><<npcSay _npc _offerWords>>
<div class="house-visit-choice-list"><div class="house-visit-choice"><<set _acceptLabel = "Accept (" + _desire + ")">><<link _acceptLabel>><<run setup.houseWorkAcceptProposition()>><<goto "NPCEncounter">><</link>></div><div class="house-visit-choice"><<link "Decline and leave" "House Exterior">><<run setup.houseWorkDeclineProposition()>><<run setup.houseWorkEnd()>><</link>></div></div>
<<else>><div class="house-return-link"><<link "Leave the house" "House Exterior">><<run setup.houseWorkEnd()>><</link>></div><</if>>
<<elseif !_data.available>><p>The resident has stepped away before the work could be finished. You leave the unfinished task.</p><div class="house-return-link"><<link "Leave the house" "House Exterior">><<run setup.houseWorkEnd()>><</link>></div>
<<else>>
<<set _workPassage = "House Work " + _work.scenario>><<include _workPassage>>
<div class="house-visit-choice-list"><<for _option range setup.houseWorkChoices(_data)>><<capture _option>><div class="house-visit-choice"><<link _option.label>><<run setup.houseWorkChoose(_option.id)>><<if _option.id is "leave">><<goto "House Exterior">><<else>><<goto "House Work">><</if>><</link>></div><</capture>><</for>></div>
<</if>><</if>></div><</nobr>><<if _work.stage is "task">><p>Split wood blocks the way to the hearth. The basket beside it is too small, and every trip across the room scatters another piece.</p>
<<npcSay _npc "I need the path clear before dark. Can you put the pile somewhere that will actually hold it?">>
<<elseif _work.stage is "twist">><p>As the floor clears, one of the larger logs hisses near the fire. Half the pile is damp. If it is stacked against the hearth, the room will fill with smoke tonight.</p>
<<npcSay _npc "That wood was meant to be dry. We should deal with it before someone lights the fire.">>
<<else>><<if _work.quality gt 0>><p>The walkway is clear and the damp pieces are separated. Your host tests the new stack with a firm shove; nothing falls.</p><<else>><p>The floor is clear, but the damp wood still smokes near the hearth. Your host will have to sort it again later.</p><</if>><<npcSay _npc "That is the work done. Let us settle what I owe you.">><</if>><<if _work.stage is "task">><p>Freshly washed sheets fill the wash tub. Your host has been hauling them alone, and the line outside is only half ready.</p><<npcSay _npc "If they stay in the tub, they will smell damp by morning. Help me get them up.">>
<<elseif _work.stage is "twist">><p>As you lift the last sheet, a red dye mark spreads from a smaller cloth left in the bundle. It will stain the good linen unless it is rinsed now.</p><<npcSay _npc "That cloth should never have gone in with the whites. We still have a moment to save them.">>
<<else>><<if _work.quality gt 0>><p>The line is full and the marked sheet has been rinsed before the stain could set. Your host checks the cloth in the light and nods.</p><<else>><p>The sheets are hanging, but one bears a red mark. Your host notices it even though the work is otherwise finished.</p><</if>><<npcSay _npc "The washing is done. Now, what shall I give you for the time?">><</if>><<if _work.stage is "task">><p>A storage basket has tipped beside the pantry. Wrapped food and jars crowd the floor, with loose grain gathering in the cracks between the boards.</p><<npcSay _npc "Get what we can off the floor. I cannot afford to lose a week of stores to one bad basket.">>
<<elseif _work.stage is "twist">><p>Under the last jar you find a seal that has come loose. The contents may still be sound, but putting it back without checking risks the rest of the shelf.</p><<npcSay _npc "That seal was whole yesterday. Tell me if there is something else wrong with it.">>
<<else>><<if _work.quality gt 0>><p>The stores are upright and the doubtful jar has been checked before it can spoil its neighbors.</p><<else>><p>The floor is cleared, but the loose seal remains among the other jars. Your host looks at the shelf with understandable doubt.</p><</if>><<npcSay _npc "That is enough for today. Let us settle your pay.">><</if>><<if _work.stage is "task">><p>The side shutter bangs in the wind. Its lower hinge has pulled away from the frame, letting cold air through every time it swings.</p><<npcSay _npc "I can hold the tools, but I cannot steady that shutter and set the hinge at once. Give me a hand.">>
<<elseif _work.stage is "twist">><p>The frame sits straight until the next gust. Then an old wooden peg splits, leaving the hinge loose again. The repair needs more than a shove.</p><<npcSay _npc "There goes the peg. We need to fix that properly or I will hear it all night.">>
<<else>><<if _work.quality gt 0>><p>You test the shutter twice. It stays closed and the room grows noticeably quieter.</p><<else>><p>The shutter closes, but the hinge still moves in the wind. Your host will need to revisit the repair.</p><</if>><<npcSay _npc "We are finished for now. Let me pay you before you go.">><</if>><<if _work.stage is "task">><p>The evening meal is behind schedule. Vegetables still need cutting, the water bucket is low, and a pot waits over a growing fire.</p><<npcSay _npc "I need another pair of hands or supper will be late and half cooked. Take whichever part you can manage.">>
<<elseif _work.stage is "twist">><p>The fire flares and the pot begins to boil over. The vegetables are almost ready, but another minute of neglect will burn the bottom.</p><<npcSay _npc "Mind the pot. We can still save the meal if we move now.">>
<<else>><<if _work.quality gt 0>><p>Supper comes together on time. Your host tastes the broth, adds a little salt, and takes the pot off the fire.</p><<else>><p>The meal is made, though the scorched bottom leaves a bitter edge. Your host sets the pot aside with a tired look.</p><</if>><<npcSay _npc "You worked through the worst of it. Let us settle up.">><</if>><<if _work.stage is "task">><p>A narrow bed must be moved away from a damp wall before its bedding can be aired. Your host has already stripped one corner but cannot shift the frame alone.</p><<npcSay _npc "Help me move it clear and put fresh linen on. The damp will ruin everything if I leave it another day.">>
<<elseif _work.stage is "twist">><p>A small keepsake falls from the folds of the old sheet. It was hidden deliberately. Your host sees your hand close around it and waits for you to decide what to do.</p><<npcSay _npc "I wondered where that went. I would rather you handed it back than pretended it was not there.">>
<<else>><<if _work.quality gt 0>><p>The bed stands clear of the damp wall, the linen is fresh, and the keepsake is back in its owner's hands.</p><<else>><p>The bed is made, but the missing keepsake leaves your host uneasy. The work is done without the easy trust it might have earned.</p><</if>><<npcSay _npc "The work is finished. We should settle your payment.">><</if>><<nobr>><<set _rent = $tavernRoomRentResult>><<set _counter = setup.tavernCounterNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !_rent or !_rent.ok>><p><<= _rent ? _rent.text : "No room was arranged." >></p>
<<else>><p>You count out <<= _rent.cost >> gold for <<= _rent.days >> <<= _rent.days is 1 ? "day" : "days" >>. <<if _counter>><<print setup.npcEventMentionHtml(_counter, "The innkeeper")>><<else>>The innkeeper<</if>> marks the paid time in the ledger <<if _rent.extended>>and leaves your existing key with you<<else>>before sliding a worn key across the counter<</if>>.</p>
<<if _counter>><<print setup.npcEventDialogueHtml(_counter, "The room is yours through " + setup.tavernRoomExpiryText() + ". Keep the key close and we will keep the bed ready.", "The innkeeper")>><</if>>
<p class="farm-work-gain-line"><b id="Goldloss">-<<= _rent.cost >> Gold</b></p><</if>>
<div class="npc-return-link">[[Return to the counter|Tavern innkeeper]]</div></div><</nobr>><<nobr>><<set _study = $bookStudyResult>><div class="npc-activity-panel farm-work-event-panel">
<<if !_study or !_study.ok>><p><<= _study ? _study.text : "The book is no longer at hand." >></p>
<<else>><div class="npc-interact-name"><<= _study.label >></div>
<p>You settle at <<= _study.spot >>, hold the pages flat, and work through a section without rushing past what you do not understand.</p>
<p><<= _study.note >></p>
<p><<= _study.text >></p>
<<print setup.bookStudyGainHtml(_study.gains)>>
<<if _study.completed>><p>You close the book knowing you can use what it taught without keeping it open beside you.</p><</if>><</if>>
<div class="npc-return-link">[[Return to the books|RecipeBooks]]</div></div><</nobr>><<nobr>><<run setup.ensureChapelWorkSystem()>><<set _quest = $chapelWorkQuest>><<set _recipient = setup.chapelQuestRecipient()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !_recipient>><p>The chapel contact cannot be found.</p>
<<elseif _quest.state is "favor">>
<p>The contact sets the chapel's parcel aside. A brass seal slipped from <<= _recipient.gender is "male" ? "his" : "her" >> pack on the road near Briar Hollow. Without it, the reply to the keeper will carry no familiar mark.</p>
<<print setup.npcEventDialogueHtml(_recipient, "Someone in the hamlet may have picked up my seal. Find it and bring it here, or stay and settle the favor with me privately. Either way, I will send the keeper a signed answer once you have done your part.", "The chapel contact")>>
<div class="npc-activity-choice-list">
<<set _ready = setup.chapelQuestFavorCheck()>><<if _ready.ok>><div><<set _favorLabel = _recipient.gender is "female" ? "Agree to touch her privately" : "Agree to give him a handjob">><<link _favorLabel>><<set _started = setup.chapelQuestStartIntimacy()>><<if !_started.blocked>><<goto "NPCEncounter">><<else>><<goto "ChapelTrialFavor">><</if>><</link>></div><<else>><div class="player-choice-status">The private favor is not something you can agree to now.</div><</if>>
<div><<link "Ask Briar Hollow residents about the lost seal" "ChapelTrialFavor">><<run setup.chapelFavorBeginSearch()>><</link>></div></div>
<<elseif _quest.state is "search">><p>The contact is waiting for news. Speak with Briar Hollow residents when you find them; someone may have kept the brass seal safe.</p>
<<elseif _quest.state is "found">><p>You show the brass seal you recovered in Briar Hollow. The contact turns it over, finding the familiar notch beside the chapel mark.</p>
<<print setup.npcEventDialogueHtml(_recipient, "That is mine. You did not have to take the long road for me, but you did. Give me a moment to seal the chapel's reply.", "The chapel contact")>>
<div class="npc-activity-choice-list"><div><<link "Return the seal and take the letter" "ChapelTrialFavorResult">><<run setup.chapelFavorReturnSeal()>><</link>></div></div>
<<else>><p>There is no further request to settle here.</p><</if>>
<div class="npc-return-link">[[Return to the shrine|Ruined Wayside Shrine]]</div></div><</nobr>><<nobr>><<set _quest = $chapelWorkQuest>><div class="npc-activity-panel farm-work-event-panel">
<<if !_quest or _quest.state isnot "search">><p>There is no lost seal left to ask about.</p>
<<else>><p>Speak with Briar Hollow residents you meet and ask whether they have seen the lost brass seal.</p><</if>>
<div class="npc-return-link">[[Return to Briar Hollow|BH Center]]</div></div><</nobr>><<nobr>><<set _result = $chapelFavorAskResult>><<set _resident = _result and _result.npcId ? setup.getNpcById(_result.npcId) : null>><div class="npc-activity-panel farm-work-event-panel">
<<if !_result or !_result.ok or !_resident>><p>No one can answer that question right now.</p>
<<elseif _result.found>><p><<print setup.npcEventMentionHtml(_resident, "A resident")>> recognizes the worn notch in your description and reaches into a small pouch.</p>
<<print setup.npcEventDialogueHtml(_resident, "I picked this up beside the east path. I meant to ask whose it was. Take it back to the shrine, and tell him someone here kept it safe.", "The resident")>>
<p>You take the brass seal. The contact can now mark his reply to the chapel.</p>
<<else>><p><<print setup.npcEventMentionHtml(_resident, "A resident")>> thinks for a moment, then shakes <<= _resident.gender is "male" ? "his" : "her" >> head.</p>
<<print setup.npcEventDialogueHtml(_resident, "I saw someone bend to pick up a small thing near the east path, but I could not tell who. Ask the others before you give up.", "The resident")>><</if>>
<div class="npc-return-link"><<if _result and _result.found>>[[Return to Briar Hollow|BH Center]]<<else>>[[Ask someone else|ChapelFavorAskAround]]<</if>></div></div><</nobr>><<nobr>><<set _quest = $chapelWorkQuest>><<set _recipient = setup.chapelQuestRecipient()>><div class="npc-activity-panel farm-work-event-panel">
<<if _quest and _quest.state is "letter">><p>The contact writes a brief account of the delivered medicine and the favor you completed. <<if _quest.favorMethod is "seal">>The recovered brass seal leaves its familiar mark in the wax.<<else>>Without the missing seal, the contact signs the letter by hand and binds it with the chapel thread.<</if>> The folded reply is yours to carry back to the keeper.</p>
<<if _recipient>><<print setup.npcEventDialogueHtml(_recipient, "Give this to the keeper unopened. It says you finished what you were asked to do. I would rather my own words reach the chapel than another rumor on the road.", "The chapel contact")>><</if>>
<<else>><p>The contact has not sealed a reply yet. You can still look for the lost seal in Briar Hollow.</p><</if>>
<div class="npc-return-link">[[Return to the shrine|Ruined Wayside Shrine]]</div></div><</nobr>><<nobr>><<set _ledger = setup.ensureTaxSystem()>>
<<set _home = setup.taxRegisteredHouse()>>
<<set _pending = _ledger and _ledger.pendingHouseId ? setup.houseById(_ledger.pendingHouseId) : null>>
<div class="journal-character-section"><div class="journal-character-section-title">Regional taxes</div>
<<if _ledger>>
<p>Balance due: <b><<= _ledger.playerDebt >> gold</b>.</p>
<<if setup.taxOverdueDays(_ledger) gt 0>><p>Oldest unpaid charge: <<= setup.taxOverdueDays(_ledger) >> days overdue.</p><</if>>
<<if _ledger.paymentPlan and !_ledger.paymentPlan.broken>><p>Payment arrangement: at least 5 gold toward arrears by day <<= _ledger.paymentPlan.nextDueDay >>. New weekly taxes still accrue.</p><</if>>
<<if _ledger.wageCollectionActive>><p>A small portion of each job wage is being collected toward the oldest bill.</p><</if>>
<<if _ledger.partnerLoan and _ledger.partnerLoan.amount gt 0>><<set _loanNpc = setup.getNpcById(_ledger.partnerLoan.npcId)>><p>You also owe <b><<= _ledger.partnerLoan.amount >> gold</b> to <<if _loanNpc>><<npcMention _loanNpc>><<else>>your former partner<</if>> for a tax payment they covered.</p><</if>>
<<if _ledger.partnerPromise>><p>You promised your partner to reduce the balance by at least 5 gold by day <<= _ledger.partnerPromise.dueDay >>.</p><</if>>
<<if _ledger.collectorPromise and !_ledger.collectorPromise.broken>><p>You promised the collector at least 5 gold by day <<= _ledger.collectorPromise.dueDay >>.</p><</if>>
<<if _ledger.playerDebt gt 0 and _ledger.playerGraceUntilDay gte setup.npcCurrentDay()>><p>Payment extension through day <<= _ledger.playerGraceUntilDay >>.</p><</if>>
<<if _pending>><p>Your shared home at <<= _pending.address >> is awaiting registration at the town hall. You have until day <<= _ledger.registrationGraceUntilDay >> before the traveler levy resumes. Earlier debt remains yours.</p><</if>>
<<if _home>>
<p>You share the tax on <<= _home.address >>: 12 gold of the 25-gold weekly household assessment (100 gold over four weeks). Next assessment: day <<= _ledger.accounts[_home.id].nextDueDay >>.</p>
<<else>>
<p>As a resident traveler, you owe 10 gold each week instead of household tax. Next assessment: day <<= _ledger.nextTravelerDueDay >>.</p>
<</if>>
<<if _ledger.notices.length>><details class="journal-quest-group tax-notices"><summary>Recent notices<span class="journal-quest-count"><<= _ledger.notices.length >></span></summary><div class="tax-notices-list">
<<for _notice range _ledger.notices>><p>Day <<= _notice.day >>: <<= _notice.text >></p><</for>></div></details><</if>>
<<else>><p>No tax register has been opened yet.</p><</if>>
</div><</nobr>><<nobr>><<set _location = $taxReturn || "Ambercross Town Hall">>
<<set _ledger = setup.ensureTaxSystem()>>
<<set _collector = setup.taxCollectorHere(_location)>>
<div class="npc-activity-panel"><div class="npc-interact-name">Tax register</div>
<<include "JournalTaxes_body">>
<<if $taxMessage>><p class="cooking-message"><<= $taxMessage >></p><<set $taxMessage = "">><</if>>
<<if _location is "Ambercross Town Hall" and _collector and _ledger.pendingHouseId>><div class="npc-activity-choice-list"><div>[[Register the shared household|Tax Registration]]</div></div><</if>>
<<if _ledger and _ledger.playerDebt gt 0>>
<<if _collector>>
<<print setup.npcEventDialogueHtml(_collector, "I can take a payment now and mark it against what you owe.")>>
<div class="npc-activity-choice-list">
<<for _amount range [5, 10, 25]>><<if $c.gold gte _amount and _ledger.playerDebt gte _amount>><<capture _amount>><div><<set _label = "Pay " + _amount + " gold">><<link _label "Town Taxes">><<set $taxMessage = setup.taxPay(_amount, _location)>><</link>></div><</capture>><</if>><</for>>
<<if $c.gold gt 0>><div><<set _maxPay = Math.min(Math.floor($c.gold), _ledger.playerDebt)>><<set _maxLabel = $c.gold gte _ledger.playerDebt ? "Pay full balance (" + _maxPay + " gold)" : "Pay all available (" + _maxPay + " gold)">><<link _maxLabel "Town Taxes">><<set $taxMessage = setup.taxPay(_maxPay, _location)>><</link>></div><</if>>
<<if _location is "Ambercross Town Hall">>
<<if !_ledger.lastExtensionDay or setup.npcCurrentDay() - _ledger.lastExtensionDay gte 28>><div><<link "Request a seven-day extension on the next bill" "Town Taxes">><<set $taxMessage = setup.taxRequestExtension()>><</link>></div><</if>>
<<set _favor = setup.taxFavorOffer()>><<if _favor>><div><<set _favorLabel = "Ask for 10 gold of relief (" + _favor.label + ")">><<link _favorLabel "Tax Relief Offer">><</link>></div><</if>>
<</if>>
</div>
<<else>><p>There is no clerk or guard here to accept payment right now. The register remains open to read.</p><</if>>
<</if>>
<div class="npc-return-link"><<link "Return" _location>><<set $taxReturn = "">><</link>></div>
</div><</nobr>><<nobr>><<set _npc = setup.getNpcById($taxEventNpcId)>>
<<set _ledger = setup.ensureTaxSystem()>>
<<if _npc and _ledger>><<set _ledger.eventSeen[_npc.id] = setup.npcCurrentDay()>><</if>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _npc and _ledger and _ledger.npcDebts[_npc.id] gt 0>>
<<if _ledger.npcDebts[_npc.id] gte 50>><p>A tax notice bearing <<npcMention _npc>>'s name has been pinned where neighbors can read it. They stand nearby, painfully aware of every glance toward the board.</p>
<<else>><p><<npcMention _npc>> is studying a folded tax notice. They put it away when they see you, but the worry stays on their face.</p><</if>>
<<print setup.npcEventDialogueHtml(_npc, "I am behind on the house tax. Work has not covered it yet, and the next payment is coming.")>>
<div class="npc-activity-choice-list">
<<if $c.gold gt 0>><div><<link "Pay up to 5 gold toward their debt" "Tax Debtor Result">><<set $taxEventResult = setup.taxHelpDebtor(_npc.id, "pay")>><</link>></div><</if>>
<<if setup.npcJobs[_npc.jobId] and setup.npcJobs[_npc.jobId].workSlots.length>><div><<link "Help arrange extra shifts" "Tax Debtor Result">><<set $taxEventResult = setup.taxHelpDebtor(_npc.id, "work")>><</link>></div><</if>>
<div><<link "Leave them to decide" "Tax Debtor Result">><<set $taxEventResult = setup.taxHelpDebtor(_npc.id, "leave")>><</link>></div>
</div>
<<else>><p>The notice has already been settled.</p><</if>>
<div class="npc-return-link">[[Return|Tax Debtor Result]]</div></div><</nobr>><<nobr>><div class="npc-activity-panel farm-work-event-panel"><p><<= $taxEventResult || "The conversation ends without a decision." >></p><div class="npc-return-link"><<link "Continue" $taxEventReturn>><<set $taxEventResult = "">><</link>></div></div><</nobr>><<nobr>><<set _ledger = setup.ensureTaxSystem()>><<set _guard = setup.taxGateGuard(_ledger)>>
<div class="npc-activity-panel farm-work-event-panel">
<p>The road narrows at the watch post. A guard steps into your path with one hand raised, while the other keeps a finger in a worn register. People pass through after a nod; you are the one asked to wait.</p>
<<if _guard>><<print setup.npcEventDialogueHtml(_guard, "Hold on. I know most faces that come through this gate, and I have not seen yours. What brings you to Ambercross?")>><<else>><p><em>"Hold on. I have not seen you here before. What brings you to Ambercross?"</em></p><</if>>
<div class="npc-activity-choice-list">
<div><<link "Ask where you might find paid work" "Tax Arrival Questions">><<set _ledger.gatePurpose = "work">><</link>></div>
<div><<link "Say you need a place to stay" "Tax Arrival Questions">><<set _ledger.gatePurpose = "lodging">><</link>></div>
<div><<link "Say you are passing through" "Tax Arrival Questions">><<set _ledger.gatePurpose = "passing">><</link>></div>
<div><<link "Keep your plans to yourself" "Tax Arrival Questions">><<set _ledger.gatePurpose = "private">><</link>></div>
</div></div><</nobr>><<nobr>><<set _ledger = setup.ensureTaxSystem()>><<set _guard = setup.taxGateGuard(_ledger)>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _ledger.gatePurpose is "work">>
<p>You explain that you came hoping to earn a wage. The guard closes the register without writing anything yet and looks toward the streets beyond the gate.</p>
<<if _guard>><<print setup.npcEventDialogueHtml(_guard, "There is work, though no one will hire you on my word. The piers need hands, the tavern needs people when it is busy, and the farmer east of here can always tell you what needs doing. Which sounds worth asking about?")>><</if>>
<div class="npc-activity-choice-list">
<div><<link "Ask about work at the piers" "Tax Arrival Register">><<set _ledger.gateInterest = "piers">><</link>></div>
<div><<link "Ask about the tavern" "Tax Arrival Register">><<set _ledger.gateInterest = "tavern">><</link>></div>
<div><<link "Ask about farm work" "Tax Arrival Register">><<set _ledger.gateInterest = "farm">><</link>></div>
<div><<link "Thank them and look around yourself" "Tax Arrival Register">><<set _ledger.gateInterest = "general">><</link>></div></div>
<<elseif _ledger.gatePurpose is "lodging">>
<p>You say you need a bed before you can make any other plans. The guard glances up the street toward the tavern sign.</p>
<<if _guard>><<print setup.npcEventDialogueHtml(_guard, "The tavern lets rooms when it has them. Ask the innkeeper about a key and a price. Will you be looking for work as well, or only a night's rest?")>><</if>>
<div class="npc-activity-choice-list">
<div><<link "Ask if the tavern needs help too" "Tax Arrival Register">><<set _ledger.gateInterest = "tavern">><</link>></div>
<div><<link "Say you only need a room for now" "Tax Arrival Register">><<set _ledger.gateInterest = "lodging">><</link>></div></div>
<<elseif _ledger.gatePurpose is "passing">>
<p>You tell the guard you are only passing through. They ease a little, but keep the register open.</p>
<<if _guard>><<print setup.npcEventDialogueHtml(_guard, "Fair enough. Some travelers are gone by morning; others find a reason to stay. Do you expect to be back on the road tomorrow?")>><</if>>
<div class="npc-activity-choice-list">
<div><<link "Say you expect to leave tomorrow" "Tax Arrival Register">><<set _ledger.gateInterest = "passing">><</link>></div>
<div><<link "Admit you might stay if you find work" "Tax Arrival Register">><<set _ledger.gateInterest = "general">><</link>></div></div>
<<else>>
<p>You give no account of your plans. The guard studies you for a moment, then turns the register so only the blank line faces you.</p>
<<if _guard>><<print setup.npcEventDialogueHtml(_guard, "I am not asking for your life story. If you mean to stay, the clerk needs a name. If you are looking for work, I can at least point you in the right direction.")>><</if>>
<div class="npc-activity-choice-list">
<div><<link "Relent and ask where to find work" "Tax Arrival Register">><<set _ledger.gateInterest = "general">><</link>></div>
<div><<link "Give your name, but nothing more" "Tax Arrival Register">><<set _ledger.gateInterest = "private">><</link>></div></div>
<</if>>
</div><</nobr>><<nobr>><<set _ledger = setup.ensureTaxSystem()>><<set _guard = setup.taxGateGuard(_ledger)>>
<<if !_ledger.introduced>><<set _ledger.nextTravelerDueDay = setup.npcCurrentDay() + 7>><<set _ledger.introduced = true>><</if>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _ledger.gateInterest is "piers">><p>The guard points across the square toward the water. The fishmonger at the piers decides who gets a trial; you will have to ask and show you can keep up.</p>
<<elseif _ledger.gateInterest is "tavern">><p>The guard points toward the tavern. Ask the innkeeper about serving or kitchen work, they say; a room and a job are separate bargains.</p>
<<elseif _ledger.gateInterest is "farm">><p>The farmer's house lies east of the gate. The guard suggests asking there about field work, though the farmer will judge your help for themself.</p>
<<elseif _ledger.gateInterest is "general">><p>The guard names the piers, the tavern, and the farmer east of the gate as places to ask. None promises a wage sight unseen.</p>
<<elseif _ledger.gateInterest is "lodging">><p>The guard points you toward the tavern for a room. You can settle other plans after you have somewhere to put your things.</p>
<<elseif _ledger.gateInterest is "passing">><p>The guard leaves the road open behind you. If you are gone tomorrow, the clerk will have little reason to look for you.</p>
<<else>><p>The guard accepts your name without pressing for an explanation. The register stays between you as they turn to the next line.</p><</if>>
<p>Before waving you through, the guard taps the margin of the register. There is one condition of staying that they want you to hear from them, not discover on a bill.</p>
<<if _guard>>
<<if _ledger.gatePurpose is "passing" and _ledger.gateInterest is "passing">><<print setup.npcEventDialogueHtml(_guard, "No charge for walking through the gate. If you are still living around here a week from now, the resident traveler's levy is ten gold each week. Your first assessment would be on day " + _ledger.nextTravelerDueDay + ". Leave tomorrow and there is nothing to pay.")>>
<<elseif _ledger.gatePurpose is "private" and _ledger.gateInterest is "private">><<print setup.npcEventDialogueHtml(_guard, "Your business can stay your own. The register only marks that you arrived. If you remain in the district, a traveler without a registered home owes ten gold a week, starting on day " + _ledger.nextTravelerDueDay + ". No payment today.")>>
<<elseif _ledger.gatePurpose is "lodging">><<print setup.npcEventDialogueHtml(_guard, "A rented room gives you a bed, not a place on a household tax roll. If you stay, the traveler levy is ten gold a week. The first assessment is day " + _ledger.nextTravelerDueDay + "; I am not collecting it now.")>>
<<else>><<print setup.npcEventDialogueHtml(_guard, "If you stay to work around Ambercross, the register counts you as a resident traveler until you have a registered home. That is ten gold each week. Your first assessment is day " + _ledger.nextTravelerDueDay + ", so you have time to earn before you owe.")>><</if>>
<<else>><p>The guard explains that a resident traveler pays ten gold weekly, with the first assessment on day <<= _ledger.nextTravelerDueDay >>. Nothing is due at the gate today.</p><</if>>
<p>The register is now noted in your journal.</p>
<div class="npc-activity-choice-list">
<div><<link "Ask what the levy pays for" "Tax Arrival Followup">><<set _ledger.gateTaxQuestion = "why">><</link>></div>
<div><<link "Ask where to pay or register a home" "Tax Arrival Followup">><<set _ledger.gateTaxQuestion = "where">><</link>></div>
<div><<link "Say you cannot pay today" "Tax Arrival Followup">><<set _ledger.gateTaxQuestion = "money">><</link>></div>
</div>
<div class="npc-return-link"><<link "Continue into the village center" "Ambercross Center">><<set _ledger.gateNoticeSeen = true>><</link>></div></div><</nobr>><<nobr>><<set _ledger = setup.ensureTaxSystem()>><<set _guard = setup.taxGateGuard(_ledger)>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _ledger.gateTaxQuestion is "why">><p>You ask what your coins would buy besides a line in the clerk's book.</p>
<<if _guard>><<print setup.npcEventDialogueHtml(_guard, "Roads that carts can use, a watch at the gate, and the town's other expenses. You can argue with the clerk about where every coin goes. I only make sure newcomers know the rule before a bill arrives.")>><</if>>
<<elseif _ledger.gateTaxQuestion is "where">><p>You ask where the payment goes if you stay, and what changes if you find a home.</p>
<<if _guard>><<print setup.npcEventDialogueHtml(_guard, "Bring payment to this watch post or the town hall clerk. If you move in with someone, tell the clerk; your name can go on their household bill instead. It will not erase anything you owed before that.")>><</if>>
<<else>><p>You admit you cannot spare ten gold before you have earned any.</p>
<<if _guard>><<print setup.npcEventDialogueHtml(_guard, "I am not asking for it now. The first week gives you time. If the bill comes and you are short, speak to the clerk rather than waiting for someone to come after you.")>><</if>><</if>>
<p>The guard steps aside. The square is open to you.</p>
<div class="npc-return-link"><<link "Continue into the village center" "Ambercross Center">><<set _ledger.gateNoticeSeen = true>><</link>></div></div><</nobr>><<nobr>><<set _partner = setup.getNpcById($taxMoveInNpcId)>><<set _house = _partner ? setup.houseById(_partner.homeId) : null>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _partner and _house>><p>As you agree to share <<npcMention _partner>>'s home at <<= _house.address >>, they bring up one practical detail before you part.</p>
<<print setup.npcEventDialogueHtml(_partner, "We should tell the town hall clerks you live with me now. They can put your name beside mine and split the house tax. Until we do, the register still has you down as a traveler.")>>
<p>You have seven days to register the shared household. Any tax you already owe remains on your own account.</p><<else>><p>The town hall can update your tax status when you have a shared home to register.</p><</if>>
<div class="npc-return-link"><<link "Continue" "NPCRelationshipMenu">><<set $lastRelationshipResult = null>><</link>></div></div><</nobr>><<nobr>><<set _clerk = setup.taxCollectorHere("Ambercross Town Hall")>><<set _message = setup.taxRegisterHouse()>>
<div class="npc-activity-panel farm-work-event-panel"><p><<= _message >></p>
<<if _clerk and setup.taxRegisteredHouse()>><<print setup.npcEventDialogueHtml(_clerk, "Your names are together in the register now. Your share is twelve gold each week; the rest remains with the household. Bring future payments here or to the watch post.")>><</if>>
<div class="npc-return-link">[[Return to the town hall|Ambercross Town Hall]]</div></div><</nobr>><<nobr>><<set _offer = setup.taxFavorOffer()>>
<div class="npc-activity-panel farm-work-event-panel">
<<if _offer>><p>The clerk draws your unpaid notice out of the stack and lowers their voice. A private arrangement could remove ten gold from the balance, but you are free to leave the offer on the table.</p>
<<print setup.npcEventDialogueHtml(_offer.npc, "I can strike ten gold from this account if you spend a little time with me in private. Nothing changes unless we both agree and you follow through.")>>
<div class="npc-activity-choice-list"><div><<set _label = "Agree to " + _offer.label + " for 10 gold of relief">><<link _label>><<set _started = setup.taxStartFavor()>><<if _started.blocked>><<set $taxMessage = "The private arrangement is no longer available.">><<goto "Town Taxes">><<else>><<goto "NPCEncounter">><</if>><</link>></div><div>[[Decline and keep the bill|Town Taxes]]</div></div>
<<else>><p>The offer is no longer available. Your balance remains unchanged.</p><div class="npc-return-link">[[Return to the register|Town Taxes]]</div><</if>>
</div><</nobr>><<nobr>><<set _scene = $loyaltyInterruption>><<set _npc = _scene ? setup.getNpcById(_scene.npcId) : null>><<set _other = _scene and _scene.evidenceNpcId ? setup.getNpcById(_scene.evidenceNpcId) : null>>
<<if !_scene or !_npc>><p>The conversation has passed.</p>
<<elseif _scene.stage is "opening">>
<p><<npcMention _npc>> catches you before you can continue on your way. Their voice stays low, but they do not let the question disappear into small talk.</p>
<<set _line = setup.npcLoyaltyInterruptionOpeningLine(_npc, _scene)>><<npcSay _npc _line>>
<p>They wait for an answer, watching whether you meet their eyes.</p>
<<loyaltyChoice "ask" "Ask what they have heard">>
<<loyaltyChoice "privacy" "Ask to speak somewhere quieter">>
<<loyaltyChoice "admit" "Say there is something to admit">>
<<loyaltyChoice "deny" "Deny that there is anyone else">>
<<loyaltyChoice "accuse" "Challenge them for accusing you">>
<<elseif _scene.stage is "evidence">>
<<if _scene.lastChoice is "privacy">><p>You step aside together, out of easy hearing. That makes the silence between you harder to escape.</p><<else>><p>You ask them to say what has brought them here instead of leaving you to guess.</p><</if>>
<<if _scene.known and _other and _other.discovered and _other.discovered.met>><p>They mention <<npcMention _other>>. The name makes the question painfully specific.</p><<elseif _scene.known>><p>They have heard a story involving someone else, but do not name that person to you.</p><</if>>
<<set _line = setup.npcLoyaltyInterruptionEvidenceLine(_npc, _scene)>><<npcSay _npc _line>>
<<loyaltyChoice "admit" "Tell them what you did">>
<<loyaltyChoice "deny" "Say the story is wrong">>
<<loyaltyChoice "accuse" "Ask why they would believe it">>
<<loyaltyChoice "defer" "Ask for time before answering">>
<<elseif _scene.stage is "accountability">>
<p>You stop trying to make the subject smaller. They let you speak, but the hurt in their expression does not vanish.</p>
<<npcSay _npc "I need the truth, even if it changes what happens between us. Do not make me drag it out of you.">>
<<loyaltyChoice "confess" "Admit the breach and apologize">>
<<loyaltyChoice "repair" "Admit it and ask how to rebuild trust">>
<<loyaltyChoice "retreat" "Take it back and say nothing happened">>
<<elseif _scene.stage is "counter">>
<p>Your denial lands between you. They do not answer at once; they are listening as much to your hesitation as to your words.</p>
<<set _line = _scene.known ? "Then tell me why the story reached me at all. I am not asking you to repeat a line until I give up." : "Perhaps I am wrong. But I still need to know why we have been avoiding this conversation.">><<npcSay _npc _line>>
<<loyaltyChoice "maintain" "Stand by your denial">>
<<loyaltyChoice "confess" "Stop denying it and confess">>
<<loyaltyChoice "reassure" "Ask what reassurance they need">>
<<loyaltyChoice "accuse" "Argue that they do not trust you">>
<<elseif _scene.stage is "argument">>
<p>The conversation sharpens. A few people glance over, and your partner steps closer so neither of you has to raise your voice further.</p>
<<set _line = setup.npcTraitIncludes(_npc, "reserved") ? "I did not want an argument in the street. I wanted an answer you could say while looking at me." : "You can be angry that I asked. I am still asking. What happened?">><<npcSay _npc _line>>
<<loyaltyChoice "listen" "Lower your voice and hear them out">>
<<loyaltyChoice "blame" "Blame them for doubting you">>
<<loyaltyChoice "defer" "Leave before the argument grows">>
<<elseif _scene.stage is "result">>
<p><<print setup.npcEscapeHtml(_scene.result ? _scene.result.text : "The argument ends without an answer.")>></p>
<<if _npc.relationship.commitment.loyaltyState is "ended">><<npcSay _npc "I cannot promise you a place beside me after this. I need to go.">>
<<elseif _scene.lastChoice is "defer" or _scene.lastChoice is "blame">><<npcSay _npc "We have not settled this. I will not pretend we have.">>
<<elseif _scene.lastChoice is "confess" or _scene.lastChoice is "repair">><<npcSay _npc "I heard you. I need time before I know what that honesty means for us.">>
<<else>><<npcSay _npc "I want to believe we can speak plainly again. It will take more than one conversation.">><</if>>
<<loyaltyChoice "finish" "Continue">>
<</if>><</nobr>><<nobr>><<set _scene = $partnerRumorInterruption>><<set _rumor = _scene ? setup.npcPartnerRumorById(_scene.rumorId) : null>><<set _partner = _scene ? setup.getNpcById(_scene.partnerId) : null>><<set _other = _scene ? setup.getNpcById(_scene.otherId) : null>>
<<if !_scene or !_rumor or !_partner or !_other>><p>The conversation has passed.</p>
<<elseif _scene.stage is "opening">>
<p><<npcMention _partner>> stops you as you cross the street. They have come to ask about <<npcMention _other>>, and the question cannot be put off with a greeting.</p>
<<set _line = _rumor.source is "private" ? "I heard you were alone together. Tell me what happened before I hear another version of it." : _rumor.source is "relationship" ? "People say there is something growing between you. I want to know whether they are right." : "I heard about the attention you have been giving each other. What am I supposed to make of it?">><<npcSay _partner _line>>
<p>Their anger is close to the surface, but they are waiting for your answer.</p>
<<partnerRumorChoice "heard" "Ask what they heard">>
<<partnerRumorChoice "ask" "Ask whether they have spoken to their partner">>
<<partnerRumorChoice "apologize" "Admit your part and apologize">>
<<partnerRumorChoice "deny" "Say the rumor is wrong">>
<<partnerRumorChoice "challenge" "Challenge them for confronting you">>
<<elseif _scene.stage is "evidence">>
<<if _scene.lastChoice is "ask">><p>You ask whether <<npcMention _other>> has said any of this directly. They hesitate before answering.</p>
<<npcSay _partner "I will have my own conversation with them. Right now I am asking you.">>
<<else>><p>You ask for the story as they heard it, without trying to answer first.</p>
<<set _line = _rumor.source is "private" ? "Someone saw you go somewhere private together. I cannot pretend that means nothing." : "I heard enough to know this was not one harmless exchange. Tell me which part is wrong.">><<npcSay _partner _line>><</if>>
<<partnerRumorChoice "ask" "Ask why they came to you first">>
<<partnerRumorChoice "apologize" "Admit your part and apologize">>
<<partnerRumorChoice "deny" "Say they have misunderstood">>
<<partnerRumorChoice "challenge" "Argue that they have no proof">>
<<elseif _scene.stage is "question">>
<p>You ask why they chose to confront you before settling matters at home.</p>
<<npcSay _partner "Because I need to hear what you chose to do, not only what they say they meant. Those are different questions.">>
<<partnerRumorChoice "apologize" "Own your part and apologize">>
<<partnerRumorChoice "deny" "Insist you did nothing wrong">>
<<partnerRumorChoice "challenge" "Tell them to take it up with their partner">>
<<elseif _scene.stage is "admission">>
<p>You stop searching for a cleaner version of the story. Their expression tightens, but they let you finish.</p>
<<npcSay _partner "I cannot decide what this means for us while you are standing here. I can at least hear you take responsibility for it.">>
<<partnerRumorChoice "apologize" "Apologize without excuses">>
<<partnerRumorChoice "explain" "Explain your part, then apologize">>
<<partnerRumorChoice "retreat" "Take it back and deny it happened">>
<<elseif _scene.stage is "denial">>
<p>Your denial does not end the exchange. They watch you for a moment, trying to decide whether to believe it.</p>
<<npcSay _partner "Then say plainly that the story is false. Do not ask me to forget I heard it.">>
<<partnerRumorChoice "maintain" "Stand by your denial">>
<<partnerRumorChoice "apologize" "Stop denying it and apologize">>
<<partnerRumorChoice "challenge" "Argue that they should believe you">>
<<elseif _scene.stage is "argument">>
<p>The argument draws a glance from someone passing. Neither of you raises your voice further, but the words have turned sharper.</p>
<<npcSay _partner "You can be angry that I asked. That still does not tell me what happened.">>
<<partnerRumorChoice "listen" "Lower your voice and hear them out">>
<<partnerRumorChoice "backdown" "Admit your part">>
<<partnerRumorChoice "pushback" "Keep blaming them for the accusation">>
<<elseif _scene.stage is "result">>
<p><<print setup.npcEscapeHtml(_scene.result ? _scene.result.text : "The argument ends without an answer.")>></p>
<<set _line = _scene.lastChoice is "pushback" ? "I have heard enough. I will speak to them myself." : _scene.lastChoice is "maintain" ? "I will remember what you said. I still have to decide what to believe." : "I heard your apology. What happens next is not yours alone to decide.">><<npcSay _partner _line>>
<<partnerRumorChoice "finish" "Continue">>
<</if>><</nobr>><<nobr>><<set _scene = $taxCollectionInterruption>><<set _ledger = setup.ensureTaxSystem()>><<set _collector = _scene ? setup.getNpcById(_scene.npcId) : null>>
<<if !_scene or !_collector>><p>The collector has gone.</p>
<<elseif _scene.stage is "opening">>
<<if _scene.tier is 1>>
<p><<npcMention _collector>> steps into your path with a folded notice. The seal is unbroken; this is a warning, not an order to surrender your purse.</p>
<<npcSay _collector "Your name is still beside an unpaid levy. I would rather write down a plan than come looking for you again.">>
<<elseif _scene.tier is 2>>
<p><<npcMention _collector>> catches you near the road as a few people pass close enough to hear. They turn the register so only you can see the balance.</p>
<<set _line = _ledger.collectorPromise and _ledger.collectorPromise.broken ? "You promised five gold by the date I wrote down. It never came. Tell me what you can actually do now." : "The first notice did not settle this. Tell me how you mean to pay, or we will have to arrange another way.">><<npcSay _collector _line>>
<<else>>
<p><<npcMention _collector>> has a summons bearing the town seal. They wait until the foot traffic passes before speaking.</p>
<<npcSay _collector "This has been left long enough. You can still make an arrangement, but I cannot close the book with another promise alone.">>
<</if>>
<p>The register shows <b><<= _ledger.playerDebt >> gold</b> outstanding.</p>
<<taxCollectionChoice "account" "Ask them to explain the account">>
<<if $c.gold gt 0>><<taxCollectionChoice "pay" "Pay up to 5 gold now">><</if>>
<<if _scene.tier is 1 and (!_ledger.lastPromiseDay or setup.npcCurrentDay() - _ledger.lastPromiseDay gte 28)>><<taxCollectionChoice "promise" "Promise 5 gold within three days">><</if>>
<<if _scene.tier gte 2>><<if !_ledger.lastPlanDay or setup.npcCurrentDay() - _ledger.lastPlanDay gte 28>><<taxCollectionChoice "plan" "Arrange 5 gold a week">><</if>>
<<if (!_ledger.lastCivicDay or setup.npcCurrentDay() - _ledger.lastCivicDay gte 7) and $c.energy gte 6>><<taxCollectionChoice "task" "Ask to work off part of the bill">><</if>><</if>>
<<taxCollectionChoice "argument" "Challenge the collection">>
<<taxCollectionChoice "refuse" "Leave without an arrangement">>
<<elseif _scene.stage is "account">>
<p>You ask to see how the total was reached. They point to the oldest unpaid line before moving down the page.</p>
<<set _oldest = _ledger.playerBills[0]>>
<p>The earliest unpaid charge is <b><<= _oldest.amount >> gold</b>, assessed on day <<= _oldest.assessedDay >><<if _oldest.dueDay isnot _oldest.assessedDay>> with payment deferred to day <<= _oldest.dueDay >><</if>>. Paying part of the balance clears the oldest charge first.</p>
<<npcSay _collector "I can mark a payment against that first line. I can also record an arrangement, but I cannot pretend the page is empty.">>
<<if $c.gold gt 0>><<taxCollectionChoice "pay" "Pay up to 5 gold now">><</if>>
<<if _scene.tier is 1 and (!_ledger.lastPromiseDay or setup.npcCurrentDay() - _ledger.lastPromiseDay gte 28)>><<taxCollectionChoice "promise" "Promise 5 gold within three days">><</if>>
<<if _scene.tier gte 2 and (!_ledger.lastPlanDay or setup.npcCurrentDay() - _ledger.lastPlanDay gte 28)>><<taxCollectionChoice "plan" "Arrange 5 gold a week">><</if>>
<<taxCollectionChoice "argument" "Dispute the amount">>
<<taxCollectionChoice "refuse" "End the conversation without paying">>
<<elseif _scene.stage is "argument">>
<p>You question the collection. The collector does not raise their voice, but neither do they close the register.</p>
<<npcSay _collector "Show me what I should change on the page. Anger by itself is not an accounting.">>
<<if !_ledger.lastContestDay or setup.npcCurrentDay() - _ledger.lastContestDay gte 28>><<taxCollectionChoice "contest" "Present your own accounting (Literacy 20 or Intelligence 10)">><</if>>
<<taxCollectionChoice "account" "Look at the entries together">>
<<taxCollectionChoice "refuse" "Refuse to cooperate">>
<<elseif _scene.stage is "task">>
<p>They point to bundles of notices that must be carried to the hall and put back in order. It is unglamorous work, but it would take a little off the bill.</p>
<<npcSay _collector "An hour and a half of honest help. I will strike five gold from the balance when the bundles are done.">>
<<taxCollectionChoice "civic" "Do the work (90 minutes, 6 Energy, up to 5 gold relief)">>
<<taxCollectionChoice "account" "Ask about another arrangement">>
<<elseif _scene.stage is "result">>
<p><<print setup.npcEscapeHtml(_scene.result)>></p>
<<set _line = _scene.lastChoice is "refuse" ? "The entry stays open. We will meet again if it is still there." : "I have marked what we agreed. Keep the next date in mind.">><<npcSay _collector _line>>
<<taxCollectionChoice "finish" "Continue">>
<</if>><</nobr>><<nobr>><<set _scene = $taxPartnerInterruption>><<set _npc = _scene ? setup.getNpcById(_scene.npcId) : null>><<set _ledger = setup.ensureTaxSystem()>><<set _loan = _ledger.partnerLoan and _npc and _ledger.partnerLoan.npcId is _npc.id ? _ledger.partnerLoan : null>>
<<if !_scene or !_npc>><p>The conversation has passed.</p>
<<elseif _scene.stage is "opening">>
<<if _scene.mode is "loan">>
<p><<npcMention _npc>> catches you alone for a moment. The coins they lent you for the tax bill have not been forgotten.</p>
<<npcSay _npc "I meant it when I said I would help. I also need to know when you can return what I put in the clerk's hand.">>
<<else>>
<p><<npcMention _npc>> has seen a town notice bearing the address you share. They fold it once before bringing up the amount still unpaid.</p>
<<set _line = setup.npcTraitIncludes(_npc, "practical") ? "We should decide what comes out of this week's money before the clerk decides for us." : "I do not mind helping you face this. I mind finding out from the town register instead of from you.">><<npcSay _npc _line>>
<</if>>
<<if _ledger.playerDebt gt 0>><p>The town balance is <b><<= _ledger.playerDebt >> gold</b>.</p><</if>>
<<if _loan>><p>You still owe them <b><<= _loan.amount >> gold</b> personally.</p><</if>>
<<taxPartnerChoice "ask" "Ask how this has affected them">>
<<if _loan and $c.gold gt 0>><<taxPartnerChoice "repay" "Repay up to 5 gold">><</if>>
<<if _ledger.playerDebt gte 5 and _npc.gold gte 35 and (!_ledger.partnerLoan or _ledger.partnerLoan.npcId is _npc.id and _ledger.partnerLoan.amount lt 20)>><<taxPartnerChoice "borrow" "Ask them to cover 5 gold as a loan">><</if>>
<<if _ledger.playerDebt gt 0 and !_ledger.partnerPromise>><<taxPartnerChoice "promise" "Promise to reduce the bill by 5 gold this week">><</if>>
<<if _loan>><<taxPartnerChoice "time" "Ask for more time to repay them">><<else>><<taxPartnerChoice "distance" "Tell them to leave the bill to you">><</if>>
<<elseif _scene.stage is "discussion">>
<p>You ask them to speak plainly. They take a moment before answering, as though choosing what matters more than the number.</p>
<<set _line = setup.npcTraitIncludes(_npc, "generous") ? "I can spare a little if it helps, but I cannot carry your part forever. Tell me what you can do next." : "A missed payment is one thing. Being kept outside the decision about our home is another.">><<npcSay _npc _line>>
<<if _loan and $c.gold gt 0>><<taxPartnerChoice "repay" "Return up to 5 gold now">><</if>>
<<if _ledger.playerDebt gte 5 and _npc.gold gte 35 and (!_ledger.partnerLoan or _ledger.partnerLoan.npcId is _npc.id and _ledger.partnerLoan.amount lt 20)>><<taxPartnerChoice "borrow" "Ask for a 5-gold loan toward the bill">><</if>>
<<if _ledger.playerDebt gt 0 and !_ledger.partnerPromise>><<taxPartnerChoice "promise" "Commit to paying down 5 gold this week">><</if>>
<<if _loan>><<taxPartnerChoice "time" "Ask for more time">><<else>><<taxPartnerChoice "distance" "Refuse to discuss it further">><</if>>
<<elseif _scene.stage is "result">>
<p><<print setup.npcEscapeHtml(_scene.result)>></p>
<<set _line = _scene.lastChoice is "borrow" ? "That came from my purse. We will settle it between us when you can." : _scene.lastChoice is "repay" ? "Thank you for bringing it back to me directly." : _scene.lastChoice is "distance" ? "I hope you will speak to me before the next notice arrives." : "I will remember what you said. Let us see what you do next.">><<npcSay _npc _line>>
<<taxPartnerChoice "finish" "Continue">>
<</if>><</nobr>><<nobr>><<set _npc = setup.getNpcById($activeNpcId)>>
<div class="npc-activity-panel">
<p><<print setup.npcEscapeHtml($lastTaxPartnerRepayment || "The loan is already settled.")>></p>
<<if _npc>><<npcSay _npc "Thank you for bringing the money back to me directly.">><</if>>
<div class="npc-return-link">[[Continue|NPCInteract]]</div>
</div><</nobr>><<nobr>><<set _npc = setup.getNpcById($activeNpcId)>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !_npc>>
<p>They are no longer nearby.</p>
<<elseif $lastPartnerChoiceResult>>
<p><<print setup.npcEscapeHtml($lastPartnerChoiceResult.text)>></p>
<<if $lastPartnerChoiceResult.outcome is "chose_player">><<print setup.npcEventDialogueHtml(_npc, "I had to end one relationship before I could ask you to consider another. I will not pretend that was easy.")>>
<<elseif $lastPartnerChoiceResult.outcome is "stayed">><<print setup.npcEventDialogueHtml(_npc, "I care about what we have shared, but I am staying with my partner. Please do not wait on me.")>>
<<elseif $lastPartnerChoiceResult.outcome is "uncertain">><<print setup.npcEventDialogueHtml(_npc, "I cannot give either of you an honest promise today. I need to stop pretending otherwise.")>><</if>>
<<else>>
<<set _choice = setup.npcPartnerChoiceState(_npc)>>
<<if _choice.kind is "available">>
<p>You ask where this leaves the relationship they already have. The question is too important to pass off as harmless flirting.</p>
<<print setup.npcEventDialogueHtml(_npc, "If you are asking me to choose, let me speak to them first. I owe both of you more than a rushed answer.")>>
<div class="npc-activity-choice-list"><div><<link "Ask them to decide">><<set $lastPartnerChoiceResult = setup.npcRequestPartnerChoice(_npc.id)>><<goto "NPCPartnerChoice">><</link>></div></div>
<<elseif _choice.kind is "pending">>
<p>You have asked for an honest decision. They have not had the time they requested to speak to their partner yet.</p>
<<print setup.npcEventDialogueHtml(_npc, "Give me the time I asked for. I will answer you once I have spoken to them.")>>
<<elseif _choice.kind is "ready">>
<p>They meet your eyes instead of trying to turn the conversation aside.</p>
<<print setup.npcEventDialogueHtml(_npc, "I have thought about what you asked. You deserve to hear my answer plainly.")>>
<div class="npc-activity-choice-list"><div><<link "Hear their decision">><<set $lastPartnerChoiceResult = setup.npcResolvePartnerChoice(_npc.id)>><<goto "NPCPartnerChoice">><</link>></div></div>
<<else>><p>There is no decision for them to make with you right now.</p><</if>>
<</if>>
<div class="npc-return-link"><<link "Return to the relationship" "NPCRelationshipMenu">><<set $lastPartnerChoiceResult = null>><</link>></div>
</div><</nobr>><<nobr>><<set _scene = $relationshipScene>><<set _npc = _scene ? setup.getNpcById(_scene.npcId) : null>><<set _definition = _scene ? setup.npcRelationshipSceneDefinitions[_scene.actionId] : null>>
<div class="npc-activity-panel farm-work-event-panel">
<<if !_npc or !_definition>>
<p>The conversation is no longer available.</p>
<div class="npc-return-link">[[Return|NPCInteract]]</div>
<<elseif _scene.phase is "opening">>
<p><<= setup.npcRelationshipSceneIntro(_npc, _scene) >></p>
<<if _scene.sharedMemory>><p>You remember your recent time together: <<print setup.npcEscapeHtml(_scene.sharedMemory)>></p><</if>>
<<print setup.npcEventDialogueHtml(_npc, setup.npcRelationshipSceneOpeningLine(_npc, _scene.actionId))>>
<div class="npc-activity-choice-list">
<div><<link _definition.warmChoice>><<run setup.npcRelationshipSceneChoose("warm")>><<goto "NPCRelationshipScene">><</link>></div>
<div><<link _definition.candidChoice>><<run setup.npcRelationshipSceneChoose("candid")>><<goto "NPCRelationshipScene">><</link>></div>
<div><<link _definition.refuseChoice>><<run setup.npcRelationshipSceneChoose("withdraw")>><<goto "NPCRelationshipScene">><</link>></div>
</div>
<<elseif _scene.phase is "reply">>
<p><<= _scene.stance is "warm" ? _definition.warmReply : _definition.candidReply >></p>
<<print setup.npcEventDialogueHtml(_npc, setup.npcRelationshipSceneReplyLine(_npc, _scene))>>
<div class="npc-activity-choice-list">
<div><<link setup.npcRelationshipSceneAcceptLabel(_scene)>><<run setup.npcRelationshipSceneFinish("accept")>><<goto "NPCRelationshipScene">><</link>></div>
<div><<link _definition.deferChoice>><<run setup.npcRelationshipSceneFinish("defer")>><<goto "NPCRelationshipScene">><</link>></div>
</div>
<<else>>
<p><<= _scene.result ? _scene.result.text : "The conversation comes to a quiet end." >></p>
<<print setup.npcEventDialogueHtml(_npc, setup.npcRelationshipSceneResultLine(_scene))>>
<<if _scene.actionId is "move_in" and _scene.result and _scene.result.accepted>>
<div class="npc-return-link"><<link "Continue" "Tax Move In Notice">><<set $taxMoveInNpcId = _npc.id>><<set $relationshipScene = null>><</link>></div>
<<else>>
<div class="npc-return-link"><<link "Continue" _scene.returnPassage>><<set $relationshipScene = null>><</link>></div>
<</if>>
<</if>>
</div><</nobr>><<nobr>>
<div class="npc-activity-panel">
<p>The stone well is cool beneath your hands. A bucket waits on the rim, and the market stalls draw their water from here when the square is busy.</p>
<p>You feel <<= setup.playerNeedBand("hunger").toLowerCase() >> and <<= setup.playerNeedBand("thirst").toLowerCase() >>.</p>
<div class="npc-activity-choice-list">
<<if $c.thirst lt 95>><div><<link "Draw and drink water (10 minutes)" "Ambercross Well Result">><<set $wellResult = setup.playerDrinkFromWell()>><</link>></div><</if>>
<<if setup.playerWellErrandAvailable()>><div><<link "Carry water for the produce stall (25 minutes, -2 Energy; oat cake)" "Ambercross Well Result">><<set $wellResult = setup.playerWellErrand()>><</link>></div><</if>>
<div>[[Return to the square|Ambercross Center]]</div>
</div></div><</nobr>><<nobr>>
<div class="npc-activity-panel">
<p><<= $wellResult ? $wellResult.text : "The well is quiet." >></p>
<<if $wellResult and $wellResult.gain>><p class="farm-work-gain-line"><b id="Thirstgain">+<<= Math.round($wellResult.gain) >>% Water</b></p><</if>>
<<if $wellResult and $wellResult.earned>><p class="farm-work-gain-line"><b class="inventory-item-energy">+1 Oat Cake</b> <b id="Energy">-2 Energy</b></p><</if>>
<div class="npc-return-link">[[Return to the square|Ambercross Center]]</div>
</div><</nobr>><<nobr>><<set _event = $locationEventView>><<set _actor = setup.locationEventActor()>><<set _food = _event ? setup.tavernShopItem(_event.foodItemId) : null>>
<<if !_event or _event.id isnot "spare_food" or !_actor or !_food>><p>The offer is no longer available.</p>
<<else>>
<<if _event.stage is "opening">>
<p>You pause beside the bustle, trying not to let your empty stomach make the decision for you. <<npcMention _actor>> notices and takes a portion of <<= _food.label >> from their things.</p>
<<if _event.warmOffer>><<npcSay _actor "You have been running on nothing. Sit for a moment and eat this. We can talk about the rest afterward.">>
<p>The offer is personal. You can accept it, return the kindness with a small task, or decline.</p>
<<locationEventChoice "accept" "Accept the food and thank them">>
<<else>><<npcSay _actor "I can spare this, but I still have work to finish. Give me a hand or put two coins toward it, and you can eat now.">>
<p>They have made the terms plain. You can help with the bundles, pay for the portion, or leave it.</p>
<</if>>
<<locationEventChoice "help" "Help with the bundles (-1 Energy, 20 minutes)">>
<<locationEventChoice "pay" "Pay 2 gold for the food">>
<<locationEventChoice "decline" "Thank them and decline">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "gift">><p>You eat beside them. They let the first few bites pass in quiet, then ask how your day went without making the meal a debt.</p>
<<npcSay _actor "You would have noticed if I were hungry. Let me notice you too.">>
<<case "helped">><p>You carry the last bundles together. Only then do they hand over the food, and you eat while the ache in your arms settles.</p>
<<npcSay _actor "That was fair work. Take a moment before you go on.">>
<<case "bought">><p>They take the two coins and give you the portion without bargaining over your hunger. You find a place to eat before moving on.</p>
<<case "declined">><p>You thank them and step away. They put the food back among their things, leaving the offer where you chose to leave it.</p>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><<set _event = $locationEventView>><<set _tavern = _event and (_event.returnPassage is "Ambercross Tavern" or _event.returnPassage is "BH Alehouse")>>
<<if !_event or _event.id isnot "empty_supper">><p>The evening has moved on.</p>
<<else>>
<<if _event.stage is "opening">>
<p>The evening smells of supper, but you have no food in your bag. The few coins you carry will not buy even the cheapest cake.</p>
<<if _tavern>><p>A worker is clearing tables nearby. You could offer to help for a meal, look for food left behind, or go into the night hungry.</p><<else>><p>A stall keeper is packing up crates nearby. You could offer to help for a meal, search the closing stalls for something unspoiled, or go into the night hungry.</p><</if>>
<<locationEventChoice "chores" "Help clear the dishes for a meal (-2 Energy, 30 minutes)">>
<<locationEventChoice "scavenge" "Search carefully for food left behind (-1 Energy, 25 minutes)">>
<<locationEventChoice "hungry" "Leave without supper">>
<<elseif _event.stage is "done">>
<<switch _event.outcome>>
<<case "worked">><<if _tavern>><p>You clear tables and carry the wash water until the worker sets a plain bowl in front of you.</p><<else>><p>You stack the remaining crates and sweep the stall until the keeper sets a plain bowl in front of you.</p><</if>><p>It is not a generous portion, but you eat it warm and leave with less strength for the rest of the night.</p>
<<case "found">><p>You take your time checking what the vendors left behind. Beneath a clean cloth, you find a few sound pieces that were overlooked when the stall was packed. It is a meager supper, but it is yours.</p>
<<case "hungry">><p>You turn away from the smell of supper. The walk feels longer with an empty stomach, and you know the next rest will do less for you if you cannot eat first.</p>
<</switch>>
<</if>>
<<include "Location Event Footer">>
<</if>><</nobr>><<nobr>><<set _npc = setup.farmWorkEventNpc()>>
<div class="npc-activity-panel farm-work-event-panel">
<p>At the break, you find a place to sit, but the work has caught up with your empty stomach. The crew opens their food bundles while you check what you brought.</p>
<<if _npc>><<print setup.npcEventDialogueHtml(_npc, "Take a moment to eat if you can. The next stretch will feel twice as long without it.")>><<else>><p>A worker calls everyone back in a few minutes. You need to decide how to get through the rest of the shift.</p><</if>>
<div class="npc-activity-choice-list">
<<for _item range setup.farmWorkCarriedMeals()>><<capture _item>><<set _label = "Eat your " + _item.label>><div><<link _label "FarmWorkMissedMealResult">><<set $farmWorkMealResult = setup.farmWorkResolveMeal("own", _item.id)>><</link>></div><</capture>><</for>>
<<if $c.gold gte 2>><div><<link "Buy part of the crew's meal (2 gold)" "FarmWorkMissedMealResult">><<set $farmWorkMealResult = setup.farmWorkResolveMeal("crew")>><</link>></div><</if>>
<div><<link "Skip the meal and keep working (-2 Energy)" "FarmWorkMissedMealResult">><<set $farmWorkMealResult = setup.farmWorkResolveMeal("skip")>><</link>></div>
</div></div><</nobr>><<nobr>><<set _meal = $farmWorkMealResult || { choice: "", text: "The break has ended.", rewardHtml: "" }>><div class="npc-activity-panel farm-work-event-panel">
<<if _meal.choice is "own">><p>You eat what you carried and return to the rows steadier than you were at the break.</p>
<<elseif _meal.choice is "crew">><p>A worker splits a simple meal with you for two coins. It is enough to take the edge off your hunger before work resumes.</p>
<<elseif _meal.choice is "skip">><p>You stand when the others do, without having eaten. By the end of the shift, even the easy tasks demand more effort.</p>
<<else>><p><<= _meal.text >></p><</if>>
<<print _meal.rewardHtml>><<print setup.farmWorkRewardHtml($lastFarmWorkResult)>>
<div class="farm-trial-result-link">[[Finish work|Ambercross Farmer's house]]</div></div><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The visit has ended. [[Return outside|House Exterior]]<<else>>
<div class="house-visit-shell"><div class="house-address-heading">An unsettled visit</div>
<p>Your host leaves the door to the room open. They keep their distance as they set a second cup on the table, then decide against filling it.</p>
<<npcSay _data.npc "I let you in to hear you. That does not mean I have forgotten what happened between us.">>
<p>They wait for an answer, watching how you treat the space they have given you.</p>
<div class="house-visit-choice-list">
<div class="house-visit-choice"><<link "Take responsibility for your part" "House Event Conversation">><<run setup.houseVisitResolveEvent("own_fault")>><</link>></div>
<div class="house-visit-choice"><<link "Ask what they need you to understand" "House Event Conversation">><<run setup.houseVisitResolveEvent("listen")>><</link>></div>
<div class="house-visit-choice"><<link "Say they are being unfair" "House Event Conversation">><<run setup.houseVisitResolveEvent("blame")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The visit has ended. [[Return outside|House Exterior]]<<else>>
<div class="house-visit-shell"><div class="house-address-heading">A familiar welcome</div>
<p>Your host moves a stool toward the hearth before you think to ask. They know where you prefer to sit, and you recognize the half-finished task waiting beside them.</p>
<<npcSay _data.npc "I am glad you came. Sit with me a while, or lend a hand while we catch up.">>
<div class="house-visit-choice-list">
<div class="house-visit-choice"><<link "Settle in and share your news" "House Event Conversation">><<run setup.houseVisitResolveEvent("share")>><</link>></div>
<div class="house-visit-choice"><<link "Help with the waiting task" "House Event Conversation">><<run setup.houseVisitResolveEvent("help")>><</link>></div>
<div class="house-visit-choice"><<link "Make a brief visit and move on" "House Event Conversation">><<run setup.houseVisitResolveEvent("hurry")>><</link>></div></div></div><</if>><</nobr>><<nobr>><<set _result = $houseVisitEventResult>><<set _data = setup.houseVisitActiveEvent()>><div class="house-visit-shell">
<<if !_result or _result.outcome isnot "success" or !_data or !_data.npc>><p>The moment has passed.</p>
<<elseif _result.followup>><p><<= _result.followupNarrative >></p><<npcSay _data.npc _result.followupReply>>
<<elseif _result.eventId is "strained_visit">>
<<if _result.choice is "own_fault">><p>You name your part without asking them to excuse it. The stiffness in their shoulders eases, though they do not pretend the matter is finished.</p><<npcSay _data.npc "That is closer to an honest beginning. We can leave it there for today.">>
<<elseif _result.choice is "listen">><p>You let them explain the hurt in their own words. It takes longer than you expected, and they notice that you stay to hear it.</p><<npcSay _data.npc "At least now you know why I kept my distance.">>
<<else>><p>The argument returns at once. They pull the empty cup away and rise from the table.</p><<npcSay _data.npc "I should have left the door closed.">><</if>>
<<elseif _result.eventId is "familiar_visit">>
<<if _result.choice is "share">><p>Your news turns into a longer exchange. They remember a detail you had nearly forgotten telling them, and ask how it turned out.</p><<npcSay _data.npc "This is why I like having you here. We need not start from the beginning every time.">>
<<elseif _result.choice is "help">><p>You work side by side, talking between the small practical steps. The task is finished before either of you notices the time passing.</p><<npcSay _data.npc "You make an ordinary evening easier. Thank you.">>
<<else>><p>You exchange a few words, but leave before either of you settles. They accept the short visit without making it into a slight.</p><<npcSay _data.npc "Come back when you have more time.">><</if>>
<</if>>
<<if _result and _result.outcome is "success">><p><<print setup.houseVisitGainHtml(_result)>></p><</if>>
<div class="house-return-link">[[Continue the visit|House Visit Interior]]</div></div><</nobr>><<nobr>><<set _result = $houseVisitEventResult>><<set _data = setup.houseVisitActiveEvent()>>
<div class="house-visit-shell"><<if !_result or _result.outcome isnot "success" or !_data or !_data.npc or _result.followup>><p>The conversation has ended.</p><div class="house-return-link">[[Continue the visit|House Visit Interior]]</div>
<<else>><p><<= setup.houseVisitConversationNarrative(_result) >></p><<set _reply = setup.houseVisitConversationReply(_result, _data.npc)>><<npcSay _data.npc _reply>>
<div class="house-visit-choice-list"><<for _option range setup.houseVisitFollowupChoices(_result)>><<capture _option>><div class="house-visit-choice"><<link _option.label "House Event Relationship Result">><<run setup.houseVisitResolveFollowup(_option.id)>><</link>></div><</capture>><</for>></div><</if>></div><</nobr>><<nobr>><<set _data = setup.houseVisitActiveEvent()>><<if !_data or !_data.npc>>The moment has passed. [[Continue the visit|House Visit Interior]]<<else>>
<div class="house-visit-shell"><div class="house-address-heading">A quiet hour</div>
<p>The talk slows. <<= setup.npcDisplayName(_data.npc) >> turns a cup between both hands and looks toward the hearth.</p>
<<npcSay _data.npc "Most people hurry to fill a silence. I do not mind sitting here without putting on a performance.">>
<p>The admission is small, but the trust behind it is not.</p>
<div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Let them speak when they are ready" "House Event Conversation">><<run setup.houseVisitResolveEvent("listen")>><</link>></div>
<div class="house-visit-choice"><<link "Break the silence with a gentle joke" "House Event Conversation">><<run setup.houseVisitResolveEvent("joke")>><</link>></div></div></div><</if>><</nobr>><<nobr>><div class="house-window-shell"><p>You have already lingered at this window today. Another look would only invite trouble.</p><div class="house-return-link">[[Return to the front of the house|House Exterior]]</div></div><</nobr>><<nobr>><<set _event = $houseWindowEvent>><div class="house-window-shell">
<<if !_event or _event.stage isnot "glimpse">><p>The moment has passed.</p><div class="house-return-link">[[Return to the front of the house|House Exterior]]</div>
<<else>><p>You pause beside the window. <<if _event.kind is "private">>One person is moving near the bed, unaware of you. The curtain hides most of the room.<<else>>Two figures draw close behind the curtain. Their voices are too low to make out, but the way they touch is not ordinary conversation.<</if>></p>
<p>You can step away before seeing anything more, or stay long enough to be certain of what is happening.</p>
<div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Look closer" "House Window Closer">><<run setup.houseWindowResolve("look")>><</link>></div>
<div class="house-visit-choice"><<link "Leave their privacy alone" "House Window Outcome">><<run setup.houseWindowResolve("leave")>><</link>></div></div><</if>></div><</nobr>><<nobr>><<set _event = $houseWindowEvent>><<set _npc = _event ? setup.getNpcById(_event.npcId) : null>><<set _other = _event and _event.otherId ? setup.getNpcById(_event.otherId) : null>>
<div class="house-window-shell"><<if !_event or _event.stage isnot "closer" or !_npc>><p>The room has gone quiet.</p><div class="house-return-link">[[Return outside|House Exterior]]</div>
<<else>><<print setup.houseWitnessMediaHtml(_event.media, "opening")>>
<<if _event.kind is "private">><<print setup.houseWitnessPersonHtml(_npc)>><p><<if _event.activity is "masturbate">>Alone beside the bed, they have slipped a hand beneath their loosened clothes. Their breathing changes as they touch themselves, certain the room is private.<<else>>They are changing clothes. For a moment they stand bare, reaching for a clean garment without knowing anyone can see.<</if>></p>
<<else>><p><<npcMention _npc>> draws <<npcMention _other>> close and kisses them. The kiss lingers; a hand slips beneath clothing as they move farther from the window.</p>
<<if _event.kind is "infidelity">><<npcSay _npc "We still have a little time before anyone comes back.">><<else>><<npcSay _npc "Come here. We have the room to ourselves for a while.">><</if>><<npcSay _other "Then stop watching the door and kiss me.">>
<<if _event.kind is "infidelity">><p>The second person is not a resident of this house. <<= setup.npcDisplayName(_npc) >>'s partner is absent; you now know this is more than a rumor.</p><</if>><</if>>
<<if _event.carnalityGain or _event.arousalGain>><p><<if _event.carnalityGain>><span id="Lustgain">Carnality +<<= _event.carnalityGain >></span><</if>> <<if _event.arousalGain>><span id="Arousalgain">Arousal +<<= _event.arousalGain >></span><</if>></p><</if>>
<div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Turn away quietly" "House Window Outcome">><<run setup.houseWindowResolve("withdraw")>><</link>></div>
<div class="house-visit-choice"><<link "Linger a little longer" "House Window Outcome">><<run setup.houseWindowResolve("linger")>><</link>></div></div><</if>></div><</nobr>><<nobr>><<set _event = $houseWindowEvent>><<set _npc = _event ? setup.getNpcById(_event.npcId) : null>><div class="house-window-shell"><<if !_npc or _event.stage isnot "glimpse">><p>The moment has passed.</p><div class="house-return-link">[[Return outside|House Exterior]]</div><<else>>
<p>A face turns toward the glass. <<npcMention _npc>> has seen you standing there, and their hand goes straight to the shutter.</p><<npcSay _npc "This is my home. What are you doing at the window?">>
<div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Apologize and step away" "House Window Outcome">><<run setup.houseWindowResolve("apologize")>><</link>></div>
<div class="house-visit-choice"><<link "Insist you did nothing wrong" "House Window Outcome">><<run setup.houseWindowResolve("argue")>><</link>></div></div><</if>></div><</nobr>><<nobr>><<set _event = $houseWindowEvent>><<set _npc = _event and _event.npcId ? setup.getNpcById(_event.npcId) : null>><<set _other = _event and _event.otherId ? setup.getNpcById(_event.otherId) : null>>
<div class="house-window-shell"><<if !_event or _event.stage isnot "result">><p>The moment has passed.</p>
<<elseif _event.outcome is "left_early">><p>You back away before seeing anything clearly. What happens behind the shutters remains theirs.</p>
<<elseif _event.outcome is "apologize">><p>You admit that you should not have been looking and leave the window. The apology stops an argument, but not their displeasure.</p><<npcSay _npc "Do not make me find you here again.">>
<<elseif _event.outcome is "argue">><p>You defend yourself from the street. Their voice rises in answer, and the disagreement follows you as you step away.</p><<npcSay _npc "I know what I saw. Keep away from my house.">>
<<elseif _event.outcome is "spotted">><p>You stay a moment too long. <<npcMention _npc>> catches sight of you beyond the glass and pulls the shutter closed.</p><<npcSay _npc "Get away from the window.">>
<<elseif _event.outcome is "linger">><<if _event.activity is "vaginal" and _other>><<print setup.houseWitnessMediaHtml(_event.media, "closer")>><p>They move to the bed. Clothes are pushed aside and the man enters the woman as they draw together, no longer trying to keep their voices down.</p>
<<elseif _event.activity is "oral" and _other>><<print setup.houseWitnessMediaHtml(_event.media, "closer")>><p><<if _npc.gender is "male" and _other.gender is "male">>One man kneels and uses his mouth on the other while their voices fall to whispers.<<elseif _npc.gender is "female" and _other.gender is "female">>One woman parts the other's thighs and lowers her mouth between them.<<else>>The man kneels between the woman's thighs and uses his mouth on her as she pulls him closer.<</if>></p>
<<else>><p>Their closeness continues while you linger at the glass. You pull away before either of them notices you.</p><</if>>
<<else>><p>You turn away with the sight still in your mind. You have seen enough without making yourself part of their private moment.</p><</if>>
<<if _event.carnalityExtra>><p id="Lustgain">Carnality +<<= _event.carnalityExtra >></p><</if>>
<<if _event.arousalExtra>><p id="Arousalgain">Arousal +<<= _event.arousalExtra >></p><</if>>
<<if _event.trustGain or _event.affectionGain>><p id="Trustloss">Trust <<= _event.trustGain || 0 >> | Affection <<= _event.affectionGain || 0 >></p><</if>>
<div class="house-return-link">[[Return to the front of the house|House Exterior]]</div></div><</nobr>><<nobr>><<set _data = setup.npcPrivateMomentWitnessData()>><<set _return = $activeNpcPrivateMoment and $activeNpcPrivateMoment.location ? $activeNpcPrivateMoment.location : "Ambercross Center">><div class="house-window-shell"><<if !_data>><p>The sound has faded.</p><div class="house-return-link"><<link "Return to the village" _return>><<run setup.npcEndPrivateMomentWitness()>><</link>></div>
<<else>><p>You follow the sound to a sheltered corner.</p><<print setup.houseWitnessPersonHtml(_data.first)>><<print setup.houseWitnessPersonHtml(_data.second)>><p>They stand close enough that their intent is hard to mistake, but you can still turn away without intruding.</p>
<div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Stay hidden and watch" "NPC Private Moment Closer">><<run setup.npcPrivateMomentWitnessChoose("watch")>><</link>></div>
<div class="house-visit-choice"><<link "Leave them alone" "NPC Private Moment Result">><<run setup.npcPrivateMomentWitnessChoose("leave")>><</link>></div></div><</if>></div><</nobr>><<nobr>><<set _data = setup.npcPrivateMomentWitnessData()>><<set _return = $activeNpcPrivateMoment and $activeNpcPrivateMoment.location ? $activeNpcPrivateMoment.location : "Ambercross Center">><div class="house-window-shell"><<if !_data or _data.scene.stage isnot "closer">><p>The moment has passed.</p><div class="house-return-link"><<link "Return to the village" _return>><<run setup.npcEndPrivateMomentWitness()>><</link>></div>
<<else>><<print setup.houseWitnessMediaHtml(_data.moment.media, _data.moment.activity is "oral" ? "closer" : "opening")>>
<p><<if _data.moment.activity is "oral">>The kiss gives way to a more intimate act. One of them kneels and uses their mouth on the other while the village carries on only a short walk away.<<else>>Their kiss deepens, hands moving beneath loosened clothing. They have found a brief pocket of privacy in a public place.<</if>></p>
<<if _data.scene.betrayal>><<npcSay _data.first "We need to be quick. I cannot explain this if someone finds us.">><<else>><<npcSay _data.first "Stay close. No one has come this way.">><</if>>
<<npcSay _data.second "Then come closer while we still have the chance.">>
<<if _data.scene.betrayal>><p>One of them is your partner. The realization lands harder than the glimpse itself, and the warmth it stirred in you feels unwelcome.</p><</if>>
<<if _data.scene.carnalityGain or _data.scene.arousalGain>><p><<if _data.scene.carnalityGain>><span id="Lustgain">Carnality +<<= _data.scene.carnalityGain >></span><</if>> <<if _data.scene.arousalGain>><span id="Arousalgain">Arousal +<<= _data.scene.arousalGain >></span><</if>></p><</if>>
<div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Leave without being seen" "NPC Private Moment Result">><<run setup.npcPrivateMomentWitnessChoose("withdraw")>><</link>></div>
<div class="house-visit-choice"><<link "Let them know you saw" "NPC Private Moment Result">><<run setup.npcPrivateMomentWitnessChoose("confront")>><</link>></div></div><</if>></div><</nobr>><<nobr>><<set _data = setup.npcPrivateMomentWitnessData()>><<set _return = $activeNpcPrivateMoment and $activeNpcPrivateMoment.location ? $activeNpcPrivateMoment.location : "Ambercross Center">><div class="house-window-shell">
<<if !_data or _data.scene.stage isnot "result">><p>The moment has passed.</p>
<<elseif _data.scene.outcome is "left">><p>You leave the two of them their privacy. You do not stay long enough to know what happened next.</p>
<<elseif _data.scene.outcome is "withdraw">><p>You slip back into the village without drawing their attention. What you witnessed remains with you.</p>
<<else>><<set _target = setup.getNpcById(_data.scene.confrontedNpcId)>><p>You step where they can see you. They break apart at once.</p>
<<if _data.scene.betrayal and _target>><<npcSay _target "I know what this looks like. I will not ask you to pretend you did not see it.">><p>There is no easy answer here. You can demand one when you are ready.</p>
<<elseif _target>><<npcSay _target "We thought we were alone. Please leave us.">><</if>>
<p id="Trustloss">Trust <<= _data.scene.trustGain || 0 >> | Affection <<= _data.scene.affectionGain || 0 >></p><</if>>
<div class="house-return-link"><<link "Return to the village" _return>><<run setup.npcEndPrivateMomentWitness()>><</link>></div></div><</nobr>><<nobr>><<set _event = $houseWindowEvent>><<set _house = _event ? setup.houseById(_event.houseId) : null>><<set _npc = _event ? setup.getNpcById(_event.npcId) : null>>
<div class="house-window-shell"><<if !_npc or !_house>><p>The room is quiet now.</p><<else>>
<<print setup.houseWitnessPersonHtml(_npc)>>
<p>Inside, they are busy with an ordinary task. <<if _npc.jobId is "farmer" or _npc.jobId is "farmhand">>A small pile of seed and tools waits beside the hearth.<<elseif _npc.jobId is "baker">>They are counting tomorrow's loaves on a scrap of paper.<<elseif _npc.jobId is "pier_worker" or _npc.jobId is "fishmonger">>A length of rope and a damp work coat lie across the table.<<else>>They set the room in order and turn something over in their hands before putting it away.<</if>></p>
<<if _npc.relationship and setup.npcRelationshipStageRank[_npc.relationship.status] >= 2>><p>The familiar routine reminds you that a visit would be better begun at the door.</p><<elseif _npc.relationship and setup.npcRelationshipStageRank[_npc.relationship.status] < 0>><p>Given the strain between you, being caught here would hardly help.</p><</if>>
<div class="house-visit-choice-list"><div class="house-visit-choice"><<link "Knock on the door" "House Door">><<set $houseDoorResult = setup.houseKnock(_house)>><</link>></div><div class="house-visit-choice">[[Step away|House Exterior]]</div></div>
<</if>></div><</nobr>><<nobr>><<if !$helpTab>><<set $helpTab = "basics">><</if>>
<div class="help-shell"><header class="help-header"><h1 class="help-title">Help</h1></header>
<<set _topics = [{ id: "basics", label: "Basics" }, { id: "survival", label: "Needs & rest" }, { id: "work", label: "Work & traits" }, { id: "people", label: "People" }, { id: "activities", label: "Activities & homes" }, { id: "intimacy", label: "Intimacy" }, { id: "economy", label: "Trade & taxes" }, { id: "journal", label: "Journal" }]>>
<nav class="help-tabs" aria-label="Help topics"><<for _topic range _topics>><<capture _topic>><<if $helpTab is _topic.id>><span class="help-tab-active" aria-current="page"><<= _topic.label >></span><<else>><<link _topic.label "Help">><<set $helpTab = _topic.id>><</link>><</if>><</capture>><</for>></nav>
<div id="help-topic"><<if $helpTab is "survival">><<include "Help Survival">><<elseif $helpTab is "work">><<include "Help Work">><<elseif $helpTab is "people">><<include "Help People">><<elseif $helpTab is "activities">><<include "Help Activities">><<elseif $helpTab is "intimacy">><<include "Help Intimacy">><<elseif $helpTab is "economy">><<include "Help Economy">><<elseif $helpTab is "journal">><<include "Help Journal">><<else>><<include "Help Basics">><</if>></div>
<div class="help-return"><<link "Return to game" setup.helpReturnPassage()>><</link>></div></div><</nobr>><<nobr>><section class="help-topic"><h2>Finding your way</h2>
<p>Follow the links in a location to travel, work, trade, or speak with someone nearby. Travel and many decisions advance the clock. People move between home, work, and other places as the day changes, so a missing NPC may be elsewhere rather than gone.</p>
<p>The Map shows places you have reached. Nearby lists people you can currently approach.</p>
<h3>The status strip</h3><p>The sidebar keeps your immediate resources visible. Gold pays for goods and lodging; Energy is spent on work and travel. Food and Water measure how well supplied you are, so higher is better. Arousal and, when present, Intoxication rise for different reasons. It gives you bonus Carnality while active, making sexual events easier to reach. </p>
<figure class="help-figure"><img src="img/help/status.png" alt="Sidebar showing day, time, gold, energy, food, water, and arousal" loading="lazy"><figcaption>Hover over a status symbol in the sidebar to see its name.</figcaption></figure>
<p>Inventory holds what you carry. Plans tracks arranged NPC activities. Save / Load is available from the sidebar whenever you need to pause a run.</p></section><</nobr>><<nobr>><section class="help-topic"><h2>Needs and rest</h2>
<p>Food and Water fall as time passes. Eat and drink before they become critical: low needs can make long days harder to manage. Food and drink come from inventory, businesses, work rewards, and sometimes a host's hospitality.</p>
<p>Energy returns through rest and sleep. A bed or rented room offers a dependable night; sleeping outside can lead to incidents and less reliable recovery. The tavern rents its room for several days at a time, and paid time is not lost when you extend it.</p>
<h3>Other conditions</h3><p>Alcohol raises Intoxication and can alter decisions, but drinking too much risks a blackout. Wash-up and clothing options are found near suitable places to sleep or change. The sidebar and Journal show the state that matters before a demanding choice.</p></section><</nobr>><<nobr>><section class="help-topic"><h2>Work, skills, and traits</h2>
<p>Most jobs begin with a trial or introduction. Once employed, return during working hours to take a shift. Shifts contain tasks and incidents; choices can improve the pay or skill result, cost resources, or end badly. Some responses require experience, a skill, an item, or a personality trait.</p>
<p>Work raises its related skill and can also train physical or practical abilities. More experience opens stronger ways to handle later incidents. The result passage shows the wage, energy spent, and skill changes.</p>
<h3>Personality</h3><p>Traits reflect a tendency across many choices, not a perfect streak. Acting against a tendency does not erase everything you have built. Character Traits in the Journal shows your current traits and progress.</p></section><</nobr>><<nobr>><section class="help-topic"><h2>Getting to know people</h2>
<p>Speak with an NPC to learn about them. Their name, home, routine, and personal views are discovered over time; a stranger may give only a broad answer. The small face beside dialogue identifies its speaker, and clicking an NPC portrait or name opens what you know about them.</p>
<p>Affection, Trust, Love, and Attraction are separate. A friendly exchange may build trust without becoming romance. Relationship milestones play as conversations, and NPCs may raise them on their own. Commitments to existing partners matter when someone considers a date or a private invitation.</p>
<figure class="help-figure"><img src="img/help/relationships.png" alt="NPC interaction panel showing a portrait and separate relationship meters" loading="lazy"><figcaption>Each relationship meter can move independently.</figcaption></figure></section><</nobr>><<nobr>><section class="help-topic"><h2>Activities and homes</h2>
<p>An invitation can be a friendly outing or a date. NPCs consider the relationship, their personality, and existing commitments before agreeing. Accepted plans appear under Plans; meet them at the arranged place and time. Your choices during the activity affect the outcome, and walking them home can reveal where they stay.</p>
<p>At a house, knock before speaking with a resident. Visits, doorstep conversation, household work, and overnight requests have their own limits and relationship context. A household member's partner may also be present. Doorstep daily allowances reset at 6 a.m.</p>
<h3>A place to stay</h3><p>A social visit is different from a request to stay the night. Overnight invitations are possible only during evening and late-night hours; friendship may make the request easier, while a strained relationship can close the door.</p></section><</nobr>><<nobr>><section class="help-topic"><h2>Intimacy and readiness</h2>
<p>Arousal is immediate and changes with the moment. Carnality is your character's longer-term comfort with sexual choices. Affection, trust, and a committed relationship can make some steps feel possible sooner; arousal or intoxication may influence that readiness temporarily.</p>
<p>The player and the NPC each have their own boundaries. A choice can be unavailable because either person is not ready, and a proposition does not guarantee that an encounter will begin. During an encounter you can continue, change direction, or stop according to the available choices.</p>
<p>The Journal records sexual history and first experiences. It also links recorded partners back to their NPC entries.</p></section><</nobr>><<nobr>><section class="help-topic"><h2>Trade and taxes</h2>
<p>Location trade links open a business's stock. Trade in an NPC's interaction menu deals with that person's possessions instead. Their money and willingness to buy limit what they can offer; prices and possible bargains depend on the item and the situation.</p>
<p>Ambercross assesses a weekly levy on resident travelers and a household tax on homes. Moving in with a partner can change your share. Pay or discuss the account with the town clerks; unpaid bills accumulate and can lead to collection, withheld wages, and other consequences.</p>
<p>The Taxes page in the Journal shows your current balance and notices. Room rental at the tavern is separate from the town levy.</p></section><</nobr>><<nobr>><section class="help-topic"><h2>The Journal</h2>
<p>The Journal gathers character details, trait progress, sexual history, relationships, quests, people you have met, and taxes. Quest objectives update as you act. A person's name in a relationship or history entry can take you to their details without searching the whole roster.</p>
<figure class="help-figure"><img src="img/help/journal.png" alt="Journal tabs for character, traits, relationships, quests, people, and taxes" loading="lazy"><figcaption>The Journal separates personal records from current objectives and accounts.</figcaption></figure>
</section><</nobr>>