<!-- first must load p5. Also, the sketch this needs is one containing the title screen.--> <% if( story.state.p5 == null){ $.getScript("https://cdn.jsdelivr.net/npm/p5@1.9.0/lib/p5.js") .done(function(script, textStatus, settings, jqxhr){ console.log(textStatus); ready(); }) .fail(function(jqxhr, settings, exception) { $("div.log").text("Triggered ajaxError handler."); }); } function ready(){ const testSketch = story.state.noCanvasSketch; //making a constant is a tiny bit faster. story.state.p5 = new p5(testSketch, story.state.passageClass[0]); //having this allows us to call the p5 method later. Also, need to instance it within tw-passage, otherwise automatically written to 'main'. The only problem from this is that revisiting a passage means it won't save elements that were previously created with p5. const titleSketch = story.state.titleScreenSketch; passage.p5 = new p5(titleSketch, story.state.passageClass[0]); } %> <!--Then need simple script that takes to next page if click anywhere--> <script> setTimeout(loading, 20); function loading() { if(passage.p5 != null){ passage.p5.canvas.onclick = function() { story.show("Tutorial"); } } else{ setTimeout(loading, 20); console.log("still waiting");} } </script> <!--<p style="text-align:center">Loading story...</p>I'll need to change or remove this--><!-- TODO: *DONE Alignment and boxing--thru CSS. *DONE Mousout Functionality--a p5 thing. *DONE Click append.--?? NO This page needs a p5 blank sketch. --> <p.shown style="text-align:center">Hover the mouse cursor over and then move it away from text <span.mouseout.shown onmouseout="story.state.showHide(this, '#showme')">like this</span><span#showme><br> to bring your attention to the word and reveal extra, non-crucial information</span>.</p> <p.shown style="text-align:center"> Clicking on text like <span.clickable.shown onclick="story.state.showHide(this, '.rest')"> this...</span><br> <span.rest style="text-align:center;">can reveal the rest of a <span.rest.clickable onclick="story.state.showHide(this, '.choices')">passage...</span><br></span> <span.choices style="text-align:center;">or allow you to choose between multiple</span><br> <span.clickable.choices#choice1 style="text-align:center;" onclick="story.state.showHide(this, '#next', '#choice2');this.style.visibility='hidden';">choices?<br></span> <span.clickable.choices#choice2 style="text-align:center;" onclick="story.state.showHide(this, '#next', '#choice1');this.style.visibility='hidden';">choices!<br></span> <span#next style="text-align:center;">[[As well as...->Tutorial 2]]</span> </span></p> <!-- CSS needs center alignment and box. --> <p.shown style="text-align:center">Take you to a new page! <br><br> That's it, enjoy. <br><br> [[Start->Opening Passage]]</p><!-- Just click-append behavior. --> <p.shown>Before you begin, you take a short bus ride to coast and dip a toe in the <span.clickable.shown onclick="story.state.showHide(this, '#rest');"> North Sea. </span><span#rest> This is the first stop on your journey, a small yet long awaited backpack tour of Europe. Then you go find your first hostel, the <em>[[Buitentje Amsterdam.]]</em></span></p><p.shown>Inside the quaint little check-in lodge, the plump, older woman at the desk informs you that she has a [[letter->Letter 1]] waiting for you.</p><!-- TODO: *Text fitting within a textbox of the letter background.--combination of CSS and JS, or just with CSS. *Click replace behavior. *mouseout behavior *click reveal behavior. *conditional link behavior. (the 'revisiting' variable). This needs Letter Background p5 sketch loaded. --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.letterBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <div.shown.letterContainer> <p.shown>Hi,</p> <p.shown>Congrats on landing (hope you're actually reading this and didn't have any issues, boy that'd be awkward if your plans fell through—and really terrible if something bad had happened!). I sent this to the first of the addresses you gave me, the Buitentje Amsterdam. It must be lovely there, I'm jealous.</p> <p.shown>But yeah, you said you wanted someone to write to while you're backpacking in Europe, so I'm all <span.shown.mouseout onmouseout="story.state.showHide(this,'.ears',this);"> ears </span><span.ears><del>ears</del> eyes(?) </span> ready to see the beautiful countryside from your postcards.</p> <p.shown>I probably don't need to tell you since you haven't been unplugged for that long yet, but the world's still 'fine'. Not much going on for me, still working on our little Har-Fest game, but... it's slow. And I've got the next Ludum Dare to look forward to in a month. It'll be so weird, this will be my first game jam <span.shown.mouseout onmouseout="story.state.showHide(this,'.alone','.space');"> alone</span><span.shown.space> </span><span.alone>—first solo game, really—</span>since I've known you. Maybe you can snail mail me some advice from wherever you are at the end of April?</p> <p.shown>And speaking of... I'm looking at these hotel addresses you gave me. Amsterdam, Luxembourg, then through the Alps and into Venice. You told me you've been wanting to do this for a long time, and I think you did well when it finally came time to take this trip.</p> <p.shown>So, kick back, relax. Get ready to do a lot of backpacking and bus riding. You've earned it.</p> <p.shown>Your jealous pen pal,<br> Paul</p> <p.shown><span.shown.clickable onclick="story.state.showHide(this,'.ps');"><i>p.s.</i></span><span.ps> And please don't get kidnapped, lost in the woods, fall off a mountain, mugged, or accidentally become a drug mule or <span.ps.mouseout onmouseout="story.state.showHide(this,'.something');"> something...</span><span.something> :) that's what I'm here for, your connection back to the real world on the other side of those gorgeous landscapes you'll be drinking in.</span></p> <% if (story.state.veniceVars.revisiting == true) { %> <p.ps style="font-family: 'Georgia';font-size:85%"><i>[[Close the letter->Letter Select]]</i></p> <% } else { %> <p.ps style="font-family: 'Georgia';font-size:85%"><i>[[Close the letter and check in to the hostel->Buitentje Amsterdam 2]]</i></p> <% } %> </div><p.shown>The letter now read, you can finish checking in to the tiny cottage that will be your home for the next couple of weeks.</p> <p.shown>After a comfortable night's rest, you are free to make your long awaited forays into the [[Dutch countryside.]]</p><!-- TODO: *DONE link reveal DO THIS p5 loaded with Tulips BG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.tulipsBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>It's the height of tulip season in The Netherlands. You rent a bicycle and pedal along rows of the bright, round flowers swaying on long, straight stems. </p> <p.shown><span.clickable.shown onclick="story.state.showHide(this, '.lost');">Soon...</span> <span.lost> getting<span.clickable.lost onclick="story.state.showHide(this, '.fields');"> lost...</span></span> <span.fields> among endless, flat<span.clickable.fields onclick="story.state.showHide(this, '.caring');"> fields...</span></span> <span.caring> but not really [[caring...->Dutch Countryside 2]]</span> </p><!-- TODO: *DONE link-reveal *DONE mouseout reveal *DONE click replace minor visual problem with the period that gets hidden p5 loaded with Tulips BG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.tulipsBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>The air here is cool and full of moisture, the mornings foggy and the afternoon skies full of clouds. A couple of cattle chew on the damp grass of a small field beside a tidy farmhouse. <span.clickable.shown onclick="passage.showArray1=['.cows', '.period', '.afterSpan'];story.state.showHideMulti(this,passage.showArray1);">Watching them a while,</span><span.cows> you notice these cows somehow seem more attractive and enticing than the cattle in America. You're no stranger to farms and herds, after all, but the life abundant all around you seems<span.mouseout.cows onmouseout="story.state.showHide(this, '.cowsExtra', '.period');"> happier here</span></span><span.period>.</span><span.cowsExtra> perhaps it's just because you haven't been here long enough to see the unhappiness and the winter though...</span></p> <p.afterSpan><span.clickable.afterSpan onclick="story.state.showHide(this, '.pedalOn');">After a span...</span> <span.pedalOn>The owner of the cattle comes out of their home and you [[pedal on, ->Dutch Countryside 3]] not wanting to seem like some strange American who's never seen a cow before.</span></p> <!-- TODO: nothing, just the sketch for bg p5 loaded with Tulips BG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.tulipsBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>The road runs alongside a small dike where tulips and other flowers seem to be growing wild. You follow them to a river, and find a bike path dotted with joggers and other bikers. A long, straight row of trees is planted alongside it, providing shade from the weak sun. Even the trees themselves have a sweet, earthy aroma. The whole of the land seems to be be welcoming you...</p> <p.shown>[[...and you gladly spend many days exploring the countryside around your cottage.->Dutch Countryside 4]]</p> <p.shown>[[...and you take a moment to breathe it in, before pedalling on to new adventures.->Auction]]</p><!-- TODO: *variable setting p5 loaded with Tulips BG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.tulipsBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% s.hollandVars.extraExploreHolland = true; %> <p.shown>For the better part of a week, you pedal around, even taking a camping trip to a park many miles from the Buitentje, sleeping under the delicate branches of a willow. Finally, though, the cloudy weather gives way to sheets of rain, and you must move on to [[other things.->Auction]]</p><!-- TODO: *DONE mouseout *DONE link-reveal p5 loaded with Tulips BG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.tulipsBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown> You find your way to the carefully tended and <span.mouseout.shown onmouseout="story.state.showHide(this, '.guardedFrom');"> guarded</span><span.guardedFrom>, from both animals and people,</span> fields of a renowned tulip merchant. As you arrive, you are surprised to find others swarming here as well, some in business suits, others in tidy, open necked summer attire. </p> <p.shown> Unable to help but be swept up in the crowd, you soon find yourself under a large pavilion, among rows of white folding chairs.</p> <p.clickable.shown onclick="story.state.showHide(this, '.retreat');">A wedding?</p> <p.clickable.retreat onclick="story.state.showHide(this, '.auction');">A company retreat?</p> <p.auction>No, an [[auction.->Auction 2]]</p><!-- TODO: *DONE click-append p5 loaded with Tulips BG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.tulipsBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Small packets had been placed on each of the chairs and you sit down toward the back trying to look busy reading one. While written in English, it seems to be a random list of words and numbers. You struggle to make sense of <span.clickable.shown onclick="story.state.showHide(this, '.rest');">it... </span> </p> <p.rest> That is, until you see men and women in pale green jackets and white gloves wheeling out long trays of tulips. Tulips so bright, so perfectly round, that you can understand why all these people have come to see [[them.->Auction 3]] </p><!-- TODO: *DONE click append *DONE mouseout p5 loaded with Tulips BG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.tulipsBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown> A man steps up to a podium and welcomes everyone in smooth, accented <span.mouseout.shown onmouseout="story.state.showHide(this, '.awkward');">English.</span> <span.awkward>You are inwardly thankful, or it'd be awkward to sit here and try to look like you're following along with your rudimentary knowledge of Dutch.</span> </p> <p.shown><q>Thank you for visiting our fields this morning. As always, we hope to have every kind you may possibly desire. My family has spent centuries cultivating these tulip lines, and I humbly offer a small selection of our wealth for today's auction.</q></p> <p.shown> He goes on <span.clickable.shown onclick="story.state.showHide(this, '.explaining', this);">to explain...</span> <span.explaining>to explain that all single-tulip purchases can be shipped across the globe within 48 hours, but that bulk lots must be confined to the European Union. He continues going through the details, and excitement for this unexpected auction rises within you.</span> </p> <p.explaining>[[Try and buy a flower for Paul.]]</p> <p.explaining>[[Sit back and enjoy the show.]]</p><!-- TODO: *variable setting p5 loaded with Tulips BG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.tulipsBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% s.hollandVars.sentTulip = false %> <p.shown>You lean back and look around, fascinated by the subtle displays of competition in this refined environment. The tense, erect postures, the quiet but firm raising of packets to place a bid, the mixed aromas of perfumes, colognes, and flowers. One man even stands up angrily after loosing, storming off in a silent huff, and you don't see him return.</p> <p.shown>When the auction finally turns from single lots to bulk purchases, many in the crowd stand. You follow, opting to take a [[tour of the grounds]], which was why you came here in the first place.</p><!-- TODO: *variable setting p5 loaded with Tulips BG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.tulipsBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% s.hollandVars.sentTulip = true; %> <p.shown>You sit up straight and pay attention as the auction begins. At first the bidders throw around prices that shock and sting—who would pay that much for a single flower? But, eventually, things cool down and you are able to win a small red tulip for Paul.</p> <p.shown>When the auction finally turns from single lots to bulk purchases, many in the crowd stand. You follow, opting to take a [[tour of the grounds]], which was why you came here in the first place.</p><!--p5 loaded with Tulips BG sketch--> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.tulipsBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>The cultivated tulip fields are picturesque save the gray sky and drizzling rain, and you see rows upon rows of round, delicate flowers in all shades. </p> <p.shown>The first thing to catch your eye is a...</p> <p.shown>[[Large field of bright red ones]]</p> <p.shown>[[Variegated orange and white blossom]]</p> <p.shown>[[Sign marked <q>Experimental</q>]]</p><!-- TODO: *mouseout p5 loaded with Tulips BG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.tulipsBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>The field of flowers extends to another, and another one beyond that. The nearest is half empty—no doubt gone to the auction. The red blooms sit against the brackdrop of a <span.mouseout.shown onmouseout="story.state.showHide(this, '.resting');"> green field, </span><span.resting> allowed to rest for the season, </span>which makes the bright color even more eye catching and fixes the image of these tulips in your memory for years to come.</p> <p.shown>After walking among the fields of perfect red tulips, you head to...</p> <p.shown>[[The multicolor tulip. ->Variegated orange and white blossom]]</p> <p.shown>[[The "Experimental" sign.->Sign marked <q>Experimental</q>]]</p> <p.shown>[[The Buitentje Amsterdam, having seen enough of the private tulip fields.->End of Holland]]</p><!-- TODO: *Conditional text reveal depending on what's clicked *variable setting *link reveal. p5 loaded with Tulips BG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.tulipsBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>The multicolor blossom sits in a plot picked over until only a dozen variegated tulips remain. The mixing of colors in these blossoms looks almost like candy: streaks of eye catching reds, oranges, and purples against creamy white and yellow backgrounds.</p> <p.shown>You wonder which was based on the other: tulips meant to look like <span#candyClickable.clickable.shown onclick="story.state.showHide(this, '.candy');$('#tulipClickable').removeClass('clickable');story.state.hollandVars.nostalgiaFocused = true; story.state.hollandVars.beautyFocused = false;">candy</span>, or candy attempting to capture the beauty of these <span#tulipClickable.clickable.shown onclick="story.state.showHide(this, '.tulips');$('#candyClickable').removeClass('clickable');story.state.hollandVars.nostalgiaFocused = false; story.state.hollandVars.beautyFocused = true;"> tulips</span>. <p.tulips>After all, these tulips have been cultivated over centuries to be the epitomy of wealth and beauty. Candy, a more recent mania, must be imitating the beauty—both natural and unnatural—of these <span.clickable.tulips onclick="story.state.showHide(this, '.third');">tulips.</span></p> <p.candy>You think of the candy shop back <span.mouseout.candy onmouseout="story.state.showHide(this, '.home');"> home </span><span.home> (or rather, an hour away from it)</span> where your parents would take you for special occasions. A wave of nostalgia overcomes you... perhaps this is why people <% if(s.hollandVars.sentTulip) { %> pay <% } else { %> compete <% } %> so much for these <span.clickable.candy onclick="story.state.showHide(this, '.third');">tulips.</span></p> <p.third>Regardless, you can't help but think of <i>Charlie and the Chocolate Factory</i>: whether Roald Dahl or the filmakers following him weren't influenced in some way by these tulips when devising their edible candy <span.clickable.third onclick="story.state.showHide(this, '.end');">plants.</span></p> <p.end>Turning away from the candy-like tulips you...</p> <p.end>[[Visit the field of red flowers.->Large field of bright red ones]] </p> <p.end>[[Follow the "Experimental" signs.->Sign marked <q>Experimental</q>]]</p> <p.end>[[Leave the tulips and head back to the hostel.->End of Holland]]</p><!-- TODO: Image display: much as it was in v1.2, but ideally add different displays for different screens. Image may also need centering or to be told alignment/float behaviors. --> <p.shown>Back at the Buitentje Amsterdam, the end of your stay looms. Soon, your plans will force you to move on from Holland. It's time to write your first postcard back to Paul.</p> <p.shown>There are a series of choices on how to compose your message. But space is limited, so choose what is most important to you.</p> <p.clickable.shown onclick="$('.passage').addClass('widePassage');story.show('Postcard 1');"> Write the postcard</p> <div.shown><img src="media/windmill_postcard.webp" alt="Windmill Postcard Front" style="width:1000px;height:600px;" /img></div><!-- TODO: *rework postcard mechanic. select, as with buttons or dialogue options in certain games, the passage you're going to write at the bottom or off to the side. As you click it, those options go away and different ones are displayed, and the senence that you chose is displayed on the postcard at the top/to the side. **also, will have some variable dependencies. **probably best implementation of this is to move all of postcard 1 text to either an array or object and then just wire each string to those it leads to. ***could also try having a series of arrays--each one are the options to be revealed, and thus selecting any particular option simply loads a new array. ****relatedly, could attempt to make a map, with the key being the sentence selected, and the key accesses either more keys or just its own array as above (but now an array of keys). ***alternatively try and implement postcard lenght based algorithm as discussed before. Remeber to change font here too. Needs p5 loaded with postcard 1 background. --> <!--Rather than a list below, keep similar or same formatting, but have it appear over the current letter... Just need to add some space and a little bit of formatting polish. Change CSS to have witdh = viewport and maxwitdh = 1000px. These are behaving a little oddly so come back to it later.--> <script> $('.passage').addClass('widePassage'); </script> <div.postcardContainer.shown> <ul.optionList> <li.shown onclick="passage.postcard('.hi');">Hi Paul, Thanks for agreeing to do this.</li> <li.shown onclick="passage.postcard('.hey');">Hey Pal, Glad you could be my pen friend during my backpack trip :) </li> <li.shown onclick="passage.postcard('.dear');">Dear Paul, You won't believe the trip I'm having, I can't imagine how jealous you must be.</li> <li.hi.hey.dear onclick="passage.postcard('.amazing');"> Holland has been amazing.</li> <li.hi.hey.dear onclick="passage.postcard('.maze');story.state.hollandVars.lostInHolland = true;"> Holland has been A-Mazing (I got lost a few times).</li> <li.hi.hey.dear onclick="passage.postcard('.setStage');"> Holland set a good stage for the rest of the trip.</li> <li.amazing.maze.setStage onclick="passage.postcard('.weather'); story.state.hollandVars.badWeatherHolland = true;"> It was a shame about the weather.</li> <li.amazing.maze.setStage onclick="passage.postcard('.tulipFields');"> The fields of tulips were breathtaking.</li> <% if (story.state.hollandVars.sentTulip == true) { %><li.amazing.setStage onclick="passage.postcard('.sentTulip');"> I sent you a tulip. They said it'd reach you in 48 hours, hope it reached you and you liked it.</li> <% } %> <li.amazing.setStage onclick="passage.postcard('.flat');"> I was surprised how flat it was, a bit like Oklahoma, except for the river and canal systems.</li> <li.tulipFields.sentTulip onclick="passage.postcard('.jam'); story.state.hollandVars.gaveJamAdvice = true;"> Maybe base your jam entry on it?</li> <li.sentTulip.flat onclick="passage.postcard('.understand');"> I really had to see it to understand the ingenuity of it all.</li> <% if (story.state.hollandVars.sentTulip == true) { %><li.tulipFields onclick="passage.postcard('.flowers');"> I know flowers aren't really your thing, but these were really something else.</li> <% } %> <li.tulipFields.weather onclick="passage.postcard('.sorry');"> Sorry you can't be here too, maybe you can make a trip like this yourself someday.</li> <li.weather.sentTulip.flat.jam.understand onclick="passage.postcard('.goodStop');"> It's been a good first stop.</li> <li.weather onclick="passage.postcard('.moveOn');"> Eager to move on and see how the rest of Europe compares to The Netherlands.</li> <li.sorry.goodStop.moveOn.jam.understand.flowers onclick="passage.postcard('.friend');">Your Friend.</li> </ul> <div.shown.postcard#postcard1> <span.hi>Hi Paul,<br> Thanks for agreeing to do this.</span> <span.hey>Hey Pal, <br> Glad you could be my pen friend during my backpack trip :) </span> <span.dear>Dear Paul,<br> You won't believe the trip I'm having, I can't imagine how jealous you must be.</span> <span.amazing> Holland has been amazing.</span> <span.maze> Holland has been A-Mazing (I got lost a few times).</span> <span.setStage> Holland set a good stage for the rest of the trip.</span> <span.weather> It was a shame about the weather.</span> <span.tulipFields> The fields of tulips were breathtaking.</span> <span.sentTulip> I sent you a tulip. They said it'd reach you in 48 hours, hope it reached you and you liked it.</span> <span.flat> I was surprised how flat it was, a bit like Oklahoma, except for the river and canal systems.</span> <span.jam> Maybe base your jam entry on it?</span> <span.understand> I really had to see it to understand the ingenuity of it all.</span> <span.flowers> I know flowers aren't really your thing, but these were really something else.</span> <span.sorry><br><br>Sorry you can't be here too, maybe you can make a trip like this yourself someday.</span> <span.goodStop><br><br>It's been a good first stop.</span> <span.moveOn><br><br>Eager to move on and see how the rest of Europe compares to The Netherlands.</span> <span.friend><br><br>Your Friend.</span> <span.friend.clickable onclick="if($('.passage').hasClass('widePassage')){$('.passage').removeClass('widePassage');}story.show('To Lux');" style="font-family:Georgia;font-size:90%"><br><br>Send the Postcard</span> </div> </div> <script> passage.options = document.getElementsByTagName('li'); passage.postcard = function(optionClass) { for (let i = 0; i < passage.options.length; i++) { $(passage.options[i]).removeClass('shown'); $(passage.options[i]).addClass('hidden'); } $(optionClass).removeClass('hidden'); $(optionClass).addClass('shown'); } </script><!-- TODO: mousout --> <p.shown>Heading out of Holland, you meander around borders—Belgium to Germany back to Belgium to France. You circle in on your next destination: Luxembourg.</p> <p.shown>As you work your way along bus routes and hiking trails, there are times when you think you could just be in the wild spaces of the <span.mouseout.shown onmouseout="story.state.showHide(this, '.forest');">United States</span><span.forest>, one national forest looking broadly the same as the other to you</span>. But all it takes is to come upon some old ruin or memorial, or else some quaint, tumbledown village over a thousand years old for the similarities to [[shatter and vanish.->To Lux 2]] <p.shown>Passing through these places, you begin to notice what has been <em>preserved</em>, and for how long, and to wonder at the whys and hows of it all. Which ruins have become museums, which are covered in graffiti. Which villages maintain historic districts, which are overrun with modernization.</p> <p.shown>Without anyone to converse with save passing tourists, you'll have to save it for the next postcard or to keep mulling it over inwardly while you move on through Europe.</p> <p.shown>[[To add to your ponderings...->To Lux 3]]</p><!-- TODO: *mouseout *link reveal/click append *choose between two links and hide the other --> <p.shown>The final approach to Luxembourg blends things in a different way: the bus tour takes you past <span.mouseout.shown onmouseout="story.state.showHide(this, '.restored');"> authentic ruins</span><span.restored>, some of them restored over the centuries</span>, revival architecture, blocky high-rises that look like they could have been picked up from New York or Chicago and plopped down here in Europe, and ultra modern, sleek buildings which reflect the blue sky above. </p> <p.shown> <span.clickable.shown onclick="story.state.showHide(this, '.more');">Luxembourg, Luxembourg has all of this and more</span><span.more> within its expansive urban sprawl, which threatens to bulge out of its country's compact borders. But apart from the ride in, you do not see the city <span.clickable.more onclick="story.state.showHide(this, '.yet');">yet.</span></span></p> <p.yet>When you were planning this trip for yourself, Luxembourg felt like an obligatory stop. Your great-grandfather was a tank gunner under General Patton in the Second World War, and is buried alongside him in the city.</p> <p.yet><span.respects.clickable.yet onclick="story.state.showHide(this, '.respects', '.family');">Wanting to pay your respects</span><span.respects> you head over to the [[cemetery and war memorial->War Memorial]] first.</span></p> <p.yet><span.clickable.family.yet onclick="story.state.showHide(this, '.family', '.respects');">Knowing your family would never let you hear the end of it</span><span.family> if you didn't visit his grave, you head off to see a part of your family [[heritage.->War Memorial]]</span> </p><!-- TODO: *choose between two choices and hide the other *variable setting *mouseout add p5 sketch with LuxCrossesBG --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.luxCrossesBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Even rows of white crosses spread out over the immaculate green grass of the cemetery, reminding you strongly of the Arlington National Cemetery back home.</p> <p.shown>Walking along, you find his grave marker only a few rows in. You feel as you stand before it...</p> <p.shown><span.clickable.solemnity.shown onclick="story.state.showHide(this, '.solemnity','.bitterness');story.state.luxVars.somberMemorial = true;">...the solemnity</span><span.solemnity> the graveyard evokes, different from others: a feeling of power and respect commanded by these even, brilliant white crosses and the dead Americans given a permanent place for their unending rest in this city far from [[home.->War Memorial 2]]</span></p> <p.shown><span.clickable.bitterness.shown onclick="story.state.showHide(this, '.bitterness','.solemnity');story.state.luxVars.bitterMemorial = true;">...the bitterness</span><span.bitterness> of how clean and well tended and <em>preserved</em> this cross, this space, is when there is still<span.mouseout.bitterness onmouseout="story.state.showHide(this, '.bitterExtra', '.bitterSpace');"> war</span><span.bitterExtra>—ugly, messy, terrible war—</span><span.bitterSpace.bitterness> </span>in the [[world.->War Memorial 2]]</span></p> <!-- TODO: *conditional display text based on existing variable *link-reveal *mouseout add p5 sketch with LuxCrossesBG --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.luxCrossesBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>You stand for another few moments taking in the memorial now, up the hill from the graves, looking out over all of them. You'd considered bringing flowers, but now you're glad you didn't. There are some wreathes, especially on the memorial, but they seem out of place on the manicured lawn and the precisely cut, solid white stone. This graveyard doesn't seem like the place for flowers.</p> <p.shown> <% if(story.state.luxVars.somberMemorial) { %> <span.clickable.shown onclick="story.state.showHide(this, '.tourists');">Something intrudes on your somber musings...</span><% } else if (story.state.luxVars.bitterMemorial) { %> <span.clickable.shown onclick="story.state.showHide(this, '.tourists');">Something intrudes on this pristine place...</span><% } %><span.tourists> a group of tourists, bristling with cameras and smartphones, disturbing the <span.mouseout.tourists onmouseout="story.state.showHide(this, '.touristsExtra');"> peace</span><span.touristsExtra>, even as they announce to each other the need to be respectful</span>.</span></p> <p.tourists>You decide it's time to leave and find the <i>[[Hotel Kontinentale.]]</i></p><!-- TODO: *click-append *mouseout --> <p.shown>The hotel is massive, the largest you expect to be staying in. The exterior is of drab stonework that looks like it could be several hundred years old, but the interior is all gleaming lights and glass. After checking in and asking whether there is a letter waiting for you, the clerk asks a more senior <span.clickable.shown onclick="story.state.showHide(this, '.clerk');">clerk...</span><span.clerk> who gets their <span.clickable.clerk onclick="story.state.showHide(this, '.manager');">manager... </span></span><span.manager> who disappears into the bowels of the hotel for several <span.clickable.manager onclick="story.state.showHide(this, '.minutes');">minutes...</span></span><span.minutes> They finally return. All smiles and apologies.</span></p> <p.minutes><q>It was set outside of the wrong room this morning. Here you go. Not used to handling letters anymore, you see.</q></p> <p.minutes>You take the [[letter->Letter 2]] away from the apologetic hoteliers and read it up in <span.mouseout.minutes onmouseout="story.state.showHide(this, '.room');">your room</span><span.room>, which, in opting for economy during the months of planning the trip, overlooks the parking lot and dumpsters</span>. </p><!-- TODO: *text display within box to fit onto letter background *conditional display of text based on previous variables *mouseout *conditional display of links based on previous variables. load p5 sketch with letterBG --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.letterBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <div.shown.letterContainer> <p.shown>Hey, </p> <% if (story.state.hollandVars.gaveJamAdvice == true) { %> <p.shown> <% if (story.state.hollandVars.sentTulip == true) { %><span.shown>I got your tulip and used it as inspiration for the lastest Ludum Dare!</span><% } else { %><span.shown>Thanks for the advice in your posdcard.</span><% } %><span.shown> It turns out the theme <% if (story.state.hollandVars.sentTulip == false) { %> for the game jam <% } %> was "delivery" which I thought was perfect for tulips! I did a little research on the tulip trade out of The Netherlands, then made a little game where you have limited time to carefully pick a flower, ship it, and deliver it to someone. If you complete the level fast enough, the deliveree tells you that it really made their day</span><% if (story.state.hollandVars.sentTulip == true) { %><span.shown> (just like yours did for me!)</span><% } %><span.shown>.</span></p><p.shown>It was a great jam, I'm sad you couldn't do it with me this time, but thanks for the inspiration while you were away (and I made sure to acknowledge you)! I was glad to hear from you, even if you didn't have much space to write on the back of the postcard. I'm still jealous just from the highlights. Don't get me wrong, I'm liking this pen pal arrangement, just wish I could be there too.</p> <% } else if (story.state.hollandVars.sentTulip == true) { %><p.shown>Thanks for the tulip. It was really sweet of you to do that. It came in a fancy tube thing with lots of packing material and insulation stuff, but once I unwrapped it, it lasted a surprisingly long time! I'm not usually a flower person, but it was really nice to look at it and think of you in Holland. And I was glad to hear from you, even if you didn't have much space to write on the back of the postcard. I'm still jealous just from the highlights. Don't get me wrong, I'm liking this pen pal arrangement, just wish I could be there too. </p> <% } else if (story.state.hollandVars.lostInHolland == true) { %><p.shown>Look, I'm sorry to hear you got lost. Your tone makes it sound like it wasn't too bad, but please be more careful. But still, I was glad to hear from you, even if you didn't have much space to write on the back of the postcard. I'm still jealous just from the highlights. Don't get me wrong, I'm liking this pen pal arrangement, just wish I could be there too.</p> <% } else if (story.state.hollandVars.badWeatherHolland == true) { %><p.shown>Sorry to hear the weather's been bad. I hear we're in for a hot summer, so enjoy the cool rain while you can I guess. I was glad to hear from you, even if you didn't have much space to write on the back of the postcard. I'm still jealous just from the highlights. Don't get me wrong, I'm liking this pen pal arrangement, just wish I could be there too.</p> <% } else { %><p.shown>Got your card :) I was glad to hear from you, even if you didn't have much space to write on the back of the postcard. I'm still jealous just from the highlights. Don't get me wrong, I'm liking this pen pal arrangement, just wish I could be there too.</p> <% } %> <p.shown>Things are still more or less the same here. I'm worried that Har-Fest is going to be a canner. I didn't want to bring it up with you until you got back, and I don't want you to stress over it while you're gone, but I <em>never did</em> like that "harvest" theme for that one Ludum Dare. Just saying.</p> <p.shown>And speaking of games, I hate to break your offline oath, but the new Zelda game just came out. I could send you my Switch if you want to play it on bus rides and stuff. Those have got to be, like, super boring anyways, right? And don't worry, I've nearly hundred percented it already. I've been <span.shown.mouseout onmouseout="story.state.showHide(this,'.binging');"> binging it</span><span.binging>, like, hard</span><span.shown>.</span></p> <p.shown>Anyway, this is greeting you in Luxembourg. How is it there? Can't wait to see your postcard and read more about all the adventures I'm missing out on.</p> <p.shown>Your Pal,<br> Paul</p> <% if (story.state.veniceVars.revisiting == true) { %> <p.shown style="font-family: 'Georgia';font-size:85%"><i>[[Close the letter->Letter Select]]</i></p> <% } else { %> <p.shown style="font-family: 'Georgia';font-size:85%"><i>[[Close the letter->Luxembourg]]</i></p> <% } %> </div><!-- TODO: *link reveal load p5 sketch with LuxembourgCityBG --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.luxCityBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Because your main motivation in going to Luxembourg had been seeing your great-grandfather's grave, you'd only planned to stay here a few days.</p> <p.shown> <span.clickable.shown onclick="story.state.showHide(this, '.firstDay');">The first day</span><span.firstDay> of exploring the city is a shock to the system after over a month of back roads, bus depots, and wilderness sanctuaries. The city teems with people speaking all different languages, of all different looks and walks of life. Their endless glances, gestures, and conversation is dizzying to acclimate to, but the thing that really intimidates <span.clickable.firstDay onclick="story.state.showHide(this,'.sheerSize');">you...</span></span><span.sheerSize> is the sheer size of the <span.clickable.sheerSize onclick="story.state.showHide(this,'.city');"> city </span> that you are free to explore.</span></p> <p.city>The way it looms above and around you, built as it is along a series of hills and valleys, meandering as much as the rivers that run through it. Like a living thing, the [[roads and railways->Luxembourg 2]] its blood and nerves.</p> <!-- TODO: *click append load p5 sketch with LuxembourgCityBG --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.luxCityBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>At the end of the first day, you mistake your tram and end up in a sprawling green field, across from a neighborhood consisting of only a few blocks, but which looks as though you could walk across the street and find your home among them.</p> <p.clickable.shown onclick="story.state.showHide(this, '.outside');">Outside the city?<span.outside><br>Inside it? Who knows.</span></p> <p.outside.clickable onclick="story.state.showHide(this, '.backHome');">Are you somehow back home?<span.backHome><br>You trudge along the outside perimeter of the neighborhood, looking for [[a sign.->Luxembourg 3]]</span></p><!-- TODO: *click append/link reveal *conditional display of text based on what link selected (and hiding of unselected options) *setting variables *mouseout *converting one type of element (a p) to a different type (a span). - instead just shifted from block to inline, as that's what actually needed to happen. load p5 sketch with LuxembourgCityBG --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.luxCityBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Nearby, a man in a white tee-shirt and <span.mouseout.shown onmouseout="story.state.showHide(this,'.sunglasses');">sunglasses</span><span.sunglasses> (it's dusk)</span> leaves his home: possibly a jogger, possibly to get into his car.</p> <p.clickable.firstOptionSet.shown onclick="story.state.showHide(this, '.stop','.firstOptionSet');story.state.luxVars.askedForDirections = true;">Stop and ask for directions.</p> <p.firstOptionSet.shown>[[Keep going.->Back at the Hotel Kontinentale]]</p> <p.stop>You stop and ask for directions. </p> <p.stop>He smiles and listens in a friendly sort of manner. <q.mouseout onmouseout="story.state.showHide(this, '.accent');">You want a ride to your hotel?</q><span.accent><br>The man's accent tells you that you are still in Europe.<br></span></p> <p.stop.secondOptionSet>[[Accept the ride.->Accept]]</p> <p.stop.secondOptionSet.clickable onclick="story.state.showHide(this, '.refuseRide','.secondOptionSet');story.state.luxVars.acceptedRide = false;"> Assure him you'll make it back once you find the way to the nearest bus stop.</p> <p.refuseRide>You assure him you'll make it back once you find the way to the nearest bus stop.</p> <p.refuseRide><q>If you're sure. Here, I'll show you the way if you can pull a map up on your phone.</q></p> <p.refuseRide.optionSetThree.clickable onclick="story.state.showHide(this, '.excuse','.optionSetThree');">Make an excuse.</p> <p.refuseRide.optionSetThree.clickable onclick="story.state.showHide(this, '.truth','.optionSetThree');">Tell the man you are traveling phoneless.</p> <p.excuse>You mumble through a lie along the lines of a dead battery and leaving it on the charger in the bus station.</p> <p.truth>You tell the man about your attempt to leave electronics behind for your vacation. Feeling as you do, a twist in your stomach of <span.longingRest>longing.</span><span.vulnerabilityRest>vulnerability.</span> <span.thirdOptionSet.clickable.truth onclick="story.state.showHide(this, '.longingRest','.thirdOptionSet');story.state.luxVars.longingInLux = true;"><br>longing.</span> <span.thirdOptionSet.clickable.truth onclick="story.state.showHide(this, '.vulnerabilityRest','.thirdOptionSet');story.state.luxVars.vulnerableInLux = true;"><br>vulnerability.</span> </p> <p.excuse>The stranger seemed to have trouble following your made-up story, but gives some vague gestures with his arms, then waves: [[“Good luck.”->Back at the Hotel Kontinentale]]</p> <p.longingRest>The man looks down at the phone in his own hand. It's hard to tell behind the sunglasses, but he seems as shaken by the thought as you are in that moment. <q>Wow. I don't think I could ever do that. Well, if [[I can't help you->Back at the Hotel Kontinentale]], good luck in your journey, then.</q></p> <p.vulnerabilityRest>The man looks down, and you watch his every move closely, tensing for a <span.clickable.vulnerabilityRest onclick="story.state.showHide(this, '.confrontation');"> confrontation...</span> <span.confrontation> which never comes. He finally looks back up at you. <q>Wow. I don't think I could ever do that. Well, if [[I can't help you->Back at the Hotel Kontinentale]], good luck on your journey, then.</q></span></p><!-- TODO: *setting variables *link reveal load p5 sketch with LuxembourgCityBG --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.luxCityBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <%story.state.luxVars.acceptedRide = true; %> <p.shown>You accept his offer, hearing in your head Paul's voice as you buckle up "And please don't get kidnapped, lost in the woods, fall off a mountain, mugged, or accidentally become a drug mule or <span.clickable.shown onclick="story.state.showHide(this, '.something');">something..."</span></p> <p.something>You make anxious chit-chat with the <span.clickable.something onclick="story.state.showHide(this, '.stranger');"> stranger...</span><span.stranger> until he pulls up outside the <span.clickable.stranger onclick="story.state.showHide(this, '.hotel');"> Hotel Kontinentale.</span></span></p> <p.hotel>With many thank yous and yes-I-see-how-I-read-the-map-wrong-nows, you head [[inside.->Accept 2]]</p><!--load p5 sketch with luxcitybg--> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.luxCityBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Maybe it's best to stay in the immediate vicinity of the hotel for the rest of your [[time here.->Leaving Lux]]</p><!-- TODO: Image display: much as it was in v1.3, but ideally add different displays for different screens. Image may also need centering or to be told alignment/float behaviors. --> <p.shown>After whiling away enough days, you pack up for the next leg of your journey: a long series of bus rides into the alps, which you plan to trek through.</p> <p.shown>Before you leave, you send Paul a <span.shown.clickable onclick="$('.passage').addClass('widePassage');story.show('Postcard 2');"> postcard </span>from your time in Luxembourg.</p> <p.shown><img src="media/luxembourg_postcard_1.webp" alt="Luxembourg Postcard Front" style="width:1000px;height:600px;" /img></p><!--load p5 sketch with luxcitybg--> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.luxCityBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Several hours later you stumble into the gleaming hotel, footsore and hungry.</p> <p.shown>Maybe it's best to stay in the immediate vicinity of the hotel for the rest of your [[time here.->Leaving Lux]]</p><!-- TODO: All the same stuff as postcard 1 add p5 with Poscard2BG --> <% story.state.luxVars.hasSwitch = false; %> <div.postcardContainer.shown> <ul.optionList> <li.shown onclick="passage.postcard('.paul');">Paul,</li> <li.shown onclick="passage.postcard('.heya');">Heya,</li> <li.heya.paul onclick="passage.postcard('.philosophical');">Listen, sorry to get philosophical on you, blame it on long periods of time spent alone with my thoughts, but something's been bothering me. </li> <li.philosophical onclick="passage.postcard('.questionEurope'); story.state.luxVars.deepQuestionEurope = true;"> Why do some places get to be preserved when people in Europe have such limited space and are all crammed together. Does that make sense?</li> <li.philosophical onclick="passage.postcard('.questionPreservation'); story.state.luxVars.deepQuestionPreservation = true;"> Why preserve some things, give them space, and let others go to ruin, or be demolished and turned to something else? </span> <li.questionEurope.questionPreservation onclick="passage.postcard('.grave');"> Like my great-grandfather's grave, for instance. I know he's a war hero, but why not recognize all war heroes when there's still war going on? Why not recognize them in the same way, in the same space even?</li> <li.questionPreservation onclick="passage.postcard('.ruins');"> Like the old ruins and buildings dotted around the countryside and in Luxembourg, too. Some are barely recognizable while others have been converted into tourist traps. Who's to decide that?</li> <li.questionEurope onclick="passage.postcard('.europeMix');"> It feels like all of Europe is one big mix of old buildings, new ones pretending to be old, ugly new buildings, and new buildings that try to be elegant and pleasing to the eye. More and more pieces of its past take up space, limiting its future.</li> <li.grave.ruins.europeMix onclick="passage.postcard('.sense');"> I hope that makes sense, if not, don't worry about it.</li> <li.heya.paul onclick="passage.postcard('.aboutSwitch');">About your offer of the Switch...</li> <li.aboutSwitch onclick="passage.postcard('.okSwitch');story.state.luxVars.hasSwitch = true;"> You know, I think I'll take you up on it. I'll be passing through Strasbourg, if you can send it to <i>La Perte</i> there. Thank you for lending it to me, bus rides <em>do</em> get pretty boring after all.</li> <li.aboutSwitch onclick="passage.postcard('.noSwitch');"> Thanks, but you know, I made a promise, so Zelda will have to wait.</li> <li.aboutSwitch onclick="passage.postcard('.noZelda');"> Thanks, but I've never been that into Zelda, you know? I'll pass.</li> <li.okSwitch.noSwitch.noZelda onclick="passage.postcard('.anyway');">Anyway...</li> <li.anyway onclick="passage.postcard('.visitedGrave');"> I visited my great-grandfather's grave.</li> <li.visitedGrave onclick="passage.postcard('.impressive');"> The cemetery was an impressive sight.</li> <li.visitedGrave onclick="passage.postcard('.oppositeFlowers');"> It was very starkly opposite to the fields of flowers in Holland.</li> <li.oppositeFlowers onclick="passage.postcard('.preferFlowers');"> And I think I prefer the flowers.</li> <li.oppositeFlowers onclick="passage.postcard('.preferMemorial');"> But honestly, it felt better to visit the memorial than the auction.</li> <li.anyway onclick="passage.postcard('.lostInLux');"> I got lost in Luxembourg. </li> <% if (story.state.hollandVars.lostInHolland == true) { %><li.lostInLux onclick="passage.postcard('.lostAgain');story.state.luxVars.lostAgain = true;"> <em>Again</em>, yeah, I know.</li> <% } %> <li.lostInLux onclick="passage.postcard('.workedOut');"> But see? It worked out.</li> <% if (story.state.luxVars.askedForDirections == true) { %><li.lostInLux onclick="passage.postcard('.lift');"> A guy offered me a lift. </li><% } %> <li.lift onclick="passage.postcard('.steal');story.state.luxVars.frighteningAdventures = true;"> And didn't even try to steal my backpack.</li> <li.lift onclick'="passage.postcard('.nice');"> Isn't that nice of him? </li> <li.anyway.impressive.lostAgain.workedOut onclick="passage.postcard('.harfest');story.state.luxVars.paulVenice = true;"> Sorry to hear about your troubles with Har-Fest. Don't feel bad in moving on to something else. We'll talk about it when I get back.</li> <li.sense.impressive.lostAgain.preferFlowers.preferMemorial.workedOut.steal.nice.harfest onclick="passage.postcard('.friend');">Your Friend.</span> </ul> <div.shown.postcard#postcard2> <span.paul>Paul, <br></span> <span.heya>Heya, <br></span> <span.philosophical>Listen, sorry to get philosophical on you, blame it on long periods of time spent alone with my thoughts, but something's been bothering me. </span> <span.questionEurope> Why do some places get to be preserved when people in Europe have such limited space and are all crammed together. Does that make sense? </span> <span.questionPreservation> Why preserve some things, give them space, and let others go to ruin, or be demolished and turned to something else? </span> <span.grave> Like my great-grandfather's grave, for instance. I know he's a war hero, but why not recognize all war heroes when there's still war going on? Why not recognize them in the same way, in the same space even? </span> <span.ruins> Like the old ruins and buildings dotted around the countryside and in Luxembourg, too. Some are barely recognizable while others have been converted into tourist traps. Who's to decide that? </span> <span.europeMix> It feels like all of Europe is one big mix of old buildings, new ones pretending to be old, ugly new buildings, and new buildings that try to be elegant and pleasing to the eye. More and more pieces of its past take up space, limiting its future. </span> <span.sense> I hope that makes sense, if not, don't worry about it.</span> <span.aboutSwitch>About your offer of the Switch...</span> <span.okSwitch> You know, I think I'll take you up on it. I'll be passing through Strasbourg, if you can send it to <i>La Perte</i> there. Thank you for lending it to me, bus rides <em>do</em> get pretty boring after all.</span> <span.noSwitch> Thanks, but you know, I made a promise, so Zelda will have to wait.</span> <span.noZelda> Thanks, but I've never been that into Zelda, you know? I'll pass.</span> <span.anyway><br><br>Anyway...</span> <span.visitedGrave> I visited my great-grandfather's grave.</span> <span.impressive> The cemetery was an impressive sight.</span> <span.oppositeFlowers> It was very starkly opposite to the fields of flowers in Holland.</span> <span.preferFlowers> And I think I prefer the flowers.</span> <span.preferMemorial> But honestly, it felt better to visit the memorial than the auction.</span> <span.lostInLux> I got lost in Luxembourg. </span> <span.lostAgain> <em>Again</em>, yeah, I know.</span> <span.workedOut> But see? It worked out.</span> <span.lift> A guy offered me a lift. </span> <span.steal> And didn't even try to steal my backpack.</span> <span.nice> Isn't that nice of him? </span> <span.harfest> Sorry to hear about your troubles with Har-Fest. Don't feel bad in moving on to something else. We'll talk about it when I get back.</span> <span.friend><br><br>Your Friend.</span> <span.friend.clickable onclick="if($('.passage').hasClass('widePassage')){$('.passage').removeClass('widePassage');}story.show('To Venice');" style="font-family:Georgia;font-size:90%"><br><br>Send the Postcard</span> </div> </div> <script> passage.options = document.getElementsByTagName('li'); passage.postcard = function(optionClass) { for (let i = 0; i < passage.options.length; i++) { $(passage.options[i]).removeClass('shown'); $(passage.options[i]).addClass('hidden'); } $(optionClass).removeClass('hidden'); $(optionClass).addClass('shown'); } </script><!-- TODO: *conditional display of text based on previous variables *link reveal --> <% if (story.state.luxVars.hasSwitch) { %> <p.shown>You pick up Paul's Switch in Strasbourg, and quickly get lost in the latest Zelda game. Entire bus rides seem to pass in the blink of an <span.clickable.shown onclick="story.state.showHide(this, '.lookUp');">eye...</span></p> <p.lookUp>And then you look up and realize with a jolt that you are rounding a bend, out of the folds of the mountains and down toward the Adriatic Sea.</p> <p.lookUp>Unsettled at the loss of one entire leg of your vacation, you put the Switch away for the [[rest of the trip.->Venice 1]]</p> <% } else { %> <p.shown>You cross the alps, moving from ski town to luxury resort to small, forgotten hamlet to rediscovered and booming hamlet-turned-ski-town.</p> <p.shown>The mountains are breathtaking, and you spend nearly a month agonizing your legs as you hike and climb them.</p> <p#somePoint.clickable.shown onclick="story.state.showHide(this, '.somePointRest','#somePoint');">At some point...</p><p.somePointRest> At some point it occurs to you that you haven't thought about the fact of being <em>unplugged</em> for a while. You haven't missed your phone or computer since you were lost in Luxembourg, but now you've been more careful and don't really think about your electronics any more.</p> <p.clickable.somePointRest#perhaps onclick="story.state.showHide(this, '.perhapsRest','#perhaps');">Perhaps...</p> <p.perhapsRest>Perhaps it's easier out here, in the wilderness, when technology isn't assaulting you from all sides.</p> <p.clickable.perhapsRest#orPerhaps onclick="story.state.showHide(this, '.orPerhapsRest','#orPerhaps');">Or perhaps...</p> <p.orPerhapsRest>Or perhaps it's the fact that you're trekking around, rather than being stuck at your desk where it's so easy, once plugged in, to simply remain there and stay [[plugged in.->The woman]]</p> <% } %><!-- TODO: *link/ link reveal/ click append *mouseout --> <p#aWoman.clickable.shown onclick="story.state.showHide(this, '.theWoman', '#aWoman');">A woman you meet calls your musings into question.</p> <p.theWoman>Out hiking, you meet her stopped along the side of the trail, a bulky pink plastic phone in hand.</p> <p.theWoman><q>Hey darling.</q><br> An easy-going <span.mouseout.theWoman onmouseout="story.state.showHide(this, '.accent');">Southern </span><span.accent> (one of the Carolinas, maybe)</span> accent tells you she's an American.</p> <p.theWoman>Expecting her to be <span#lost.clickable.theWoman onclick="story.state.showHide(this, '.lostAnd', '#lost');"> lost...</span><span.lostAnd>lost and out of cell range, you're already reaching for your paper map when she asks:</span></p> <p.lostAnd><q>Have you heard any 'whioo-whioos' while you've been out today?</q> She makes an odd sort of noise like wind whistling through the trees.</p> <p.lostAnd>You hadn't noticed any, but weren't really paying attention, and <span.clickable.lostAnd onclick="story.state.showHide(this, '.tellingHer');">tell her as much</span> curiously.</p> <p.tellingHer>She explains that she's as wildlife photographer currently on the lookout for <em.mouseout onmouseout="story.state.showHide(this, '.what');">choughs</em><span.what>, at least that's what it sounds like she says, though you're not sure</span>. She shows you her phone where she has a map predicting their movements and migrations.</p> <p.tellingHer>[[You begin talking at greater length...]]</p><!-- TODO: *conditional display of text depending on what is selected. (and hiding what's not) *variable setting --> <p.shown>Slowly walking along among the majestic Alps, <span.clickable.shown onclick="story.state.showHide(this, '.yourStory');">she tells you </span> more about birds and other high altitude animals, about mountaineering, and her many and varied trips for her work.</p> <p.yourStory>You in return tell her about programming, game development, and your long awaited backpack trip through Europe. About bicycling and tulip buyers in Holland, the trek down to Luxembourg, and seeing your great-grandfather</p> <p.yourStory>Each of <span#you.clickable.yourStory onclick="story.state.showHide(this, '.starved','#you');"> you...</span><span.starved> you must be starved for the company of others, otherwise why would you be telling her about about days spent watching people in the hotel in Luxembourg, and she of long nights spent watching for owls.</span></p> <p.starved> The conversation turns to a <span.clickable.starved onclick="story.state.showHide(this, '.theQuestion');">question...</span> <p#question1.theQuestion.clickable onclick="story.state.showHide(this, '.question1Response','#question2');story.state.luxVars.alpsAdvice = true;"><q>How do you keep from, you know, obsesively checking your phone and email and everything while you're out here like this? I had to leave all that stuff behind so I could unplug.</q></p> <p#question2.theQuestion.clickable onclick="story.state.showHide(this, '.question2Response','#question1');"><q>And when you were making all these plans for the trip, what did you think you would do if you got—I don't know—<em>lost</em> or in a dangerous situation or something?</q></p> <p.question1Response>She takes a long breath <q>Well, you know, practice. When I'm on the job, I'm on the job. When I'm not, well, I've learned to turn my mind to other things.</q></p> <p.question1Response.clickable onclick="story.state.showHide(this, '.like');"><q>Like?</q></p> <p.like><q>Oh, I guess it depends. I read, I draw, I exercise. Stuff like that. There's no secret to it, just practice.</q></p> <p.like.clickable onclick="story.state.showHide(this, '.conclusion');"><q>Right.</q></p> <p#acceptance.question2Response.clickable onclick="story.state.showHide(this, '.acceptanceResponse','.question2Response');this.style.display = 'block';"><q>I just had to accept the unknown. Sure, something might happen, but then again something might happen even with a phone or whatever.</q></p> <p#feeling.question2Response.clickable onclick="story.state.showHide(this, '.feelingResponse','.question2Response');this.style.display = 'block';"><q>Honestly? I just had a feeling, like nothing bad was going to happen.</q></p> <p#committed.question2Response.clickable onclick="story.state.showHide(this, '.committedResponse','.question2Response');this.style.display = 'block';"><q>I guess I tried to put it out of my mind. I was committed, even with the risks.</q></p> <p.acceptanceResponse><q>Well, I guess that sounds rather wise, in a way. Still, I'd never take the risk.</q></p> <p.feelingResponse><q>Really? Well I guess it hasn't, so maybe you're on to something.</q></p> <p.committedResponse><q>I can respect that commitment.</q></p> <p.conclusion.committedResponse.feelingResponse.acceptanceResponse>After a little more talking she [[says...->Out of Alps]]</p> <!-- TODO: *link reveal --> <p.shown><q>It's been real nice to chat with you, but I have to get back to tracking choughs. You take care now... and if you hear any 'whioo-whioos' would you make a rock cairn at the spot for me?</q></p> <p.shown>You agree and wave your <span.clickable.shown onclick="story.state.showHide(this,'.farewell');">farewell.</span></p> <p.farewell>She's left you at what might mildly be termed <q>an overlook</q>. It is a rocky outcropping above a smooth cliff, high above the forested valley below and facing back north where the other mountains rise sharply up, even higher than the one you're on now.</p> <p.farewell.clickable onclick="story.state.showHide(this,'.paulsWords');">For a moment it takes your breath away.</p> <p.paulsWords>Then you think of Paul's words from his first letter: <q>And please don't get kidnapped, lost in the woods, fall off a mountain, mugged, or accidentally become a drug mule or something...</q></p> <p.paulsWords>[[And you decide to leave the overlook and keep hiking down out of the mountains.->Venice 1]]</p><p.shown>At long last, after months of travel, you descend from the mountains to your long awaited final destination: Venice.</p> <p.shown>The whole way down, it seems like you can see the Adriatic Sea opening out before you with Venice nestled in its tranquil embrace.</p> <p.shown>Arriving, you do not stay within Venice proper, but in an eclectic hotel on the coast of the mainland, <i>[[Locanda Fine.]]</i></p><!-- TODO: *conditional display of text based on previous variables *click append *showing hiding text based on selected links --> <% if (story.state.luxVars.paulVenice) { %><p.shown>You check into the hotel. A wizzened old man shows you to a room in what looks like a converted attic, with a view of the sea.</p> <p.shown><q>But don't you have a letter for me?</q></p> <p.shown>The old man <span.clickable.shown onclick="story.state.showHide(this, '.optionSet1');story.state.showHide(this, '.aboutPaul1');">shakes his head.</span></p> <p.aboutPaul1>Did something happen to Paul? With a pang you realize you would have no way of knowing.</p> <p.optionSet1.clickable onclick="story.state.showHide(this,'.call','.optionSet1');this.style.display = 'block';">You worriedly ask the man to borrow a phone to call Paul.</p> <p.optionSet1.clickable onclick="story.state.veniceVars.postOffice = true;story.show('Paul Venice');">You head over to the post office in Venice. After all, maybe the letter just wasn't delivered.</p> <p.optionSet1.clickable onclick="story.state.veniceVars.noWorry = true;story.show('Paul Venice');">You try to put the worry out of your mind and enjoy Venice anyway.</p> <p.call>The the old man lets you borrow the <span.mouseout.call onmouseout="story.state.showHide(this, '.phone');">hotel phone</span><span.phone>, still an old fashioned landline if that counts for anything, </span> and you desperately stand <span.clickable.call onclick="story.state.showHide(this, '.there', this);"> there...</span><span.there> there trying to remember his phone <span.clickable.there onclick="story.state.showHide(this, '.number', this);">number...</span><span.number> number... but you can't. You're not sure if you ever knew it. You talked mainly through various computer applications, and when he did tell you to call him that one time, you must have programmed it into your phone and forgotten <span.clickable.number onclick="story.state.showHide(this, '.whereTo');"> about it.</span></p> <p.whereTo>A whirl of panic starts to rise within you. There must be some other way.</p> <p.whereTo.clickable onclick="story.state.veniceVars.postOffice = true;story.show('Paul Venice');">To the post office.</p> <p.whereTo.clickable onclick="story.state.veniceVars.noWorry = true;story.show('Paul Venice');">Try to calm down and trust that Paul is OK.</p> <% } else { %><p.shown>You check into the hotel. A wizzened old man presents you with Paul's final [[letter->Letter 3]] for the trip, then shows you up to your room, a converted attic with a view of the sea.</p> <% } %><!-- TODO: *text display within box to fit onto letter background *conditional display of text based on previous variables *conditional display of links based on previous variables. load p5 sketch with letterBG --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.letterBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <div.shown.letterContainer> <p.shown>Hey Friend,</p> <p.shown>I know you must be getting to Venice soon, so it's time for another letter. I've really enjoyed writing these and hearing about your adventures. <% if (story.state.luxVars.lostAgain == true) { %>Although the number of times you've gotten lost frightens me, hopefully you are in fact reading this and aren't lost right now. If you did make it out, then </span> <% } else if (story.state.luxVars.frighteningAdventures == true) { %> Although some of the things you said you've done frighten me. But still <% } %> I hope you enjoyed your trip through the Alps and aren't too bummed that the vacation is almost over. I know that you've said Venice was the place you always wanted to visit. I hope it lives up to it. And if not, that's alright, okay? You've seen a lot of amazing things on this trip, don't let yourself forget it all.</p> <% if (story.state.luxVars.deepQuestionEurope == true) { %> <p.shown>Listen, I've been thinking about what you wrote in your last postcard. I honestly don't know what to say but, at risk of saying the wrong thing, it sounds like Europe has space of all kinds. There's been plenty of wild areas for you to trek through, old and preserved spaces dotted around, and then, yes, cities brimming with people. But that's how cities <em>are</em>, anywhere in the world. The question of how space is used includes both preservation and urbanization, but that doesn't mean they have to be at odds with one another. <br> It was a big question though, so that's just my take on it.</p> <% } else if (story.state.luxVars.deepQuestionPreservation == true) { %><p.shown>Listen, I've been thinking about what you wrote in your last postcard. The question of preservation is one I don't know how to answer in any satisfactory way. It's something I think about too though, sometimes.</p> <% } else if (story.state.luxVars.hasSwitch == true) { %><p.shown>I hope you got my Switch in Strasbourg. How have you been liking Zelda? The ending is really something, isn't it? When you get back, I'll have to tell you about a crazy item combination for a weapon that I figured out. And don't worry too much about how you're going to get it over to my place, I don't use it that often anyway, so I'm fine with you keeping it a little while longer after you get back.</p> <% } %><p.shown>As for me, I know I say I'm jealous about your vacation, and I am a little, but life is good back here.<% if (story.state.hollandVars.gaveJamAdvice == true) { %> After ditching Har-Fest, I've been working some more on that tulip game I submitted to Ludum Dare in the spring. It's been nice to work on something new, something smaller but still sweet, you know?<% } else { %> I've been tooling around with different ideas for our next game. Hopefully you can come back and help me cook up something good for the next Ludum Dare.<% } %></p> <p.shown>Enjoy Venice,</p> <p.shown>Talk soon.<br> Paul</p> <% if (story.state.veniceVars.revisiting == true) { %> <p.shown style="font-family: 'Georgia';font-size:85%"><i>[[Close the letter->Letter Select]]</i></p> <% } else { %> <p.shown style="font-family: 'Georgia';font-size:85%"><i>[[Close the letter->Venice Redux]]</i></p> <% } %> </div><!-- TODO: *conditional display of text based on previous variables *showing the same bit of text through a few different links (those link are within the conditional block, and then they funnel back into the same piece of text). *click append type behavior add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% if (story.state.veniceVars.postOffice) { %> <p.shown>You set out for the post office, hardly noticing the long awaited city drawing steadily closer on your ride across the bridge. Stepping foot in Venice for the first time, you see nothing of it, too concerned with finding the post office.</p> <p.shown>But as you desperately look around, words distract you.<span.shoe.clickable.shown onclick="story.state.showHide(this, '.seePaul');"> Someone calling your name.</span></p> <% } else { %> <p.shown>You try to shrug off your concern over Paul, accepting that there is nothing you can do, and consoling yourself that he must be okay, there was just some issue with the letter.</p> <p.shown>Not to be detered from the city you've been looking forward to most, you head into Venice that very night, straight for the pier to dip your toe in the Adriatic Sea, the mark of the end of your journey started back in Holland.</p> <p.shown>As you bend down to untie your shoe, you hear someone calling your name. <span.shown.clickable onclick="story.state.showHide(this, '.seePaul');">You straighten up.</span></p> <% } %> <p.seePaul>Turning around, you are stunned to see Paul waving at you to catch your attention, partially hidden amidst a crowd of tourists along a canal.</p> <p.seePaul.clickable onclick="story.state.showHide(this, '.paulHere');"><q>What...</q></p> <p.paulHere>You barely begin to speak before Paul is walking toward you. <q>I know, I know. I decided to come join you. I hope that's okay. But since I'm no longer working on Har-Fest, I'm between projects, so... why not?</q></p> <p.paulHere.clickable onclick="story.state.showHide(this, '.howPaul');"><q>But you hadn't been planning on this or saving up for it or anything!</q></p> <p.howPaul><q>Well, I repurposed my graphics card fund.</q> He looks around. <q>I think I prefer this.</q></p> <p.howPaul>Then he smiles <q><span.howPaul.clickable onclick="story.state.showHide(this, '.paulSurprise');">And that's not all...</span><span.paulSurprise> I got us tickets for a cruise to Malta. It leaves in a few weeks so we'll still have plenty of time here but... you know, I thought I'd treat you to an extra stop on your trip.</span></q></p> <p.paulSurprise>[[<q>Thanks Paul.</q>->Paul Venice 2]]</p><!-- TODO: *setting variables *conditional show/hide of text depending on what option is selected. add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% story.state.veniceVars.paulVenice = true; %> <p.shown>Touring Venice with Paul is a distinct departure from how your vacation has been thus far. It is strange to have another person <span.cityPath>to experience the city with.</span><span.togethernessPath>to have to coordinate with.</span><span.dialoguePath>who you know so well, to talk with at any hour.</span> <p.firstOptionSet.clickable.shown onclick="story.state.showHide(this, '.cityPath', '.firstOptionSet');"> to experience the city with.</p> <p.firstOptionSet.clickable.shown onclick="story.state.showHide(this, '.togethernessPath', '.firstOptionSet');"> to have to coordinate with.</p> <p.firstOptionSet.clickable.shown onclick="story.state.showHide(this, '.dialoguePath', '.firstOptionSet');">who you know so well, to talk with at any hour.</p> <p.cityPath>You and Paul take a gondola ride through the city that evening<span.awkwardRest>... a bit awkward as it's meant for couples...</span><span.outOfMindRest> but you put it out of your mind which is easy, as Venice soon envelops you [[both.->Venice With Paul]]</span><span.laughRest> and you and Paul laugh about it each time you encounter another [[pairing on the water.->Talk With Paul]]</span> <p.cityPath.clickable.awkwardAndQuiet onclick="story.state.showHide(this, '.awkwardRest', '.awkwardAndQuiet');story.state.veniceVars.couplesRide = true;">... a bit awkward as it's meant for couples...</p> <p.awkwardRest.clickable.laughOrIgnore onclick="story.state.showHide(this, '.outOfMindRest', '.laughOrIgnore');"> but you put it out of your mind</p> <p.awkwardRest.clickable.laughOrIgnore onclick="story.state.showHide(this, '.laughRest', '.laughOrIgnore');"> and you and Paul laugh about it </p> <p.awkwardAndQuiet.clickable onclick="story.state.veniceVars.quietMoment = true;story.show('Venice With Paul');">... finding the city cool and quiet."</p> <p.togethernessPath>But Paul assures you he didn't want to disrupt your anticipated visit to Venice, and allows you to take the lead in planning your days in the city.</p> <p.togethernessPath>So you...</p> <p.togethernessPath>[[take him on the gondola ride you'd been planning.->Venice With Paul]]</p> <p.togethernessPath>[[ask to see the city alone for now and meet up with him again soon.->Venice Without Paul]]</p> <p.togethernessPath>[[go have dinner in a small trattoria and catch up with Paul.->Talk With Paul]]</p> <p.dialoguePath>You walk about the city spending days catching up, regaling Paul with stories that couldn't fit on postcards, and Paul <% if(story.state.hollandVars.gaveJamAdvice){ %> telling you more about the tulip game he developed in your absence. <% } else { %>getting his final woes about the failed Har-Fest game off his chest. <% } %> <p.dialoguePath>As you explore the city, you seem to have one long protracted conversation</p> <p.dialoguePath>[[about Venice.->You break the silence.]]</p> <p.dialoguePath>[[about life.->Talk About Life]]</p><!-- TODO: *link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Paul readily agrees and tells you which section of the city he'll be in so you can find him again without a phone.</p> <p.shown>Then you go off <span.shown.clickable onclick="story.state.showHide(this, '.rest');"> by yourself once more.</span></p> <p.rest>You take a gondola tour of the city, unable to help but notice all the other boats arround have two, three, sometimes even four people in them. Your gondolier hardly seems to notice, though, and silently begins to ferry you around [[Venice's canals.->Venice without Paul 2]]</p><!-- TODO: link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Past red roofed buildings and gray cracked <span.shown.clickable onclick="story.state.showHide(this, '.rest');">stone...</span><span.rest> You drink in the city at long last, trying hard to experience this moment fully, to fix this dreamlike ride in your [[memory...->Venice without Paul 3]]</span></p><!-- TODO: link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>...past arched doorways opening right onto the <span.shown.clickable <span.shown.clickable onclick="story.state.showHide(this, '.rest');"> water...</span><span.rest> past colonnades and [[bridges...->You notice how the buildings almost seem to blur together...]]</span></p><!-- TODO: link reveal conditional display of text based on past variables add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Past red-roofed buildings and gray cracked <span.shown.clickable onclick="story.state.showHide(this, '.stone');"> stone... </span><span.stone> past arched doorways opening right onto the <span.stone.clickable onclick="story.state.showHide(this, '.water');"> water... </span><span.water> past colonnades and <span.water.clickable onclick="story.state.showHide(this, '.bridges');"> bridges... </span></p> <p.bridges>The gondolier ferries you and Paul in silence, and soon you forget someone is propelling you at all. The city itself seems to be pulling you through its canals.</p> <p.bridges>Gliding over the<span.bridges.clickable onclick="story.state.showHide(this, '.dream');"> water... </span><span.dream> it's like a dream come true.</span></p> <p.dream>After a while...</p> <% if(story.state.veniceVars.quietMoment == true) { %> <p.dream>[[You and Paul disembark at a quiet, sandy beach.->Quiet Moment With Paul]]</p> <% } else { %> <p.dream>[[Paul breaks the silence.]]</p> <p.dream>[[You break the silence.]]</p> <% } %><!-- TODO: *conditional display/hiding of text based on what's clicked *conditional display of text based on past variables *setting variables add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown><q>Has the whole trip been this... wonderful?</q></p> <p.shown.clickable.because onclick="story.state.showHide(this, '.because', '.sorry');">No. This is the best...</p> <p.because.clickable onclick="story.state.showHide(this, '.youResponse', '.because');"> ...because you're here with me.</p> <p.because.clickable onclick="story.state.showHide(this, '.veniceResponse', '.because');"> ...I knew Venice would be, that's why I came here last.</p> <p.youResponse><q>No this is the best because you're here with me.</q></p> <p.veniceResponse><q>No this is the best, I knew Venice would be, that's why I came here last.</q></p> <p.shown.clickable.sorry onclick="story.state.showHide(this, '.sorry', '.because');">Yes...</p> <p.sorry.clickable onclick="story.state.showHide(this, '.jealous', '.sorry');"> ...sorry, I know you're jealous.</p> <p.sorry.clickable onclick="story.state.showHide(this, '.eachStop ', '.sorry');"> ...each stop in its own way.</p> <p.jealous><q>Yes. Sorry, I know you're jealous.</q></p> <p.eachStop><q> Yes, each stop in its own way.</q></p> <p.jealous.eachStop><q>What was your favorite place? Maybe we can go back together some day.</q></p> <p.jealous.eachStop.clickable onclick="story.state.veniceVars.favoriteCity = 'Amsterdam';story.show('Favorite Stop');">Amsterdam</p> <p.jealous.eachStop.clickable onclick="story.state.veniceVars.favoriteCity = 'Luxembourg';story.show('Favorite Stop');">Luxembourg</p> <% if(story.state.luxVars.hasSwitch != true) { %><p.jealous.eachStop.clickable onclick="story.state.veniceVars.favoriteCity = 'Alps';story.show('Favorite Stop');">The Alps</p><% } %> <p.jealous.eachStop.clickable onclick="story.state.veniceVars.favoriteCity = 'None';story.show('No Favorite Stop');">It's too hard to say...</p> <p.youResponse>Is it the tinges of the sunset or are Paul's cheeks turning red?<br><q>Erm... I'm glad to be here too.</q></p> <p.youResponse.clickable.notSappily onclick="story.state.showHide(this, '.notSappily', '.nice');"><q>Not sappily! I'm just happy to see you.</q></p> <p.notSappily><q>Oh.</q> He awkwardly tries to laugh it off.</p> <p.youResponse.clickable.nice onclick="story.state.showHide(this, '.nice', '.notSappily');"><q>I mean, we're not usually together in person. It's nice.</q></p> <p.nice><q>Oh—um yeah, it is actually.</q></p> <p.notSappily.nice><q>And thanks for booking us a trip to [[Malta.->Malta Linker]] I'm looking forward to it.</q></p> <p.veniceResponse><q>I'm glad I could experience it too, then. And thanks for letting me tag along after I barged in.</q></p> <p.veniceResponse.itWas>You didn't barge in, you just suprised me. It was...</p> <p.veniceResponse.itWas.clickable onclick="story.state.showHide(this, '.great','.itWas');">...great.</p> <p.veniceResponse.itWas.clickable onclick="story.state.showHide(this, '.shocking','.itWas');">...rather shocking.</p> <p.great><q>You didn't barge in, you just suprised me. It was great.</q></p> <p.great><q>Ha ha good. I was worried it would be hard to find you, but I guess I got lucky.</q></p> <p.shocking><q>You didn't barge in, you just suprised me. It was rather shocking after all.</q></p> <p.shocking><q>Oh, sorry. I didn't mean to just shout you down. I meant to go asking at that hotel you gave me the address for, but I'd only just arrived here myself.</q></p> <p.great.shocking><q>Regardless, we'll stick together for the rest of the trip. As wonderful as Venice is, I'm eager to see what [[Malta->On to Malta]] will be like.</q><!-- TODO: *conditional display of text based on past variables *showing/hiding text based on what's clicked add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% if(story.state.veniceVars.favoriteCity == "Amsterdam") { %> <p.shown><q>Oh yeah, I liked the postcard you sent me.</q></p> <p.shown.countryside.clickable onclick="story.state.showHide(this,'.countryside','.auction');"><q>The contryside there was just perfect.</q></p> <% if (story.state.hollandVars.lostInHolland == true) { %> <p.countryside><q>I know you said it was a bit of a maze, I'm glad you could still enjoy it though.</q></p> <% } else if (story.state.hollandVars.badWeatherHolland == true) { %><p.countryside><q>Well good, I'm glad the weather didn't spoil it for you.</q></p> <% } else { %><p.countryside><q>Maybe you can take me on a tour of its windmills someday.</q></p> <% } %> <% if (story.state.hollandVars.sentTulip == true) { %> <p.shown.auction.clickable onclick="story.state.showHide(this, '.auctionTulip','.countryside');"><q>Maybe I'll take you back to that place I got your tulip from someday.</q></p> <% } else { %> <p.shown.auction.clickable onclick="story.state.showHide(this, '.auctionNoTulip','.countryside');"><q>The auction was fascinating.</q></p> <% } %> <p.auctionTulip><q>Yeah, it would be neat to see it in person. It's incredible to think about people flocking to buy flowers like that.</q></p> <p.auctionNoTulip><q>Really? I don't think you wrote me about an auction. Tell me about it.</q></p> <p.auctionNoTulip.tellPaul>And you tell Paul...</p> <p.auctionNoTulip.tellPaul.clickable onclick="story.state.showHide(this,'.competition','.tellPaul');">...about the competion of riches for the sake of flowers.</p> <p.auctionNoTulip.tellPaul.clickable onclick="story.state.showHide(this,'.tulipFields','.tellPaul');">...about the private fields of tulips.</p> <p.competition>And you tell Paul about the competion of riches for the sake of flowers.</p> <p.competition><q>Wow, that's incredible.</q></p> <p.tulipFields>And you tell Paul about the private fields of tulips.</p> <p.tulipFields><q>That does sound like an interesting place to visit.</q></p> <% } else if (story.state.veniceVars.favoriteCity == "Luxembourg") { %> <p.shown><q>Really? You told me before you left that you were only visiting for the sake of your family.</q></p> <p.shown.cemetery>True but the cemetery was...</p> <% if (story.state.luxVars.somberMemorial == true) { %> <p.shown.cemetery.clickable onclick="story.state.showHide(this,'.impressive','.cemetery');">...actually kind of impressive.</p> <% } else { %><p.shown.cemetery.clickable onclick="story.state.showHide(this,'.contrast','.cemetery');">...a sharp contrast, a hint of bitterness that made everything else sweeter.</p> <% } %> <p.shown.cemetery.clickable onclick="story.state.showHide(this,'.important','.cemetery');">...important. A place of remembrance.</p> <p.impressive><q>True but the cemetery was actually kind of impressive.<br>It's left me thinking about it, you know?</q></p> <p.contrast><q>True but the cemetery was a sharp contrast, a hint of bitterness that made everything else sweeter.<br>It's left me thinking about it, you know?</q></p> <p.important><q>True but the cemetery was important. A place of remembrance.<br>It's left me thinking about it, you know?</q></p> <p.impressive.important.contrast><q>Yeah. I think I understand.</q></p> <% } else if (story.state.veniceVars.favoriteCity == "Alps") { %> <p.shown><q>Oh yeah, I haven't heard, tell me about them.</q></p> <p.shown.tellAbout>Tell Paul about...</p> <p.shown.tellAbout.clickable onclick="story.state.showHide(this,'.mountains','.tellAbout');">...the mountains.</p> <p.shown.tellAbout.clickable onclick="story.state.showHide(this,'.woman','.tellAbout');">...the woman.</p> <p.mountains>You tell Paul about the mountains.</p> <p.mountains>Paul looks you up and down, impressed with your physical ability as much as the mountains themselves.</p> <p.woman>You tell Paul about the woman.</p> <p.woman><q>She does sound fascinating. What a career... maybe we should base our next game in the Alps so you have a chance to go back. And with me this time!</q></p> <% } %> <p.countryside.competition.tulipFields.impressive.important.contrast.mountains.woman.clickable onclick="story.state.showHide(this, '.forAllResponse');"><q>Where would you go, Paul? If you could go anywhere?</q></p> <p.forAllResponse><q>Honestly? You know I've always been fasctinated by space, so if I could go <em>anywhere</em>... I'd like to go to the moon!</q> He laughs gleefully.</p> <p.forAllResponse.earth.clickable onclick="story.state.showHide(this, '.earth','.moon');"><q>You know that's not what I meant. Anywhere on <em>Earth.</em></q></p> <p.earth><q>Anywhere on Earth? Well how about [[Malta?</q>->On to Malta]]</p> <p.forAllResponse.moon.clickable onclick="story.state.showHide(this, '.moon','.earth');"><q>Heh, yeah, wouldn't that be something.</q></p> <p.moon><q>For now though, on to [[Malta.</q>->On to Malta]]</p><!-- add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown><q>Maybe after the trip is over and I'm back home, one particular place and memory will stick out. But for now I can't say.</q></p> <p.shown><q>That's fair, especially when we still have our extra stop to [[Malta->Malta Linker]] on the horizon.</q></p><!--add p5 with VeniceBG sketch--> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>The remaining days in Venice unfold, one after the other. You and Paul experience them in a blissful blur, absorbed in the city.</p> <p.shown>Until it is time to move on, to board the ship to [[Malta.->On to Malta]]</p><!-- TODO: *conditional display of text based on past variables *showing/hiding text based on what's clicked *link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% if(story.state.veniceVars.longTalk == true||story.state.veniceVars.talkWithPaul == true) { %><p.shown>About its architecture and museums, its charm and tranquility, its history and preservation.</p> <p.shown.clickable onclick="story.state.showHide(this, '.optionSet1', this);">You say...</p> <% } else { %><p.shown.clickable onclick="story.state.showHide(this, '.thanksRest');"><q>Thanks for being here with me.</q></p> <p.thanksRest><q>Thank you for letting me be here with you.</q></p> <p.thanksRest>The <span.thanksRest.clickable onclick="story.state.showHide(this,'.optionSetAlt');"> silence </span> envelops you both once more.</p> <% } %> <p.optionSetAlt>[[And after a time, you disembark at a quiet, sandy beach.->Quiet Moment With Paul]]</p> <p.optionSetAlt.optionSet1.clickable onclick="story.state.showHide(this, '.wonder', '.optionSetAlt');"><q>I wonder what Venice was like long ago...</q></p> <p.wonder><q>I wonder what Venice was like long ago, during the Middle Ages, or even before its golden age, back when people first settled these islands.</q></p> <p.wonder><q>Yeah, it is pretty amazing to think how long Venice has been here. Just to feel how old this city is, compared to what we're used to.</q></p> <p.wonder.clickable onclick="passage.optionSet2Array=['#wonderRest', '#ellip', '#glad', '#facade']; passage.thisArray=[this];story.state.showHideMulti(this, passage.optionSet2Array, passage.thisArray);"><q>This whole trip has been like that...</q></p> <p#wonderRest><q>This whole trip has been like that. It's been so strange to see what things get preserved and what falls to ruin or vandalism or modernization.</q> You shake your head.</p> <p#glad.gladRest.clickable onclick="story.state.showHide(this, '.gladRest','#facade');"><q>I'm just glad Venice is as it is.</q></p> <p.gladRest><q>It is a wonderful place, isn't it?</q></p> <p.gladRest>[[<q>Yes.</q>->Malta Linker]]</p> <p#facade.facadeRest.clickable onclick="story.state.showHide(this, '.facadeRest','#glad');"><q>The preservation here feels like a facade for visitors, rather than how it was originally.</q></p> <p.facadeRest><q>We'll have to see how [[Malta->On to Malta]] compares, whether it is any more authentic or just another facade.</q></p> <p.optionSetAlt.optionSet1.moving.clickable onclick="story.state.showHide(this, '.moving', '.optionSetAlt');"><q>I've thought about moving here, you know?</q></p> <p.moving><q>Really?</q></p> <p.moving><span.moving.clickable onclick="story.state.showHide(this, '.movingRest', this);"><q>Yeah...</q></span><span.movingRest><q>Yeah, nothing specific, but I used to fantasize about leaving everything behind and moving here.</q></span></p> <p.movingRest><q>We could go look into it. I mean, what better time to try than while you're here?</q></p> <p.movingRest.movingOption>[[<q>Okay.</q>->Moving to Venice and Paul]]</p> <p.movingRest.movingOption.clickable onclick="story.state.showHide(this,'.noFull','.movingOption');"><q>No, I think I'm happy here and now...</q></p> <p.noFull><q>No, I think I'm happy here and now. Just visiting Venice with you has been enough. But it's odd to think about it, how much I wanted to be here... and now I finally am.</q></p> <p.noFull><q>I'm [[happy->Malta Linker]] for you.</q></p><!-- TODO: *setting variables *showing/hiding text based on what's clicked add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>You and Paul inquire about moving to Venice, the city that has always allured you. That you have only scratched the surface of here with Paul.</p> <p.shown>After a long conversation with an official about forms and visas and money, your desire <span.falters>falters.</span><span.deepens>deepens.</span> <p.shown.clickable.optionSet1 onclick="story.state.showHide(this,'.falters','.optionSet1');story.state.veniceVars.doubtfulMove = true;"> falters.</p> <p.falters>Perhaps you'll consider it more when you're back home, but the obstacles suddenly appearing in front of you dissuade you... [[for now at least.->Malta Linker]]</p> <p.shown.clickable.optionSet1 onclick="story.state.showHide(this,'.deepens','.optionSet1');story.state.veniceVars.excitedMove = true;">deepens.</p> <p.deepens>This could be a real thing. It will take some doing, but this is a new goal to work toward. After you'd spent so long hoping to just <em>see</em> Venice for yourself, this new and even greater goal of moving here motivates you even [[more strongly than before.->Malta Linker]]</p><!--add p5 with VeniceBG sketch--> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Though the beach—the whole city—is full of life and people, Venice maintains a subdued aura, a certain stillness that extends to the two of you now.</p> <p.shown>You stand together, watching the sky turn pale, then a fiery orange, a deep purple... black. Everything still but the setting sun.</p> <p.shown>[[A moment you'll never forget.->Malta Linker]]</p><!-- TODO: *setting variables *conditional display of text based on past variables *link reveal *showing/hiding text based on what's clicked add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% story.state.veniceVars.talkWithPaul = true; %> <% if (story.state.veniceVars.couplesRide == true) { %> <p.shown>What a wonderful feeling, after traveling alone for so long, to have someone to talk and laugh with.</p> <p.shown><span.shown.clickable onclick="story.state.showHide(this, '.veniceRising');"> Venice itself rises around you both</span><span.veniceRising>, as tranquil and impassive towards the people moving about its canals and streets as the gondolier ferrying you and Paul amid your chatter.</span></p> <p.veniceRising>After the ride, the two of you find your way to a small, cozy trattoria for <span.veniceRising.clickable onclick="story.state.showHide(this, '.aboutDinner');">dinner... </span><span.aboutDinner> the atmosphere again suited for romantic pairings, and the joke between you continues.</span></p> <% } else { %> <p.shown> The interior is warm and smells wonderful. Locals and tourists alike sit and eat in quiet conversation, and the sounds of multiple languages ripple around the stillness<span.shown.clickable onclick="story.state.showHide(this, '.aboutDinner');"> here. </span></p> <p.aboutDinner>You and Paul are lucky enough to get seated on the upper level, next to a window overlooking the canal.</p> <% } %> <p.aboutDinner.dinnerOptions.clickable onclick="story.state.showHide(this, '.lovelyResponse', '.dinnerOptions');this.style.display='block';"><q>Lovely isn't it?</q> <p.aboutDinner.dinnerOptions.clickable onclick="story.state.showHide(this, '.resturantResponse', '.dinnerOptions');this.style.display='block';"><q>This is probably the best resturant I've been to on the whole trip.</q> <p.lovelyResponse><q>There's definitely a charm to it all. I'm so glad I could be here.</q></p> <p.resturantResponse><q>Really? Well, I'm glad I could be here for it.</q></p> <p.end.lovelyResponse.resturantResponse>Sitting and eating together, the conversation turns to...</p> <p.end.lovelyResponse.resturantResponse>[[your lives.->Talk About Life]]</p> <p.end.lovelyResponse.resturantResponse>[[the city.->You break the silence.]]</p> <p.end.lovelyResponse.resturantResponse>[[the trip.->Paul breaks the silence.]]</p><!-- TODO: *showing/hiding text based on what's clicked *conditional display of text based on past variables. *link reaveal *also, side note, I'm remembering this was a particularly long/choicy passage among all the passages added in the Venice update. Consider splitting in two if that's natural. add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>About growing up, becoming game developers, when you first met, when you collaborated on your first game jam, and taking your shared hobby full time.</p> <p.met.shown.clickable onclick="story.state.showHide(this, '.met', '.work');"><q>I'm glad we met.</q></p> <p.met><q>Hey, me too.</q></p> <p.met>You share a long, peaceful moment [[together.->Malta Linker]]</p> <!-- --> <p.work.shown.clickable onclick="story.state.showHide(this, '.work', '.met');"><q>So much of our lives is spent in our work. I'm glad you came to join me here.</q></p> <p.work><q>Me too. It's like I've only seen a small sliver of you while you've been away... maybe before then too. It's nice to see a different side of you, and to be togehter in person.</q></p> <!-- --> <p.work.clickable.yeah onclick="story.state.showHide(this, '.yeah', '.side');"><q>Yeah, I couldn't have said it better.</q></p> <p.yeah><q>I can't wait to see what [[Malta->On to Malta]] is like. For me at least, Venice was only the beginning.</q></p> <p.work.clickable.side onclick="passage.sideResponseArray=['.sideResponse','.side','.recharge','.newLife','.betterSide','.bus'];passage.hideArray=['.yeah'];story.state.showHideMulti(this, passage.sideResponseArray, passage.hideArray);"><q>I feel like I've seen that different side of myself, too.</q></p> <p.sideResponse><q>Yeah, traveling around without electronics, with only a backpack really. It makes total sense you'd come away with a different outlook.</q></p> <!-- --> <p.side.recharge.clickable onclick="story.state.showHide(this, '.rechargeResponse', '.side');$(this).addClass('shown');"><q>I think it managed to recharge me creatively.</q></p> <p.rechargeResponse><q>Good, hopefully I can recharge too. Maybe while we're in [[Malta.->On to Malta]]</q></p> <!-- --> <p.side.newLife.clickable onclick="story.state.showHide(this, '.newLifeResponse', '.side');$(this).addClass('shown');"><q>It showed me a new way of life.</q></p> <p.newLifeResponse><q>Good, just don't try and eschew electronics forever. That'd put a serious damper on our work. Heck, even our communication.</q></p> <p.newLifeResponse.clickable.electronicsOK onclick="story.state.showHide(this, '.electronicsOK', '.switchOrNot');"><q>Don't worry, I think I'm done with that aspect of this trip.</q></p> <p.electronicsOK><q>Good. Well, we'll see what [[Malta->On to Malta]] has in store then.</q></p> <p.newLifeResponse.clickable.switchOrNot onclick="story.state.showHide(this, '.switchOrNot', '.electronicsOK');"><% if(story.state.luxVars.hasSwitch == true) { %><q>Well, you don't have to worry about that, I've been playing on your Switch, remember?</q> <% } else { %> <q>Don't worry. But I'd still like to go without electronics while we're in Malta.</q> <% } %> </p> <% if(story.state.luxVars.hasSwitch == true) { %><p.switchOrNot> <q>Oh yeah, and?</q></p> <p.switchOrNot.clickable onclick="story.state.showHide(this, '.switchResponse');"><q>Well, it actually kind of made me miss the Alps. Like all of it. But I appreciate you lending it to me.</q></p> <p.switchResponse><q>Sorry. Well, I'll take it back so you can [[experience Malta fully.->On to Malta]]</q></p> <% } else { %><p.switchOrNot><q>Fine, maybe I'll try it too. [[On to Malta, then.->On to Malta]]</q></p> <% } %> <!-- --> <p.betterSide.clickable.side onclick="story.state.showHide(this, '.betterSideNext', '.side');$(this).addClass('shown');"><q>And I think it's a better side of myself. What do you think?</q></p> <p.betterSideNext><q>Yes. Well, from what I've seen so far.</q></p> <p.betterSideNext.clickable onclick="story.state.showHide(this, '.betterSideRest');"><q>I just hope I don't lose it when we go back.</q></p> <p.betterSideRest><q>Well, we still have [[Malta->On to Malta]] first. Maybe you can find a way to hold onto this feeling while we're there.</q></p> <!-- --> <p.bus.clickable.side onclick="story.state.showHide(this, '.busNext', '.side');$(this).addClass('shown');"><q>Yep, I learned that sleep best when on a bus. Ha, can you believe it!</q></p> <p.busNext>The serious moment breaks as Paul looks confused for a second, then grins <q>Ha. You'll have to get your own bus now, and a chauffeur to drive you to sleep at night.</q></p> <p.busNext.clickable onclick="story.state.showHide(this, '.busRest');"><q>We'll travel around, <i>Desert Bus</i> style. One person drives, the other works our latest game.</q></p> <p.busRest><q>Thank you but I never said <em>I</em> have a wierd need to sleep only on buses.</q> He laughs.</p> <p.busRest.clickable onclick="story.state.showHide(this,'.busEnd');"><q>Not <em>only</em>... <em>Best</em> on buses.</q></p> <p.busEnd><q>Just wait until we're on the [[cruise ship->On to Malta]] and the waves rock you to sleep at night. Maybe you'll become a house boat person.</q></p><!-- TODO: *mouseout add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>You pack your bags once more, helping Paul with his <span.extra> substantial and unwieldy</span><span.shown.mouseout onmouseout="story.state.showHide(this,'.extra');"> luggage</span>, then the two of you board the cruise ship.</p> <p.shown>You depart on a breezy autumn day, warmed by the glow of the Mediterranean sun.</p> <p.shown> [[The End]] </p><!-- TODO: *setting variables *link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% story.state.veniceVars.blissfulIgnorance = false; story.state.veniceVars.blurringBridges = true; %> <p.shown>Here you are moving again past red-roofed buildings and gray cracked <span.shown.clickable onclick="story.state.showHide(this,'.stone');"> stone...</span><span.stone> past arched doorways opening right onto the <span.stone.clickable onclick="story.state.showHide(this, '.water');"> water...</span><span.water> past colonnades and <span.water.clickable onclick="story.state.showHide(this,'.bridges');"> bridges...</span></p> <p.bridges>The same buildings, the same <span.bridges.clickable onclick="story.state.showHide(this, '.bridges2');"> bridges?</span></p> <p.bridges2>Or is all the city, consistent of style, actually just [[repeating itself?]]</p><!-- TODO: *link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Past red-roofed buildings and gray cracked <span.shown.clickable onclick="story.state.showHide(this,'.stone');"> stone...</span><span.stone> past arched doorways opening right onto the <span.stone.clickable onclick="story.state.showHide(this, '.water');"> water...</span><span.water> past colonnades and<span.water.clickable onclick="story.state.showHide(this,'.bridges', this);"> bridges...</span><span.bridges> [[bridges...->bridges 1]]</span> <p.bridges>Or are you going in [[circles?->Snap Out Of It]]</p><!-- TODO: *link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Past red-roofed buildings and gray cracked <span.shown.clickable onclick="story.state.showHide(this, '.stone');"> stone... </span><span.stone> past arched doorways opening right onto the</span><span.stone.clickable onclick="story.state.showHide(this,'.water');"> water...</span><span.water> past colonnades and [[bridges...]]</span></p><!-- TODO: *link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Past red-roofed buildings and gray cracked <span.shown.clickable onclick="story.state.showHide(this, '.stone');"> stone... </span><span.stone> past arched doorways opening right onto the</span><span.stone.clickable onclick="story.state.showHide(this,'.water');"> water...</span><span.water> past colonnades and [[bridges?]]</span></p><!--add p5 with VeniceBG sketch--> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Alone and in silence, your mind can't hold onto the image of this city. Architecture blends without detail, canals and other gondolas replay at every turn, [[all the same.]]</p><!-- TODO: *link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Past red-roofed buildings and gray cracked <span.shown.clickable onclick="story.state.showHide(this, '.stone');"> stone... </span><span.stone> past arched doorways opening right onto the</span><span.stone.clickable onclick="story.state.showHide(this,'.water');"> water...</span><span.water> past colonnades and <span.water.clickable onclick="story.state.showHide(this,'.bridge');"> bridge.</span></p> <p.bridge>Not bridges, [[a bridge.]]</p><!--add p5 with VeniceBG sketch--> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>The gondolier is catching your attention for the first time, [[gesturing upwards.]]</p><!-- TODO: *link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>You are floating under a bridge, one of countless identical bridges over Venice's impossible canals. Following the line of the gondolier's open hand, <span.shown.clickable onclick="story.state.showHide(this,'.look');"> you look upward.</span></p> <p.look>The underside of the bridge bears a painting, faded with time and the incursion of algae, but still clear in its image: a mural drawn as if a mirror, reflecting a simple wooden boat carrying a child. The child looks upwards... <span.look.clickable onclick="story.state.showHide(this,'.back');"> back down at you.</span></p> <p.back>Looking into the child's face, it is as if you see your features, your very hopes and dreams [[reflected there.]]</p><!-- TODO: *link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>You feel a great weight lift, a <span.shown.clickable onclick="story.state.showHide(this,'.end');"> lightness rising</span> within you...<span.end> and then all you see is the pale blue Mediterranean [[sky above.->Lightness Ending]]</span></p><!-- TODO: conditional showing text based on previous variables add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>It is as though you could soar off, up out of the city. Flying easily, not struggling like a bird against gravity, but as effortlessly as if through magic.</p> <p.shown>Where do you fly off to?</p> <p.shown>[[To soar above Venice.]]</p> <p.shown>[[To float among the clouds.]]</p> <p.shown>[[To sail to the moon.]]</p> <p.shown>[[To return back home.]]</p> <% if (story.state.luxVars.paulVenice == true) { %><p.shown>[[To find Paul.]]</p><% } %> <!-- TODO: *link reveal *conditional display of text based on previous variables add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>You shake your head. The buildings resolve themselves as seperate, unique physical entities once more.</p> <p.shown>Though still with that singlular appearance that seems to <span.shown.clickable onclick="story.state.showHide(this, '.rest');"> defy time and space.</span></p> <p.rest>With a lingering eerie feeling you <% if(story.state.veniceVars.coordination == true) { %> [[go find Paul, ->Venice without Paul 6]] <% } else { %> [[leave the gondola behind,->Enjoy Venice]] <% } %> when the tour finally ends.<!-- TODO: *showing/hiding text based on what's clicked *setting variables *conditional display of text based on variables set in the passage. add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Slightly dazed, you wobble back to find Paul sitting on a bench that overlooks the sea.</p> <p.shown><q>Hey. I hope you finally got to immerse yourself in the city.</q></p> <p.shown.clickable.optionSet1 onclick="story.state.veniceVars.deflect = false;story.state.showHide(this, '.odd','.optionSet1');"><q>It was surprisingly... odd.</q></p> <p.shown.clickable.optionSet1 onclick="story.state.veniceVars.deflect = false;story.state.showHide(this, '.repeat','.optionSet1');"><q>Yeah, but the city just sort of repeats itself after a while.</q></p> <p.shown.clickable.optionSet1 onclick="story.state.veniceVars.deflect = true;story.state.showHide(this, '.deflect','.optionSet1');"><q>Yep. What have you been up to?</q></p> <p.odd><q>It was surprisingly... odd.</q></p> <p.odd>Paul looks concerned. <q>Odd how?</q></p> <p.odd.clickable.oddRepeating onclick = "story.state.showHide(this, '.oddRepeating','.oddDeflect');"><q>Odd like the buildings <em>repeating</em>.</q></p> <p.odd.clickable.oddDeflect onclick = "story.state.showHide(this, '.oddDeflect','.oddRepeating');"><q>It's hard to describe. Maybe we were just going in circles. How have you been?</q></p> <p.repeat.oddRepeating><q>Oh, sorry to hear that.</q> He looks a bit quizzical. <q>I suppose Venice <em>has</em> to look this way. You know? People expect the city to be a certain way, so they keep it like this.</q></p> <p.repeat.oddRepeating.clickable.deepQuestion onclick="story.state.showHide(this, '.deepQuestion','.forTourists');"><q>Well, I suppose. But everything was identical, nothing memorable.</q></p> <p.repeat.oddRepeating.clickable.forTourists onclick="story.state.showHide(this, '.forTourists','.deepQuestion');"><q>For tourists, yeah, your're right. But this was rather off-putting.</q></p> <p.deepQuestion><q>Maybe you found end result of preservation in Venice, then.</q> Paul gets up. <q>Let's see how [[Malta->On to Malta]] compares, shall we?</q></p> <p.forTourists><q>Well, maybe they've taken it too far...</q> Paul gets up. <q>Let's see how [[Malta->On to Malta]] compares, shall we?</q></p> <p.deflect.oddDeflect><q>Oh me? I just walked around a bit. Then I realized I was getting sand in my shoes so I stopped.</q> Though his tone is mild, Paul looks very happy.</p> <p.deflect.clickable onclick="story.state.showHide(this, '.onToMalta');"><q>I'm glad you enjoyed the beach.</q></p> <p.oddDeflect.clickable onclick="story.state.showHide(this, '.onToMalta');"><q>I'm glad you could enjoy the beach at least.</q></p> <p.onToMalta>Paul gets up. <q>Well, on to [[Malta->On to Malta]] then?</q></p><!-- TODO: *showing/hiding text based on what's clicked add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown><q>What was that?</q></p> <p.shown.optionSet1.option1.clickable onclick="story.state.showHide(this,'.option1','.optionSet1');"><q>I don't know.</q></p> <p.shown.optionSet1.option2.clickable onclick="story.state.showHide(this,'.option2','.optionSet1');"><q>This city... it's like a dream.</q></p> <p.shown.optionSet1.option3.clickable onclick="story.state.showHide(this,'.option3','.optionSet1');"><q>Wasn't that amazing!</q></p> <p.option1.option3>Unnerved, Paul askes <q>Can you do it again?</q>But the feeling has left you, you know you cannot. <q>Well, what happened on that gondola ride?</q></p> <p.option2><q>Hmm... I think I'm real and not a dream.</q> Paul shakes his head, pats his face as if testing his own reality. <q>Well, what happened on that gondola ride?</q></p> <p.option1.option2.option3.optionSet2.clickable onclick="story.state.showHide(this,'.city','.optionSet2');"> <q>The city all sort of blurred together...</q> </p><p.city><q>The city all sort of blurred together... then the gondolier did something, and then I could fly!</q></p> <p.option1.option2.option3.optionSet2.clickable onclick="story.state.showHide(this,'.bridge','.optionSet2');"> <q>We came to a bridge...</q> </p><p.bridge><q>We came to a bridge... the gondolier showed me this mural and it was so wonderful to see, it just seemed to do something. But then I could fly!</q></p> <p.city.bridge>Paul, still rather pale, says <q>Maybe we should both just go have a rest at a hotel or cafe or something. Together, though. I'm not missing out on any more magic powers.</q></p> <p.city.bridge>[[You find a cozy resturant...->Reality Bistro]] </p><!-- TODO: link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>You stream back through the city, easily spotting Paul through the window of a museum.</p> <p.shown.clickable onclick="story.state.showHide(this,'.knocking');"> Knocking on it...</p> <p.knocking>Paul pales in shock.</p> <p.knocking>Unable to help but laugh, you gesture for him to come out, and he vanishes from the window.</p> <p.knocking><span.knocking.clickable onclick="story.state.showHide(this,'.floating');"> Floating down...</span><span.floating> nobody else seems to have noticed you.</span></p> <p.floating>[[Paul emerges, wide eyed.->To find Paul 2]]</p><!-- TODO: *link reveal *conditional display of text based on past variables. add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>You fly up, above the city. Drifting on high, gazing <span.shown.clickable onclick="story.state.showHide(this,'.back');"> back below.</span></p> <p.back><em><b>This</b></em> is Venice, your tell yourself. Roofs and seabirds and open windows, curtains rippling in the breeze.</p> <p.back>You see the gondolier with open hand still gesturing <span.back.clickable onclick="story.state.showHide(this, '.upwards');"> upwards...</span> reaching out for you.</p> <p.upwards.take>[[Take their hand.->Thank you.]]</p> <p.upwards.clickable onclick="story.state.showHide(this,'.fly','.take');">Fly on.</p> <p.fly>[[...To the clouds.->To float among the clouds.]]</p> <p.fly>[[...To the moon.->To sail to the moon.]]</p> <p.fly>[[...To your home.->To return back home.]]</p> <% if (story.state.luxVars.paulVenice == true) { %><p.fly>[[...To Paul.->To find Paul.]]</p><% } %><!-- TODO: *link reveal --> <p.shown>You float up weightlessly to settle among the clouds. Wispy and ephemeral, just beginning to take up the pinks and oranges of <span.shown.clickable onclick="story.state.showHide(this,'.sunset');"> sunset...</span></p> <p.sunset>The sun iteself sinks over Italy, basking it in a brilliant fiery glow.<p.sunset> <p.sunset>Behind you Slovenia, Croatia, and the lands beyond fade into deep blues and purples of dusk.<p.sunset> <p.sunset>As the sun sinks <span.sunset.clickable onclick="story.state.showHide(this,'.lower');"> lower and lower...</span><span.lower> you turn from pink to orange to purple to a gray that deepens toward <span.lower.clickable onclick="story.state.showHide(this,'.black');"> black.</span></p> <p.black>The stars above twinkle, the moon shines invitingly.</p> <p.black>[[To the moon.->To sail to the moon.]]</p><!-- TODO: *link reveal *showing/hiding based on what's clicked --> <p.shown>Without effort, without breath, you rise up and up, toward the beckoning <span.shown.clickable onclick="story.state.showHide(this,'.moon');"> moon.</span></p> <p.moon>The moon, which grows from a small, brilliant orb in the sky to a large, dusty round rock suspended in the void of space.</p> <p.moon.clickable onclick="story.state.showHide(this,'.gently',this);">Gently...</p> <p.gently.stay>Gently you come to a soft landing, the ground below you firm but covered in a fine, silky powder of solid rock worn down over eons of travel through space.</p> <p.gently.clickable onclick="story.state.showHide(this,'.stay','.gently');">Stay</p> <p.stay>You settle here, lying on the cushioned ground, letting more cosmic dust come and settle over you, blanketing you... [[falling asleep.]]</p> <p.gently>[[Continue on through space]]</p><!-- TODO: *link reveal --> <p.shown>You angle yourself toward the sun, just beginning to set far in the distance. <span.shown.clickable onclick="story.state.showHide(this,'.racing');">Racing it </span><span.racing> past Europe—its cities, its villages, its ruins and wild places—and across the ocean to arrive back in North America on a clear, cold autumn afternoon.</span></p> <p.racing>Your home sits quiet and empty. Not fully unattended, but clearly uninhabited.</p> <p.racing><span.racing.clickable onclick="story.state.showHide(this,'.floating');">Floating in</span><span.floating> through a window, you come to rest once more. Cold and still, you find yourself to bed under soft blankets.</span></p> <p.floating>Warming up... [[falling asleep.->Back Home 2]]</p><p.shown>You wake up in bed, refreshed.</p> <p.shown>[[The End]]</p> <!--This route to open to repeating. The day of embarking on the trip, flying to Amsterdam--><div.shown style="text-align:center;"> <p.shown style="font-size: 200%;"><i>The End</i></p> <br><br> <p.shown>Reset From:</p> <p.shown.clickable onclick="passage.reset(0); story.show('Opening Passage');">Amsterdam</p> <p.shown.clickable onclick="passage.reset(1); story.show('To Lux');">Luxembourg</p> <p.shown.clickable onclick="passage.reset(2); story.show('Venice 1');">[[Venice->Venice Reset]]</p> <p.shown>Or</p> <p.shown>[[View Credits->Credits]]</p> <script> passage.reset = function(startPoint) { for (let i = startPoint; i < story.state.varsHolderArray.length; i++){ let holder = story.state.varsHolderArray[i]; for (const variable in holder){ delete holder[variable]; } } } </script><!-- TODO: *showing/hiding text based on what's clicked *link reveal --> <p.shown.wake>[[Wake Up->Back Home 2]]</p> <p.shown.clickable.wake onclick="story.state.showHide(this,'.remain','.wake');">Remain Resting</p> <p.remain>The moon orbits the earth, locked to it, perpetually so near and so far, precisely at this distance.</p> <p.remain>The soft blanket becomes a peaceful mound, a small hill, <span.remain.clickable onclick="story.state.showHide(this,'.mountain');"> a mountain...</span><span.mountain> that humans will one day build <span.mountain.clickable onclick="story.state.showHide(this,'.shelters');"> shelters on...</span><span.shelters.clickable onclick="story.state.showHide(this,'.homes');"> homes...</span><span.homes.clickable onclick="story.state.showHide(this,'.city');"> a city...</span></p> <p.city>[[The End]]</p><!-- TODO: link reveal --> <p.shown>You rise from your soft bed on the moon, bounding off in one great jump to leave the moon behind, to fly off <span.shown.clickable onclick="story.state.showHide(this,'.stars');"> among the stars.</span></p> <p.stars>Becoming, like the moon, worn down into a <span.stars.clickable onclick="story.state.showHide(this,'.dust');"> soft cosmic dust </span> over the millenia.</p> <p.dust>Your body, your cells, your molecules and atoms spread across the universe, seeding new worlds with <span.dust.clickable onclick="story.state.showHide(this,'.life');"> wonderous life.</span></p> <p.life>[[The End]]</p><!-- TODO: link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown.clickable onclick="story.state.showHide(this,'.thank',this);"><i>Grazie.</i></p> <p.thank>You lift them up as if they, too, were without weight.</p> <p.thank>You both hang suspended above the <span.thank.clickable onclick="story.state.showHide(this,'.city');"> city...</span><span.city> each building and island a </span><span.city.clickable onclick="story.state.showHide(this,'.mini');"> perfect miniature </span><span.city> arranged on a blanket of blue.</span></p> <p.mini><i>Mia Venezia...</i> The gondolier whispers, tears beginning to flow down their face, drip down their chin into the void below.</p> <p.mini>[[Leave->Leave the Gondolier]]</p> <p.mini>[[Stay->Stay with Gondolier]]</p><!-- TODO: conditional showing text based on previous variables add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>You are still free to fly.</p> <p.shown>[[...To the clouds.->To float among the clouds.]]</p> <p.shown>[[...To the moon.->To sail to the moon.]]</p> <p.shown>[[...To your home.->To return back home.]]</p> <% if (story.state.luxVars.paulVenice == true) { %><p.shown> [[...To Paul.->To find Paul.]]</p><% } %><!-- TODO: *link reveal *showing/hiding text based on what's clicked. *text fade in (probably do with some inline css? or to the story css as an animation?) add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>You stay. Spellbound, suspended in this moment with the weeping gondolier.</p> <p.shown.clickable onclick="story.state.showHide(this,'.fall',this);">Without noticing...</p> <p.fall>The two of you are falling. Or rather, the city is getting bigger again, though you do not feel the weight of gravity pulling you down.</p> <p.fall.><span.fall.clickable onclick="story.state.showHide(this,'.down');">Down...</span><span.down> and down...</span></p> <p.down>Back into <span.down.clickable onclick="story.state.showHide(this,'.city');"> the city</span><span.city>, becoming part of it... <!--Which part, select a part, that and all other parts erase to become "Venice"--> <p.city.part.clickable onclick="story.state.showHide(this,'.venice','.part');">the stones</p> <p.city.part.clickable onclick="story.state.showHide(this,'.venice','.part');">the canals</p> <p.city.part.clickable onclick="story.state.showHide(this,'.venice','.part');">the buildings</p> <p.city.part.clickable onclick="story.state.showHide(this,'.venice','.part');">the curtains listless in the breeze</p> <p.city.part.clickable onclick="story.state.showHide(this,'.venice','.part');">the mural</p> <p.venice>Venice.</p> <p.venice.fadeInLong>[[The timeless city of dreams.->Back Home 2]]</p><!-- TODO: *link reveal *showing/hiding text based on what's clicked *setting variables add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Seated at a table with Paul, the structure of reality seems to fade in around you again: dim plaster walls, thick curtains, candle wax, and the firm, steady hand of gravity.</p> <p.shown><q>That can't have been real, right? We both experienced a fever dream or something...</q></p> <p.shown.clickable.optionSet1 onclick="story.state.veniceVars.theFlightFelt = 'real';story.state.showHide(this,'.real','.optionSet1');"><q>I think it was real. </q></p><p.real><q>I think it was real. Strange, yes, but real.</q></p> <p.real><q>Why didn't anyone else seem to notice though? Why aren't cops and papparazzi chasing after you for flying across the city?</q></p> <p.real.inexplicable.clickable onclick="story.state.showHide(this,'.inexplicable','.forUs');"><q>Maybe what we experienced is just inexplicable.</q></p> <p.inexplicable><q>Guess I'll just stop trying to make sense of it then.</q></p> <p.real><span.real.forUs.clickable onclick="story.state.showHide(this,'.forUs','.inexplicable');"><q>Hmm, well it was real for us...</q></span><span.forUs> You start to say, searching for the way to make sense of what happened. <q>But not for them. How about that?</q> <p.forUs><q>Okay well sure.</q></p> <p.forUs.inexplicable>And then both of you are laughing at the <span.forUs.inexplicable.clickable onclick="story.state.showHide(this,'.absurdity');">absurdity of it all...</span><span.absurdity> one of the best evenings of [[your life.->Back to Reality]] </span></p> <p.shown.clickable.optionSet1 onclick="story.state.veniceVars.theFlightFelt = 'drugged';story.state.showHide(this,'.drugged','.optionSet1');"><q>Maybe I—we—were drugged...</q></p><p.drugged><q>Maybe I—we—were drugged... after all, I think I've done everything on your list save being a drug mule.</q></p> <p.drugged><q>My list?</q></p> <p.drugged><span.drugged.clickable onclick="story.state.showHide(this,'.ps');"><q>Your post script at the end of your first letter.</q></span><span.ps> You recite it for him: <q>And please don't get kidnapped, lost in the woods, fall off a mountain, mugged, or accidentally become a drug mule or something...</q></span></p> <p.ps><q>Oh yeah... wait, all that happened to you?</q></p> <p.ps.clickable onclick="story.state.showHide(this,'.nono', this);"><q>No, no. I was in situations where I could have been...</q></p><p.nono><q>No, no. I was in situations where I could have been. Maybe this was drugs, is all I'm saying.</q> You laugh suddenly at the absurdity of it all.</p> <p.nono><q>I think I'm a little less jealous of your adventures now, if that's how it's been. Although I wish I could have flown with you, that sounds incredible.</q></p> <p.nono><span.nono.clickable onclick="story.state.showHide(this,'.ifISee');"><q>If I see that gondolier again...</q></span><span.ifISee> you trail off in laughter.</span></p> <p.ifISee>And the evening continues, one of the best of [[your life.->Back to Reality]]</p> <p.shown.clickable.optionSet1 onclick="story.state.veniceVars.theFlightFelt = 'idk';story.state.showHide(this,'.idk','.optionSet1');"><q>I don't know...</q></p><p.idk><q>I don't know... it felt real at the time, but I honestly don't know what it was. It felt nice, though. That's the part I remember most clearly—how wonderful it was.</q></p> <p.idk><q>Yeah, just keep going on about things I'm missing out on.</q> But Paul is snickering with laughter.</p> <p.idk><span.idk.clickable onclick="story.state.showHide(this,'.whatever');"> Whatever it was, </span><span.whatever> the two of you manage to laugh it off, and that moment fades to a vauge [[memory of pleasantness.->Back to Reality]]</span></p><!-- TODO: *conditional showing text based on past variables *link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% if (story.state.veniceVars.theFlightFelt == "real") { %><p.shown>As you continue touring Venice with Paul, you hang on to the sense that what you experienced before was real. At times, you almost feel it again, that <span.shown.clickable onclick="story.state.showHide(this,'.weight');"> <em>weightlessness...</em></span></p> <p.weight>But all too soon, your time in Venice with Paul comes to an end. It is time to move on to your unexpected extra stop, [[Malta.->On to Malta]]</p> <% } else if (story.state.veniceVars.theFlightFelt == "drugged") { %><p.shown>You don't see the gondolier again. Even if you went looking for them, they wouldn't be found. And, deep down, you know that there was something greater at work <span.shown.clickable onclick="story.state.showHide(this,'.there');"> there...</span></p> <p.there>The rest of your time in Venice with Paul is happy, if flight-free, and all too soon it is time to move on to your unexpected extra stop, [[Malta.->On to Malta]]</p> <% } else if (story.state.veniceVars.theFlightFelt == "idk") { %><p.shown>Your pleasant evening with Paul turns into <span.shown.clickable onclick="story.state.showHide(this,'.days', this);"> days... </span><span.days> days of exploring Venice, of feeling that lingering joy.</span></p> <p.days>And then the time comes to board the ship to [[Malta,->On to Malta]] the unexpected extra stop on your trip.</p> <% } %><!-- TODO: link reveal mouseout add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Before this trip, it was hard to put into words why you wanted to see Venice, harder than it was to describe your plan of a backpack trip across Europe. Those sorts of trips are common enough for those with wanderlust, but you're starting to wonder whether the whole trip was just an elaborate ruse to get you here, to see this city.</p> <p.shown>Unlike <span.shown.clickable onclick="story.state.showHide(this,'.lux');"> Luxembourg</span><span.lux>, Venice cannot push against its </span><span.lux.mouseout onmouseout="story.state.showHide(this,'.boundaries');"> boundaries</span><span.boundaries>—or at least, has chosen not to build artificial islands and expand out over the sea</span><span.lux>. Nor has it fallen to myriad architectural styles, instead maintaining a consistency of form which makes the city appear timeless.</span></p> <p.lux>So you compare it to <span.lux.clickable onclick="story.state.showHide(this,'.amsterdam');"> Amsterdam</span><span.amsterdam>, then, with its canals and the proximity of the sea. Yet Venice feels more compact than Amsterdam—compact without being dense, without the high-rises of modern urbanization in such a small space.</span></p> <p.amsterdam><span.amsterdam.clickable onclick="story.state.showHide(this,'.allow');">You allow yourself </span><span.allow> to become lost among its canals, asking a gondolier to show you the city without telling you anything about it, to let you [[enjoy it for yourself.->Pondering Venice]]</span></p> <!-- TODO: link reveal conditional display of text based on previous variables setting variables showing/hiding text based on what's clicked add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Past red-roofed buildings and gray cracked <span.shown.clickable onclick="story.state.showHide(this,'.stone');"> stone...</span><span.stone> past arched doorways opening right onto the <span.stone.clickable onclick="story.state.showHide(this, '.water');"> water...</span><span.water> past colonnades and<span.water.clickable onclick="story.state.showHide(this,'.bridges');"> bridges...</span></p> <p.bridges>Your thoughts turn again to the question of <em>preservation</em> <% if (story.state.luxVars.deepQuestionPreservation == true) { %> that you brought up to Paul<% } else if (story.state.luxVars.deepQuestionEurope == true) { %> that you brought up to Paul<% } else { %> that has been silently churning in the back of your mind<% } %>. Wondering how this city might have looked hundreds of years ago, a thousand, even more, stretching back to its <span.bridges.clickable onclick="story.state.showHide(this, '.beginning');"> beginning.</span></p> <p.beginning>For a moment the thought is dizzying, to see the buildings and canals around you as a barren series of islands off the coast of Italy, before such a place even existed. But then you focus in on the buildings themselves and how old they must be, wondering how many are just pretending to be old to fit in with the rest of the city.</p> <p.beginning.option.clickable onclick="story.state.veniceVars.blissfulIgnorance = true;story.state.showHide(this,'.bliss','.option');"> You blissfully experience every moment...</p> <p.bliss>You blissfully experience every moment in the city you've been waiting so long to <span.bliss.clickable onclick="story.state.showHide(this,'.see');"> see... </span><span.see> to move about </span><span.see.clickable onclick="story.state.showHide(this,'.in');"> in...</span><span.in> to become a part </span><span.in.clickable onclick="story.state.showHide(this,'.of');"> of...</span><span.of> even if only [[temporarily.->Enjoy Venice]]</span></p> <p.beginning.option>[[You begin to notice those marks of preservation...]]</p> <p.beginning.option>[[You notice how the buildings almost seem to blur together...]]</p> <!-- TODO: setting variables link reveal special alignment/float of text showing/hiding text based on what's clicked add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% story.state.veniceVars.blissfulIgnorance = false; %> <p.shown>A cement patch over <span.shown.clickable onclick="story.state.showHide(this,'.bricks');"> broken bricks... </span><span.bricks> wiped away </span><span.bricks.clickable onclick="story.state.showHide(this,'.algae');">algae...</span><span.algae> sandblasted </span><span.algae.clickable onclick="story.state.showHide(this,'.graffiti');"> graffiti...</span><span.graffiti> hosed down streets, removing the </span><span.graffiti.clickable onclick="story.state.showHide(this,'.filth');"> filth...</span><span.filth> the incursion of people and nature on this perfect city.</span></p> <p.filth>You come to <span.filth.clickable onclick="story.state.showHide(this,'.realize');"> realize the... </span></p> <p.realize.clickable onclick="story.state.veniceVars.trickOfPreservation = true; story.show('Realization Venice');" style="text-align:center">trick</p> <p.realize.clickable onclick="story.state.veniceVars.falsehoodOfPreservation = true; story.show('Realization Venice');" style="text-align:center">falsehood</p> <p.realize.clickable onclick="story.state.veniceVars.struggleOfPreservation = true; story.show('Realization Venice');" style="text-align:center">struggle</p> <p.realize.clickable onclick="story.state.veniceVars.fragilityOfPreservation = true; story.show('Realization Venice');" style="text-align:center">fragility</p> <p.realize.clickable onclick="story.state.veniceVars.delicacyOfPreservation = true; story.show('Realization Venice');" style="text-align:center">delicacy</p> <p.realize style="text-align:center">of preservation.</p><!-- TODO: Conditional display of text based on previous variables showing/hiding text based on what's clicked. add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% if (story.state.veniceVars.trickOfPreservation == true) { %><p.shown>You see the <em>trick</em> that is preservation now: of making tourists believe they are experiencing something from the past, dutifully hiding traces of the present that cannot help but worm their way into old structures, old traditions.</p> <% } else if (story.state.veniceVars.falsehoodOfPreservation == true) { %><p.shown>You see the <em>falsehood</em> that is preservation now. To show off of the past unaltered and untouched by the present is impossible. Preserving and displaying the past inevitably mars and changes it, makes it fake.</p> <% } else if (story.state.veniceVars.struggleOfPreservation == true) { %><p.shown>You see the <em>struggle</em> to preserve the past, to keep the present at bay. The effort of rescuing old ruins from rot without going too far, of allowing them to be seen as they once were, for all time.</p> <% } else if (story.state.veniceVars.fragilityOfPreservation == true) { %><p.shown>You see the <em>fragility</em> of preservation now. Of fixing the past in time and preventing the constant wearing down by the present.</p> <% } else if (story.state.veniceVars.delicacyOfPreservation == true) { %><p.shown>You see the <em>delicacy</em> of preservation, of making the past appear as it <em>truly was</em> even the imperfections, the cracks and poor materials. Carefully balancing it with the present—restoring and vandalizing—a constant pressing influence that would otherwise obliterate the past completely.</p> <% } %> <p.shown>All for the sake of keeping the city <span.shown.clickable onclick="story.state.showHide(this,'.asIs', this);"> as it is...</span><span.asIs> as it is. The way visitors expect to find it, the way the world expects to see it.</span> <% if (story.state.luxVars.deepQuestionEurope == true) { %><span.asIs> This city, then, has allowed preservation of its past to define its future: it relies on maintaining this </span><span.asIs.clickable onclick="story.state.showHide(this, '.image');"> image of itself.</span> <% } else if (story.state.luxVars.deepQuestionPreservation == true) { %><span.asIs> This city depends on an imperfect preservation: always appearing old but not ruinous and just modern enough to sustain itself and its visitors. Looking around, it is impossible for you to tell when and why the city came to be this way, this </span><span.asIs.clickable onclick="story.state.showHide(this,'.image');">version of Venice </span><span.asIs> rather than some dilapidated ruin or unrecognizable modern glass and steel contraption.</span><% } else { %><span.asIs> And this city certainly succeeds at its own preservation: tourists passing to and fro, often with cameras hanging around their necks, while <span.asIs.clickable onclick="story.state.showHide(this,'.image');"> Venice itself</span><% } if (story.state.veniceVars.trickOfPreservation == true || story.state.veniceVars.falsehoodOfPreservation == true) { %><span.asIs> pretends to be </span><% } else { %><span.asIs> gives off the impression of standing in firm tranquility, </span><% } %><span.asIs> immune to their presence.</span></p> <p.image.clickable onclick="story.state.veniceVars.unexpected = true;story.state.showHide(this,'.unexpected','.image');"> This is not the city you expected to find </p> <p.unexpected>This is not the city you expected to find at the end of your journey. But maybe you only found it this way because your trip has led you to notice these things.</p> <p.image.clickable onclick="story.state.veniceVars.expected = true;story.state.showHide(this,'.expected','.image');">Having anticipated visiting this city, it appears as expected</p> <p.expected>Having anticipated visiting this city, it appears as expected, the marks of preservation included. Everything is where and precisely how it is supposed to be in Venice.</p> <p.image.clickable onclick="story.state.veniceVars.noExpectations = true;story.state.showHide(this,'.noExpectations','.image');">You had tried to leave your expectations of the city open </p> <p.noExpectations>You had tried to leave your expectations of the city open and, as such, see the city for what it is: a constant struggle to maintain its form and image amid swaths of people, of modern technologies, of its own islands eroding out from under it.</p> <p.unexpected.expected.noExpectations>With this <span.unexpected.expected.noExpectations.clickable onclick="story.state.showHide(this,'.realize');"> realization...</span></p> <p.realize>[[You still find yourself enjoying all that this city offers you of itself.->Enjoy Venice]] </p> <p.realize>[[You return to your hotel, put off by all of it.->Stay in Hotel]]</p> <p.realize>[[You find a quiet place to ponder more.->Beach Pondering]]</p><!-- TODO: setting variables link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% story.state.veniceVars.ponderMore = true; %> <p.shown>You find your way to a small public <span.shown.clickable onclick="story.state.showHide(this,'.beach');"> beach...</span></p> <p.beach>Your thoughts subside, the realizaions mattering less here among the <span.beach.clickable onclick="story.state.showHide(this,'.sand');"> swirling sand and sea.</span></p> <p.sand>It is a long peaceful <span.sand.clickable onclick="story.state.showHide(this,'.moment');"> moment... </span></p> <p.moment>You come to accept that you will find no deeper understanding here amid the <span.moment.clickable onclick="story.state.showHide(this,'.peace');"> peace of the beach.</span><span.peace> To understand this city or your questions, you would have to learn more, to stay here longer, much longer. Or else to ask questions, and find the right people to ask them to. Regardless, it is a prospect for another time.</span></p> <p.peace>[[Return to the city.->Enjoy Venice]]</p> <p.peace>[[Return to your hotel.->Stay in Hotel]]</p><!-- TODO: setting variables conditional display of text based on past variables add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% story.state.veniceVars.stayInHotel = true; %> <p.shown>Sitting at the window of your room, looking out at the city from a distance, you can begin to see again what you saw when you first arrived here, and what you saw of the city before this trip: the buildings all together, similar without being uniform, picturesque even.</p> <p.shown>Even if the truth behind the image is complex and dissatisfying, you can at least appreciate the appeal of the city's image and the timeless perfection is it meant to represent.</p> <% if (story.state.luxVars.alpsAdvice == true) { %><p.shown>[[Try and draw a picture of the city.]]</p><% } %> <% if (story.state.luxVars.hasSwitch == true) { %><p.shown>[[Play on Paul's Switch.]]</p><% } %> <p.shown>[[Reread your letters from Paul.->Letter Select]]</p> <p.shown>[[Pack up for the end of your trip.->Take Something Redux]]</p><!-- TODO: setting variables add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% story.state.veniceVars.revisiting = true; %> <div.shown>[[Letter 1]]</div> <div.shown>[[Letter 2]]</div> <div.shown>[[Letter 3->Letter 3]] </div> <p.shown>Pack the letters away to begin [[wrapping up your trip.->Take Something Redux]]</p> <!-- TODO: setting variables add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% story.state.veniceVars.playedOnSwitch = true; %> <p.shown>Despite promising yourself you'd put it away for the rest of the vacation, you have no desire to see any more of Venice, and can't help but retreat back to the comfort of the small electric screen.</p> <p.shown>Like Paul, you play and fully complete <i>Zelda</i>. Even if your trip didn't go as expected, you could at least get lost in a good [[game...->Take Something Redux]]</p><!-- TODO: setting variables add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% story.state.veniceVars.drewSomething = true; %> <p.shown>Remembering the advice you were told in the alps, you attempt to pass the time drawing that picturesque city outside your window.</p> <p.shown>It soothes your mind [[wonderfully...->Take Something Redux]]</p><!-- TODO: setting variables conditional display of text based on previous variables add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% story.state.veniceVars.enjoyVenice = true; %> <% if (story.state.veniceVars.blissfulIgnorance == true) { %><p.shown>After touring by boat, you walk the city for yourself <% } else { %> <p.shown>You walk the city for yourself now, <% } %> visiting shops and museums, marinas and beaches. While all of the attractions still manage to charm, amuse, and inspire, <% if (story.state.veniceVars.blissfulIgnorance == true) { %> the end of your vacation looms ever larger in your mind. <% } else { %> you can't help but find yourself envying your fellow visitors who enjoy these places without <% if (story.state.veniceVars.blurringBridges == true) { %> a lurking unease. <% } else { %> a lurking awareness of the deeper truth behind it all. <% } } %> <p.shown>The days go by and you...</p> <p.shown>[[enjoy Venice as the final stop of your trip.->Take Something Redux]]</p> <p.shown>[[begin to wonder about moving here.->Moving to Venice]]</p><!-- TODO: conditional display of text based on past variables setting variables showing/hiding text based on what's clicked add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>You inquire about moving to Venice, the city that has always allured you. <% if (story.state.veniceVars.ponderMore == true) { %> After all, what better way to continue pondering this city than to live in it? <% } else if (story.state.veniceVars.blissfulIgnorance == false) { %> That continues to do so, even though you've begun to see through its illusion. <% } %> <p.shown>After a long conversation with an official about forms and visas and money, your desire <span.falters>falters.</span><span.deepens>deepens.</span> <p.shown.clickable.optionSet1 onclick="story.state.veniceVars.doubtfulMove = true;story.state.showHide(this,'.falters','.optionSet1');">falters.</p> <p.falters> Perhaps you'll consider it more when you're back home, but the obstacles suddenly appearing in front of you dissuade you... [[for now at least.->Take Something Redux]] </p> <p.shown.clickable.optionSet1 onclick="story.state.veniceVars.excitedMove = true;story.state.showHide(this,'.deepens','.optionSet1');">deepens.</p> <p.deepens>This could be a real thing. It will take some doing, but this is a new goal to work toward. After you'd spent so long hoping to just <em>see</em> Venice for yourself, this new and even greater goal of moving here motivates you even [[more strongly than before.->Take Something Redux]]</p><!-- TODO: setting variables showing/hiding text based on what's clicked conditional showing of text based on past variables link reveal add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% story.state.veniceVars.giveGame = false; %> (set: _foo to false) <p.shown>The end of your vacation finally arrives.</p> <p.shown>Rather than sending Paul a postcard and racing it back to the United States, you decide to get him a gift instead. Then you'll <span.mail>mail it to Paul when you get back home.</span><span.drive>make the drive to visit Paul when you get back home.</span></p> <p.shown.clickable.optionSet1 onclick="story.state.veniceVars.mailingGift = true;story.state.showHide(this,'.mail','.optionSet1');">mail it to Paul </p> <p.shown.clickable.optionSet1 onclick="story.state.veniceVars.deliveringGift = true;story.state.showHide(this,'.drive','.optionSet1');">make the drive to visit Paul</p> <p.mail.drive>It's got to be something small, something that will fit into your backpack. <p.mail.drive>You <span.mail.drive.clickable onclick="story.state.showHide(this,'.take');">take...</span></p> <% if (story.state.veniceVars.drewSomething == true) { %> <p.take.clickable onclick="story.state.veniceVars.giveDrawing = true; story.show('Final Note');">The picture you drew of Venice.</p><% } %> <% if (story.state.veniceVars.playedOnSwitch == true) { %> <p.take.clickable onclick="story.state.veniceVars.giveGame = true; story.show('Final Note');">A new game for Paul's Switch.</p><% } %> <% if (story.state.veniceVars.enjoyVenice == true && story.state.hollandVars.sentTulip == true) { %> <p.take.clickable onclick="story.state.veniceVars.giveGlassTulip = true; story.show('Final Note');">A Venetian glass flower.</p><% } %> <% if (story.state.veniceVars.enjoyVenice == true && story.state.luxVars.hasSwitch == false) { %> <p.take.clickable onclick="story.state.veniceVars.giveBirdPhoto = true; story.show('Final Note');">A photograph of a bird.</p><% } %> <% if (story.state.veniceVars.enjoyVenice == true && story.state.hollandVars.nostalgiaFocused == true) { %> <p.take.clickable onclick="story.state.veniceVars.giveCandy = true; story.show('Final Note');">A tin of candies and chocolates.</p><% } %> <% if (story.state.veniceVars.enjoyVenice == true) { %><p.take.clickable onclick="story.state.veniceVars.giveMap = true; story.show('Final Note');">A replica medieval map of Venice.</p><% } %> <p.take.clickable onclick="story.state.veniceVars.giveTravelGuide = true; story.show('Final Note');">Two copies of <i>Travel the Mediterranean</i> (one for each of you).</p> <p.take>[[Nothing->Take Nothing]]</p> <!-- TODO: conditional display of text based on previous variables add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% if (story.state.veniceVars.giveGame == false) { %><p.shown>As you carefully wrap and pack the<% if (story.state.veniceVars.giveDrawing == true) { %><span.shown> drawing</span><% } %><% if (story.state.veniceVars.giveGlassTulip == true) { %><span.shown> glass flower</span><% } %><% if (story.state.veniceVars.giveBirdPhoto == true) { %><span.shown> framed photograph</span><% } %><% if (story.state.veniceVars.giveCandy == true) { %><span.shown> sweets</span><% } %><% if (story.state.veniceVars.giveMap == true) { %><span.shown> rolled up map</span><% } %><% if (story.state.veniceVars.giveTravelGuide == true) { %><span.shown> books</span><% } %><span.shown>, it occurs to you to write some sort of card to go with your gift. <span.shown.clickable onclick="$('.passage').addClass('widePassage');story.show('Final Note Message');">A short note of thanks to Paul.</span></span></p> <% } else { %><p.shown>As you download the game onto Paul's Switch, it occurs to you to <span.shown.clickable onclick="$('.passage').addClass('widePassage');story.show('Alternate Final Note Message');">leave him a message with it.</span></p><% } %><!-- TODO: CSS or thru JS format text to fit onto background image only. Same as postcards: display options and actual message seperately. conditional display of text based on previous variables setting variables add p5 with FinalNote BG sketch --> <div.postcardContainer.shown> <ul.optionList> <li.shown.opener onclick="passage.postcard('.opener1');">Hey, </li> <li.shown.opener onclick="passage.postcard('.opener2');">Dear Paul, </li> <% if (story.state.veniceVars.tookNothing != true) { %><li.opener1.opener2 onclick="passage.postcard('.item1');story.state.veniceVars.intermediateHolder=true;"><% if (story.state.veniceVars.giveDrawing == true) { %> Made this for you. <% } else { %> Got this for you. <% } %></li><% } %> <% if (story.state.veniceVars.blissfulIgnorance == false && story.state.veniceVars.tookNothing != true) { %><li.opener1.opener2 onclick="passage.postcard('.item2');">My visit to Venice kinda went sideways but here, I <% if (story.state.veniceVars.giveDrawing == true) { %> made<% } else { %> got <% } %> you this.</li><% } %> <li.opener1.opener2 onclick="passage.postcard('.item3');">I just wanted to say <br>Thank You :)</li> <% if (story.state.veniceVars.giveDrawing == true) { %> <li.item1.item2 onclick="passage.postcard('.option1');"> The view from this distance is best.</li> <li.item1.item2 onclick="passage.postcard('.option2');">I drew it from my hotel room. The view is pleasant, isn't it?</li> <% } else if (story.state.veniceVars.giveGlassTulip == true) { %> <li.item1.item2 onclick="passage.postcard('.option1');story.state.veniceVars.intermediateHolder=false;">It's from a glassblowing studio, there are some really amazing displays of glass in the city.</li> <li.item1.item2 onclick="passage.postcard('.option2');">Like the one I sent you from Holland, only more permanent this time.</li> <% if (story.state.veniceVars.fragilityOfPreservation == true || story.state.veniceVars.delicacyOfPreservation == true) { %><li.item1.item2 onclick="passage.postcard('.option3');"> It's kind of like of Venice itself—fragile, but pretty to look at.</li><% } %> <% } else if (story.state.veniceVars.giveCandy == true) { %> <li.item1.item2 onclick="passage.postcard('.option1');">The candies reminded me too much of those flowers I saw in Holland, I had to get you some.</li> <li.item1.item2 onclick="passage.postcard('.option2');">It reminded me of a candy shop near where I grew up, maybe we can make a trip there.</li> <% } else if (story.state.veniceVars.giveMap == true) { %> <li.item1.item2 onclick="passage.postcard('.option1');">It's from one of the museums I visited. Venice is a remarkable place.</li> <li.item1.item2 onclick="passage.postcard('.option2');"> Amazing to think how long the city's been there, isn't it?</li> <li.item1.item2 onclick="passage.postcard('.option3');story.state.veniceVars.intermediateHolder=false;"> I got it in one of the museums, er—in the gift shop! I did <b>not</b> steal this for you :)</li> <% if (story.state.luxVars.lostAgain == true) { %><li.item1.item2 onclick="passage.postcard('.option4');"> Just to show you I had a map with me this time.</li><% } %> <% } else if (story.state.veniceVars.giveBirdPhoto == true) { %> <li.item1.item2 onclick="passage.postcard('.option1');"> Maybe we can go birdwatching sometime. There's more adventure to it than you'd expect.</li> <% if (story.state.luxVars.alpsAdvice == true) { %><li.item1.item2 onclick="passage.postcard('.option2');story.state.veniceVars.intermediateHolder=false;">It reminded me of a wildlife photographer I met in the alps. She gave me some good advice.</li><% } else { %><li.item1.item2 onclick="passage.postcard('.option3');story.state.veniceVars.intermediateHolder=false;">It reminded me of a wildlife photographer I met in the alps. She had a lot of amazing stories to tell.</li><% } %> <% } else if (story.state.veniceVars.giveTravelGuide == true) { %><li.item1.item2 onclick="passage.postcard('.option1');"> In case you want to travel with me next time.</li> <li.item1.item2 onclick="passage.postcard('.option2');"> I know you've been jealous, well start planning!</li> <% } else if (story.state.veniceVars.tookNothing == true) { %><li.opener1.opener2 onclick="passage.postcard('.nothing1');">Here's another little note from me. </li> <li.opener1.opener2 onclick="passage.postcard('.nothing2');story.state.showHide(this,'.nothing2','.nothing');">Here's a simple little note...</li> <li.nothing2 onclick="passage.postcard('.nothing3');">full of gratitude.</li> <li.nothing2 onclick="passage.postcard('.nothing4');">full of words.</li> <li.nothing1.nothing3.nothing4 onclick="passage.postcard('.nothing5');" >A token of all my appreciation.</li> <li.nothing1.nothing3.nothing4 onclick="passage.postcard('.nothing6');" >A reminder of me.</li> <% } %> <li.option1.option2.option3.option4 onclick="passage.postcard('.intermediate1');"> I'll explain more <% if (story.state.veniceVars.deliveringGift == true) { %> while visiting. <% } else if (story.state.veniceVars.mailingGift == true) { %>on the phone. <% } %></li> <li.option1.option2.option3.option4 onclick="passage.postcard('.intermediate2');">Hope you like it.</li> <li.nothing5.nothing6.intermediate1.intermediate2.option1.option2.option3.option4 onclick="passage.postcard('.ending1');">Jam together again soon.</li> <li.nothing5.nothing6.intermediate1.intermediate2.option1.option2.option3.option4 onclick="passage.postcard('.ending2');">Thanks for being my pen pal.</li> <li.nothing5.nothing6.intermediate1.intermediate2.option1.option2.option3.option4 onclick="passage.postcard('.ending3');">Thanks for being my friend.</li> </ul> <div.shown#finalNote.postcard> <div.opener1>Hey, </div> <div.opener2>Dear Paul, </div> <div.item3>I just wanted to say <br>Thank You :)</div> <div.item1.item2> <span.item1><% if (story.state.veniceVars.giveDrawing == true) { %> Made this for you. <% } else { %> Got this for you. <% } %> </span> <span.item2>My visit to Venice kinda went sideways but here, I <% if (story.state.veniceVars.giveDrawing == true) { %> made <% } else { %> got <% } %> you this.</span> <% if (story.state.veniceVars.giveDrawing == true) { %><span.option1> The view from this distance is best. </span><span.option2>I drew it from my hotel room. The view is pleasant, isn't it?</span> <% } else if (story.state.veniceVars.giveGlassTulip == true) { %><span.option1>It's from a glassblowing studio, there are some really amazing displays of glass in the city.</span><span.option2> Like the one I sent you from Holland, only more permanent this time.</span><span.option3>It's kind of like of Venice itself—fragile, but pretty to look at.</span> <% } else if (story.state.veniceVars.giveCandy == true) { %><span.option1>The candies reminded me too much of those flowers I saw in Holland, I had to get you some.</span><span.option2>It reminded me of a candy shop near where I grew up, maybe we can make a trip there.</span> <% } else if (story.state.veniceVars.giveMap == true) { %><span.option1>It's from one of the museums I visited. Venice is a remarkable place.</span><span.option2>Amazing to think how long the city's been there, isn't it?</span><span.option3> I got it in one of the museums, er—in the gift shop! I did <b>not</b> steal this for you :)</span> <span.option4> Just to show you I had a map with me this time.</span> <% } else if (story.state.veniceVars.giveBirdPhoto == true) { %><span.option1> Maybe we can go birdwatching sometime. There's more adventure to it than you'd expect.</span><span.option3>It reminded me of a wildlife photographer I met in the alps. She had a lot of amazing stories to tell.</span><span.option2>It reminded me of a wildlife photographer I met in the alps. She gave me some good advice.</span> <% } else if (story.state.veniceVars.giveTravelGuide == true) { %><span.option1> In case you want to travel with me next time.</span><span.option2> I know you've been jealous, well start planning!</span><% } %><span.intermediate1>I'll explain more <% if (story.state.veniceVars.deliveringGift == true) { %> while visiting. <% } else if (story.state.veniceVars.mailingGift == true) { %>on the phone. <% } %></span><span.intermediate2> Hope you like it.</span> </div> <% if (story.state.veniceVars.tookNothing == true) { %><div.opener1.opener2><span.nothing1>Here's another little note from me. </span><span.nothing2>Here's a simple little note </span><span.nothing3> full of gratitude.</span><span.nothing4> full of words.</span><span.nothing5><br>A token of all my appreciation.</span><span.nothing6><br>A reminder of this trip.</span></div><% } %> <div.ending1>Jam together again soon.</div> <div.ending2>Thanks for being my pen pal.</div> <div.ending3>Thanks for being my friend.</div> <div.ending1.ending2.ending3.item3.clickable onclick="if($('.passage').hasClass('widePassage')){$('.passage').removeClass('widePassage');}story.show('End of Venice Redux');" style="font-family:Georgia;font-size:100%"><br><br><i>Done</i></div> </div> </div> <script> passage.options = document.getElementsByTagName('li'); passage.postcard = function(optionClass) { for (let i = 0; i < passage.options.length; i++) { $(passage.options[i]).removeClass('shown'); $(passage.options[i]).addClass('hidden'); } if (optionClass == ".option1" ||optionClass == ".option2"||optionClass == ".option3"||optionClass == ".option4"){ let optionsRestArray= document.querySelectorAll("li" + optionClass); if(story.state.veniceVars.intermediateHolder == true){ for (let i = 0; i < 2; i++) { $(optionsRestArray[i]).removeClass('hidden'); $(optionsRestArray[i]).addClass('shown'); $("span" + optionClass).addClass('shown'); } } else{ for (let i = 2; i < optionsRestArray.length; i++) { $(optionsRestArray[i]).removeClass('hidden'); $(optionsRestArray[i]).addClass('shown'); $("span" + optionClass).addClass('shown'); } } } else{ $(optionClass).removeClass('hidden'); $(optionClass).addClass('shown'); } } </script><!-- TODO: CSS or thru JS format text to fit onto background image only. Same as postcards: display options and actual message seperately. conditional display of text based on previous variables setting variables add p5 with AlternateFinalNoteBG sketch --> <div.postcardContainer.shown> <ul.optionListAlternate> <li.shown.opener onclick="passage.postcard('.opener1');">Hey, </li> <li.shown.opener onclick="passage.postcard('.opener2');">Dear Paul, </li> <li.opener1.opener2 onclick="passage.postcard('.item1');story.state.veniceVars.intermediateHolder=true;"> Got this game for you.</li> <% if (story.state.veniceVars.blissfulIgnorance == false) { %><li.opener1.opener2 onclick="passage.postcard('.item2');">My visit to Venice kinda went sideways but here, I got you this game.<% } %></li> <li.opener1.opener2 onclick="passage.postcard('.item3');">I just wanted to say <br>Thank You :)</li> <li.item1.item2 onclick="passage.postcard('.option1');">I really appreciate you lending me your Switch. </li> <li.item1.item2 onclick="passage.postcard('.option2');">Your Switch helped me out a lot on this journey. </li> <li.option1.option2.option3.option4 onclick="passage.postcard('.intermediate1');">I'll explain more <% if (story.state.veniceVars.deliveringGift == true) { %> while visiting. <% } else if (story.state.veniceVars.mailingGift == true) { %>on the phone. <% } %></li> <li.option1.option2.option3.option4 onclick="passage.postcard('.intermediate2');">Hope you like it.</li> <li.nothing1.nothing3.nothing4.intermediate1.intermediate2.option1.option2.option3.option4 onclick="passage.postcard('.ending1');">Jam together again soon.</li> <li.nothing1.nothing3.nothing4.intermediate1.intermediate2.option1.option2.option3.option4 onclick="passage.postcard('.ending2');">Thanks for being my pen pal.</li> <li.nothing1.nothing3.nothing4.intermediate1.intermediate2.option1.option2.option3.option4 onclick="passage.postcard('.ending3');">Thanks for being my friend.</li> </ul> <div.shown#finalNoteAlternate> <div.opener1>Hey, </div> <div.opener2>Dear Paul, </div> <div.item3>I just wanted to say <br>Thank You :)</div> <div.item1.item2><span.item1> Got this game for you. </span> <span.item2>My visit to Venice kinda went sideways but here, I got you this game.</span><span.option1>I really appreciate you lending me your Switch. </span><span.option2>Your Switch helped me out a lot on this journey. </span><span.intermediate1> I'll explain more <% if (story.state.veniceVars.deliveringGift == true) { %> while visiting. <% } else if (story.state.veniceVars.mailingGift == true) { %>on the phone. <% } %></span><span.intermediate2> Hope you like it.</span> </div> <div.ending1><br>Jam together again soon.</div> <div.ending2><br>Thanks for being my pen pal.</div> <div.ending3><br>Thanks for being my friend.</div> <div.ending1.ending2.ending3.item3.clickable onclick="if($('.passage').hasClass('widePassage')){$('.passage').removeClass('widePassage');}story.show('End of Venice Redux');" style="font-family:Georgia;font-size:100%"><i>Done</i></div> </div> </div> <script> passage.options = document.getElementsByTagName('li'); passage.postcard = function(optionClass) { for (let i = 0; i < passage.options.length; i++) { $(passage.options[i]).removeClass('shown'); $(passage.options[i]).addClass('hidden'); } if (optionClass == ".option1" ||optionClass == ".option2"||optionClass == ".option3"||optionClass == ".option4"){ let optionsRestArray= document.querySelectorAll("li" + optionClass); if(story.state.veniceVars.intermediateHolder == true){ for (let i = 0; i < 2; i++) { $(optionsRestArray[i]).removeClass('hidden'); $(optionsRestArray[i]).addClass('shown'); $("span" + optionClass).addClass('shown'); } } else{ for (let i = 2; i < optionsRestArray.length; i++) { $(optionsRestArray[i]).removeClass('hidden'); $(optionsRestArray[i]).addClass('shown'); $("span" + optionClass).addClass('shown'); } } } else{ $(optionClass).removeClass('hidden'); $(optionClass).addClass('shown'); } } </script><!-- TODO: setting variables displaying text based on previous variables add p5 with VeniceBG sketch --> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.veniceBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <% story.state.veniceVars.tookNothing = true; %> <p.shown>Paul will appreciate just <% if (story.state.veniceVars.deliveringGift == true) { %> seeing <% } else { %> talking with <% } %> you again. If anything, a gift might actually make him sad that he wasn't here with you.</p> <p.shown>You could still write him a little thank you note.</p> <p.shown><span.shown.clickable onclick="$('.passage').addClass('widePassage');story.show('Final Note Message');">Write the note.</span></p> <p.shown>[[You'll tell him yourself.->End of Venice Redux]]</p> <!-- TODO: **aside, this was the weakest written passage of the Venice update. Consider prose edits if time. *conditional display of text based on previous variables *showing/hiding text based on what's clicked *link reveal --> <p.shown>Looking back, this trip has taken <span.shown.clickable onclick="story.state.showHide(this,'.holland');"> you... </span></p> <p.holland><% if (story.state.hollandVars.extraExploreHolland == true) { %>From the countryside around Amsterdam, <% if (story.state.hollandVars.lostInHolland == true) { %> and getting lost in its <span.holland.clickable onclick="story.state.showHide(this,'.lux');"> tulip fields.</span> <% } else { %> pedalling along fields and <span.holland.clickable onclick="story.state.showHide(this,'.lux');"> rivers.</span><% } %> <% } else { %> <% if (story.state.hollandVars.beautyFocused == true) { %> From the luxurious tulips of <span.holland.clickable onclick="story.state.showHide(this,'.lux');"> The Netherlands.</span> <% } else if (story.state.hollandVars.sentTulip == true) { %> From winning a tulip for Paul in <span.holland.clickable onclick="story.state.showHide(this,'.lux');"> Amsterdam.</span> <% } else { %> From rows of tulips outside of <span.holland.clickable onclick="story.state.showHide(this,'.lux');"> Amsterdam.</span><% } %> <% } %> </p> <p.lux><% if (story.state.luxVars.lostAgain == true) { %> To losing your way in the winding roads and rivers of <span.lux.clickable onclick="story.state.showHide(this,'.alps');"> Luxembourg.</span> <% } else if (story.state.luxVars.somberMemorial == true) { %> To the immaculate field of crosses in <span.lux.clickable onclick="story.state.showHide(this,'.alps');"> Luxembourg.</span> <% } else { %> To the winding city of Luxembourg, brimming with <span.lux.clickable onclick="story.state.showHide(this,'.alps');"> people.</span><% } %></p> <p.alps><% if (story.state.luxVars.hasSwitch == true) { %> Giving in, accepting the Switch and getting lost in <span.alps.clickable onclick="story.state.showHide(this,'.venice');"> Zelda.</span> <% } else if (story.state.luxVars.alpsAdvice == true) { %> Asking advice of a stranger in the <span.alps.clickable onclick="story.state.showHide(this,'.venice');"> Alps.</span> <% } else { %> Experiencing the thrills of hiking in the <span.alps.clickable onclick="story.state.showHide(this,'.venice');"> Alps.</span><% } %> <p.venice> To Venice at long last, <% if (story.state.veniceVars.excitedMove == true) { %> with the prospect of actually <span.venice.clickable onclick="story.state.showHide(this,'.end');"> moving here.</span> <% } else if (story.state.veniceVars.blissfulIgnorance == true) { %> where you could briefly immerse yourself in its <span.venice.clickable onclick="story.state.showHide(this,'.end');"> streets and canals.</span> <% } else if (story.state.veniceVars.fragilityOfPreservation == true || story.state.veniceVars.delicacyOfPreservation == true) { %> this delicate <span.venice.clickable onclick="story.state.showHide(this,'.end');"> city.</span> <% } else { %> the long awaited city, more than meets <span.venice.clickable onclick="story.state.showHide(this,'.end');"> the eye.</span><% } %> <p.end> And finally to the beach, where you dip a toe in the Adriatic Sea, your journey complete.</p> <p.end> [[The End]] </p><!--p5 loaded with Tulips BG sketch--> <script> if (story.state.p5 != null){ const thisSketch = (p) =>{ story.state.tulipsBGSketch(p); }; passage.p5 = new p5(thisSketch, story.state.passageClass[0]); } </script> <p.shown>Following a path of signs, you arrive at a series of small experimental plots in the back. A field of electric blue, thin and elongated blossoms catches your eye first, but beyond is a backdrop of small, delicate black flowers just beginning to bloom. There is something odd about them among fields of bright and vivid colors, how they are so dark yet even more beautiful for it.</p> <p.shown>Finally tearing your eyes away, you...</p> <p.shown>[[Head back to the front field.->Large field of bright red ones]]</p> <p.shown>[[Seek out the orange and white blossom.->Variegated orange and white blossom]]</p> <p.shown>[[Take your leave and return to the hostel.->End of Holland]]</p><p.shown>Thanks for playing!</p> <p.shown><span.shown.clickable onclick="story.state.showHide(this,'.game');">I originally created this game...</span><span.game> as part of the Ludum Dare 54 Compo (which means everything made was by me, from scratch, in 48 hours). The theme of the jam was <q>Limited Space</q>.</span></p> <p.game>As I've continued development, I've maintained the philosophy of the Compo's ruleset, minus the time limit.</p> <p.shown><span.shown.clickable onclick="story.state.showHide(this,'.story');">The story of this game... </span><span.story>was inspired by my family, being part Dutch, and my grandmother who recently got back from her latest trip to The Netherlands. Some of my family's stories helped get this story started, though much of it came about as part of the writing process during the game jam. And I should make something clear: I made up all the events and hotels, so things aren't going to be accurate; they are fiction based on only loosely on things that happened in my family.</span></p> <p.shown><span.shown.clickable onclick="story.state.showHide(this,'.list');">The real things referenced in this work...</span><span.list>(aside from the bigger locations like cities and countries).</span><br><span.list>In order of appearance:</span> <ul.list> <li.list >Ludum Dare (the long-running game jam) <li.list ><i>Charlie and the Chocolate Factory</i> (the book by Roald Dahl which has been adapted for film several times over the years) <li.list >Luxemboug American Cemetery and Memorial (while not explicitly called by name, this is the cemetery visited in Luxembourg) <li.list >Arlington National Cemetary (a much larger cemetery for American military personnel in Arlington, Virginia. Unlike the cemetery in Luxembourg, it is not restricted to WWII and headstones are of a rounded tombstone shape, rather than crosses) <li.list >Zelda (in reference to the game <i>The Legend of Zelda, Tears of the Kingdom</i>, copyright Nintendo) <li.list >Switch (a gaming console developed by Nintendo) <li.list >choughs (birds of the genus <i>Pyrrhocorax</i>) <li.list >Desert Bus (a 'minigame' from the unpublished video game <i>Penn & Teller's Smoke and Mirrors</i>, which has since been seperately released on the internet, ported to mobile, and even VR! Play invloves driving a bus through the desert in real time for literal days on end) </ul> <p.shown.clickable onclick="story.state.showHide(this,'.made',this);">The game was made with...</p> <p.made>Engine: Twine. Originally Harlowe Edition 3.3.7 and I have since converted it to Snowman Edition 2.0.2 and also added the p5.js library to handle graphics and other little bits.</p> <p.made>Graphics: Blender, Krita, and Inkscape.</p> <p.made>Additional: OpenOffice Writer, Google Earth, and Google Translate.</p> <p.made>OFL Fonts: Caladea, Caveat, Corbel, Georgia, Impact, Ink Free, Shantell Sans.</p> <p.shown><em>Thanks to my family and cat for emotional support during the jam, and in all of the development since. And for pumpkin squares helping power me through it.</em></p> <p.shown>[[Back->The End]]</p>