The deal is swift, despite his worst efforts to needlessly prolong it. You get a stack of $50 bills. He doesn't tell you how many, and you don't want to count in front of him, but you trust it's enough to get you through this time.\n\nHe high-tails out, and you decide to wait another half-hour before leaving, just in case. You quietly shiver behind the shelter as the clouds part and the full moon emerges. Finally, your decision to wait for the brightest night sky hasn't entirely come to naught.\n\nWhile waiting, your mind turns to spurious thoughts. In 100 years, will your own bones be plundered by your own distant descendants? You've long given up on leaving any real, substantial inheritance, on the lofty dream of escaping your family's impoverished state, so it seems only fair that your only remains, your physical body, be picked apart and milled to nothing. No trace left of you in the world - no trace that your life was ever lived, or that this night ever came to pass. Or that your great-great aunt ever lived either, come to think of it.\n\nFamily history devouring family history. The present constantly consuming its past. What an ephemeral world to be born in.\n\nAh... it feels safe to [[get home now|home]].
Ten past midnight. The cold makes the air feel thick as water. <<insert "A fine time to be out">> in <<insert "not quite thick enough clothes">>, carrying a <<insert "pick and shovel">>, <<insert "walking slowly">>, <<insert "looking every which way every couple of footsteps">>\n\nYou see, you're going to [[break the law|lawbreaker]]<<endinsert>><<endinsert>><<endinsert>><<endinsert>><<endinsert>>!
(function () {\n version.extensions['replaceMacro'] = {\n major: 1,\n minor: 2,\n revision: 1\n };\n macros['insert'] = macros['replace'] = {\n handler: function (g, e, f, b) {\n var h = insertElement(null, "span", null, "replacement");\n var k = b.source.indexOf('>>', b.matchStart) + 2;\n var a = b.source.slice(k);\n var d = -1;\n var c = '';\n var l = 0;\n var el = e.length\n for(var i = 0; i < a.length; i++) {\n if(a.substr(i, 7 + el) == '<<end' + e + '>>') {\n if(l == 0) {\n d = k + i + 7 + el;\n break;\n }\n else {\n l--;\n c += a.charAt(i);\n }\n }\n else {\n if(a.substr(i, 2 + el) == '<<' + e) {\n l++;\n }\n c += a.charAt(i);\n }\n }\n if(d != -1) {\n var m = Wikifier.createInternalLink(g, null);\n m.className = "internalLink replaceLink";\n insertText(m, f[0]);\n insertText(h, c);\n g.appendChild(h);\n = "none";\n m.onclick = function () {\n var n = this.nextSibling;\n if(n) {\n var t = n.firstChild ? n.firstChild.nodeValue : "";\n removeChildren(n);\n new Wikifier(n, t);\n = "inline";\n n.classList.add("replacement-in");\n setTimeout(function () {\n n.classList.remove("replacement-in");\n }, 1);\n scrollWindowTo(n);\n }\n if(e == "insert") {\n var p = document.createElement("span");\n p.innerHTML = this.innerHTML;\n p.className = this.className + " disabled";\n this.parentNode.insertBefore(p, this.nextSibling);\n }\n this.parentNode.removeChild(this);\n }\n b.nextMatch = d;\n }\n else {\n throwError(g, "can't find matching end" + e);\n return;\n }\n }\n }\n macros['endinsert'] = macros['endreplace'] = {\n handler: function () {}\n }\n scrollWindowTo = function (E) {\n var D = window.scrollY ? window.scrollY : document.body.scrollTop;\n var G = J(E);\n if(!G) return;\n var C = Math.abs(D - G);\n var B = 0;\n var I = (D > G) ? -1 : 1;\n var F = window.setInterval(H, 25);\n\n function H() {\n B += 0.1;\n window.scrollTo(0, D + I * (C * Math.easeInOut(B)));\n if(B >= 1) {\n window.clearInterval(F)\n }\n }\n\n function J(N) {\n var O = A(N);\n var P = O + N.offsetHeight;\n var K = window.scrollY ? window.scrollY : document.body.scrollTop;\n var L = window.innerHeight ? window.innerHeight : document.body.clientHeight;\n var M = K + L;\n if(O >= K) {\n if(P > M) {\n if(N.offsetHeight < L) {\n return(O - (L - N.offsetHeight) + 20)\n }\n else {\n return O;\n }\n }\n }\n }\n\n function A(K) {\n var L = 0;\n while(K.offsetParent) {\n L += K.offsetTop;\n K = K.offsetParent;\n }\n return L\n }\n }\n}());\n\n(function () {\n version.extensions['revisionMacros'] = {\n major: 1,\n minor: 1,\n revision: 0\n };\n\n function tagcontents(b, starttags, desttags, endtags, k) {\n function tagfound(i, e) {\n for (var j = 0; j < e.length; j++) {\n if (a.indexOf(e[j], i) == i) {\n return e[j];\n }\n }\n }\n var a = b.source.slice(k);\n var l = 0;\n var c = "";\n var tg;\n for (var i = 0; i < a.length; i++) {\n if (tg = tagfound(i, starttags)) {\n l++;\n }\n else if ((tg = tagfound(i, desttags)) && l == 0) {\n b.nextMatch = k + i + tg.length;\n return [c, tg];\n }\n else if (tg = tagfound(i, endtags)) {\n l--;\n if (l < 0) {\n return null;\n }\n }\n c += a.charAt(i);\n }\n return null;\n }\n macros['cycle'] = macros['insertion'] = macros['removal'] = macros['revision'] = macros['span'] = {\n handler: function (g, e, f, b) {\n var begintags = ["<<revision", "<<cycle", "<<insertion", "<<removal", "<<span"];\n var becomes = ["<<becomes>>", "<<gains>>"];\n var endtags = ["<<endrevision>>", "<<endcycle>>", "<<endinsertion>>", "<<endremoval>>", "<<endspan>>"];\n var name = f[0].replace(" ", "_");\n var k = b.source.indexOf('>>', b.matchStart) + 2;\n var c, vsns, vsn, i, cn, vtype;\n vsns = [];\n c = tagcontents(b, begintags, becomes.concat(endtags), endtags, k);\n if (c && endtags.indexOf(c[1]) == -1) {\n while (c) {\n vsns.push(c);\n c = tagcontents(b, begintags, becomes, endtags, b.nextMatch);\n }\n c = tagcontents(b, begintags, ["<<end" + e + ">>"], endtags, b.nextMatch);\n }\n if (!c) {\n throwError(g, "can't find matching end" + e);\n return;\n }\n vsns.push(c);\n i = 0;\n cn = 0;\n m = insertElement(g, "span", null, e + " " + name);\n if (vsns.length > 0) {\n h = insertElement(m, "span", null, "revision-span initial");\n }\n else {\n h = m;\n }\n if (e == "insertion") {\n = "none";\n }\n h.setAttribute("data-enabled", (e != "insertion") + "");\n vsn = vsns.shift();\n h.tweecode = vsn[0];\n while (vsns.length > 0) {\n i += 1;\n vtype = vsn[1].slice(2, -2);\n vsn = vsns.shift();\n h = insertElement(m, "span", null, "revision-span " + vtype);\n h.tweecode = vsn[0];\n h.setAttribute("data-enabled", "false");\n = "none";\n }\n h = m.firstChild;\n new Wikifier(h, h.tweecode);\n }\n }\n var de = "data-enabled";\n\n function revise(rt, rname) {\n var rall, r, rc, rcl, ind, ind2, curr, next, ins, rmv, cyc, rev, rnd;\n rev = (rt == "revert");\n rnd = (rt.indexOf("random") > -1);\n var rsp = "revision-span";\n\n function showVer(n) {\n n.innerHTML = "";\n new Wikifier(n, n.tweecode);\n n.setAttribute(de, "true");\n = "inline";\n n.classList.remove(rsp + "-out");\n n.classList.add(rsp + "-in");\n if (n.timeout) clearTimeout(n.timeout);\n n.timeout = setTimeout(function () {\n n.classList.remove(rsp + "-in");\n }, 1);\n }\n\n function hideVer(n) {\n n.setAttribute(de, "false");\n n.classList.remove(rsp + "-in");\n n.classList.add(rsp + "-out");\n if (n.timeout) clearTimeout(n.timeout);\n n.timeout = setTimeout(function () {\n if (n.getAttribute(de) == "false") {\n n.classList.remove(rsp + "-out");\n = "none";\n n.innerHTML = "";\n }\n }, 1000);\n }\n\n function doToGainerSpans(n, fn) {\n for (var k = n - 1; k >= 0; k--) {\n if (rc[k + 1].classList.contains("gains")) {\n fn(rc[k]);\n }\n else break;\n }\n }\n rall = document.getElementsByClassName(rname);\n for (var i = 0; i < rall.length; i++) {\n r = rall[i];\n rc = r.childNodes;\n ins = r.classList.contains("insertion");\n rmv = r.classList.contains("removal");\n cyc = r.classList.contains("cycle");\n rcl = rc.length - 1;\n ind = -1;\n for (var k = 0; k <= rcl; k++) {\n if (rc[k].getAttribute(de) == "true") {\n ind = k;\n }\n }\n if (ind == -1) {\n if (ins) {\n ind = -1;\n curr = null;\n }\n else if (rmv) {\n ind = rcl + 1;\n curr = null;\n }\n }\n else {\n if (rev) {\n ind -= 1;\n }\n curr = (ind >= 0 ? rc[ind] : (cyc ? rc[rcl] : null));\n }\n ind2 = ind;\n if (rnd) {\n ind2 = (ind + (Math.floor(Math.random() * rcl))) % rcl;\n }\n next = (ind2 < rcl ? rc[ind2 + 1] : (cyc ? rc[0] : null));\n var docurr = (rev ? showVer : hideVer);\n var donext = (rev ? hideVer : showVer);\n if (curr) {\n if (!(next && next.classList.contains("gains")) || rnd) {\n docurr(curr);\n doToGainerSpans(ind, docurr);\n }\n }\n if (next) {\n donext(next);\n if (rnd) {\n doToGainerSpans(ind2 + 1, donext);\n }\n }\n }\n }\n\n macros['revert'] = macros['revise'] = macros['randomise'] = macros['randomize'] = {\n handler: function (a, b, c) {\n var l, rev, rname;\n\n function disableLink(l) {\n = "none";\n }\n\n function enableLink(l) {\n = "inline";\n }\n\n function updateLink(l) {\n if (l.className.indexOf("random") > -1) {\n enableLink(l);\n return;\n }\n var rall = document.getElementsByClassName(rname);\n var cannext, canprev;\n for (var i = 0; i < rall.length; i++) {\n var r = rall[i];\n if (r.classList.contains("cycle")) {\n cannext = canprev = true;\n }\n else {\n var rc = r.childNodes;\n var rcl = rc.length;\n var ins = r.classList.contains("insertion");\n var rmv = r.classList.contains("removal");\n var rnd = rname.indexOf("random") > -1;\n var ind = -1;\n for (var k = 0; k < rc.length; k++) {\n if (rc[k].getAttribute(de) == "true") {\n ind = k;\n }\n }\n if (ind == -1 && (ins || rmv)) {\n (ins ? cannext = true : canprev = true);\n }\n if (ind > (ins ? -1 : 0)) {\n canprev = true;\n }\n if (ind > -1 && ind < (rmv ? rcl : rcl - 1)) {\n cannext = true;\n }\n }\n }\n var can = (l.classList.contains("revert") ? canprev : cannext);\n (can ? enableLink : disableLink)(l);\n }\n\n rname = c[0].replace(" ", "_");\n if (c.length < 2) {\n throwError(a, b + ' macro needs 2 parameters');\n return;\n }\n l = Wikifier.createInternalLink(a, null);\n l.className = "internalLink reviseLink reviseLink_" + rname + " " + b;\n insertText(l, c[1]);\n l.onclick = function () {\n revise(b, rname);\n var lall = document.getElementsByClassName("reviseLink_" + rname);\n for (var i = 0; i < lall.length; i++) {\n updateLink(lall[i]);\n }\n if (c[2]=="out") { disableLink(l); }\n };\n disableLink(l);\n setTimeout(function () {\n updateLink(l);\n }, 1);\n }\n }\n macros['hoverrevise'] = {\n handler: function (a, b, c, d) {\n var endtags = ["<<end" + b + ">>"];\n var t = tagcontents(d, ["<<" + b + ">>"], endtags, endtags, d.source.indexOf('>>', d.matchStart) + 2);\n if (t) {\n var rname = c[0].replace(" ", "_");\n h = insertElement(a, "span", null, "hoverrevise hoverrevise_" + rname);\n new Wikifier(h, t[0]);\n h.onmouseover = function () {\n revise("revise", rname);\n }\n h.onmouseout = function () {\n revise("revert", rname);\n }\n }\n }\n }\n macros['becomes'] = macros['gains'] = macros['endrevision'] = macros['endinsertion'] = macros['endremoval'] = macros[\n 'endcycle'] = macros['endhoverrevise'] = {\n handler: function () {}\n }\n\n}());\n\{var a="";for(var b=this.history.length-1;b>=0;\nb--){if((this.history[b].passage)&&(this.history[b]{a+=this.history[b]".";\n}}this.history[0].hash="#"+a.substr(0,a.length-1);if(this.hash){return"";}this.hash=this.history[0].hash;\nreturn this.hash;};History.prototype.restart=function(){window.location.reload();\n};macros["return"]=macros.back={handler:function(a,b,e){var f=RegExp(String.fromCharCode(92)+".","g");\nvar c="";var d="";var f="";if(e[0]){if(e[1]=="steps"){if(isNaN(e[0])){throwError(a,"parameter before 'steps' must be a number.");\nreturn;}else{if(e[0]<state.history[0].hash.match(f).length){d=state.history[e[0]].passage.title;\n}}}else{if(tale.get(e[0]).id==undefined){throwError(a,"The "+e[0]+" passage does not exist");\nreturn;}h=tale.get(e[0]);h=new RegExp("("+f.toString()+"|#)";if(h.test(state.history[1].hash)){d=e[0];\n}}}else{d=state.history[1].passage.title;}if(!d){return;}else{el=document.createElement("a");\nel.className="return";el.onclick=function(){state.display(d,el);};\nel.href="javascript:void(0)";el.innerHTML="<b>«</b> "+b[0].toUpperCase()+b.slice(1);\na.appendChild(el);}}};\n\nString.prototype.unDash = function()\n{\n var s = this.split("-");\n if(s.length > 1)\n for(var t=1; t<s.length; t++)\n s[t] = s[t].substr(0,1).toUpperCase() + s[t].substr(1);\n return s.join("");\n}
The journey back is swift and unmemorable. You find yourself waiting behind a bus stop shelter, for that man to come.\n\n<<revise r "Rub your hands to keep warm." out>>\n<<revise r "Worry about how much you'll get out of this." out>>\n<<revise r "Think about how afraid you are of being arrested." out>>\n\n<<insertion r>>Still waiting...<<becomes>>Still not here yet...<<becomes>>Still waiting...<<becomes>>[[Someone's coming.|Someone]]<<endinsertion>>\n
You can't recall why, but bones that rest in Black Hill slowly turn to gold. Over the years, even under the law's watchful gaze, the old cemetery here has been completely plundered. \n\nOr so they thought - but you got word your great-great aunt yet remained in peace, in this far corner, plot unmarked due to her mixed marriage.\n\nAnd by [[the looks of things|Bones]], she's become the only inheritance you'll ever see.
Here we go. Twenty feet from that ugly tree, and thirty feet from that even uglier tree.\n\nThe bare soil feels stiff underfoot. It only rained a little this morning, but you couldn't wait any longer. Better break it up with the pick.\n\nFlick off the torch, drop the shovel, take the pick, <<insert "swing...">>\n\n//"Oww!"//\n\n\nAw, blast. Forgot to [[anaesthetise]] the ground.<<endinsert>>\n
[[Other Games|]]\n[[Source|]]
You unscrew your thermos, and empty thick engine oil on the dig site. It's known to numb the soil almost as easily as the store-bought gardening agents.\n\nThe fumes are not a welcome addition to this already oppressive situation. You try to keep your gasps of freezing air fresh as you wind up another [[swing...|Digging]]
''GRAVEDIG.TWS''\nby Leon Arnott\n\n[[Begin]]\n[[Quit|]]
You dislike this man a lot.\n\nYou dislike how he shaves his copious facial hair to make his head appear perfectly rectangular. How does he do it? Why does he bother? Who is he out to impress in this aged, rundown town? You also hate the way he chuckles and talks down to you like you're his talented son or something. You're a decade his senior and at least a foot taller. \n\nBut what you dislike the most is how he seems to have no fear of the law. Here he comes, shouting "Hey sport, you there?" at the top of his lungs, like he wasn't a dealer in gilded human remains about to cart away a man's aunt and mill her down to powder and flecks.\n\nNevertheless, [[here he is|Deal]].
#share, #credits, #snapback { display: none !important; }\n.passage {\n color:rgba(0,0,0,0) !important;\n text-shadow: #bbb 0 0 0.1em, #bbb 0 0 1em;\n}\n#passages {\n border-left: 0;\n border-left: 0;\n margin-left: 18em;\n margin-top: 6em;\n}\nhtml {\n height:100%;\n height:100vh;\n}\nbody {\n font-size: 0.9em;\n background-repeat: no-repeat;\n background-image: -webkit-linear-gradient(top, #000000 0%,#353535 57%,#1e1e1e 64%,#000000 100%);\n background-image: linear-gradient(to bottom, #000000 0%,#353535 57%,#1e1e1e 64%,#000000 100%);\n}\na.internalLink, a.externalLink {\n color:rgba(0,0,0,0);\n text-shadow: silver 0 0 0.1em, silver 0 0 1em;\n}\na.internalLink:hover, a.externalLink:hover {\n color:rgba(255,255,255,0.5) !important;\n text-shadow: silver 0 0 0.1em, silver 0 0 1em;\n text-decoration:none;\n}\n#sidebar {\n top:0;\n left:0;\n padding-top: 4.2em;\n padding-left: 4.2em;\n width: 16em;\n height: 100%;\n background-image: -webkit-linear-gradient(left, rgba(0,0,0,1) 0%,rgba(0,0,0,0) 100%);\n background-image: linear-gradient(to right, rgba(0,0,0,1) 0%,rgba(0,0,0,0) 100%);\n}\n#sidebar, #sidebar #title, #sidebar a {\n color: rgba(0,0,0,0);\n text-shadow: #555 0 0 0.1em, #555 0 0 1em !important;\n}\n#sidebar #title:hover, #sidebar a.hover, #sidebar li:hover {\n color:rgba(255,255,255,0.25) !important;\n}\n#sidebar li {\n text-align: left;\n}\n@media screen and (max-width: 960px) {\n body {\n font-size: 0.8em;\n }\n #sidebar {\n padding-top: 3em;\n padding-left: 3em;\n width: 9em;\n }\n #passages {\n margin-left: 15em;\n }\n}\n@media screen and (max-width: 640px) {\n body {\n font-size: 0.8em;\n }\n #sidebar, #sidebar:hover {\n width: 100%;\n height: 6em;\n padding: 2em 1em 2em 2em;\n text-align:center;\n background-image: -webkit-linear-gradient(top, rgba(0,0,0,1) 0%,rgba(0,0,0,0) 100%);\n background-image: linear-gradient(to bottom, rgba(0,0,0,1) 0%,rgba(0,0,0,0) 100%);\n }\n #sidebar li { display:inline; margin-right: 2em; }\n #passages {\n margin: 14em 0 0 0em;\n }\n}\n\n/* Unique to this story: */\n\n.revision-span-in {\n opacity: 0;\n}\n.revision-span:not(.revision-span-out) {\n transition: 1.5s;\n -webkit-transition: 1.5s;\n}\n.revision-span-out {\n position:absolute;\n opacity: 0;\n}\n.replacement.replacement-in {\n opacity: 0;\n}\n.replacement {\n transition: 1.5s;\n -webkit-transition: 1.5s;\n}\n#passageDigging a.internalLink:not(.replaceLink) {\n color: gold;\n text-shadow: gold 0 0 0.15em, gold 0 0 1em;\n}\n#passageDigging a.internalLink:not(.replaceLink):hover {\n text-shadow: gold 0 0 0.1em, gold 0 0 1em;\n}
Swing, <<insert "hit...">>\n\n\n\nSwing, <<insert "hit...">>\n\n\n\nSwing, <<insert "hit...">>\nDrop the pick, take the shovel.\n\n\n\nShove, <<insert "scoop...">>\n\n\n\nShove, <<insert "scoop...">>\nYou can still smell those wretched oil fumes.\n\n\n\nShove, <<insert "scoop...">>\n\n\n\nShove, <<insert "scoop...">>\nGod, it's cold.\n\n\n\nShove, <<insert "scoop...">> [[Gold]].\n<<endinsert>><<endinsert>><<endinsert>><<endinsert>><<endinsert>><<endinsert>><<endinsert>><<endinsert>>
You trudge down <<insert "street after street">>\n\n<<insert "(ruing that man's choice of meeting place)">>\n\n <<insert "turn down your road,">>\n\n<<insert "step into your yard,">>\n\n<<insert "dump the pick and shovel,">>\n\n<<insert "go inside your cold, dark, house,">>\n\nand lock the door.<<endinsert>><<endinsert>><<endinsert>><<endinsert>><<endinsert>><<endinsert>>
Only a few gleaming veins have appeared in the brown bones, but it's enough. You carefully drag them from the soil's stinking grasp, and bundle them up in rags.\n\nNow, to fill in the hole. <<insert "Scoop,">> <<insert "scoop,">> <<insert "scoop,">> <<insert "pat,">> <<insert "pat,">> OK, that's good enough. Time to [[go.|Return]]<<endinsert>><<endinsert>><<endinsert>><<endinsert>><<endinsert>>
You step over the fence with some difficulty. Now you're trespassing. No going back now.\n\nWhere was the spot... You know it was between something and something else...\n\n<<replace "Turn on torch.">>\n<<revise p "Consult photograph." out>>\n<<revise p "Check map." out>>\n\n<<revision p>>You try and keep it as discreet as possible. Why did it have to be overcast tonight...<<becomes>>You think you can match it up with the environment around you...<<becomes>>OK, you know [[where to go.|Digsite]]<<endrevision>><<endreplace>>
Digging in Black Hill, let alone taking what you find, is strictly illegal.\n\nThat hill... it's coming into sight now.\n\n<<replace "Trudge, trudge.">>\n<<replace "Glance left.">>[[Glance right.|Approach]]\n<<endreplace>><<endreplace>>