Авторизация
×

Логин (e-mail)

Пароль

Интерактивные истории, текстовые игры, квесты и визуальные новеллы
Гиперкнига

Библиотека    Блог

Пишем интерактивную историю вместе. Часть 19-я

Борис Семёнов (Morych), 15.07.13 | Практика ASM

Помощь и подсказки

В процессе написания интерактивной истории нужно стараться помнить, что читать наше произведение будут совершенно разные люди. Например, некоторые читатели вполне могут столкнуться с интерактивной литературой впервые. Поэтому неплохо было бы предусмотреть систему подсказок, которые помогли бы новичку в продвижении по сюжету.

Допустим, в тех моментах истории, когда возможно использование предметов инвентаря, рядом со ссылкой «инвентарь» можно выводить специальное уведомление. Само собой, нужно учесть интересы опытных читателей и сделать эти уведомления отключаемыми. Начнём с редактирования параграфа «Заголовок»:

Заголовок

<<if $показать_инвентарь>>
    <<display 'Подсказки'>>
    <<if ($подсказка) and ($показать_подсказки)>>
        @@@''~~([[+!|Подсказка использование]]) [[+инвентарь|Инвентарь]]~~''@@@
    <<else>>

        @@@''~~[[+инвентарь|Инвентарь]]~~''@@@
    <<endif>>
<<endif>>
===''<<print $сцена>>''===
----

Значение объекта «$подсказка» мы будем устанавливать в «true» в тех случаях, когда у предметов в инвентаре появляются действия, в остальных случаях значением объекта будет «false». Условия появления действий мы подсмотрим в параграфе «Описания предметов». Чтобы не загромождать параграф «Заголовок», добавим ещё один параграф «Подсказки», который будем вызывать макросом «display»:

Подсказки

<<if ($сцена eq 'Поляна') and ($поляна gt 1) and ($поляна lt 10) and ($нож)>>
    <<set $подсказка = true>>
<<else>>
    <<set $подсказка = false>>
<<endif>>

По мере появления новых действий предметов, будем добавлять соответствующие условия в параграф «Подсказки».

Как можно заметить, наше уведомление в виде восклицательного знака около надписи «инвентарь» является добавляющей ссылкой на параграф «Подсказка использование». В этом параграфе всего одно предложение:

Подсказка использование

***
Возможно, кое-что из моего скарба мне пригодится...

Объект «$показать_подсказки» служит для читательской настройки отображения подсказок. По умолчанию значение объекта будет равно «true», т.е. подсказки будут включены, но читатель перед началом прохождения сможет поменять значение объекта по своему желанию. Начальные значения таких объектов, как «$показать_подсказки», отвечающих за настройки истории, нужно устанавливать в параграфе «Start», а не в параграфе «Создание объектов», как мы делали для всех прочих объектов. Делать это нужно для того, чтобы выбранные однажды настройки не сбрасывались в начале каждого прохождения. Конечно, если читатель нажмёт кнопку «Начать заново» или закроет браузер, значения настроек всё равно сбросятся.

Итак, чтобы опытный читатель мог отключить подсказки, добавим новый параграф «Настройки»:

Настройки

===''Настройки''===
----
<<if $показать_подсказки>>
    ===Подсказки сейчас ''включены''<<br>>[[Не показывать подсказки|Настройки {$показать_подсказки = false}]]===
<<else>>
    ===Подсказки сейчас ''отключены''<<br>>[[Показывать подсказки|Настройки {$показать_подсказки = true}]]===
<<endif>>
===[[''Назад''|Обложка]]===

И, конечно, не забудем про ссылку на этот параграф в параграфе «Обложка».

Подсказки можно сделать и более конкретными. Например, давайте отредактируем параграф «Поляна» следующим образом:

Поляна

...
<<elseif $поляна lt 4>>
    # Герой повернул направо или налево
    Я решил <<if $поляна eq 2>>пойти налево. Ну, а почему бы и нет?<<else>>пойти направо, всё ж таки «правая тропа» по-лучше звучит.<<endif>> И вскоре дорога снова привела меня на поляну, которая была в точности такой же, как и предыдущая: тоже большая и круглая, и похожий пень посерёдке... да и развилка опять же. Всё это было как-то странно, но тревожиться я не спешил.
    <<if ($нож) and ($показать_подсказки)>>
        В этот момент я как раз вспомнил, что у меня за пазухой [[*нож|Описания предметов {$предмет = 'нож'}]] имеется...
    <<endif>>

    <<if $поляна eq 2>>
        [[Снова повернуть налево|Поляна {$поляна = 5}]]
        [[Теперь повернуть направо|Поляна {$поляна = 7}]]
    <<else>>
        [[Теперь повернуть налево|Поляна {$поляна = 8}]]
        [[Снова повернуть направо|Поляна {$поляна = 6}]]
    <<endif>>
    [[Вернуться назад|Поляна {$поляна = 4}]]
<<elseif $поляна eq 4>>
...

Если подсказки включены, и в инвентаре имеется нож, кроме простого уведомления будет отображаться ещё и наводящее предложение про нож. Причём, нож можно будет выбрать, даже не нажимая ссылку «инвентарь». Самое время посмотреть, что у нас получилось:

Рисунок 14 — Подсказки.

Помогать читателю можно не только подсказками. К примеру, есть в нашей истории момент, когда читатель должен ввести имя главного героя, иначе продвинуться дальше по сюжету не удастся. Лично я как раз отношусь к тем читателям, которым лениво что-либо вводить с клавиатуры. Более того, можно потратить немалое время, подбирая персонажу подходящее имя.

Что ж, давайте добавим возможность автоматического задания имени, и для этого редактируем параграф «Разговор с лешим»:

Разговор с лешим

...
<<if $диалог_леший eq 6>>
    <<set $диалог_леший = 7>>
    <<display 'Леший'>>
    <<display 'Придумать имя'>>
    -- Ну, -- заговорил он, -- чего встал столбом? Сказывай давай, как звать-величать, и с какого-такого перепугу домовые в леса подались?
    //Назову-ка я лешему такое прозвище://
    <<input 'Разговор с лешим' $имя>>
    [[Придумать какое-нибудь прозвище|Разговор с лешим]]
<<endif>>

Автоматическое имя будет случайным образом выбираться в параграфе «Придумать имя»:

Придумать имя

<<random $шанс = 10>>
<<if $шанс eq 0>>
    <<set $имя = 'Лапоток'>>
<<elseif $шанс eq 1>>
    <<set $имя = 'Добрёнок'>>
<<elseif $шанс eq 2>>
    <<set $имя = 'Подлав'>>
<<elseif $шанс eq 3>>
    <<set $имя = 'Сопун'>>
<<elseif $шанс eq 4>>
    <<set $имя = 'Кумяш'>>
<<elseif $шанс eq 5>>
    <<set $имя = 'Закромка'>>
<<elseif $шанс eq 6>>
    <<set $имя = 'Топотун'>>
<<elseif $шанс eq 7>>
    <<set $имя = 'Шарашка'>>
<<elseif $шанс eq 8>>
    <<set $имя = 'Шебуршун'>>
<<elseif $шанс eq 9>>
    <<set $имя = 'Торопыга'>>
<<else>>
    <<set $имя = 'Нафаня'>>
<<endif>>

Продолжение следует...

Комментарии: 3.

Профиль


Закрыть
Эдуард Печенежский
05.08.13 20:43

Интересно — после написания истории, она будет в библиотеке целиком?
DoubleDragon
05.08.13 21:37

Я, во всяком случае, надеюсь на это :)
Morych
09.08.13 00:43

Да, обязательно будет. Более того, в историю добавится кое-что новенькое, чего нет в учебнике. :)

Для того, чтобы оставлять комментарии, необходимо зарегистрироваться и подтвердить в профиле указанный e-mail адрес.

При использовании любых материалов блога обязательно указание ссылки на источник