Создаем интерактивные истории. Творческий процесс на примере визуальных новелл в играх — страница 26 из 38

В набор переменных мы можем вносить разные по функциональности переменные, объединенные общим признаком. Это могут быть и логические, и целочисленные, и строковые переменные. Например, если мы имеем дело с Инвентарем (Inventory), то можем столкнуться с тем, что на каком-то этапе повествования сумеем открыть в данной локации инвентарь или нет (логическая переменная: true или false), далее получить в него некое количество предметов (целочисленная переменная: +1 или +10), а также получить в инвентарь особый магический предмет, у которого есть имя (строковая переменная: «Меч Эскалибур»).

Условие (Condition)

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

Условие (Condition) с логической булевой переменной

Условием с логической переменной мы проверяем наличие или отсутствие того или иного произошедшего события и игровой сущности.

Давайте рассмотрим на примере.

Итак, Мария получила в подарок от Деда Мороза либо мишку, либо куклу. И вот настал момент, когда нам нужно проверить это событие. Для этого мы делаем условие (condition) с уже знакомыми установками по переменной Bear:

● true (да, правда) – это наличие медведя;

● false (нет, ложь) – это отсутствие медведя (наличие куклы).

В зависимости от того, какой был сделан и запомнен выбор, развиваются сюжетные события через проверку условий.



Условие (Condition) с целочисленной переменной

Условие с целочисленной переменной проверяется через обычные математические равенства.

Давайте рассмотрим на примере.

Деду Морозу нужно проверить, упаковал ли вчера он 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Проблема выбора

Главное отличие игр в том, что они обладают дополнительной гранью сторителлинга – интерактивностью. В свою очередь, данная характеристика формируется от прохождения, где игрок постоянно делает выборы, п