Почему игра забывает выборы игрока? Всё просто: вы не включили переменные

Бесит, что сюжет топчется на месте, а игра постоянно "забывает" решения игрока? Разбираемся, как заставить ваш выбор наконец-то работать с помощью переменных

Проблема: визуально ветвление есть, а на деле игра ничего не помнит

Мы добавили выбор и прописали разные реплики для Алекса и Джордана. В редакторе всё выглядит красиво - ветки событий расходятся в стороны, но вот загвоздка: выбор игрока не сохраняется и смысл выбора тут же исчезает.

История не сохраняется. Если дальше по сюжету вам понадобится реплика вроде «Ты же помнишь, что я уже приходил?», игра её не выдаст. У неё просто нет памяти. И сегодня мы этот пробел закроем.

Что такое переменная

Переменная - это значение с уникальным именем, которое история хранит и может менять по ходу игры. Например:

  • toldTruth - параметр, который фиксирует, вышла ли тайна наружу
  • mood - значение, которое меняется по мере того, как выборы игрока формируют сцену

Вы задаёте ей имя, тип (логический, целочисленный, текстовый и так далее) и начальное значение. Затем узлы читают её и записывают в неё.

Шаг 1 - Создайте переменную

Прежде чем использовать toldTruth, её обязательно нужно задать в системе, иначе движок её просто не увидит

  1. На панели инструментов графа откройте Переменные.
  2. Выберите Управлять переменными, затем Создать переменную.
  3. Укажите служебное имя - toldTruth - выберите тип boolean (логическое), а по умолчанию оставьте false (флажок с чекбоксом должен быть пустым).

Итого мы имеем: логическую переменную с собственным именем. По умолчанию она равна false, пока система не присвоит ей значение true.

Шаг 2 - Установите его, когда игрок выбирает опцию

Теперь свяжем выбор так, чтобы один ответ переключал значение. В графе опция реплики сама по себе не несёт значения - вы направляете её в узел Задать переменную.

  1. Выберите опцию «Я не был уверен, что приду» (ответ, где Джордан признаётся, что чуть не остался дома).
  2. Из выхода этой опции добавьте узел Задать переменную.
  3. В нём выберите переменную toldTruth и задайте её значение true.
  4. Продолжайте вести логику из этого узла туда, куда раньше вела стрелка ветвления.

То же самое сделайте с другой опцией, если хотите, чтобы она сохраняла другой исход, - иначе оставьте toldTruth со значением по умолчанию.

Шаг 3 - Появление реплики только в том случае, если этот параметр включен (равен true)

Так как toldTruth уже логического типа, прокинуть её напрямую:

  1. Добавьте узел данных Получить переменную, выберите toldTruth.
  2. Подключите её выход напрямую к пину условия узла Условие (ветвление) - сравнение не нужно, так как узел Условие принимает логическое значение напрямую.
  3. Реплику, которая должна играть только при toldTruth == true, поместите на ветку Да.

Теперь эта реплика появляется только тогда, когда игрок действительно изменил значение на true. На другой ветке - то, что должно произойти в противном случае.

Шаг 4 - Проверьте обе ветки в браузере

Запустите сцену прямо в редакторе кнопкой Запустить на панели инструментов.

  • Пройдите один путь - выберите опцию, которая устанавливает toldTruth = true - и убедитесь, что условная реплика показывается.
  • Пройдите другой путь - оставьте значение false - и убедитесь, что она остаётся скрытой.

Что вы решили сегодня

  • Вы объявили переменную (toldTruth) с типом и значением по умолчанию.
  • Вы установили её из выбора, направив опцию в узел Задать переменную.
  • Вы построили условие, подключив Получить переменную напрямую к узлу Условие.
  • Вы проверили обе ветки в браузере.

Игра теперь помнит, что выбрал игрок, - и действует на основе этого.

Что дальше: экспорт и публикация

Сцена разветвлённая и запоминающая состояние. Дальше мы экспортируем её и отдаём другим на прохождение. Экспортируйте в HTML5 для мгновенной браузерной игры или в Ren'Py, Ink, Yarn Spinner, Dialogic - для своего движка.

Попробуйте сейчас: откройте проект на scriptformer.com/app, добавьте переменную toldTruth и проведите один выбор через узел Set variable.


FAQ

Как создать переменную?

Откройте Переменные в панели инструментов графа, затем Управлять переменными и Задать переменную. Укажите служебное имя, тип и значение по умолчанию.

Задаёт ли опция выбора переменную сама по себе?

Нет. Опция только направляет к следующему узлу. Чтобы изменить значение, направьте опцию в узел Задать переменную, который его присваивает.

Как сделать реплику видимой только при условии?

Подключите выход логического узла Получить переменную к пину условия узла Условие и поместите реплику на ветку Да. Для значений не логического типа сначала соберите сравнение (например, через узел Равно).

Какими могут быть типы переменных?

Логическое, целочисленное, вещественное, текст, строковое или элемент - задаётся при создании переменной.

Как протестировать ветки?

Используйте Запустить на панели инструментов редактора и пройдите каждый путь. Плеер в редакторе и HTML5-экспорт ведут себя одинаково.

Назад к блогу