В набор переменных мы можем вносить разные по функциональности переменные, объединенные общим признаком. Это могут быть и логические, и целочисленные, и строковые переменные. Например, если мы имеем дело с Инвентарем (Inventory), то можем столкнуться с тем, что на каком-то этапе повествования сумеем открыть в данной локации инвентарь или нет (логическая переменная: true или false), далее получить в него некое количество предметов (целочисленная переменная: +1 или +10), а также получить в инвентарь особый магический предмет, у которого есть имя (строковая переменная: «Меч Эскалибур»).
Условие (Condition)
Говоря о переменных, мы непременно сталкиваемся с условиями их использования и проверкой, исходя из которых и происходит ветвление сюжета. Обычно условиями мы проверяем логические и целочисленные переменные в ключевых сюжетных узлах, диалогах, особенных сценах, развилках пути и других элементах геймплейного повествования.
Условием с логической переменной мы проверяем наличие или отсутствие того или иного произошедшего события и игровой сущности.
Давайте рассмотрим на примере.
Итак, Мария получила в подарок от Деда Мороза либо мишку, либо куклу. И вот настал момент, когда нам нужно проверить это событие. Для этого мы делаем условие (condition) с уже знакомыми установками по переменной Bear:
● true (да, правда) – это наличие медведя;
● false (нет, ложь) – это отсутствие медведя (наличие куклы).
В зависимости от того, какой был сделан и запомнен выбор, развиваются сюжетные события через проверку условий.
Условие с целочисленной переменной проверяется через обычные математические равенства.
Давайте рассмотрим на примере.
Деду Морозу нужно проверить, упаковал ли вчера он 10 мишек. Для этого мы делаем проверку через глобальную переменную Gifts и переменные внутри нее Bear.
Мы также можем пользоваться знаками больше (>) или меньше (<), а также равно (=).
Например, Деду Морозу важно понять, упаковал он вчера больше 5 мишек или нет.
Использование переменных в интерактивных историях
Применение переменных может быть абсолютно разным – все зависит от целей проекта. Приведем примеры лишь некоторых из них.
● Отношения персонажей
● Выборы
● Статы
● Инвентарь
● Имена
С помощью целочисленных переменных мы можем в течение истории прибавлять и убавлять единицы в отношениях с теми или иными персонажами, а в ключевых моментах делать проверки (condition). Например, если отношения с персонажем А были положительные и накоплено больше какого-либо числа, то А поможет главному герою в финальной битве с жутким драконом, что значительно увеличит шансы на победу. Если меньше, то придется справляться самому или искать другие пути.
С помощью логических переменных мы можем делать запоминание ответов в диалогах. В зависимости от выбора ответов игрока в беседе персонажей будет зависеть дальнейшее развитие сюжета и разветвляться повествование. Например, главный герой из двух напитков – чай или кофе – выбрал кофе, и в следующем эпизоде его потчуют именно им, что повышает в истории агентивность.
С помощью целочисленных переменных игрок может прокачивать определенный стат, от чего будет зависеть, как он себя поведет в ключевых сюжетных развилках. Например, будет ли это развитие характеристик воина, мага или купца.
Переменная Inventory довольно часто применяется в играх. Она может быть целочисленной или логической. В первом варианте: когда у нас прокачивается, например, оружие или волшебный артефакт. Во втором варианте: когда у нас есть возможность открыть, взять и использовать предмет при определенных обстоятельствах.
Строковые переменные дают возможность давать имена, а также указывать конкретные названия на локациях, предметах, игровых сущностях, направлять фокус внимания игрока. Например, мы можем задавать на локации определенные точки, куда будет направляться камера: Camera.Forest (фокусировка на лес), Camera.Swamp (фокусировка на болото) и т. п.
Использование переменных на примере работы в articy: draft 3
Давайте разберемся, как работают переменные в движке articy: draft 3 на практике.
Введем пять наборов переменных.
● Dialogue – чтобы запоминать, какие выборы совершены в беседах персонажей и что из этого вышло.
● Name – чтобы задать имя нашему главному герою.
● Stat – чтобы развивать ту или иную характеристику главного героя.
● Like – чтобы определиться с отношениями главного героя и других персонажей.
● Music – чтобы назначать музыку на проекте.
Задаем на старте переменные на примере программы articy: draft 3
В articy: draft 3 все переменные назначаются в разделе Global Variables.
Нажимаем на катушку и вводим указанные наборы переменных.
Вводим имя.
Делаем остальные сеты переменных, нажав на катушку и введя имя: Dialogue, Like, Name, Music, Stat.
Теперь в каждом из сетов переменных встраиваем собственные целочисленные, строковые и логические переменные, которые подходят именно вашему проекту.
Для этого мы в каждом из сетов нажимаем крестик, чтобы создать переменную внутри него.
В Dialogue мы можем называть наши переменные в зависимости от ситуации, когда происходит выбор. Например, в разговоре с магом мы выбираем, что больше привлекает главного героя: оружие или книги. Для этого вводим логическую булеву переменную Dialogue.Books_1, где 1 – это номер сцены, где впервые появляется данный выбор. Переменных может быть столько, сколько угодно. Обращаем внимание, что в Type у нас стоит Boolean и в Default Value – false.
Обычно здесь булевы переменные (true/false).
В Like мы закладываем отношения, которые главный герой может развивать с другими персонажами: любовь, дружба, симпатия. Мы можем помечать именами нужных для повествования персонажей внутри сета переменных. Например, Mary. В Type мы выставляем Integer, в Default Value оставляем 0. В дальнейшем можно прибавлять и убавлять количество единиц в зависимости от тех выборов, которые совершает игрок.
В Music мы обычно назначаем тип музыки, который будет раздаваться в тех или иных событиях игры. Например, атака – Attack, главная тема – MainTheme, приключения – Adventure и т. д. Все зависит от целей и атмосферы игры.
Обычно здесь булевы переменные (true/false). Обращаем внимание, что в Type у нас стоит Boolean и в Default Value – false.
В Stat мы можем назначить несколько характеристик/путей, по которым будет развиваться главный герой. Это может быть, например, воин или маг.
Обычно это целочисленная переменная. В Type мы выставляем Integer, в Default Value оставляем 0. В дальнейшем можем прибавлять и убавлять количество единиц в зависимости от тех выборов, которые совершает игрок.
В Name мы применяем строковые переменные. Например, решим, чтобы игрок сам выбрал имя главного героя. Введем переменную Hero, в Type выбираем String, в Default Value вписываем имя, которое у нас будет применяться по дефолту. Например, Albert.
Можем экспериментировать и с именами других персонажей. Например, у нас есть персонаж Мария. При первом появлении мы задаем ей имя «Красотка», так как еще не знаем, как ее зовут.
Итак, мы сделали предварительную работу – задали переменные в начале проекта. Как же они интегрируются на протяжении всей истории?
В самом проекте мы используем переменные как инструкции (Instruction), выбирая их и вставляя каждую из введенных переменных в повествование в задуманных местах.
Name
Вводим переменную Name.Hero = „“;
Далее в тексте главного героя следует называть установленным набором символов, например hname (hero name). Это связано с тем, что игрок может назвать своего героя как угодно или оставить дефолтное имя.
Важное правило: с именем игрока hname используется только именительный падеж и единственное число, ни в коем случае не косвенные падежи – во избежание грамматических ошибок.
Мы можем вводить имена других персонажей по мере их выяснения, вписав в кавычки.
Вводим переменную Name.Mary = „Мария“;
Music
Необходимую музыку на том или ином отрезке повествования мы «включаем» – true и «выключаем» – false.
Dialogue
Вводим переменную Dialogue.Books_1
Like
Вводим переменную Like.Mary = +2;
Stat
Вводим переменные Stat.Warrior = +2; и Stat.Mag = +2;
Условия (Conditions) переменных в проекте
Условия нужны в основном для логических и целочисленных переменных. Не забываем про синтаксис – пишем двойное равенство.
Dialogue
Вводим условие по переменной Dialogue.Books_1 == true;
Like
Вводим условие Like.Mary >= 5;
Stat
Вводим условие Stat.Mag > Stat.Warrior;
Таким образом, обладая базовыми знаниями о переменных, мы можем делать истории с невероятно разветвленными деревьями сюжета, выстраивать уникальные пути прохождения игрока. При этом не нужно постоянно контролировать, все ли верно встроено в повествование, за нас это делает специально обученная программа. Главное – грамотно настроить все в начале работы.
Глава 12Проблема выбора
Главное отличие игр в том, что они обладают дополнительной гранью сторителлинга – интерактивностью. В свою очередь, данная характеристика формируется от прохождения, где игрок постоянно делает выборы, п