Анабасис «Котов» [α]/%[β]%/
[[Вячеслав Добранов|http://cheshire.ifiction.ru/]]
<<set $timer = 0>>\n<<display 'ArcadeParkInit'>>\n<<display 'SitOnBikeInit'>>\n<<display 'Block14AInit'>>\n<<display 'RoomInit'>>\n<<set $loc = "ArcadePark">>
<hr>\n\t[[В Аркаде|Arcade]]\n\t[[На парковке|MainScreen][$loc="ArcadePark"]]\n\t[[Верхом на байке|MainScreen][$loc="SitOnBike"]]\n\t[[На улицах|ArcadeDrive]]\n\t[[В блоке 14-А|MainScreen][$loc="Block14A"]]\n\t<hr>\n\t<<print ($isMusicSeen ? "@@.music;[[Музыка|http://youtu.be/Ag6y6jz7bQQ]]@@" : "")>>
<<goto "Arcade">>
Akira\n\tThe Warriors|Анабасис («Море! Море!»)\n\tЗаводной апельсин\n\tГуси-гуси-га-га-га\n\tГенералы песчаных карьеров/Капитаны песка\n\tTekkon kinkurîto\n\tГород Бога\n\tGod speed you! Black emperor
Агент Белый\n\t«Море! Море!»\n\t«Вызывает планета Земля! На связи агент Белый! Приё-ё-ём!…»\n\tКоктейль Молотова\n\tСестрички\n\tИнфорсар-Эс-Икс\n\tЧёрный Император\n\tБосодзоку
/%Аркада\n\tМотоциклы\n\t\tУ гг переделанный полицейский\n\t\tУ Перо жёлтый\n\t\tУ Мяча чёрный\n\t\tУ Замысла ратбайк\n\tПоездка через город\n\t\tВид на Порт и море. Кладбище кораблей до демаркационной линии на юге\n\t\tЮВКЗ и Промышленный сектор — районы Порта%/\n\tВстреча с Бандой Девяти Улиц\n\t\tИскры от арматурного прута, цепь с замком на конце\n\tВыезд на хайвей\n\t\tВетряные фермы\n\t\tЗиккураты корпоративных суверенитетов\n\tЗасада\n\tСтарый город\n\tТоннель\n\t\tСтруна поперёк тоннеля\n\tГород Сокровищ\n\tМост\n\t\tДвухуровневый, с нижним уровнем, занятым сквотерами.\n\t\tРжавчина, хлопья краски, оборванные тросы.\n\t\tБлок-пост ЧВК на выезде.\n\tПорт
http://youtu.be/Ag6y6jz7bQQ African Burundi Drum Music\n\thttp://youtu.be/zcUuWetbC8U Berklee Orchestral Snare Duo, "War Drum Peace Drum"
Фаер: \n\tХрен его знает, что такое «анабасис», но вероятно что-то крутое. Чешир обленился. Прислал на конкурс альфу, которая не тянет даже на демку твайна. Без единой загадки. Текст традиционно хорош, но хороший текст ещё не игра. Чешир, садись, два.\n\n\tОлегус:\n\tМногословно. "Продолжение следует" встретил чуть ли не с облегчением, а ведь я только на байк сел… Не игра. Увы.\n\n\tКорвин:\n\tВячеслав, это просто колоссально!\n\tОформление, стиль, личности, текст - на 5+!
''В Аркаде''\n\tДа, в общем, сидели мы в нашем обычном заведении в Юго-Восточной Коммерческой Зоне, которое называлось <<more "«Аркада Дядюшки Ли»" "LeeArcade">>, то есть сидели, конечно, не в самом зале с автоматами, а в <<more "задних комнатах" "Backrooms">>, доступ в которые получали либо те, у кого были деньги, либо те, кто ходил под «Котами».\n\tМы — то есть я, <<more "Перо" "Feather">>, <<more "Мячик" "Ball">>, <<more "Замысел" "Plan">> и ещё пара-тройка ребят — собственно, и были этими «Котами», поэтому проводили там всё своё свободное время. В обмен Дядюшка Ли мог не опасаться за свои автоматы и светящие до самого неба вывески.\n\tДень вышел на редкость скучным, вечер продолжил в том же духе и ночь не обещала изменений. Замысел спал, распластавшись по продавленному дивану и не обращая никакого внимания на грохот из зала, Мяч опять ел — его «антибактериальные» палочки мерзко жужжали из-за траченных батареек — и наблюдал как мы с Пером играем в <<more "кости" "Dices">>.<span id="more"></span>\n\n\t[[>> Далее|ArcadeAli]]
''• «Аркада Дядюшки Ли»''\n\tОсобенность заведения была в том, что вместо нормальных будок со всей причитающейся в них сетевой требухой зал был заставлен старинными игровыми автоматами пятидесятилетней давности, с экранами, внешним управлением, звуком. Седая дикость, но народу почему-то нравилось, и людей всегда было битком. Огни пылали всеми цветами, лазерные лучи крутились в вечно накуренном воздухе, грохот стоял такой, что слышно было за квартал. Культовое заведение было, погуще многих храмов.
''• Задние комнаты''\n\tПодсобные помещения в «Аркаде Дядюшки Ли» — это отдельная история. Площадью эти комнаты, коридоры, склады были поболе основного зала и приходили туда клиенты другой масти. Дело в том, что лицензия на торговлю спиртным у Дядюшки отсутствовала, но против того, чтобы подмешивать в старый добрый чай кое-что из новейших высокомолекулярных добавок, закона до сих пор не было, и можно было пить его с дримкором, «Джеком-хохотуном», китоцетом-17 и прочими штучками, название которым ещё не придумали. Эта сторона заведения пользовалась не меньшим успехом у клиентуры.\n\tВпрочем, несмотря на то, что мы организовали штаб посреди этого притона, на употребление «чая» «Котами» было наложено табу. Нарушители изгонялись из банды навсегда.
''• Перо''\n\tЭтого так все звали, потому что он то и дело вплетал себе в волосы по несколько перьев, говорил, дескать, в предках у него какие-то там племена то ли из Африки, то ли из Америки, и это помогало ему быть в единстве с их духами. Ну понятно, насмотрелся обучающих — удручающих — видео про дикарей, в приюте их часто показывали. Это нормально, у таких как мы, сирот-беспризорников, часто сдвигает на эти темы. Бог, предки, родители, семья и тому подобное.\n\tВ приюте мы с ним, собственно, и познакомились, из-за перьев этих его в первый раз и подрались. Я, понятное дело, навалил ему, но не сразу. Он хоть и мелкий, но злобный как чёрт.
''• Мяч''\n\tМячику, конечно, всегда хотелось, чтобы его называли Меч, это ведь так круто. Он рассказывал какую-то невероятную историю — сам, наверное, и придумал — про то, что когда-то у него был настоящий меч и он умеет им пользоваться. Да вот кто-то из соцслужбы, когда его поймали, меч себе заныкал. Бла-бла-бла.\n\tЕстественно, раз он сам такой круглый, то вместо Меча его тут же окрестили Мячом. Первое время злился, конечно, но ничего, потом свыкся. И, кстати, арматуриной лучше него никто не махал, факт.
''• Замысел''\n\tЗамысел — это, вообще-то, сокращённо. Полностью его звали Божий Замысел и это не шутка, у него в идентификаторе так и было занесено, мы проверяли. Просто мамаша у него была закинутая на этой теме. Всё время проводила в подключении к паре десятков проповедческих каналов. А когда забеременела двумя близнецами, решила назвать их Божий Замысел и Божий Промысел. Сказано — сделано. Один из братьев, правда, помер через пару часов, другому повезло меньше. В конце концов, Замысел сбежал от своей <<hint "окасан" "мамаши">>, как только ему стукнуло четырнадцать и он получил право на собственные деньги.\n\tЗамысел, кстати, был единственным из нас «легальным». Имел идентификатор, талоны на соцпитание, официальную скидку на лекарства и прочие доступные гражданину радости.
''• Кости''\n\tОбычный Атараси-Рити на 136 костей с джокерами. Место двух недостающих игроков занимал примитивный ИскИн, потому что Мяч играл отвратительно, а на двоих играть было нельзя. Судя по еле заметному мерцанию голограмм Перо отчаянно мухлевал с исполняемым кодом игры. Но меня это мало беспокоило, потому что я мухлевал ещё отчаяннее.
''В Аркаде''\n\tИ только я собирался сказать «Мячик, дорогой, будь добр, убери от моего лица свои зудящие палочки, пока я не нашёл им менее безобидное применение», как дверь распахнулась, увеличив громкость шума от автоматов на пару десятков децибел (Замысел, что характерно, не проснулся), в неё вскочил мелкий <<more "Али" "Ali">> и затараторил на той дикой языковой смеси из кантонского китайского, хинди, урду, вкраплений английского, эмигрантского японского и обазиатченного русского, которую могли понимать лишь те, кто вырос в границах <<more "Промышленного Сектора" "IndustrialSectorInfo">>. Ну то есть мы.<span id="more"></span>\n\n\t[[>> Далее|ArcadeNews]]
''• Али''\n\tСмуглый, щуплый пацанёнок из армии тех малолетних беспризорников, которые не попались ещё в клешни учебно-исправительной системы и шныряли по сырым переулкам всего Порта, промышляя мелким воровством. Слишком ненадёжные, чтобы поручать что-то серьёзное, но тем не менее отличные соглядатаи и посыльные. Опекал их обычно Перо, и у него была целая сеть таких вот звоночков на каждом углу.
''• Промышленный Сектор''\n\tТы спрашиваешь, что шпана из Промышленного Сектора делала в Юго-Восточной Коммерческой Зоне? Карабкалась по лестнице жизни наверх, конечно!
''В Аркаде''\n\tЗа каких-то пятнадцать секунд Али успел рассказать, что в блоке 14-А — на нашей территории! — объявились клоуны из Банды Девяти Улиц и принялись громить витрины и машины, по пути вопя «Мочи „Котов“!» в мегафоны. Уже пострадали несколько прохожих и одному из наших спалили байк.\n\t— Что?! — вскочил с дивана моментально очнувшийся Замысел. — Какого хрена они делают?! Мы же договорились не лезть друг к другу!\n\t— Али, — строго спросил своего подопечного Перо. — Это точно «девятки»? Вы ничего не напутали? Кто сообщил?\n\tПацанёнок быстро-быстро затряс головой и выдал скороговоркой:\n\t— Точно, <<hint "сахиб" "господин">>! Лебедь видела цифры на касках и чёрный трайк с огненной девяткой!\n\t— Ого, сам верховный клоун заявился, — пряча палочки во внутренний карман, откомментировал Мяч. — Что скажешь, Кайзер?\n\tЭто он, собственно, мне. Ну а что тут ещё сказать?\n\t\n\t[[Коты, на охоту!|MainScreen]]
<<display "MahBikeInit">>\n\t<<display "FeatherBikeInit">>\n\t<<display "PlanBikeInit">>\n\t<<display "BallBikeInit">>\n\t<<display "XenoPhemInit">>\n\t<<display "AjaxInit">>\n\t<<display "MantisInit">>\n\t<<display "BulletTakashiInit">>\n\t<<set $ArcadeParkName = "На парковке за Аркадой">>\n\t<<set $ArcadeParkTimer = 0>>\n\t<<set $ArcadeParkActions = []>>\n\t<<set $ArcadeParkEvents = ["Было ветрено и по переулку носились крошечные мусорные смерчи."]>>
<<set $ArcadeParkTimer++>>
<<print ($ArcadeParkTimer == 0 ? "Всей толпой под гиканье и свист мы высыпали на парковку за Аркадой прямо в" : "На улице стоял")>> прохладный августовский вечер.<br>\n\tНаши байки — <<exam "мой" "MahBike">>, <<exam "Пера" "FeatherBike">>, <<exam "Замысла" "PlanBike">> и <<exam "Мяча" "BallBike">> — стояли отдельно от других, на собственных местах.<br>\n\tКроме моих лейтенантов к своим байкам бросились ещё несколько наших ребят: два рыжих <<exam "брата" "XenoPhem">> с непроизносимыми именами (Ксенофонт и Фемистоген), весельчак <<exam "Аякс" "Ajax">>, тощий, нескладный <<exam "Богомол" "Mantis">>, и <<exam "Буллит с Такаси" "BulletTakashi">>. На пути в 14-А должны были присоединиться другие.
<<print ($ArcadeParkEvents[$ArcadeParkTimer] ? "<br>"+$ArcadeParkEvents[$ArcadeParkTimer]+"<br>" : "")>>
<<set $MahBikeName = "Мой байк">>\n\t<<set $MahBikeActions = ["Сесть на свой байк", "->SitOnBike"]>>\n\t<<set $MahBikeAfter = 1>>
Мой сине-белый красавец, в прошлом — полицейский «Инфорсара», изуродованный во время уличных беспорядков двухлетней давности. Я восстанавливал его сам, попутно заменяя какие-то узлы на более подходящие мне: сменил испорченные дорогущие аккумуляторы на конденсаторы, установил более объёмную пневмокамеру от другой модели, поставил керамические тормоза, поснимал всю тяжёлую пассивную защиту и, самое главное, перепрошил «мозги» собственной, кустарной прошивкой. Как результат — самая мощная и выносливая машина из всех, что мне приходилось встречать.\n\tК стойке за сидением был прикреплен штырь с голограммой флага: чёрным ощерившимся котом на красном фоне. Флаг увеличивался в длину, когда повышалась скорость, и на достаточно ровных участках за мной тянулся шикарный красно-чёрный шлейф.
<<approveAct "->SitOnBike">>
<<set $FeatherBikeName = "Байк Пера">>
Перо катал небольшой байк, очень быстрый и манёвренный, полностью, от колёс до стойки за сиденьем, выкрашенный голокраской — когда Перо включал байк, по его поверхности ползли жёлтые и чёрные орнаментные полосы. Ночью смотрелось просто отпадно. И девчонки слетались как мотыльки на огонь.
<<set $PlanBikeName = "Байк Замысла">>
Свой байк Замысел собирал сам. От самого крошечного винтика до самой распоследней запятой в программе контроллера. Он это делал долго и мучительно, несколько раз едва не разбивался на тестовых обкатках, раз шесть «официально» завершал постройку, потом опять вносил какие-то только ему ведомые изменения, и в результате получил страшного, ржавого монстра, который беспрекословно слушался хозяина и ни разу того не подводил.
<<set $BallBikeName = "Байк Мяча">>
Машиной Мяча был большой матово-чёрный квадроцикл с движком от такого же «Инфорсара», как у меня. Дьявольски мощный и, хотя скоростью не отличался, проезжал там, куда не каждый робо-вездеход решался сунуться.
<<set $XenoPhemName = "Братья Ксено и Фем">>
Полными именами их никто не звал, лишь Ксено и Фем. Они делили один на двоих мотоцикл: Фем был за рулём, а Ксено сидел за ним и в случае чего неплохо управлялся с дубинкой.
<<set $AjaxName = "Аякс">>
Невысокий, кряжистый Аякс всегда много болтал и часто смеялся своей широкой, сильно щербатой улыбкой. Ездил на старом байке Пера.
<<set $MantisName = "Богомол">>
Флегматичный Богомол был молчалив, носил толстые очки на широком ремне и обожал всё, что имело режущую кромку. Катал на древней развалюхе с допотопными электродвигателями.
<<set $BulletTakashiName = "Буллит и Такаси">>
У двух неразлучных друзей Буллита и Такаси предки, наверное, были из последней волны японских беженцев, поэтому они отличались характерной внешностью, чрезмерной жестокостью и любовью к маленьким, юрким байкам кислотной окраски.
<<display "ScreenInit">>\n\t<<display "SwitchesInit">>\n\t<<display "HelmetInit">>\n\t<<set $SitOnBikeName = "Верхом на байке">>\n\t<<set $SitOnBikeTimer = 0>>\n\t<<set $SitOnBikeActions = []>>\n\t<<set $SitOnBikeEvents = ["Чуть впереди Перо вскочил на свой байк и в следующее же мгновение донёсся гул его двигателя. Вспыхнул и заструился жёлто-чёрный орнамент окраски.", "Сзади раздался треск электрического разряда, а затем хохот Аякса — у богомолова байка опять пробило обмотку на переднем колесе.", "«Али! — окликнул глазеющего пацана Перо. — Передай своим, пусть сегодня держатся подальше от центральных улиц. Сидите дома!» Тот кивнул и припустил вниз по переулку.", "Буллит с Такаси выехали на середину парковки и закружили на небольшом пятачке, сужая радиус и всё увеличивая скорость."]>>
<<set $SitOnBikeTimer++>>
<<print ($SitOnBikeTimer == 0 ? "Я запрыгнул в удобный зев сидения и, потянув, опустил перед собой панель с рукоятками руля" : "Я сидел в своём байке, упершись ногами в асфальт и сжимая рукоятки руля")>>.<br>\n\tНа панели, по сторонам от прямоугольника <<exam "монитора" "Screen">> <<print ($isBikeStarted ? "светились" : "тянулись")>> два ряда <<exam "клавиш" "Switches">>. Изогнутый щиток ветрового стекла <<print ($isBikeStarted ? "мерцал системой навигации" : "был полностью непрозрачным")>>. <<print ($isHelmetOn ? "" : "Сзади, на магнитном захвате в поднимающейся над сидением стойке висел <<exam 'шлем' 'Helmet'>>.")>>\n\t<<print ($SitOnBikeTimer == 0 ? "<br>Я покачал байк из стороны в сторону, проверяя подвеску на посторонние звуки, пока не мешал шум двигателя. Всё было нормально." : "")>>
<<if $SitOnBikeChange neq $SitOnBikeTimer>>\n\t\t<<set $SitOnBikeChange = $SitOnBikeTimer>>\n\t\t<<if $isBikeStarted and $isHelmetOn>>\n\t\t\t<<addAct "SitOnBike" "Поехали!" ":ArcadeDrive">>\n\t\t<<endif>>\n\t\t<<if $SitOnBikeTimer % 2 == 0 and $SitOnBikeEvents.length >= 1>>\n\t\t\t<<set $rand = random($SitOnBikeEvents.length-1)>>\n\t\t\t<<set $SitOnBikeEvent = "<br>"+$SitOnBikeEvents[$rand]+"<br>">>\n\t\t\t<<set $SitOnBikeEvents.splice($rand,1)>>\n\t\t<<elseif $SitOnBikeTimer % 2 == 0 and $isBikeStarted and $isHelmetOn and $SitOnBikeTimer > 6>>\n\t\t\t<<set $SitOnBikeEvent = "<br>В наушниках раздался голос "+either("Замысла","Пера","Мяча")+": «Ну что, Кайзер, погнали, может, уже?»<br>">>\n\t\t<<else>>\n\t\t\t<<set $SitOnBikeEvent = "">>\n\t\t<<endif>>\n\t<<endif>>\n\t<<print $SitOnBikeEvent>>
<<set $ScreenName = "Монитор на панели">>
Монитор, на который выводилась различная информация: состояние систем байка, видеопоток с камеры заднего вида, связь, навигация и прочее, прочее. <<print ($isBikeStarted ? "Сейчас он показывал картинку с камеры заднего вида" : "Но сейчас он ничего не показывал — байк был выключен")>>.
<<set $SwitchesName = "Клавиши">>\n\t<<set $SwitchesActions = ["Запустить байк", "SwitchesTurnItOn", "Пощёлкать по другим клавишам", "SwitchesClicking"]>>\n\t<<set $SwitchesAfter = 1>>
Эти кнопки контролировали всевозможные системы байка: информацию, которая выводилась на монитор, ветровое стекло или визор шлема, настройку беспроводной связи, свет фары, режимы работы двигателя, голограмму флага и тому подобное.<<print ($isBikeStarted ? "" : " Среди них так же была клавиша, замыкавшая электроцепь для запуска байка.")>>
<<set $SwitchesTurnItOnDesc = "Я клацнул по бордовой кнопке на панели и зверь подо мной отозвался нарастающим гулом. По мути ветрового стекла разбежались янтарные прожилки, делая его прозрачным. Включилась подсветка клавиш, ожил монитор — на его чернильной поверхности замелькали страницы самодиагностики, а потом и запрос на пароль. Я исполнил над ним несколько сложных пассов, окончательно разблокировав машину, и байк зарычал, прочищая систему выхлопа. Зажглась передняя фара, выхватив из вечерних сумерек стену Аркады в пятнах сложносочинённого граффити">>\n\t<<set $isBikeStarted = 1>>\n\t<<if $isHelmetOn>>\n\t\t<<set $SwitchesTurnItOnDesc = $SwitchesTurnItOnDesc+", я опустил светящийся изнутри визор шлема.<br><br>Всё, теперь я готов был выезжать.">>\n\t<<else>>\n\t\t<<set $SwitchesTurnItOnDesc = $SwitchesTurnItOnDesc+".">>\n\t<<endif>>\n\t<<removeAct "SitOnBike" "SwitchesTurnItOn">>
<<if $isBikeStarted>>\n\t\t<<if $isSwitchesChecked>>\n\t\t\t<<set $SwitchesClickingDesc = "Я ещё раз прогнал необходимый минимум тестов. Всё работало как часы.">>\n\t\t<<else>>\n\t\t\t<<set $SwitchesClickingDesc = "Я переключил вывод картинки заднего вида с монитора на щиток ветрового стекла и обратно, проверил сигнал связи, быстро прощёлкал между разными режимами работы двигателя. Всё работало как часы.">>\n\t\t\t<<set $isSwitchesChecked = 1>>\n\t\t<<endif>>\n\t<<else>>\n\t\t<<set $SwitchesClickingDesc = "Я понажимал наугад несколько клавиш, но безрезультатно — байк всё ещё был выключен.">>\n\t<<endif>>
<<approveAct "SwitchesTurnItOn">>\n\t<<set $SwitchesActions[$SwitchesActions.indexOf("SwitchesClicking")-1] = "Пощёлкать по клавишам">>
<<set $HelmetName = "Шлем">>\n\t<<set $HelmetActions = ["Надеть шлем", "HelmetTakeOn"]>>\n\t<<set $HelmetAfter = 1>>
Ещё одна незаменимая в нашей жизни штука. Шлем был лёгкий, очень прочный — прилетевшая однажды в него труба оставила лишь безобидные царапины на краске — и набит электроникой. Опущенный визор, глухой снаружи и с экранами внутри, показывал картинку с внешних камер и любую информацию, переданную байком, через байк же поддерживалась связь. Сверху на шлеме торчали кошачьи уши, а спереди была вырезана морда белого котяры. Глаза его светились красным и впечатление оставляли устрашающее. Классная вещь.
<<set $HelmetTakeOnDesc = "Я снял шлем с магнитного захвата и, крутанув в руках, надел">>\n\t<<if $isBikeStarted>>\n\t\t<<set $HelmetTakeOnDesc = $HelmetTakeOnDesc+": в наушниках раздался секундный писк подключения к системам байка. И когда я опустил визор, у меня перед глазами расцвело изображение с внешних камер, покрытое росписью аугментированных данных.<br><br>Всё, теперь я готов был выезжать.">>\n\t<<else>>\n\t\t<<set $HelmetTakeOnDesc = $HelmetTakeOnDesc+". Байк ещё не был включен, поэтому электронная начинка шлема пока бездействовала.">>\n\t<<endif>>\n\t<<set $isHelmetOn = 1>>\n\t<<set $isHelmetHidden = 1>>\n\t<<removeAct "SitOnBike" "HelmetTakeOn">>
<<approveAct "HelmetTakeOn">>
''На улицах''\n\t«Стая, на выезд!» — скомандовал я через канал связи и крутанул ручку газа. По парковке заметался визг покрышек и мы выкатили на улицу, омытую разноцветными огнями Аркады. Прохожие на замусоренных тротуарах, оборачивались и показывали пальцами, немногочисленные водители предпочитали уступить дорогу.\n\t«Даёшь барабаны!» — раздался на канале голос Замысла и остальные поддержали его одобрительными возгласами. Я усмехнулся, ткнул одну из клавиш, и сделал несколько движений над экраном. Эфир немедленно наполнился теми особенными @@.music;[[ритмичными звуками|http://youtu.be/Ag6y6jz7bQQ]]@@, от которых хотелось либо танцевать, либо драться. Чувствуя прилив адреналина, я выкрутил ручку газа до упора и по сторонам замелькали перекрёстки.\n\n\t[[>> Далее|RoadToFight]]\n\t<<set $isMusicOn = 1; $isMusicSeen = 1>>
''На улицах''\n\tПо мере нашего продвижения, к нам подтягивались остальные члены банды и вскоре нас уже были десятки. Мы яркой волной хаоса неслись по расступающимся перед нами улицам. Мы были кочевниками в краях земледельцев, хищной первобытной рыбиной в сонных, пресных водах. И искали равных себе.\n\tМы проехали по оживлённым улицам Юго-Восточной Коммерческой Зоны и через давно сгоревший КПП въехали в <<more "Северо-Восточую" "Turf">>, взобрались на холмы — в узком уличном просвете между небоскрёбами блеснул вечерним огнём океан с чёрными кранами <<more "Порта" "Port">> — и влетели в блок 14-А.<span id="more"></span>\n\n\t[[>> Далее|MainGoto][$goto="Block14A"]]
''• Порт''\n\tКогда-то это действительно был порт, один из самых больших в мире. Но сейчас из работающих остался лишь один терминал, да и тот не мог принимать большинство видов судов.\n\tТеперь вместо порта здесь начиналось крупнейшее кладбище кораблей — сотни огромных ржавых остовов усеивали плоский берег отсюда и до самой демаркационной линии на юге. Работа на верфях по разборке судов была очень опасной и плохо оплачивалась, но многие из живущих на улице не имели иного выбора.
''• Территория «Котов»''\n\tЮго-Восточная и Северо-Восточная Коммерческие Зоны, Порт и Промышленный Сектор были нашей территорией. Не самой богатой, но и далеко не самой бедной, и нам часто приходилось отстаивать своё право на неё перед конкурирующими бандами.
<<display "GraffitiInit">>\n\t<<display "FireteamInit">>\n\t<<display "BystandersInit">>\n\t<<set $Block14AName = "В блоке 14-А">>\n\t<<set $Block14ATimer = 0>>\n\t<<set $Block14AActions = ["Разослать разведчиков на соседние улицы", "Block14ASendScouts"]>>\n\t<<set $Block14AEvents = ["К Перу подбежали несколько местных ребятишек и стали восхищённо рассматривать струящийся по байку орнамент.", "Замысел с Богомолом обсуждали байк последнего. Прошло уже несколько минут, а Богомол всё перечислял технические проблемы.", "Кто-то из членов банды припарковался у тротуара и, разлёгшись на руле, флиртовал с парой хихикающих девчонок.", "Аякс отчаянно жестикулировал и о чём-то громко рассказывал. Собравшиеся вокруг него байкеры то и дело взрывались хохотом.", "На общем канале спорили о новых стеклокерамических вилках.", "Ксено и Фем курили одну на двоих сигарету."]>>\n\t<<set $Block14AWaitForScoutsArray = ["Прошло немного времени.", "Прошло ещё немного времени. Новостей от разведчиков не было.", "Постукивая пальцами по рулю, я слушал болтовню на общем канале. Время шло.", "Наконец, в наушниках прогудел голос Мяча:<br>\n\t— Кайзер, кажется кого-то поймали.<br>\n\t— Выводи на меня, — быстро ответил я.<br>\n\tИ после щелчка послышалось:<br>\n\t— Это Мика. Короче, мы тут встретили пару «девяток», у одного из них байк сломался, он пытался его чинить. Второй при виде нас <abbr title = 'сбежал'>джатканул</abbr> в переулок — Ямагата за ним там сейчас гоняется. Так вот, мы этого, со сломанным байком, немного помяли, и он с испугу выдал, что их шайка сейчас валит в Промышленный Сектор. Собираются и там почудить.<br>\n\t— Ясно, значит, в ПС. На вас эти двое. Хорошенько их проучите и выгоняйте с нашей территории, — и я отключил связь с Микой. Да что такое с этими «девятками»? Чего они взбеленились? Нужно найти их вожака, он должен за всё ответить."]>>\n\t<<set $Block14AEventsCount = -1>>
<<set $Block14ATimer++>>
Было сразу видно, где прошли «девятки» — тот тут, то там дымились залитые пеной останки машин, уродливые <<exam "граффити" "Graffiti">> кривлялись на стенах зданий, <<exam "пожарные" "Fireteam">> тушили небольшой ресторанчик — из его выбитых витрин валил густой чёрный дым. На тротуарах собралась <<exam "толпа зевак" "Bystanders">>, зароптавшая при нашем приближении.\n\t<<print ($Block14ATimer ? "" : "<br>Надо было срочно найти и наказать этих сволочей, нарушивших перемирие.")>>
<<if $Block14AEventsCount != -1>>\n\t\t<<print "<br>"+$Block14AEvents[$Block14AEventsCount]+"<br>">>\n\t\t<<set $Block14AEvents.splice($Block14AEventsCount, 1)>>\n\t<<endif>>
<<set $Block14ASendScoutsDesc = "Я переключился на общий канал и сказал:<br>\n\t— Внимание лейтенантам, отберите несколько людей, пусть проедутся по соседним улицам, проверят что там к чему. Нужно выяснить, где «девятки» сейчас.<br>\n\tЧерез полминуты шесть байков отделились от основной группы и разъехались в разные стороны.">>\n\t<<set $Block14AScoutsOut = $Block14ATimer>>\n\t<<removeAct "Block14A" "Block14ASendScouts">>\n\t<<addAct "Block14A" "Ждать вестей от разведчиков" "Block14AWaitForScouts">>
<<set $Block14AEventsCount = random($Block14AEvents.length-1)>>\n\t<<set $Block14AWaitForScoutsDesc = $Block14AWaitForScoutsArray[$Block14ATimer-$Block14AScoutsOut-1]>>\n\t<<if $Block14ATimer-$Block14AScoutsOut == 4>>\n\t\t<<removeAct "Bystanders" "BystandersAsk">>\n\t\t<<removeAct "Bystanders" "BystandersAskAgain">>\n\t\t<<removeAct "Bystanders" "BystandersLeave">>\n\t\t<<removeAct "Block14A" "Block14AWaitForScouts">>\n\t\t<<addAct "Block14A" "В Промышленный Сектор!" "->IndustrialSector">>\n\t<<endif>>
<<set $GraffitiName = "Граффити">>
Неумелые рисунки, нанесённые голокраской, в двух кадрах показывали похабные сценки с участием цифры девять и кое-как нарисованного кота.
<<set $FireteamName = "Пожарная команда">>
Двое пожарных с безопасного расстояния контроллировали засыпанного сажей робота, который тянул свои манипуляторы-раструбы в разбитые витрины ресторанчика. От робота тянулись толстые шланги, подключённые к ёмкостям с компонентами для пены.
<<set $BystandersName = "Зеваки">>\n\t<<set $BystandersActions = ["Расспросить зевак о «девятках»", "BystandersAsk"]>>
Просто прохожие и местные жители, собравшиеся поглазеть на редкое зрелище. Среди них выделялись несколько сильно грязных и растерянных человек в передниках — должно быть, работники ресторанчика.\n\t<<print ($isBystandersAsked ? "<br>Толпа гудела и советовала нам убираться из их района." : "")>>
<<set $BystandersAskDesc = "Я подкатил байк к поребрику, поднял визор шлема и крикнул в толпу:<br>\n\t— Эй, кто-нибудь видел, что произошло?<br>\n\tК краю проезжей части пробился сморщенный старикан и, потрясая кулаком, заскрипел:<br>\n\t— Вы посмотрите, он ещё и спрашивает! Проклятые байкеры, жизни от вас никакой нет! Гоняете на своих тарантайках, стёкла бьёте, машины жжёте, все стены измалевали!<br>\n\tВ толпе поднялся недовольный гул, кто-то кивал словам старикана, слышались выкрики «Шпана!», «Валите отсюда!» и прочие.">>\n\t<<set $isBystandersAsked = 1>>\n\t<<removeAct "Bystanders" "BystandersAsk">>\n\t<<addAct "Bystanders" "Попытаться ещё раз" "BystandersAskAgain">>\n\t<<addAct "Bystanders" "Плюнуть на это дело" "BystandersLeave">>
<<set $BystandersAskAgainDesc = "— Мы не имеем отношения к тому, что здесь сегодня произошло. Наоборот, мы хотим наказать того, кто это сделал. Спрашиваю ещё раз, кто-нибудь что-нибудь видел?<br>\n\tТолпа всё не унималась, но тут подошёл один из работников рестораничка и устало заговорил:<br>\n\t— Это были байкеры из Банды Девяти Улиц. Налетели как саранча, начали всё крушить и жечь. Когда хозяин стал на них кричать и прогонять, закидали помещение «зажигалками», хорошо, посетителей было немного, успели выбежать. Хозяина на скорой увезли. Я-то думал у вас с ними перемирие.<br>\n\t— Да, мы тоже так думали. Куда они уехали?<br>\n\tРаботник махнул на север:<br>\n\t— Укатили так же быстро, как приехали. Кто-то слышал, как они говорили о Промышленном Секторе, собирались и туда наведаться.<br>\n\t— Хорошо, спасибо, — кивнул я и, щёлкнув щитком шлема, отъехал от тротуара.">>\n\t<<removeAct "Bystanders" "BystandersAskAgain">>\n\t<<removeAct "Bystanders" "BystandersLeave">>\n\t<<removeAct "Block14A" "Block14ASendScouts">>\n\t<<removeAct "Block14A" "Block14AWaitForScouts">>\n\t<<addAct "Block14A" "В Промышленный Сектор!" "->IndustrialSector">>
<<set $BystandersLeaveDesc = "— В наше время мы себе такого не позволяли! — всё скрипел старикан.<br>\n\tЯ махнул на него рукой и, щёлкнув щитком шлема, отъехал от тротуара.">>\n\t<<removeAct "Bystanders" "BystandersAskAgain">>\n\t<<removeAct "Bystanders" "BystandersLeave">>
<<display 'WindowInit'>>\n\t<<set $RoomName = "Название комнаты">>\n\t<<set $RoomTimer = 0>>\n\t<<set $RoomActions = ["Осмотреть себя", "RoomExamineSelf", "Включить свет", "RoomTurnLightOn", "Ждать", "Look"]>>
<<set $RoomTimer++>>
Описание команты. Здесь есть <<print ($isWindowOpen ? "широко открытое " : "")>><<exam "окно" "Window">> и <<exam "байк" "MahBike">>.
<<print either("Где-то хлопнула дверь.", "За окном проехала машина.", "Пролетела муха.")>>\n\t<br>
<<set $RoomExamineSelfDesc = "Осматривание себя.">>\n\t<<set $RoomActions[$RoomActions.indexOf("RoomExamineSelf")-1] = "Осмотреть себя ещё раз">>
<<set $RoomTurnLightOnDesc = "Несмотря на солнце за окном свет теперь включён.">>\n\t<<removeAct "Room" "RoomTurnLightOn">>\n\t<<addAct "Room" "Выключить свет" "RoomTurnLightOff">>
<<set $RoomTurnLightOffDesc = "Свет выключается. В комнате ведь и так светло.">>\n\t<<removeAct "Room" "RoomTurnLightOff">>\n\t<<addAct "Room" "Включить свет" "RoomTurnLightOn">>
<<set $WindowName = "Большое окно">>\n\t<<set $WindowActions = ["Открыть окно", "WindowOpen"]>>\n\t<<set $WindowAfter = 1>>
<<if !($isWindowOpen)>>\n\t\tЗа окном прекрасный солнечный денёк.\n\t<<else>>\n\t\tЧерез открытое окно в комнату дует свежий ветер.\n\t<<endif>>
<<set $WindowOpenDesc = "Открываем окно.">>\n\t<<set $WindowName = "Большое открытое окно">>\n\t<<removeAct "Window" "WindowOpen">>\n\t<<addAct "Window" "Закрыть окно" "WindowClose">>\n\t<<set $isWindowOpen = 1>>
<<set $WindowCloseDesc = "Закрываем окно.">>\n\t<<set $WindowName = "Большое окно">>\n\t<<removeAct "Window" "WindowClose">>\n\t<<addAct "Window" "Открыть окно" "WindowOpen">>\n\t<<set $isWindowOpen = 0>>
<<approveAct "уааааа" "SwitchesTurnItOn">>\n\n\n\n/%\n\t\t # \n\t\t ##### \n\t\t ## # ## ## ## ## ## ## ## ## ## ## ## ## ## \n\t\t ## # ## ## ## ## ## ## ## ## ## ## ### ## ### \n\t\t ## # ## ## ## ####### ##### ## ## ## # ## ## # ## \n\t\t ##### ###### ## ## ## ## ## ## ### ## ### ## \n\t\t # ## ## ## ## ## ### ## ## ## ## ## \n\t\t ##### # \n%/\n\n/% сборка главного экрана %/
<<if $locact or $focusact>>\t\t\t\t\t\t\t\t\t\t/% если игрок выбрал действие (а не объект), срабатывает таймер и демон локации %/\n\t\t<<set $timer++>>\n\t\t<<print "<<display "+$loc+"Before>>">>\n\t<<endif>>\n\n\t<<if $locact == "Look" or $focusact == "Look">>\t\t\t\t\t/% если действие — осмотр локации, не выводить ничего, кроме самой локации %/\n\t\t<<set $focus = 0>>\n\t\t<<set $locact = 0>>\n\t\t<<set $focusact = 0>>\n\t<<endif>>\n\n\t<<if $locact>>\t\t\t\t\t\t\t\t\t\t\t\t\t/% обработка локального действия %/\n\t\t<<display $locact>>\n\t<<endif>>\n\t<<if $focusact>>\t\t\t\t\t\t\t\t\t\t\t\t/% обработка объектного действия %/\n\t\t<<display $focusact>>\n\t<<endif>>\n\n\t<<print "<<set $LocActions = $"+$loc+"Actions>>">>\t\t\t\t/% запоминание локальных действий %/\n\t<<if $focus>>\n\t\t<<print "<<set $FocusActions = $"+$focus+"Actions>>">>\t\t/% запоминание объектных действий (если есть) %/\n\t\t<<print "<<set $FocusAfter = $"+$focus+"After>>">>\t\t\t/% запоминание есть ли код, который нужно выполнить последним для объекта %/\n\t\t<<print "<<set $FocusHidden = $is"+$focus+"Hidden>>">>\t\t/% запоминание не спрятан ли объект %/\n\t<<endif>>\n\n\t''<<print "<<print $"+$loc+"Name>>">>''\t\t\t\t\t\t\t/% вывод имени локации %/\n\t<br>\n\t<<print "<<display "+$loc+"Description>>">>\t\t\t\t\t\t/% вывод описания локации %/\n\t<br>\n\t//<<print "<<display "+$loc+"After>>">>//\t\t\t\t\t\t/% вывод событий локации %/\n\t<br>\n\n\t<<if $locact>>\t\t\t\t\t\t\t\t\t\t\t\t\t/% вывод результатов локального действия %/\n\t\t''> <<print $locactName>>''\n\t\t<br>\n\t\t<<print "<<print $"+$locact+"Desc>>">>\n\t\t<br><br>\n\t\t<<set $focus = 0>>\n\t\t<<set $locact = 0>>\n\t\t<<set $focusact = 0>>\n\t<<endif>>\n\t<<if $focus and !($focusact)>>\t\t\t\t\t\t\t\t\t/% вывод данных объекта в фокусе %/\n\t\t''• <<print "<<print $"+$focus+"Name>>">>''\n\t\t<br>\n\t\t<<print "<<display "+$focus+"Description>>">>\n\t\t<br><br>\n\t<<elseif $focus and $focusact>>\t\t\t\t\t\t\t\t\t/% вывод результатов объектного действия %/\n\t\t''• <<print ($FocusHidden ? "<<print $"+$focus+"Name>>" : "[[$"+$focus+"Name|MainScreen]]")>> > <<print $focusactName>>''\n\t\t<br>\n\t\t<<print "<<print $"+$focusact+"Desc>>">>\n\t\t<br><br>\n\t\t<<set $focusact = 0>>\n\t<<endif>>\n\n\t<<if $focus and $FocusActions and $FocusActions.length>>\t\t/% вывод действий для объекта %/\n\t\t<<display FocusActionsLoop>>\n\t<<endif>>\n\t/%<hr>%/\n\t<<if $LocActions and $LocActions.length>>\t\t\t\t\t\t/% вывод действий в локации %/\n\t\t<<display LocActionsLoop>>\n\t<<endif>>\n\n\t<<if $FocusAfter and $focus>>\n\t\t<<print "<<display "+$focus+"After>>">>\t\t\t\t\t\t/% исполнение кода, который нужно выполнить последним для объекта %/\n\t<<endif>>\n\n/% цикл для вывода локальных действий %/
<<for $i = 0; $i < $LocActions.length/2; $i++>>\n\t\t<<set $o = $LocActions[$i*2]>>\n\t\t<<set $p = $LocActions[$i*2+1]>>\n\t\t<<if $p.indexOf("->") == 0>>\n\t\t\t<<print "[[$o|MainGoto][$goto='"+$p.substr(2)+"']]">>\n\t\t<<elseif $p.indexOf(":") == 0>>\n\t\t\t<<print "[[$o|"+$p.substr(1)+"]]">>\n\t\t<<else>>\n\t\t\t<<print "[[$o|MainScreen][$locact='"+$p+"'; $locactName ='"+$o+"']]">>\n\t\t<<endif>>\n\t\t<br>\n\t<</for>>\n\n/% цикл для вывода объектных действий %/
<<for $i = 0; $i < $FocusActions.length/2; $i++>>\n\t\t<<set $o = $FocusActions[$i*2]>>\n\t\t<<set $p = $FocusActions[$i*2+1]>>\n\t\t<<if $p.indexOf("->") == 0>>\n\t\t\t<<print "[[$o|MainGoto][$goto='"+$p.substr(2)+"']]">>\n\t\t<<elseif $p.indexOf(":") == 0>>\n\t\t\t<<print "[[$o|"+$p.substr(1)+"]]">>\n\t\t<<else>>\n\t\t\t<<print "[[$o|MainScreen][$focusact='"+$p+"'; $focusactName ='"+$o+"']]">>\n\t\t<<endif>>\n\t\t<br>\n\t<</for>>\n\n/% переход м/у локациями %/
<<set $preloc = $loc>>\n\t<<set $loc = $goto>>\n\t<<set $focus = 0>>\n\t<<set $locact = 0>>\n\t<<set $focusact = 0>>\n\t<<goto "MainScreen">>
/%\n\t\t ###### \n\t\t ## ## #### \n\t\t ## ## ## ## ## ## # ## ##### ###### ## ## \n\t\t ###### ## ### ##### # # # ## ## ## ## ## \n\t\t ## ## ## # ## ## ## ### ###### ## #### # \n\t\t ## ## ### ## ## ## # # # ## ## ## # # \n\t\t ###### ## ## ##### ## # ## ##### ## #### #\n %/
/% виджет для вывода подсказки при наведении на текст %/\n<<widget "hint">><<print "<abbr title = '"+$args[1]+"'>"+$args[0]+"</abbr>">><</widget>>\n\n/% виджет для вывода дополнительного текста в необъектной части %/\n<<widget "more">><<click $args[0]>>\n\t\t<<replace "#more">>\n\t\t\t<br><br>\n\t\t\t<<display $args[1]>>\n\t\t<</replace>>\n\t<</click>><</widget>>\n\n/% виджет для осмотра объекта %/\n<<widget "exam">><<print "<<set $a = $notSeen"+$args[1]+">>">><<if !($a)>><<if $args[2]>><<print "[["+$args[0]+"|MainScreen][$focus='"+$args[1]+"'; $notSeen"+$args[1]+" = 1]]">><<else>><<print "[["+$args[0]+"|MainScreen][$focus='"+$args[1]+"']]">><<endif>><<else>><<print $args[0]>><<endif>><<set $a=0>><</widget>>\n\n/% виджет для передачи действия от объекта в локацию %/\n<<widget "approveAct">>\n\t<<if $args[1]>><<set $args.reverse()>><<endif>>\n\t<<if !$LocActions.contains($args[0]) and $FocusActions.contains($args[0])>>\n\t\t<<if $args[1]>>\n\t\t\t<<print "<<set $"+$loc+"Actions.unshift($args[1], $args[0])>>">>\n\t\t<<else>>\n\t\t\t<<print "<<set $"+$loc+"Actions.unshift($"+$focus+"Actions[$"+$focus+"Actions.indexOf($args[0])-1], $args[0])>>">>\n\t\t<<endif>>\n\t\t<<print "<<set $"+$focus+"Actions.splice($"+$focus+"Actions.indexOf($args[0])-1,2)>>">>\n\t<<endif>>\n<</widget>>\n\n/% виджет для удаления действия из списка для объекта или локации %/\n<<widget "removeAct">>\n\t<<print "<<set $a = $"+$args[0]+"Actions>>">>\n\t<<if $a.contains($args[1])>>\n\t\t<<print "<<set $"+$args[0]+"Actions.splice($"+$args[0]+"Actions.indexOf($args[1])-1,2)>>">>\n\t<<endif>>\n<</widget>>\n\n/% виджет для добавления действия в список объекта или локации %/\n<<widget "addAct">>\n\t<<print "<<set $a = $"+$args[0]+"Actions>>">>\n\t<<if !$a.contains($args[1])>>\n\t\t<<print "<<set $"+$args[0]+"Actions.push($args[1], $args[2])>>">>\n\t<<endif>>\n<</widget>>
/* APPEARANCE */\n\nbody {\n\t/*запретить выделение текста игроком\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\tcursor: default;*/\n\n\tcolor: #fff;\n\tbackground-color: #111;\n\tfont-family: verdana, "dejavu sans", tahoma, arial, sans-serif;\n\tfont-size: 12px;\n}\na {\n\tcursor: pointer;\n\tcolor: #CC9933;\n}\na:hover {\n\tcolor: #CC9933;\n}\na:active {\n\tcolor: #f70;\n}\na.link-internal, a.link-external {\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\na.link-internal:hover, a.link-external:hover {\n\ttext-decoration: none;\n}\na.link-broken {\n\tpadding: 3px;\n\tcolor: #000;\n\tbackground-color: red;\n\tfont-weight: bold;\n\ttext-decoration: none;\n}\nhr {\n\theight: 1px;\n\tborder: none;\n\tbackground-color: #fff;\n}\ninput, textarea {\n\tcolor: #fff;\n\tbackground-color: #333;\n\tborder: 1px solid #fff;\n}\ninput[type="text"], textarea {\n\tmin-width: 16em;\n}\ninput {\n\tpadding: 2px 3px;\n}\ninput:focus, textarea:focus {\n\tborder: 1px solid #292;\n}\ninput:hover, textarea:hover {\n\tborder: 1px solid #f70;\n}\ntextarea {\n\toverflow: auto; /* fixes IE inanity */\n}\nbutton {\n\tcursor: pointer;\n\tpadding: 4px 6px;\n\tcolor: #fff;\n\tbackground-color: #36c;\n\tborder: 1px solid #58e;\n\t-webkit-border-radius: 4px;\n\t-moz-border-radius: 4px;\n\tborder-radius: 4px;\n\ttext-decoration: none;\n\ttext-shadow: 1px 1px rgba(0, 0, 0, 0.4);\n\t-webkit-transition-duration: 200ms;\n\t-moz-transition-duration: 200ms;\n\ttransition-duration: 200ms;\n}\nbutton:hover {\n\tbackground-color: #58e;\n\tborder-color: #7af;\n}\nbutton:active {\n\tbackground-color: #f70;\n\tborder-color: #f92;\n}\nabbr {\n\tborder-bottom: none;\n\t/*border-bottom: 1px dotted white;*/ /* подчёркивание под хинтом */\n}\n\n.music a.link-external{\n\tcolor: #46D;\n}\n.error {\n\tmargin: 0 12px 0 3px;\n\tpadding: 3px 5px;\n\tcolor: #000;\n\tbackground-color: red;\n\tfont-weight: bold;\n}\n.error[title] {\n\tcursor: help;\n}\n.highlight, .marked {\n\tcolor: yellow;\n\tfont-weight: bold;\n\tfont-style: italic;\n}\n.nobr {\n\twhite-space: nowrap;\n}\n.transition-in {\n\topacity: 0;\n}\n\n#ui-bar {\n\tbackground-color: #222;\n\tborder-right: 1px solid #fff;\n}\n#ui-bar header, #menu, #ui-bar footer {\n\ttext-align: right;\n}\n#ui-bar header, #menu {\n\tfont-weight: bold;\n}\n#menu, #ui-bar footer {\n\tmargin-top: 3em;\n}\n#menu ul {\n\tmargin: 1em 0;\n\tpadding: 0;\n\tlist-style: none;\n}\n#menu li {\n\tmargin-bottom: 1em;\n}\n#menu li a {\n\ttext-decoration: none;\n}\n#menu ul:last-child, #menu ul:last-child li:last-child {\n\tmargin-bottom: 0;\n}\n\n#story-title {\n\tmargin: 0;\n\tfont-size: 210%;\n}\n#story-subtitle {\n\tfont-size: 111%;\n}\n#story-author {\n\tfont-size: 111%;\n}\n#story-caption {\n\tmargin-top: 3em;\n\ttext-align: right;\n}\n\n[data-icon], a.link-back:before, a.link-return:after, a.link-external:after,\n#menu-saves a:before, #menu-rewind a:before, #menu-restart a:before, #menu-options a:before, #menu-share a:before,\n#ui-body-close, #ui-body.options a[id|="option-input"]:before, #ui-body.options a[id|="option-input"].enabled:before {\n\tfont-family: 'icomoon-sugarcube';\n\tspeak: none;\n\tfont-style: normal;\n\tfont-weight: normal;\n\tfont-variant: normal;\n\ttext-transform: none;\n\tline-height: 1;\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n[data-icon]:before {\n\tcontent: attr(data-icon) "\s00a0\s00a0";\n}\na.link-back:before {\n\tcontent: "\se00a\s00a0\s00a0";\n}\na.link-return:after {\n\tcontent: "\s00a0\s00a0\se00b";\n}\n#passages a.link-external:after {\n\t/*content: "\s00a0\se010";*/ /* значок внешней ссылки */\n\tcontent: none;\n}\n#menu-saves a:before {\n\tcontent: "\se011\s00a0\s00a0";\n}\n#menu-rewind a:before {\n\tcontent: "\se012\s00a0\s00a0";\n}\n#menu-restart a:before {\n\tcontent: "\se013\s00a0\s00a0";\n}\n#menu-options a:before {\n\tcontent: "\se014\s00a0\s00a0";\n}\n#menu-share a:before {\n\tcontent: "\se015\s00a0\s00a0";\n}\n\n#credits, #version {\n\tmargin-top: 1em;\n\tcolor: #999;\n\tfont-weight: normal;\n\tfont-size: 71%;\n}\n\n/* Default menu styling */\n#ui-overlay {\n\topacity: 0.8;\n\tbackground-color: #000;\n}\n#ui-body-close {\n\topacity: 1;\n\tcursor: pointer;\n\tfont-size: 111%;\n\tmargin: 0;\n\tpadding: 3px 4px;\n\tfont-weight: normal;\n\tcolor: #fff;\n\tbackground-color: #36c;\n\tborder: 1px solid #58e;\n\t-webkit-border-radius: 4px;\n\t-moz-border-radius: 4px;\n\tborder-radius: 4px;\n\ttext-decoration: none;\n\ttext-shadow: 1px 1px rgba(0, 0, 0, 0.4);\n\t-webkit-transition-duration: 200ms;\n\t-moz-transition-duration: 200ms;\n\ttransition-duration: 200ms;\n}\n#ui-body-close:hover {\n\tbackground-color: #58e;\n\tborder-color: #7af;\n}\n#ui-body-close:active {\n\tbackground-color: #f70;\n\tborder-color: #f92;\n}\n#ui-body {\n\topacity: 1;\n\tbackground-color: #222;\n\tborder: 1px solid #fff;\n\ttext-align: left;\n\tline-height: 2;\n}\n#ui-body div {\n\tpadding: 0.2em;\n}\n\n/* Default menu button styling */\n#ui-body > ul > li + li > button {\n\tmargin-left: 12px;\n}\n\n/* General dialog styling */\n#ui-body.dialog {\n\tmin-width: 280px;\n\tpadding: 0.33em 1em 0.66em;\n}\n#ui-body.dialog > ul {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n\ttext-align: left;\n}\n#ui-body.dialog > ul li {\n\tdisplay: inline-block;\n\tmargin: 0;\n\tpadding: 0.4em 0.4em 0.5em;\n}\n\n/* List-based dialog styling (primarily for the Rewind & Share menus) */\n#ui-body.dialog-list ul {\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n}\n#ui-body.dialog-list li {\n\tmargin: 0;\n}\n#ui-body.dialog-list li:nth-child(even) {\n\tbackground-color: rgba(255,255,255,0.08);\n}\n#ui-body.dialog-list li a {\n\tdisplay: block;\n\tpadding: 0.25em 0.75em;\n\tcolor: #fff;\n\tfont-weight: normal;\n\ttext-decoration: none;\n}\n#ui-body.dialog-list li a:hover {\n\tbackground-color: #47b;\n}\n#ui-body.dialog-list li a:active {\n\tbackground-color: #f70;\n}\n\n/* Saves menu styling */\n#ui-body.saves table {\n\tborder-spacing: 0;\n\tmin-width: 320px;\n\twidth: 100%;\n}\n#ui-body.saves tr:nth-child(even) {\n\tbackground-color: rgba(255,255,255,0.08);\n}\n#ui-body.saves td {\n\tpadding: 0.33em 0.33em;\n\tline-height: 1.2;\n}\n#ui-body.saves td:first-child {\n\tmin-width: 1.5em;\n\ttext-align: center;\n}\n#ui-body.saves .empty {\n\tcolor: #999;\n}\n#ui-body.saves ul {\n\tdisplay: block;\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n\twhite-space: nowrap;\n}\n#ui-body.saves li {\n\tdisplay: inline-block;\n\tmargin: 0;\n\tpadding: 0.33em 0.33em 0.4em;\n}\n#ui-body.saves > div:not(:first-child) {\n\tborder-top: 1px solid #fff;\n}\n#saves-import-label {\n\tmargin: 0 6px;\n\tfont-weight: bold;\n}\n#saves-import-file {\n\tmargin: 0 6px 6px;\n}\n\n/* Options menu styling */\n#ui-body.options div[id|="option-body"] + div[id|="option-body"],\n#ui-body.options div[id|="option-body"] + br + div[id|="option-body"] {\n\tmargin-top: 0.5em;\n}\n#ui-body.options select[id|="option-input"] {\n\tcursor: pointer;\n\tpadding: 3px 6px;\n\tfont-weight: normal;\n\tcolor: #fff;\n\tbackground-color: #36c;\n\tborder: 1px solid #58e;\n\t-webkit-border-radius: 4px;\n\t-moz-border-radius: 4px;\n\tborder-radius: 4px;\n\ttext-decoration: none;\n\ttext-shadow: 1px 1px rgba(0, 0, 0, 0.4);\n\t-webkit-transition-duration: 200ms;\n\t-moz-transition-duration: 200ms;\n\ttransition-duration: 200ms;\n\twhite-space: nowrap;\n}\n#ui-body.options a[id|="option-input"] {\n\tcursor: pointer;\n\tpadding: 4px 6px;\n\tfont-weight: normal;\n\tcolor: #fff;\n\tbackground-color: #36c;\n\tborder: 1px solid #58e;\n\t-webkit-border-radius: 4px;\n\t-moz-border-radius: 4px;\n\tborder-radius: 4px;\n\ttext-decoration: none;\n\ttext-shadow: 1px 1px rgba(0, 0, 0, 0.4);\n\t-webkit-transition-duration: 200ms;\n\t-moz-transition-duration: 200ms;\n\ttransition-duration: 200ms;\n\twhite-space: nowrap;\n}\n#ui-body.options a[id|="option-input"]:hover {\n\tbackground-color: #58e;\n\tborder-color: #7af;\n}\n#ui-body.options a[id|="option-input"].enabled {\n\tbackground-color: #292;\n\tborder-color: #4b4;\n}\n#ui-body.options a[id|="option-input"].enabled:hover {\n\tbackground-color: #4b4;\n\tborder-color: #6d6;\n}\n#ui-body.options a[id|="option-input"]:before {\n\tcontent: "\se002\s00a0\s00a0";\n}\n#ui-body.options a[id|="option-input"].enabled:before {\n\tcontent: "\se003\s00a0\s00a0";\n}\n\n/* Passages area styling */\n.passage {\n\tline-height: 1.75;\n\ttext-align: left;\n\ttransition: opacity 0ms ease-in;\n\t-webkit-transition: opacity 0ms ease-in;\n}\n.passage ul, .passage ol {\n\tmargin-left: 0.5em;\n\tpadding-left: 1.5em;\n}\n.passage table {\n\tmargin: 1em 0;\n\tborder-collapse: collapse;\n\tfont-size: 100%;\n}\n.passage tr, .passage th, .passage td, .passage caption {\n\tpadding: 3px;\n}\n\n\n/* STRUCTURAL */\n\n\nbody {\n\tmargin: 3.5em 3.5em 3.5em 21em;\n}\n\n#store-area {\n\tdisplay: none;\n\tz-index: 0;\n}\n\n#ui-bar {\n\tposition: fixed;\n\tz-index: 50;\n\ttop: 0;\n\tleft: 0;\n\twidth: 14.5em;\n\theight: 100%;\n\tmargin: 0;\n\tpadding: 3.5em 1.5em 0 3.5em;\n}\n\n/* Default dialog styling */\nhtml.ui-open body {\n\toverflow: hidden;\n}\n#ui-overlay {\n\tdisplay: none;\n\tz-index: 1000;\n\tposition: fixed;\n\ttop: 0px;\n\tleft: 0px;\n\theight: 100%;\n\twidth: 100%;\n}\n#ui-body-close {\n\tdisplay: none;\n\tz-index: 1110;\n\tposition: fixed;\n\twhite-space: nowrap;\n}\n#ui-body {\n\tdisplay: none;\n\tz-index: 1100;\n\tposition: fixed;\n\toverflow: auto;\n\tmin-width: 140px;\n\tmax-width: 90%;\n\tmax-height: 90%;\n}\n\n/* Options dialog styling */\n#ui-body.options [id|="option-body"] {\n\tdisplay: table;\n\twidth: 100%;\n}\n#ui-body.options [id|="option-label"] {\n\tdisplay: table-cell;\n\twidth: 80%;\n\tpadding: 0.33em 2em 0.4em 0.33em;\n}\n#ui-body.options [id|="option-control"] {\n\tdisplay: table-cell;\n\tpadding: 0.33em 0.33em 0.4em;\n\twhite-space: nowrap;\n}\n\n/* Passages area styling */\n#passages {\n\tz-index: 10;\n\tmargin-right: 26%;\n}\n\n/* Stop text selection on UI widgets */\nbutton, #ui-body-close, #ui-body.dialog-list a, #ui-body.options a[id|="option-input"] {\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\t-o-user-select: none;\n\tuser-select: none;\n}\n\n\n/* MEDIA-QUERIES */\n\n\n/* Increase viewport utilization as its size decreases. */\n@media screen and (max-width: 1440px) {\n\t#passages {\n\t\tmargin-right: 8%;\n\t}\n}\n@media screen and (max-width: 1136px) {\n\tbody {\n\t\tmargin: 3.5% 3.5% 3.5% 20em;\n\t}\n\t#ui-bar {\n\t\tpadding-top: 3.5%;\n\t\tpadding-left: 2.5em;\n\t}\n\t#passages {\n\t\tmargin: 0;\n\t}\n}\n\n\n/* MEDIA-QUERIES-NARROW */\n\n\n\n/* Handle very narrow viewports. */\n@media screen and (max-width: 800px) {\n\tbody {\n\t\tmargin: 0;\n\t}\n\t#ui-bar {\n\t\tposition: relative;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: auto;\n\t\theight: auto;\n\t\tmargin: 0;\n\t\tpadding: 2.5% 3.5% 0;\n\t\tborder: none;\n\t\tborder-bottom: 1px solid #fff;\n\t}\n\t#ui-bar header, #story-caption, #ui-bar footer {\n\t\ttext-align: left;\n\t\twidth: 66%;\n\t}\n\t#menu {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tright: 0;\n\t\tmargin: 2.5% 3.5% 0 0;\n\t}\n\t#menu ul {\n\t\tmargin: 0;\n\t}\n\t#menu li {\n\t\tmargin-bottom: 0.5em;\n\t}\n\t#passages {\n\t\twidth: auto;\n\t\tmargin: 1.5em 3.5% 3.5%;\n\t}\n}
(function(){version.extensions.replaceMacrosCombined={major:1,minor:1,revision:4};var nullobj={handler:function(){}};function showVer(n,notrans){if(!n){return\n}n.innerHTML="";new Wikifier(n,n.tweecode);n.setAttribute("data-enabled","true");n.style.display="inline";n.classList.remove("revision-span-out");\nif(!notrans){n.classList.add("revision-span-in");if(n.timeout){clearTimeout(n.timeout)}n.timeout=setTimeout(function(){n.classList.remove("revision-span-in");\nn=null},1)}}function hideVer(n,notrans){if(!n){return}n.setAttribute("data-enabled","false");n.classList.remove("revision-span-in");\nif(n.timeout){clearTimeout(n.timeout)}if(!notrans){n.classList.add("revision-span-out");n.timeout=setTimeout(function(){if(n.getAttribute("data-enabled")=="false"){n.classList.remove("revision-span-out");\nn.style.display="none";n.innerHTML=""}n=null},1000)}else{n.style.display="none";n.innerHTML="";n=null}}function tagcontents(b,starttags,desttags,endtags,k){var l=0,c="",tg,a,i;\nfunction tagfound(i,e){for(var j=0;j<e.length;j++){if(a.indexOf("<<"+e[j],i)==i){return e[j]}}}a=b.source.slice(k);for(i=0;\ni<a.length;i++){if(tg=tagfound(i,starttags)){l++}else{if((tg=tagfound(i,desttags))&&l==0){b.nextMatch=k+i+tg.length+4;return[c,tg]\n}else{if(tg=tagfound(i,endtags)){l--;if(l<0){return null}}}}c+=a.charAt(i)}return null}var begintags=[];var endtags=[];function revisionSpanHandler(g,e,f,b){var k=b.source.indexOf(">>",b.matchStart)+2,vsns=[],vtype=e,flen=f.length,becomes,c,cn,m,h,vsn;\nfunction mkspan(vtype){h=insertElement(m,"span",null,"revision-span "+vtype);h.setAttribute("data-enabled",false);h.style.display="none";\nh.tweecode="";return h}if(this.shorthand&&flen){while(f.length>0){vsns.push([f.shift(),(this.flavour=="insert"?"gains":"becomes")])\n}}else{if(this.flavour=="insert"||(this.flavour=="continue"&&this.trigger=="time")){vsns.push(["","becomes"])}}if(this.flavour=="continue"&&flen){b.nextMatch=k+b.source.slice(k).length;\nvsns.push([b.source.slice(k),vtype])}else{becomes=["becomes","gains"];c=tagcontents(b,begintags,becomes.concat(endtags),endtags,k);\nif(c&&endtags.indexOf(c[1])==-1){while(c){vsns.push(c);c=tagcontents(b,begintags,becomes,endtags,b.nextMatch)}c=tagcontents(b,begintags,["end"+e],endtags,b.nextMatch)\n}if(!c){throwError(g,"can't find matching end"+e);return}vsns.push(c);if(this.flavour=="continue"){k=b.nextMatch;b.nextMatch=k+b.source.slice(k).length;\nvsns.push([b.source.slice(k),""])}}if(this.flavour=="remove"){vsns.push(["","becomes"])}cn=0;m=insertElement(g,"span",null,e);\nm.setAttribute("data-flavour",this.flavour);h=mkspan("initial");vsn=vsns.shift();h.tweecode=vsn[0];showVer(h,true);while(vsns.length>0){if(vsn){vtype=vsn[1]\n}vsn=vsns.shift();h=mkspan(vtype);h.tweecode=vsn[0]}if(typeof this.setup=="function"){this.setup(m,g,f)}}function quantity(m){return(m.children.length-1)+(m.getAttribute("data-flavour")=="remove")\n}function revisionSetup(m,g,f){m.className+=" "+f[0].replace(" ","_")}function keySetup(m,g,f){var key=f[0];m.setEventListener("keydown",function l(e){var done=!revise("revise",m);\nif(done){m.removeEventListener("keydown",l)}})}function timeSetup(m,g,f){function cssTimeUnit(s){if(typeof s=="string"){if(s.slice(-2).toLowerCase()=="ms"){return Number(s.slice(0,-2))||0\n}else{if(s.slice(-1).toLowerCase()=="s"){return Number(s.slice(0,-1))*1000||0}}}throwError(g,s+" isn't a CSS time unit");\nreturn 0}var tm=cssTimeUnit(f[0]);setTimeout(function timefn(){var done=!revise("revise",m);if(!done){setTimeout(timefn,tm)\n}},tm)}function hoverSetup(m){var fn,noMouseEnter=(document.head.onmouseenter!==null),m1=m.children[0],m2=m.children[1];if(!m1||!m2){return\n}m1.onmouseenter=function(e){if(this.getAttribute("data-enabled")!="false"){revise("revise",this.parentNode)}};m2.onmouseleave=function(e){if(this.getAttribute("data-enabled")!="false"){revise("revert",this.parentNode)\n}};if(noMouseEnter){fn=function(n){return function(e){if(!event.relatedTarget||(event.relatedTarget!=this&&!(this.compareDocumentPosition(event.relatedTarget)&Node.DOCUMENT_POSITION_CONTAINED_BY))){this[n]()\n}}};m1.onmouseover=fn("onmouseenter");m2.onmouseout=fn("onmouseleave")}m=null}function mouseSetup(m){var evt=(document.head.onmouseenter===null?"onmouseenter":"onmouseover");\nm[evt]=function(){var done=!revise("revise",this);if(done){this[evt]=null}};m=null}function linkSetup(m,g,f){var l=Wikifier.createInternalLink(),p=m.parentNode;\nl.className="internalLink replaceLink";p.insertBefore(l,m);l.insertBefore(m,null);l.onclick=function(){var p,done=false;if(m&&m.parentNode==this){done=!revise("revise",m);\nscrollWindowTo(m)}if(done){this.parentNode.insertBefore(m,this);this.parentNode.removeChild(this)}};l=null}function visitedSetup(m,g,f){var i,done,shv=state.history[0].variables,os="once seen",d=(m.firstChild&&(this.flavour=="insert"?m.firstChild.nextSibling:m.firstChild).tweecode);\nshv[os]=shv[os]||{};if(d&&!shv[os].hasOwnProperty(d)){shv[os][d]=1}else{for(i=shv[os][d];i>0&&!done;i--){done=!revise("revise",m,true)\n}if(shv[os].hasOwnProperty(d)){shv[os][d]+=1}}}[{name:"insert",flavour:"insert",trigger:"link",setup:linkSetup},{name:"timedinsert",flavour:"insert",trigger:"time",setup:timeSetup},{name:"insertion",flavour:"insert",trigger:"revisemacro",setup:revisionSetup},{name:"later",flavour:"insert",trigger:"visited",setup:visitedSetup},{name:"keyinsert",flavour:"insert",trigger:"key",setup:keySetup},{name:"replace",flavour:"replace",trigger:"link",setup:linkSetup},{name:"timedreplace",flavour:"replace",trigger:"time",setup:timeSetup},{name:"mousereplace",flavour:"replace",trigger:"mouse",setup:mouseSetup},{name:"hoverreplace",flavour:"replace",trigger:"hover",setup:hoverSetup},{name:"revision",flavour:"replace",trigger:"revisemacro",setup:revisionSetup},{name:"keyreplace",flavour:"replace",trigger:"key",setup:keySetup},{name:"timedremove",flavour:"remove",trigger:"time",setup:timeSetup},{name:"mouseremove",flavour:"remove",trigger:"mouse",setup:mouseSetup},{name:"hoverremove",flavour:"remove",trigger:"hover",setup:hoverSetup},{name:"removal",flavour:"remove",trigger:"revisemacro",setup:revisionSetup},{name:"once",flavour:"remove",trigger:"visited",setup:visitedSetup},{name:"keyremove",flavour:"remove",trigger:"key",setup:keySetup},{name:"continue",flavour:"continue",trigger:"link",setup:linkSetup},{name:"timedcontinue",flavour:"continue",trigger:"time",setup:timeSetup},{name:"mousecontinue",flavour:"continue",trigger:"mouse",setup:mouseSetup},{name:"keycontinue",flavour:"continue",trigger:"key",setup:keySetup},{name:"cycle",flavour:"cycle",trigger:"revisemacro",setup:revisionSetup},{name:"mousecycle",flavour:"cycle",trigger:"mouse",setup:mouseSetup},{name:"timedcycle",flavour:"cycle",trigger:"time",setup:timeSetup},{name:"keycycle",flavour:"replace",trigger:"key",setup:keySetup}].forEach(function(e){e.handler=revisionSpanHandler;\ne.shorthand=(["link","mouse","hover"].indexOf(e.trigger)>-1);macros[e.name]=e;macros["end"+e.name]=nullobj;begintags.push(e.name);\nendtags.push("end"+e.name)});function insideDepartingSpan(elem){var r=elem.parentNode;while(!r.classList.contains("passage")){if(r.classList.contains("revision-span-out")){return true\n}r=r.parentNode}}function reviseAll(rt,rname){var rall=document.querySelectorAll(".passage [data-flavour]."+rname),ret=false;\nfor(var i=0;i<rall.length;i++){if(!insideDepartingSpan(rall[i])){ret=revise(rt,rall[i])||ret}}return ret}function revise(rt,r,notrans){var ind2,curr,next,ind=-1,rev=(rt=="revert"),rnd=(rt.indexOf("random")>-1),fl=r.getAttribute("data-flavour"),rc=r.childNodes,cyc=(fl=="cycle"),rcl=rc.length-1;\nfunction doToGainerSpans(n,fn){for(var k=n-1;k>=0;k--){if(rc[k+1].classList.contains("gains")){fn(rc[k],notrans)}else{break\n}}}for(var k=0;k<=rcl;k++){if(rc[k].getAttribute("data-enabled")=="true"){ind=k}}if(rev){ind-=1}curr=(ind>=0?rc[ind]:(cyc?rc[rcl]:null));\nind2=ind;if(rnd){ind2=(ind+(Math.floor(Math.random()*rcl)))%rcl}next=((ind2<rcl)?rc[ind2+1]:(cyc?rc[0]:null));var docurr=(rev?showVer:hideVer);\nvar donext=(rev?hideVer:showVer);var currfn=function(){if(!(next&&next.classList.contains("gains"))||rnd){docurr(curr,notrans);\ndoToGainerSpans(ind,docurr,notrans)}};var nextfn=function(){donext(next,notrans);if(rnd){doToGainerSpans(ind2+1,donext,notrans)\n}};if(!rev){currfn();nextfn()}else{nextfn();currfn()}return(cyc?true:(rev?(ind>0):(ind2<rcl-1)))}macros.revert=macros.revise=macros.randomise=macros.randomize={handler:function(a,b,c){var l,rev,rname;\nfunction disableLink(l){l.style.display="none"}function enableLink(l){l.style.display="inline"}function updateLink(l){if(l.className.indexOf("random")>-1){enableLink(l);\nreturn}var rall=document.querySelectorAll(".passage [data-flavour]."+rname),cannext,canprev,i,ind,r,fl;for(i=0;i<rall.length;\ni++){r=rall[i],fl=r.getAttribute("data-flavour");if(insideDepartingSpan(r)){continue}if(fl=="cycle"){cannext=canprev=true\n}else{if(r.firstChild.getAttribute("data-enabled")==!1+""){canprev=true}if(r.lastChild.getAttribute("data-enabled")==!1+""){cannext=true\n}}}var can=(l.classList.contains("revert")?canprev:cannext);(can?enableLink:disableLink)(l)}function toggleText(w){w.classList.toggle(rl+"Enabled");\nw.classList.toggle(rl+"Disabled");w.style.display=((w.style.display=="none")?"inline":"none")}var rl="reviseLink";if(c.length<2){throwError(a,b+" macro needs 2 parameters");\nreturn}rname=c.shift().replace(" ","_");l=Wikifier.createInternalLink(a,null);l.className="internalLink "+rl+" "+rl+"_"+rname+" "+b;\nvar v="";var end=false;var out=false;if(c.length>1&&c[0][0]=="$"){v=c[0].slice(1);c.shift()}switch(c[c.length-1]){case"end":end=true;\nc.pop();break;case"out":out=true;c.pop();break}var h=state.history[0].variables;for(var i=0;i<c.length;i++){var on=(i==Math.max(c.indexOf(h[v]),0));\nvar d=insertElement(null,"span",null,rl+((on)?"En":"Dis")+"abled");if(on){h[v]=c[i];l.setAttribute("data-cycle",i)}else{d.style.display="none"\n}insertText(d,c[i]);l.appendChild(d)}l.onclick=function(){reviseAll(b,rname);var t=this.childNodes,u=this.getAttribute("data-cycle")-0,m=t.length,n,lall,i;\nif((end||out)&&u==m-(end?2:1)){if(end){n=this.removeChild(t[u+1]);n.className=rl+"End";n.style.display="inline";this.parentNode.replaceChild(n,this)\n}else{this.parentNode.removeChild(this);return}}else{toggleText(t[u]);u=(u+1)%m;if(v){h[v]=c[u]}toggleText(t[u]);this.setAttribute("data-cycle",u)\n}lall=document.getElementsByClassName(rl+"_"+rname);for(i=0;i<lall.length;i++){updateLink(lall[i])}};l=null}};macros.mouserevise=macros.hoverrevise={handler:function(a,b,c,d){var endtags=["end"+b],evt=(window.onmouseenter===null?"onmouseenter":"onmouseover"),t=tagcontents(d,[b],endtags,endtags,d.source.indexOf(">>",d.matchStart)+2);\nif(t){var rname=c[0].replace(" ","_"),h=insertElement(a,"span",null,"hoverrevise hoverrevise_"+rname),f=function(){var done=!reviseAll("revise",rname);\nif(b!="hoverrevise"&&done){this[evt]=null}};new Wikifier(h,t[0]);if(b=="hoverrevise"){h.onmouseover=f;h.onmouseout=function(){reviseAll("revert",rname)\n}}else{h[evt]=f}h=null}}};macros.instantrevise={handler:function(a,b,c,d){reviseAll("revise",c[0].replace(" ","_"))}};macros.endmouserevise=nullobj;\nmacros.endhoverrevise=nullobj}());
version.extensions.timedgotoMacro={major:1,minor:2,revision:0};\nmacros["goto"]=macros.timedgoto={timer:null,handler:function(a,b,c,d){function cssTimeUnit(s){if(typeof s=="string"){if(s.slice(-2).toLowerCase()=="ms"){return +(s.slice(0,-2))||0\n}else{if(s.slice(-1).toLowerCase()=="s"){return +(s.slice(0,-1))*1000||0\n}}}throwError(a,s+" isn't a CSS time unit");return 0}var t,d,m,s;\nt=c[c.length-1];d=d.fullArgs();m=0;if(b!="goto"){d=d.slice(0,d.lastIndexOf(t));\nm=cssTimeUnit(t)}d=eval(Wikifier.parse(d));if(d+""&&state&&state.init){if(macros["goto"].timer){clearTimeout(macros["goto"].timer)\n}s=state.history[0].passage.title;macros["goto"].timer=setTimeout(function(){if(state.history[0].passage.title==s){state.display(d,a)\n}},m)}}};
version.extensions["toggletagMacros"]={major:1,minor:1,revision:0};\nmacros["toggletag"]={\n handler:function(a,b,c){\n var p=e(a);\n var d=document.body;\n if(p){\n var t=p.getAttribute("data-tags");\n var i=t.indexOf(c[0]);\n if(b!="addtag"&&i>=0){\n var r=t.replace(c[0],"");\n p.setAttribute("data-tags",r);\n d.setAttribute("data-tags",r);\n }\n else{\n if(b!="removetag"&&i<0){\n var r=t+" "+c[0];\n p.setAttribute("data-tags",r);\n d.setAttribute("data-tags",r);\n }\n }\n }\n function e(f){\n while(f.parentNode&&!f.classList.contains("passage")){\n f=f.parentNode;\n }\n if(f!=document&&f.getAttribute("data-tags")){return f;}\n return null;\n }\n }\n};\nmacros["addtag"]=macros["toggletag"];macros["removetag"]=macros["toggletag"];
try { \n\nversion.extensions.whileMacros = {\n major: 1, minor: 0, revision: 0\n};\n\nmacros['while'] = { \n handler: function(place, macroName, params, parser) {\n var srcOffset = parser.source.indexOf(">>", parser.matchStart) + 2,\n src = parser.source.slice(srcOffset),\n endPos = -1,\n condition = parser.fullArgs().trim(),\n body = "",\n nestlevel = 0,\n i = 0;\n \n for (; i < src.length; i++) {\n if (src.substr(i, 8) == "<<while ") {\n nestlevel++;\n }\n if (src.substr(i, 12) == "<<endwhile>>") {\n nestlevel--;\n if (nestlevel < 0) {\n endPos = srcOffset + i + 12;\n break;\n }\n }\n body += src.charAt(i);\n }\n body = body.trim();\n\n if (endPos != -1) {\n parser.nextMatch = endPos;\n try {\n while (internalEval(condition)) {\n new Wikifier(place, body);\n }\n } catch (e) {\n throwError(place, "<<while>> bad condition: " + condition, parser.fullMatch());\n }\n } else {\n throwError(place, "I can't find a matching <<endwhile>>", parser.fullMatch());\n }\n },\n init: function() { }\n};\n\nmacros["endwhile"] = {\n handler: function () {}\n};\n\n} catch(e) { \n throwError(place,"Macro while Error: "+e.message); \n}