WOLF GAME
xax
<<nobr>>\n<h1>WEREWOLF GAME</h1>\n<h2>august demo version</h2>\n<ul class="title">\n<li>[[new game|new_game]]</li>\n<li><<if $__saves>>[[load game|load_game]]<<else>>==load game==<<endif>></li>\n<li id="changelog">[[changelog]]</li>\n<li>[[about]]</li>\n</ul>\n<div id="notes">[[content notes]]</div>\n<div id="walkthrough_l">[[walkthrough|walkthrough spoiler]]</div>\n<<endnobr>>
<<display "static init">>\n<<display "init">>\\n<<display "character creation">>
<<display "static init">>\\n<div class="shead"><h1>LOAD GAME</h1></div>\\n<<savegames "load">>\\n[[<=|Start]]\n\n[[wipe savedata|wipe_saves]]
This will permanently delete all of your saves. Are you sure about this?\n\n* [[yes, delete everything|wipe confirm]]
<h1><<print (function () {\n try {\n delete state.history[0].variables["__saves"];\n window.localStorage.removeItem("Twine.WOLF GAME.__saves");\n } catch (e) {\n throw new Error ("failed to delete data: " + e);\n }\n return "deleted.";\n })()>></h1>\n\n[[=>|Start]]
<div class="shead"><h1>SAVE GAME</h1></div>\\n<<savegames "save">>\\n\n/%[[export current save data|export save]]%/\\n[[<=|map]]
<textarea><<print serializeActiveSave()>></textarea>\n\ncopy this and save it somewhere on your computer.\n\n[[<=|save_game]]
/% TODO: figure out how to expose this in the ui (it should be available even if you don't have any savegames, so it can't be in the 'load game' menu) (and also copy over the `import` code from hive game) %/\\nthis will replace the save in slot {x}.\n\npaste stored save data into here:\n\n<<import>>
.shead { width: 39em; margin-top: 2em; }\n.shead h1 { margin: 0; text-align: center; }\nol.saves {}\n ol.saves button { cursor: pointer; transition: 0.3s; }\n ol.saves button[disabled] { cursor: auto; }\n ol.saves li { position: relative; margin: 0.33em 0; display: flex; }\n\nol.saves { counter-reset: save; list-style: none; }\n ol.saves li:before { position: absolute; height: 1.2em; width: 1.2em; top: calc(50% - 0.6em); left: -1.6em;\n counter-increment: save; content: counter(save) "."; text-align: center; line-height: 1.2em; }\n\n ol#load button, ol#save .cont { display: inline-block; font-size: 100%;\n line-height: 1.6em; height: 4.8em; width: 35em; position: relative;\n padding: 0; margin: 0;\n background: #000; color: #fff; border: 1px solid #aaa; border-radius: 6px; }\n ol#load button > *, ol#save .cont > * { padding: 0 0.2em; }\nol#load {}\n ol#load button:hover { background: #431; border-color: #ffc; }\n ol#load button:hover .hbar { border-color: #dda; }\n ol#load button[disabled]:hover { background: transparent; }\n ol#load button[disabled], ol#save li.blank .cont { border-color: #333; }\nol#save {}\n ol#save button { color: #000; background: #fe8; border: none; border-radius: 4px; }\n ol#save button:hover { background: #ffc;}\n ol#save button { align-self: center; }\n\n ol#save .cont { margin-right: 1em; }\n\nol.saves span.blank { display: block; text-align: center; line-height: 4.8em; color: #ccc; }\n\nol.saves .hbar { display: block; height: 1.6em; border-bottom: 1px solid #777; background: rgba(255, 255, 255, 0.0625); border-top-left-radius: 6px; border-top-right-radius: 6px; position: relative; transition: 0.3s; }\nol.saves .hbar .last_played { position: absolute; top: 0; left: 0.2em; }\nol.saves .hbar .size { position: absolute; top: 0; right: 0.2em; }\nol.saves .name { display: block; text-align: left; }\nol.saves .location { display: block; text-align: left; }\nol.saves .time_played { display: block; text-align: right; position: absolute; right: 0; bottom: 0;}\n\nol.saves .version_error { display: block; text-align: center; background: #c41; color: #eee; width: 1.6em; position: absolute; left: calc(50% - 0.8em); }
#changelog > li {display: block; padding-bottom: 0.5em; margin-bottom: 0.5em; border-bottom: 1px solid #eee576; }
<<nobr>>\n<ul id="changelog">\n<li>august demo\n <ul>\n <li>added savegames!</li>\n <li>added versioning, changelog, and about</li>\n <li>added walkthrough</li>\n <li>added dialog labels for dialog</li>\n <li>zones: lower virigost, along with a lodging room</li>\n <li>revised the endgame of the beast-masked hunter case to make it a little more mechanically-involved</li>\n <li>added substantial branching for the bestial dockworker initial dockside sex scene</li>\n <li>added a top branch for the initial night watchman sex scene</li>\n <li>changed some twine internals to inline more code</li>\n </ul></li>\n<li>july demo\n <ul>\n <li>initial game release</li>\n <li>demo version of beast-masked hunter case</li>\n <li>zones: market street / undercity market</li>\n <li>npcs: bestial dockworker, lady of the night, night watchman, transformed young factoryworker</li>\n </ul></li>\n</ul>\n<<endnobr>>\n[[<=|Start]]
<<display "static init">><div class="meta"><<display "StoryTitle">> / build <<print gameVersion>>\nall writing and code by xax; development started february 2020\n\nonline at\n* <a href="https://xax.itch.io/">itch.io</a>\n* <a href="https://www.patreon.com/xax">patreon</a>\n* <a href="https://the.monsterpit.net/@xax/">fediverse</a> / <a href="https://twitter.com/xaphiriron">twitter mirror</a>\n* <a href="https://xax.dreamwidth.org/">dreamwidth</a>\n* <a href="https://archiveofourown.org/users/xax">ao3</a>\n\nthis game was made in twine 1.4, using a variant of the sugarcane layout.\n\n[[<=|Start]]</div>
<div class="meta">you start off investigating a murder. there's a lot of violence. there will be bad endings where you get killed.\n\nalso, the game is all about a city experiencing social upheaval and unrest due to a plague that's been spreading unchecked for ages. it turns out this was shockingly prescient for world events, given that i started outlining this in january/february. so this probably won't really take your mind off COVID-19, especially when the game gets into the cases that are more specifically about the beast plague itself.\n\n''this game contains sexual content!'' you play as a male character, and all the sex (so far) is with werewolf/beastmen characters. no player-centric sex scenes are obligatory.\n\nyou can have sex with some assholes. specifically, this is a detective game. you can fuck people of interest, which means both sometimes you might be fucking somebody who's a serial killer or some other unsavory character and you might not know it yet, and also you can fuck characters who presumably wouldn't want to fuck you if they knew you were investigating them.\n\nin terms of sexual content, currently the game contains:\n* sex in public\n* humans with dog dicks\n* knotting\n* animal behavior during sex (ass-to-ass knotting, drooling, barking, etc)\n* huge loads\n* gross monster cum\nthese notes will expand as more content is added.\n\n[[<=|Start]]</div>
<div class="meta">this contains game spoilers. are you sure?\n\n* [[yes|walkthrough]]\n* [[no|Start]]\n</div>
<div class="meta">\\n!!beast-masked hunter case\n\n* ask the transformed young factoryworker (in Last Hope Hall) <span class="clickedResponse">have you heard of the beast-masked hunter's latest victim</span>, and follow up with <span class="clue">in the night</span>\n* ask the lady of the night (in Hunger for the Dark) <span class="clickedResponse">where were you last night, after second bell</span>, and follow up with <span class="clue">fighting from the riverside</span>\n* ask the night watchman (in Liar's Way) <span class="clickedResponse">where were you last night, after second bell</span>, and follow up with <span class="clue">on the scene</span>\n* go to the north bank of Where Rats Drowned and consider your clues. compare 'lady heard fight' with 'watchman heard altercation' to get 'inciting incident was nearby'. compare 'inciting incident was nearby' with 'altercation near dark fountain'.\n* go back to the map and pick 'investigate the environs closely' at The Deep Way (east, north, down, west from the north bank of Where Rats Drowned)\n* head west into the newly-revealed room, and pick 'consider'.\n(there are other ways to do it, but this is the most direct)\n\n!!misc. character sex scenes\n\n* to get the sex scene with the transformed young factoryworker you have to talk to him twice without asking any questions that make him mad; when you go to leave the second time he'll proposition you. this can be easily accomplished by just not asking him any questions and immediately leaving twice in a row.\n* to get the sex scene with the night watchman, ask <span class="clickedResponse">what is your occupation</span> and follow up with <span class="clue">watch</span>, <span class="clue">couple fucking in the streets</span>, and then <span class="clue">urges</span>\n* to get the sex scene with the bestial dockworker (who's on the south bank of The River of Garbage), ask <span class="clickedResponse">what is your occupation</span> and follow up with <span class="clue">many</span>, <span class="clue">something</span>, and then <span class="clue">something else</span>.\n* to get the final sex scene, complete the demo, and talk to the beast-masked hunter again.\n\n[[<=|Start]]\n</div>
try {\n version.extensions['textinput'] = {major:1, minor:0, revision:0 };\n macros['textinput'] = {\n handler: function(place, macroName, params, parser) {\n v = params[0].replace("$","");\n var input= document.createElement('input');\n input.type = "text";\n d = v+"TextInput";\n input.id = d;\n input.addEventListener('keyup', function()\n {\n state.history[0].variables[v] = document.getElementById(d).value;\n });\n place.appendChild(input);\n },\n init: function() { var v; var d;},\n };\n} catch(e) {\n throwError(place,"textinput Setup Error: "+e.message); \n}
<<set $pc to\n { eye: either ("brown", "blue", "black", "hazel")\n , eyefeat: "none"\n , haircolor: either ("black", "brown", "blond", "ginger")\n , hair: "military cut"\n , facialhair: "none"\n , bodyhair: "minimal"\n , skin: either ("pale, freckled", "pale", "tanned", "light-skinned", "dark-skinned")\n , scars: "none"\n , tattoos: "none"\n }>>\\n<<set $ccdisplay to null>>\n<div class="cc">name: <<textinput $pcname>>\neye color: <<block pceye>><<print $pc.eye>> <<block customize>><<if $ccdisplay !== "eye">>\\n<<click "+">><<set $ccdisplay to "eye"; reshow ("customize")>><<endclick>>\\n<<else>><<click "-">><<set $ccdisplay to null; reshow ("customize")>><<endclick>>\n<<toggle $pc.eye "pceye" "brown" "brown">>\n<<toggle $pc.eye "pceye" "blue" "blue">>\n<<toggle $pc.eye "pceye" "green" "green">>\n<<toggle $pc.eye "pceye" "hazel" "hazel">>\n<<toggle $pc.eye "pceye" "red" "red">>\n<<toggle $pc.eye "pceye" "gleaming red-green" "gleaming red-green">>\n<<endif>><<endblock>><<endblock>>\neye features: <<block pceyefeat>><<print $pc.eyefeat>> <<block customize>><<if $ccdisplay !== "eyefeat">>\\n<<click "+">><<set $ccdisplay to "eyefeat"; reshow ("customize")>><<endclick>>\\n<<else>><<click "-">><<set $ccdisplay to null; reshow ("customize")>><<endclick>>\n<<toggle $pc.eyefeat "pceyefeat" "none" "none">>\n<<toggle $pc.eyefeat "pceyefeat" "eyepatch (left)" "eyepatch (left)">>\n<<toggle $pc.eyefeat "pceyefeat" "glasses" "glasses">>\n<<toggle $pc.eyefeat "pceyefeat" "bandage-wrapped" "bandage-wrapped">>\n<<endif>><<endblock>><<endblock>>\nhair color: <<block pchaircolor>><<print $pc.haircolor>> <<block customize>><<if $ccdisplay !== "haircolor">>\\n<<click "+">><<set $ccdisplay to "haircolor"; reshow ("customize")>><<endclick>>\\n<<else>><<click "-">><<set $ccdisplay to null; reshow ("customize")>><<endclick>>\n<<toggle $pc.haircolor "pchaircolor" "black" "black">>\n<<toggle $pc.haircolor "pchaircolor" "brown" "brown">>\n<<toggle $pc.haircolor "pchaircolor" "blond" "blond">>\n<<toggle $pc.haircolor "pchaircolor" "ginger" "ginger">>\n<<toggle $pc.haircolor "pchaircolor" "grey" "grey">>\n<<endif>><<endblock>><<endblock>>\nhair style: <<block pchair>><<print $pc.hair>> <<block customize>><<if $ccdisplay !== "hair">>\\n<<click "+">><<set $ccdisplay to "hair"; reshow ("customize")>><<endclick>>\\n<<else>><<click "-">><<set $ccdisplay to null; reshow ("customize")>><<endclick>>\n<<toggle $pc.hair "pchair" "bald" "bald">>\n<<toggle $pc.hair "pchair" "shaved to stubble" "shaved to stubble">>\n<<toggle $pc.hair "pchair" "widow's peak" "widow's peak">>\n<<toggle $pc.hair "pchair" "military cut" "military cut">>\n<<toggle $pc.hair "pchair" "sides shaved; top slicked back" "sides shaved; top slicked back">>\n<<toggle $pc.hair "pchair" "shaggy curls" "shaggy curls">>\n<<toggle $pc.hair "pchair" "mid-length ponytail" "mid-length ponytail">>\n<<toggle $pc.hair "pchair" "long braid" "long braid">>\n<<toggle $pc.hair "pchair" "bowl cut" "bowl cut">>\n<<toggle $pc.hair "pchair" "pulled-back small braids" "pulled-back small braids">>\n<<toggle $pc.hair "pchair" "dreadlocks" "dreadlocks">>\n<<endif>><<endblock>><<endblock>>\nfacial hair: <<block pcfacialhair>><<print $pc.facialhair>> <<block customize>><<if $ccdisplay !== "facialhair">>\\n<<click "+">><<set $ccdisplay to "facialhair"; reshow ("customize")>><<endclick>>\\n<<else>><<click "-">><<set $ccdisplay to null; reshow ("customize")>><<endclick>>\n<<toggle $pc.facialhair "pcfacialhair" "none" "none">>\n<<toggle $pc.facialhair "pcfacialhair" "stubble" "stubble">>\n<<toggle $pc.facialhair "pcfacialhair" "mustache" "mustache">>\n<<toggle $pc.facialhair "pcfacialhair" "goatee" "goatee">>\n<<toggle $pc.facialhair "pcfacialhair" "chinstrap" "chinstrap">>\n<<toggle $pc.facialhair "pcfacialhair" "full beard" "full beard">>\n<<endif>><<endblock>><<endblock>>\nbody hair: <<block pcbodyhair>><<print $pc.bodyhair>> <<block customize>><<if $ccdisplay !== "bodyhair">>\\n<<click "+">><<set $ccdisplay to "bodyhair"; reshow ("customize")>><<endclick>>\\n<<else>><<click "-">><<set $ccdisplay to null; reshow ("customize")>><<endclick>>\n<<toggle $pc.bodyhair "pcbodyhair" "shaved" "shaved">>\n<<toggle $pc.bodyhair "pcbodyhair" "minimal" "minimal">>\n<<toggle $pc.bodyhair "pcbodyhair" "hairy chest" "hairy chest">>\n<<toggle $pc.bodyhair "pcbodyhair" "hairy forearms & calves" "hairy forearms & calves">>\n<<toggle $pc.bodyhair "pcbodyhair" "coarsely-haired" "coarsely-haired">>\n<<endif>><<endblock>><<endblock>>\nskin color: <<block pcskin>><<print $pc.skin>> <<block customize>><<if $ccdisplay !== "skin">>\\n<<click "+">><<set $ccdisplay to "skin"; reshow ("customize")>><<endclick>>\\n<<else>><<click "-">><<set $ccdisplay to null; reshow ("customize")>><<endclick>>\n<<toggle $pc.skin "pcskin" "pale, freckled" "pale, freckled">>\n<<toggle $pc.skin "pcskin" "pale" "pale">>\n<<toggle $pc.skin "pcskin" "tanned" "tanned">>\n<<toggle $pc.skin "pcskin" "light-skinned" "light-skinned">>\n<<toggle $pc.skin "pcskin" "dark-skinned" "dark-skinned">>\n<<endif>><<endblock>><<endblock>>\nscars: <<block pcscars>><<print $pc.scars>> <<block customize>><<if $ccdisplay !== "scars">>\\n<<click "+">><<set $ccdisplay to "scars"; reshow ("customize")>><<endclick>>\\n<<else>><<click "-">><<set $ccdisplay to null; reshow ("customize")>><<endclick>>\n<<toggle $pc.scars "pcscars" "none" "none">>\n<<toggle $pc.scars "pcscars" "fang marks; across neck and chest" "fang marks; across neck and chest">>\n<<toggle $pc.scars "pcscars" "claw marks; across ribs" "claw marks; across ribs">>\n<<toggle $pc.scars "pcscars" "burns; flecks across left side of body" "burns; flecks across left side of body">>\n<<toggle $pc.scars "pcscars" "cuts; across back of hands and both forearms" "cuts; across back of hands and both forearms">>\n<<toggle $pc.scars "pcscars" "cuts; across ribs and side" "cuts; across ribs and side">>\n<<toggle $pc.scars "pcscars" "cratered bullet mark; right side of stomach and back" "cratered bullet mark; right side of stomach and back">>\n<<toggle $pc.scars "pcscars" "cratered bullet mark; left shoulder" "cratered bullet mark; left shoulder">>\n<<toggle $pc.scars "pcscars" "buckshot mark; chest and right shoulder" "buckshot mark; chest and right shoulder">>\n<<toggle $pc.scars "pcscars" "facial scar; over cheek and through eyebrow" "facial scar; over cheek and through eyebrow">>\n<<toggle $pc.scars "pcscars" "facial scar; across bridge of nose" "facial scar; across bridge of nose">>\n<<toggle $pc.scars "pcscars" "facial scar; notched left ear" "facial scar; notched left ear">>\n<<toggle $pc.scars "pcscars" "prisoner brand; left deltoid" "prisoner brand; left deltoid">>\n<<endif>><<endblock>><<endblock>>\ntattoos: <<block pctattoos>><<print $pc.tattoos>> <<block customize>><<if $ccdisplay !== "tattoos">>\\n<<click "+">><<set $ccdisplay to "tattoos"; reshow ("customize")>><<endclick>>\\n<<else>><<click "-">><<set $ccdisplay to null; reshow ("customize")>><<endclick>>\n<<toggle $pc.tattoos "pctattoos" "none" "none">>\n<<toggle $pc.tattoos "pctattoos" "disordered mess of sailor tattoos covering most of both arms, chest, and back" "disordered mess of sailor tattoos covering most of both arms, chest, and back">>\n<<toggle $pc.tattoos "pctattoos" "knuckle tattoos; lettering in coils up wrists and forearms" "knuckle tattoos; lettering in coils up wrists and forearms">>\n<<toggle $pc.tattoos "pctattoos" "chest piece; deer skull and antlers surrounded by thorn vines" "chest piece; deer skull and antlers surrounded by thorn vines">>\n<<toggle $pc.tattoos "pctattoos" "chest piece; bloody heart pierced with crossed daggers" "chest piece; bloody heart pierced with crossed daggers">>\n<<toggle $pc.tattoos "pctattoos" "ornate lemniscate double-barred cross across back from lower neck to waist" "ornate lemniscate double-barred cross across back from lower neck to waist">>\n<<toggle $pc.tattoos "pctattoos" "sharp-angled geometric knotwork in rings around both biceps" "sharp-angled geometric knotwork in rings around both biceps">>\n<<toggle $pc.tattoos "pctattoos" "zig-zagging lines down spine" "zig-zagging lines down spine">>\n<<toggle $pc.tattoos "pctattoos" "symmetrical curving lines and dots across hips and thighs" "symmetrical curving lines and dots across hips and thighs">>\n<<toggle $pc.tattoos "pctattoos" "dots and lines across eyebrows, cheeks, jawline" "dots and lines across eyebrows, cheeks, jawline">>\n<<toggle $pc.tattoos "pctattoos" "palms and soles of feet inked solid black" "palms and soles of feet inked solid black">>\n<<endif>><<endblock>><<endblock>>\n\n[[=>|verify_loop]]</div>
<<block mapblock>><<citymap $_pos>><<set markVisited ($_pos)>>\n<<endblock>><div id="map_debug">[[π|map debug]]</div>
<<if $_debug>>\\ndisable map debug?\n[[yes|map debug off]] / [[no|map]]\n<<else>>\\nenable map debug? (changes rendering mode and enables exits to half-finished zones)\n[[yes|map debug on]] / [[no|map]]\n<<endif>>
<<set $_debug to true>><<display "map">>
<<set $_debug to false>><<display "map">>
<<if $lodgings eq $_pos>>* [[save game|save_game]]<<endif>>\n/% automatically included on every map room %/\\n<<if $bmh_investigate && mapData[$_pos].zone == 2>>/% if yr at the 'investigation' stage of of beast-masked hunter quest%/\\n* [[Investigate the environs closely|bmh investigate]]\n<<endif>>
<<nobr>>\n/% also copied from the new hive sex code %/\n<<set $_who to parameter(0)>>\n<<set $_what to parameter(1)>>\n<<set $_position to parameter(2)>>\n<<set (function (who, what, position){\n var sexvals = state.history[0].variables["sex"];\n var set = [];\n if (position == "") {\n set = [who, who+what, what];\n } else {\n set = [who, who+what, who+position, who+what+position, what, what+position, position];\n }\n set.map (function (ix) {\n if (!sexvals[ix]) {\n sexvals[ix] = 0;\n }\n sexvals[ix] += 1;\n });\n })($_who, $_what, $_position)>>\n<<if $_position eq "top" && ($_what eq "oral" || $_what eq "anal")>>\n<<set checkUpdateBiggest ($_who, $_what)>>\n<<endif>>\n<<endnobr>>
<<nobr>>\n<<set $game_version to 1>>\n<<set $_debug to false>>\n<<set $secretExits to {}>>\n<<set $_lastLoaded to Date.now()>>\n\n<<set $sex to {}>>\n<<set $biggest to {oral: null, anal: null, sheathfuck: null, frot: null, thighfuck: null}>>\n\n<<set $_pos to 59>>\n<<set $lodgings to 59>>\n<<set $_enteredFrom to null>>\n<<set $_visited to replicate (0, Math.ceil (mapData.length / 32))>>\n\n<<set $_clues to {}>>\n\n<<set $facts =\n [ "is your name"\n , "is your occupation"\n ]>>\n<<set $locations =\n [\n ]>>\n<<set $events =\n [\n ]>>\n<<set $people =\n [ "suspicious people"\n ]>>\n<<set $persons =\n [\n ]>>\n<<set $times =\n [\n ]>>\n\n/% initialize the twine-variable store of each npc's vartable %/\n<<set $npcVars = {}>>\n<<set Object.keys (npcs).map (k => {\n let vars = vartable();\n vars["npcVars"][k] = npcs[k].vars ? npcs[k].vars : {};\n })>>\n\n<<endnobr>>
<<nobr>>\n<<set window.gameVersion to 1>>\n<<set window.topic = {}>>\n/% i'm too lazy to want to track this myself. (this calculates which rooms are bordered at the edge of a zone, and thus should show up as 'in the zone' in the map even when they're not in the zone. ) %/\n<<set {\n mapData.map (room => {\n room.exits.map (exit => {\n if (mapData[exit["to"]].zone !== room.zone) {\n zoneData[room.zone].margin.push (exit["to"]);\n }\n });\n });\n zoneData.map (zone => {\n console.log (zone.name);\n console.log (zone.margin);\n });\n }>>\n<<set topic["rumormonger"] =\n { name: "rumormonger"\n , topics:\n { "do you know...":\n { "any...":\n { "non-wolf beasts": "rumormonger non-wolf"\n , "ashen beasts": "rumormonger ashen beasts"\n , "spark beasts": "rumormonger spark beasts"\n , "beasts who can hide as humans": "rumormonger beasts who hide"\n }\n }\n }\n };\n topic["drunkard"] =\n { name: "drunkard"\n , topics:\n { "do you know...":\n { "any...":\n { "non-wolf beasts": "drunkard non-wolf"\n }\n }\n }\n };\n topic["worker"] =\n { name: "worker"\n , topics:\n { "do you know...":\n { "any...":\n { "non-wolf beasts": "worker non-wolf"\n , "ashen beasts": "worker ashen beasts"\n }\n }\n }\n };\n topic["goodbye_spec"] =\n { name: "goodbye_spec"\n , topics:\n { "goodbye": "goodbye interrupt"\n }\n };\n topic["know_nothing"] =\n { name: "know_nothing"\n , topics:\n { "*": "know nothing"\n }\n };\n topic["human"] =\n { name: "human"\n , topics:\n { "": "human intro"\n , "do you know...":\n { "any...":\n { "unturned humans": "human know humans"\n , "incomplete beasts": "human know altered"\n , "beasts": "human know beasts"\n }\n }\n }\n };\n\n topic["factoryworkerUnique"] =\n { name: "young factoryworker (unique)"\n , topics:\n { "": "transformed young factoryworker splash"\n , "goodbye": "transformed young factoryworker goodbye"\n , "what...":\n { "is your name": "tfed factoryworker name"\n , "is your occupation": "tfed factoryworker occupation"\n }\n , "have you heard of...":\n { "the beast-masked hunter": "tfed young factoryworker heard of beast-masked"\n , "the beast-masked hunter's latest victim": "tfed young factoryworker heard of beast-masked victim"\n , "the latest killing by the beast-masked hunter": "tfed young factoryworker heard of latest killing bmh"\n }\n , "do you know...":\n { "the beast-masked hunter": "tfed young factoryworker know beast-masked"\n , "the beast-masked hunter's latest victim": "tfed young factoryworker know beast-masked victim"\n }\n , "where is...":\n { "the beast-masked hunter's latest victim": "tfed young factoryworker where is beast-masked victim"\n }\n , "have you seen...":\n { "the beast-masked hunter": "tfed young factoryworker have you seen beast-masked"\n , "the beast-masked hunter's latest victim": "tfed young factoryworker have you seen beast-masked victim"\n }\n , "where were you...":\n { "*" : "tfed young factoryworker time"\n }\n }\n };\n\n topic["bestialdockworkerUnique"] =\n { name: "bestial dockworker (unique)"\n , topics:\n { "": "bestial dockworker splash"\n , "goodbye": "bestial dockworker goodbye"\n , "what...":\n { "is your name": "bestial dockworker name"\n , "is your occupation": "bestial dockworker occupation"\n }\n , "do you know...":\n { "the beast-masked hunter": "bestial dockworker know beast-masked"\n , "the beast-masked hunter's latest victim": "bestial dockworker know beast-masked victim"\n }\n , "where is...":\n { "the beast-masked hunter": "bestial dockworker where is beast-masked"\n , "the beast-masked hunter's latest victim": "bestial dockworker where is beast-masked victim"\n }\n , "have you heard of...":\n { "the latest killing by the beast-masked hunter": "bestial dockworker heard of latest killing"\n }\n , "have you seen...":\n { "the beast-masked hunter": "bestial dockworker seen beast-masked"\n , "the beast-masked hunter's latest victim": "bestial dockworker seen beast-masked victim"\n }\n , "where were you...":\n { "last night, after second bell": "bestial dockworker where last night second bell"\n }\n }\n };\n\n topic["genericBeastmasked"] =\n { name: "generic beast-masked hunter knowledge"\n , topics:\n { "have you heard of...":\n { "the beast-masked hunter": "generic heard of beast-masked"\n , "the beast-masked hunter's latest victim": "generic heard of beast-masked victim"\n }\n }\n };\n\n topic["nightwatchmanUnique"] =\n { name: "transformed night watchman (unique)"\n , topics:\n { "": "transformed night watchman splash"\n , "what...":\n { "is your name": "transformed watchman name"\n , "is your occupation": "transformed watchman occupation"\n }\n , "where is...":\n {"the beast-masked hunter's latest victim": "transformed watchman where is beast-masked victim"\n }\n , "have you heard of...":\n { "the beast-masked hunter": "transformed watchman heard of beast-masked hunter"\n , "the beast-masked hunter's latest victim": "transformed watchman heard of latest victim"\n , "the latest killing by the beast-masked hunter": "transformed watchman heard of latest killing beast-masked"\n }\n , "do you know...":\n { "the beast-masked hunter": "transformed watchman know beast-masked"\n , "the beast-masked hunter's latest victim": "transformed watchman know beast-masked victim"\n }\n , "have you seen...":\n { "the beast-masked hunter": "transformed watchman seen beast-masked"\n }\n , "where were you...":\n { "last night, after second bell": "transformed watchman last night second bell"\n }\n }\n };\n topic["maskedChurchmanUnique"] =\n { name: "masked churchman (unique)"\n , topics:\n { "": "masked churchman splash"\n }\n };\n topic["ladyNightUnique"] =\n { name: "lade of the night (unique)"\n , topics:\n { "": "lady of the night splash"\n , "do you know...":\n { "any...":\n { "suspicious people": "lady night know suspicious"\n }\n }\n , "what...":\n { "is your occupation": "lady occupation"\n }\n , "have you heard of...":\n { "the beast-masked hunter": "lady heard of beast-masked"\n , "the beast-masked hunter's latest victim": "lady heard of beast-masked victim"\n , "the latest killing by the beast-masked hunter": "lady night heard of latest killing beast-masked"\n }\n , "have you seen...":\n { "the beast-masked hunter": "lady night seen beast-masked"\n , "the beast-masked hunter's latest victim": "lady night seen beast-masked victim"\n , "any...":\n { "suspicious people": "lady night seen suspicious"\n }\n }\n , "where were you...":\n { "last night, after second bell": "lady night where last night second bell"\n }\n }\n } >>\n\n<<set window.npcs = {}>>\n<<set npcs.youngFactoryworker =\n { title: "Young Factoryworker"\n , vars: { mode: "wary"}\n , dialog:\n [ topic["factoryworkerUnique"]\n , topic["goodbye_spec"]\n , topic["know_nothing"]\n ]\n };\n npcs.bestialDockworker =\n { title: "Bestial Dockworker"\n , qtag: "npc_idriss"\n , vars: {}\n , dialog:\n [ topic["bestialdockworkerUnique"]\n , topic["genericBeastmasked"]\n , topic["goodbye_spec"]\n , topic["know_nothing"]\n ]\n };\n npcs.nightWatchman =\n { title: "Night Watchman"\n , qtag: "npc_suggins"\n , vars: {}\n , dialog:\n [ topic["nightwatchmanUnique"]\n , topic["goodbye_spec"]\n , topic["know_nothing"]\n ]\n };\n npcs.ladyOfTheNight =\n { title: "Lady of the Night"\n , qtag: "npc_odessa"\n , vars: {}\n , dialog:\n [ topic["ladyNightUnique"]\n , topic["goodbye_spec"]\n , topic["human"]\n , topic["know_nothing"]\n ]\n };\n npcs.maskedChurchman =\n { title: "Masked Churchman"\n , vars: {}\n , dialog:\n [ topic["maskedChurchmanUnique"]\n , topic["genericBeastmasked"]\n , topic["goodbye_spec"]\n , topic["know_nothing"]\n ]\n };\n npcs.genericHuman =\n { title: "Idler"\n , dialog:\n [ topic["rumormonger"]\n , topic["human"]\n , topic["goodbye_spec"]\n , topic["know_nothing"]\n ]\n }>>\n<<endnobr>>
<<set $interrupt to true>>\\n<<autoresponse "That'll be all for now.">>\nYou take your leave.\n\n[[=>|map]]
<<dialog "I don't know anything about that.">>
<<if $pcname>><<set $pc.name to $pcname>><<display "game intro">>\n<<else>><div class="cc"><span class="error">Please give a character name.</span></div>\\n<<display "character creation">>\n<<endif>>
<<display "hunter quest demo intro">>
<<display "masked hunter intro blurb">>\n\n<<display "tutorial">>\n\n[[=>|map]]
> <span class="clue">Text like this</span> is a //clue//, which gives you information: maybe about the person you're talking to, maybe about the case you're on. Every case has a place where you can reflect on your current clues and piece them together into new clues for further investigation; where specifically depends on the case.\n> \n> When talking to people, some clues can be clicked to ask a //follow-up question//. This could be useful and reveal more clues, or lead nowhere and waste time and favor -- or it could be dangerous. Maybe that clue was a slip of the tongue, and by drawing their attention to it, you're drawing their attention to //you//.
There's been a break in the case.\n\nVarious members of the Kings of Kane Street and Red Street Regents, two street gangs with aspirations of being allied with the Royals, have been turning up dead. Each of the victims have been beasts, and all looking overpowered, bodily torn apart by claws.\n\nThere's been a rumor of a hidden hunter: one who wears a leather beast mask and fights with false claws forged from star-metal. This <<clue "beast-masked hunter">> has been picking off the gangs one by one. The going theory is this is sending a message to the Royals, or maybe the hunter working his way through the lesser gangs before trying bigger fry. The gangs are out for vengeance, and the Royals -- though they would never show it -- are undoubtedly getting uneasy.\n\nThere have been aspirants, beast and human alike, looking for the hunter for months: for revenge, to offer up his head to the Royals for protection, or for their own unknown motives. You're one of the latter.\n\nLast night there was an altercation in the undermarket. There's a new dead beast. You're not sure who, but there's a different buzz. <<clue "There's something different about this latest victim">>, though you don't know what, yet.\n\n<<set $bmh_active to true>>\\n<<grantTopic "the beast-masked hunter" "persons">>\n<<grantTopic "the beast-masked hunter's latest victim" "persons">>\n<<grantTopic "the latest killing by the beast-masked hunter" "events">>
<<nobr>>\n<<dialog "Yeah, he's that mysterious hunter, right? Nobody's really seen him, though.">>\n<<dialog "Still, can't argue with that many bodies.">>\n<<endnobr>>
<<nobr>>\n<<dialog "Yeah, last night, right? There was a big crowd down in the undercity.">>\n<<dialog "Sounded like some people found the body while it was still warm.">>\n<<endnobr>>
<<nobr>>\n<div class="npc"><<dlegend>>The guy he killed, it was <<clue "Mikhael the Crusher" "bmh" "mikhael">>, right? That's what everybody is saying.</div>\n\n<<autoresponse "So, do you know him?">>\n\n<<dialog "Know //of// him, maybe. I'm not associated with those folks.">>\n\n<<endnobr>>
<<set $_back to "rats clues">>\\nKnowledge related to the beast-masked hunter:\n<<investigate "bmh">>\n<<block compare>>\n<<if $_compareFailureMsg>><<print $_compareFailureMsg>><<endif>><<endblock>>\n\n[[back to the city|map]]
<<if mapData[$_pos].name === "Where Rats Drowned" && $bank === "north">>\\nYou look at the flagstones. There's still a red-brown stain where Mikhael was killed, and then a smear going to the west that cuts off abruptly, which might be the trail from when his body was removed. It's hard to say if there's anything to be gleaned from this.\n\n[[<=|map]]\n<<else if mapData[$_pos].name === "Where Rats Drowned" && $bank === "south">>\\nYou spend some time looking at the site of the murder from across the street. Nothing in particular catches your eye. The dockfront is dark and slick, and you don't have a great view of the promenade itself -- there are market stalls in the way, now, though who can say if they were set up last night.\n\n[[<=|map]]\n<<else if mapData[$_pos].name === "Where Floodwaters Flowed" || mapData[$_pos].name === "Where the Water Runs Black">>\\nYou look at the flagstones. The market has been so busy today, even after the murder, that whatever trace Mikhael made are long gone, if there ever was any evidence.\n\n[[<=|map]]\n<<else if mapData[$_pos].name === "Nameless Street">>\\nYou pace through the alleyway. There are scuff marks on the walls that could be claws; some are still fresh. There are loose flagstones; they could have been dislodged recently. Or it could be nothing: the alley is quiet, disused, and secluded from the usual ebb and flow of the market. Loose flagstones could be anything.\n\n[[<=|map]]\n<<else if mapData[$_pos].name === "Sewer of Ravenous Rats">>\\nThere are scuff marks across the walls, old grime recently scraped away. There's a dark splatter of blood. You experimentally brush a sleeve across an unmarred section of the wall, and grimace at the mess it makes of the fabric, while hardly changing the appearance of the wall. It takes scraping metal or leather to leave marks at all similar.\n\n[[<=|map]]\n<<else if mapData[$_pos].name === "The Deep Way">>\\n<<display "bmh hideout">>\n<<else>>\\nYou spend some time checking out the area, but don't find anything relevant.\n\n[[<=|map]]\n<<endif>>
You check several of the unbarred grates. It's a minute's walk down a pitch-black tunnel, only to end at the bottom of a dropshaft. You suppose it's possible for someone to scale them, but not likely.\n\nThe fourth one you check is the jackpot. There's a rubble of fallen bricks, and the rubble is still fresh -- your fingers come back stained red with the powder, not yet soaked and washed away from the dampness of the sewers. There's a hole in the passageway, large enough for a man or beast to walk through, and past that, there's a dark passage with a flickering light at the end, past a corner.\n\n<<set $secretExits['deepway'] to true>>\\n<<set $bmh_investigate to false>>\\n[[=>|map]]
You consider.\n\nIf Mikhael was searching the undercity for the beast-masked hunter, and found this workshop, and the ensuing brawl brought them back up into the undermarket...\n\n...or if the beast-masked hunter captured Mikhael and brought him down here, still alive, only for Mikhael to escape and work his way to the surface...\n\n...either way, that would certainly explain everything. This is a secret the beast-masked hunter would be willing to kill to keep hidden.\n\nIt hadn't occurred to you before, but it's possible that the beast-masked hunter tans the hide of his prey and works them into his as masks. The corpses show up flayed, and if he's snatching a strip or two of hide from them, who can say in the mess. Or perhaps it's more terrestrial leather; far be it from you to speculate.\n\nThere's a prickle up your spine. You turn, and find [[a figure blocking the exit|bmh confrontation]].
It's the beast-masked hunter. He is, in fact, wearing a mask: a wolf-head mask, made from broad strips of black leather, woven together, with rivets along the seams. His eyes gleam, luminous yellow slivers in the dark pits of the mask.\n\nHe's not much taller than you: humanoid; a little rangy, rather than muscled; with a spray of curly red-orange hair bursting out from the back of his mask. He's got a pair of metal claws clasped in his hands, shaped like beast's claws: the fabled starmetal claws he uses against the beasts. They look like black iron to you. It seems impossible that he could generate the force required to claw through Mikhael's body, just, a question of physical strength and human limbs.\n\nHe's more than a little battered. His clothes, a workman's outfit of overalls and a heavy jacket -- maybe a leatherworker after all -- are ragged at the seams, and several have split entirely, making his outfit half-rags. One of his sleeves has been torn open, and it's drenched in blackened blood.\n\n<<dialog "Little vermin come to scurry where they're not wanted.">>\\n\\nHis voice is an animal's rasp.\n\nIf he killed Mikhael, you're no threat at all. You raise your hands.\n\n<<autoresponse "I'm not here to kill you.">>\\n\\nHe cocks his head to the side. Waiting for more.\\n\\n<<autoresponse "I'm here to recruit you.">>\\n\\n<<dialog "All this, hunting me down, risking your life, just to give me a sales pitch? Well, give it." "Beast-Masked Hunter">>\\n\\n<<autoresponse "You attracted a lot of attention, killing beasts. With Mikhael dead, even the Royals might get involved, and-- you're strong, but nobody's //that// strong.">>\\n<<autoresponse "Alone, they'll track you down and kill you. You think you can stand up to the Executioner?">>\\n<<autoresponse "You wanna take down the beasts? I have some friends, see. They think maybe the Royals' reign has gone on long enough. But it's gonna take a hell of a lot of power to do that. They'd be very interested to speak with you.">>\\n<<autoresponse "You need a new place to lay low for a while. Might as well be with them.">>\\n\\n<<dialog "These friends of yours. They think //they// can stand up to the Executioner?" "Beast-Masked Hunter">>\\n\\n<<autoresponse "They might.">>\\n\\n<<dialog "They beasts?" "Beast-Masked Hunter">>\\n\\n<<autoresponse "Some of them.">>\\n\\nHe knocks his claws against his thigh.\\n\\n<<dialog "Interesting." "Beast-Masked Hunter">>\\n\\n<<autoresponse "It hasn't escaped their notice that you went after the most brutal of the beasts. The Royals -- to them, humans are just meat. My friends, they got nothing against humans.">>\\n\\nYou gesture at yourself:\\n\\n<<autoresponse "That's why they sent a human to talk.">>\\n\\nThere's a long pause.\\n\\n<<dialog "I'll consider it." "Beast-Masked Hunter">>\\n\\nHe steps aside. You don't yet take the opening.\\n\\n<<dialog "But if they send anybody else down here, human or not, they won't like what happens to 'em." "Beast-Masked Hunter">>\\n\\nThat's as good as you'll likely get.\n<<set $blocked to false>>\\n<<set $bmh_active to false>>\n<<set $bmh_complete to "initial">>\\n\n[[=>|map]]
The beast-masked hunter. A man showing the beginning signs of the beast infection. Apparently a former (or current?) leatherworker.\n\nHe's wearing a mask: a wolf's head, made from broad strips of black leather, woven together, with rivets along the seams. His eyes gleam, luminous yellow slivers in the dark pits of the mask.\n\nHe's not much taller than you: humanoid; a little rangy, rather than muscled; with a spray of curly red-orange hair bursting out from the back of his mask.\n\nHe's more than a little battered. His clothes, a workman's outfit of overalls and a heavy jacket, are ragged at the seams, and several have split entirely, making his outfit half-rags. One of his sleeves has been torn open, and it's drenched in blackened blood.\n\n<<if $sex['beast-masked hunter']>>\\nYou don't want to push your luck, either with him or with the people who are assuredly closing in on tracking him down. Better not waste more time fucking.\n\n[[=>|map]]\n\n<<else if $sex>>\\nThere is one other thing you could ask him.\n\n<div class="responses"><<plegend>>\\n<<response "But before you run off to another hidey hole, you wanna fuck around some?" "bmh hideout fuck">>\n<<response "I'll just be going, then." "bmh proposition leave">>\n</div>\\n\n<<else>>\\nThere's not much left to say to him.\n\n[[<=|map]]\n<<endif>>
It's probably a good idea.\n\n[[=>|map]]
<div class="meta">that's all so far!\n\nthis is a very early demo release, so maybe check out <a href="https://xax.itch.io/the-new-hive">the new hive</a>, my last project, for something more complete. or check out <a href="https://patreon.com/xax">my patreon</a> for more up-to-date versions, votes on future content, and other development stuff.\n\nthis version is mostly a tech demo of the dialog/investigation mechanics. pretty high up on my to-do list is to totally change the actual case details to give the case more of a sense of trajectory. right now it's mostly just comparing everything with everything when there are a bunch of redundant clues; it's really not ideal. it turns out making a detective puzzle is like, complex game design. oh well, i'm sure i'll get better at it as this goes.\n\nthe next major thing to work on is for me to outline all the rest of the early-game cases, so i have a blueprint to work off of when i start writing them. in the mean time, i'll be adding in more minor characters so the streets aren't quite so empty.\n\nanyway hope you all enjoyed it and are interested in seeing how it grows from here! the plan is to have monthly releases, with each one focused on fleshing out a particular section of the game.\n</div>
He tilts his head to the side.\n\n<<autoresponse "You probably got time!">>\\n\nYou say it a little defensively.\n\nHe makes a rough, rasping noise from under the mask; it takes you a moment to realize he's laughing.\n\n<<dialog "Hunting for more than my hideout, aren't you?" "Beast-Masked Hunter">>\\n\nHe exhales; in the chill sewer air, his overheated breath billows out under his mask as a fog. He stalks forward: different than his threatening posturing from earlier, and not just because he tosses his metal claws aside.\n\n<<dialog "Sure. Let's fuck." "Beast-Masked Hunter">>\\n\nHis eyes gleam behind his mask, catching the light red-green. He pins you to the wall, grip iron-hard. This is, after all, the man who tore Mikhael apart with his bare hands. His body is all lean, hard muscle under his clothes, unnaturally hot as he presses your bodies together.\n\n<<autoresponse "That's a little--">>\\n\nHe shifts a thigh between your legs, grinding up against your balls. You cut off with a sharp exhale.\n\n<<autoresponse "That's a little abrupt, huh?">>\\n\nHe laughs against your shoulder, shrugging off his jacket, leaving him in his dark overalls and undershirt. His arms are covered in freckles, so many and so thick they dapple across the backs of his arms and spread across his shoulders, and the red hair across his forearms is thick and dark.\n\n<<dialog "You're the one who offered." "Beast-Masked Hunter">>\\n\nHe shoves his mask up, leather muzzle askew, revealing a stubbled jaw and scarred lips, pulled back to reveal his teeth. He's got two sets of canines. He scrapes his jaw up across your throat, fangs leaving stinging lines, and wetly sucks at your Adam's apple. There's a flush all down your body, skin prickling, cock thickening in your pants. You can feel the hard line of-- his sheath; he has a sheath-- press against your stomach. He repositions himself, unbuckling something, loosening his rough overalls, and his slow humps get a lot more drag with loose fabric shifting between you.\n\nIf the Beast-masked Hunter is half-beast himself, that answers a lot of questions about how he managed to fight against beasts. His animal cock knifes up against his undershirt, seeping pre onto the fabric, and he reaches down and gropes your crotch, fingers curling back against your balls, palm grinding down against your shaft. You let out a reedy moan, rutting into his touch, rolling your hips up against his. You reach up and tug at the straps of his overalls, shoving them off his shoulders, and his pants are dragged down an inch lower by the heavy material, straining around his sheath. You slide your arm down between you, pushing into the confines of his pants: hot, slightly sweat-damp, his fur thick and curly as you curl your hand around his sheath, stroking it along his unsheathing cock. He moans into your throat, biting up your neck to your jaw, and hungrily kisses you as you stroke him off. He tugs at the hem of your shirt, pulling back to drag it over your head, hands sliding down your chest to rub against the plane of your stomach, his slightly-pointed fingernails dipping under the waist of your pants.\n\nHis dick spurts pre all across the back of your hand, unsheathing in jackrabbit jerks, and he shoves his undershirt up and his pants down, cock jolting out into the open. His sheath is framed in a shaggy spray of tawny red-orange fur, cock itself blood-red as it juts up from his crotch, bloated and heavy. His balls loll beneath, bouncing off his thighs before drooping down lower, shaggy skin stretched out around a pair of heavy, fist-sized balls. His cock, only unsheathed a handspan, burbles out a messy cord of pre down his length, making the red flesh glimmer in the dim light. You curl your hand back around it with a wet squelch, oily heat smearing across your palm as you stroke, and he dips his hand into your pants, curling his hand around your erect cock, stroking you slowly as he pulls your pants down to mid-thigh, baring your cock as well.\n\nHe humps against you, cocks sliding together, his bestial length slowly lurching further and further from his fat sheath until it spans up his tightly-defined stomach, pointed tip digging against the underside of his pectorals. You play with the tip, a rubbery spur slick and wet with his rich, rank-smelling pre, squelching across your hand as you slop your fingers across the curve of his cocktip. Your own cock, big for a human but still //human//, butts up against the bloated middle of his shaft, loose flesh becoming slick and frictionless with his own copious pre. Your thrusts drag against each other, cocks slipping along a slimy trough pinned between you, his loose grip adding just enough friction to send sparks of pleasure rippling through you. His kisses you hungrily, fangs digging into your lips, tongue heavy as he shoves it into your mouth, gurgling out a feral growl as he humps you like an animal, cock gushing sloppy spurts of pre over your entire chest, drizzling down to coat his already-slathered shaft.\n\nHe makes a soft, needy sound when you break the kiss, mouth open, his lips just as bruised as your own. You give his cock a final stroke, from the tip all the down to the base, knot still a turgid lump within his sheath, and sink down to your knees before him, letting his cock smear all the way up your chest until it smacks you in the chin, lurching across your face to rest, heavily, right between your brows. Its smell is like getting punched in the face: rank and meaty, spicy, and so potent it stings when you inhale, making your eyes water and your mouth drool uncontrollably. He croons above you, face still half-obscured by the mask, but his mouth open, slavering as he stares down at you.\n\nYou lick across the underside of his cock, catching a slobbery mess of frothy, churned-up pre across your tongue, and struggle to swallow it, burning like liqueur down your throat. His cock twitches, smacking solidly across your face and spewing out a rope of pre that splatters across /%{your hair}%/your hair, oozing down over one eyebrow. You squint as you tilt your head up, slobbering all across the underside of his cock, sliding up his shaft until you can suck the tip into your mouth. You stroke the rest of his shaft, playing with his sheath, and he lets out a buzzing groan, sloppy strings of drool spilling over his lips to splatter down across your face, his bestial slobber just as acrid as his pre. He humps your face, hands gripping your head, less trying to fuck your mouth and more rubbing his cock all over it, working the slimy mess coating his shaft into your skin until you're glazed. Your lips are already bruised, stinging with bitemarks from his fangs, and they burn more as you open wide to catch his shaft between your lips, tongue lapping across his vividly-red flesh.\n\nYour cock, hard and still glazed with the same frothy mess coating his shaft, almost accidentally glances against his calf, grinding over the ankle of his boot, and a shockingly loud groan rips its way up your throat as you press down, cock dragging against the stiff leather. He obligingly shifts his leg, letting you hump against his leg. He's breathing hard, drool continually bubbling over his lips and spilling down all over you in stringy lines, drenching you in slobber and pre. He drags a hand across your face, obscuring your vision under a layer of slimy whorls, smeared up your cheeks and over your eyebrows, and then insistently shoves his fingers into your mouth, letting you lap up the frothy slurry. You groan around his fingers, throat buzzing, and that's what finally gets his knot to surface, pushing its way out of his sheath with a meaty //pop//, bulky and fist-sized even mostly soft. You suck across its curves, tongue tracing the gristled seams where its fat chambers meet with the rest of his shaft, and all the while his cock is jutting straight up, streamers of pre webbing across your /%{hair}%/hair, sluicing down your face, hanging in a line of jiggling cords across your jaw. His pre is almost jelly-like, churning up into a mess of greyish bubbles, coating your mouth and throat and making the act of swallowing strange and frictionless.\n\nYou worship his knot, hands sliding up to play with his shaft as you kiss and suck across its bulk, lips spreading across the dark red flesh with a //squelch//, pulling free with a lewd //pop//, leaving you to lap across the churned-up mess you've left behind, gulping down his frothy pre until his knot is dully shining. He groans, hand on the back of your head, guiding you on as you shove your tongue into his sheath or vainly strain your lips to suck his entire knot into your mouth.\n\nDizzily, you feel your own orgasm approach -- cock sliding across his legs, the drag of the heavy fabric and the slick slide of his leather boots -- and you moan, eyes shut, just focusing on the heavy weight of his cock across your face, of the throb of his knot like a heart, how you can feel his pulse through your lips, spread out across his bloated flesh. You let out a keening whine, almost sobbing as you hunch forward, cock slick with pre, each thrust bringing you closer, closer, closer, until you finally cum with a groan, painting messy streaks all up his pant leg as you grind your slick, slippery cockhead against a fold in the fabric.\n\nYou suckle across his knot the whole time, its weight a continual reminder, and the sight when you open your eyes -- squinting through one, with a web of slime dragging against your eyelashes -- makes your cock lurch and spurt again. The Beast-masked Hunter is above you, his knot in your mouth, lean muscular body wet with sweat and shaking from the force of his panting breaths. He's hunched forward, mouth open, fangs on display, drooling down across your body, webbing you together with streams of bestial slobber.\n\nHis knot throbs against your mouth, cock squirting pre onto the wall behind you, and he snarls deep in his chest as he draws back, thrusts forward, sliding his monstrous shaft across your bruised lips once, twice, a third time all the way down to the knot, before he lets out a howl and cums, cock erupting with the force of a cannon, spraying a sharp blast of cum point-blank against the wall behind you, making its backsplash spray everywhere. You curl your hands around his shaft, stroking it as you aim it down, making sure his next shots catch you full in the face, rubbery and thick burbling over your lips, swilling in the bottom of your mouth. You smear some of the mess down his shaft, squelching around his knot, and his snarl, never quite died-down, raises up into a buzzsaw roar as his bloated knot beats hard between your hands, almost too-hot to touch, disproportionately huge even on his bestial cock. He drenches your face in gush after gush of thick grey beast cum, tethering you solidly together with the finger-thick ropes clinging tight across your skin, again and again in slimy layers until the semisolid mass finally starts drooling down your face in murky sheets.\n\nHe drags his hands across your face on the way to wrapping them around his cock, all four of your hands together nearly enough to cover his shaft, and you provide a slick, clenching tunnel for him to fuck, spewing out his slimy load all over your face each time he bottoms out, making a drenched, dripping tunnel that spills cords of cum all down your forearms, dripping from your elbows.\n\nHis cock keeps spurting for minutes, pulse after pulse of cum splattering against you until you entirely lose the reflex to jerk back with each splatter, just letting him paint your face, your chest, the wall behind you, with cum. When his pulses finally slow, it turns into a soupy mess drooling out, pissing out the dregs of his load in a wet pile across the crown of your head, oozing down through your slathered hair to cut, slimy and wet, thought the half-dried mess.\n\nHe pulls back, cock still bobbing before him, and the ropes of slimy cum painted across your face are still tethered to him -- they crawl over your skin like enormous slugs, stretching out between you in fat, swaying strands.\n\n<<dialog "'s been a while. I really needed that." "Beast-Masked Hunter">>\\n\nHe looks down at you -- you assume, eyes caked with cum, knees squelching in the churned-up puddle he left behind. You wave a hand between you, dragging out the cords, some of them squirming off your face and slapping across your forearm. His grin is lopsided, showing off his fangs.\n\n<<dialog "I'll be sure to return the favor when I see you again." "Beast-Masked Hunter">>\\n\n<<autoresponse "I'll be waiting.">>\\n<<sex "beast-masked hunter" "oral" "top">>\\n\n[[=>|map]]
you uncover the secret stairway down.\n\n<<set $secretExits['furnace'] to true>>\n[[=>|map]]
you determine which doorway is used for the hidden connection.\n\n<<set $secretExits['greymold'] to true>>\n\n[[=>|map]]
you find the ladder up to an open window onto the roof.\n\n<<set $secretExits['knives'] to true>>\n[[=>|map]]
you slide open the window and step out onto the rooftop.\n\n<<set $secretExits['rooms_rent'] to true>>\n[[=>|map]]
<div class="npc_title"><<print npcs[$_conv].title>><<if getConvVar ("name")>> "<<print getConvVar ("name")>>"<<endif>></div>\\n/%<<if npcs[$_conv].qtag>><<nobr>><code>[debug npc info data dump:\n\n<<clues npcs[$_conv].qtag>>\n\n]</code><<endnobr>><<endif>>%/
<<display "intro blurb">>\nThe city fell only recently, but the rot has been bubbling beneath for years.\n\n<<set alterConvVar ("visited", x => !!x + 1)>>\\n<<nobr>>He's a youth, one of many working at the factory or foundry -- not older than twenty, but so long infected that he's grown up more beast than human. When he stands up his body unfurls, looming a good seven feet tall: a gaunt, lanky monster with clawed limbs, gleaming eyes, and a mouth full of fangs. But it's easy enough to forget that when he's slumped down, sprawled out, limbs tucked in, eyes shaded from the light, chatting like any other youth.\n\n<<if getConvVar ("mode") == "suspicious">>/% after getting him mad %/\nHe hears you coming and glowers, eyes catching the light and reflecting red-green.\n\n<<dialog "You again.">>\n<<dialog "What're you gonna bother me with this time?">>\n\n<<autoresponse "I just have a few more questions...">>\n\n<<else if getConvVar ("mode") == "chaser reject">>/% after he's rejected you %/\n[...]\n\n<<else if getConvVar ("mode") == "rejected">>/% after you've rejected him %/\n[...]\n\n<<else if getConvVar ("mode") == "fucked">>/% after you've fucked %/\n[...]\n\n<<else if !getConvVar ("met")>>/% first time %/\n Only the way he tilts his head side-to-side, like a confused dog, when he hears you approach gives him away.\n\n<<dialog "What do you want?">>\n\n<<autoresponse "I just have a few questions for you...">>\n\nHe glowers.\n\n<<dialog "About what?">>\n\n<<autoresponse "I'm looking for the beast-masked hunter.">>\n\nHe lets out a baying cackle of a laugh.\n\n<<dialog "You and everybody else. You think I know anything? Go ahead, ask away.">>\n\n<<set alterConvVar ("met", x => true)>>\n<<else>> /% revisit without other state change %/\nHe hears you coming and tips his head to watch you approach.\n\n<<dialog "You again.">>\n<<dialog "How's your hunt going?">>\n\n<<autoresponse "No luck so far.">>\n\nHe snorts.\n\n<<dialog "Wouldn't expect any.">>\n\n<<autoresponse "I just have a few more questions...">>\n/% heat up from talking to him again, but only the once %/\n<<endif>>\n\n<<endnobr>>
<<set $interrupt to true>>\\n<<autoresponse "I think that's all for now.">>\n\n<<if getConvVar ("mode") == "wary" && getConvVar ("visited") > 1>>\n<<dialog "Wait a second.">>\n\nYou look back at him; you haven't yet gotten up.\n\n<<dialog "If you're gonna be around here stirring up trouble, you might as well make yourself useful.">>\n\nHis face breaks open in a craggy leer.\n\n<<dialog "You wanna go up to my room?">>\n\nHis friends hoot a little, his interest transferred over to them. Their eyes turn towards you.\n\n<div class="responses"><<plegend>>\\n<<response "Sure, we can fuck." "tf factoryworker room fuck intro">>\n<<response "Not interested." "tf factoryworker reject">>\n</div>\n<<else>>\nHe gives you a lazy, ironic salute as you go.\n\n[[=>|map]]\n<<endif>>
<<set alterConvVar ("mode", x => "rejected")>>\nHis face collapses into an angry scowl.\n\n<<dialog "Fine, be like that. You don't know what you're missing out on.">>\n\nYou leave.\n\n[[=>|map]]
<<set $interrupt to true; reshow("asktable")>>\\nHis leer grows until his bared teeth take up most of his face.\n\n<<dialog "Good.">>\n\nHe gets to his feet, towering over you, and curls one clawed hand around your wrist, guiding you with him. He turns around, walking backwards towards the stairs as he pulls you along; this just makes his gait even more unnatural. He lopes.\n\n<<dialog "You're not too bad-looking. Your face is gonna look real good when I got my knot sunk in your ass.">>\n\n[[=>|tfed factoryworker bed fuck]]
He takes you up the stairs and down the hallway to the room with the "<<clue "II" "npc_alexi" "alexi staying in room #2 at last hope hall">>" placard. He unlocks the door and pulls you inside.\n\nHis rooms are fairly bare: a spill of clothes from the open wardrobe, and some papers on the desk, and a bed with crumpled sheets. There's a small window beside the bed that looks out over the lower roof. <<if getConvVar ("name")>>Alexi<<else>>The factoryworker<<endif>> looms in front of you, pushing you back against the door as he closes it.\n\nHe stoops down, pushing his mouth against your neck, and snuffles across your skin, lips parting to let his fangs rasp across your throat.\n\n<<dialog "Gonna enjoy wrecking you.">>\n\nHe snarls across your throat, his breath catching when you tilt you head up to give him better access. His tongue unfurls from his mouth, heavy and wet digging into the flesh of your throat as he laves across your skin, a hungry buzz building in his throat. His hands curl around your forearms, pinning you back against the door with his wiry, inhuman beast's strength. He practically envelops you in his lanky body, his long limbs folding down to wrap around you: his knees bracketing your thighs, elbows pressed to your shoulders, forearms long spars down your sides. He fists a hand into the fabric of his shirt and tears it apart with a single jerk, sending scraps of fabric draping across his chest as he tosses it aside. You take the opportunity to strip out of your shirt and toss it aside before he can tear it apart too, leaving you both bare-chested.\n\n<<if getConvVar ("name")>>Alexi's<<else>>His<<endif>> core looks human: body lean and muscular, tightly toned, but still human, with only a scarce dusting of grey-blond hair across his chest and down his stomach. Only two nipples. His sheath makes an unmistakable bulge in his trousers, blocky and heavy when he grinds your bodies together, filling the air with the rank smell of beast. His claws slide across your chest, feeling the slope of your muscles, your nipples, pebbled in the air. He scrapes the edge of his claw over your peaked nipple, and you let out a sharp breath at the sensation; he lets out a bestial snarl, pulling you tight against his chest, and ruts his hips, sliding the fattening mound of his sheath against your stomach, cock stiff as it smacks against you. You slide your hands down, fingers curling on the waist of his pants, thumbs sliding across the rope tie of his belt, back and forth over the pale hair of his stomach. His muscles convulse under your touch, his entire body spasming, and he snarls again, cock pulsing and staining the front of his pants with his thick, slimy precum.\n\nHe practically hurls you across the room: twisting fast and pushing you backwards, your feet stumbling on the floorboards until you hit the bedframe and topple backwards. You tug on the laces of your pants, letting them sag lower on your hips. He looms over you: eyes gleaming, lips pulled back, slavering, his cock stabbing at the front of his pants. He tears them off just as easily, leaving only a wet shred of fabric draped over his cock until he plucks that off too, leaving him totally naked. His forearms and calves are the most transformed -- long animal limbs, coated in stiff white-grey fur that tapers out up his biceps and thighs. And then, framed neatly in a tangle of hair between his thighs, is his beast cock: lopsided balls each the size of a fist, with the bone-white spar of his cock pushing out from his leathery sheath. He lurches forward, pinning you down, drooling across your face and neck, and his cock unsheathes wetly between you, wetly burbling up across your stomach. Only the tip is white; it mottles pale pink past that, with only a few white splotches past that. He gets worked-up easily; his knot grinds against your thigh, still beneath his sheath, but as he keeps humping against you it steadily works its way up, more and more of his cock unsheathing in fits and jerks until his knot pops out into the open, flesh ash pink with deep, dark purple veins mazed across its surface, winding their way down to the root of his cock.\n\nYou rut together like animals: his thrusts work down your pants until your cock grinds against the stiff fur of his sheath. You wrap your hands across his back, groaning into his shoulder as he snarls and drools, tongue flopping from his mouth and smearing frothy drool all up your neck and the side of your face. His cock is a brutal skewer: long and thin -- not quite as thick as your wrist -- with a sharply-pointed tip that shudders and ripples. He drools out thin, acrid precum across your chest, dousing you with the rank, animal smell, hungrily chewing across your neck as he humps you in wet strokes, lathering up his pre into waves of opaque sludge.\n\nHe pulls back, cock webbed to your stomach with thick, grimy lines of pre, slithering over your skin as it pulses. He strokes himself, catching the slathered mess across one hand and then smearing it back across your chest.\n\n<<dialog "I'm gonna fuck you hard.">>\n\nHe raises your left leg -- you kick your foot out of your pants, now pooled at your ankles -- and licks a slobbery stripe from your knee across your calves, matting down your hair. He uses his other hand to slide between your thighs, claws prickling across the curve of your ass, to rub across your asshole. His fingers are still slick with pre, and he slides his claws back and forth, smearing it all against your hole. He draws back, cock an enormous poker hanging off his body, and he stabs forward, tip glancing off your balls, sliding between your thighs, skewing against your cheeks. He lets out another burst of stringy pre, glazing your skin with his rank slime, and he fucks through that, churning it up into grimy dollops, pushing the mess into your asshole. He fucks you open, cocktip stabbing inside and immediately pulling back, spreading you enough for the next gush of pre to splatter shockingly deep inside you: wet and hot, slick oozing out over your asshole, and he fucks in again, gushing inside you.\n\nYou let out a hoarse groan, and he takes both your legs in hand and folds you double, getting a clear view of your ass as he sinks his bestial cock into you. He mounts the bed, one clawed paw digging into the frame for leverage, body a mass of twisted limbs above you, mouth split open into an impossibly-wide grin as he bears down harder. He snarls from deep in his chest, cock squelching and slurping inside you as he carves your asshole open, and you groan and clasp at his forearms, going bug-eyed as he sinks into your guts. He croons, gurgling around his lolling tongue as he stares down at you, watching your face change as he stabs deeper, pulls back, stirs his cock around inside. Your guts warp around his shaft, clinging tight, each thrust knocking the breath from your lungs, and you whine, asshole clenching and grasping his shaft as he slides deeper. Pre gurgles inside you, squirting out around his pumping shaft.\n\nYou arch your back and push down, opening yourself so that his next thrust slides deeper than either of you were expecting: nearly the full length of his cock stabbing deep into your guts, making your stomach swell out with the length of his cock, his knot smacking hard against your cheeks as he almost bottoms out inside you. He groans, hunching over you, humping you like a dog: cock ripping out and plunging back in, knot spanking your cheeks in an obscene wet tattoo. He's so deep that when he spurts pre you only feel it as a diffuse pressure, wet and heavy slickly pouring inside you, churning up with his thrusts into a sloppy lather. Cords of slimy pre web across his knot, squelching against your dripping ass as he mashes down and then spooling out again when he draws back.\n\nHe grinds his knot against your hole, pressing its beating swell against your bloated lips in an obscene kiss. Pre burbles out of you around the huge crest, drizzling down the slathered crack of your ass, and he flexes, watching as his cock lurches in your guts, sending the long bulge of his cock twisting inside you. He beats his knot against your hole, watching as you whine and squirm, asshole flexing open in shuddering jerks. When he pulls back you feel hollowed out: guts empty, hole gaping, only to be filled aching when he shoves back in. The heavy, curving walls of his knot slop against your gaping hole, halfway slipping in only to be yanked back out again, over and over until your hole is a shuddering, pulsing mess, vainly trying to clench around his knot as he batters it into you. He finally leans down, tongue slobbering all across your face, shoving into your open mouth, and bears down hard: claws tense on your arm, cock jerking hard inside you, as his knot scrapes its way through your tight passage, popping inside you with a sudden lurch and a blossoming of heat. You moan around his tongue, gurgling as you gulp down his frothy drool, and he settles atop you, sinking his knot into your guts. His sheath grinds against your broken hole, leathery skin folding up into a dense mass, and he cums almost as an afterthought: knot hardening, cock twitching rhythmically. He floods your guts, his cum gurgling deeper into your plugged guts, and he sloppily makes out with you, licking your face, slavering across your jaw, as he stirs his knot around inside you. You groan, straightening to lessen the pressure against your flooded guts, and the movement sends his load swirling deeper, audibly sloshing as heat blooms deep inside you. You huff for breath around his tongue, whining into his mouth, and he purrs in response, chest buzzing as he dumps his load inside you, pulse after pulse flooding you until you ache with fullness.\n\nEventually he slumps to the side, enveloping you in his limbs, keeping you seated tight on his pulsing knot as his cock starts steadily pouring into you, pissing out beast cum into your guts. His balls squirm against the backs of your thighs. Your stomach swells slowly, cum gurgling deeper, flooding you until you look pregnant: belly enormous, its heat radating through your entire body, making you flushed and sweaty. His claw strokes over your stomach, digging in hard enough to knock the breath from your lungs, and he laughs lowly against your shoulder as he makes a game of it: palm outstretched across your great wobbling belly, grinding down hard, his cock pulsing sharply inside you every time you gasp and wheeze.\n\nThe dusk light has faded considerably by the time his knot starts to soften. Cum leaks around the loosening seal, squirting out into his sheets when he bears down, and he kneads your belly with both hands, forcing sloppy squirts of cum out around his turgid knot, grinding down so deeply you think you'll have big handprint bruises all across your stomach. He wrenches his knot out with an explosion of watery cum, only to grind it back against your bruised, broken hole, forcing it back inside with a wrench that makes your entire body spasm. He sluggishly knotfucks you with his shrinking knot, stemming the flow of cum only to pop his slippery knot out again with an enormous gush, over and over until you can see the shifting swell of his cock inside you again. His sheets are soaked and dripping, mattress sodden, by the time he pulls himself entirely free, leaving your broken, cratered hole only sluggishly oozing a sloppy waterfall of churned-up beast cum.\n\nYou take gasping gulps of breath, entire body drenched in sweat. He idly strokes his cock, milking his knot, burbling out a slimy mess of greyish cum across your side.\n\n<<dialog "That was real nice, but you should probably get going now.">>\n\nHe nuzzles you from behind.\n\n<<dialog "You're a good lay.">>\n\nYou drag yourself to your feet -- cum winding its way down your thighs, hole feeling like an enormous bruise between your cheeks, swollen and scraping over itself -- and try to take a few wobbly steps. You clean yourself up as well as you can manage with his sheets; he doesn't seem to mind the mess: he stays sprawled out on his ruined mattress, body slathered with his load.\n\nYou get dressed, hissing in pain when you have to bend down to pull your pants up. Your skin is still tacky with cum, fresh cum still leaking from your wrecked ass, as you pull your clothes on and stagger to the door. Outside, you have to lean against the wall and take a few deep, gasping breaths before you can keep walking.\n<<sex "young factoryworker" "anal" "top">>\\n\n[[=>|map]]
/% what... is your name %/\\n<<set alterConvVar ("name", x => "Alexi")>>\\nHe languidly extends a hand to shake. His forearm is a beast's claw: grey-furred, with thick black claws.\n\n<<dialog "Alexi.">>\n\nHis grip is brutal. He could probably rip your arm off, and he's making sure you know that.\n\nYou give him your name.
/% what... is your occupation %/\\n<div class="npc"><<dlegend>>What's it your business? I work over at the <<clue "foundry" "npc_alexi" "works at foundry">>, 's no secret.</div>
<<autoresponse "Which foundry?">>\n\n<div class="npc"><<clue "Hawes" "npc_alexi" "works at hawes standard metal foundry">>. Practically the only one in the city still running.</div>
<<set $interrupt to true>>\n<<set alterConvVar ("mode", x => "chaser reject")>>\n[...]\n\nHe laughs at you.\n\n> Idiot. Beast-chaser after somebody's knot, huh? Pathetic.\n\n[...]\n\n[[=>|map]]
<<nobr>>\n<<dialog "Yeah, of course. Everybody has.">>\n\nHe leans forward, gleaming yellow eyes on you.\n\n<<dialog "You're looking for him, right? What you looking for somebody like that for?">>\n\n<div class="responses"><<plegend>>\\n<<response "I suppose I'm just curious." "tfed factoryworker response curious">>\n<<response "Information pays." "tfed factoryworker response information">>\n<<response "It's not important." "tfed factoryworker response important">>\n</div>\n<<endnobr>>
<<nobr>>\nHe looks over you appraisingly.\n\n<<dialog "That it does.">>\n<<dialog "Lemme tell you something: you find something out, I know some people who'd be interested in paying good money to hear it. Just something to think about.">>\n/% bumps mood %/\n<<endnobr>>
<<nobr>>\nHe snorts.\n\n<<dialog "You know what they say about curiosity. Get too close and you're gonna get into things you wish you hadn't.">>\n\nHe bares his teeth at you, showing off a mouth of craggy fangs.\n\n<<dialog "Just a friendly warning.">>\n<<endnobr>>
<<nobr>>\nHis eyes gleam.\n\n<<dialog "Cocky little fucker, aren't you? Don't think you get to decide what's important.">>\n<<dialog "I'll give you a friendly warning: this is none of your business. Get into it and you might not like what happens.">>\n\n<<if getConvVar ("mode") == "wary">><<set alterConvVar ("mode", x => "suspicious")>><<endif>>\n/% + heat up %/\n<<endnobr>>
<div class="npc"><<dlegend>>Heard of him? I knew him! And that's how <<clue "he" "bmh" "mikhael" "tfed young factoryworker he">> goes, huh, murdered <<clue "in the night" "bmh" "in the night" "tfed factoryworker in the night">>.</div>
He jolts forward.\n<<dialog "Of course! That fucking hunter! He wasn't content with picking off small fry anymore; he wanted to land a big catch. It's gonna be his last; everyone will come down hard. There's no escaping, not after this.">>
<<autoresponse "He?">>\n<div class="npc"><<dlegend>><<clue "Mikhael" "bmh" "mikhael">>, the guy he killed. Big beast guy, couldn't miss him.</div>
<<autoresponse "In the night?">>\nHe sneers at you.\n<div class="npc"><<dlegend>>What, you're trying an //investigation//? It was last night, <<clue "just after second bell" "bmh" "after second bell">>. Later when <<clue "we" "bmh" "factoryworker we">> found the body.</div>\n<<grantTopic "last night, after second bell" "times">>
<<dialog "If I knew him, he'd be dead.">>\n/% / <<display "tfed young factoryworker angry ask know">> %/
<<dialog "Fuck off; it's none of your business who I know. Or //knew//.">>\n<<if getConvVar ("mode") == "wary">><<set alterConvVar ("mode", x => "suspicious")>><<endif>>\n/% (+ heat up) %/
<div class="npc"><<dlegend>>He was killed down in the undercity, at <<clue "Where Rats Drowned" "bmh" "rats location">>. <<clue "We've" "bmh" "factoryworker we">> dragged the body away already.</div>
<<dialog "If I saw him, I'd've killed him.">>\n/% / <<display "tfed young factoryworker angry ask know">> %/
<div class="npc"><<dlegend>>//Seen// him? yeah, I've seen him. His body was <<clue "torn up all over" "npc_alexi" "..." "tfed factoryworker torn up">>. Clawed apart by that fucking hunter.</div>
<<autoresponse "Torn up all over?">>\n\n<div class="npc"><<dlegend>>The hunter got him <<clue "in the back" "bmh" "attacked from the back">>. Shredded him up good.</div>
<<dialog "It's none of your fucking business, where I was or wasn't.">>
{asking again or after the other personal-knowledge questions :}\n<div class="npc">do i gotta repeat myself? i'd've killed him, if i knew where to get at him</div>\n<<if getConvVar ("mode") == "wary">><<set alterConvVar ("mode", x => "suspicious")>><<endif>>\n/% + heat up %/
<<display "intro blurb">>\nA dockworker who shows signs of infection.\n\nLike many dockworkers, he wears only rough cloth pants and a pair of worn sandals. He's thickly muscled from laboring, and his upper body is coated in a layer of coarse dark hair. His face looks like a wolf's head that's been squashed in: his nose is giant, sharply crooked like it's been broken; his lips are tinged a dark purple-brown, like a dog's blackened lips. When he speaks, or pants for breath, he reveals a mouth crammed full of too many sharp teeth. He's got a shaggy mane of a beard that extends up to cover nearly his entire face: coming up high over his cheeks, with his hairline extending down nearly to his heavy brows.\n\nHe looks over at you.<<nobr>>\n<<if getConvVar ("fucked")>>/% !! repeated visit, after having sex with him: %/\n<<dialog "You again.">>\nHe leers, slinging the barrel over his shoulder down on its pallet with a loud //crash//. He gropes his crotch with his newly-free hand, outlining the bloated mound of his sheath./%otherwise: He turns to face you, and his sheath is mounded up against the front of his pants, cocktip wetly oozing pre through the coarse fabric. He gives it a squeeze, milking out a darkening stain.%/\n\n<div class="npc"><<dlegend>>Back for <<clue "more" "npc_idriss" "..." "bestial dockworker sex followup">>, huh?</div>\n\nYou awkwardly clear your throat.\n<<autoresponse "I just have a few more things to ask...">>\n/%<<response "yeah please fuck my throat">>%/\n<<else if !getConvVar("met")>>/% !!first time: %/\n\n<<dialog "What?">>\n\n<<autoresponse "I got some questions, if you have the time.">>\n\nHe snorts, making a half-mocking laugh.\n<<dialog "You wanna play detective? Sure, ask away.">>\n\n<<else>>/% !!repeated visit, without fucking him: %/\n<<dialog "You again. How's your investigation going, huh?">>\n\n<<autoresponse "As well as can be expected.">>\n<<autoresponse "I just have a few more things to ask...">>\n<<endif>>\n<<set alterConvVar ("met", x => true)>>\n<<endnobr>>
<<set $interrupt to true>>\\n<<dialog "What, that all the questions you got?">>\n/%if you've raised heat by >2 pts in this convo: %/\\n<<autoresponse "Yeah, that's all for now.">>\nYou head off.\n[[=>|map]]\n/%\notherwise:\nhe gives you a clear once-over, eyes gleaming green-red when they catch the light, mouth opening in a bestial leer.\n\n<div class="responses"><<response "Yeah, that's all for now">>\n<<response "actually i got one more question; you wanna fuck around?">></div>\n%/
<<autoresponse "Uh, //are// you up for more?">>\n\n<<if $bmh_active>>\\nHe lets out a laugh, not unkindly.\n\n<<dialog "Wish I could, but I really gotta finish unloading the ship. Don't got endless time to fuck around.">>\n<<else>>\\nHe lets out a laugh, looking you up and down.\n\n<<if $sex['bestial dockworkertop']>><<dialog "You know, I get off shift in just a few minutes. Sit tight, don't worry, I'll get you some dick soon.">>\n<div class="responses"><<plegend>>\\n<<response "Yeah, sounds good." "bestial dockworker after shift accept">>\n<<response "Better not." "bestial dockworker after shift reject">>\n</div>\n<<else>><<dialog "You know, I get off shift in just a few minutes. You good to wait? We could go back to my place.">>\n<div class="responses"><<plegend>>\\n<<response "Yeah, sounds good." "bestial dockworker after shift accept">>\n<<response "Better not." "bestial dockworker after shift reject">>\n</div>\n<<endif>>\n<<endif>>
He shrugs.\n\n<<dialog "Your loss. You got any actual questions to ask me?">>
<<nobr>>His lips peel back into a hungry grin.\n\n<<dialog "Good.">>\n\nHe gives his sheath a squeeze through his pants.\n\n<<if $sex['bestial dockworkersheathfuck']>><<dialog "Sheath is still fuckin' sore from the pounding you gave it.">>\n<<else>><<dialog "It'll just be a bit.">>\n<<endif>>\n\n<<endnobr>>He turns away, still a few barrels on the boat left to stack onto pallets. You sit down on an unused ledge in the undercity wall and watch his muscles shift and bunch as he hauls them out, two-by-two, giant muscular shoulders clenched as his arms flex over them. His sheath isn't the most obvious thing, but sometimes his stride catches the fold of his pants just right and flattens, outlining the heavy swell.\n\nEventually he finishes unloading things, right around when somebody who's probably his manager shows up; maybe some other shift relief. Guild contact, maybe. <<clue "Older, grizzled, better dressed but not anything that would be out of place on the docks" "npc_idriss" "boss appearance">>. They talk for a bit, too far away for you to pick anything up aside from their voices. <<if getConvVar ("name")>>Idriss<<else>>The dockworker<<endif>> points at the pallets. It takes a few minutes before he ambles down to meet you.\n<<dialog "Ready?">>\n<<autoresponse "Yeah.">>\nYou set off up the street.\n\n[[=>|bestial dockworker walk to apartment]]
<<set alterConvVar ("name", x => "Idriss")>>\\n<div class="npc"><<dlegend>>My name? I'm <<clue "Idriss" "npc_idriss" "idriss" "bestial dockworker name indepth">>.</div>
<<nobr>>\n<<autoresponse "That's your name?">>\n\n<<dialog "Yeah, I'm sure that's my name. You're taking your detective game serious, huh?">>\n<<endnobr>>
<div class="npc"><<dlegend>>Yeah, of course. Happened <<clue "right here" "npc_idriss" "..." "bestial dockworker rats">>.</div>
<<nobr>>\n<<autoresponse "//Right// here?">>\n\n<div class="npc"><<dlegend>>Well, over at <<clue "Where Rats Drowned" "bmh" "rats location">>, just across the bridge and up the bank.</div>\n<<endnobr>>
<<dialog "Everybody says they have, right? Seeing figures perched on the lanterns, or glowing eyes up in the cavern wings. Never seen anything like that, myself.">>
He snorts.\n\n<<dialog "What? Of course not. You think anybody who //does// know him is gonna admit to it like that?">>\n/% + heat up %/
He lets out a laugh.\n\n<<dialog "What, you think I know?">>\n/% + heat up %/
<div class="npc"><<dlegend>>He was killed over at <<clue "Where Rats Drowned" "bmh" "rats location">>, but the <<clue "Kane Street gang" "bmh" "kane st gang has body">> dragged him off before sunup.</div>
<div class="npc"><<dlegend>>What, after he got himself killed? Nah. Heard he was <<clue "all clawed up" "bmh" "body torn up">>, though.</div>
/% where were you... last night, after second bell %/\\n<<dialog "Working here. I heard some yelling further upriver, but figured it was just the usual drunkards arguing, until it got real loud. I saw there was a crowd gathering, but I didn't think that much of it until I heard the news from people leaving.">>\n\n<<autoresponse "Did you see anything unusual?">>\n\n<div class="npc"><<dlegend>>What, aside from the crowd? <<clue "No, nothing" "bmh" "dockworker saw nothing">>.</div>
<<nobr>>\nHe has a giant barrel slung over his shoulder. He rolls his shoulders, shifting its weight to his forearms, and lets it down on a pallet already stacked with a half-dozen identical barrels.\n\n<<dialog "I'm a dockworker.">>\n\nHe says it like it's obvious. It is. But...\n\n<<autoresponse "Paid by individual boatmasters, or by the harbormaster's guild?">>\n\nHe snorts.\n\n<div class="npc"><<dlegend>><<clue "Harbormaster" "npc_idriss" "works for harbormaster guild" "bestial dockworker harbormaster">>. Got a charter on all the <<clue "regular shipments" "npc_idriss" "regular shipments" "bestial dockworker regular shipments">>. Don't do <<clue "many" "npc_idriss" "odd jobs" "bestial dockworker odd jobs">> odd jobs.</div>\n<<endnobr>>
<<autoresponse "You got your guild credentials on you?">>\nHe lets out a bark of a laugh.\n<<dialog "What, you serious? You think you're some kinda bureaucrat? That's rich.">>
<<autoresponse "What are the regular shipments you handle?">>\n<div class="npc"><<dlegend>>You real <<clue "interested" "npc_idriss" "flirt" "bestial dockworker interested">> in the docks?</div>\n<<dialog "It's been lean since the beast plague got going. Fewer ships in, lots fewer ships out. The undercity wharf handles the big imports -- ore, alchemy, spices -- and a few of the exports, marble mostly.">>
<<autoresponse "You said you don't do //many// odd jobs. You do some?">>\nHe gives you a cockeyed grin.\n<div class="npc"><<dlegend>>Most everybody does //<<clue "something" "npc_idriss" "flirt" "bestial dockworker something">>//, down in the undercity. It'd be more of a surprise if I didn't.</div>
<<autoresponse "I'm interested in //something//, that's for sure.">>\nHe gives you a once-over, lips peeling back to make a crooked leer.\n<div class="npc"><<dlegend>>Detective, you said you were. You sure you're not looking for <<clue "something else" "npc_idriss" "proposition" "bestial dockworker proposition">>?</div>
<<autoresponse "Oh yeah? And what kind of somethings do you do?">>\n\nHe gives you a once-over, lips peeling back to make a crooked leer.\n<div class="npc"><<dlegend>>Detective, you said you were. You sure you're not looking for <<clue "something else" "npc_idriss" "proposition" "bestial dockworker proposition">>?</div>
<<autoresponse "What else can you give me?">>\n\nHis leer pulls open into a grin.\n<<dialog "Well if it isn't my lucky day. Yeah, I think I got something for you.">>\nHe gropes his crotch, looking up the wharf for anybody else.\n<div class="responses"><<plegend>>\\n<<response "Yeah, that's what I'm looking for." "bestial dockworker blow behind barrels">>\n<<response "I think there's been a misunderstanding..." "bestial dockworker whoops">>\n</div>
He straightens up.\n<<dialog "//Was// there?">>\n<<dialog "Well, you know where to find me if you change your mind.">>
<<dialog "How's your little beast hunt going?">>\n\nfound him\nhaven't found him
<<set $interrupt to true; reshow("asktable")>>\\n<<dialog "Good, because I'm real interested in giving you a look.">>\n\nHe tugs on the waist of his pants, outlining the bulk of what's unmistakably a fat sheath, and then pulls his belt loose, giving you a flash of hairy skin. He slides his fingers beneath, curly hair crinkling under his fingertips, and his sheath lurches as he digs into the soft, heavy flesh.\n\nHe tugs his pants open, baring himself to you. His sheath lolls out, fat and heavy between his thighs, its round lip bulging and heavy, the flesh within darker, shining wetly in the undercity light. His balls are large enough to catch the fabric of his pants, draping across them in folds that do little to hide their bulk, hanging most of the way to his knees. The coarse hair across his chest and stomach thickens into a pelt, framing his sheath with a spray of tightly-coiled fur, bursting out in tufts between his fingers as he jacks off his sheath, letting you see the swelling bulk of his cock, still sunk entirely within.\n<<set alterConvVar ("fucked", x => true)>>\\n\n<div class="responses"><<plegend>>\\n[[Can't wait to get that in my mouth...|bestial dockworker barrels bj full scene]]\n[[You wanna see mine?|bestial dockworker barrels frot jo]]\n</div>
He leers at you, fingers squeezing around his sheath; the soft flesh, coated in whorls of hair, bulges through between his broad fingers.\n\\n<<dialog "Yeah, lemme see.">>\\n\\nYou grope your own crotch, cock hardening under the pressure of your hand; under the sight of his fattening sheath, beads of pre starting to ooze from the spreading tip. You tug open the laces with your thumb, letting you pull the fabric away from your crotch. Your cock lurches, thickening, and you heft it out with the heel of your hand, letting your cock and balls flop out in the open. Not as big as a beast cock, but definitely not nothing.\n\n<<if getConvVar ("name")>>Idriss<<else>>He<<endif>> groans, stroking his own sheath as you tug on your cock. It responds to his gaze, flushing and filling out quick, thickening until it's a solid handful, blunt cocktip pushing free from your foreskin as you stroke your shaft.\n\nHis bestial cocktip pushes out into the open: flesh leeched of all color from the murky blue lights of the undercity, making his shaft appear an inky purple, with pitch-black veins. It shines in the dim light, already slick and slimy. He milks out a cloudy droplet of pre from his sloped cocktip, smearing it across his gleaming cockhead with one clawed finger, and then reaches out, slick fingers curling soft around your cockhead, sliding frictionless along the underside of your cockhead. You let out an almost-soundless //wuhh// of an exhale, rocking forward gently, wet sounds coming from his fingers as he cups your cock in his hand, stroking it slowly.\n\nYou reach for his dick, mirroring the motion -- his animal cock a sharp prong jutting from his crotch, more still unsheathing, and he jerks back, looking up and down the dock.\n\\n<<dialog "Wait. Not here.">>\\n\\nHis gaze roves, from the docked ship to the bays between the vaults of the riverside path, and, specifically, at a stacked pallet with a haphazard line of barrels next to it, forming a barrier half a person tall, recessed from the dock and mostly out of view. He jerks his head to the side:\n\\n<<dialog "Behind those barrels.">>\\n\\nYou both tug your pants up, cocks mostly-hidden for all that they're still extremely obvious as you sidle your way over to the barrels. When you get there, he pulls you close, one hand pressing hot against your hip. He pins your cocks tight against each other, grinding down hard until you both groan. He lets his pants drop, half-unsheathed cock clashing against your own hard shaft, and reaches out, loosely grasping your shaft, giving it a fresh coating of slimy pre, and this time he makes no objection when you curl one hand -- and then the other, as he keeps unsheathing -- around his cock. His flesh is slick, glazed in his slimy pre so that it's almost frictionless, and beneath the skin you can feel the flesh of his cock shudder and pulse, puffy and turgid, still firming up even with the immense, inhuman bulk of his beast cock already on display.\n\nHis cock shudders in your hand, leaking out a long, filmy line of cloudy pre that spills down your front, and you take a half-step back and yank your shirt over your head, tossing it to the side, letting his next wet burble of pre spill down your bare chest. He grins at you, raising a hand to smear the mess into your skin, glazing your skin until the string is a messy smear, dully shiny, across your stomach.\n\nYou stroke him, hands squelching as you work across his bestial flesh. A stringy mess of slime drizzles down the underside of his shaft, burbling from the pulsing tip and forming watery cords dripping down between you. Your cockhead bumps against his shaft, catching a mess of pre across its blunt flare, and he catches the webbed pre across his fingers, smearing them across your shaft and working them into your skin. He shifts his grip, callused fingerpads digging into your frenulum, playing with the ridge of your cockhead, sliding up to grind his palm against your bare cockhead, back and forth until you hiss and whine, having to jerk back from overstimulation. He grins at you, cockeyed, and curls his fingers around your cockhead, milking out a gush of pre, mixing with the slimy mess already smeared across his hand.\n\nHis sheath bulges, the fat mound of his knot starting to surface: big and bulky, even soft, and under your fingers you can feel the leathery flesh of his sheath straining, sheath pouting open. He groans, eyes fluttering closed, and he leans in, lips dragging across your jaw as he ruts his cock against your own. His hand clenches around your shaft, palm squelching as you fuck up through his tight, slick grip, and he brushes his knuckles across his shaft, letting the watery mess of his continually-flowing pre burble down his fingers, making his touches almost frictionless, just slick motion across your cock.\n\n/%[TODO/FIXME: i don't think this works b/c it doesn't have a containing div. add an empty one or smth]%/\\n<<response "Play with his sheath and work a finger or two inside." "bestial dockworker dock sheathfuck">>\n<<response "Press your cocks together and pin them between your chests while you kiss." "bestial dockworker dock frot">>
You stroke him off, fingers sliding from the sharp angles of the bestial tip, down its bloated, oval shaft, to the gristled ridge where it pulls back to a circle, just above his knot. His knot is only just-barely sunk into his knot, and when you stroke down to the base his sheath is slick and lax enough for you to slide a finger in the gap, immersing your fingers in the slick, pulsing wetness of his sheath, pinned against his curving knot. He lets out a shaky snarl, knot beating against your fingers, and you pull back with a wet squelch.\n\nYou cup his sheath with both hands, rhythmically squeezing his burgeoning knot. His sheath shifts, slipping over the internal flesh as his knot surfaces, stretching his sheath taut, a crescent of its shape visible through the wide lip before it pushes out into the open with an obscene wet squelch. A shudder runs through his entire body, shoulders twisting, lips curling back, as his knot lurches out.\n\nOld slimy pre burbles out around the gaped opening of his sheath as it flexes and clenches; the loose flesh furrows as it pulls tight up against the underside of his knot. You smear your fingers through the mess, building up a dripping scum sluicing down your hand from his glazed knot, and then you slide lower, fingertips playing with the lip of his sheath, still slack enough for you to stroke off the root of his cock: hand cupping his knot, fingers sunk inside his sheath, curling around the thin, gristled root of his beast cock. He lets out a shaky groan, cock shuddering, and this deep you can feel his internal muscles clench, shifting the flesh of his sheath, tugging the root of his cock up. He hisses, the huge club of his cock shuddering between your bodies as you massage his cockroot, and he lets out shaky, huffing breaths from the overstimulation.\n\nYou sloppily fingerfuck his sheath. Pre pours down his shaft and soaks your knuckles, immersing your fingers in stringy slime as he fills and then overflows his sheath, bloated and heavy from the sheer mass of pre burbling inside, thick and slimy as you churn it up.\n\nYou cock shudders, knocking against his sheath, and you rut it up along the underside of his shaft until it's glazed and dripping too, tethered to his cock with finger-thick cords of churned-up pre.\n\\n<<autoresponse "What do you say?">>\\n\\nYou angle your cock down, cockhead knocking against his knot and then abruptly slipping down, butting against the lip of his flooded sheath. You grind down, the short, stiff hairs at the very rim of his sheath sharply intense across your bare cockhead.\n\\n<<autoresponse "Think you can take it?">>\\n\\nYou punctuate it by tapping your fingers against the root of his shaft, a good few inches up inside his sheath. He lets out a groan, hips hunching forward, fucking his cock up your chest.\n\\n<<dialog "You're a lot, you know? But, fuck, go for it.">>\\n\\nHe sags back, half-sitting on the barrels, ass digging into the rim, his heavy balls knocking against the sealed wood, and his sheath already a sloppy, fucked-open mess. He milks his sheath, squirting out a thick, creamy mess of churned-up pre across your cock, and you give yourself a stroke, lathering your shaft, before you press forward between his legs. Your blunt cockhead digs into the plush lip of his sheath, and he groans, legs shifting wider, hips hunching forward, sheath swallowing down half your cock with an obscene wet //glurp//. Fat globs of pre burble out from the stretched rim of his sheath, splattering down on the pallet below you with sharp cracks.\n\nHe's incredibly hot inside, hot and wet and tight. You experimentally thrust, cock sliding along the thin spar of his cockroot, and his sheath warps and shudders, pinned back into a fat mass of folded flesh, knot looking almost black in the blue light as it gets more and more flushed.\n\nYou fuck his sheath while jerking him off: hands keeping his cock anchored between you, while you work his sheath open into a wide, gushing oval. Each thrust sounds obscene: a wet squelch, popping and gurgling, thick sludgy glurping noises echoing off the undercity walls. It's a good thing the dock is pretty deserted; it's not at all hidden. His knot throbs, feverishly hot against your belly when you sink in to the root, cockhead mashing against some rubbery internal wall as his sheath narrows and twists inside his body cavity. <<if getConvVar ("name")>>Idriss<<else>>He<<endif>> lets out a shaky yelp, rasping for breath against your neck, and you slide a slime-coated hand down to cup his bulging sheath, milking it around your cock as you rut inside him, balls clapping against the base of his sheath.\n\\n<<dialog "Oh fuck.">>\\n\\nHis voice is cracked and shaky, breath hitched. His mouth is open, breath whistling, and he sharply inhales.\n\\n<<dialog "Oh //fuck!//">>\\n\\nHe cums all up and down your front in a sudden explosion of slime. His cock erupts, knot beating hard, spraying rank, grey beast cum from your chest up, splattering in a messy arch over your head, painting your /%{hair}%/hair and dripping down your face, oozing down the back of your neck. You groan, leaning in -- pinning his cock tight between your chests, where the next shot sprays out in all directions -- and fuck him harder, the wet squelch of you mating his sheath turning into a continual burble, pre squirting out and pouring down your thighs, dripping from your balls in fat dollops. He grabs a hand and pins it around his knot, and you squeeze down, pulling out another immense blast of grimy beast cum all across your chest.\n\nYou cum in his sheath, the sucking wet heat bringing you off. His breath on your neck, the pulsing of his cock between you, the heat of his body against the chill of the undercity... you close you eyes and groan, arching up into his bruised sheath, legs trembling as you blow your load inside him, mixing with the churned-up slime inside and burbling out as a thick froth. You fuck him through your orgasm, pulse after pulse of cum spraying deep inside him as you bite at his jaw, the both of you panting and sweaty.\n\nHe wipes a tendril of cum off your jaw, tongue following after to lap up the slimy mess. /%His tongue rasps across your stubble.%/\n\\n<<dialog "Sorry.">>\\n\\nHe says it against your throat, voice buzzing into your chest, muffled as he laps up the mess of his load. Your front -- his front too -- is plastered with cum, his chest hair soaked to his skin in dark curls. His cock shudders between you, pulsing out a fat glug of cum against your chin.\n\nYou stir your cock inside his sheath.\n\\n<<autoresponse "'s fine.">>\\n\\nYou pull free, the ridge of your cockhead scraping all along his bruised inner sheath and forcing out an immense mass of churned-up, jelly-like cum. Your cock smacks against your knot, both turgid and heavy, still weakly pulsing.\n\\n<<autoresponse "That was real good.">>\\n\\nHe grins and reaches down, adjusting his sheath.\n\\n<<dialog "It better be. I'm gonna be so fucking sore for the rest of my shift.">>\\n\\nHis sheath is visibly swollen, soft flesh bruised up into big puffy slabs, still bruising up more. It's remarkably huge pinned there behind his knot, leathery flesh taut and straining, hot and smooth.\n\nYou milk out the dregs of each others' loads, and he scrapes an insulated tarpaulin across your chest, picking up some amount of the mess. You still look like you got a facial from a beast, though. Your cock is damp and sticky when you stuff it back into your pants, and <<if getConvVar ("name")>>Idriss is<<else>>he's<<endif>> just as much a mess, big globs of cum stuck in his beard, a big glazed smear all across his chest, drying and pinning his hair down.\n\\n<<autoresponse "I'll, uh, see you around.">>\n\\nHe gives you a cockeyed leer.\n\\n<<dialog "Yeah, be seeing you.">>\\n\nHe pulls his pants up. You watch him shoulder another barrel, swollen sheath making a giant tent, practically outlined.\n<<sex "bestial dockworker" "sheathfuck" "bottom">>\\n\n[[=>|map]]
You press your bodies together tightly. His muscles shift against your chest, and his cock lurches between you, spitting out wet, slobbery cords of pre between your pecs. Your cock spans up against the underside of his shaft, rutting across his glazed flesh.\n\nHe groans, taking your head in one broad hand and pressing your lips together, tongue hungrily lapping at your teeth as he deepens the kiss. You hump against each other, cocks skidding up your bodies, wetly squelching as his pre smears all across your fronts. His cock shudders, surging fatter, flesh going from spongy and turgid to iron-hard in slow, rippling pulses. It butts against you, bulky and heavy, massive when drags against your muscles, coating them in a fresh layer of watery slime. <<if getConvVar ("name")>>Idriss<<else>>He<<endif>> moans into your mouth as you hump against him, cock skidding up the length of his shaft, churning up the watery slime into thick, squelching cords of opaque greyish sludge.\n\nHis beast cock shudders, the dimple along the top flexing and pulsing, bulging wider when he gushes out a mess of acrid slime. Its smell suffuses the air, thickening as he works his lathered pre into your skin, rank and spicy. He groans into your mouth, fangs nipping at your lips, and his knot bursts out into the open, a dense, rubbery ball pinned between your hips, slopping across your cock in a way that makes you grind down harder, fucking along the groove where his knot meets his shaft, shakily gasping into his mouth.\n\nYou stroke each other off, arms pinned against your body. He gropes your cock, letting you gush pre against his palm, broad hands curling around your sac and tugging on your balls as you arch up into his fist, fucking his hand, cockhead knocking against his bloating knot. You find a rhythm: chests pressed together, arms pumping, hips thrusting your cocks together. His knot is a hard swell against your belly, rising and falling with his thrusts; it slowly engorges, becoming bulkier and harder, a solid lump that smacks against your thighs when he hunches forward. The pressure of the contact races through your body, hot sparks as your cock drags against his own, the buzz when you slip off the side of his knot and scrape across his hairy belly, humping his hip.\n\nHis cock shudders between you, hot lines splattering across your cheeks -- his cock gushes out a mess of cloudy grey pre, forceful enough to splatter between your faces, dribbling down his forehead and burbling over your spit-shined lips.\n\\n<<dialog "Fuck, I'm close. You want me to cum on you?">>\\n\\n<div class="responses"><<plegend>>\\n<<response "Yeah c'mon, cover me in your load" "bestial dockworker frot cumshot">>\n<<response "Nah, don't cum on me" "bestial dockworker knot jo">>\n</div>
He groans at your response, hungrily biting across your jaw, cock audibly slopping as he fucks it between your pecs.\n\\n<<dialog "Fuck yeah, gonna make a big mess. Hope you're ready.">>\\n\\nYou cup his shaft with both hands, giving him grasping tunnel to fuck through. You stroke down, letting him smack his knot against the heel of your hand. Each thrust is punctuated with a sharp //crack// of his knot hitting your hand with enough force that you'll probably be bruised afterwards. He grunts and groans into your mouth, slobbering as he grabs your hips and pins you tight, bending you backwards as he fucks his cock all up your chest, splashing your faces with spurt after spurt of rank, bitter pre.\n\nHis panting goes hoarse: sucking in hair in guttural, open-mouthed snorts, snarling an inch from your face. His cock shudders hard, flexing sharply between you: once, twice, and then he cums with a bestial snarl, first shot glancing off your chin and splattering between you in a mess of foamy droplets, hot and dripping everywhere. He croons, his bulging cockhole flexed wide, and his entire body jolts with each pulse of his cock. His cock erupts, finger-thick cords of grimy grey cum spraying all across your front, hosing you down in wet, dribbling pulses. He fucks your front in time, cock cutting through the mess dripping down your stomach: pulsing cockhole pissing out cum across your stomach, only for the next jolt to smack, stinging, against your jaw when he fucks his cock up your chest, sharp tip digging into the underside of your mouth.\n\nYou cum all over his dick. You grind back against him, meeting him thrust for thrust. Your cock is drenched in the mess pouring down your front, and the sloppy heat adds an extra drag when you pin your cock against his sheath and rut. You cum with a groan, spurting up his cock, across his belly, and he groans, sloppily kissing you, feeding you his own load as it splatters against both your faces. He sucks on your tongue, whining and whimpering as you squeeze down on his knot, glazing the both of you in his spurts of murky beast cum.\n\nBy the time he finishes, there's a puddle beneath you, and you're both dripping from head to toe, big slimy runnels pouring down your chest and stomach, branching at your thighs to wind down in a messy delta all the way down to your feet. He ruts against you, breathing hard, the contact squelching and spitting -- frothy cords of churned-up cum stretch out between you, drooping down under their own weight and eventually smearing back into the mess painted across your bodies.\n\nHe lets out a shaky exhale, reaching down to pin your cocks together, milking them both.\n\\n<<dialog "Fuck. That was real nice.">>\\n\\nHe reaches up and catches a string of cum slowly stretching out from your jawline, smearing it all down your chest and tracing a line through the sloppy mess. He leans back, letting the mess stretch out and then stream down your chests. Cum pours across his drenched sheath and splatters to the ground beneath you. It starts to cool in the undercity air, getting clammy and thick, and you scrape a hand across your chest and fling off the handful of sludge, splattering it across the floor. He lets out a soft bark of a laugh.\n\n<<if getConvVar ("name")>>Idriss<<else>>He<<endif>> helps clean you off with an insulated tarpaulin, vaguely absorbant as he scrapes it down your front, toweling you and him both off. /%Your hair is dripping, sudden blots of cum spilling down your forehead, across your cheeks.%/\n\\n<<dialog "I did say it'd be messy.">>\\n\\nEventually you're both not dripping wet -- his hair is all matted to his chest, and your skin is dully glimmering, the thin glaze of cum dried into a flaking crust. He gives you a grin, reaching out to cup your half-hard dick through your pants.\n\\n<<dialog "See you around, huh?">>\\n\\n<<autoresponse "Yeah, see you around.">>\\n\\nYou head out.\n<<sex "bestial dockworker" "frot" "switch">>\\n\n[[=>|map]]
He lets out a ragged sigh of a laugh and slides his hands down his cock, one cupped around his knot, the other clasping around his sheath. He angles his cock down, smearing it down your chest, glancing off your own hard cock, and you take a half-step back, letting it lurch down between your legs, grinding against your balls. His spurts wetly splatter on the stones behind you, a drizzle of pre pouring down his angled tip and spilling between your feet.\n\nYou rut your cock along the top of his shaft, thighs digging into the tip of his cock. He groans, taking a step forward to close the distance, fucking his cock between your thighs as your cockhead bashes against his knot. He pre smears across your skin, lubing the sloppy channel as you pin his shaft between your legs. His cock is rock hard, slick and heavy digging into the meat of your thighs, and he rests his head on your shoulder, huffing and panting as he fucks your thighs, grinding down until his knot throbs against your balls, a giant hard mound of flesh pinned between your bodies.\n\\n<<dialog "Fuck, gonna cum.">>\\n\\nHis cock jerks up hard. It swells all along its length, knot thundering fatter and fatter as it swells to its full size, and <<if getConvVar ("name")>>Idriss<<else>>he<<endif>> lets out a deep, guttural groan as he erupts, cock kicking up against you each time he fires. There's a half-second before the first splatter sounds behind you, cum nearly hitting the far wall. He sloppily fucks your thighs, spurting tip gushing cum in a watery mess behind you. You hump his stomach, cockhead dragging through the coarse, matted hair across his muscled stomach, and you let out a groan, pressing tight against his broad chest, riding his cock -- //riding// his cock, pinning its bucking jolts between your thighs -- as you spray your own load up across his chest.\n\\n<<dialog "Cum on my knot.">>\\n\\nYou pull back, angling your cock down, and splatter it point-blank with your next shots, your milky cum smearing across the gleaming swell of his knot, flushed almost black in the dim light. He groans, hands working the mess into his flesh, the slimy slurry of his pre and your cum squelching under his palms. You ride out your orgasm, grinding down against his shaft so it digs into the root of your cock, behind your balls, and gush out a few messy splatters of cum curving down over the bloated bulk of his knot. His spurts even out into a continual flow, pissing out watery beast cum onto the soaked stones behind you, and you rut along his shaft, glazing your softening cock in his pre.\n\nHis knot, never properly latched in place, softens fast, and you swing off his cock. Your thighs ache, phantom-sensation of him still fucking them buzzing across your slimy skin. Actually looking behind you, he's made an immense mess: a glossy river of thin, watery beast cum, slowly flowing down to meet with the dockside puddles.\n\nHe hauls an insulated blanket off the pallet stack and hands it over, letting you wipe down your chest and thighs, cleaning off the worst of the mess, or at least smearing it down to the point where it dries into a flaking crust quick.\n\nHe gives your cock a tug, nubby claw sliding up to dig into the flesh of your inner thigh.\n\\n<<dialog "That was real nice.">>\\n\\nYou answer the motion, tugging on his sheath and half-sunken knot, helping it sink back inside him with a messy //slurp//.\n\\n<<autoresponse "Yeah, real good.">>\\n\\n<div class="npc">See you around, huh?</div>\n\\n<<autoresponse "Yeah, see you around.">>\\n\\nYou head out.\n<<sex "bestial dockworker" "thighfuck" "top">>\\n\n[[=>|map]]
He leers at you, fingers squeezing around his sheath. His bestial cocktip pushes out into the open: flesh leeched of all color from the murky blue lights of the undercity, making his shaft appear an inky purple, with pitch-black veins. It shines in the dim light, already slick and slimy. He milks out a cloudy droplet of pre from his sloped cocktip, smearing it across his gleaming cockhead with one clawed finger.\n\n<<dialog "I got some time before my shift's up; you can blow me if you want.">>\n\nHis gaze roves, from the docked ship to the bays between the vaults of the riverside path, and, specifically, at a stacked pallet with a haphazard line of barrels next to it, forming a barrier half a person tall. He jerks his head to the side:\n\n<<dialog "Behind those barrels.">>\n\nHe's close behind you as you walk towards the barrels, one hand furled into his loose pants, pinning them to the front of his sheath. The heat of his body radiates against your back. You reach the pallet and run your hand over the oaken barrels, and he presses against your back, hands on your hips, sliding up your chest, and he presses a hungry kiss against the side of your neck. You turn around, and he slides even closer, knee pressing between your legs, mouth scraping up the line of your jaw to nip at your lips; you can feel, for a moment, the uneven line of his craggy fangs.\n\n<<dialog "Get on your knees.">>\n\nHe says it against your teeth, breath puffing across your face. You drop to your knees. Yes, at this height you're entirely hidden from the rest of the pier. His hands drop to his waist, letting his pants pooling at his ankles, leaving him entirely naked.\n\nHis chest is thickly muscled, broad and hairy, but his lower half is even more transformed. His coarse hair thickens into shaggy fur, entirely coating his legs, and his feet are starting to warp and arch up into a beast's paws.\n\nHis cock, already jutting from his crotch as a heavy, fat prong, shudders and pushes out further under your gaze, more and more of the animalistic shaft spilling out, already slick and shining. He leans back, hands braced on the barrels behind him, and the sheer weight of his cock points it down, aimed at your face. He cants his hips and his balls lurch over to slap against his thigh, the nearly fist-sized orbs lolling against his hairy skin. \n\nYou lean in, face nestled against his thigh, and lap across his sheath, tongue catching a sliver of his raw cockflesh. He tastes bestial, animal: rank and meaty, a little acrid. He lets out a chuffing breath, a snarl catching in his throat, and you look up at him as you lick up his cock, lips pursing around the sharp tip.\n\nMuscles across his stomach clench and ripple under his coarse hair, and his cock flexes in its sheath, slowly spilling out into the open. You lap at the tip as it pushes out, eyes focused down at the increasing length. It's obscene, a grotesque beast's shaft hanging off his body. The sound of it resounds off the walls: gurgling and slurping, sloppy and wet as it spills out into the open, mottled flesh coated in his own rank issue. It twitches, the smooth, sleek flesh becoming marred by corded veins, each heartbeat sending them racing up his shaft in lightning-bolt patterns before they subside, making his entire shaft pulsate.\n\nHe lets out a breath like a snarl, a hot cloud in the chill air, and leans in, his cock stabbing against the back of your throat, stretching your lips wide. He looms over you, his altered, inhuman cock pulsing, and a burst of hot, rank fluid burbles across your tongue, heavy and greasy, cutting out the wet, musty smell of the undercity and replacing it with the thick, meaty taste of his cock.\n\nHe cups your head with one clawed hand, fingers curling around your chin. His cock visibly throbs, veins fluttering to the surface in time with his heartbeat, and beneath his sheath his balls roil and squirm, the flesh of his sac tensing and releasing, sending his balls lurching across his hairy thighs. You drag your tongue across the underside of his shaft, licking up to the pointed tip and then curling your tongue around the gnarled divot of his cocktube, bobbing on the final few inches of his cock. He groans, rewarding you with another spurt of heavy, rank precome, and you swallow it down. Its slimy texture sticks in your throat, slippery and strange when you swallow again.\n\nFully unsheathed, his cock juts out from his crotch as an enormous spar, easily as long as your forearm from the elbow to your fingertips. His flesh is spongy, still-soft around the rigid core. Suckling on the tip, you wrap your hands around it with a squelch, softly stroking to evenly coat it with a sheen of spit and pre. He croons, cockflesh thickening in your grasp, and you blow the tip of his dick, feeling him firm up in little lurches and ticks until his cock is an iron-hard span of heated flesh, almost no give at all when you squeeze down. Your slippery fingers slurp through the lather you've worked up, coating his shaft in an oily froth that smears across the backs of your hands and oozes down your wrists in thick dollops of cream. He grunts, cock erratically spurting hot gushes of pre in the back of your mouth, each one a sharp burst of rank, acrid flavor. Your lips ache from slurping over the thickness of his shaft, bruised and swollen, sensation prickling across them when you pull back and pant across the tip, letting him drizzle out his pre over your tongue, drooling out of your mouth in slobbery strands between your breathless gulps. Ooze drools down your front, staining your shirt, and he lets out a bark of a laugh.\n\n<<dialog "Gonna want to take that off; it's gonna get a lot messier.">>\n\nYou pull back, hands leaving dark smears on your shirt as you haul it over your head and toss it aside. The cool air of the undercity prickles across your skin, raising goosebumps, but then he presses back in close, the wash of heat off his body enveloping you.\n\n<<dialog "Too bad we can't lay you out here, so I can properly fuck your throat.">>\n\nHe punctuates it with a slap against the surface of the barrels. It's true, this isn't a good position to try deepthroating anything: his sheath points straight out, tethered to his stomach so it can't hang any lower; and he's got a bone in his dick, so it sure as hell can't bend. You're only sucking on the first few inches and stroking the rest; that's enough to dig into the back of your throat, but after that there's no way you're getting the right angle to sink any deeper.\n\\n/%branch: yr like, there's an empty pallet, and you lie on yr back there where he fucks yr face & manages to fit most of his cock down yr throat. but that needs a good 'no deepthroat' branch\n\n%/\\n\nYou look up at him, cocktip resting in your open mouth, and he groans and aims himself up, cocktip digging into the corner of your mouth, sending his next gush of pre spraying up across your cheeks, over one eye. You squint it half-closed, letting yourself sag forward so you can slurp across a few inches of his cock.\n\nHis knot pops free of his sheath with a slobbery pop, splattering thickened internal slime against your forearms. There's a ribbon of slime hanging from the underside of his shaft, slapping against your fingers and smearing back out as you stroke, and now you splatter the entire mess across the bulk of his turgid knot, fingers kneading the bulb of flesh, working his bestial fluids into his skin. He groans, hips lurching forward, fucking a few inches of cock into your mouth, and you groan around it.\n\n<<dialog "Lemme pop a knot in your hands.">>\n\nHe snarls, fucking his cock past your bruised lips, and you groan and slide your other hand down, both hands cradling his fattening knot. His shaft darkens as it goes down, purple tinging to a pitch black, all the red leeched out from the bluish lights, until his knot is a perfect glossy black, bashing against your fingers. He grabs your head, starting to properly fuck your face, jabbing his sharp cocktip against the back of your throat again and again, coaxing out wet, slobbery gags.\n\nHe leers down at you, eyes gleaming in the darkness, the muscles across his chest and stomach rippling, hair soaked to his skin in clumps from sweat. His knot throbs between your hands, squelching obscenely as he fucks your fists, and you alternate between cupping down hard and letting it slip out of your grasp, huge knot knocking against your hands before you let it back in. Every time you squeeze down, holding him tight, the whole length of his cock ripples and shudders, and he spits out thicker, heavier bursts of pre into your flooded mouth. With him facefucking you, you're beyond swallowing it all: you just gulp when you can, between breaths, and let the rest burble out over your swollen lips, smearing all down your bare chest. He groans, catching a jiggling strand hanging from your chin and smearing it all up the side of your face, palm squelching against your cheek.\n\nHis hips snap forward, burying more of his cock in your throat -- you gurgle around it, knifetip point jabbing against soft tissue -- and he groans deep and low, sloppy wet noises coming from your fucked-open throat as he picks up the pace: hands bracketing your face, your elbows resting on his thighs as you keep your hold on his swelling knot. Your fingers spread apart, slices of cockflesh bulging through as his knot inflates fully, becoming a burning coal between your fingers. He lets out a guttural roar, maybe loud enough to attract notice, and his cock erupts against your throat, instantly filling your mouth with a wash of hot, rank beast cum. You choke, cum burning up through your sinuses and drooling from your nose, and he lurches forward, thrusts jabbing into your mouth once, twice, before he pulls out too far and slips free, totally drenching your face in huge squirting gushes of thick slime, spraying into /% {your hair} %/your hair and oozing down your face before he can grind a hand against his shaft and slip it back inside your open, drooling mouth.\n\nThe first few pulses are thick, tarry: a dense, opaque slime, murky grey. It sticks to your teeth and skin, catching in blobs down your /% {beard/skin} %/skin, and then -- as he sags back against the barrels above you with a long sigh -- you can feel it change, thinning out, the sharp spurts turning into a continual flow punctuated with even pulses. Watery ooze floods your mouth, coating your throat, washing through the mess of thicker sludge all down your front, making it all pour down to your crotch.\n\nYou're hard too. You've known this for a while but you've been more interested in sucking dick. Still, cumming all down your front, <<if getConvVar ("name")>>Idriss<<else>>he<<endif>> notices and presses his calf against your tented cock, skewed up across your hip.\n\n<<dialog "You wanna cum too?">>\n\nHe grinds his leg against your crotch to punctuate it, and you moan around his dick and nod, humping his leg. His knot is still throbbing hard in your hands, in time with the pulses overflowing your mouth, and you close your eyes and grind against him, focusing on the heat of his body; the muscled line of his calf; the rank taste of his cum; the sharp pants of his breath as you keep suckling on his spurting cock. The hard, implacable weight of his knot.\n\nYou cum with a groan, gurgling wetly around his still-spurting cock, and shoot into your pants, humping up against his leg, rolling your hips as you ride it out. His pant leg is soaked in a mixture of yours and his loads, and the wet drag of the fabric is enough stimulation to keep you grinding against him, even after you finish. He's still cumming. It takes a long time for him to stop. His balls lurch, pulled up under his sheath into a gigantic block bigger than both your fists, and you can lean forward and press down with your forearms, feeling the strange internal muscles rhythmically fire, keeping him pumping and pumping and pumping.\n\nBy the time he's actually done, you're a drenched mess: face coated, /%{beard soaked to your skin/jaw and chin a slathered mess}%/jaw and chin a slathered mess, a slimy waterfall spilling down the center of your chest. His knot softens, and he finally pulls free, leaving your fingers aching from being clenched for so long. You gasp for breath, letting excess cum spill from your open mouth, stomach sloshing from the immense amount you managed to swallow.\n\n<<dialog "Lemme get you cleaned off.">>\n\nHe leans to the side, pulling a folded insulating tarpaulin off the pallet, and scrubs it down your front. You help, /%{trying to wipe the mess free of your beard/dragging it down your face}%/scrubbing down your face and saturating it with his cum too; you don't know how effective it is at actually cleaning you. By the time you stand up, your skin is at least dry, if crusted and flaky. There's not much you can do about the squelching mess you shot into your pants.\n\nYou wipe your hands off on your pants. <<if getConvVar ("name")>>Idriss'<<else>>His<<endif>> cock is still unsheathed, weakly twitching as he drools out the last of his load onto the stone pier, and slowly, sluggishly, his shrinking knot slurps back inside his sheath, letting it push back over his shaft. He widens his stance a little as his still-turgid cock sinks back inside him.\n\nHe gives you a cockeyed grin and pulls you to your feet, tossing you your shirt as he pulls his pants back up and pulls his cloth belt taut.\n\n<<dialog "That was a real nice relief. Sure hope your investigation leads you back here.">>\n\nHe gives you a wink, tying his belt with a snap. His sheath, still-swollen, makes a fat tent, and there's more than a few flecks of cum soaked into his pant legs.\n\n<<dialog "See you around.">>\n<<sex "bestial dockworker" "oral" "top">>\\n\n[[=>|map]]
<<nobr>>\nYou walk up the slope from the wharf and head up the street, along the southern bank of the river.\n<<set $adj to $sex['bestial dockworkeroraltop'] ? "cute" : "hot">>\n\n<<if $sex['bestial dockworkersheathfuck']>>\nHe gropes his sheath and gives it a squeeze.\n\n<<dialog "Hurts to fuckin' walk; you really did a number on me.">>\n\nYou look over; before you can say anything he continues:\n\n<<dialog "Not complaining, though.">>\n\n<<autoresponse "Well, good.">>\n<<autoresponse "Think you can take it again?">>\n\nHe lets out a //whuff//.\n\n<<dialog "That might be a litle much. Y'know, you can fuck me if you want. A lot less tight than a fuckin' sheath, that's for sure.">>\n\n<<display "bestial dockworker walk intermezzo">>\n<<else if $sex['bestial dockworkerfrot']>>\nHe looks over at you and his lips break apart into a craggy grin. He sniffs, snuffling almost doglike.\n\n<<dialog "Can still smell my load on you, you know.">>\n\nHe leans in, scenting across your neck.\n\n<<dialog "Smells good.">>\n\nHis body presses against yours, briefly, just enough time for the heat to register; for you to feel the heavy bulk of his sheath press against your stomach.\n\n<<display "bestial dockworker walk intermezzo">>\n<<else if $sex['bestial dockworkerthighfuck']>>\n<<dialog "Was half-hard the rest of my shift, y'know, thinking about it. gonna be nice to get off again; maybe make more of a mess.">>\n\nHe leers at you, panting. His hands brush against his crotch, outlining the bulk of his cock, maybe already swollen fatter.\n\n<<display "bestial dockworker walk intermezzo">>\n<<else if $sex['bestial dockworkeroraltop']>>\n<<dialog "Think you can take more of my cock?">>\n\nHe pants, groping his sheath, fingers digging hard into the fabric.\n\n<<dialog "I'm definitely thinking about it. Be nice to get my knot smacking your face.">>\n\nHe leans in, slinging one arm over your shoulder, and curls his fights across your jaw, claws digging into your lips.\n\n<<dialog "Mouth looks a little too tight for me to pop a knot in. Yet.">>\n\n<<display "bestial dockworker walk intermezzo">>\n<<else>>\n<<set error ("bad value for bestial dockworker sex case; no fallback")>>\n<<endif>>\n<<endnobr>>
<<nobr>>\n<<if !getConvVar ("name")>>\nHe holds out a hand to shake.\n\n<<set alterConvVar ("name", x => "Idriss")>>\n<div class="npc"><<dlegend>>I'm <<clue "Idriss" "npc_idriss" "idriss">>, by the way. Probably should know that.</div>\n\nYou give him your name.\n<<endif>>\n\n<div class="npc"><<dlegend>>Don't usually fuck around on the job, but, well, you're pretty <<print $adj>>. Glad I did.</div>\n\nYou pass further upstream, where the market thins out some. His presses against your side turn into pressure pushing closer, and you pull him back up against a wall. He brackets you in place with his hands, eyes gleaming when they catch the light, and he hungrily presses close, biting across your jaw before kissing you open-mouthed, sucking your lower lip into his mouth to dig his teeth into it.\n\nAfterward, he licks his spit-shined lips, a buzzing growl building in his chest. His sheath jabs against your hip. The tip is pushing free from his sheath, stuck to the fabric and soaking it dark. Excess pre is already seeping through the saturated fabric. You press a hand down against in, letting him groan as he humps your hand.\n\n<<dialog "Let's get to my place.">>\n\nHis voice is rough, catching in his throat and coming out lower. He jerks his head.\n\n<<dialog "Just a block away.">>\n\nThe walls of the undercity pull back at the residential zone, opening up into a mess of mazy flights up, with steep steps and narrow paths connecting to a hive of doorways. He takes you up one, only pulling away from you to fumble a chunky key out of his pocket before opening the door at <<clue "Evening Moon #G7" "npc_idriss" "idriss lives at evening moon #g7">>.<<endnobr>>\n\n[[=>|bestial dockworker apartment]]
He pulls you into the surprisingly well-lit apartment and presses you against a wall, buzzsaw growl in his chest turning into grunting moans as he bites his way across your jaw, humping your side like a dog.\n[you make out more and grope each others dicks etc before stripping off]\n\n[frot / blow him / he blows you choice here]\n<div class="responses"><<plegend>>\\n<<response "[frot choice]" "bestial dockworker apartment frot">>\n<<response "[blow him]" "bestial dockworker apartment blow him">>\n<<if $sex['bestialdockworkeroraltop'>>\\n<<response "How about you return the favor and suck on my dick some?" "bestial dockworker apartment blow you">>\n<<else>>\\n<<response "[he blows you]" "bestial dockworker apartment blow you">>\n<<endif>>\\n</div>
[you frot for a while]\n\n<<display "bestial dockworker apartment merge">>
[ you blow him for a while ]\n\n<<display "bestial dockworker apartment merge">>
[ he blows you for a while ]\n\n<<display "bestial dockworker apartment merge">>
[ he's like, well, you wanna...? ]\n\n<div class="responses"><<plegend>>\\n<<response "[yeah i'll fuck you]" "bestial dockworker apartment fuck him">>\n<<response "[fuck me]" "bestial dockworker apartment fucks you">>\n</div>
[you fuck him]\n\n<<display "bestial dockworker apartment close">>
[he fucks you]\n\n<<display "bestial dockworker apartment close">>
[ you lay in his bed afterward all smeared w/ cum. he flops over and is like, fuck i'm beat. ]\n\n[[=>|map]]
<<display "intro blurb">>\nA night watchman with an oil lamp clutched in his left hand.\n\nHe's visibly transformed: he's wearing a guard's coat that no longer fits the bestial contortions of his body; his chest -- his ribcage -- bulges out from his body, shaped like it fits an entirely different kind of being, and his coat hangs open, impossible to button across the protruding bulk of his animal chest. Because of the sheer stretch of his ribs, his stomach looks sunken and gaunt: taut skin tightly drawn from his bottom ribs down to his hips.\n\nHe's covered his face with a scarecrow's burlap-sack head as a mask, with stray handfuls of straw bulging out its shape, making his head look lopsided. All you can make from his facial features is that he's unshaven: a shaggy beard erupts out beneath the sack, joining with the fur growing across his neck and fanning out over his shoulders, giving the appearance of wearing a fur mantle.\n\nMaybe he does it to hide his transformed face, or maybe because his animal eyes and nose can no longer tolerate the light and scented fumes from his watchman's lamp.\n\nBefore the plague, the watchmen were conscripted from the local homeowners by the local constable for sessions of two weeks, but with no officers left to appoint a constabulary, much less any constables left to select men from the wards, there are only haggard collections of volunteer militiamen, haphazardly walking their rounds.\n\nHe looks at you, blocking his route, and hoists his lamp higher:\n<<dialog "Well? What're you up to?">>\n<<autoresponse "I'm looking into the latest killing of the beast-masked hunter.">>\n<<dialog "Oh, //are// you now? That's dangerous work to get yourself involved in, you know.">>\n<<autoresponse "If I could just ask you a few questions...">>
/% what... is your name %/\\n<<set alterConvVar ("name", x => "Finn Suggins")>>\\n<div class="npc"><<dlegend>>My name? <<clue "Finn Suggins" "npc_suggins" "finn suggins">>, at your service.</div>\n\nHe extends the hand that's not holding the lamp. He's growing thick yellowed claws. You shake hands.
/% what... is your occupation %/\\n<div class="npc"><<dlegend>><<clue "Now" "npc_suggins" "..." "transformed watchman days">>? I'm on <<clue "watch" "npc_suggins" "..." "transformed watchman watching for">>!</div>
<<autoresponse "Do you have some other job during the day?">>\n<<dialog "Yes, yeah, of course; walking the rounds doesn't exactly pay.">>\nHe shifts his weight, bringing his lamp closer to your face, close enough the flame burns hot.\n<<dialog "I don't think that's any of your business, though.">>
/% have you heard of... the beast-masked hunter %/\\n<<dialog "Yeah, who hasn't. Why are you asking?">>\n<<autoresponse "I'm looking for him.">>\n<<dialog "Oh, are you now. Only for good purposes, I'm sure.">>\n<div class="npc"><<dlegend>>He killed <<clue "Mikhael the Crusher" "bmh" "mikhael" "transformed watchman mikhael">> last night, and <<clue "good riddance" "npc_suggins" "critical of kane st kings" "transformed watchman critical">>. Without him, the Kane St. Kings are gonna have a harder time shaking everybody down for protection.</div>
/% have you heard of... the beast-masked hunter's latest victim %/\\n<div class="npc"><<dlegend>><<clue "Mikhael the Crusher" "bmh" "mikhael" "transformed watchman mikhael">>? Certainly. He was an enforcer for the local gang, the Kane St. Kings. Without him, the Kane St. Kings are gonna have a harder time shaking everybody down for protection.</div>
/% have you heard of... the latest killing by the beast-masked hunter %/\\n<div class="npc"><<dlegend>>Grisly business, that. The gangs will be at each others throats now; more than they were before. Would you believe it; I <<clue "heard it happen" "npc_suggins" "..." "transformed watchman last night second bell">>!</div>
/% where is... the beast-masked hunter's latest victim %/\n<div class="npc"><<dlegend>>He died over at <<clue "Where Rats Drown" "bmh" "rats location">>; the Kane St. Kings dragged his corpse back to their hideout this morning. They say <<clue "you can gain a beast's power if you eat its flesh" "bmh" "beast cannibalism">>; I'm sure they're having a feast as we speak.</div>
<<autoresponse "You seem pretty critical of them">>\n<<dialog "Of course! Who wouldn't be? They're all just thugs with delusions of grandeur. The city went to hell after the Royals took city hall, and all the gangs are jockeying for which neighborhoods they can run as fiefdoms. It's a disgrace.">>
<div class="npc"><<dlegend>>//Know// him? No, I've never had any dealings with him, nor heard of anyone who's ever met with him. I suppose I <<clue "heard him" "bmh" "watchman heard altercation">>, <<clue "last night" "bmh" "in the night" "transformed watchman where last night">>.</div>\n/% + heat up? %/
<<autoresponse "Where were you, when you heard this?">>\n<div class="npc"><<dlegend>>At that point in my rounds, I was just approaching <<clue "The Dark Fountain" "bmh" "altercation near dark fountain">></div>
<div class="npc"><<dlegend>>Seen him? No. Seems like no one has, just shadows and silhouettes. I suppose I <<clue "heard him" "bmh" "watchman heard altercation" "transformed watchman mikhael chase">>, <<clue "last night" "bmh" "in the night">>.</div>
<div class="npc"><dlegend>>Oh, I'd certainly had my dealings with the Kane St. Kings, but never anything in-person. Aside from seeing <<clue "Mikhael's" "bmh" "mikhael" "transformed watchman mikhael">> corpse, that is.</div>
<<autoresponse "Mikhael?">>\n<<dialog "Yes, Mikhael the Crusher. The main enforcer of the Kane St. Kings. A brutal murderer, who's now found a fitting end.">>\nHe lets out a wracking laugh.\n<<dialog "A proper beast can kill an army, but, well, the Kane St. Kings are without their beast now.">>
<div class="npc"><<dlegend>>I was at <<clue "The Dark Fountain" "bmh" "altercation near dark fountain">>, walking the watch. I must have just missed them; I heard <<clue "running and yelling" "bmh" "watchman heard altercation" "transformed watchman mikhael chase">> and then howling and fighting. It only took moments to arrive <<clue "on the scene" "npc_suggins" "..." "transformed watchman scene">>, but it was already over. Mikhael was killed in an instant. That kind of noise draws a crowd fast, but even so, no one could say they saw anything. Everyone's saying it was the beast-masked hunter, but if so, it's the <<clue "first time the hunter has killed like this" "bmh" "unusual behavior with body" "transformed watchman killed unusual">>: attacked quick, and left the body where it lay.</div>
<<autoresponse "Running and yelling?">>\n<div class="npc"><<dlegend>>Roaring, the sounds of a fight; the usual. I thought it could've just been drunkards, or an assault -- a normal assault, I mean -- until I saw <<clue "the body" "npc_suggins" "..." "transformed watchman the body">>.</div>
<<autoresponse "On the scene?">>\n<div class="npc"><<dlegend>>Yes, the corpse was left sprawled at <<clue "Where Rats Drowned" "bmh" "rats location">>, just over from here.</div>
<<autoresponse "Killed in what way?">>\n<div class="npc"><<dlegend>>Fast and sloppy. If nothing else, all the beast-masked hunter's killings have been methodical, and he's stolen away with the bodies until he can string them up. Here, though-- there's something else going on. And that's not even getting into the condition of <<clue "the body" "npc_suggins" "..." "transformed watchman the body">>.</div>
<<autoresponse "The body?">>\n<div class="npc"><<dlegend>>Oh, it was <<clue "all torn up" "bmh" "body torn up">>. Huge rents all down his back and sides -- must be those star-metal claws everybody's said they've seen.</div>
<<nobr>>\n<<autoresponse "What are you on watch for?">>\n\n<div class="npc"><<dlegend>>For <<clue "beasts" "npc_suggins" "..." "transformed watchman beasts">>! We're not here looking for every loiterer and <<clue "couple fucking in the streets" "npc_suggins" "..." "transformed watchman fucking">>; we're here to defend against the so-called 'royals' and their hangers-on, and any gangs thinking they can follow their lead and try to <<clue "snatch people off the street" "npc_suggins" "..." "transformed watchman snatch">></div>\n<<endnobr>>
<<autoresponse "Beasts?">>\n\n<<dialog "The plague is getting to people. When they go feral-- it's dangerous. But more often than that, those that turn into proper beasts go mad. The urges of the beast are basal; it's human desires for power that do the worst. Somebody's gotta keep an eye out.">>
<<autoresponse "Snatching people off the streets?">>\n<<dialog "The Royals snatch humans for their fucking vivisections, and some of the other gangs have started to copy them. Whoever can tell the Royals how to turn a human into a beast-- they'll be rich for the rest of their days. Rich in the forsaken world of beasts they're trying to create. But to find that out, they need a steady supply of human flesh.">>\nHe lets out a bark of a laugh.\n<<dialog "We're a little insulated from that here; all the gangs here are more mercantile-minded, wanting to control the flow of goods through the wharf and market. But there have still been abductions.">>
<<nobr>>\n<<autoresponse "You catch people fucking in the streets?">>\n\n<<dialog "Plenty of people can't handle their beast blood.">>\n\nHis voice rasps, hoarse and low through his burlap-sack hood. his breath steams through the fabric.\n\n<div class="npc"><<dlegend>>They get <<clue "urges" "npc_suggins" "..." "transformed watchman urges">>. Not my place to moralize to them about restraint.</div>\n\nHe's quite transformed himself; his body more animal than human: coat not fitting across his barrel chest, broad haunches too wide for his trousers, pulling the fabric awkwardly. His sheath is a big lump beneath his belt, ill-fitting trousers bunched and twisted all across his lower body.\n<<endnobr>>
<<nobr>>\n<<set $interrupt to true>>\n<<autoresponse "You got some urges of your own you want to handle?">>\n\nHe lets out a coarse laugh.\n\n<<dialog "Sounds like you're the one who wants to indulge your urges.">>\n\nHe looks aside: the alcoves in the pass are deep and dark.\n\n<<dialog "How about you step aside and see what we can sate together?">>\n\n[[step into the dark alcove =>|night watchman alcove]]\n<<endnobr>>
You step with him into the darkness.\n\nHe shutters his lantern and puts it aside, only a thin light between a few uneven slats belying its presence at all.\n\nHe steps close. At first, in the dark, it's all touch: his body is warped and misshapen, much closer to a beast walking on its hind legs than that of a man. His belly is sunken under his giant ribs, bulky pelvis protruding from his well-muscled hips, and his hands wrap around your sides more like claws.\n\nThe mound of his sheath is unmistakable: hot through the fabric, big and bulky tethered to his underbelly. It shifts under your fingers, through his pants, and he lets out a hiss as he unsheathes, raw cock scraping against the coarse fabric. Dampness clings to your hand, seeping through, and he lurches forward, grinding against you: his cock jostles, a hard spar pressing against your front, lurching back and forth. He clashes against your own cock, hardening, and bears down harder, letting your trapped erections slide against each other, a firm line of contact running all down your shaft. He lets out a guttural groan and his cock shudders, a wet splotch seeping through the fabric, adding a drag to your rutting thrusts.\n\nHe tugs at his belt, the worn leather parting easily, and his pants sag down his hips, ill-fitting on his altered posture. His cock lurches out, just a gleam in the darkness, and smacks wetly against your front. It's slick, wet with the slimy fluid of his sheath, and he ruts forward, drizzling rank slime over your shirt, and you tug it to the side, letting him grind up across your stomach, pre smearing down your skin.\n\nYou tug open the laces of your pants before the mess gets any worse. Your cock skews out, grinding against his slimy length, and he curls them both together in one huge claw: your cockhead slurping against the underside of his bestial shaft, getting entirely drenched in his rank pre. The heady scent wafts up across your face, so intense it feels like it's boring into your skull.\n\nYou rut against each other, your thrusts forming a sloppy trough between his sheath and his haunch. His fur is sodden and dripping, with runnels of watery pre burbling down his length and splattering all across your legs. He humps his cock up your stomach, and the immense, lopsided mass of his balls swing forward to punctuate each thrust, crashing against your thighs with a lewd //crack//. You curl your hands around his cock: it's a gnarled, bestial club, pulsing with an inhuman vigor, flesh pulpy and soft, slick and frictionless, in a way no human dick has ever been.\n\n<div class="responses"><<plegend>>\\n<<response "C'mon, fuck me." "night watchman alcove ride knot">>\n<<response "Lemme fuck you." "night watchman alcove fuck">>\n</div>\
He lets out a hungry groan, one giant clawed hand reaching back to grind a hairy knuckle against his hole. He twists around, falling on all fours with a //thump//, and presents himself. His clothes are in disarray, haphazardly stretched across his bestial form -- pants caught on one haunch, kicked down to mid-flank on the other; one foreleg pulled out of his jacket, the other sleeve jammed up against his armpit -- and you tug his pants down, pulling them over his watchman's boots, awkwardly twisted to handle his elongated feet. His tail is a stumpy thing only a handspan long, with shaggy fur growing along the upper surface, still bare below. You slide your hands down, over the curve of his ass, and press against his hole. He's altered there, too: hole broad and open, rim bulging out, animal flesh wrinkled and thick. You slide to the center of his hole, two fingers pushing in easily, and he lets out a guttural animal noise, a growling groan. His asshole is lobed, big dense mounds of flesh just behind his asshole, and when you push down on them he lets out a whine, rutting back into you with enough force to make you ground your footing, braced against the pillar behind you as you fingerfuck him.\n\nInternal muscles shudder around your fingers, and his cock audibly smacks against his belly, followed by a wet crack as he gushes out pre all over the stones below. The next pulse is wetter, splattering into the puddled mess beneath. He ruts back, hole hungrily bashing against your knuckles, and you feed another finger into him. He can't quite stretch around your entire hand with no prep, but he takes four fingers well enough, snorting and groaning the whole time. You dig your fingers into the soft, pulpy flesh of his guts, grinding your knuckles against his rim. His prostate is enormous: a fat, fist-sized gland, a dense knot of muscle that's defined enough for you to slide your fingers across, digging into the grooves across its surface. It clenches each time his cock fires off, thudding solidly, and fluid gurgles through it in the aftermath, vibrating the flesh against your fingers.\n\nYou rut against his hip, cock sliding up against your hand, digging into the soft, open flesh of his hole. You slide your cock in as you pull your fingers out, sinking yourself into the hot, slick heat of his ass. Your cock knocks against his bulging glands, blunt tip solidly smacking against his enormously swollen prostate, and he lets out a bone-rattling groan, bucking back against you with enough force to press you against the wall, his hips rolling as he fucks himself on your cock. You match the rhythm, hands digging into his hairy flanks, rutting forward to grind your cock along the grooved surface of his prostate, the sharp impact sending bolts of heat racing along your shaft. You groan too, fucking into him, building up a steady rhythm.\n\nYou reach over his hip, gripping his shaft, pumping it through your hand as you fuck him. He's dripping wet, shaft frictionless as he ruts through your fist. His bulky knot smacks against your hand, and the resulting shudder and spurt sprays a spume of pre all the way out into the light: gleaming grey-silver pools of watery beast fluid.\n\nHis hole shudders around your cock, clamping down and making his heavy lobes dig into your shaft, a smooth dense ring you fuck through with each thrust. You build up a rhythm, other hand braced on his hip, letting you fuck him in steady thrusts. He huffs and groans, cocktip gurgling as it spews pre into the messy puddle beneath him, squirting harder each time your cockhead skids across the bloated mound of his prostate.\n\nHe's hot and pulsing around your cock, smooth muscle rippling along your shaft, cocktip a battering ram inside him. You groan and hunch forward, snapping your hips forward, plowing into him hard. His claws skitter on the stones as he braces himself, haunches jolting up to punctuate each thrust with a sharp smack of impact, stinging across your hips. You groan, cock shuddering inside him, and fuck him through the final few thrusts, heat billowing in your gut, growing and growing until you know it's inevitable and you're just dragging it out further, until finally you cum into him with a groan, cock shooting off heavy spurts into his sucking guts. You fuck him through it, each time you hilt coaxing a full-body shudder and another squirt of cum, painting the walls of his ass with your load until it starts to spill down your shaft, frothy and churned-up burbling out around the lumpy ring of his asshole.\n\nHis internal muscles spasm around your cock, and he cums with a howl, wetly panting into the slop beneath him. His cock kicks hard, knot bloating in pulses, and sprays a rope of cum with enough force to splatter all up his front, soaking his chest and his hooded face. He whines as you milk his knot, still rocking inside him, still-hard cock digging into his prostate. He pours out his load all over the floor, pissing it out in heavy spurts until the puddle squelches under your feet, burbling out into the light in a sludgy flood.\n\nYou pull out with a wet slurp, leaving his worked-open hole slick and dripping, spilling down the curve of his ass to coat his own enormous balls, drawn up tight beneath him in a gigantic mound. You grind down against them, feeling their immense, knobbled surface through his skin. They shudder and pulse, internal muscles sucking them tight against his body each time he shoots a burst of cum. His shots go from sharp, lancing bursts to a continual wet pour, burbling down into the mess below. His knot softens in your hand, its dense flesh going spongy, until you finally release it, letting his cock skew down into the pooled cum below with a //splat//.\n\nHe shudders, breath pumping like a bellows through his panting mouth, and sluggishly gets to his feet. He tries to straighten his coat, pull up his pants. They're both half-sodden with cum, huge wet patches all along the front, and he staggers out into the light still in disarray: chest dripping; well-fucked asshole oozing your load; his cock still unsheathed, an enormous cudgel the size of your forearm, blood-red and still weakly drooling filmy grey cum.\n\\n<<autoresponse "That settle your urges?">>\\n\\nHe lets out a hoarse bark of a laugh, reaching down with one clawed hand to tug upwards on his beast cock, wringing out a messy splatter of sludgy animal issue.\n\\n<<dialog "Certainly.">>\\n\\nYou tug your pants up, tucking you cum-smeared cock inside. It takes more than a while before either of you are at all presentable.\n\n[[=>|map]]
He groans, surging forward, and pins you against the wall: claws on your shoulders, leg pushing in between your thighs, other hand curling around your knee and raising one leg so he can hump across the full length of your thighs and belly, pinning your cock to your stomach. He croons, breath billowing across your neck, the indistinct imprint of teeth felt through the burlap sack, and fucks your hands, cock loudly slopping through your fists.\n\nHe hauls your raised leg across his thigh so that you're half-balanced on his lap, and pushes his hand against the crotch of your pants, shoving them down to mid-thigh. His cock smears against the fabric, spurting an abrupt gush of pre that sprays all the way up your chest, and then his cock lurches down to saw against the back of your thigh, butting against the cheek of your ass.\n\nYou groan, grinding down against his fat length.\n\\n<<dialog "Yeah, c'mon, ride me.">>\\n\\nHe snarls in your ear, breath rank, and angles his cock up, pointed tip stabbing against your thigh, hip, inner thigh, before you reach back, arch your back just-so, and guide his stiff cock between your cheeks, jabbing into your hole with a lurch. He burbles pre, spilling in a liquid line down the /%{hairy}%/hairy curve of your ass, slopping his tip against your spreading hole until it's glazed and dripping, wetly yielding. It still burns when he shoves inside, bestial cock fat and rigid, and you let out a guttural groan, moving with him for a moment as he fucks his cocktip into your hole, basting your ass in gushes of pre, excess burbling out down his shaft. You both groan when he sinks in deeper, cock carving you open, a huge rigid pipe impaling you deeper. You whine, clenching and flexing internal muscles to straighten your guts, and it's with a shock that has you going bug-eyed that he draws back and shoves deeper, fucking half his cock into your ass. He hauls you onto his lap, his knees bent, your back pinned against a pillar, and snarls in your face, your own cock pinned against the furl of your pants, leaking into your underwear. You press your hands against his hips, some vague leverage as he fucks you with animal thrusts. His cock throbs inside you, slick and hot, asshole splayed obscenely around his bulky shaft. It's fattest in the middle, slimming down before his knot, and he rolls your asshole back and forth over the widest bit, leaving your hole bruised and aching, spread out into a sloppy gape.\n\nHe sinks deeper, cocktip probing into your guts, and you let out a shaky exhale, straightening the line of your back to align your guts, neatly opening yourself up for his cock. He stabs yet-deeper still, the hot pulse of his spurting cockhead up past your bellybutton, listing to the side as he slides into your guts. He sinks an iota deeper, and his knot crashes against your ass with a //crack//, leaving you gasping. His hands drop, digging into the meat of your ass, spreading your cheeks wide to let him grind his knot right against your gape, and he bends his knees, bouncing you on his knot. Slimy webs of pre splatter between you, excess pre burbling out around his knot and dragging back into huge drooling strands, snapping when he shoves forward again, splattering down against your calves. Again and again, each time your bloated ass spreading fractionally more, the contact wetter and wetter. He snarls against your throat, coarse beard -- or fur -- scraping against your chest.\n\nHis knot slots into place with a full-body wrench. He doesn't fit it all the way in, not yet, but it's wedged in place, a continual burning stretch inside you, flesh sliding against flesh. His claws slice into your hips as he grinds you down, bodily dragging you down onto his bulging knot, once, twice, a third time before your abused flesh finally parts, asshole blossoming out into a fat bulging crater and sucking in the meat of his knot, letting it socket inside you like a hot coal. He buries his head in your throat, restraining his howl -- a strangled choking noise rumbling in his throat -- as he bucks inside you, knot bashing against your prostate, delving deeper into your guts with a hollow slurp. His sheath scrapes against your ass, rubbery flesh grinding against your hole and wrinkling up into hairy folds, letting him press just a fraction deeper.\n\nHis knot throbs, hard and getting harder, entire shaft shuddering and swelling. His cock erupts, so deep inside now you only feel it as a pressure that sloshes and pours, heat blooming out from the hot poker of his shaft. He finally finds his voice, broken rasp turning into a guttural keening as he dumps his bestial load into you. His initial lurches of his shaft inside you settle down into a continual pulse: muscles under his sheath clench steadily, each one adding a fresh burst of heat inside you. He slumps forward against your chest and breathes heavily. Then, after a moment, he twists around, knocking you off his lap and onto your wobbly legs -- you collapse down onto your knees in a sprawled mess, a sharp moan ripping out of your throat as his knot lurches inside you -- and then he twists around, body looking much more natural on all fours, and drags you a half-step backwards, your ass stuck between his haunches. Tied ass-to-ass. His knot is pinned against your prostate, throbbing hard with each pulse, and the steady pressure makes your cock sluggishly pulse and drool. Your pants are bunched around mid-thigh, cock jutting out over them, and without him humping into you you can actually usefully wrap your hand around your dick. His knot is //big//, a hot heavy weight stretching you out, and you find yourself rutting back against him, his knot lurching inside you, as you jerk yourself off. He's just panting on all fours, knot popped inside you, load gurgling into your guts, and you rock back against him, both sprawled on the floor, mating like animals.\n\nYou cum with a groan, stone cool on your forehead when you collapse, and your cock shudders and spits out a stringy mess of cum all over your pants. Without the edge of arousal to cut it, the sheer size of his knot is harder to handle: you whimper and squirm, asshole wetly sucking on the underside of his knot, still way too huge to work its way out any time soon.\n\nYour guts are a sloppy, flooded mess by the time he starts to soften. Thin grey cum burbles out around his turgid knot, abrupt squirts gushing out when you shift position. His hips jerk above you, stirring his cock around inside you before pulling back, and his still-engorged knot bulges out your ass into an enormous mound before he finally pulls free with a sloppy //squelch//, splattering cum everywhere, excess immediately pouring from your well-fucked ass. It still feels like he's inside you; your inner walls clench against nothing, bearing down on where his knot was lodged. The mess of cum drooling from your guts stings as it winds its way over your aching flesh, pooling against the bruised lip of your swollen asshole.\n\nHis cock, still unsheathed, knocks against your thighs as he shifts behind you, one clawed hand catching your elbow and helping you get to your feet.\n\\n<<dialog "That do you good?">>\\n\\n<<autoresponse "Yeah.">>\\n\\nCum burbles from your ass, audibly gurgling as you stand up. You're definitely gonna be walking wobbly-legged for a while. You're leaving a puddle beneath you.\n\nHe tries to straighten his coat; pull up his pants. You get the first actually glimpse of his cock when he shifts out into the light: a colossal cudgel, blood red, stained in a slimy layer of drooling grey cum. It bobs out before him, most of the size of your forearm, with his shrinking, sunken knot nearly as big as your fist, digging into the matted fur of his sheath. Seeing it sends a throb of heat through your ass: all that was inside you.\n<<sex "night watchman" "anal" "top">>\\n\n[[=>|map]]
<<display "intro blurb">>\nA lady of the night, working under a pale blue streetlamp.\n\nShe's dressed starkly, in a close-fitting black overcoat made from thick fabric, and a long dress that comes down to her ankles. They are both embroidered in alabaster thread with looping images of flowers across the hems, looping up along the seams. Her fingernails are painted alabaster, to match her clothes. Her face shows no sign of the beast plague at all. She keeps an eye on the market crowd, tabulating some internal calculation.\n\nShe observes you watching her, and tilts her head towards you in acknowledgment.\n\n<<if getConvVar ("met")>>\\n<<dialog "You again. If you want to speak more, I hope you have more coin.">>\n\n<<autoresponse "Really?">>\n<<dialog "I'm a working woman.">>\nYou flip her a silver.\n<<autoresponse "I just have a few more questions...">>\n<<else>>\\n<<dialog "Well, aren't you a handsome one.">>\nShe leans in closer.\n<<dialog "What do you say, darling?">>\n\n<div class="responses"><<plegend>>\\n<<response "I'm gay, actually." "lady gay">>\n<<response "I'm not interested in sex." "lady not interested">>\\n</div>\n<<set alterConvVar ("met", x => true)>>\n<<endif>>
She rolls her eyes with a sarcastic flourish.\n<<dialog "It's always the handsome ones.">>\n<<dialog "But gay or not, if you want some of my time, you better be prepared to pay.">>\nYou flip her a silver.\n<<autoresponse "I have some questions.">>\n<<dialog "Well, I'll see what I can do.">>
<<dialog "Good for you, but if you want some of my time, you better be prepared to pay.">>\nYou flip her a silver.\n<<autoresponse "I have some questions.">>\n<<dialog "Well, I'll see what I can do.">>
/% what... is your name %/\\n<<set alterConvVar ("name", x => "Odessa")>>\\n<div class="npc">You can call me <<clue "Odessa" "npc_odessa" "odessa">></div>
/% what... is your occupation %/\\n<<dialog "Oh, and here I thought you were willing to be coy. You're //certainly// not interested in my product.">>
/% have you heard of... the beast-masked hunter %/\\n<<dialog "Oh yes, the fearsome hunter who strikes in the dark and leaves no witnesses. Everyone's heard of them.">>
/% have you heard of... the beast-masked hunter's latest victim %/\\n<div class="npc"><<dlegend>><<clue "The beast enforcer" "npc_odessa" "..." "lady beast enforcer">>? Yes, it'll certainly <<clue "shake things up" "npc_odessa" "..." "lady shake things up">> in the underground.</div>
<<autoresponse "Beast enforcer?">>\n\n<div class="npc"><<dlegend>>It was <<clue "'the Crusher'" "bmh" "mikhael">>, the enforcer of the Kings of Kane St., who got himself killed. He was named <<clue "Mikhael">>, I think.</div>
<<autoresponse "Shake things up?">>\n\n<div class="npc"><<dlegend>>The Kings of Kane St. have been vying with <<clue "The Dark" "npc_odessa" "the dark" "lady the dark">> over control of the undermarket. It's all been behind the scenes, of course -- they don't want to spook the merchants by fighting in the streets. But this is a big blow for them. The Crusher was most of their threat, and without that...</div>
<<autoresponse "What is The Dark?">>\n\n<<dialog "Oh, haven't you heard? The witch-cult, rumored to be situated somewhere in the undercity depths. Like everybody else in this benighted era, they've been flexing their strength and looking to expand. The Royals have been very explicit about it: anybody who can control a slice of the city is welcome to have it, so long as it doesn't interfere with their plans, and there's only so long the guilds can maintain control of the markets.">>
/% do you know... any... suspicious people %/\\n<<dialog "I think you'll understand that my work requires a bit of circumspection. I'm sure you wouldn't appreciate it if I told the Kings of Kane St. I saw somebody asking nosy questions.">>
/% have you seen... the beast-masked hunter %/\\n<<dialog "Who has? certainly I've seen many people; any one of them could be the beast-masked hunter out of their disguise.">>
/% have you seen... the beast-masked hunter's latest victim %/\\n<div class="npc"><<dlegend>><<clue "The Crusher" "npc_odessa" "..." "lady night the crusher">>? he came around through the market every so often, but I don't think it was a regular occurrence.</div>
/% have you seen... any... suspicious people %/\\n<<dialog "Oh, always.">>\n\nShe pointedly does not follow up on that.
/% have you heard of... the latest killing by the beast-masked hunter %/\n<<dialog "Oh yes, just dreadful news. Bad for business too; the market is quieter today.">>
/% where were you... last night, after second bell %/\\n<div class="npc"><<dlegend>>This same corner. If I was looking down at the river I would've seen it happen, you think? I heard <<clue "fighting from the riverside" "bmh" "lady heard fight" "lady night fighting from the riverside">>, but <<clue "I never saw anything directly" "bmh" "lady saw nothing" "lady night never saw anything">>. I thought it was just some drunken brawl or a mugging, until the crowd started forming.</div>
<<autoresponse "The Crusher?">>\n\n<div class="npc"><<dlegend>>Oh, yes, <<clue "Mikhael the Crusher" "bmh" "mikhael">>, that's who got killed.</div>
<<autoresponse "Could you hear anything?">>\n\n<div class="npc"><<dlegend>>It didn't sound like they were talking. Just bangs and crashes, not unusual for some drunks, brawling or not. Then roaring. All very close, <<clue "just down by the riverside" "bmh" "rats location">>.</div>
<<autoresponse "So nobody passed by on this street before then?">>\n<<dialog "They didn't run past me, if that's what you're asking.">>
<<display "intro blurb">>\nA beast in churchclothes, slouching in all fours.\n\nHis ornate robe -- thick panels of starched white cloth, hemmed with gilt thread and tied with golden tassels -- drags on the ground, drenched in mud, hems shredded into scraps. At some point he began wearing a mask to hide his transformed face, but now to hide his muzzle he needs a half-dozen, strapped across his head in a haphazard fashion. He's slavering, and drool spills from the hollow eyes and mouths of his lower masks.
<div class="npc_title">Street Drunkard</div>\\n<ul class="npc_ranks"><li>Rank II Confabulator</li>\\n<li>Rank I Rumormonger</li></ul>\\n\nyr talking to a human, etc
"human know humans" chunk
"human know altered" chunk
"human know beasts" chunk
there are rumors that some among __the wanderers__, who camp outside town, have turned into __jackal-headed beasts__.\n\n<<grantTopic "the wanderers" "people">>\n<<grantTopic "jackal-headed beasts" "people">>\n\nthey say that down in __the gulches__ there's a __ram-headed beast__ that perches among the tombstones.\n\n<<grantTopic "the gulches" "locations">>\n<<grantTopic "ram-headed beasts" "people">>
> me? not specifically, no. there are vagrants and thieves all over the city who are ashen beasts __in disguise__ though.\n\n<<grantTopic "beasts who can hide as humans" "people">>
> are there others, besides __the executioner__? i imagine __the royals__ would be very pleased to hear of one, and equally as displeased to hear anybody's been poking around looking.\n\n<<grantTopic "the executioner" "persons">>\n<<grantTopic "the royals" "persons">>
> if i did, i certainly wouldn't tell you. those who can hide, hide to hunt, and deal brutally with those who betray their confidence. i wouldn't continue prying in those corners, if i were you.
i was passing through __the sewers__ a fortnight ago and saw the great gleaming eyes of some grotesque __rat beast__ just downstream.\n\n<<grantTopic "the sewers" "locations">>\n<<grantTopic "rat beasts" "people">>
last night, there was some drunkard outside the beerhall who was screaming about how there were giant __rat-beasts__ down in __the sewers__\n\n<<grantTopic "the sewers" "locations">>\n<<grantTopic "rat beasts" "people">>
there's __the king of kane street__; he and his gang are mostly ashen beasts. i wouldn't go looking for them if i were you, though.\n\n<<grantTopic "the king of kane street" "persons">>\n<<grantTopic "the kane street gang" "persons">>\n\nmikhel the crusher spends his nights at the bar down the street, __the hind's heart__. he's not so friendly, though.\n\n<<grantTopic "mikhel the crusher" "persons">>\n<<grantTopic "the hind's hart" "locations">>
<<nobr>>\n<<set {\n console.log ("dialog: " + macros.display.parameters.reduce ((a, b) => a + " + " + b));\n }>>\n<<set $_text to parameter(0)>>\n<<set $_dname to\n macros.display.parameters.length > 1 ? parameter(1)\n : getConvVar ("name") ? getConvVar ("name")\n : npcs[$_conv].title>>\n<div class="npc"><span class="legend"><<print $_dname>></span><<print $_text>></div>\n<<endnobr>>
<<set $_dname to macros.display.parameters.length > 0 ? parameter(0) : (getConvVar ("name") ? getConvVar ("name") : npcs[$_conv].title)>><span class="legend"><<print $_dname>></span>
<span class="legend"><<print $pc.name>></span>
<<nobr>>\n<<set $_granted to parameter(0)>>\n<<set $_topic to parameter(1)>>\n<<set $_check to (function (kind, topic) {\n let vartable = state.history[0].variables;\n let which = null;\n switch (kind) {\n case "locations":\n which = vartable["locations"];\n break;\n case "people":\n which = vartable["people"];\n break;\n case "persons":\n which = vartable["persons"];\n break;\n case "events":\n which = vartable["events"];\n break;\n case "times":\n which = vartable["times"];\n break;\n default:\n throw new Error ("grantTopic: unexpected kind of \"" + kind + "\"");\n return false;\n }\n if (which.indexOf (topic) === -1) {\n which.push (topic);\n return true;\n } else {\n return false;\n }\n })($_topic, $_granted)>>\n<<if $_check>>\n''You can now ask about "<<print $_granted>>", under "<<print $_topic>>".''\n<<endif>>\n<<endnobr>>
<<nobr>>\n<<set $_forbidden to parameter(0)>>\n<<set $_topic to parameter(1)>>\n<<set $_check to (function (kind, topic) {\n let vartable = state.history[0].variables;\n let which = null;\n switch (kind) {\n case "locations":\n which = vartable["locations"];\n break;\n case "people":\n which = vartable["people"];\n break;\n case "persons":\n which = vartable["persons"];\n break;\n case "events":\n which = vartable["events"];\n break;\n case "times":\n which = vartable["times"];\n break;\n default:\n throw new Error ("grantTopic: unexpected kind of \"" + kind + "\"");\n return false;\n }\n let ix = which.indexOf (topic);\n if (ix !== -1) {\n which.splice (ix, 1);\n return true;\n } else {\n return false;\n }\n })($_topic, $_granted)>>\n<<if $_check>>\n''You can no longer ask about "<<print $_granted>>", under "<<print $_topic>>".''\n<<endif>>\n<<endnobr>>
<<if $prompt>>\\n<span class="askd"><<plegend>><<if $prompt !== "goodbye">><<print $prompt>><<if $what>> <<print $what>><<if $who>> <<print $who>><<endif>><<endif>>?<<else>>goodbye.<<endif>></span>\n<<endif>>
<<set $asking to false>>\\n<<set $prompt to "">>\\n<<set $what to "">>\\n<<set $who to "">>\\n/% this generates a blank statement to start, which would serve as the intro/splash text for a given encounter %/\\n<<display "_response">>\\n\n<<display "build ask">>\\n<<display "construction ui">>
<<block ask>><<if !$asking>><<display "current statement">> <<display "ask click">><<else>><<display "stated">>\n<<display "_response">>\\n<<set $asking to false>>\\n\n<<display "build ask">>\\n<<endif>><<endblock>>
<<block base>><<block what>><<block who>><<if complete($prompt, $what, $who)>><span class="askq"><<replace "ask =>">>\\n<<set $asking to true>>\\n<<set reshow("ask")>>\\n/% this strips away the outer layer of 'ask' wrapping, so that when we toggle 'ask' to render a new 'ask' inside of the old 'ask', we don't totally wipe the entire history when we _next_ toggle 'ask' etc. %/\\n<<set unroll (document.querySelector(".passage .ask"))>>\\n<<endreplace>></span><<endif>><<endblock>><<endblock>><<endblock>>
<<set $prompt to "">>\\n<<block base>><<set $what to "">><<set $who to "">>\\n<<block what>><<set $who to "">>\\n<<block who>>\\n<<if $prompt neq "">><div class="askcur"><<plegend>><<print $prompt>> <<print $what>> <<print $who>></div><<endif>>\\n<<endblock>><<endblock>><<endblock>>
<<nobr>>\n<<block asktable>><<if !$interrupt>><table><tbody><tr valign="top"><td>\n<<toggle $prompt "base" "what..." "what...">>\n<<toggle $prompt "base" "where is..." "where is...">>\n<<toggle $prompt "base" "have you heard of..." "have you heard of...">>\n<<toggle $prompt "base" "have you seen..." "have you seen...">>\n<<toggle $prompt "base" "do you know..." "do you know...">>\n<<toggle $prompt "base" "where were you..." "where were you...">>\n<<toggle $prompt "base" "goodbye" "goodbye">></td>\n<td><<block base>>\n<<if $prompt == "what...">>/% facts %/\n<<print groupList ("what",\n [ {title:"information",content:$facts}\n ])>>\n<<else if $prompt == "where is...">>/% locations, persons %/\n<<print groupList ("what",\n [ {title:"locations",content:$locations}\n , {title:"persons",content:$persons}\n ])>>\n<<else if $prompt == "where were you...">>/% times %/\n<<print groupList ("what",\n [ {title:"times",content:$times}\n ])>>\n<<else if $prompt == "have you heard of...">>/% persons, events %/\n<<print groupList ("what",\n [ {title:"persons",content:$persons}\n , {title:"events",content:$events}\n ])>>\n<<else if $prompt == "have you seen...">>/% people, persons %/\n<<print groupList ("what",\n [ {title:null,content:["any..."]}\n , {title:"persons",content:$persons}\n ])>>\n<<else if $prompt == "do you know...">>/% people, persons %/\n<<print groupList ("what",\n [ {title:null,content:["any..."]}\n , {title:"persons",content:$persons}\n ])>>\n<<else>>\n<<endif>>\n<<endblock>></td>\n<td><<block base>><<block what>><<if $what == "any...">>\n<<print groupList ("who",\n [ {title:"people",content:$people}\n ])>>\n<<else>>\n<<endif>><<endblock>><<endblock>></td></tr></tbody></table><<endif>>\n<<endblock>>\n<<endnobr>>
<<set $_q = []>>\\n<<set $_q.push ($prompt)>>\\n<<if $what>><<set $_q.push ($what)>><<endif>>\\n<<if $who>><<set $_q.push ($who)>><<endif>>\\n/% asking about <<print ($_q\n .map(x => '"' + x + '"')\n .reduce((a, b) => a + ", " + b))>> %/\\n/% asking vs. <<print (function (p){\n return p.map (function (s){ return "'" + s.name + "'"; }).reduce(function(a,b) {return a + " -> " + b; });\n})($_p)>> %/\\n<<set $_a = lookupAnswer ($_q, npcs[$_conv].dialog)>>\\n<<set $interrupt to false>>\\n<<if $_a !== 0>>\\n/% got "<<print $_a.match>>" from "<<print $_a.archetype>>" %/\n<div class="resp"><<display $_a.match>></div>\\n<<else>>\\nERROR: null result; not even a fallback available\n<<endif>>\\n<<set reshow("asktable")>>
You consider.\n\n<<print $_compareResult.result>>\n\nnew clue: <<print showClues ($_compareResult.clue, $_investigating)>>\n\n<<if $_compareResult.spec>><<print $_compareResult.spec>><<endif>>\n\n<<print "[[=>|" + $_back + "]]">>
.mhead, .mfoot, .mapcontainer > * { background: #080808; margin: 0 0.165em; padding: 0.2em; }\n\n#map_debug { display: inline-block; position: absolute; bottom: 0; right: -2em; width: 1.6em; height: 1.6em;text-align: center; font: sans-serif; }\n#map_debug a { color: #111; font-weight: normal; }\n#map_debug a:hover { color: #333; text-shadow: none; }\n\n.mapcontainer { display: flex; justify-content: space-between; }\n.mapcontainer > * { flex-grow: 1; flex-basis: 50%; }\n.mapcontainer #ui { order: 1; }\n.mapcontainer #mapframe { order: 2; max-width: 50%; }\n\n.mhead, .mfoot { display: block; }\n.mhead { margin: 0 0.165em 0.33em; }\n.mfoot { margin: 0.33em 0.165em 0; }\n.mfoot p { margin: 0; }\n\nsvg { border: 2px solid #003100; }\n#mapcaption { border-bottom: 1px solid #eee576; max-width: 21em; padding-bottom: 0.2em; margin: 0 auto; }\n#zonecaption { padding-top: 0.2em; }\n\n#mapcaption { font-size: 125%; }\n\n#mapdesc p { margin: 0 0.2em 1.12em; }\np#exit_p { margin: 0.2em 0.2em 0; font-weight: bold; text-align: center; }\np#exit_p:first-child { margin-top: 0em; }\nul#exits { display: flex; flex-wrap: wrap; margin: 0; padding: 0; text-align: center; }\nul#exits li { flex-basis: 33.33%; margin: 0; padding: 0; list-style: none;}\nul#exits li.used { background: #111; border-radius: 4px; }\nul#exits li.used a { display: block; }\n\n.barredExit { text-decoration: line-through; }\n\n#zonecaption, #mapcaption, #mapframe span { display: block; text-align: center; }\nul.exits { margin: 0; padding: 0; }\nul.exits li { margin: 0 0 0 1.5em; padding: 0; }
table { vertical-align: top; }\n.asktable {\n position: relative;\n display: block;\n clear: both;\n margin: 1em 0;\n border: 1px solid #fe8;\n border-image-source: url("./img/construct-border.png");\n border-image-slice: 24;\n border-image-width: auto;\n margin-bottom: 10em;\n background: #1f1c08;\n}\n.asktable::before, .asktable::after {\n content: "";\n display: block;\n position: absolute;\n left: -1px;\n right: -1px;\n height: 32px;\n}\n .asktable::before {\n top: -1px;\n background: no-repeat center url("./img/construct-border-top.png");\n }\n .asktable::after {\n bottom: -2px;\n background: no-repeat center url("./img/construct-border-bottom.png");\n }\ntable, tbody { border: none; }\ntr, td { }\n.gr { background: #3f3610; padding: 2px; }\n\n:root {\n --dialog-margin: 40%;\n}\n\n.askd, .askcur, .autoresponse { font-weight: bold; color: #ffc; border-radius: 4px; padding: 0.25em; margin: 1em 3em 1em 0; position: relative; }\n.clickedResponse { color: #ffc; }\n.oldResponse { text-decoration: line-through; color: #aaa; }\n.askd, .askcur { display: inline-block; min-width: 8em; }\n\n\n.legend { position: absolute; top: -1.2em; font-size: 90%; background: #000; display: inline-block; padding: 0 0.3em; }\n.autoresponse .legend, .responses .legend { right: 1.7em; }\n.npc .legend { left: 1.7em; }\n\n.autoresponse, .responses { padding: 0.25em; border-radius: 4px; margin: 1em var(--dialog-margin) 1em 0; }\n.autoresponse, .responses { display: block; border: 1px solid #808088; margin-bottom: 1.25em; position: relative; }\n.askcur { display: inline-block; border: 1px solid #808088; margin: 1em 0; }\n.askq { display: inline-block; margin: calc(1.25em + 1px) 1.25em calc(1.25em + 1px) 0.25em; }\n.resp { }\n.askd, .autoresponse.ranResponse { border: 1px solid #eee576; }\n\n.clue, #passages a.clue { font-weight: bold; color: #fb8; }\n#passages a.clue:hover { color: #fdc; text-shadow: 0px 0px 6px #982; text-decoration: none; }\n\n#consider { color: #000; background: #fb8; display: inline-block; padding: 0.2em 0.4em; border: none; border-radius: 8px; font-size: 120%; transition: 0.5s; cursor: pointer; }\n#consider:hover {background: #fdc; box-shadow: 0 0 16px 2px #787044; }\n\n.npc { border-radius: 4px; border: 1px solid #eee576; padding: 0.25em; margin: 1em 0 1em var(--dialog-margin); text-align: right; position: relative; }\n\n.npc_title { font-weight: bold; font-size: 150%; color: #eb9; }\nul.npc_ranks { font-weight: bold; margin: 0; padding: 0; font-size: 125%; list-style: none; }\nul.npc_ranks li { margin-left: 1em; color: #fdb; }
input[type="radio"].toggleInput { display: none; }\ninput.toggleInput + label { padding: 2px; cursor: pointer; font-weight: bold; transition: 0.5s; }\n\ninput.toggleInput + label { background: transparent; color: #fe8; }\ninput.toggleInput + label:hover { background: #403810; color: #ffc; }\ninput.toggleInput:checked + label { background: #fe8; color: #000; }
@font-face {\n font-family: 'Libre Baskerville';\n font-style: normal;\n font-weight: 400;\n src: local('Libre Baskerville'), local('Libre-Baskerville'), url(./fonts/LibreBaskerville-Regular.ttf) format('truetype');\n}\n\nbody { margin: 0 10px 1em; font-family: "Libre Baskerville", serif; }\n#passages { margin: 0 2em; padding: 0; border: none; }\nul#sidebar { display: none; }\nhr { border: none; border-bottom: 1px solid #fe8; margin: 1.2em 4em; clear: both; }\n\nbutton { font-family: "Libre Baskerville", serif; }\ninput[type="text"] { border: 1px inset #999; color: #fff; background: #000; border-radius: 8px; height: 1.7em; font-size: 100%;}\ninput[type="text"]:hover { background: #111; }\n\na.internalLink { color: #fe8; transition: 0.5s; }\na.internalLink:hover { color: #ffc; text-shadow: 0px 0px 6px #982; text-decoration: none; }\n\n#changelog { margin-top: 1.6em; }\n\n#notes, #walkthrough_l {\n display: block;\n position: fixed;\n bottom: 0;\n height: 3em;\n line-height: 3em;\n text-align: center;\n background: #fe8;\n background: linear-gradient(to top, #fe8, transparent);\n}\n#notes a, #walkthrough_l a { color: #000; transition: 0.5s; }\n#notes a:hover, #walkthrough_l a:hover { color: #402; }\n\n#notes { right: 3em; width: 15em; }\n#walkthrough_l { right: 20em; width: 15em; }\n\n.meta a.internalLink { color: #4d6ad8; transition: none; }\n.meta a.internalLink:hover { color: #8ea6ff; text-shadow: 0 0 transparent; text-decoration: underline; }\n\n#passageStart { text-align: center; }\n.cc { text-align: center; }\n.error { color: #e41; }\n\nh1 { margin-top: 3em; margin-bottom: 0; }\nh2 { margin: 0; text-indent: 1em; font-weight: normal; font-size: 110%; color: #aaa; }\n#passageStart ul.title { padding: 0; }\nul.title li { margin: 0; }\n.passage { margin-bottom: 0; }\n.passage ul { margin-top: 0; padding-top: 0; }\n#passages .passage li { margin-right: 0; }\n\n\n\n#notes {display: block; position: fixed; bottom: 0; right: 3em; width: 15em; height: 3em; line-height: 3em; text-align: center; background: linear-gradient(to top, #fe8, transparent);\n}\n#notes a { color: #000; }\n\ntable .toggleContainer { display: block; }\n\n.meta { color: #ddd; font-family: monospace; }\ndiv.meta { margin: 1em 0 1em 1em; padding-left: 0.5em; border-left: 4px solid #aaa; }
(function(){\n version.extensions.replaceMacrosCombined={major:1,minor:1,revision:7};\n var nullobj={handler:function(){}};\n function showVer(n,notrans){\n if(!n){return;}n.innerHTML="";\n new Wikifier(n,n.tweecode);\n n.setAttribute("data-enabled","true");\n n.style.display="inline";\n n.classList.remove("revision-span-out");\n if(!notrans) {\n n.classList.add("revision-span-in");\n if(n.timeout){\n clearTimeout(n.timeout);\n }\n n.timeout=setTimeout(function(){n.classList.remove("revision-span-in");n=null;},20);\n }\n }\n function hideVer(n,notrans){\n if(!n){return;}\n n.setAttribute("data-enabled","false");n.classList.remove("revision-span-in");if(n.timeout){clearTimeout(n.timeout);}\n if(!notrans){\n n.classList.add("revision-span-out");\n n.timeout=setTimeout(function(){\n if(n.getAttribute("data-enabled")=="false"){\n n.classList.remove("revision-span-out");\n n.style.display="none";\n n.innerHTML="";\n }\n n=null;\n },1000);\n }else{\n n.style.display="none";n.innerHTML="";n=null;\n }\n}\n\nfunction tagcontents(b,starttags,desttags,endtags,k){var l=0,c="",tg,a,i;function tagfound(i,e,endtag){for(var j=0;\nj<e.length;j++){if(a.indexOf("<<"+e[j]+(endtag?">>":""),i)==i){return e[j];}}}a=b.source.slice(k);for(i=0;i<a.length;i++){if(tg=tagfound(i,starttags)){l++;}else{if((tg=tagfound(i,desttags,true))&&l==0){b.nextMatch=k+i+tg.length+4;\nreturn[c,tg];}else{if(tg=tagfound(i,endtags,true)){l--;if(l<0){return null;}}}}c+=a.charAt(i);}return null;}\n\nvar begintags=[];\nvar endtags=[];\nfunction revisionSpanHandler(g,e,f,b){var k=b.source.indexOf(">>",b.matchStart)+2,vsns=[],vtype=e,flen=f.length,becomes,c,cn,m, h,vsn;\nfunction mkspan(vtype){h=insertElement(m,"span",null,"revision-span "+vtype);h.setAttribute("data-enabled",false);h.style.display="none";h.tweecode="";return h;}if(this.shorthand&&flen){while(f.length>0){vsns.push([f.shift(),(this.flavour=="insert"?"gains":"becomes")]);\n}}else{if(this.flavour=="insert"||(this.flavour=="continue"&&this.trigger=="time")){vsns.push(["","becomes"]);}}if(this.flavour=="continue"&&flen){b.nextMatch=k+b.source.slice(k).length;\nvsns.push([b.source.slice(k),vtype]);}else{becomes=["becomes","gains"];c=tagcontents(b,begintags,becomes.concat(endtags),endtags,k);if(c&&endtags.indexOf(c[1])==-1){while(c){vsns.push(c);\nc=tagcontents(b,begintags,becomes,endtags,b.nextMatch);}c=tagcontents(b,begintags,["end"+e],endtags,b.nextMatch);}if(!c){throwError(g,"can't find matching end"+e);\nreturn;}vsns.push(c);if(this.flavour=="continue"){k=b.nextMatch;b.nextMatch=k+b.source.slice(k).length;vsns.push([b.source.slice(k),""]);}}if(this.flavour=="remove"){vsns.push(["","becomes"]);\n}cn=0;m=insertElement(g,"span",null,e);m.setAttribute("data-flavour",this.flavour);h=mkspan("initial");vsn=vsns.shift();h.tweecode=vsn[0];showVer(h,true);while(vsns.length>0){if(vsn){vtype=vsn[1];\n}vsn=vsns.shift();h=mkspan(vtype);h.tweecode=vsn[0];}if(typeof this.setup=="function"){this.setup(m,g,f);}}\n\nfunction quantity(m){return(m.children.length-1)+(m.getAttribute("data-flavour")=="remove");\n}\n\nfunction revisionSetup(m,g,f){m.className+=" "+f[0].replace(" ","_");}\nfunction keySetup(m,g,f){\n var key=f[0];m.setEventListener("keydown",function l(e){var done=!revise("revise",m);\n if(done){m.removeEventListener("keydown",l);}});\n}\nfunction timeSetup(m,g,f){function cssTimeUnit(s){if(typeof s=="string"){if(s.slice(-2).toLowerCase()=="ms"){return Number(s.slice(0,-2))||0;\n}else{if(s.slice(-1).toLowerCase()=="s"){return Number(s.slice(0,-1))*1000||0;}}}throwError(g,s+" isn't a CSS time unit");return 0;}var tm=cssTimeUnit(f[0]);var s=state.history[0].passage.title;\nsetTimeout(function timefn(){if(state.history[0].passage.title==s){var done=!revise("revise",m);if(!done){setTimeout(timefn,tm);}}},tm);}\n\nfunction hoverSetup(m){var fn,noMouseEnter=(document.head.onmouseenter!==null),m1=m.children[0],m2=m.children[1],gains=m2.className.indexOf("gains")>-1;\nif(!m1||!m2){return;}m1.onmouseenter=function(e){var efp=document.elementFromPoint(e.clientX,e.clientY);while(efp&&efp!==this){efp=efp.parentNode;}if(!efp){return;\n}if(this.getAttribute("data-enabled")!="false"){revise("revise",this.parentNode);}};m2.onmouseleave=function(e){var efp=document.elementFromPoint(e.clientX,e.clientY);\nwhile(efp&&efp!==this){efp=efp.parentNode;}if(efp){return;}if(this.getAttribute("data-enabled")!="false"){revise("revert",this.parentNode);}};if(gains){m1.onmouseleave=m2.onmouseleave;\n}if(noMouseEnter){fn=function(n){return function(e){if(!event.relatedTarget||(event.relatedTarget!=this&&!(this.compareDocumentPosition(event.relatedTarget)&Node.DOCUMENT_POSITION_CONTAINED_BY))){this[n]();\n}};};m1.onmouseover=fn("onmouseenter");m2.onmouseout=fn("onmouseleave");if(gains){m1.onmouseout=m2.onmouseout;}}m=null;}\n\nfunction mouseSetup(m){\n var evt=(document.head.onmouseenter===null?"onmouseenter":"onmouseover");\n m[evt]=function(){\n var done=!revise("revise",this);if(done){this[evt]=null;}\n };\n m=null;\n}\n\nfunction linkSetup(m,g,f){\n var l=Wikifier.createInternalLink(),p=m.parentNode;\n l.className="internalLink replaceLink";\n p.insertBefore(l,m);\n l.insertBefore(m,null);\n l.onclick=function(){\n var p,done=false;\n if(m&&m.parentNode==this){\n done=!revise("revise",m);\n /* console.log (m);\n scrollWindowTo(m); */\n let l = document.querySelectorAll (".askd");\n scrollWindowTo(l[l.length-1]);\n }\n if(done){\n this.parentNode.insertBefore(m,this);\n this.parentNode.removeChild(this);\n }\n };\n l=null;\n}\n\nfunction visitedSetup(m,g,f){\n var i,done,shv=state.history[0].variables,os="once seen",d=(m.firstChild&&(this.flavour=="insert"?m.firstChild.nextSibling:m.firstChild).tweecode);\n shv[os]=shv[os]||{};\n if(d&&!shv[os].hasOwnProperty(d)){shv[os][d]=1;}else{for(i=shv[os][d];i>0&&!done;i--){done=!revise("revise",m,true);}if(shv[os].hasOwnProperty(d)){shv[os][d]+=1;\n}}}\n\n[{name:"insert",flavour:"insert",trigger:"link",setup:linkSetup}\n,{name:"timedinsert",flavour:"insert",trigger:"time",setup:timeSetup}\n,{name:"insertion",flavour:"insert",trigger:"revisemacro",setup:revisionSetup}\n,{name:"later",flavour:"insert",trigger:"visited",setup:visitedSetup}\n,{name:"keyinsert",flavour:"insert",trigger:"key",setup:keySetup}\n,{name:"replace",flavour:"replace",trigger:"link",setup:linkSetup}\n,{name:"timedreplace",flavour:"replace",trigger:"time",setup:timeSetup}\n,{name:"mousereplace",flavour:"replace",trigger:"mouse",setup:mouseSetup}\n,{name:"hoverreplace",flavour:"replace",trigger:"hover",setup:hoverSetup}\n,{name:"revision",flavour:"replace",trigger:"revisemacro",setup:revisionSetup}\n,{name:"keyreplace",flavour:"replace",trigger:"key",setup:keySetup}\n,{name:"timedremove",flavour:"remove",trigger:"time",setup:timeSetup}\n,{name:"mouseremove",flavour:"remove",trigger:"mouse",setup:mouseSetup}\n,{name:"hoverremove",flavour:"remove",trigger:"hover",setup:hoverSetup}\n,{name:"removal",flavour:"remove",trigger:"revisemacro",setup:revisionSetup}\n,{name:"once",flavour:"remove",trigger:"visited",setup:visitedSetup}\n,{name:"keyremove",flavour:"remove",trigger:"key",setup:keySetup}\n,{name:"continue",flavour:"continue",trigger:"link",setup:linkSetup}\n,{name:"timedcontinue",flavour:"continue",trigger:"time",setup:timeSetup}\n,{name:"mousecontinue",flavour:"continue",trigger:"mouse",setup:mouseSetup}\n,{name:"keycontinue",flavour:"continue",trigger:"key",setup:keySetup}\n,{name:"cycle",flavour:"cycle",trigger:"revisemacro",setup:revisionSetup}\n,{name:"mousecycle",flavour:"cycle",trigger:"mouse",setup:mouseSetup}\n,{name:"timedcycle",flavour:"cycle",trigger:"time",setup:timeSetup}\n,{name:"keycycle",flavour:"replace",trigger:"key",setup:keySetup}\n].forEach(function(e){\n e.handler=revisionSpanHandler;\n e.shorthand=(["link","mouse","hover"].indexOf(e.trigger)>-1);\n macros[e.name]=e;\n macros["end"+e.name]=nullobj;\n begintags.push(e.name);\n endtags.push("end"+e.name);\n });\n\nfunction insideDepartingSpan(elem){var r=elem.parentNode;\nwhile(!r.classList.contains("passage")){if(r.classList.contains("revision-span-out")){return true;}r=r.parentNode;}}function reviseAll(rt,rname){var rall=document.querySelectorAll(".passage [data-flavour]."+rname),ret=false;\nfor(var i=0;i<rall.length;i++){if(!insideDepartingSpan(rall[i])){ret=revise(rt,rall[i])||ret;}}return ret;}function revise(rt,r,notrans){var ind2,curr,next,ind=-1,rev=(rt=="revert"),rnd=(rt.indexOf("random")>-1),fl=r.getAttribute("data-flavour"),rc=r.childNodes,cyc=(fl=="cycle"),rcl=rc.length-1;\nfunction doToGainerSpans(n,fn){for(var k=n-1;k>=0;k--){if(rc[k+1].classList.contains("gains")){fn(rc[k],notrans);}else{break;}}}for(var k=0;k<=rcl;k++){if(rc[k].getAttribute("data-enabled")=="true"){ind=k;\n}}if(rev){ind-=1;}curr=(ind>=0?rc[ind]:(cyc?rc[rcl]:null));ind2=ind;if(rnd){ind2=(ind+(Math.floor(Math.random()*rcl)))%rcl;}next=((ind2<rcl)?rc[ind2+1]:(cyc?rc[0]:null));\nvar docurr=(rev?showVer:hideVer);var donext=(rev?hideVer:showVer);var currfn=function(){if(!(next&&next.classList.contains("gains"))||rnd){docurr(curr,notrans);doToGainerSpans(ind,docurr,notrans);\n}};var nextfn=function(){donext(next,notrans);if(rnd){doToGainerSpans(ind2+1,donext,notrans);}};if(!rev){currfn();nextfn();}else{nextfn();currfn();}return(cyc?true:(rev?(ind>0):(ind2<rcl-1)));\n}macros.revert=macros.revise=macros.randomise=macros.randomize={handler:function(a,b,c){var l,rev,rname;function disableLink(l){l.style.display="none";}function enableLink(l){l.style.display="inline";\n}function updateLink(l){if(l.className.indexOf("random")>-1){enableLink(l);return;}var rall=document.querySelectorAll(".passage [data-flavour]."+rname),cannext,canprev,i,ind,r,fl;\nfor(i=0;i<rall.length;i++){r=rall[i],fl=r.getAttribute("data-flavour");if(insideDepartingSpan(r)){continue;}if(fl=="cycle"){cannext=canprev=true;}else{if(r.firstChild.getAttribute("data-enabled")==!1+""){canprev=true;\n}if(r.lastChild.getAttribute("data-enabled")==!1+""){cannext=true;}}}var can=(l.classList.contains("revert")?canprev:cannext);(can?enableLink:disableLink)(l);}function toggleText(w){w.classList.toggle(rl+"Enabled");\nw.classList.toggle(rl+"Disabled");w.style.display=((w.style.display=="none")?"inline":"none");}var rl="reviseLink";if(c.length<2){throwError(a,b+" macro needs 2 parameters");\nreturn;}rname=c.shift().replace(" ","_");l=Wikifier.createInternalLink(a,null);l.className="internalLink "+rl+" "+rl+"_"+rname+" "+b;var v="";var end=false;var out=false;\nif(c.length>1&&c[0][0]=="$"){v=c[0].slice(1);c.shift();}switch(c[c.length-1]){case"end":end=true;c.pop();break;case"out":out=true;c.pop();break;}var h=state.history[0].variables;\nfor(var i=0;i<c.length;i++){var on=(i==Math.max(c.indexOf(h[v]),0));var d=insertElement(null,"span",null,rl+((on)?"En":"Dis")+"abled");if(on){h[v]=c[i];l.setAttribute("data-cycle",i);\n}else{d.style.display="none";}insertText(d,c[i]);l.appendChild(d);}l.onclick=function(){reviseAll(b,rname);var t=this.childNodes,u=this.getAttribute("data-cycle")-0,m=t.length,n,lall,i;\nif((end||out)&&u>=m-(end?2:1)){if(end){n=this.removeChild(t[u+1]||t[u]);n.className=rl+"End";n.style.display="inline";this.parentNode.replaceChild(n,this);}else{this.parentNode.removeChild(this);\nreturn;}}else{toggleText(t[u]);u=(u+1)%m;if(v){h[v]=c[u];}toggleText(t[u]);this.setAttribute("data-cycle",u);}lall=document.getElementsByClassName(rl+"_"+rname);\nfor(i=0;i<lall.length;i++){updateLink(lall[i]);}};disableLink(l);setTimeout((function(l){return function(){updateLink(l);};}(l)),1);l=null;}};macros.mouserevise=macros.hoverrevise={handler:function(a,b,c,d){var endtags=["end"+b],evt=(window.onmouseenter===null?"onmouseenter":"onmouseover"),t=tagcontents(d,[b],endtags,endtags,d.source.indexOf(">>",d.matchStart)+2);\nif(t){var rname=c[0].replace(" ","_"), h=insertElement(a,"span",null,"hoverrevise hoverrevise_"+rname),f=function(){var done=!reviseAll("revise",rname);if(b!="hoverrevise"&&done){this[evt]=null;\n}};new Wikifier(h,t[0]);if(b=="hoverrevise"){h.onmouseover=f;h.onmouseout=function(){reviseAll("revert",rname);};}else{h[evt]=f;}h=null;}}};macros.instantrevise={handler:function(a,b,c,d){reviseAll("revise",c[0].replace(" ","_"));\n}};macros.endmouserevise=nullobj;macros.endhoverrevise=nullobj;\n}());