<<stopallsound>><<if $sound is true>><<loopsound "hum.wav">><<endif>>Eventually, a group of <<trace "aliendescription">> bouncers removes you from the event.\n\nThey escort you down to the trash-strewn, warehouse-sized waiting-room where new-to-space galactic babies such as yourself wait for their appointment with the galactic registrar.\n\n//"Name???"// the entity behind the desk screeches. //"Coordinates???"//\n\n[[Welcome to the galactic community, humanity.|ending1]]
try { //Start try block\n\n version.extensions['chooseevents'] = {\n major:1, minor:0, revision:0\n };\n\n macros['chooseevents'] = { // start macros\n handler: function(place, macroName, parser) { \n \n LOWESTSET = 1;\n NUMBEROFSETS = 1;\n excludedProfilesArray = state.history[0].variables["excludedProfilesArray"];\n cutoffday = 5;\n today = state.history[0].variables["day"];\n min = state.history[0].variables["set1low"];\n max = state.history[0].variables["set1high"];\n\n\t if (today == 0) {\nstate.history[0].variables["excludedProfilesArray"] = [];\n}\n serveDay();\n\n function serveDay() {\n\n findEvent();\n\n }\n\n function findEvent() {\n event = getnum(min, max);\n if(isThisEventExcludedMa(event)){\n // get another random event\n\t\t // this would break if all the profiles were bad, or take a really long time\n findEvent(); \n }\n else{\n // print the event\n printEvent(event);\n }\n }\n\n function printEvent(eventNmbr) {\n if (today > cutoffday) {\n new Wikifier(place, "<<ending>>");\n } else {\n new Wikifier(place, "<<a" + eventNmbr + ">><br><br>");\n excludedProfilesArray.push(eventNmbr);\n }\n }\n\n function getnum(low, high) {\n return Math.floor(Math.random() * (high - low + 1)) + low;\n }\n\n \n function isThisEventExcludedMa(eventNmbr){\n\n if (contains(excludedProfilesArray, eventNmbr))\n {\n return true; \n }\n else {\n return false;\n }\n }\n\n function contains(a, number) {\n \n var i = a.length;\n while (i--) {\n if (a[i] == number) {\n return true;\n }\n }\n return false;\n }\n\n }, // end handler function\n init: function() {\n var num\n var min\n var max\n var excludedProfilesArray\n var cutoffday\n var today\n var challenge\n },\n }; // end macros\n} catch(e) { // end try block\n\tthrowError(place,"serveevent Setup Error: "+e.message);\n}
#prefixsyllable1##prefixsyllable2#
potentates\nrepresentatives\nsenators\ncouncilmembers\nambassadors\nprimarchs\nchampions
aliens\nextraterrestrials\nspace-men\nlarvae\nsentients\nentities
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 7>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 7>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 7>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 7>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 7>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
zing\nxing\nxo\nbo\nwuu\nxx\nzz\njp\no'o\ni'i\nxkk#prefixsyllable2#\nzz#prefixsyllable2#\null\naaaaa\nquo
Ka\nBa\nRa\nTa\nLa\nPa\nZa\nLe\nRe\nYe\nPe\nLe\nQe\nXe\nZe\nFl'\nPl'\nXi'\nXl'\nBq'\nQub'\nXug'\nXo'\nXo\nZo\nZo'\nYo'\nPo'\nPoo'\nFoo\nLoo\nQoo
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;font-family:'baloo_tammaregular';line-height:110%;NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 12>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 12>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 12>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 12>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 12>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
try { //Start try block\n\n version.extensions['serveendings'] = {\n major:1, minor:0, revision:0\n };\n\n macros['serveendings'] = { // start macros\n handler: function(place, macroName, parser) {\n\n forgivenum = state.history[0].variables["forgivenum"];\n forgiven1 = state.history[0].variables["forgiven1"];\n forgiven2 = state.history[0].variables["forgiven2"];\n forgiven3 = state.history[0].variables["forgiven3"];\n forgiven4 = state.history[0].variables["forgiven4"];\n forgiven5 = state.history[0].variables["forgiven5"];\n\n if (forgivenum == 1) {\n new Wikifier (place, "<<a" + forgiven1 + "ending>>")\n } else if (forgivenum == 2){\n new Wikifier (place, "<<a" + forgiven1 + "ending>>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<<a" + forgiven2 + "ending>>")\n } else if (forgivenum == 3) {\n new Wikifier (place, "<<a" + forgiven1 + "ending>>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<<a" + forgiven2 + "ending>>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<<a" + forgiven3 + "ending>>")\n } else if (forgivenum == 4) {\n new Wikifier (place, "<<a" + forgiven1 + "ending>>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<<a" + forgiven2 + "ending>>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<<a" + forgiven3 + "ending>>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<<a" + forgiven4 + "ending>>")\n } else if (forgivenum == 5) {\n new Wikifier (place, "<<a" + forgiven1 + "ending>>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<<a" + forgiven2 + "ending>>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<<a" + forgiven3 + "ending>>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<<a" + forgiven4 + "ending>>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<br>")\n new Wikifier (place, "<<a" + forgiven5 + "ending>>")\n }\n\n\n }, // end handler function\n init: function() {\n var forgivenum\n var forgiven1\n var forgiven2\n var forgiven3\n var forgiven4\n var forgiven5\n },\n }; // end macros\n} catch(e) { // end try block\n\tthrowError(place,"serveevent Setup Error: "+e.message);\n}\n
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 8>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 8>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 8>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 8>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 8>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
<<insert "''AT THE GALACTIC HUB''">>\n<<insert "''ALL THE ALIENS WERE''">>\n<<insert "''ALREADY HANGING OUT''">>\n<<insert "''IN OUTER SPACE''">>\n<<insert "''TOGETHER, //WITHOUT US//''">>\n[[WE'D BEEN ALIEN SNUBBED!|5]]<<endinsert>><<endinsert>><<endinsert>><<endinsert>><<endinsert>>
The guests\nThe aliens\nAll the guests\nAll the aliens\nAll the attendees
THE GALACTIC SNUB
vaporizing\ndisappearing\nde-molecularizing\nfrying\nirradiating\ntoasting\nroasting\nburying\nflattening\nsquashing
#prefix# #name#\n#prefix#-#name#\n#name#\n#name# #organization#\n#name# #organization#\n#prefix# #name# #organization#
<<print tale.story.toHTML()>>
pay any attention to\npay any heed to\nbother with\nwaste time with
hyper\nspice\nultra\nzygo\nholo\nelectro
mining-hub\ndehydration-hub\nmagma-harvester\noxygen-harvester\nrobotics manufacture superstructure\ncyanide-generator\ncrystal foundry
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 0>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 0>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 0>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 0>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 0>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;font-family:'baloo_tammaregular';line-height:110%;FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
It becomes a #vassalnoun# of the #alienname#'s most cruel #baronnoun#. #sadtale#\nInstant #vaporizationoun# by the #alienname#'s #shipadj# flagship. #sadtale#
#namesyllable1##namesyllable3#\n#namesyllable1##namesyllable2##namesyllable3#\n#namesyllable1#\n#namesyllable1##namesyllable1#\n#namesyllable1##namesyllable3#\n#namesyllable1##namesyllable2##namesyllable2##namesyllable3#\n#namesyllable1#\n#namesyllable1##namesyllable1#
<<set $forgivenum = 0>><<set $day = 0>><<set $set1low = 0>><<set $set1high = 14>><<set $excludedProfilesArray = []>><<set $lowpic = 1>><<set $highpic = 14>><<traceryInit>><<set $warscore = 0>>
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 9>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 9>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 9>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 9>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 9>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
#shipnum#-mile-long\nhypercrystalline\ntrans-dimensional\nferrofluid\nswarm-hive\ncrystal-powered\nultra-electric\nblack-hole-fuelled\nminisun-fuelled
Before earth's primitive galactic-diplomacy corps have even hired the translators necesarry to negotiate the insurance charges, privateers with letters of marque from the offended parties are shooting up your space stations and repossessing your sattelites.\n\n[[Earth calls its entire galactic rolodex.|ending3]]
<<if $forgivenum > 0>><<serveendings>>\n\n<<if $warscore > 10>><<if $forgivenum > 1>>[[Its allies assembled, Earth fights back.|successending]]<<else>>[[After calling on its sole ally, Earth prepares to fight back.|successending]]<<endif>><<else>><<if $forgivenum > 1>>[[Its allies assembled, Earth fights back.|failureending]]<<else>>[[After calling on its sole ally, Earth prepares to fight back.|failureending]]<<endif>><<endif>><<endif>><<if $forgivenum is 0>>Unfortunately, nobody in that rolodex wants to talk to you. Everyone remembers humanity as rude, stubborn pieces of shit.\n\nWhen the invading fleet arrives, no friends are ready to help you.\n\nEarth's fate? <<trace "earthfate">>\n\n[[Well, shit.|fin]]<<endif>>
gathering\nparty\ncelebration\nreception
<<set $warscore += 2>>You beg your rest-stop-requiring friends into lending you several fast space-winnebagos. They come outfitted with rough borderworld cannons, but they aren't top of the line when it comes to hull strength. They've got to stop every couple light-years to fix critical parts with <<trace "baronadj">>-duct-tape.
<<if !tale.grammar>>\n\t<<if tracery>>\n\t\t<<set tale.grammar = tracery.createGrammar(tale.story.data)>>\n\t\t<<print console.log("grammar: ", tale.grammar)>>\n\t<<else>>\n\t\t<<print console.log("grammar instantiation failed")>>\n\t<<endif>>\n<<endif>>
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;font-family:'baloo_tammaregular';line-height:110%;NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
Wouldn't you know it: within ten months, your primitive spacecraft have broken a variety of space traffic laws and caused a number of expensive crashes.\n\nVarious foreign interests have lost a great deal of revenue.\n\n[[They're not happy.|ending2]]
<<set $warscore += 4>>You ask your drug-dealing friends to help you out. They send over an entire frieghter of Gillruvian crystalfruit... which Earth flips for a sizeable quantity of galactic buckaroos. Earth uses the cash to buy an entire fleet of fighter drones.
quarter-million\nmillion\nhundred thousand\nuncountable number of\nvery large number of\nhalf-million\ngazillion\nridiculous number of
vaporization\nincineration\ndematerialization\nlaserification\nblack-hole spaghettification
mill\nwander\nwalk
You #walkverb# among the #gatheredadj# #representativenouns# and #celebritynouns#. #rebuff#\n#wince# You #walkverb# among the #gatheredadj# #representativenouns# and #celebritynouns#. #rebuff#\nThe #disgustingadj# #aliensnoun# at this party #lookverb# at you like you're #trashnoun#.\n#wince# The #disgustingadj# #aliensnoun# at this party #lookverb# at you like you're #trashnoun#.\n#attendeesnoun# at this #gatheringnoun# are too #busyadj# their #partydistractionnoun# to #noticeverb# you. #rebuff#\n#wince# #attendeesnoun# at this #gatheringnoun# are too #busyadj# their #partydistractionnoun# to #noticeverb# you. #rebuff#
busy with\ninterested in\nhypnotized by\nabsorbed in\ncharmed by\nwrapped up in
squamous\ndripping\nnoneuclidian\nspidery\ndamp\nsticky\nmite-covered
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 10>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 10>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 10>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 10>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 10>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
So, we aimed our rail-cannons, greased our skyscraper lensing-crystals, and picked YOU, brave explorer, to be the first to go.\n\n[[And what did you find...?|4]]
Earth is quickly divided up by a number of powerful stellar business conglomorates.\n\nThey immediately harvest the planet for valuable resources. Your hometown is squashed under a large prefab <<trace "hubnoun">> which drops from orbit two days after the battle finishes. In seventy-two hours, the entire surface landscape of the planet is totally unrecognizable, and sea-level has dropped almost five hundred feet.\n\n<<trace "yourfate">>\n\n[[Galactic politics takes no prisoners.|fin]]
worthless\nstinking\nuninvited\ncomplete\nhideous\n
You spend your final days as an exhibit in an alien zoo. When you die, you are cloned for additional zoo-stock.\nYou spend your final days hooked up as a battery in a human-battery farm. When you die, you are fed to gigantic space crabs.\nYou spend your final days in a howling nightmare of human prisoners in a spaceborn factory farm. You are soon minced up to provide a protein ingredient for space-dog food.\nYou spend your final days with your brain hooked up to a memory-drain system aboard an imperial library-ship, your grey matter turning to mush as all its knowledge is siphoned off into a robot copy of yourself. Your robo-self lives for centuries in a dark knowledge-vault on Librarius Prime, chanting the story of your miserable death.\nYou spend your final days teaching your alien masters how to use human toilets. You are executed once your handler has finished the alien encyclopedia entry on human toilets.\nYou spend your final days being slowly live-dissected in front of a studio audience for the popular <<trace "alienname">> net-show "Alien Guts: Exposed!" You are preserved in resin after your death.
12\n15\n32\n55\n103\n98\n2\n5\n3.5
window.tracery = {\n utilities : {}\n};\n\n(function () {/**\n * @author Kate Compton\n */\n\nfunction inQuotes(s) {\n return '"' + s + '"';\n};\n\nfunction parseAction(action) {\n return action;\n};\n\n// tag format\n// a thing to expand, plus actions\n\nfunction parseTag(tag) {\n var errors = [];\n var prefxns = [];\n var postfxns = [];\n\n var lvl = 0;\n var start = 0;\n\n var inPre = true;\n\n var symbol,\n mods;\n\n function nonAction(end) {\n if (start !== end) {\n var section = tag.substring(start, end);\n if (!inPre) {\n errors.push("multiple possible expansion symbols in tag!" + tag);\n } else {\n inPre = false;\n var split = section.split(".");\n symbol = split[0];\n mods = split.slice(1, split.length);\n }\n\n }\n start = end;\n };\n\n for (var i = 0; i < tag.length; i++) {\n var c = tag.charAt(i);\n\n switch(c) {\n case '[':\n if (lvl === 0) {\n nonAction(i);\n }\n\n lvl++;\n break;\n case ']':\n lvl--;\n if (lvl === 0) {\n var section = tag.substring(start + 1, i);\n if (inPre)\n prefxns.push(parseAction(section));\n else\n postfxns.push(parseAction(section));\n start = i + 1;\n }\n break;\n\n default:\n if (lvl === 0) {\n\n }\n break;\n\n }\n }\n nonAction(i);\n\n if (lvl > 0) {\n var error = "Too many '[' in rule " + inQuotes(tag);\n errors.push(error);\n\n }\n\n if (lvl < 0) {\n var error = "Too many ']' in rule " + inQuotes(tag);\n errors.push(error);\n\n }\n\n return {\n preActions : prefxns,\n postActions : postfxns,\n symbol : symbol,\n mods : mods,\n raw : tag,\n errors : errors,\n };\n};\n\n// Split a rule into sections\nfunction parseRule(rule) {\n var sections = [];\n var errors = [];\n if (!( typeof rule == 'string' || rule instanceof String)) {\n errors.push("Cannot parse non-string rule " + rule);\n sections.errors = errors;\n return sections;\n }\n\n if (rule.length === 0) {\n return [];\n }\n\n var lvl = 0;\n var start = 0;\n var inTag = false;\n\n function createSection(end) {\n var section = rule.substring(start, end);\n if (section.length > 0) {\n if (inTag)\n sections.push(parseTag(section));\n else\n sections.push(section);\n }\n inTag = !inTag;\n start = end + 1;\n\n }\n\n for (var i = 0; i < rule.length; i++) {\n var c = rule.charAt(i);\n\n switch(c) {\n case '[':\n lvl++;\n break;\n case ']':\n lvl--;\n break;\n case '#':\n if (lvl === 0) {\n createSection(i);\n }\n break;\n default:\n break;\n\n }\n\n }\n\n if (lvl > 0) {\n var error = "Too many '[' in rule " + inQuotes(rule);\n errors.push(error);\n\n }\n\n if (lvl < 0) {\n var error = "Too many ']' in rule " + inQuotes(rule);\n errors.push(error);\n\n }\n\n if (inTag) {\n var error = "Odd number of '#' in rule " + inQuotes(rule);\n errors.push(error);\n }\n\n createSection(rule.length);\n sections.errors = errors;\n return sections;\n};\n\nfunction testParse(rule, shouldFail) {\n console.log("-------");\n console.log("Test parse rule: " + inQuotes(rule) + " " + shouldFail);\n var parsed = parseRule(rule);\n if (parsed.errors && parsed.errors.length > 0) {\n for (var i = 0; i < parsed.errors.length; i++) {\n console.log(parsed.errors[i]);\n }\n }\n \n\n}\n\nfunction testParseTag(tag, shouldFail) {\n console.log("-------");\n console.log("Test parse tag: " + inQuotes(tag) + " " + shouldFail);\n var parsed = parseTag(tag);\n if (parsed.errors && parsed.errors.length > 0) {\n for (var i = 0; i < parsed.errors.length; i++) {\n console.log(parsed.errors[i]);\n }\n }\n}\n\ntracery.testParse = testParse;\ntracery.testParseTag = testParseTag;\ntracery.parseRule = parseRule;\ntracery.parseTag = parseTag;\n\n\nfunction spacer(size) {\n var s = "";\n for (var i = 0; i < size * 3; i++) {\n s += " ";\n }\n return s;\n}\n\n/* Simple JavaScript Inheritance\n * By John Resig http://ejohn.org/\n * MIT Licensed.\n */\n\nfunction extend(destination, source) {\n for (var k in source) {\n if (source.hasOwnProperty(k)) {\n destination[k] = source[k];\n }\n }\n return destination;\n}\n\n// Inspired by base2 and Prototype\n(function() {\n var initializing = false,\n fnTest = /xyz/.test(function() { xyz;\n }) ? /\sb_super\sb/ : /.*/;\n\n // The base Class implementation (does nothing)\n this.Class = function() {\n };\n\n // Create a new Class that inherits from this class\n Class.extend = function(prop) {\n var _super = this.prototype;\n\n // Instantiate a base class (but only create the instance,\n // don't run the init constructor)\n initializing = true;\n var prototype = new this();\n initializing = false;\n\n // Copy the properties over onto the new prototype\n for (var name in prop) {\n // Check if we're overwriting an existing function\n prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name]) ? (function(name, fn) {\n return function() {\n var tmp = this._super;\n\n // Add a new ._super() method that is the same method\n // but on the super-class\n this._super = _super[name];\n\n // The method only need to be bound temporarily, so we\n // remove it when we're done executing\n var ret = fn.apply(this, arguments);\n this._super = tmp;\n\n return ret;\n };\n })(name, prop[name]) : prop[name];\n }\n\n // The dummy class constructor\n function Class() {\n // All construction is actually done in the init method\n if (!initializing && this.init)\n this.init.apply(this, arguments);\n }\n\n // Populate our constructed prototype object\n Class.prototype = prototype;\n\n // Enforce the constructor to be what we expect\n Class.prototype.constructor = Class;\n\n // And make this class extendable\n Class.extend = arguments.callee;\n\n return Class;\n };\n})();\n\n/**\n * @author Kate\n */\n\nvar Rule = function(raw) {\n this.raw = raw;\n this.sections = parseRule(raw);\n\n};\n\nRule.prototype.getParsed = function() {\n if (!this.sections)\n this.sections = parseRule(raw);\n\n return this.sections;\n};\n\nRule.prototype.toString = function() {\n return this.raw;\n};\n\nRule.prototype.toJSONString = function() {\n return this.raw;\n};\n\n/**\n * @author Kate\n */\n\nvar RuleWeighting = Object.freeze({\n RED : 0,\n GREEN : 1,\n BLUE : 2\n});\n\nvar RuleSet = function(rules) {\n // is the rules obj an array? A RuleSet, or a string?\n if (rules.constructor === Array) {\n // make a copy\n rules = rules.slice(0, rules.length);\n } else if (rules.prototype === RuleSet) {\n // clone\n } else if ( typeof rules == 'string' || rules instanceof String) {\n var args = Array.prototype.slice.call(arguments);\n rules = args;\n } else {\n console.log(rules);\n throw ("creating ruleset with unknown object type!");\n }\n\n // create rules and their use counts\n\n this.rules = rules;\n this.parseAll();\n\n this.uses = [];\n this.startUses = [];\n this.totalUses = 0;\n for (var i = 0; i < this.rules.length; i++) {\n this.uses[i] = 0;\n this.startUses[i] = this.uses[i];\n this.totalUses += this.uses[i];\n }\n\n};\n\n//========================================================\n// Iterating over rules\n\nRuleSet.prototype.parseAll = function(fxn) {\n for (var i = 0; i < this.rules.length; i++) {\n if (this.rules[i].prototype !== Rule)\n this.rules[i] = new Rule(this.rules[i]);\n }\n\n};\n\n//========================================================\n// Iterating over rules\n\nRuleSet.prototype.mapRules = function(fxn) {\n return this.rules.map(function(rule, index) {\n return fxn(rule, index);\n });\n};\n\nRuleSet.prototype.applyToRules = function(fxn) {\n for (var i = 0; i < this.rules.length; i++) {\n fxn(this.rules[i], i);\n }\n};\n//========================================================\nRuleSet.prototype.get = function() {\n var index = this.getIndex();\n\n return this.rules[index];\n};\n\nRuleSet.prototype.getRandomIndex = function() {\n return Math.floor(this.uses.length * Math.random());\n};\n\nRuleSet.prototype.getIndex = function() {\n // Weighted distribution\n // Imagine a bar of length 1, how to divide the length\n // s.t. a random dist will result in the dist we want?\n\n var index = this.getRandomIndex();\n // What if the uses determine the chance of rerolling?\n\n var median = this.totalUses / this.uses.length;\n\n var count = 0;\n while (this.uses[index] > median && count < 20) {\n index = this.getRandomIndex();\n count++;\n }\n\n // reroll more likely if index is too much higher\n\n return index;\n};\n\nRuleSet.prototype.decayUses = function(pct) {\n this.totalUses = 0;\n for (var i = 0; i < this.uses; i++) {\n\n this.uses[index] *= 1 - pct;\n this.totalUses += this.uses[index];\n }\n};\n\nRuleSet.prototype.testRandom = function() {\n console.log("Test random");\n var counts = [];\n for (var i = 0; i < this.uses.length; i++) {\n counts[i] = 0;\n }\n\n var testCount = 10 * this.uses.length;\n for (var i = 0; i < testCount; i++) {\n\n var index = this.getIndex();\n this.uses[index] += 1;\n\n counts[index]++;\n this.decayUses(.1);\n }\n\n for (var i = 0; i < this.uses.length; i++) {\n console.log(i + ":\st" + counts[i] + " \st" + this.uses[i]);\n }\n};\n\nRuleSet.prototype.getSaveRules = function() {\n var jsonRules = this.rules.map(function(rule) {\n return rule.toJSONString();\n });\n\n return jsonRules;\n};\n\n/**\n * @author Kate Compton\n */\n\nvar Action = function(node, raw) {\n\n this.node = node;\n this.grammar = node.grammar;\n this.raw = raw;\n\n};\n\nAction.prototype.activate = function() {\n\n var node = this.node;\n node.actions.push(this);\n\n // replace any hashtags\n this.amended = this.grammar.flatten(this.raw);\n\n var parsed = parseTag(this.amended);\n var subActionRaw = parsed.preActions;\n if (subActionRaw && subActionRaw.length > 0) {\n this.subactions = subActionRaw.map(function(action) {\n return new Action(node, action);\n });\n\n }\n\n if (parsed.symbol) {\n var split = parsed.symbol.split(":");\n\n if (split.length === 2) {\n this.push = {\n symbol : split[0],\n\n // split into multiple rules\n rules : split[1].split(","),\n };\n // push\n node.grammar.pushRules(this.push.symbol, this.push.rules);\n\n } else\n throw ("Unknown action: " + parsed.symbol);\n }\n\n if (this.subactions) {\n for (var i = 0; i < this.subactions.length; i++) {\n this.subactions[i].activate();\n }\n }\n\n};\n\nAction.prototype.deactivate = function() {\n if (this.subactions) {\n for (var i = 0; i < this.subactions.length; i++) {\n this.subactions[i].deactivate();\n }\n }\n\n if (this.push) {\n this.node.grammar.popRules(this.push.symbol, this.push.rules);\n }\n};\n\n/**\n * @author Kate Compton\n */\n\nvar isConsonant = function(c) {\n c = c.toLowerCase();\n switch(c) {\n case 'a':\n return false;\n case 'e':\n return false;\n case 'i':\n return false;\n case 'o':\n return false;\n case 'u':\n return false;\n\n }\n return true;\n};\n\nfunction endsWithConY(s) {\n if (s.charAt(s.length - 1) === 'y') {\n return isConsonant(s.charAt(s.length - 2));\n }\n return false;\n};\n\nvar universalModifiers = {\n capitalizeAll : function(s) {\n return s.replace(/(?:^|\ss)\sS/g, function(a) {\n return a.toUpperCase();\n });\n\n },\n\n capitalize : function(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n\n },\n\n inQuotes : function(s) {\n return '"' + s + '"';\n },\n\n comma : function(s) {\n var last = s.charAt(s.length - 1);\n if (last === ",")\n return s;\n if (last === ".")\n return s;\n if (last === "?")\n return s;\n if (last === "!")\n return s;\n return s + ",";\n },\n\n beeSpeak : function(s) {\n // s = s.replace("s", "zzz");\n\n s = s.replace(/s/, 'zzz');\n return s;\n },\n\n a : function(s) {\n if (!isConsonant(s.charAt()))\n return "an " + s;\n return "a " + s;\n\n },\n\n s : function(s) {\n\n var last = s.charAt(s.length - 1);\n\n switch(last) {\n case 'y':\n\n // rays, convoys\n if (!isConsonant(s.charAt(s.length - 2))) {\n return s + "s";\n }\n // harpies, cries\n else {\n return s.slice(0, s.length - 1) + "ies";\n }\n break;\n\n // oxen, boxen, foxen\n case 'x':\n return s.slice(0, s.length - 1) + "en";\n case 'z':\n return s.slice(0, s.length - 1) + "es";\n case 'h':\n return s.slice(0, s.length - 1) + "es";\n\n default:\n return s + "s";\n };\n\n },\n\n ed : function(s) {\n\n var index = s.indexOf(" ");\n var s = s;\n var rest = "";\n if (index > 0) {\n rest = s.substring(index, s.length);\n s = s.substring(0, index);\n\n }\n\n var last = s.charAt(s.length - 1);\n\n switch(last) {\n case 'y':\n\n // rays, convoys\n if (isConsonant(s.charAt(s.length - 2))) {\n return s.slice(0, s.length - 1) + "ied" + rest;\n\n }\n // harpies, cries\n else {\n return s + "ed" + rest;\n }\n break;\n case 'e':\n return s + "d" + rest;\n\n break;\n\n default:\n return s + "ed" + rest;\n };\n }\n};\n/**\n * @author Kate Compton\n */\n\n// A tracery expansion node\nvar nodeCount = 0;\n\nvar ExpansionNode = Class.extend({\n init : function() {\n this.depth = 0;\n this.id = nodeCount;\n nodeCount++;\n this.childText = "[[UNEXPANDED]]";\n },\n\n setParent : function(parent) {\n if (parent) {\n this.depth = parent.depth + 1;\n this.parent = parent;\n this.grammar = parent.grammar;\n }\n },\n\n expand : function() {\n // do nothing\n return "???";\n },\n\n expandChildren : function() {\n\n if (this.children) {\n this.childText = "";\n for (var i = 0; i < this.children.length; i++) {\n this.children[i].expand();\n this.childText += this.children[i].finalText;\n }\n this.finalText = this.childText;\n }\n\n },\n\n createChildrenFromSections : function(sections) {\n var root = this;\n this.children = sections.map(function(section) {\n\n if ( typeof section == 'string' || section instanceof String) {\n // Plaintext\n return new TextNode(root, section);\n } else {\n return new TagNode(root, section);\n }\n });\n }\n});\n\nvar RootNode = ExpansionNode.extend({\n init : function(grammar, rawRule) {\n this._super();\n this.grammar = grammar;\n this.parsedRule = parseRule(rawRule);\n },\n\n expand : function() {\n var root = this;\n this.createChildrenFromSections(this.parsedRule);\n\n // expand the children\n this.expandChildren();\n },\n});\n\nvar TagNode = ExpansionNode.extend({\n init : function(parent, parsedTag) {\n this._super();\n\n if (!(parsedTag !== null && typeof parsedTag === 'object')) {\n if ( typeof parsedTag == 'string' || parsedTag instanceof String) {\n console.warn("Can't make tagNode from unparsed string!");\n parsedTag = parseTag(parsedTag);\n\n } else {\n console.log("Unknown tagNode input: ", parsedTag);\n throw ("Can't make tagNode from strange tag!");\n\n }\n }\n\n this.setParent(parent);\n $.extend(this, parsedTag);\n },\n\n expand : function() {\n if (tracery.outputExpansionTrace)\n console.log(r.sections);\n\n this.rule = this.grammar.getRule(this.symbol);\n\n this.actions = [];\n\n // Parse the rule if it hasn't been already\n this.createChildrenFromSections(this.rule.getParsed());\n\n // Do any pre-expansion actions!\n for (var i = 0; i < this.preActions.length; i++) {\n var action = new Action(this, this.preActions[i]);\n action.activate();\n }\n\n // Map each child section to a node\n if (!this.rule.sections)\n console.log(this.rule);\n\n this.expandChildren();\n\n for (var i = 0; i < this.actions.length; i++) {\n\n this.actions[i].deactivate();\n }\n\n this.finalText = this.childText;\n for (var i = 0; i < this.mods.length; i++) {\n this.finalText = this.grammar.applyMod(this.mods[i], this.finalText);\n }\n\n },\n\n toLabel : function() {\n return this.symbol;\n },\n toString : function() {\n return "TagNode '" + this.symbol + "' mods:" + this.mods + ", preactions:" + this.preActions + ", postactions" + this.postActions;\n }\n});\n\nvar TextNode = ExpansionNode.extend({\n isLeaf : true,\n init : function(parent, text) {\n this._super();\n\n this.setParent(parent);\n\n this.text = text;\n\n this.finalText = text;\n },\n expand : function() {\n // do nothing\n },\n\n toLabel : function() {\n return this.text;\n }\n});\n\n/**\n * @author Kate Compton\n */\n\nfunction Symbol(grammar, key) {\n this.grammar = grammar;\n this.key = key;\n this.currentRules = undefined;\n this.ruleSets = [];\n\n};\n\nSymbol.prototype.loadFrom = function(rules) {\n\n rules = this.wrapRules(rules);\n this.baseRules = rules;\n\n this.ruleSets.push(rules);\n this.currentRules = this.ruleSets[this.ruleSets.length - 1];\n\n};\n\n//========================================================\n// Iterating over rules\n\nSymbol.prototype.mapRules = function(fxn) {\n\n return this.currentRules.mapRules(fxn);\n};\n\nSymbol.prototype.applyToRules = function(fxn) {\n this.currentRules.applyToRules(fxn);\n};\n\n//==================================================\n// Rule pushpops\nSymbol.prototype.wrapRules = function(rules) {\n if (rules.prototype !== RuleSet) {\n if (Array.isArray(rules)) {\n return new RuleSet(rules);\n } else if ( typeof rules == 'string' || rules instanceof String) {\n return new RuleSet(rules);\n } else {\n throw ("Unknown rules type: " + rules);\n }\n }\n // already a ruleset\n return rules;\n};\n\nSymbol.prototype.pushRules = function(rules) {\n rules = this.wrapRules(rules);\n this.ruleSets.push(rules);\n this.currentRules = this.ruleSets[this.ruleSets.length - 1];\n};\n\nSymbol.prototype.popRules = function() {\n var exRules = this.ruleSets.pop();\n\n if (this.ruleSets.length === 0) {\n //console.warn("No more rules for " + this + "!");\n }\n this.currentRules = this.ruleSets[this.ruleSets.length - 1];\n};\n\n// Clear everything and set the rules\nSymbol.prototype.setRules = function(rules) {\n\n rules = this.wrapRules(rules);\n this.ruleSets = [rules];\n this.currentRules = rules;\n\n};\n\nSymbol.prototype.addRule = function(rule) {\n this.currentRules.addRule(seed);\n};\n\n//========================================================\n// selection\n\nSymbol.prototype.select = function() {\n this.isSelected = true;\n\n};\n\nSymbol.prototype.deselect = function() {\n this.isSelected = false;\n};\n\n//==================================================\n// Getters\n\nSymbol.prototype.getRule = function(seed) {\n return this.currentRules.get(seed);\n};\n\n//==================================================\n\nSymbol.prototype.toString = function() {\n return this.key + ": " + this.currentRules + "(overlaying " + (this.ruleSets.length - 1) + ")";\n};\nSymbol.prototype.toJSON = function() {\n\n var rules = this.baseRules.rules.map(function(rule) {\n return '"' + rule.raw + '"';\n });\n return '"' + this.key + '"' + ": [" + rules.join(", ") + "]";\n};\n\nSymbol.prototype.toHTML = function(useSpans) {\n var keySpan = '"' + this.key + '"';\n if (useSpans)\n keySpan = "<span class='symbol symbol_" + this.key + "'>" + keySpan + "</span>";\n\n var rules = this.baseRules.rules.map(function(rule) {\n var s = '"' + rule.raw + '"';\n if (useSpans)\n s = "<span class='rule'>" + s + "</span>";\n return s;\n });\n return keySpan + ": [" + rules.join(", ") + "]";\n};\n\n/**\n * @author Kate Compton\n */\n\nfunction Grammar() {\n this.clear();\n};\n\nGrammar.prototype.clear = function() {\n // Symbol library\n this.symbols = {};\n \n this.errors = [];\n \n // Modifier library\n this.modifiers = {};\n\n // add the universal mods\n for (var mod in universalModifiers) {\n if (universalModifiers.hasOwnProperty(mod))\n this.modifiers[mod] = universalModifiers[mod];\n }\n};\n//========================================================\n// Loading\n\nGrammar.prototype.loadFrom = function(obj) {\n var symbolSrc;\n\n this.clear();\n\n if (obj.symbols !== undefined) {\n symbolSrc = obj.symbols;\n } else {\n symbolSrc = obj;\n }\n\n // get all json keys\n var keys = Object.keys(symbolSrc);\n\n this.symbolNames = [];\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n this.symbolNames.push(key);\n\n this.symbols[key] = new Symbol(this, key);\n this.symbols[key].loadFrom(symbolSrc[key]);\n }\n\n};\n\nGrammar.prototype.toHTML = function(useSpans) {\n // get all json keys\n var keys = Object.keys(this.symbols);\n\n this.symbolNames = [];\n\n var lines = [];\n\n var count = 0;\n for (var i = 0; i < keys.length; i++) {\n\n var key = keys[i];\n var symbol = this.symbols[key];\n\n if (symbol && symbol.baseRules) {\n\n lines.push(" " + this.symbols[key].toHTML(useSpans));\n\n }\n };\n\n var s;\n s = lines.join(",</p><p>");\n s = "{<p>" + s + "</p>}";\n return s;\n};\n\nGrammar.prototype.toJSON = function() {\n // get all json keys\n var keys = Object.keys(this.symbols);\n\n this.symbolNames = [];\n\n var lines = [];\n\n var count = 0;\n for (var i = 0; i < keys.length; i++) {\n\n var key = keys[i];\n var symbol = this.symbols[key];\n\n if (symbol && symbol.baseRules) {\n\n lines.push(" " + this.symbols[key].toJSON());\n\n }\n };\n\n var s;\n s = lines.join(",\sn");\n s = "{\sn" + s + "\sn}";\n return s;\n};\n\n//========================================================\n// selection\n\nGrammar.prototype.select = function() {\n this.isSelected = true;\n};\n\nGrammar.prototype.deselect = function() {\n this.isSelected = false;\n};\n\n//========================================================\n// Iterating over symbols\n\nGrammar.prototype.mapSymbols = function(fxn) {\n var symbols = this.symbols;\n return this.symbolNames.map(function(name) {\n return fxn(symbols[name], name);\n });\n};\n\nGrammar.prototype.applyToSymbols = function(fxn) {\n for (var i = 0; i < this.symbolNames.length; i++) {\n var key = this.symbolNames[i];\n fxn(this.symbols[key], key);\n }\n};\n\n//========================================================\nGrammar.prototype.addOrGetSymbol = function(key) {\n if (this.symbols[key] === undefined)\n this.symbols[key] = new Symbol(key);\n\n return this.symbols[key];\n};\n\nGrammar.prototype.pushRules = function(key, rules) {\n var symbol = this.addOrGetSymbol(key);\n symbol.pushRules(rules);\n};\n\nGrammar.prototype.popRules = function(key, rules) {\n var symbol = this.addOrGetSymbol(key);\n var popped = symbol.popRules();\n\n if (symbol.ruleSets.length === 0) {\n // remove symbol\n this.symbols[key] = undefined;\n }\n};\n\nGrammar.prototype.applyMod = function(modName, text) {\n if (!this.modifiers[modName]) {\n console.log(this.modifiers);\n throw ("Unknown mod: " + modName);\n }\n return this.modifiers[modName](text);\n};\n\n//============================================================\nGrammar.prototype.getRule = function(key, seed) {\n var symbol = this.symbols[key];\n if (symbol === undefined) {\n var r = new Rule("{{" + key + "}}");\n\n r.error = "Missing symbol " + key;\n return r;\n }\n\n var rule = symbol.getRule();\n if (rule === undefined) {\n var r = new Rule("[" + key + "]");\n console.log(r.sections);\n r.error = "Symbol " + key + " has no rule";\n return r;\n }\n\n return rule;\n};\n\n//============================================================\n// Expansions\nGrammar.prototype.expand = function(raw) {\n\n // Start a new tree\n var root = new RootNode(this, raw);\n\n root.expand();\n\n return root;\n};\n\nGrammar.prototype.flatten = function(raw) {\n\n // Start a new tree\n var root = new RootNode(this, raw);\n\n root.expand();\n\n return root.childText;\n};\n\n//===============\n\nGrammar.prototype.analyze = function() {\n this.symbolNames = [];\n for (var name in this.symbols) {\n if (this.symbols.hasOwnProperty(name)) {\n this.symbolNames.push(name);\n }\n }\n\n // parse every rule\n\n for (var i = 0; i < this.symbolNames.length; i++) {\n var key = this.symbolNames[i];\n var symbol = this.symbols[key];\n // parse all\n for (var j = 0; j < symbol.baseRules.length; j++) {\n var rule = symbol.baseRules[j];\n rule.parsed = tracery.parse(rule.raw);\n // console.log(rule);\n\n }\n }\n\n};\n\nGrammar.prototype.selectSymbol = function(key) {\n console.log(this);\n var symbol = this.get(key);\n};\n/**\n * @author Kate Compton\n\n */\n\ntracery.createGrammar = function(obj) {\n var grammar = new Grammar();\n grammar.loadFrom(obj);\n return grammar;\n};\n\ntracery.test = function() {\n\n console.log("==========================================");\n console.log("test tracery");\n\n // good\n tracery.testParse("", false);\n tracery.testParse("fooo", false);\n tracery.testParse("####", false);\n tracery.testParse("#[]#[]##", false);\n tracery.testParse("#someSymbol# and #someOtherSymbol#", false);\n tracery.testParse("#someOtherSymbol.cap.pluralize#", false);\n tracery.testParse("#[#do some things#]symbol.mod[someotherthings[and a function]]#", false);\n tracery.testParse("#[fxn][fxn][fxn[subfxn]]symbol[[fxn]]#", false);\n tracery.testParse("#[fxn][#fxn#][fxn[#subfxn#]]symbol[[fxn]]#", false);\n tracery.testParse("#hero# ate some #color# #animal.s#", false);\n tracery.testParseTag("[action]symbol.mod1.mod2[postAction]", false);\n\n // bad\n tracery.testParse("#someSymbol# and #someOtherSymbol", true);\n tracery.testParse("#[fxn][fxn][fxn[subfxn]]symbol[fxn]]#", true);\n\n // bad\n tracery.testParseTag("stuff[action]symbol.mod1.mod2[postAction]", true);\n tracery.testParseTag("[action]symbol.mod1.mod2[postAction]stuff", true);\n\n tracery.testParse("#hero# ate some #color# #animal.s#", true);\n tracery.testParse("#[#setPronouns#][#setOccupation#][hero:#name#]story#", true);\n\n};\n \n})();
jquery:on\nhash:off\nbookmark:off\nmodernizr:off\nundo:off\nobfuscate:off\nexitprompt:off\nblankcss:off\n
a\ne\nx\nxx\nzz\nz\npoo\noo\nzoo\ngloo\neeri\neer\niir\niix\npii\nwoo\nwii\nzoo\nzii\nizz\niizz\nz'z'\nx'x'\nk'k'\nk'x'\nk'z'\nplop\nclop\nfloo\nbroo
do\nx\nz\ni\nb\nn\nq\nw\neeee\ne\nee\npp\np\nz\nx\nxx\nzz\npunk\nlunk\nplunk\narp\nglarp\nzlarp\nxlarp\nxolp\nzolp\nqolp\nplanck
Doo\nWoo\nZoo\nVi\nLoo\nX'x'\nX'\nZ'\nIik\nOot\nBr'\nVr'\nLurr\nZurr\nJu\nJurr\nZop\nZoop\nZoot\nXoot\nXoop\nCroop
Mumbai\nAbu Dhabi\nCasablanca\nJohannesburg\nRio\nVancouver\nGreenwich\nLondon\nMarseilles
squirming\nwrithing\nslithering\nsquealing\nhissing\ndripping\nquivering\ngelatinous\nundulating\nhorn-sprouting\nclaw-covered\nravenous\nscreaming\nhowling
hive-diver\ncrust-burrower\ninfestron\ncorruptron\nhive-planter\ncrust-cracker\ncontinent-buster\ncontenent-smasher\ncrust-smasher\nhive-starter\ncrust-invader
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 6>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 6>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 6>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 6>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 6>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
larval-stage\nhypervelvet\nlumicrowned\ngold-coffined\nwithered\ncloned\ntank-bred
<<set $warscore += 4>>You ask the hair-watchers for help. They send you a gigantic space-pistol milled from the arm-bone of one of their living god's stillborn young. Uh, wow. Nice?
six-armed\nblue\ngalactically-renowned\nholographic
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;font-family:'baloo_tammaregular';line-height:110%;NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
The Galactic Snub:\nby [[Laura Michet|http://www.lauramichet.com]]\nfor [[Fermi Jam|https://itch.io/jam/fermi-paradox-jam]]\nin September 2016\nin Los Angeles\n\nDownload this game at [[itch.io|https://lauramichet.itch.io/the-galactic-snub]]\n\nMusic and alien cocktail lounge sounds composed for this story by [[Travis Ford DeCastro.|http://edwinmols.bandcamp.com/]]\n\nBell toll sound by [[juskiddink|http://freesound.org/people/juskiddink/sounds/74920/]]\nEngine hum sound by [[kaboose102|https://www.freesound.org/people/kaboose102/sounds/340258/]]\nSound and replace macros by [[Leon Arnott|https://www.glorioustrainwrecks.com/user/584]]\nText randomization achieved with [[Twinecery|http://twinecery.juegos/]] by [[Matthew Balousek.|https://twitter.com/mrfb]] Twincery is a Twine port of Tracery by [[Kate Compton.|http://www.galaxykate.com/]] Everyone should use Tracery and Twinecery in everything, as far as I am concerned.\n\n[[back|5]]
Houston\nAustin\nMinneapolis\nPortland (Oregon)\nEugene\nPortland (Maine)\nBoston\nTallahassee\nNashville
<<set $warscore += 3>>You ask your extremely choosy, pollution-hating alien friends for help. They send you a few ships that run entirely on galactic breeze-power. They've got extremely deadly, extremely //low-emissions// laser weaponry!
gathered\nassembled\npartying\nconvocating
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
Laura Michet
#description#\n#description#
Story.prototype.appendJSON = function() {\n\tvar JSONtoAppend = tale.lookup("tags", "JSON");\n\tif(!JSONtoAppend.length) return;\n\n\tfor(i in JSONtoAppend){\n\t\tvar newJSON = JSON.parse(JSONtoAppend[i].text);\n\t\t$.extend(this.data, newJSON);\n\t}\n\tconsole.log("appended");\n}\n\nfunction Story(){\n\tvar grammars = tale.lookup("tags", "grammar", "title");\n\tthis.data = {};\n\n\tfor(var i in grammars){\n\t\tif(grammars[i] == undefined) continue;\n\t\t// Passage names become grammar names, Passage text becomes grammar text. \n\t\tthis.data[grammars[i].title] = grammars[i].text.split('\sn');\n\t}\n\n\tthis.appendJSON();\n\n\tconsole.log("Story: ", this);\n}\nStory.prototype.constructor = Story;\n\n// Append this to the tale object because I don't know where else to put it.\nTale.prototype.story = new Story();\n\nStory.prototype.toHTML = function() {\n\tvar output = [];\n\tvar tab = " ";\n\tvar beg = '\sn' + tab + "\s"<span class=\s"grammarContents\s">{{{"\n\tvar end = "}}}</span>\s""\n\n\tfor(var i in this.data){\n\t\tvar gram = "<span class=\s"grammarTitle\s">\s"" + i + "\s"</span>: [";\n\t\tgram += beg + this.data[i].join(end + ',' + beg) + end;\n\t\tgram += "]";\n\t\toutput.push(gram);\n\t}\n\treturn "{\sn" + output.join(",\sn") + "\sn}";\n}\n\nTale.prototype.JSONtoTwee = function() {\n\tvar JSONtoConvert = tale.lookup("tags", "JSON");\n\tvar combinedJSON = ""\n\n\tfor (var i in JSONtoConvert){\n\t\tcombinedJSON += JSONtoConvert[i].text;\n\t}\n\n\t// Note the {{{}}} delimiters in textPost. This is intended for display in Twine, so\n\t// if you're just running these raw they aren't necessary.\n\tvar regex = {titlesPre: /\st"(.+)": \s[/g, titlesPost: "<br>:: $1 [grammar]",\n\t\t\t\t textPre: /\st*"(.+)",*(?:\sn\st)?(?:\s],)*\sn/g, textPost: "{{{$1}}}<br>"}\n\n\tvar tweeOutput = combinedJSON.replace(regex.titlesPre, regex.titlesPost);\n\ttweeOutput = tweeOutput.replace(regex.textPre, regex.textPost);\n\ttweeOutput = tweeOutput.replace(/({\sn)|(]\sn})/g, "")\n\n\treturn tweeOutput;\n}
You needle the dishevelled consul of the <<trace "alienname">> until they snap back with an explanation.\n\n"Do you have any idea //how expensive// a first contact mission is??"\n\n"look. First, you gotta send the ship there. Right? That's like, half a GDP right there, for us. And then you gotta crew the ship. But you gotta crew it redundantly, because it's a long-ass trip, so //that's// expensive. And you're not just sending the equipment for the trip, you're sending stuff to trade, and like a whole armory and a half in case the newbies turn out to be angry you've showed up, so that's one hell of an expensive trip, right?"\n\n"And becuase it's //first contact// you have to pay for various galactic ethics reviews and policy reviews and you have to justify the whole thing at a council meeting. And the council only meets every twenty-five of your years, okay, so just imagine how inconvenient it is if you get rejected the first time! Imagine all the money and crap you gotta spend lobbying the councilmembers!"\n\n"Anyway, buddy, what I'm saying is that it's the //height// of arrogance to assume that //any// midclass C through M planet is gonna have the resources or even //inclination// to want to reach out and make first contact with a bunch of punks like you, okay? Do you understand??"\n\n[[Forgive|a7f]]\n[[Don't forgive|a7df]]
baron\n#baronadj#-baron\nduke\n#baronadj#-duke\nplanetary governor\n#baronadj#-governor\ngeneral\nadmiral\nprimarch\n#baronadj#-primarch\nduchess\n#baronadj#-duchess\nbaroness\n#baronadj#-baroness\n
<<begin>>
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 3>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 3>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 3>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 3>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 3>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
vassal\nvassal planet\nsubjugated territory\n#ruledadj# #planetnoun#\ngiant parking lot
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 4>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 4>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 4>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 4>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 4>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;font-family:'baloo_tammaregular';line-height:110%;NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
@font-face {\n font-family: 'baloo_tammaregular';\n src: url('balootamma-regular-webfont.woff2') format('woff2'),\n url('balootamma-regular-webfont.woff') format('woff');\n font-weight: normal;\n font-style: normal;\n\n}\n\nbody {\n margin: 3% 0 3% 0;\n background-color:#1A597B;\n}\n#passages {\n padding: 0;\n border: 0;\n text-align:center;\n margin-left:0;\n text-color:#a9b9dc\n}\n.passage {\n display: inline-block;\n width: 60%;\n min-height:40%;\n padding: 0em;\n font-size: 2em\n}\n#sidebar {\n display:none;\n}\na.internalLink, a.externalLink {\n color:#A9E6BC;\n}\na.internalLink:hover, a.externalLink:hover {\n color:#A9E6BC;\n text-decoration:none;\n}\n\n.customdisplay{text-align:center;}\n\nbody[data-tags~=title] {text-align:center;!important}\n\na.internalLink, a.externalLink[data-tags~=title] {\n color:#A9E6BC;\n}\n\nimg {\n height: auto;\n width: auto\s9; /* ie8 */\n\tdisplay: block;\n\tmargin-left: auto;\n margin-right: auto;\n}\n\n#linkbar {\n margin-left: auto;\n margin-right: auto;\n margin-bottom: auto;\n align:center;\n text-align: center;\n}
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
You leave your small vessel in one the fractal parking-hives. \n\nNobody stops you. The entire Galactic Hub is filled with crowds of <<trace "aliendescription">>, <<trace "aliendescription2">> aliens crawling all over each other and honking and yammering. You go wandering through the parking bay, and nobody even //notices// you.\n\nYou soon find yourself in an ambassador's reception on one of the fancier party-decks. //Here they are:// the aliens that left humanity to wallow in low-tech misery for thousands of years. The movers and shakers who //never even bothered to say hi.//\n\n[[It's time for some answers.|hub]]
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;font-family:'baloo_tammaregular';line-height:110%;NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
v.2015-05-30
twinecery checks for Twine passages tagged "grammar", then splits them based on newlines and turns them into a Tracery object. Run traces with <<trace>> or <<trace "someSymbol">>. You can also link to a trace as a passage by itself with [[trace]] or [[trace][$symbol = "someSymbol"]]. If no symbol is specified, it defaults to "origin".
The battle rages in the skies above Earth for six hours. Exploding spaceships light up the sky above <<trace "cityname">>. The sun is blocked by ash. Flaming chunks of space-vessel rain into the oceans. <<trace "cityname3">> is breifly occupied by robot soldiers.\n\nBut Earth's military might is much greater and grander than your enemies expected! By the time it's over, they are slinking away in defeat, and the galactic news-nets are filled with talking heads shrieking about the universe's newest, most dangerous rogue nation.\n\n[[Hint: it's Earth.|successending2]]
<<set $day += 1>><<if $day < 6>><<if $sound is true>><<loopsound "party.mp3">><<endif>><<trace "description">>\n\n<<endif>><<chooseevents>>
The battle rages in the skies above Earth for just under two hours-- but millions of lives are lost.\n\nFlaming sections of space-vessel rain down over <<trace "cityname">> and <<trace "cityname2">>. A warp-drive lands in a <<trace "cityname3">> suburb. It detonates, immediately <<trace "vaporizingverb">> a <<trace "deathtolladj">> people. Antarctica cracks in two. A <<trace "squirmingadj">> <<trace "invadernoun">> buries itself in the Amazon jungle and begins converting tree-carbon to self-replicating cylo-drones.\n\nBy the time it's over, Earth has been totally wrecked in every conceivable way.\n\n[[Shit.|failureending2]]
(function(){version.extensions.replaceMacrosCombined={major:1,minor:1,revision:5};var nullobj={handler:function(){}};\nfunction showVer(n,notrans){if(!n){return}n.innerHTML="";new Wikifier(n,n.tweecode);n.setAttribute("data-enabled","true");\nn.style.display="inline";n.classList.remove("revision-span-out");if(!notrans){n.classList.add("revision-span-in");\nif(n.timeout){clearTimeout(n.timeout)}n.timeout=setTimeout(function(){n.classList.remove("revision-span-in");\nn=null},1)}}function hideVer(n,notrans){if(!n){return}n.setAttribute("data-enabled","false");n.classList.remove("revision-span-in");\nif(n.timeout){clearTimeout(n.timeout)}if(!notrans){n.classList.add("revision-span-out");n.timeout=setTimeout(function(){if(n.getAttribute("data-enabled")=="false"){n.classList.remove("revision-span-out");\nn.style.display="none";n.innerHTML=""}n=null},1000)}else{n.style.display="none";n.innerHTML="";n=null\n}}function tagcontents(b,starttags,desttags,endtags,k){var l=0,c="",tg,a,i;function tagfound(i,e,endtag){for(var j=0;\nj<e.length;j++){if(a.indexOf("<<"+e[j]+(endtag?">>":""),i)==i){return e[j]}}}a=b.source.slice(k);for(i=0;\ni<a.length;i++){if(tg=tagfound(i,starttags)){l++}else{if((tg=tagfound(i,desttags,true))&&l==0){b.nextMatch=k+i+tg.length+4;\nreturn[c,tg]}else{if(tg=tagfound(i,endtags,true)){l--;if(l<0){return null}}}}c+=a.charAt(i)}return null\n}var begintags=[];var endtags=[];function revisionSpanHandler(g,e,f,b){var k=b.source.indexOf(">>",b.matchStart)+2,vsns=[],vtype=e,flen=f.length,becomes,c,cn,m,h,vsn;\nfunction mkspan(vtype){h=insertElement(m,"span",null,"revision-span "+vtype);h.setAttribute("data-enabled",false);\nh.style.display="none";h.tweecode="";return h}if(this.shorthand&&flen){while(f.length>0){vsns.push([f.shift(),(this.flavour=="insert"?"gains":"becomes")])\n}}else{if(this.flavour=="insert"||(this.flavour=="continue"&&this.trigger=="time")){vsns.push(["","becomes"])\n}}if(this.flavour=="continue"&&flen){b.nextMatch=k+b.source.slice(k).length;vsns.push([b.source.slice(k),vtype])\n}else{becomes=["becomes","gains"];c=tagcontents(b,begintags,becomes.concat(endtags),endtags,k);if(c&&endtags.indexOf(c[1])==-1){while(c){vsns.push(c);\nc=tagcontents(b,begintags,becomes,endtags,b.nextMatch)}c=tagcontents(b,begintags,["end"+e],endtags,b.nextMatch)\n}if(!c){throwError(g,"can't find matching end"+e);return}vsns.push(c);if(this.flavour=="continue"){k=b.nextMatch;\nb.nextMatch=k+b.source.slice(k).length;vsns.push([b.source.slice(k),""])}}if(this.flavour=="remove"){vsns.push(["","becomes"])\n}cn=0;m=insertElement(g,"span",null,e);m.setAttribute("data-flavour",this.flavour);h=mkspan("initial");\nvsn=vsns.shift();h.tweecode=vsn[0];showVer(h,true);while(vsns.length>0){if(vsn){vtype=vsn[1]}vsn=vsns.shift();\nh=mkspan(vtype);h.tweecode=vsn[0]}if(typeof this.setup=="function"){this.setup(m,g,f)}}function quantity(m){return(m.children.length-1)+(m.getAttribute("data-flavour")=="remove")\n}function revisionSetup(m,g,f){m.className+=" "+f[0].replace(" ","_")}function keySetup(m,g,f){var key=f[0];\nm.setEventListener("keydown",function l(e){var done=!revise("revise",m);if(done){m.removeEventListener("keydown",l)\n}})}function timeSetup(m,g,f){function cssTimeUnit(s){if(typeof s=="string"){if(s.slice(-2).toLowerCase()=="ms"){return Number(s.slice(0,-2))||0\n}else{if(s.slice(-1).toLowerCase()=="s"){return Number(s.slice(0,-1))*1000||0}}}throwError(g,s+" isn't a CSS time unit");\nreturn 0}var tm=cssTimeUnit(f[0]);setTimeout(function timefn(){var done=!revise("revise",m);if(!done){setTimeout(timefn,tm)\n}},tm)}function hoverSetup(m){var fn,noMouseEnter=(document.head.onmouseenter!==null),m1=m.children[0],m2=m.children[1],gains=m2.className.indexOf("gains")>-1;\nif(!m1||!m2){return}m1.onmouseenter=function(e){var efp=document.elementFromPoint(e.clientX,e.clientY);\nwhile(efp&&efp!==this){efp=efp.parentNode}if(!efp){return}if(this.getAttribute("data-enabled")!="false"){revise("revise",this.parentNode)\n}};m2.onmouseleave=function(e){var efp=document.elementFromPoint(e.clientX,e.clientY);while(efp&&efp!==this){efp=efp.parentNode\n}if(efp){return}if(this.getAttribute("data-enabled")!="false"){revise("revert",this.parentNode)}};if(gains){m1.onmouseleave=m2.onmouseleave\n}if(noMouseEnter){fn=function(n){return function(e){if(!event.relatedTarget||(event.relatedTarget!=this&&!(this.compareDocumentPosition(event.relatedTarget)&Node.DOCUMENT_POSITION_CONTAINED_BY))){this[n]()\n}}};m1.onmouseover=fn("onmouseenter");m2.onmouseout=fn("onmouseleave");if(gains){m1.onmouseout=m2.onmouseout\n}}m=null}function mouseSetup(m){var evt=(document.head.onmouseenter===null?"onmouseenter":"onmouseover");\nm[evt]=function(){var done=!revise("revise",this);if(done){this[evt]=null}};m=null}function linkSetup(m,g,f){var l=Wikifier.createInternalLink(),p=m.parentNode;\nl.className="internalLink replaceLink";p.insertBefore(l,m);l.insertBefore(m,null);l.onclick=function(){var p,done=false;\nif(m&&m.parentNode==this){done=!revise("revise",m);scrollWindowTo(m)}if(done){this.parentNode.insertBefore(m,this);\nthis.parentNode.removeChild(this)}};l=null}function visitedSetup(m,g,f){var i,done,shv=state.history[0].variables,os="once seen",d=(m.firstChild&&(this.flavour=="insert"?m.firstChild.nextSibling:m.firstChild).tweecode);\nshv[os]=shv[os]||{};if(d&&!shv[os].hasOwnProperty(d)){shv[os][d]=1}else{for(i=shv[os][d];i>0&&!done;i--){done=!revise("revise",m,true)\n}if(shv[os].hasOwnProperty(d)){shv[os][d]+=1}}}[{name:"insert",flavour:"insert",trigger:"link",setup:linkSetup},{name:"timedinsert",flavour:"insert",trigger:"time",setup:timeSetup},{name:"insertion",flavour:"insert",trigger:"revisemacro",setup:revisionSetup},{name:"later",flavour:"insert",trigger:"visited",setup:visitedSetup},{name:"keyinsert",flavour:"insert",trigger:"key",setup:keySetup},{name:"replace",flavour:"replace",trigger:"link",setup:linkSetup},{name:"timedreplace",flavour:"replace",trigger:"time",setup:timeSetup},{name:"mousereplace",flavour:"replace",trigger:"mouse",setup:mouseSetup},{name:"hoverreplace",flavour:"replace",trigger:"hover",setup:hoverSetup},{name:"revision",flavour:"replace",trigger:"revisemacro",setup:revisionSetup},{name:"keyreplace",flavour:"replace",trigger:"key",setup:keySetup},{name:"timedremove",flavour:"remove",trigger:"time",setup:timeSetup},{name:"mouseremove",flavour:"remove",trigger:"mouse",setup:mouseSetup},{name:"hoverremove",flavour:"remove",trigger:"hover",setup:hoverSetup},{name:"removal",flavour:"remove",trigger:"revisemacro",setup:revisionSetup},{name:"once",flavour:"remove",trigger:"visited",setup:visitedSetup},{name:"keyremove",flavour:"remove",trigger:"key",setup:keySetup},{name:"continue",flavour:"continue",trigger:"link",setup:linkSetup},{name:"timedcontinue",flavour:"continue",trigger:"time",setup:timeSetup},{name:"mousecontinue",flavour:"continue",trigger:"mouse",setup:mouseSetup},{name:"keycontinue",flavour:"continue",trigger:"key",setup:keySetup},{name:"cycle",flavour:"cycle",trigger:"revisemacro",setup:revisionSetup},{name:"mousecycle",flavour:"cycle",trigger:"mouse",setup:mouseSetup},{name:"timedcycle",flavour:"cycle",trigger:"time",setup:timeSetup},{name:"keycycle",flavour:"replace",trigger:"key",setup:keySetup}].forEach(function(e){e.handler=revisionSpanHandler;\ne.shorthand=(["link","mouse","hover"].indexOf(e.trigger)>-1);macros[e.name]=e;macros["end"+e.name]=nullobj;\nbegintags.push(e.name);endtags.push("end"+e.name)});function insideDepartingSpan(elem){var r=elem.parentNode;\nwhile(!r.classList.contains("passage")){if(r.classList.contains("revision-span-out")){return true}r=r.parentNode\n}}function reviseAll(rt,rname){var rall=document.querySelectorAll(".passage [data-flavour]."+rname),ret=false;\nfor(var i=0;i<rall.length;i++){if(!insideDepartingSpan(rall[i])){ret=revise(rt,rall[i])||ret}}return ret\n}function revise(rt,r,notrans){var ind2,curr,next,ind=-1,rev=(rt=="revert"),rnd=(rt.indexOf("random")>-1),fl=r.getAttribute("data-flavour"),rc=r.childNodes,cyc=(fl=="cycle"),rcl=rc.length-1;\nfunction doToGainerSpans(n,fn){for(var k=n-1;k>=0;k--){if(rc[k+1].classList.contains("gains")){fn(rc[k],notrans)\n}else{break}}}for(var k=0;k<=rcl;k++){if(rc[k].getAttribute("data-enabled")=="true"){ind=k}}if(rev){ind-=1\n}curr=(ind>=0?rc[ind]:(cyc?rc[rcl]:null));ind2=ind;if(rnd){ind2=(ind+(Math.floor(Math.random()*rcl)))%rcl\n}next=((ind2<rcl)?rc[ind2+1]:(cyc?rc[0]:null));var docurr=(rev?showVer:hideVer);var donext=(rev?hideVer:showVer);\nvar currfn=function(){if(!(next&&next.classList.contains("gains"))||rnd){docurr(curr,notrans);doToGainerSpans(ind,docurr,notrans)\n}};var nextfn=function(){donext(next,notrans);if(rnd){doToGainerSpans(ind2+1,donext,notrans)}};if(!rev){currfn();\nnextfn()}else{nextfn();currfn()}return(cyc?true:(rev?(ind>0):(ind2<rcl-1)))}macros.revert=macros.revise=macros.randomise=macros.randomize={handler:function(a,b,c){var l,rev,rname;\nfunction disableLink(l){l.style.display="none"}function enableLink(l){l.style.display="inline"}function updateLink(l){if(l.className.indexOf("random")>-1){enableLink(l);\nreturn}var rall=document.querySelectorAll(".passage [data-flavour]."+rname),cannext,canprev,i,ind,r,fl;\nfor(i=0;i<rall.length;i++){r=rall[i],fl=r.getAttribute("data-flavour");if(insideDepartingSpan(r)){continue\n}if(fl=="cycle"){cannext=canprev=true}else{if(r.firstChild.getAttribute("data-enabled")==!1+""){canprev=true\n}if(r.lastChild.getAttribute("data-enabled")==!1+""){cannext=true}}}var can=(l.classList.contains("revert")?canprev:cannext);\n(can?enableLink:disableLink)(l)}function toggleText(w){w.classList.toggle(rl+"Enabled");w.classList.toggle(rl+"Disabled");\nw.style.display=((w.style.display=="none")?"inline":"none")}var rl="reviseLink";if(c.length<2){throwError(a,b+" macro needs 2 parameters");\nreturn}rname=c.shift().replace(" ","_");l=Wikifier.createInternalLink(a,null);l.className="internalLink "+rl+" "+rl+"_"+rname+" "+b;\nvar v="";var end=false;var out=false;if(c.length>1&&c[0][0]=="$"){v=c[0].slice(1);c.shift()}switch(c[c.length-1]){case"end":end=true;\nc.pop();break;case"out":out=true;c.pop();break}var h=state.history[0].variables;for(var i=0;i<c.length;\ni++){var on=(i==Math.max(c.indexOf(h[v]),0));var d=insertElement(null,"span",null,rl+((on)?"En":"Dis")+"abled");\nif(on){h[v]=c[i];l.setAttribute("data-cycle",i)}else{d.style.display="none"}insertText(d,c[i]);l.appendChild(d)\n}l.onclick=function(){reviseAll(b,rname);var t=this.childNodes,u=this.getAttribute("data-cycle")-0,m=t.length,n,lall,i;\nif((end||out)&&u>=m-(end?2:1)){if(end){n=this.removeChild(t[u+1]||t[u]);n.className=rl+"End";n.style.display="inline";\nthis.parentNode.replaceChild(n,this)}else{this.parentNode.removeChild(this);return}}else{toggleText(t[u]);\nu=(u+1)%m;if(v){h[v]=c[u]}toggleText(t[u]);this.setAttribute("data-cycle",u)}lall=document.getElementsByClassName(rl+"_"+rname);\nfor(i=0;i<lall.length;i++){updateLink(lall[i])}};disableLink(l);setTimeout((function(l){return function(){updateLink(l)\n}}(l)),1);l=null}};macros.mouserevise=macros.hoverrevise={handler:function(a,b,c,d){var endtags=["end"+b],evt=(window.onmouseenter===null?"onmouseenter":"onmouseover"),t=tagcontents(d,[b],endtags,endtags,d.source.indexOf(">>",d.matchStart)+2);\nif(t){var rname=c[0].replace(" ","_"),h=insertElement(a,"span",null,"hoverrevise hoverrevise_"+rname),f=function(){var done=!reviseAll("revise",rname);\nif(b!="hoverrevise"&&done){this[evt]=null}};new Wikifier(h,t[0]);if(b=="hoverrevise"){h.onmouseover=f;\nh.onmouseout=function(){reviseAll("revert",rname)}}else{h[evt]=f}h=null}}};macros.instantrevise={handler:function(a,b,c,d){reviseAll("revise",c[0].replace(" ","_"))\n}};macros.endmouserevise=nullobj;macros.endhoverrevise=nullobj}());\n
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;font-family:'baloo_tammaregular';line-height:110%;NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
You're #so# embarassed.\nThis is mortifying.\nThis is #so# embarassing.\nYou're so frustrated.\nYou're #so# frustrated.\nYou're not sure what to do.\nYou're not sure what the ettiquite rules are around here.\nYou feel like you're not wanted here.\nYou're clearly not welcome here.
You've won, but none of your diplomatic problems are solved, and this is no time to celebrate.\n\nYour allies are criticized for their involvement in this messy crisis. They immediately abandon you. When the next struggle comes, you won't be so lucky.\n\nBut-- //Earth breathes free for another day!// And in the end, that's all that matters. Congratulations, ambassador.\n\n[[These space-dwelling muckety-mucks won't be snubbing you again.|fin]]
<<set $warscore += 6>>You ask your corporate allies for help fighting off your attackers. They send you six mile-long crates of pure gold, a dozen <<trace "shipadj">> capital ships, and two moon-sized battlestations. Uh, nice.
Nobody wants to look you in the eye.\nEveryone pretends like you're not there.\nSeveral aliens mistake you for a waiter.\nNobody seems to care who you are.\nNobody includes you in a conversation.\nEveryone continues to ignore you.\nSome aliens mistake you for a protestor and command you to leave.
You irritate the <<trace "alienname">> representative until they give you their gelatinous attention.\n\n"Honestly? We just don't like the looks of you. You remind us of a kind of abcessed growth we often get on our genitals during our non-mating sterile seasons. Your ears do, anyway."\n\n"Who wants to look at an abcess all day long? Who wants to //talk// to an abcess? I'm talking to an abcess right now and I feel terrible. Do you hang out with your own abcesses? I thought not."\n\n[[Forgive|a14f]]\n[[Don't forgive|a14df]]
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 5>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 5>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 5>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 5>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 5>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
<<stopallsound>><<loopsound "party.mp3">>FIN\n\nThe Galactic Snub:\nby [[Laura Michet|http://www.lauramichet.com]]\nfor [[Fermi Jam|https://itch.io/jam/fermi-paradox-jam]]\nin September 2016\nin Los Angeles\n\nDownload this game at [[itch.io|https://lauramichet.itch.io/the-galactic-snub]]\n\nMusic and alien cocktail lounge sounds composed for this story by [[Travis Ford DeCastro.|http://edwinmols.bandcamp.com/]]\n\nBell toll sound by [[juskiddink|http://freesound.org/people/juskiddink/sounds/74920/]]\nEngine hum sound by [[kaboose102|https://www.freesound.org/people/kaboose102/sounds/340258/]]\nSound and replace macros by [[Leon Arnott|https://www.glorioustrainwrecks.com/user/584]]\nText randomization achieved with [[Twinecery|http://twinecery.juegos/]] by [[Matthew Balousek.|https://twitter.com/mrfb]] Twincery is a Twine port of Tracery by [[Kate Compton.|http://www.galaxykate.com/]] Everyone should use Tracery and Twinecery in everything, as far as I am concerned.\n\n[[restart?|begin]]
<<set $warscore += 3>>You appeal to the High Brul'ikk Ancient Forefathers Lineage Senate-Congress for assistance. They send a troupe of ancient dance-warriors in golden ritual clothing. They were trained entirely by ancient tank-mummies in a pyramid carved from pure obsidian. Nice.
<<set $warscore += 8>>Earth hesitantly calls up its abcess-hating acquaintences. They send you an entire fleet of capital ships just to get you to go away.
freighter\ncruise vessel\nracer\nstunt\ndartship\nspectrovibe
food\n#alienfoodadj# food\ncompany\nconversation\nown tendrils\nconvo bots\ncompanion bots\ncompanion clones\nfellow-ambassadors\nholo-reflections
Moscow\nParis\nNew York City\nBerlin\nTokyo\nBeijing\nShanghai\nHong Kong\nWashington, DC\nLos Angeles\nRome
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 11>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 11>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 11>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 11>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 11>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
You follow the pallid, serene ambassador of the <<trace "alienname">> around the room until they give you an explanation.\n\n"We were washing our hair."\n\n"I'm sorry, did I say 'washing'? I meant we were //watching// the hair. It has to be watched very closely. It's the hair of our living god, who is larger than our planet, actually, and occasionally interposes itself between us and the sun, if we aren't careful and don't watch the hair. The last time that happened, we had a dark sunless age that lasted for six generations, and nintey percent of all species on the surface died."\n\n"What I'm saying is, we were very busy."\n\n[[Forgive|a13f]]\n[[Don't forgive|a13df]]
<<set $warscore += 1>>You beg your postapocalyptic friends for armaments, and they lend you a couple rusty old SAM nuke-launchers. Given your buddies' history with poorly-placed nukes, though, Earth's military is not eager to actually //use// any of these weapons.
Such is life, probably.\nHumanity is lost in the tides of history; no one remembers your civilization at all.\nHumanity is quickly forgotten by the rest of the galactic community.\nAnother uppity space-people swept under the galactic rug.\nAnother sad story from the galactic military-industrial-spacetrafficlaw compex.\nAhhh! What a tragedy.\nTragic! Tragic, and probably unavoidable. Definitely not your fault.
#royaladj# royals\nheirs\n#pilotshipnoun# pilots\ncorporate primos\n#operaadj# opera singers
<<set $warscore += 3>>You bother your extremely practical friends for all the help they can afford. They send you a few platoons of decently-trained soliders and a itemized invoice. Hmm! Okay.
<<set $warscore += 2>>You ask your diseased allies for help. They send several ships full of first-aid supplies and innoculants against various galactic plagues. Helpful! Not exactly what you were hoping for, but helpful nonetheless.
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 13>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 13>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 13>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 13>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 13>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
scabbed\nshaggy\nhoofed\nhyper-clawed\nslimetusked\ntentacled\nviscous
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 1>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 1>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 1>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 1>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 1>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;font-family:'baloo_tammaregular';line-height:110%;FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
mining planet\nmanufacturing planet\ngraveyard planet\nprison planet
"heavily curfewed"\nsubjugated\npoor\nwasteland\ndeserted
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 14>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 14>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 14>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 14>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 14>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
After achieving global piece, a post-scarcity society, and embarking on years of joint international development, we finally created it:\n\nThe SPECTROVIBE DRIVE-- a future-age hypertechnology that renders matter down into its constituent rainbows, blasts it screaming across the black lack of space...\n\n[[...and deposits it whole on the other side.|3]]
//Laura Michet presents://\n\n@@font-size:300%;font-family:'baloo_tammaregular';line-height: 110%;[[THE GALACTIC SNUB|6]]@@\n\n[[about]]\n\n<<revision sound>>Sound is ON.<<becomes>>Sound is OFF.<<endrevision>> <<revision sound>><<revise sound "Turn sound OFF?">><<becomes>><<revert sound "Turn sound ON?">><<endrevision>><<revision sound>><<set $sound = true>><<becomes>><<set $sound = false>><<endrevision>>
{\n\t"characterA": [\n\t\t"Alex",\n\t\t"Alexander",\n\t\t"Alexandra"\n\t],\n\t"characterB": [\n\t\t"Sam",\n\t\t"Samantha",\n\t\t"Samuel"\n\t],\n\t"characterC": [\n\t\t"Agave von Seitan, Lord-Governor of Soya"\n\t]\n}
You ask your soap-opera-hating friends for help. They refuse; they've seen those Nazi transmissions, they remind you, and they're not yet ready to put weapons in your hands. Damn!
<<set $warscore += 1>>You ask your earth-infiltrating, Stanford-attending alien friends for help-- and they send you numerous crates of cold-war-era weaponry they stole in the 1970s. Uh-- okay! That will be helpful if the battle ends up going door-to-door on Earth, maybe. Maybe.
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
<<trace "alienname">>\n\n\n\n[[Forgive|a15f]]\n[[Don't forgive|a15df]]
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
<<StoryInit>><<stopallsound>>For centuries, humans thought we were alone in the universe. We believed the heavens were some kind of barren, lifeless //space-desert.//\n\n[[How wrong-- how wrong we were!|1]]
garbage\n#trashadj# trash\ntrash\n#trashadj# trash\nworthless\na waste of time\na #trashadj# waste of time
You corner the <<trace "alienname">> representative behind the drinks fountain and tell them they better have a good excuse for their behavior.\n\n"Sorry. We had a good reason! We really did."\n\n"What was it? To be honest, it's a little private."\n\n"Seriously, you want to know? Well, we don't want to tell you. It's not polite-- it's-- it's-- okay. The truth is, we had a pretty bad disease. We had-- uh-- neuro-nasal botiwaxil. Epidemic levels. For over 500 years. Look, we said it was embarassing, all right?"\n\n"Can //you// catch it? Honestly, I don't know, but that's not the point. You ever seen someone with a botiwaxil infection? Your knee glands-- well, I won't trouble you with the details, but it's nasty stuff."\n\n[[Forgive|a11f]]\n[[Don't forgive|a11df]]
You start demanding an explanation from the <<trace "alienname">> ambassador. They give you a wry smile.\n\n"Well, we WERE going to visit Earth, and then we got those Nazi transmissions. You know, the 1936 Olympics? The Nazi Olympics."\n\n"Oh, don't look so surprised. We know //all about// you folks. Which is why we didn't come. Mostly it was Nazis at first! But then it was the American media of the 1950s. We are not a fan of 50s soaps. Or //the entire mainstream popular media tradition derivative thereof.// I'm sure you understand."\n\n[[Forgive|a10f]]\n[[Don't forgive|a10df]]
<<if parameter(0)>><<set $symbol to parameter(0)>><<else>><<if $symbol>><<else>><<set $symbol to "origin">><<endif>><<endif>><<print console.log("trace " + $symbol)>><<print tale.grammar.flatten("#" + $symbol + "#")>><<forget $symbol>>
When you trap the <<trace "alienname">> representative in conversation at the hors d'oeuvres table, they reel out their best excuse.\n\n"Hey, we WERE on Earth! We were all over earth! Our global Prime Minister went to business school at Stanford!"\n\n"Why didn't we go public? Look, you wouldn't have //wanted// us to. Think how distruptive it would have been! The shock, the new rules, the natural paranoia that always follows-- we saved you a lot of hassle, honestly. Life post-contact is waaaaay more complicated. Ignorance really is bliss!"\n\n"And, to be fair, it was a good deal for us, too. We got all the sweet benefits of vacationing on Earth as presumed humans-- and the high quality of Earth's secondary-school education-- but we suffered none of the restrictions or diplomatic burdens of dealing with you as a foreign power! It was a good setup, while it lasted! Can you blame us?"\n\n[[Forgive|a12f]]\n[[Don't forgive|a12df]]
<<set $warscore += 1>>Earth asks your giggling space-friends for help. They send a few handymen in a shuttle. (You're not sure they understood the transmission.)
crawling\nslime-trailing\nflourescent\nbioluminescent\nbe-fanged\nsilicate\nrock-shelled\nlarval\negg-swollen
<<set $warscore +2>>Your blue space-energy friends contribute some illusory warfrigates. Unfortunately, they, like their pilots, are made only of blue space energy.
You badger the <<trace "alienname">>'s representative into giving you an explanation for their behavior.\n\n"You know what? I DID try to visit Earth. But I got there and you guys didn't have any place to park in the upper atmosphere. How am I supposed to visit a planet that doesn't even have, like, a station with a SINGLE landing bay? Huh??"\n\n"You know what, it's your guys' fault. Don't come bitching to me about not getting visited or invited or whatever if you don't even have a damn space station or like a visitor's center or whatever."\n\n[[Forgive|a1f]]\n[[Don't forgive|a1df]]
You manage to catch the attention of the <<trace "alienname">> representative. They flicker at you hesitantly.\n\n"Hey... sorry about that. We were extremely busy. Like... //as a species,// we spent the last 20,000 years in a state of hibernation meditation, attaining "blue space-energy" status. It took a lot of time. You understand, right?"\n\n[[Forgive|a0f]]\n[[Don't forgive|a0df]]
You manage to catch the attention of a wild-eyed <<trace "alienname">> ambassador.\n\n"Oh... sorry... I don't know. I think we were just really really distracted?"\n\n"Hey, you want any Gillruvian crystalfruit? You want some of this? It's great. I swear. Really, //really// geluciferous buzz. We're the number-one Gillfruit producers in the Yuilly sector. You interested in buying? It's better than the shit they grow on goddamn Gillruvia itself, I swear. We did a whole global economy revamp to get on the Gillfruit wagon and it's seriously paying off now that the neighbors are hooked. Look. Look how clear this stuff is!"\n\n"You want a taste? Seriously, take the edge off that grudge vibe you got. Try it!"\n\n[[Forgive|a3f]]\n[[Don't forgive|a3df]]
You corner the harried ambassador of the <<trace "alienname">> and force them to account for their behavior.\n\n"Earth? Huh? What's //that// place? Who lives there?"\n\n"Oh, //you?// Haha, sorry, but we've been living in a postapocalyptic recovery state for the last couple hundred years. We bombed ourselves a while ago and it's been just bunkers and canned food and dying of radiation sickness and, like, //cancer,// right, for a //long-//ass time, you know? We didn't even get back out into space until about eighty years ago."\n\n"You understand, right? I mean, you look like you guys went through some of that kind of shit yourselves. No offense."\n\n[[Forgive|a2f]]\n[[Don't forgive|a2df]]
You struggle to get the attention of the <<trace "alienname">>'s giggling ambassador.\n\n"Haha, whaaaaat? You're in space now? Whaaaaaaaat???? Whoooooooaaaaaattt?????"\n\n"You-- you're-- nice, yeah!! Who are you? Hee hee!! Okay!"\n\n"Wowwwwww!!!!!!! Nice! Nice job!! W-w-w-wwwwelcome to space!!! Right! Whaaaaaat???"\n\n"Space, right?? Whaaaaaaaaaaaaaaaatttt?????"\n\n[[Forgive|a5f]]\n[[Don't forgive|a5df]]
You pester the berobéd representative of the <<trace "alienname">>'s most powerful corporation until they give you an explanation.\n\n"Look. We're in six of the nine most powerful corporate alliances in the Quadra and Valence sectors. Over fifty percent of our population are on business trips at any given moment. Do you know how busy we are? Can you even guess?"\n\n"And also take a moment to think for a bit about how we'd look if we took time off from the Coprxxi Summit to hang out with a bunch of pre-stellar dirt-farmers on the other side of the galaxy. Nobody would take us seriously."\n\n"So, yeah. Be a little realistic, please."\n\n[[Forgive|a4f]]\n[[Don't forgive|a4df]]
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>><<set $forgivenum += 1>><<if $forgivenum is 1>><<set $forgiven1 = 2>><<else>><<if $forgivenum is 2>><<set $forgiven2 = 2>><<else>><<if $forgivenum is 3>><<set $forgiven3 = 2>><<else>><<if $forgivenum is 4>><<set $forgiven4 = 2>><<else>><<if $forgivenum is 5>><<set $forgiven5 = 2>><<endif>><<endif>><<endif>><<endif>><<endif>>@@font-size:100px;font-family:'baloo_tammaregular';line-height:110%;FORGIVEN@@\n\n[[It feels good to forgive.|hub]]
You pester the several representatives of the <<trace "alienname">> until they side-eye you from behind their pitchers of sparkling blood.\n\n"Are you guys in the High Brul'ikk Ancient Forefathers Lineage Senate-Congress?"\n\n"Well, then, there's your answer. Of course we weren't gonna visit you."\n\n[[Forgive|a6f]]\n[[Don't forgive|a6df]]
The primarchs of the <<trace "alienname">> turn up their bejewelled noses when you ask for an explanation.\n\n"Visit people like YOU? Are you serious? Your planet is so polluted I think I'd be excommunicated from my religion just for breathing your air."\n\n"You don't even serve negacarbon foods on your planet. And you still stoop to KILLING PLANTS FOR FOOD. What's your problem? Seriously, clean up your act before you expect to see people like us anywhere in your solar system!"\n\n[[Forgive|a9f]]\n[[Don't forgive|a9df]]
The gulping serf-captains of the <<trace "alienname">> are unusually disturbed by your questions.\n\n"You don't understand! Our vicelairds told us that we'd be in serious, serious trouble if we talked to anyone outside the Turmaloone Syndicate. Even pre-stellar sentients!!"\n\n"And we'll be in trouble if they see us now! Please go away."\n\n[[Forgive|a8f]]\n[[Don't forgive|a8df]]
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
<<if $sound is true>><<pausesound "party.mp3">><<endif>><<if $sound is true>><<playsound "bell.wav" >><<endif>>@@font-size:100px;line-height:110%;font-family:'baloo_tammaregular';NOT FORGIVEN@@\n\n[[They don't deserve it.|hub]]
synthesized\nlive\nbleeding\nholographic\nnega-carbon\nacid-baked\nsilicate
look\nstare\nside-eye\nblink\nwince\nfrown\nglare\nignore
so\nso\nso so\nincredibly\npretty\nvery\nquite\ndefinitely\nunbelievably
You ask your serf-alien contacts for help. They refuse to send anything but a letter begging you not to contact them in front of their vicelairds ever again.
Empire\nConcordance\nPrimarchy\nAlliance\nKleptocracy\nCorporation\nFundament\nCompact\nUnion\nHive\nUr-Mind\nNetwork\nStrain
(function () {\n "use strict";\n version.extensions['soundMacros'] = {\n major: 1,\n minor: 1,\n revision: 2\n };\n var p = macros['playsound'] = {\n soundtracks: {},\n handler: function (a, b, c, d) {\n var loop = function (m) {\n if (m.loop == undefined) {\n m.loopfn = function () {\n this.play();\n };\n m.addEventListener('ended', m.loopfn, 0);\n } else m.loop = true;\n m.play();\n };\n var s = eval(d.fullArgs());\n if (s) {\n s = s.toString();\n var m = this.soundtracks[s.slice(0, s.lastIndexOf("."))];\n if (m) {\n if (b == "playsound") {\n m.play();\n } else if (b == "loopsound") {\n loop(m);\n } else if (b == "pausesound") {\n m.pause();\n } else if (b == "unloopsound") {\n if (m.loop != undefined) {\n m.loop = false;\n } else if (m.loopfn) {\n m.removeEventListener('ended', m.loopfn);\n delete m.loopfn;\n }\n } else if (b == "stopsound") {\n m.pause();\n m.currentTime = 0;\n } else if (b == "fadeoutsound" || b == "fadeinsound") {\n if (m.interval) clearInterval(m.interval);\n if (b == "fadeinsound") {\n if (m.currentTime>0) return;\n m.volume = 0;\n loop(m);\n } else {\n if (!m.currentTime) return;\n m.play();\n }\n var v = m.volume;\n m.interval = setInterval(function () {\n v = Math.min(1, Math.max(0, v + 0.005 * (b == "fadeinsound" ? 1 : -1)));\n m.volume = Math.easeInOut(v);\n if (v == 0 || v == 1) clearInterval(m.interval);\n if (v == 0) {\n m.pause();\n m.currentTime = 0;\n m.volume = 1;\n }\n }, 10);\n }\n }\n }\n }\n }\n macros['fadeinsound'] = p;\n macros['fadeoutsound'] = p;\n macros['unloopsound'] = p;\n macros['loopsound'] = p;\n macros['pausesound'] = p;\n macros['stopsound'] = p;\n macros['stopallsound'] = {\n handler: function () {\n var s = macros.playsound.soundtracks;\n for (var j in s) {\n\t\tif (s.hasOwnProperty(j)) {\n s[j].pause();\n if (s[j].currentTime) {\n\t\t s[j].currentTime = 0;\n\t\t }\n\t\t}\n }\n }\n }\n var div = document.getElementById("storeArea").firstChild;\n var fe = ["ogg", "mp3", "wav", "webm"];\n while (div) {\n var b = String.fromCharCode(92);\n var q = '"';\n var re = "['" + q + "]([^" + q + "']*?)" + b + ".(ogg|mp3|wav|webm)['" + q + "]";\n k(new RegExp(re, "gi"));\n div = div.nextSibling;\n }\n\n function k(c, e) {\n do {\n var d = c.exec(div.innerHTML);\n if (d) {\n var a = new Audio();\n if (a.canPlayType) {\n for (var i = -1; i < fe.length; i += 1) {\n if (i >= 0) d[2] = fe[i];\n if (a.canPlayType("audio/" + d[2])) break;\n }\n if (i < fe.length) {\n a.setAttribute("src", d[1] + "." + d[2]);\n a.interval = null;\n macros.playsound.soundtracks[d[1]] = a;\n } else console.log("Browser can't play '" + d[1] + "'");\n }\n }\n } while (d);\n }\n}());\n