Анабасис «Котов» [α]/%[β]%/
[[Вячеслав Добранов|http://cheshire.ifiction.ru/]]
<<set $timer = 0>>\n<<display 'ArcadeParkInit'>>\n<<display 'SitOnBikeInit'>>\n<<display 'RoomInit'>>\n<<set $loc = "ArcadePark">>
/%[[ООП!|MainScreen]]\n[[История!|Arcade]]\n[[Музыка|http://youtu.be/zcUuWetbC8U?list=PLVq6NBAxyOi-DVZ9tx_OME6K1FG6OMKIG]]%/
<<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Засада\n\tСтарый город\n\tТоннель\n\t\tСтруна поперёк тоннеля\n\tГород Сокровищ\n\tМост\n\t\tДвухуровневый, с нижним уровнем, занятым сквотерами.\n\t\tРжавчина, хлопья краски, оборванные тросы.\n\t\tБлок-пост ЧВК на выезде.\n\tПорт
''В Аркаде''\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Замысел — это, вообще-то, сокращённо. Полностью его звали Божий Замысел и это не шутка, у него в идентификаторе так и было занесено, мы проверяли. Просто мамаша у него была закинутая на этой теме. Всё время проводила в подключении к паре десятков проповедческих каналов. А когда забеременела двумя близнецами, решила назвать их Божий Замысел и Божий Промысел. Сказано-сделано. Один из братьев, правда, помер через пару часов, другому повезло меньше. В конце концов, Замысел сбежал от своей окасан, как только ему стукнуло четырнадцать и он получил право на собственные деньги.\n\tЗамысел, кстати, был единственным из нас «легальным». Имел идентификатор, талоны на соцпитание, официальную скидку на лекарства и прочие доступные гражданину радости.
''• Кости''\n\tОбычный Атараси-Рити на 136 костей с джокерами. Место двух недостающих игроков занимал примитивный ИскИн, потому что Мяч играл отвратительно, а на двоих играть было нельзя. Судя по еле заметному мерцанию голограмм Перо отчаянно мухлевал с исполняемым кодом игры. Но меня это мало беспокоило, потому что я мухлевал ещё отчаяннее.
''В Аркаде''\n\tИ только я собирался сказать «Мячик, дорогой, будь добр, убери от моего лица свои зудящие палочки, пока я не нашёл им менее безобидное применение», как дверь распахнулась, увеличив громкость шума из зала на пару десятков децибел (Замысел, что характерно, не проснулся), в неё вскочил мелкий <<more "Али" "Ali">>, захлопнул дверь и затараторил на той дикой языковой смеси из кантонского китайского, хинди, урду, вкраплений английского, эмигрантского японского и обазиатченного русского, которую могли понимать лишь те, кто вырос в границах <<more "Промышленного Сектора" "IndustrialSector">>. Ну то есть мы.<span id="more"></span>\n\n\t[[>> Далее|ArcadeNews]]
''• Али''\n\tСмуглый, щуплый пацанёнок из армии тех малолетних беспризорников, которые не попались ещё в клешни учебно-исправительной системы и шныряли по сырым переулкам всего Порта, промышляя мелким воровством. Слишком ненадёжные, чтобы поручать что-то серьёзное, но, тем не менее, отличные соглядатаи и посыльные. Опекал их обычно Перо, и у него была целая сеть таких вот звоночков на каждом углу.
''• Промышленный Сектор''\n\tТы спрашиваешь, что шпана из Промышленного Сектора делала в Юго-Восточной Коммерческой Зоне? Карабкалась по лестнице жизни наверх, кончено!
''В Аркаде''\n\tЗа каких-то пятнадцать секунд Али успел рассказать, что в блоке 14-А (всего пара кварталов отсюда!) объявились клоуны из Банды Девяти Улиц и начали громить витрины и машины, орать «Мочи „Котов“!» (ублюдки! на нашей территории!). Уже пострадали несколько прохожих и одному из наших спалили байк.\n\t— Что?! — вскочил с дивана моментально очнувшийся Замысел. — Какого хрена они делают?! Мы же договорились не лезть друг к другу!\n\t— Али, — строго спросил своего подопечного Перо. — Это точно «девятки»? Вы ничего не напутали? Кто сообщил?\n\tПацанёнок быстро-быстро затряс головой и выдал скороговоркой:\n\t— Точно, сахиб! Лебедь видела цифры на касках и чёрный трайк с огненной девяткой!\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 = ["Сесть на свой байк", "GotoSitOnBike"]>>\n\t<<set $MahBikeAfter = 1>>
Мой сине-белый красавец, в прошлом — полицейский «Инфорсара», изуродованный во время уличных беспорядков двухлетней давности. Я восстанавливал его сам, попутно заменяя какие-то узлы на более подходящие мне: сменил испорченные дорогущие аккамуляторы на конденсаторы, установил более объёмную пневмокамеру от другой модели, поставил керамические тормоза, поснимал всю тяжёлую пассивную защиту и, самое главное, перепрошил «мозги» своей собственной, кустарной прошивкой. Как результат — самая мощная и выносливая машина из всех, что мне приходилось встречать.\n\tСзади был прикреплен штырь с голограммой флага: чёрным ощерившимся котом на красном фоне. Флаг увеличивался в длину, когда повышалась скорость, и на достаточно ровных участках за мной тянулся шикарный красно-чёрный шлейф.
<<approveAct "GotoSitOnBike">>
<<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 $isBikeStarted and $isHelmetOn>>\n\t\t<<addAct "SitOnBike" "Поехали!" "MSGArcadeDrive">>\n\t<<endif>>
''Продолжение следует''
<<set $ScreenName = "Монитор на панели">>
Монитор, на который выводилась различная информация: состояние систем байка, видеопоток с камеры заднего вида, связь, навигацию и прочее, прочее. <<print ($isBikeStarted ? "Сейчас он показывал картинку с камеры заднего вида" : "Но сейчас он ничего не показывал — байк был выключен")>>.
<<set $SwitchesName = "Тумблеры">>\n\t<<set $SwitchesActions = ["Запустить байк", "SwitchesTurnItOn", "Пощёлкать другими тумблерами", "SwitchesClicking"]>>\n\t<<set $SwitchesAfter = 1>>
Эти переключатели контролировали всевозможные системы байка: информацию, которая выводилась на монитор, ветровое стекло или щиток шлема, настройку беспроводной связи, свет фары, режимы работы двигателя, голограмму флага и тому подобное.<<print ($isBikeStarted ? "" : " Среди них так же был тумблер, замыкающий электроцепь для запуска байка.")>>
<<approveAct "SwitchesTurnItOn">>\n\t<<set $SwitchesActions[$SwitchesActions.indexOf("SwitchesClicking")-1] = "Пощёлкать тумблерами">>
<<set $SwitchesTurnItOnDesc = "Я клацнул по бордовому переключателю на панели и зверь подо мной отозвался нарастающим гулом. По мути ветрового стекла разбежались янтарные прожилки, делая его прозрачным. Включилась подсветка тумблеров, ожил монитор — на его чернильной поверхности замелькали страницы самодиагностики, а потом и запрос на пароль. Я сделал над ним несколько сложных пассов, окончательно разблокировав машину, и байк зарычал, прочищая систему выхлопа. Зажглась передняя фара, выхватив из вечерних сумерек стену Аркады в пятнах сложносочинённого графитти.">>\n\t<<set $isBikeStarted = 1>>\n\t<<if $isHelmetOn>>\n\t\t<<set $SwitchesTurnItOnDesc = $SwitchesTurnItOnDesc+"<br><br>Всё, теперь я был готов выезжать.">>\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>>
<<set $HelmetName = "Шлем">>\n\t<<set $HelmetActions = ["Надеть шлем", "HelmetTakeOn"]>>\n\t<<set $HelmetAfter = 1>>
Шлем надёжно удерживался в захвате. Дорогая вещь — он мог связываться с сетью байка и выводить на визор любую доступную информацию.
<<approveAct "HelmetTakeOn">>
<<set $HelmetTakeOnDesc = "Я снял шлем со стойки, надел его и застегнул под подбородком.">>\n\t<<set $isHelmetOn = 1>>\n\t<<if $isBikeStarted>>\n\t\t<<set $HelmetTakeOnDesc = $HelmetTakeOnDesc+"<br><br>Всё, теперь я был готов выезжать.">>\n\t<<endif>>\n\t<<removeAct "SitOnBike" "HelmetTakeOn">>
<<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\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+"Daemon>>">>\t\t\t\t\t\t/% вывод демона локации (с таймером и прочим) %/\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<<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+"Events>>">>//\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\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 "[[$"+$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>>\n\t\t<<if $FocusActions and $FocusActions.length>>\t\t\t\t/% вывод действий для объекта в фокусе %/\n\t\t\t<<display FocusActionsLoop>>\n\t\t<<endif>>\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\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("Goto") == 0>>\n\t\t\t<<print "[[$o|MainGoto][$goto='"+$p.substr(4)+"']]">>\n\t\t<<elseif $p.indexOf("MSG") == 0>>\n\t\t\t<<print "[[$o|"+$p.substr(3)+"]]">>\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("Goto") == 0>>\n\t\t\t<<print "[[$o|MainGoto][$goto='"+$p.substr(4)+"']]">>\n\t\t<<elseif $p.indexOf("MSG") == 0>>\n\t\t\t<<print "[[$o|"+$p.substr(3)+"]]">>\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 "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>>
(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}
//requires jquery
/* 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}\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\tcontent: "\s00a0\se010";\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}