Рецепт инвентаря для Twine 2

Материал из IFВики
Перейти к навигации Перейти к поиску

Вариант Cheshire для Harlowe 2

Взят отсюда.

  • Создайте отдельный параграф startup и добавьте ему тег startup
  • В блок startup вставьте следующий код: (set: $inventory to (a:)) Эта строка создает пустой массив для инвентаря.
  • Вывод по желанию, можно выбрать один вариант из двух или оба сразу:

Вывод инвентаря внизу страницы

  • Создайте блок inventory с тегом inventory и вставьте следующий код: (text: $inventory.join("\n"))(link-repeat: "back")[(goto: (history:)'s last)]
  • Создайте блок footer с тегом footer. Это шаблон, который будет выводиться внизу страницы. Вставьте следующий код: (if: (passage:)'s tags contains "inventory"))[](else: (link-repeat: "check inventory")[(goto: "inventory")])

Плавающий блок с инвентарём справа

  • Создайте блок footer с тэгом footer и вставьте следующий код: <div class="inventory">(text: $inventory.join("\n"))</div>
  • В левом нижнем углу откройте меню и выберите «Редактировать таблицу стилей» и вставьте стиль: .inventory{border-left: 1px #000 solid;float: right;top: 10%;left: 80%;position: fixed;padding: 20px;display:block;}
  • Теперь ваш инвентарь отображается в блоке справа на каждой странице.

SugarCube (из Twine Cookbook)

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

См. полный код игры в Twine Cookbook. Скопировано по лицензии CC-BY.

:: StoryInit
<<set $inventory to []>>
<<set $chest to ['щит', 'меч']>>
<<set $chestOpen to false>>

В начале игры объявляем переменные, с массивами это важно. Игрок начнёт с щитом и мечом.

:: PassageHeader
Вы носите с собой:
/% если инвентарь пуст, написать "ничего" %/\
<<if $inventory.length is 0>>\
    ничего.
<<else>>\
    /% перечисляем содержимое через запятую %/\
    <<= $inventory.join(', ')>>.
<</if>>
-----

Блок PassageHeader вызывается в начале каждого блока. Этот особый блок есть в SugarCube 2.0.0 и выше.

:: Start
/% Метод Array#push() добавляет вещи в массив инвентаря %/\
Вы входите в маленькую комнату. В углу лежит шлем, который вы решаете взять.

<<run $inventory.push('шлем')>>\
[[Вперёд|ловушка]]

Здесь мы добавляем в инвентарь новую строчку «шлем». Если ещё раз зайти в этот блок, то шлем добавится дважды, но проверка такого слишком усложнит код, поэтому просто не нажимайте на кнопку "Назад".

:: ловушка
Из стены в вашу сторону вылетают отравленные дротики!
/% проверяем, есть ли у игрока вещь %/
<<if $inventory.includes('щит')>>\
    Но к счастью, вы закрываетесь за щитом.
<<else>>\
    Вам нечем защититься. Вы умираете.
<</if>>