<<stopallsound>><<playsound "12a.wav" >>"I dare say," said the Princess; "but you haven't so much milk as we, I'll be bound; for we milk our kine into great pails, and carry them in-doors, and empty them into great tubs, and so we make great, great cheeses."\n\n<div align="center"><img src="princesspeaks.png"></div>\n<<timedcontinue 15s>><div align="right">[img[blahblah.png][tldr]]</div><<timedgoto "Start" 80s >><<stopallsound>>\n
body {\nbackground: #263f6c;\nfont-size: 25px;\nfont-family: georgia;\ncolor: #FFFFFF;\n}\n\n.passage {\nbackground: #263f6c;\nfont-color: #FFFFFF;\nfont-size: 35px;\nline-height: 36px;\n}\n\n.passage img {\npadding: 5px;\n}\n\n.passage a:link, a:hover, a:visited {\n\nfont-decoration: none;\n}\n\n/*.passage a:hover { background-image: [img[next_glow.png]];\nwidth:149px; /*image width*/\nheight:37px; /*image height*/\n/*-webkit-transition: all 1s ease;\n-moz-transition: all 1s ease;\n-o-transition: all 1s ease;\ntransition: all 1s ease; } */\n\n\n\n\n.passage .title {\nfont-color: #4f1a0b;\n}\n\n.title {\n}\n\n.titleLine {\n\n}\n\n.storyMenu {\n\n}\n\n.storyAuthor {\n\n}\n\nheader .storyTitle {\n\n}\n\na.internalLink, a.externalLink, a.back, a.return {\ncolor: #FFFFFF;\nfont-weight: normal;\n}\n\na.internalLink:hover,a.externalLink:hover,a.back:hover {\ncolor: #FFFFFF;\nfont-weight: normal;\n}\n\n.footer {\n\n}\n\n.imgplacement {\nposition:relative;\nbottom:50px;\nright: 50px;\n}\n\n#sidebar {\ndisplay: none;\n}\n\n#passages\n{\n margin-left: -1em;\n border: 0;\n width: 100%;\n margin-top: -2em;\n}\n\n.revision-span-in {\n\topacity: 0;\n}\n.revision-span:not(.revision-span-out) {\n\ttransition: 1s; -webkit-transition: 1s;\n}\n.revision-span-out {\n\tposition:absolute;\n\topacity: 0;\n}\n\n.change-image{\nbackground-image:url("next.png");\nwidth:149px; /*image width*/\nheight:37px; /*image height*/\n-webkit-transition: all 1s ease;\n-moz-transition: all 1s ease;\n-o-transition: all 1s ease;\ntransition: all 1s ease;\n}\n.change-image:hover{\nbackground-image:url("next_glow.png");\n}\n\n\n\n.timedloop.replacement-in {\n\topacity: 0;\n}\n.timedloop {\n\ttransition: 1s;\n\t-webkit-transition: 1s;\n}\n.timedloop.replacement-out {\n\tdisplay:none;\n}\n\n @keyframes shakeit {\n0% { transform: translate(2px, 1px) rotate(0deg); }\n10% { transform: translate(-1px, -2px) rotate(-1deg); }\n20% { transform: translate(-3px, 0px) rotate(1deg); }\n30% { transform: translate(0px, 2px) rotate(0deg); }\n40% { transform: translate(1px, -1px) rotate(1deg); }\n50% { transform: translate(-1px, 2px) rotate(-1deg); }\n60% { transform: translate(-3px, 1px) rotate(0deg); }\n70% { transform: translate(2px, 1px) rotate(-1deg); }\n80% { transform: translate(-1px, -1px) rotate(1deg); }\n90% { transform: translate(2px, 2px) rotate(0deg); }\n100% { transform: translate(1px, -2px) rotate(-1deg); }\n}\n \n@-o-keyframes shakeit {\n0% { -o-transform: translate(2px, 1px) rotate(0deg); }\n10% { -o-transform: translate(-1px, -2px) rotate(-1deg); }\n20% { -o-transform: translate(-3px, 0px) rotate(1deg); }\n30% { -o-transform: translate(0px, 2px) rotate(0deg); }\n40% { -o-transform: translate(1px, -1px) rotate(1deg); }\n50% { -o-transform: translate(-1px, 2px) rotate(-1deg); }\n60% { -o-transform: translate(-3px, 1px) rotate(0deg); }\n70% { -o-transform: translate(2px, 1px) rotate(-1deg); }\n80% { -o-transform: translate(-1px, -1px) rotate(1deg); }\n90% { -o-transform: translate(2px, 2px) rotate(0deg); }\n100% { -o-transform: translate(1px, -2px) rotate(-1deg); }\n}\n \n@-webkit-keyframes shakeit {\n0% { -webkit-transform: translate(2px, 1px) rotate(0deg); }\n10% { -webkit-transform: translate(-1px, -2px) rotate(-1deg); }\n20% { -webkit-transform: translate(-3px, 0px) rotate(1deg); }\n30% { -webkit-transform: translate(0px, 2px) rotate(0deg); }\n40% { -webkit-transform: translate(1px, -1px) rotate(1deg); }\n50% { -webkit-transform: translate(-1px, 2px) rotate(-1deg); }\n60% { -webkit-transform: translate(-3px, 1px) rotate(0deg); }\n70% { -webkit-transform: translate(2px, 1px) rotate(-1deg); }\n80% { -webkit-transform: translate(-1px, -1px) rotate(1deg); }\n90% { -webkit-transform: translate(2px, 2px) rotate(0deg); }\n100% { -webkit-transform: translate(1px, -2px) rotate(-1deg); }\n}\n \n@-moz-keyframes shakeit {\n0% { -moz-transform: translate(2px, 1px) rotate(0deg); }\n10% { -moz-transform: translate(-1px, -2px) rotate(-1deg); }\n20% { -moz-transform: translate(-3px, 0px) rotate(1deg); }\n30% { -moz-transform: translate(0px, 2px) rotate(0deg); }\n40% { -moz-transform: translate(1px, -1px) rotate(1deg); }\n50% { -moz-transform: translate(-1px, 2px) rotate(-1deg); }\n60% { -moz-transform: translate(-3px, 1px) rotate(0deg); }\n70% { -moz-transform: translate(2px, 1px) rotate(-1deg); }\n80% { -moz-transform: translate(-1px, -1px) rotate(1deg); }\n90% { -moz-transform: translate(2px, 2px) rotate(0deg); }\n100% { -moz-transform: translate(1px, -2px) rotate(-1deg); }\n}\n \n.shake {\n-webkit-animation-name: shakeit;\n-webkit-animation-duration: 0.8s;\n-webkit-transform-origin:50% 50%;\n-webkit-animation-iteration-count: infinite;\n-webkit-animation-timing-function: linear;\n-moz-animation-name: shakeit;\n-moz-animation-duration: 0.8s;\n-moz-transform-origin:50% 50%;\n-moz-animation-iteration-count: infinite;\n-moz-animation-timing-function: linear;\n-o-animation-name: shakeit;\n-o-animation-duration: 0.8s;\n-o-transform-origin:50% 50%;\n-o-animation-iteration-count: infinite;\n-o-animation-timing-function: linear;\nanimation-name: shakeit;\nanimation-duration: 0.8s;\ntransform-origin:50% 50%;\nanimation-iteration-count: infinite;\nanimation-timing-function: linear;\n}\n.shake{\ndisplay:inline-block\n}\n\n.upsidedown\n{\n -moz-transform:rotate(-180deg); /* Firefox */\n -webkit-transform:rotate(-180deg); /* Webkit */ \n -ms-transform:rotate(-180deg); /* IE */\n -o-transform:rotate(-180deg); /* Opera */\n transform:rotate(-180deg); /* future */\n position:absolute;\n} \n\n.backward { \n display: inline-block;\n -moz-transform: scale(-1, 1); \n -webkit-transform: scale(-1, 1); \n transform: scale(-1, 1); \n}
macros['loadJS'] =\n{\nhandler: function(place, object, parameters)\n{\nvar se = document.createElement("script");\nse.type = 'text/javascript';\nse.src = parameters[0];\nvar hT = document.getElementsByTagName("HEAD")[0];\nhT.appendChild(se);\nif(se.innerText) {eval(se.innerText);}\nelse {eval(se.textContent);}\n}\n}\n\n
<<stopallsound>><<stopallsound>><<playsound "10a.wav" >> "I dare say!" said the Princess. "Well, but you haven't such a big ox, after all, as ours yonder; for when two men sit, one on each horn, they can't touch each other with a twenty-foot rule." \n\n<div align="center"><img src="princesspeaks.png"></div>\n<<timedcontinue 15s>><div align="right">[img[next.png][11]]\n[img[thisisboring.png][11a]]</div><<timedgoto "Start" 80s >>
<<stopallsound>><<stopallsound>><<playsound 'youmadeitworse.wav' >><div class="upsidedown"><span class="shake">But the sapling grew up into a small tree, that I climbed up into the heaven by it, and when I got there, I saw the Virgin Mary sitting and spinning the foam of the sea into pigs'-bristle ropes; but just then the spruce-fir broke short off, and I couldn't get down again; \n\n<div align="center"><span class="shake">[img[princesspeaks-princessupsidedown.png][17a]]</span></div></span></div>\n\n<div class="shake"><span class="backward">Y U CLICK DERE?\nu made it worse!</span></div>
<<stopallsound>>\n<div align="center">[img[title.png][introduction]]\n\n\n[[Click to Start|introduction]]\n</div><<timedcontinue 5s>>\n<<timedloop 15s>><<playsound either('humming.wav','testing.wav','anybodythere1.wav','anybodythere2.wav','sigh1.wav','dootdoot.wav','whistling.wav','please_desperate.wav','comeonnow.wav','didyouleave2.wav')>><<endtimedloop>>\n
<<stopallsound>><<stopallsound>><<playsound "14a.wav" >>"We had, too, a dun mare to tread the cheese well together when it was making; <span class="upsidedown">[[but once she tumbled down into the cheese, and we lost her; and after we had eaten at this cheese seven years, we came upon a great dun mare, alive and kicking."|15a]]</span>\n\n<div align="center">[img[bootsspeaks-princessupsidedown.png][15a]]</div>\n\n\n<<timedcontinue 18s>>[img[next.png][15]]\n
version.extensions.timedgotoMacro={major:1,minor:2,revision:0};\nmacros["goto"]=macros.timedgoto={timer:null,handler:function(a,b,c,d){function cssTimeUnit(s){if(typeof s=="string"){if(s.slice(-2).toLowerCase()=="ms"){return +(s.slice(0,-2))||0\n}else{if(s.slice(-1).toLowerCase()=="s"){return +(s.slice(0,-1))*1000||0\n}}}throwError(a,s+" isn't a CSS time unit");return 0}var t,d,m,s;\nt=c[c.length-1];d=d.fullArgs();m=0;if(b!="goto"){d=d.slice(0,d.lastIndexOf(t));\nm=cssTimeUnit(t)}d=eval(Wikifier.parse(d));if(d+""&&state&&state.init){if(macros["goto"].timer){clearTimeout(macros["goto"].timer)\n}s=state.history[0].passage.title;macros["goto"].timer=setTimeout(function(){if(state.history[0].passage.title==s){state.display(d,a)\n}},m)}}};
<<stopallsound>><<stopallsound>><<playsound "end_full.wav" >>\n\n\n<div align="center"><img src="theend.png"></div>\n<<timedcontinue 15s>>\n<div align="center">[img[restart.png][Start]]</div>\n
<<stopallsound>>\n\n<div align="center"><img src="crown.png" align="center"></div><<playsound "welcomeintro2.wav" >>\n<<timedcontinue 6s>><<playsound "norwegian.wav" >>\n<<timedgoto "intro2" 17s>>
<<stopallsound>><<playsound 'tldr.wav' >>How about I just give you a TL;DR summary?\n\n<div align="center"><img src="bootsandprincess-concerned.png"></div>\n<<timedcontinue 6s>>\n<div align="right">[img[ok.png][summary]]</div>
(function(){version.extensions.replaceMacrosCombined={major:1,minor:1,revision:4};var nullobj={handler:function(){}};function showVer(n,notrans){if(!n){return\n}n.innerHTML="";new Wikifier(n,n.tweecode);n.setAttribute("data-enabled","true");n.style.display="inline";n.classList.remove("revision-span-out");\nif(!notrans){n.classList.add("revision-span-in");if(n.timeout){clearTimeout(n.timeout)}n.timeout=setTimeout(function(){n.classList.remove("revision-span-in");\nn=null},1)}}function hideVer(n,notrans){if(!n){return}n.setAttribute("data-enabled","false");n.classList.remove("revision-span-in");\nif(n.timeout){clearTimeout(n.timeout)}if(!notrans){n.classList.add("revision-span-out");n.timeout=setTimeout(function(){if(n.getAttribute("data-enabled")=="false"){n.classList.remove("revision-span-out");\nn.style.display="none";n.innerHTML=""}n=null},1000)}else{n.style.display="none";n.innerHTML="";n=null}}function tagcontents(b,starttags,desttags,endtags,k){var l=0,c="",tg,a,i;\nfunction tagfound(i,e){for(var j=0;j<e.length;j++){if(a.indexOf("<<"+e[j],i)==i){return e[j]}}}a=b.source.slice(k);for(i=0;\ni<a.length;i++){if(tg=tagfound(i,starttags)){l++}else{if((tg=tagfound(i,desttags))&&l==0){b.nextMatch=k+i+tg.length+4;return[c,tg]\n}else{if(tg=tagfound(i,endtags)){l--;if(l<0){return null}}}}c+=a.charAt(i)}return null}var begintags=[];var endtags=[];function 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";\nh.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);\nif(c&&endtags.indexOf(c[1])==-1){while(c){vsns.push(c);c=tagcontents(b,begintags,becomes,endtags,b.nextMatch)}c=tagcontents(b,begintags,["end"+e],endtags,b.nextMatch)\n}if(!c){throwError(g,"can't find matching end"+e);return}vsns.push(c);if(this.flavour=="continue"){k=b.nextMatch;b.nextMatch=k+b.source.slice(k).length;\nvsns.push([b.source.slice(k),""])}}if(this.flavour=="remove"){vsns.push(["","becomes"])}cn=0;m=insertElement(g,"span",null,e);\nm.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)}}function quantity(m){return(m.children.length-1)+(m.getAttribute("data-flavour")=="remove")\n}function revisionSetup(m,g,f){m.className+=" "+f[0].replace(" ","_")}function keySetup(m,g,f){var key=f[0];m.setEventListener("keydown",function l(e){var done=!revise("revise",m);\nif(done){m.removeEventListener("keydown",l)}})}function 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");\nreturn 0}var tm=cssTimeUnit(f[0]);setTimeout(function timefn(){var done=!revise("revise",m);if(!done){setTimeout(timefn,tm)\n}},tm)}function hoverSetup(m){var fn,noMouseEnter=(document.head.onmouseenter!==null),m1=m.children[0],m2=m.children[1];if(!m1||!m2){return\n}m1.onmouseenter=function(e){if(this.getAttribute("data-enabled")!="false"){revise("revise",this.parentNode)}};m2.onmouseleave=function(e){if(this.getAttribute("data-enabled")!="false"){revise("revert",this.parentNode)\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")}m=null}function mouseSetup(m){var evt=(document.head.onmouseenter===null?"onmouseenter":"onmouseover");\nm[evt]=function(){var done=!revise("revise",this);if(done){this[evt]=null}};m=null}function linkSetup(m,g,f){var l=Wikifier.createInternalLink(),p=m.parentNode;\nl.className="internalLink replaceLink";p.insertBefore(l,m);l.insertBefore(m,null);l.onclick=function(){var p,done=false;if(m&&m.parentNode==this){done=!revise("revise",m);\nscrollWindowTo(m)}if(done){this.parentNode.insertBefore(m,this);this.parentNode.removeChild(this)}};l=null}function visitedSetup(m,g,f){var i,done,shv=state.history[0].variables,os="once seen",d=(m.firstChild&&(this.flavour=="insert"?m.firstChild.nextSibling:m.firstChild).tweecode);\nshv[os]=shv[os]||{};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)\n}if(shv[os].hasOwnProperty(d)){shv[os][d]+=1}}}[{name:"insert",flavour:"insert",trigger:"link",setup:linkSetup},{name:"timedinsert",flavour:"insert",trigger:"time",setup:timeSetup},{name:"insertion",flavour:"insert",trigger:"revisemacro",setup:revisionSetup},{name:"later",flavour:"insert",trigger:"visited",setup:visitedSetup},{name:"keyinsert",flavour:"insert",trigger:"key",setup:keySetup},{name:"replace",flavour:"replace",trigger:"link",setup:linkSetup},{name:"timedreplace",flavour:"replace",trigger:"time",setup:timeSetup},{name:"mousereplace",flavour:"replace",trigger:"mouse",setup:mouseSetup},{name:"hoverreplace",flavour:"replace",trigger:"hover",setup:hoverSetup},{name:"revision",flavour:"replace",trigger:"revisemacro",setup:revisionSetup},{name:"keyreplace",flavour:"replace",trigger:"key",setup:keySetup},{name:"timedremove",flavour:"remove",trigger:"time",setup:timeSetup},{name:"mouseremove",flavour:"remove",trigger:"mouse",setup:mouseSetup},{name:"hoverremove",flavour:"remove",trigger:"hover",setup:hoverSetup},{name:"removal",flavour:"remove",trigger:"revisemacro",setup:revisionSetup},{name:"once",flavour:"remove",trigger:"visited",setup:visitedSetup},{name:"keyremove",flavour:"remove",trigger:"key",setup:keySetup},{name:"continue",flavour:"continue",trigger:"link",setup:linkSetup},{name:"timedcontinue",flavour:"continue",trigger:"time",setup:timeSetup},{name:"mousecontinue",flavour:"continue",trigger:"mouse",setup:mouseSetup},{name:"keycontinue",flavour:"continue",trigger:"key",setup:keySetup},{name:"cycle",flavour:"cycle",trigger:"revisemacro",setup:revisionSetup},{name:"mousecycle",flavour:"cycle",trigger:"mouse",setup:mouseSetup},{name:"timedcycle",flavour:"cycle",trigger:"time",setup:timeSetup},{name:"keycycle",flavour:"replace",trigger:"key",setup:keySetup}].forEach(function(e){e.handler=revisionSpanHandler;\ne.shorthand=(["link","mouse","hover"].indexOf(e.trigger)>-1);macros[e.name]=e;macros["end"+e.name]=nullobj;begintags.push(e.name);\nendtags.push("end"+e.name)});function insideDepartingSpan(elem){var r=elem.parentNode;while(!r.classList.contains("passage")){if(r.classList.contains("revision-span-out")){return true\n}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\n}}}for(var k=0;k<=rcl;k++){if(rc[k].getAttribute("data-enabled")=="true"){ind=k}}if(rev){ind-=1}curr=(ind>=0?rc[ind]:(cyc?rc[rcl]:null));\nind2=ind;if(rnd){ind2=(ind+(Math.floor(Math.random()*rcl)))%rcl}next=((ind2<rcl)?rc[ind2+1]:(cyc?rc[0]:null));var docurr=(rev?showVer:hideVer);\nvar donext=(rev?hideVer:showVer);var currfn=function(){if(!(next&&next.classList.contains("gains"))||rnd){docurr(curr,notrans);\ndoToGainerSpans(ind,docurr,notrans)}};var nextfn=function(){donext(next,notrans);if(rnd){doToGainerSpans(ind2+1,donext,notrans)\n}};if(!rev){currfn();nextfn()}else{nextfn();currfn()}return(cyc?true:(rev?(ind>0):(ind2<rcl-1)))}macros.revert=macros.revise=macros.randomise=macros.randomize={handler:function(a,b,c){var l,rev,rname;\nfunction disableLink(l){l.style.display="none"}function enableLink(l){l.style.display="inline"}function updateLink(l){if(l.className.indexOf("random")>-1){enableLink(l);\nreturn}var rall=document.querySelectorAll(".passage [data-flavour]."+rname),cannext,canprev,i,ind,r,fl;for(i=0;i<rall.length;\ni++){r=rall[i],fl=r.getAttribute("data-flavour");if(insideDepartingSpan(r)){continue}if(fl=="cycle"){cannext=canprev=true\n}else{if(r.firstChild.getAttribute("data-enabled")==!1+""){canprev=true}if(r.lastChild.getAttribute("data-enabled")==!1+""){cannext=true\n}}}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;\nvar v="";var end=false;var out=false;if(c.length>1&&c[0][0]=="$"){v=c[0].slice(1);c.shift()}switch(c[c.length-1]){case"end":end=true;\nc.pop();break;case"out":out=true;c.pop();break}var h=state.history[0].variables;for(var i=0;i<c.length;i++){var on=(i==Math.max(c.indexOf(h[v]),0));\nvar d=insertElement(null,"span",null,rl+((on)?"En":"Dis")+"abled");if(on){h[v]=c[i];l.setAttribute("data-cycle",i)}else{d.style.display="none"\n}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]);n.className=rl+"End";n.style.display="inline";this.parentNode.replaceChild(n,this)\n}else{this.parentNode.removeChild(this);return}}else{toggleText(t[u]);u=(u+1)%m;if(v){h[v]=c[u]}toggleText(t[u]);this.setAttribute("data-cycle",u)\n}lall=document.getElementsByClassName(rl+"_"+rname);for(i=0;i<lall.length;i++){updateLink(lall[i])}};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);\nif(b!="hoverrevise"&&done){this[evt]=null}};new Wikifier(h,t[0]);if(b=="hoverrevise"){h.onmouseover=f;h.onmouseout=function(){reviseAll("revert",rname)\n}}else{h[evt]=f}h=null}}};macros.instantrevise={handler:function(a,b,c,d){reviseAll("revise",c[0].replace(" ","_"))}};macros.endmouserevise=nullobj;\nmacros.endhoverrevise=nullobj}());
<<stopallsound>><<stopallsound>><<playsound "1_normal.wav" >> Once upon on a time, there was a king who had a daughter, and she was such a dreadful story-teller that the like of her was not to be found near or far. \n\n<div align="center"><img src="princess.png"></div>\n<<timedcontinue 9s>><div align="right">[img[next.png][2]]</div><<timedgoto "Start" 80s >>
<<stopallsound>><<stopallsound>>\n<<playsound "3_normal.wav" >> Well many came, as you may fancy, to try their luck, for every one would have been very glad to have the Princess, to say nothing of the kingdom; \n<<timedcontinue 8s>>\nbut they all cut a sorry figure, for the Princess was so given to story-telling, that all their lies went in at one ear and out of the other. <<timedcontinue 8s>>\n\n<div align="right">[img[next.png][4]]</div><<timedgoto "Start" 80s >>\n
<<stopallsound>><<stopallsound>><<playsound "2_normal.wav" >>So the king gave out, that if any one could tell such a string of lies as would get her to say, "That's a story," he would have her to wife, and half the kingdom besides.\n\n<div align="center"><img src="king.png"></div><<timedcontinue 10s>>\n<div align="right">[img[next.png][3]]</div><<timedgoto "Start" 80s >>
<<stopallsound>><<stopallsound>><<playsound "5_normal.wav" >>"Good morning," he said, "and thank you for nothing." \n\n<div align="center"><img src="bootsspeaks.png"></div>\n<<timedcontinue 3s>><div align="right">[img[next.png][6]]</div><<timedgoto "Start" 80s >>\n
<<stopallsound>><<stopallsound>><<playsound "4_normal.wav" >> Among the rest came three brothers to try their luck, and the two elder went first, but they fared no better than those who had gone before them. Last of all, the third, Boots, set off and found the Princess in the farm-yard. \n\n<div align="center"><img src="boots.png"></div>\n<<timedcontinue 12s >><div align="right">[img[next.png][5]]</div><<timedgoto "Start" 80s >>\n
<<stopallsound>><<stopallsound>><<playsound "7_normal.wav" >> Then she went on—\n\n<div align="center"><img src="bootsandprincess.png"></div>\n<<timedcontinue 2s>>\n<div align="right">[img[next.png][8]]</div><<timedgoto "Start" 80s >>
<<stopallsound>><<playsound "6_normal.wav" >> "Good morning" said she, "and the same to you." \n\n<div align="center"><img src="princesspeaks.png"></div>\n<<timedcontinue 3s>><div align="right">[img[next.png][7]]</div><<timedgoto "Start" 80s >>\n
<<stopallsound>><<playsound "9_normal.wav" >> "Haven't we though!" answered Boots; "ours is far bigger; for when a cow begins to go with calf at one end of it, she doesn't get to the other end before the time to drop her calf is come." \n\n<div align="center"><img src="bootsspeaks.png"></div>\n<<timedcontinue 10s>><div align="right">[img[next.png][10]]\n[img[getonwithit.png][10a]] </div>\n
Boots Who Made the Princess Say, "That's a Story!"
<<playsound 'rant.wav' >>\n\n<div align="center">\nTHE END. WOW. WHAT A STORY. </div>\n<<timedgoto "Start" 44s>>
\n<<loadJS "howler.min.js">>
(function () {\n "use strict";\n version.extensions['soundMacros'] = {\n major: 1,\n minor: 1,\n revision: 2\n };\n var p = macros['playsound'] = {\n soundtracks: {},\n handler: function (a, b, c, d) {\n var loop = function (m) {\n if (m.loop == undefined) {\n m.loopfn = function () {\n this.play();\n };\n m.addEventListener('ended', m.loopfn, 0);\n } else m.loop = true;\n m.play();\n };\n var s = eval(d.fullArgs());\n if (s) {\n s = s.toString();\n var m = this.soundtracks[s.slice(0, s.lastIndexOf("."))];\n if (m) {\n if (b == "playsound") {\n m.play();\n } else if (b == "loopsound") {\n loop(m);\n } else if (b == "pausesound") {\n m.pause();\n } else if (b == "unloopsound") {\n if (m.loop != undefined) {\n m.loop = false;\n } else if (m.loopfn) {\n m.removeEventListener('ended', m.loopfn);\n delete m.loopfn;\n }\n } else if (b == "stopsound") {\n m.pause();\n m.currentTime = 0;\n } else if (b == "fadeoutsound" || b == "fadeinsound") {\n if (m.interval) clearInterval(m.interval);\n if (b == "fadeinsound") {\n if (m.currentTime>0) return;\n m.volume = 0;\n loop(m);\n } else {\n if (!m.currentTime) return;\n m.play();\n }\n var v = m.volume;\n m.interval = setInterval(function () {\n v = Math.min(1, Math.max(0, v + 0.005 * (b == "fadeinsound" ? 1 : -1)));\n m.volume = Math.easeInOut(v);\n if (v == 0 || v == 1) clearInterval(m.interval);\n if (v == 0) {\n m.pause();\n m.currentTime = 0;\n m.volume = 1;\n }\n }, 10);\n }\n }\n }\n }\n }\n macros['fadeinsound'] = p;\n macros['fadeoutsound'] = p;\n macros['unloopsound'] = p;\n macros['loopsound'] = p;\n macros['pausesound'] = p;\n macros['stopsound'] = p;\n macros['stopallsound'] = {\n handler: function () {\n var s = macros.playsound.soundtracks;\n for (var j in s) {\n\t\tif (s.hasOwnProperty(j)) {\n s[j].pause();\n if (s[j].currentTime) {\n\t\t s[j].currentTime = 0;\n\t\t }\n\t\t}\n }\n }\n }\n var div = document.getElementById("storeArea").firstChild;\n var fe = ["ogg", "mp3", "wav", "webm"];\n while (div) {\n var b = String.fromCharCode(92);\n var q = '"';\n var re = "['" + q + "]([^" + q + "']*?)" + b + ".(ogg|mp3|wav|webm)['" + q + "]";\n k(new RegExp(re, "gi"));\n div = div.nextSibling;\n }\n\n function k(c, e) {\n do {\n var d = c.exec(div.innerHTML);\n if (d) {\n var a = new Audio();\n if (a.canPlayType) {\n for (var i = -1; i < fe.length; i += 1) {\n if (i >= 0) d[2] = fe[i];\n if (a.canPlayType("audio/" + d[2])) break;\n }\n if (i < fe.length) {\n a.setAttribute("src", d[1] + "." + d[2]);\n a.interval = null;\n macros.playsound.soundtracks[d[1]] = a;\n } else console.log("Browser can't play '" + d[1] + "'");\n }\n }\n } while (d);\n }\n}());
(function () {\n version.extensions['timedloopMacro'] = {\n major: 1,\n minor: 1,\n revision: 0\n };\n macros['timedloop'] = {\n handler: function (g, e, f, b) {\n function cssTimeUnit(s) {\n if (typeof s == "string") {\n if (s.slice(-2).toLowerCase() == "ms") {\n return Number(s.slice(0, -2)) || 0;\n }\n else if (s.slice(-1).toLowerCase() == "s") {\n return Number(s.slice(0, -1)) * 1000 || 0;\n }\n }\n throwError(g, s + " isn't a CSS time unit");\n return 0;\n }\n\n function tagcontents(starttag, endtag, k) {\n var a = b.source.slice(k);\n var l = 0;\n var c = "";\n for (var i = 0; i < a.length; i++) {\n var w = endtag.length;\n if (a.substr(i, w) == endtag) {\n if (l == 0) {\n b.nextMatch = k + i + w;\n return c;\n }\n else {\n l--;\n c += a.charAt(i);\n }\n }\n else {\n if (a.substr(i, starttag.length) == starttag) {\n l++;\n }\n c += a.charAt(i);\n }\n }\n return "";\n }\n var tl = "<<" + e;\n var etl = "<<end" + e + ">>";\n var k = b.source.indexOf('>>', b.matchStart) + 2;\n var d = tagcontents(tl, etl, k);\n var tm;\n tm = cssTimeUnit(f[0]);\n var h;\n if (d) {\n var m = insertElement(g, "span", null, "timedloop", null);\n new Wikifier(m, d);\n setTimeout(function to() {\n if (m && elexists(m)) {\n var oldm = m;\n oldm.classList.add("replacement-out");\n setTimeout(function () {\n if (oldm) oldm.parentNode.removeChild(oldm);\n }, Math.min(tm, 1000));\n m = insertElement(null, "span", null, "timedloop replacement-in", null);\n new Wikifier(m, d);\n setTimeout(function () {\n if (m) m.classList.remove("replacement-in");\n }, 1);\n oldm.parentNode.insertBefore(m, oldm.nextSibling);\n scrollWindowTo(m);\n setTimeout(to, tm);\n }\n }, tm);\n }\n else {\n throwError(g, "can't find matching end" + e);\n return;\n }\n }\n }\n elexists = function (e) {\n while (e = e.parentNode) {\n if (e === document) return true;\n }\n }\n macros['endtimedloop'] = {\n handler: function () {}\n }\n scrollWindowTo = function (E) {\n var D = window.scrollY;\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 L = window.innerHeight;\n var M = D + L;\n if (O >= D && P > M) {\n return ((N.offsetHeight < L) ? O - (L - N.offsetHeight) + 20 : O)\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}());
<<stopallsound>><<stopallsound>><<playsound "11a.wav" >> "Stuff!" said Boots; "is that all? why, we have an ox who is so big, that when two men sit, one on each horn, and each blows his great mountain-trumpet, they can't hear one another." \n\n<div align="center"><img src="bootsspeaks.png"></div>\n<<timedcontinue 14s>><div align="right">[img[next.png][12]] \n[img[yawn.png][12a]]</div><<timedgoto "Start" 70s >>\n\n
--Let the player undo moves? (on / off)\n--In Sugarcane, this enables the browser's back button.\n--In Jonah, this lets the player click links in previous\n--passages.\n\nUndo: off\n\n--Let the player use bookmarks? (on / off)\n--This enables the Bookmark links in Jonah and Sugarcane\n--(If the player can't undo, bookmarks are always disabled.)\n\nBookmark: on\n\n--Obfuscate the story's HTML source to prevent possible\n--spoilers? (swap / off)\n\nObfuscate: off\n\n--String of letter pairs to use for swap-style obfuscation\n\nObfuscateKey: hyzieucoxrmjgtkapqbwndvlfs\n\n--Include the jQuery script library? (on / off)\n--Individual scripts may force this on by\n--containing the text 'requires jQuery'.\n\njQuery: off\n\n--Include the Modernizr script library? (on / off)\n--Individual scripts/stylesheets may force this on by\n--containing the text 'requires Modernizr'.\n\nModernizr: off\n
<<stopallsound>><<timedcontinue 1s>><<playsound 'hitnextplease.wav'>>\n\n\n\n<div align="center">[img[next.png][practice option]]</div>\n
<<stopallsound>><<stopallsound>><<playsound "verygood.wav" >>\n<<timedcontinue 5s>>\n<<stopallsound>>\n\n<div align="center">[img[start.png][once upon a time]]</div>\n<<timedgoto "once upon a time" 70s >>\n
<<timedcontinue 1s>><<playsound 'lookwhatyouvedone.wav' >>\n<div class="upsidedown"><span class="shake"><img src="princesslarge.png"></span></div>\n\n<span class="backward"><img src="theend.png"></span>\n\n<span style="font-size: 14px" class="backward">put it into her for a back-bone, and she had no other back-bone all the while we had her. and just as I stepped in, my mother gave your father such a box on the ear, that it made his whiskers curl."We had, too, a dun mare to tread the cheese well together when it was making; but once she tumbled down into the cheese, and we lost her; and after we had eaten at this cheese seven years, we came upon a great dun mare, alive and kicking." </span>\n\n<strong><span class="shake">"Good morning" said she, "and the same to you." </strong></span>\n<<timedgoto "Start" 11s>>
<<stopallsound>><<stopallsound>><<playsound "whatnonono.wav">><span class="shake">Well, once after that I was going to drive this mare to the mill, and her back-bone snapped in two; but I wasn't put out, not I, for I took a spruce sapling, and put it into her for a back-bone, and she had no other back-bone all the while we had her. </span>\n\n<div align="center"><span class="shake">[img[bootsspeaks-princessupsidedown.png][16a]]</span></div>\n<<timedcontinue 4s>><img src="next.png">
<<stopallsound>><<stopallsound>><<playsound "8_normal.wav" >>"You haven't such a fine farm-yard as ours, I'll be bound; for when two shepherds stand, one at each end of it, and blow their ram's horns, the one can't hear the other." \n\n<div align="center"><img src="princesspeaks.png"></div>\n<<timedcontinue 10s>><div align="right">[img[next.png][9]]</div><<timedgoto "Start" 80s >>
macros['playAudio'] =\n{\nhandler: function(place, object, parameters)\n{\nvar sound = new Howl({\nurls: ['1.wav'],\n}).play();\n}\n}
<<stopallsound>><<stopallsound>><<playsound "11_normal.wav" >>"Stuff!" said Boots; "is that all? why, we have an ox who is so big, that when two men sit, one on each horn, and each blows his great mountain-trumpet, they can't hear one another." \n\n<div align="center"><img src="bootsspeaks.png"></div>\n<<timedcontinue 10s>><div align="right">[img[next.png][12]]</div><<timedgoto "Start" 80s >>\n
<<stopallsound>><<playsound "10_normal.wav" >> "I dare say!" said the Princess. "Well, but you haven't such a big ox, after all, as ours yonder; for when two men sit, one on each horn, they can't touch each other with a twenty-foot rule." \n\n<div align="center"><img src="princesspeaks.png"></div>\n<<timedcontinue 12s>><div align="right">[img[next.png][11]]</div><<timedgoto "Start" 80s >><<stopallsound>>\n
<<stopallsound>><<stopallsound>><<playsound "13_normal.wav" >>"Oh! you do, do, you?" said Boots. "Well, we milk ours into great tubs, and then we put them in carts and drive them in-doors, and then we turn them out into great brewing vats, and so we make <span class="shake">[[cheeses|14a]]</span> as big as a great house. \n\n<div align="center">[img[bootsspeaks-princessupsidedown.png][14a]]</div>\n<<timedcontinue 14s>><div align="right">[img[next.png][14]]</div>\n
<<stopallsound>><<stopallsound>><<playsound "12_normal.wav" >>"I dare say," said the Princess; "but you haven't so much milk as we, I'll be bound; for we milk our kine into great pails, and carry them in-doors, and empty them into great tubs, and so we make great, great cheeses." \n<div align="center"><img src="princesspeaks.png"></div>\n<<timedcontinue 11s>><div align="right">[img[next.png][13]]</div><<timedgoto "Start" 80s >>\n
<<stopallsound>><<playsound "15_normal.wav">>"Well, once after that I was going to drive this mare to the mill, and her back-bone snapped in two; but I wasn't put out, no, not I, for I took a spruce sapling, and put it into her for a back-bone, and she had no other back-bone all the while we had her. \n\n<div align="center"><img src="bootsspeaks.png"></div>\n<<timedcontinue 16s>><div align="right">[img[next.png][16]]</div><<timedgoto "Start" 80s >>
<<stopallsound>><<stopallsound>><<playsound "14_normal.wav" >>"We had, too, a dun mare to tread the cheese well together when it was making; but once she tumbled down into the cheese, and we lost her; and after we had eaten at this cheese seven years, we came upon a great dun mare, alive and kicking." \n\n<div align="center"><img src="princesspeaks.png"></div>\n<<timedcontinue 13s>><div align="right">[img[next.png][15]]</div><<timedgoto "Start" 80s >>
<<stopallsound>><<playsound "17_normal.wav">>so the Virgin Mary let me down by one of the ropes, and down I slipped straight into a fox's hole, and who should sit there but my mother and your father cobbling shoes; and just as I stepped in, my mother gave your father such a box on the ear, that it made his whiskers curl."\n\n<div align="center"><img src="bootsspeaks.png"></div> \n<<timedcontinue 16s>><div align="right">[img[next.png][18]]</div><<timedgoto "Start" 80s >>
<<stopallsound>><<playsound "16_normal.wav">>But the sapling grew up into a small tree, that I climbed up into the heaven by it, and when I got there, I saw the Virgin Mary sitting and spinning the foam of the sea into pigs'-bristle ropes; but just then the spruce-fir broke short off, and I couldn't get down again; \n\n<div align="center"><img src="bootsspeaks.png"></div>\n<<timedcontinue 15s>><div align="right">[img[next.png][17]]</div><<timedgoto "Start" 80s >>
<<endtimedloop>><<stopallsound>><<stopallsound>><<playsound "19_normal.wav" >>So Boots got the Princess to wife, and half the kingdom besides. \n\n<div align="center"><img src="bootsandprincess.png"></div>\n<<timedcontinue 6s>><div align="right">[img[next.png][end]]</div><<timedgoto "Start" 80s >>
<<endtimedloop>><<stopallsound>><<stopallsound>><<playsound "18_normal.wav">>"That's a story!" said the Princess; "my father never did any such thing in all his born days!" \n\n<div align="center"><img src="princessloses.png"></div>\n<<timedcontinue 6s>><div align="right">[img[next.png][19]]</div><<timedgoto "Start" 80s >>
<<stopallsound>><<stopallsound>><<playsound 'whatastory.wav' >>Princess lies a lot. King offers a bet. Prince Boots comes in. Back and forth storytelling about goats and farms and rams and such. Yadda yada. Makes a lie about the princess' father being a shoemaker. Princess FREAKS OUT and says, "nope, that's a lie!" Boots wins the bet, wins the kingdom, wins the princess' hand in marriage.\n\n<div align="center"><img src="bootsandprincess-confused.png"></div>\n<<timedgoto "summary2" 15s >>\n
<<stopallsound>><<playsound "humblenarratorclicknext.wav" >>\n\n<div align="center"><img src="mouse.png" align="center"></div>\n<<timedcontinue 17s>>\n<div align="center">[img[start.png][once upon a time]]\n[img[practice.png][practice]]</div>
Mirabel Miscala
function screenShake(time) {\nconsole.log(document);\nvar el = document.getElementsByClassName('content');\nbaz = el;\nconsole.log(baz[0]);\nel[0].className = el[0].className + ' shake';\nif (time > 0) {\nsetTimeout(function () {\nel[0].className = 'content';\n}, time);\n}\n};\n \n// the screenShake macro. Adapted from Emmanuel Turner's article on creating Twine macros. http://eturnerx.blogspot.com/2012/12/how-to-create-custom-macros-in-twine.html\ntry {\nversion.extensions['screenShakeMacro'] = {\nmajor: 1,\nminor: 0,\nrevision: 0\n};\nmacros['screenShake'] = {\nhandler: function (place, macroName, params, parser) {\nvar time = parseInt(params[0]);\nif (typeof time !== 'number') {\ntime = 1000;\n}\n// we're overriding the fade function. It behaves as usual except it runs screenShake() if time >= 0.\nfade = function (el, options) {\nvar current;\nvar proxy = el.cloneNode(true);\nvar direction = (options.fade == 'in') ? 1 : -1;\n \nel.parentNode.replaceChild(proxy, el);\n \nif (options.fade == 'in') {\ncurrent = 0;\nproxy.style.visibility = 'visible';\n} else current = 1;\n \nsetOpacity(proxy, current);\nvar interval = window.setInterval(tick, 25);\n \nfunction tick() {\ncurrent += 0.05 * direction;\n \nsetOpacity(proxy, Math.easeInOut(current));\n \nif (((direction == 1) && (current >= 1)) || ((direction == -1) && (current <= 0))) {\nconsole.log('swapping fader proxy out');\nel.style.visibility = (options.fade == 'in') ? 'visible' : 'hidden';\nproxy.parentNode.replaceChild(el, proxy);\ndelete proxy;\nwindow.clearInterval(interval);\n \nif (options.onComplete) options.onComplete();\n \nif (time >= 0) {\nscreenShake(time);\ntime = -1;\n}\n \n}\n};\n \nfunction setOpacity(el, opacity) {\nvar percent = Math.floor(opacity * 100);\n \n// IE\nel.style.zoom = 1;\nel.style.filter = 'alpha(opacity=' + percent + ')';\n \n// CSS 3\nel.style.opacity = opacity;\n};\n};\n},\ninit: function () {},\n};\n} catch (e) {\nthrowError(place, "screenShake Setup Error: " + e.message);\n}