1
0
Fork 0
mirror of https://github.com/Oreolek/undum.git synced 2024-05-02 00:59:20 +03:00

Merge branch 'master' into core

Conflicts:
	games/media/js/undum.js
This commit is contained in:
Alexander Yakovlev 2014-08-13 23:33:23 +07:00
commit 7123ba0b55
5 changed files with 228 additions and 94 deletions

View file

@ -82,6 +82,8 @@
<p><em>Current Version (v. 2)</em></p>
<p>
<a href="/games/tutorial.en.html">Tutorial Game</a><br/>
<a href="/games/tutorial.ru.html">Русский</a><br/><br/>
<a href="/doc/index.html">Reference Documentation</a><br/>
<a href="http://github.com/idmillington/undum">Source Code</a>
</p>
@ -89,7 +91,6 @@
<p>
Tutorial game in:
<a href="/games/tutorial.de.html">Deutsch</a>,
<a href="/games/tutorial.ru.html">Русский</a>
</p>
<p class="legal">
The software and design &copy; 2010-2013 IDM.

View file

@ -54,7 +54,7 @@ undum.game.situations = {
todo: new undum.SimpleSituation(
"<p>Two things can happen in a situation. The character either\
<a href='links'>leaves</a> the situation and enters another one, or\
they carry out some <a href='./do-something'>action</a>. Actions may\
they carry out some <a href='./do-something?once'>action</a>. Actions may\
perform some processing, they may display some results, but\
ultimately they put the character back into the same situation\
again.</p>\

View file

@ -1,4 +1,4 @@
// Перевод на русский: Oreolek, 2010
// Перевод на русский: Oreolek, 2013
// ---------------------------------------------------------------------------
// Отредактируйте этот файл, чтобы описать вашу игру. Он должен иметь не
// менее четырёх разделов данных: undum.game.situations, undum.game.start,
@ -9,15 +9,34 @@
* Я использую UUID, но вы можеет использовать всё что гарантированно
* уникально (URL, которым вы владеете, или вариацию вашего адреса
* e-mail, например).*/
undum.game.id = "349baf43-9ade-49a8-86d0-24e3de3ce072";
undum.game.id = "349baf43-9ade-49a8-86d0-24e3de3ce042";
/* A string indicating what version of the game this is. Versions are
* used to control saved-games. If you change the content of a game,
* the saved games are unlikely to work. Changing this version number
* prevents Undum from trying to load the saved-game and crashing. */
undum.game.version = "1.0";
/* Ситуации, в которых может быть игра. Каждая имеет уникальный ID. */
// Строки локализации
undum.language["ru"]["start_title"] = "Знакомство с Undum";
undum.language["ru"]["situations_title"] = "Из чего сделаны игры Undum";
undum.language["ru"]["links_title"] = "Смена наполнения";
undum.language["ru"]["sticky_title"] = "Разные виды ссылок";
undum.language["en"]["qualities_title"] = "Qualities and the Character";
undum.language["ru"]["qualities_title"] = "Качества и персонаж";
undum.language["en"]["progress_title"] = "Showing a Progress Bar";
undum.language["ru"]["progress_title"] = "Отображение прогресса";
undum.language["en"]["saving_title"] = "Saving and Loading";
undum.language["ru"]["saving_title"] = "Сохранение и загрузка";
undum.language["en"]["last_title"] = "Finish the Tutorial";
undum.language["ru"]["last_title"] = "Закончить обучение";
undum.game.situations = {
start: new undum.SimpleSituation(
"<h1>Знакомство с Undum</h1>\
<img src='media/games/tutorial/woodcut1.png' class='float_right'>\
"<h1>"+"start_title".l()+"</h1>\
<img src='tutorial/woodcut1.png' class='float_right'>\
<p>Добро пожаловать в обучающую игру по Undum. Undum - это инструмент для написания\
гипертекстовой интерактивной литературы. Он обладает некоторыми уникальными возможностями\
и визуальным дизайном, который поддерживает повествующие игры.</p>\
@ -30,15 +49,21 @@ undum.game.situations = {
и представить более интересные элементы игры.</p>\
\
<p class='transient'>А сейчас давайте продолжим обучение.\
<a href='rooms'>Нажмите на эту ссылку</a>, чтобы продвинуться дальше.</p>"
<a href='hub'>Нажмите на эту ссылку</a>, чтобы продвинуться дальше.</p>"
),
// NB: Ситуация 'hub', основной список тем, задана полностью в HTML, и не редактируется вручную
// через словарь game.situations в этом файле.
// Для разнообразия, здесь мы задаём ситуацию, используя высокоуровневый тип Situation.
// Это прекрасный подход, чтобы сгенерировать текст, просто найдя его в HTML документе.
// Для статичного текста в этом больше смысла, чем записывать его просто так.
rooms: new undum.Situation({
situations: new undum.Situation({
enter: function(character, system, from) {
system.write($("#s_rooms").html());
}
system.write($("#s_situations").html());
},
tags: ["topic"],
optionText: "situations_title".l(),
displayOrder: 1
}),
todo: new undum.SimpleSituation(
"<p>В ситуации может произойти две вещи. Либо персонаж\
@ -48,7 +73,7 @@ undum.game.situations = {
все они возвращают персонажа обратно в ту же ситуацию.</p>\
\
<p>Когда вы создаёте свою игру, используйте ситуации, чтобы отразить\
изменения в том, что может сделать персонаж. Так, вы можете изменить ситуацию если персонаж\
изменения в том, что може сделать персонаж. Так, вы можете изменить ситуацию если персонаж\
тянет рычаг, чтобы открыть люк, например. Действия\
предназначены для ситуаций, где персонаж может изучать вещи более пристально\
, а может быть улучшить свою магию, выпив зелья.\
@ -76,8 +101,7 @@ undum.game.situations = {
}
),
links: new undum.SimpleSituation(
"<h1>Смена наполнения</h1>\
<p>Между каждым кусочком нового текста Undum вставляет отчётливую линию\
"<p>Между каждым кусочком нового текста Undum вставляет отчётливую линию\
на полях. Она позволяет вам быстро увидеть всё, что было выдано\
в качестве результата вашего последнего клика.\
Это очень удобно для маленьких устройств, или когда появилось\
@ -96,18 +120,23 @@ undum.game.situations = {
и может быть применён к параграфам, div'ам или просто\
span'ам<span class='transient'> (как вот этот)</span>.</p>\
\
<p>Также вы могли заметить, что, когда вы перемещаетесь в другую ситуацию, все ссылки\
<p>также вы могли заметить, что, когда вы перемещаетесь в другую ситуацию, все ссылки\
в предыдущей превращаются в обычный текст. Это сделано для того, чтобы не дать вам\
отступить и попробовать предыдущие варианты ответа, когда вы уже выбрали один из них.\
В других H-IF системах это делается при помощи полной очистки предыдущих страниц.\
В других системах гипертекстовой интерактивной литературы это делается при помощи полной очистки предыдущих страниц.\
Но это не позволяет вам вернуться и перечитать вашу историю.</p>\
\
<p class='transient'>Давайте узнаем больше о ссылках и посмотри, как <a href='sticky'>изменить</a> это поведение.</p>"
<p class='transient'>Тема \""+"sticky_title".l()+"\" содержит больше информации об этих ссылках.\
Вернёмся к <a href='hub'>списку тем</a>.</p>.",
{
heading: "links_title".l(),
diplayOrder: 2,
tags: ["topic"]
}
),
sticky: new undum.SimpleSituation(
"<h1>Ссылки</h1>\
<p>В undum существует три типа ссылок. Мы уже видели первые два:\
ссылки смены ситуаций и ссылки, вызывающие действие. Когда вы\
"<p>В Undum существует три типа ссылок. Мы уже видели первые два:\
ссылки смены ситцаций и ссылки, вызывающие действие. Когда вы\
включаете ссылку в ваш текст, undum распознаёт её и оформляет\
подобающим образом. Если вы создаёте ссылку с атрибутом HTML <em>href</em>,\
содержащим только имя ('зал', например), то она отправит персонажа\
@ -117,11 +146,11 @@ undum.game.situations = {
любом случае, если персонаж уже находится в этой ситуации, то её метод <em>enter</em>\
ещё раз вызываться не будет.</p>\
\
<img src='media/games/tutorial/woodcut2.png' class='float_left'>\
<img src='tutorial/woodcut2.png' class='float_left'>\
<p>Наконец, третий тип ссылок - это обычная гиперссылка. Если ваша\
ссылка не состоит из одного элемента или пары элементов, как описано выше, то\
Undum догадается, что вы имели в виду обычную гиперссылку. Например, \
<a href='http://www.bbc.co.uk/russian/' class='sticky'>как в этом случае.</a>\
<a href='http://www.bbc.co.uk/russian/' class='sticky' target='_blank'>как в этом случае.</a>\
Если ваша ссылка всё-таки <em>выглядит</em> как ссылка Undum, то вы\
всё ещё можете заставить Undum не интерпретировать её как ситуацию или действие, добавив\
CSS класс <em>raw</em> к тегу HTML <em>a.</em>\
@ -134,7 +163,12 @@ undum.game.situations = {
CSS: <em>sticky</em>. Когда вы\
<a href='oneshot'>покинете эту ситуацию</a>, вы заметите, что внешняя ссылка осталась активной.\
Это позволяет вам предлагать ссылки, которые останутся рабочими в течение всего рассказа,\
например, ссылка заклинания телепортации домой.</p>"
например, ссылка заклинания телепортации домой.</p>",
{
tags: ["topic"],
displayOrder: 3,
heading: "sticky_title".l()
}
),
oneshot: new undum.SimpleSituation(
"<p>Ещё одна последняя настройка ссылок. Если вы назначите ссылке CSS класс\
@ -150,7 +184,7 @@ undum.game.situations = {
будут удалены, так что вам не придётся заботиться о игроке, который найдёт способ\
ещё раз вызвать действие.</p>\
<p class='transient'>После того, как вы нажмёте на ссылку, мы \
<a href='qualities'>продолжим.</a></p>",
<a href='hub'>продолжим.</a></p>",
{
actions: {
"one-time-action": "<p>Как я уже говорил, однократные действия\
@ -161,8 +195,7 @@ undum.game.situations = {
}
),
qualities: new undum.SimpleSituation(
"<h1>Качества</h1>\
<p>Хватит о ситуациях, давайте поговорим о персонаже. Персонаж описывается\
"<p>Хватит о ситуациях, давайте поговорим о персонаже. Персонаж описывается\
при помощи серии <em>качеств.</em> Это численные значения, которые могут описать\
всё от врождённых способностей до количества ресурсов,подконтрольных персонажу.\
Качества показаны в блоке справа от текста.</p>\
@ -174,6 +207,9 @@ undum.game.situations = {
Также вы можете получить повышение Силы, выполнив\
<a href='./skill-boost'>это действие</a> столько раз, сколько захочется.</p>",
{
heading: "qualities_title".l(),
tags: ["topic"],
displayOrder: 4,
actions: {
"skill-boost": function(character, system, action) {
system.setQuality("skill", character.qualities.skill+1);
@ -226,8 +262,8 @@ undum.game.situations = {
Он также может содержать ссылки Undum, так что это - ещё одно место, куда\
вы можете поместить действия, которые персонаж может выполнять в течение долгого периода времени.\
</p>\
<p class='transient'>Давайте продолжим к \
<a href='progress'>следующей ситуации.</a> А пока вы это сделаете, я сменю\
<p class='transient'>Давайте вернёмся к <a href='hub'>списку.</a>\
А пока вы это сделаете, я сменю\
текст персонажа. Заметьте, как он подсвечивается, в точности как и качество,\
когда изменяется.</p>",
{
@ -239,13 +275,15 @@ undum.game.situations = {
}
),
progress: new undum.SimpleSituation(
"<h1>Отображение Прогресса</h1>\
<p>Иногда вы хотите сделать изменение качества более заметным событием.\
"<p>Иногда вы хотите сделать изменение качества более заметным событием.\
Вы можете сделать это, анимировав его. Если вы\
<a href='./boost-stamina-action'>поднимете вашу Ловкость</a>,\
то вы увидите, что Ловкость изменяется как обычно в панели персонажа.\
Но вы также увидите появление и анимацию полоски прогресса чуть ниже.</p>",
{
tags: ["topic"],
heading: "progress_title".l(),
displayOrder: 5,
actions: {
// Здесь я иду по неявному пути - ссылка выдаёт действие,
// которое затем использует doLink, чтобы напрямую изменить
@ -269,41 +307,87 @@ undum.game.situations = {
одно из них. Например, вы можете захотеть показать прогресс персонажа к следующему уровню - \
имея уровень персонажа качеством, конечно.</p>\
\
<img src='media/games/tutorial/woodcut3.png' class='float_right'>\
<img src='tutorial/woodcut3.png' class='float_right'>\
<p>После нескольких секунд, полоса прогресса исчезает, чтобы оставить\
внимание на тексте. Undum не сделан для игр, где нужно большое управление\
статистиками. Если вы хотите, чтобы изменение было частью постоянной\
записи игры, напишите его в тексте.</p>\
\
<p>А сейчас мы почти у конца дороги. Но пока что вы шли по этому обучению\
линейно - от одной ситуации до другой, без единого выбора.\
Undum сделан, чтобы поддерживать ветвящиеся и сливающиеся рассказы.\
<span class='transient'>В качестве маленькой иллюстрации\
этого, выберите сейчас между направлением по <a href='one'>варианту\
один</a> и по <a href='two'>варианту два.</a></span></p>"
),
one: new undum.SimpleSituation(
"<h1>Вариант Один</h1>\
<p>Вы выбрали первый вариант, и возможно, он лучший, так как вариант два\
написан на плохо зарифмованном коптском.\
</p>\
<p>Отсюда остался всего лишь <a href='saving'>маленький шаг</a> до последних\
кусочков текста в этом обучении.</p>"
),
"two": new undum.SimpleSituation(
"<h1>Вариант Два</h1>\
<p>Вы выбрали второй вариант, и он также мой любимый. \
Я нахожу раздражительными фотографии, сопровождающие первый выбор.\
Ногти на пальцах не должны гнуться таким образом...</p>\
<p>Отсюда остался всего лишь <a href='saving'>маленький шаг</a> до последних\
кусочков текста в этом обучении.</p>"
<p class='transient'>Давайте почитаем про <a href='hub'>что-нибудь ещё.</a></p>"
),
// Опять, мы получаем текст из HTML файла.
"saving": new undum.Situation({
enter: function(character, system, from) {
system.write($("#s_saving").html());
}
},
tags: ["topic"],
displayOrder: 6,
optionText: "saving_title".l(),
}),
"implicit-boost": new undum.SimpleSituation(
"<p>Ваша Удача была увеличена<span class='transient'>, проверьте список \
ссылок, вдруг они изменились?</span>.</p>",
{
tags: ["example"],
enter: function(character, system, from) {
system.animateQuality("luck", character.qualities.luck+1)
system.doLink('example-choices');
},
optionText: "Увеличить вашу Удачу",
displayOrder: 1,
canView: function(character, system, host) {
return character.qualities.luck < 4;
}
}
),
"implicit-drop": new undum.SimpleSituation(
"<p>Ваша Удача была уменьшена<span class='transient'>, проверьте список \
ссылок, вдруг они изменились?</span>.</p>",
{
tags: ["example"],
enter: function(character, system, from) {
system.animateQuality("luck", character.qualities.luck-1)
system.doLink('example-choices');
},
optionText: "Уменьшить вашу Удачу",
displayOrder: 2,
canView: function(character, system, host) {
return character.qualities.luck > -4;
}
}
),
"high-luck-only": new undum.SimpleSituation(
"<p>Ваша Удача выше чем 'нормально'. Ссылка на эту ситуацию не появилась бы, \
если бы вам она была меньше.</p>",
{
tags: ["example"],
enter: function(character, system, from) {
system.doLink('example-choices');
},
optionText: "Выбор Большой Удачи",
displayOrder: 3,
canView: function(character, system, host) {
return character.qualities.luck > 0;
}
}
),
"low-luck-only": new undum.SimpleSituation(
"<p>Ваша Удача ниже, чем 'нормально'. Ссылка на эту ситуацию появляется \
в любом случае, но вы можете выбрать её только если вы сбросите Удачу.\
Это проверяет метод <em>canChoose</em>.</p>",
{
tags: ["example"],
enter: function(character, system, from) {
system.doLink('example-choices');
},
optionText: "Выбор Низкой Удачи (треубет низкую Удачу для нажатия)",
displayOrder: 3,
canChoose: function(character, system, host) {
return character.qualities.luck < 0;
}
}
),
"last": new undum.SimpleSituation(
"<h1>Куда теперь</h1>\
<p>Итак, это всё. Мы показали весь Undum. Эта ситуация - конечная, поскольку\
@ -314,6 +398,9 @@ undum.game.situations = {
Настало время для вас вскрыть файл с игрой и написать свою собственную историю.</p>\
<h1>Конец</h1>",
{
tags: ["topic"],
optionText: "last_title".l(),
displayOrder: 8,
enter: function(character, system, from) {
system.setQuality("inspiration", 1);
system.setCharacterText(

View file

@ -310,6 +310,7 @@
system.writeHeading(this.heading);
}
}
if (this._enter) this._enter(character, system, from);
if (this.content) {
if ($.isFunction(this.content)) {
system.write(this.content());
@ -323,7 +324,6 @@
this.maxChoices);
system.writeChoices(choices);
}
if (this._enter) this._enter(character, system, from);
};
SimpleSituation.prototype.act = function(character, system, action) {
var response = this.actions[action];
@ -1481,7 +1481,7 @@
/* This gets called when a link needs to be followed, regardless
* of whether it was user action that initiated it. */
var linkRe = /^([-a-z0-9]+|\.)(\/([-0-9a-z]+))?$/;
var linkRe = /^([a-z0-9_-]+|\.)(\/([0-9a-z_-]+))?$/;
var processLink = function(code) {
// Check if we should do this now, or if processing is already
// underway.
@ -1589,22 +1589,26 @@
// Remove links and transient sections.
$('#content a').each(function(index, element) {
var a = $(element);
if (a.hasClass('sticky')) return;
if (a.hasClass('sticky') || a.attr("href").match(/[?&]sticky[=&]?/))
return;
a.replaceWith($("<span>").addClass("ex_link").html(a.html()));
});
var contentToHide = $('#content .transient, #content ul.options');
contentToHide.add($("#content a").filter(function(){
return this.attr("href").match(/[?&]transient[=&]?/);
}));
if (interactive) {
if (mobile) {
$('#content .transient, #content ul.options').
fadeOut(2000);
contentToHide.fadeOut(2000);
} else {
$('#content .transient, #content ul.options').
animate({opacity: 0}, 1500).
slideUp(500, function() {
$(this).remove();
});
contentToHide.
animate({opacity: 0}, 1500).
slideUp(500, function() {
$(this).remove();
});
}
} else {
$('#content .transient, #content ul.options').remove();
contentToHide.remove();
}
}
@ -1631,16 +1635,17 @@
// Wire up the links for regular <a> tags.
output.find("a").each(function(index, element) {
var a = $(element);
if (!a.hasClass("raw")) {
var href = a.attr('href');
var href = a.attr('href');
if (!a.hasClass("raw")|| href.match(/[?&]raw[=&]?/)) {
if (href.match(linkRe)) {
a.click(function(event) {
event.preventDefault();
// If we're a once-click, remove all matching
// links.
if (system.options.repeatable_links == false
|| (system.options.repeatable_links == true && a.hasClass("once"))) {
if (system.options.repeatable_links === false
|| (system.options.repeatable_links === true
&& (a.hasClass("once") || href.match(/[?&]once[=&]?/)))) {
system.clearLinks(href);
}

View file

@ -6,22 +6,26 @@
<title>Undum</title>
<!-- Конец названия игры -->
<link href="http://fonts.googleapis.com/css?family=Tangerline" rel="stylesheet" type="text/css">
<!-- Это стиль оформления вашей игры, измените его если вам хочется. -->
<link rel="stylesheet" href="media/css/undum.css" media="screen">
<!-- Поддержка переносных устройств. -->
<meta name="viewport" content="user-scalable=no, width=device-width">
<link rel="apple-touch-icon" href="media/img/iphone/icon.png">
<link rel="apple-touch-startup-image" href="media/img/iphone/splash.png">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<!--[if !IE]>-->
<link media="only screen and (max-width: 640px)" rel="stylesheet" type="text/css" href="media/css/undum-mobile.css">
<link media="only screen and (max-width: 640px)"
rel="stylesheet" type="text/css" href="media/css/undum-mobile.css">
<!--<![endif]-->
</head>
<body>
<!-- Это меню для мобильных устройств.
На широких экранах постоянно присутствует вся информация, это меню на них скрыто. -->
<div id="toolbar">
<!-- Краткая версия заголовка, для панели на мобильных устройствах. -->
<h1>Undum</h1>
<div class="nav">
<a href="#" class="button" id="menu-button">Меню</a>
@ -36,19 +40,19 @@
<div id="page">
<div id="tools_wrapper">
<div id="info_panel" class="tools left">
<div id="info_panel" class="tools left hyphenate">
<!-- Предыстория игры; отредактируйте это. -->
<!-- Информация об игре, предыстория; отредактируйте это. -->
<h1>Undum</h1>
<p>
Undum - это чисто клиентский (client-side) игровой движок для повествовательной интерактивной литературы.
Он создан для HTML&#x200A;5 и CSS&#x200A;3. Вы можете прочитать о нём и скачать исходный код
<a href="http://github.com/idmillington/undum">здесь</a>.
<a href="https://github.com/oreolek/undum">здесь</a>.
</p>
<!-- Конец предыстории -->
<div class='buttons'>
<button id="save">Сохранить</button><button id="erase">Стереть</button>
<button id="save">Запомнить</button><button id="erase">Забыть</button>
</div>
</div>
@ -56,7 +60,7 @@
<h1>Персонаж</h1>
<div id="character">
<div id="character_text">
<div id="character_text_content"></div>
<div id="character_text_content" class="hyphenate"></div>
</div>
<div id="qualities"></div>
</div>
@ -68,33 +72,28 @@
<div class="label">
<!-- Приветствие игры; отредактируйте это -->
<h1>Обучение Undum <span class='fancy'>&amp;</span><br>
Интерактивный Пример</h1>
<h2>Автор: I. D. Millington<br>
Переводчик: Oreolek</h2>
<h1><span class="fancy">Undum</span></h1>
<h2>Движок гипертекстовых игр</h2>
<!-- Конец приветствия -->
<noscript><p class="noscript_message">This game requires
Javascript.</p></noscript>
<noscript><p class="noscript_message">Эта игра требует включённого Javascript.</p></noscript>
<p class="click_message">Нажмите, чтобы начать</p>
</div>
</div>
<div id="content_wrapper">
<div id="content">
<div id="content" class="hyphenate">
</div>
<a name="end_of_content"></a>
</div>
<div id="legal">
<!-- Ваш копирайт; отредактируйте это -->
<p>Содержимое, дополнительное программное обеспечение и дизайн &copy; 2010 IDM.</p>
<p>Содержимое, дополнительное программное обеспечение и дизайн &copy; <a href="../index.html#CREDITS">авторы Undum.</a></p>
<!-- Конец вашего копирайта -->
<!-- Эта линия копирайта должна остаться в вашем финальном файле. -->
<!-- Нам будет приятно, если вы оставите эту ссылку в своей игре. -->
<p>
Программное обеспечение и дизайн &copy; 2010 IDM. Undum доступен
<a href="http://github.com/idmillington/undum">здесь</a>.
Производные работы должны включать это сообщение о копирайте и ссылку.
Создано с использованием <a href="http://undum.com">Undum.</a>
</p>
</div>
</div>
@ -132,13 +131,13 @@
не хотите хранить в коде игры. Посмотрите файл tutorial.game.js для того,чтобы понять,
как это используется. -->
<div id="content_library">
<div id="s_rooms">
<div id="s_situations">
<h1>Ситуации</h1>
<p>В Undum, любое взаимодействие происходит в ситуации. Вы можете думать о ситуации
либо как о 'Комнате' (Room) в традиционной интерактивной литературе (хотя
этот подход не так гибок), или как о 'Странице' в книге-игре. В любой момент времени,
персонаж находится точно в одной ситуации, и эта ситуация отвечает за всё,
что происходит с ним.</p>
что происхожит с ним.</p>
<p>Ситуации - это кусочки кода, которые генерируют вывод - то есть то, что вы сейчас читаете.
Например, этот текст был сгенерирован методом <em>enter</em> первой ситуации.
</p>
@ -171,18 +170,60 @@
всю игру, чтобы увидеть изменения.
</p>
<p class='transient'>
Настало время для <a href='last'>последней секции.</a>
Давайте вернёмся к <a href='hub'>списку тем</a>.
</p>
</div>
<!-- Некоторые ситуации объявлены полностью в HTML -->
<div id="hub" class="situation" data-choices="#topic"
data-option-text="Список тем" data-show-visited='false'>
<h1 class="transient">Темы</h1>
<p class="transient">Выберите тему, о которой вы хотите узнать подробнее. Если вы сомневаетесь, пройдите по порядку.</p>
</div>
<div id="implicit" class="situation" data-tags="topic"
data-heading="Неявный выбор" data-display-order="7"
data-choices="#example">
<p>Когда вы пишете игру на Undum, вам может понадобиться сделать так,
чтобы некоторые возможности появлялись только при соблюдении определённых
условий. У вас может быть возможность снять секретную панель в старинном
доме с привидениями, но она должна быть доступна только если персонаж знает, где
она находится. </p>
<p>Если возможности доступны в нескольких ситуациях, за ними будет трудно следить,
чтобы нарисовать список из именно доступных вариантов выбора.</p>
<p>Чтобы помочь, Undum может составлять списки ссылок на ситуации за вас.
Он делает это в три шага. Сначала, каждой ситуации вы назначаете одну или
больше меток (тегов). Это позволит вам, например, попросить список ситуаций
с меткой <em>"в коридоре".</em></p>
<p>Во-вторых, ситуации имеют метод <em>canView,</em> который решает, может
ли эта ситуация появляться в списках. Этот метод может следить за сложными
зависимостями, по-своему оценивать текущее состояние игры.</p>
<p>Наконец, ситуации <em>SimpleSituation</em> имеют опцию <em>choices</em>.
Если вы запишете в неё одну или несколько меток, то построение списков выбора
будет полностью автоматизировано.</p>
<p>Вы уже видели это в списке тем. Список тем генерируется автоматически.
В нём включена опция скрытия тем, которые вы уже посещали.
<span class="transient">Давайте посмотрим на более сложный пример автоматического
списка, который может меняться:</span></p>
</div>
<div id="example-choices" class="situation" data-choices="#example">
<p class="transient">Вы можете вернуться к <a href='hub'>списку тем</a> или выбрать другую
ссылку из этого примера:</p>
</div>
</div>
<!-- Загружаем необходимые библиотеки -->
<script type="text/javascript" src="media/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/hyphenator/4.2.0/hyphenator.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/hyphenator/4.2.0/patterns/ru.js"></script>
<script type="text/javascript" src="media/js/undum.js"></script>
<script type="text/javascript" src="media/js/lang/ru.js"></script>
<script type="text/javascript">
Hyphenator.run();
</script>
<!-- Задайте здесь путь к главному файлу с вашей игрой. -->
<script type="text/javascript"
src="media/games/tutorial/tutorial.game.ru.js"></script>
<script type="text/javascript" src="media/games/tutorial/tutorial.game.ru.js"></script>
</body>
</html>