// Перевод на русский: Oreolek, 2010 // --------------------------------------------------------------------------- // Отредактируйте этот файл, чтобы описать вашу игру. Он должен иметь не // менее четырёх разделов данных: undum.game.situations, undum.game.start, // undum.game.qualities, и undum.game.init. // --------------------------------------------------------------------------- /* Уникальный идентификатор вашей игры. Он никогда не отображается. * Я использую UUID, но вы можеет использовать всё что гарантированно * уникально (URL, которым вы владеете, или вариацию вашего адреса * e-mail, например).*/ undum.game.id = "349baf43-9ade-49a8-86d0-24e3de3ce072"; undum.game.version = "1.0"; /* Ситуации, в которых может быть игра. Каждая имеет уникальный ID. */ undum.game.situations = { start: new undum.SimpleSituation( "
Добро пожаловать в обучающую игру по Undum. Undum - это инструмент для написания\ гипертекстовой интерактивной литературы. Он обладает некоторыми уникальными возможностями\ и визуальным дизайном, который поддерживает повествующие игры.
\ \Гипертекстовая интерактивная литература - это цифровой эквивалент книгам\ Choose Your Own Adventure (CYOA), которые были популярны в\ 1980х. История рассказывается кусочками, и вы выбираете из нескольких \ вариантов, чтобы продвинуть её дальше. Тем не менее, в отличие от книжной формы, цифровая\ версия даёт вам намного больше гибкости, чтобы рассказать богатые истории\ и представить более интересные элементы игры.
\ \А сейчас давайте продолжим обучение.\ Нажмите на эту ссылку, чтобы продвинуться дальше.
" ), // Для разнообразия, здесь мы задаём ситуацию, используя высокоуровневый тип Situation. // Это прекрасный подход, чтобы сгенерировать текст, просто найдя его в HTML документе. // Для статичного текста в этом больше смысла, чем записывать его просто так. rooms: new undum.Situation({ enter: function(character, system, from) { system.write($("#s_rooms").html()); } }), todo: new undum.SimpleSituation( "В ситуации может произойти две вещи. Либо персонаж\ покидает ситуацию и входит в другую, либо\ он выполняет некоторое действие. Действия могут\ выполнять некоторые вычисления, могут выводить какие-нибудь результаты, но\ все они возвращают персонажа обратно в ту же ситуацию.
\ \Когда вы создаёте свою игру, используйте ситуации, чтобы отразить\ изменения в том, что може сделать персонаж. Так, вы можете изменить ситуацию если персонаж\ тянет рычаг, чтобы открыть люк, например. Действия\ предназначены для ситуаций, где персонаж может изучать вещи более пристально\ , а может быть улучшить свою магию, выпив зелья.\ Это вещи, которые не влияют на мир вокруг них.
\ \Ситуации генерируют содержимое, когда в них входят (метод enter),\ выходят (exit), и когда они получают действие (act).\ Вы можете написать код, который будет генерировать текст любым удобным вам способом, \ чтобы отображаемое содержимое могло быть полностью динамичным, \ принимая во внимание текущее состояние персонажа.
\ Содержимое - это обычный HTML, поэтому вы можете использовать все HTML теги, чтобы выделить\ что-то в тексте или добавить иллюстрации.Это даёт вам огромную гибкость. Например, так как Undum\ нацелен на HTML 5, вы можете использовать теги audio или\ video, чтобы вставить музыкальное или видео оформление.
\ \Убедитесь в том, что вы выполнили действие выше,\ а затем продолжайте.
", { actions: { 'do-something': "Браво, вы выполнили действие.\ Заметьте, что ссылки для этой ситуации всё ещё активны.\ Это означает,что вы можете нажать на них, чтобы\ выполнить действие ещё раз.
" } } ), links: new undum.SimpleSituation( "Между каждым кусочком нового текста Undum вставляет отчётливую линию\ на полях. Она позволяет вам быстро увидеть всё, что было выдано\ в качестве результата вашего последнего клика.\ Это очень удобно для маленьких устройств, или когда появилось\ очень много текста. Также окно перемещается таким образом, что начало\ нового содержимого приходится настолько близко к верхнему краю окна, насколько возможно.\ Это также сделано для того, чтобы помочь вам читать натуральнее.
\ \Если вы внимательно смотрели, вы заметили, что некоторые части\ текста исчезали, когда вы выходили из ситуаций. Это не баг!\ Одна из целей Undum - это дать геймдизайнерам возможность сделать\ запись игры связным рассказом.\ Тем не менее, вам часто нужны кусочки текста, которые ничего не делают, но просто\ предлагают читателю выбор.\ Для этого Undum определяет специальный CSS класс для добавления в ващ HTML\ (помните, сгенерированное содержимое - это просто HTML). Этот класс называется transient\ и может быть применён к параграфам, div'ам или просто\ span'ам (как вот этот).
\ \также вы могли заметить, что, когда вы перемещаетесь в другую ситуацию, все ссылки\ в предыдущей превращаются в обычный текст. Это сделано для того, чтобы не дать вам\ отступить и попробовать предыдущие варианты ответа, когда вы уже выбрали один из них.\ В других H-IF системах это делается при помощи полной очистки предыдущих страниц.\ Но это не позволяет вам вернуться и перечитать вашу историю.
\ \Давайте узнаем больше о ссылках и посмотри, как изменить это поведение.
" ), sticky: new undum.SimpleSituation( "В undum существует три типа ссылок. Мы уже видели первые два:\ ссылки смены ситцаций и ссылки, вызывающие действие. Когда вы\ включаете ссылку в ваш текст, undum распознаёт её и оформляет\ подобающим образом. Если вы создаёте ссылку с атрибутом HTML href,\ содержащим только имя ('зал', например), то она отправит персонажа\ в ситуацию с этим именем. Ссылки с двумя компонентами ('зал/посмотреть-картину')\ отправят персонажа в новую ситуацию и тогда вызовут действие в\ текущей ситуации. Вы можете заменить имя ситуации точкой ('./посмотреть-картину'). В\ любом случае, если персонаж уже находится в этой ситуации, то её метод enter\ ещё раз вызываться не будет.
\ \ \Наконец, третий тип ссылок - это обычная гиперссылка. Если ваша\ ссылка не состоит из одного элемента или пары элементов, как описано выше, то\ Undum догадается, что вы имели в виду обычную гиперссылку. Например, \ как в этом случае.\ Если ваша ссылка всё-таки выглядит как ссылка Undum, то вы\ всё ещё можете заставить Undum не интерпретировать её как ситуацию или действие, добавив\ CSS класс raw к тегу HTML a.\ Ссылкам, которые не относятся к классу raw, но угадываются как\ не-Undum, класс raw добавится автоматически перед отображением.\ Это позволит вам выделить внешние ссылки особым образом, как мы сделали в этой игре.
\ \В последней ситуации я сказал, что вы можете остановить ссылки от превращения в обычный текст, когда\ вы меняете ситуацию. Это делается при помощи другого класса\ CSS: sticky. Когда вы\ покинете эту ситуацию, вы заметите, что внешняя ссылка осталась активной.\ Это позволяет вам предлагать ссылки, которые останутся рабочими в течение всего рассказа,\ например, ссылка заклинания телепортации домой.
" ), oneshot: new undum.SimpleSituation( "Ещё одна последняя настройка ссылок. Если вы назначите ссылке CSS класс\ once, то она исчезнет после нажатия. Это используется \ (проверьте сами) для\ действий, которые вы хотите сделать однократными. Нет смысла использовать\ 'once' на ссылках ситуаций, потому что они всё равно превратятся в текст, как только вы на них нажмёте\ ( конечно, если они не помечены как sticky).
Однократные ссылки полезны\ для таких действий, как внимательное изучение объекта. Вам не захочется\ повторять описание много раз, поэтому сделать ссылку однократной было бы\ дружелюбнее для пользователя.
\Если у вас более, чем одна ссылка относится к одному действию, то все соответсвующие ссылки\ будут удалены, так что вам не придётся заботиться о игроке, который найдёт способ\ ещё раз вызвать действие.
\После того, как вы нажмёте на ссылку, мы \ продолжим.
", { actions: { "one-time-action": "Как я уже говорил, однократные действия\ в большинстве своём используются для описания\ чего-то в деталях, когда вы не хотите повторять\ один и тот же текст описания в разных местах рассказа.
" } } ), qualities: new undum.SimpleSituation( "Хватит о ситуациях, давайте поговорим о персонаже. Персонаж описывается\ при помощи серии качеств. Это численные значения, которые могут описать\ всё от врождённых способностей до количества ресурсов,подконтрольных персонажу.\ Качества показаны в блоке справа от текста.
\ \Качества в этом блоке - это те, с которыми вы начали игру. Когда вы\ перейдёте к следующей ситуации, не отводите глаз\ от панели персонажа. Вы заметите, что я подниму ваше качество Ловкости.\ Этот процесс анимирован и подсвечен, чтобы привлечь ваше внимание.\ Также вы можете получить повышение Силы, выполнив\ это действие столько раз, сколько захочется.
", { actions: { "skill-boost": function(character, system, action) { system.setQuality("skill", character.qualities.skill+1); } }, exit: function(character, system, to) { system.setQuality("stamina", character.qualities.stamina+1); } } ), "quality-types": new undum.SimpleSituation( "Не все качества в панели персонажа отображаются как числа. Внутри они\ все числовые, но разные качества могут выбирать, как отображать себя. Например,\ Удача отображается словами (на основе шкалы прилагательных FUDGE RPG)\ ,а «Новичок» использует лишь галочку.
\ \Чтобы увидеть, как изменяется Удача, попробуйте использовать это\ удачное действие или это\ неудачное действие. Заметьте, как Удача\ использует числовой бонус, когда у неё заканчиваются слова. В Undum\ существует несколько различных видов отображения, и вы можете легко добавить своё.
\ \Когда вы покинете эту ситуацию,\ я поставлю «Новичок» на ноль. Смотрите на панель персонажа, и вы\ увидите, что Новичок решает, что ему более не нужно быть видимым, и удаляет себя.\ Вы также увидите,что,когда последнее качество в группе удаляется(а «Новичок» находится в группе «Прогресс»),\ тогда заголовок группы также удаляется. Вы можете сообщить Undum, какой группе\ принадлежит каждое из качеств, и в каком порядке они должны стоять.\
", { actions: { "luck-boost": function(character, system, action) { system.setQuality("luck", character.qualities.luck+1); }, "luck-reduce": function(character, system, action) { system.setQuality("luck", character.qualities.luck-1); } }, exit: function(character, system, to) { system.setQuality("novice", 0); } } ), "character-text": new undum.SimpleSituation( "
Над списком качеств находится коротенький кусочек текста, называемый\ текстом персонажа. Он как-то описывает героя. Он может быть задан\ любым действием или когда вы входите в или покидаете ситуацию.\ Это обычное содержимое HTML, как и любой другой текст в Undum.\ Он также может содержать ссылки Undum, так что это - ещё одно место, куда\ вы можете поместить действия, которые персонаж может выполнять в течение долгого периода времени.\
\Давайте продолжим к \ следующей ситуации. А пока вы это сделаете, я сменю\ текст персонажа. Заметьте, как он подсвечивается, в точности как и качество,\ когда изменяется.
", { exit: function(character, system, to) { system.setCharacterText( "Мы приближаемся к концу дороги.
" ); } } ), progress: new undum.SimpleSituation( "Иногда вы хотите сделать изменение качества более заметным событием.\ Вы можете сделать это, анимировав его. Если вы\ поднимете вашу Ловкость,\ то вы увидите, что Ловкость изменяется как обычно в панели персонажа.\ Но вы также увидите появление и анимацию полоски прогресса чуть ниже.
", { actions: { // Здесь я иду по неявному пути - ссылка выдаёт действие, // которое затем использует doLink, чтобы напрямую изменить // ситуацию. Это не рекомендованный путь (я мог бы // просто изменить ситуацию по ссылке, но он демонстрирует // использование doLink. "boost-stamina-action": function(character, system, action) { system.doLink("boost-stamina"); } }, exit: function(character, system, to) { system.animateQuality( 'stamina', character.qualities.stamina+1 ); } } ), "boost-stamina": new undum.SimpleSituation( "Полоса прогресса также удобна в ситуациях, где блок персонажа\ показывает только общее число качеств, а тем временем какое-нибудь действие меняет\ одно из них. Например, вы можете захотеть показать прогресс персонажа к следующему уровню - \ имея уровень персонажа качеством, конечно.
\ \ \После нескольких секунд, полоса прогресса исчезает, чтобы оставить\ внимание на тексте. Undum не сделан для игр, где нужно большое управление\ статистиками. Если вы хотите, чтобы изменение было частью постоянной\ записи игры, напишите его в тексте.
\ \А сейчас мы почти у конца дороги. Но пока что вы шли по этому обучению\ линейно - от одной ситуации до другой, без единого выбора.\ Undum сделан, чтобы поддерживать ветвящиеся и сливающиеся рассказы.\ В качестве маленькой иллюстрации\ этого, выберите сейчас между направлением по варианту\ один и по варианту два.
" ), one: new undum.SimpleSituation( "Вы выбрали первый вариант, и возможно, он лучший, так как вариант два\ написан на плохо зарифмованном коптском.\
\Отсюда остался всего лишь маленький шаг до последних\ кусочков текста в этом обучении.
" ), "two": new undum.SimpleSituation( "Вы выбрали второй вариант, и он также мой любимый. \ Я нахожу раздражительными фотографии, сопровождающие первый выбор.\ Ногти на пальцах не должны гнуться таким образом...
\Отсюда остался всего лишь маленький шаг до последних\ кусочков текста в этом обучении.
" ), // Опять, мы получаем текст из HTML файла. "saving": new undum.Situation({ enter: function(character, system, from) { system.write($("#s_saving").html()); } }), "last": new undum.SimpleSituation( "Итак, это всё. Мы показали весь Undum. Эта ситуация - конечная, поскольку\ в ней нет дальнейших ссылок. Сообщение «Конец» - это просто HTML вывод ситуации.\ В нём нет ничего особенного для Undum.
\ \Я добавил качество вдохновления в ваш листок персонажа.\ Настало время для вас вскрыть файл с игрой и написать свою собственную историю.
\Вы чувствуете себя вдохновлённым, почему бы не попробовать?
" ); } } ) }; // --------------------------------------------------------------------------- /* Идентификатор стартовой ситуации. */ undum.game.start = "start"; // --------------------------------------------------------------------------- /* Здесь мы определяем все качества, присущие нашим персонажам. * Мы не должны быть исчерпывающими, но если мы что-то пропустим, то * это качество никогда не покажется в панели персонажа. */ undum.game.qualities = { skill: new undum.IntegerQuality( "Сила", {priority:"0001", group:'stats'} ), stamina: new undum.NumericQuality( "Ловкость", {priority:"0002", group:'stats'} ), luck: new undum.FudgeAdjectivesQuality( // Fudge as in the FUDGE RPG "Удача", {priority:"0003", group:'stats'} ), inspiration: new undum.IntegerQuality( "Вдохновение", {priority:"0001", group:'progress'} ), novice: new undum.OnOffQuality( "Новичок", {priority:"0002", group:'progress', onDisplay:"✓"} ) }; // --------------------------------------------------------------------------- /* Качества отображаются по группам в панели персонажа. Эта функция определяет группы, * их заголовки (которые могут быть null - нет заголовка), и порядок. * Качества без группы появляются в конце. Описание качества, * приналежащее к несуществующей группе, является ошибкой.*/ undum.game.qualityGroups = { stats: new undum.QualityGroup(null, {priority:"0001"}), progress: new undum.QualityGroup('Прогресс', {priority:"0002"}) }; // --------------------------------------------------------------------------- /* Эта функция запускается перед началом игры. Обычно она используется * для того, чтобы настроить персонажа перед игрой. */ undum.game.init = function(character, system) { character.qualities.skill = 12; character.qualities.stamina = 12; character.qualities.luck = 0; character.qualities.novice = 1; system.setCharacterText("Вы начинаете захватывающее путешествие.
"); };