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

Логин (e-mail)

Пароль

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

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

Модуль «Inventory». Версия 2.1

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

Модуль «Inventory» представляет собой проект для «AXMA Story Maker» (sm-файл), который содержит необходимый код и объекты для организации полнофункционального инвентаря в вашей игре. Добавьте модуль в игру и произведите настройку под специфику своего проекта.

Скачать модуль: Inventory 2.1 (sm-файл в zip-архиве)

Благодаря модулю в вашей игре:
• есть набор предметов с уникальными характеристиками: название, описание, расположение, объём, цена;
• все предметы, расположенные в одном месте, можно перечислить в одну строку через запятую;
• предметы могут быть контейнерами, т.е. могут содержать в себе другие предметы;
• у каждого контейнера свой размер свободного места внутри;
• уровень вложенности контейнеров не ограничен;
• герой может класть любые предметы внутрь контейнера, пока это позволяет объём предметов и свободное место контейнера;
• уровень заполнения контейнера отображается с помощью индикатора;
• герой может поднимать предметы на одной сцене, носить их с собой и оставлять на другой сцене;
• можно ограничивать количество одновременно переносимых предметов, а если герой берёт больше, все предметы могут упасть на землю;
• герой может покупать и продавать предметы у торговца;
• герой может отдавать предметы другим персонажам;
• при двух и более предметах становятся доступны массовые действия (взять всё, продать всё и т.д.)

Для стабильной работы модуля необходимо использовать «AXMA Story Maker» версии 1.9.9 или выше.

Инструкция по настройке модуля

1) Добавьте модуль «Inventory» в свою игру.

Способ А. Откройте «AXMA Story Maker» с игрой, в которую нужно добавить инвентарь. Нажмите кнопку «Загрузить» на главной панели инструментов, а затем выберите пункт меню «Добавить». В появившемся диалоговом окне выберите файл «Inventory-2-0.sm» и нажмите кнопку «Открыть». В ответ на запрос приложения, заменять ли одноимённые параграфы, ответьте «нет». При использовании этого способа после добавления модуля приложение выполнит автоматическую расстановку всех параграфов.

Способ Б. Откройте модуль в «AXMA Story Maker», переключитесь в режим текстового редактора и скопируйте весь код модуля в буфер обмена (Ctrl+A, Ctrl+C). Затем, не выходя из режима текстового редактора, откройте игру, в которую нужно добавить инвентарь, и вставьте скопированный код в самом низу (Ctrl+V).

2) Откройте для редактирования параграф «m_Init». В этом параграфе перечислены все используемые объекты. Перед каждым объектом следует комментарий с пояснением назначения объекта. Для удобства все объекты условно разбиты на группы.

3) Настройте параметры героя: имя, начальное количество денег и максимальное число переносимых предметов.

4) Перечислите в списках названия предметов (в винительном падеже) и их характеристики. Например, пусть в игре присутствуют следующие предметы: шкатулка, нож, кольцо и яблоко. Тогда группа «Характеристики предметов» параграфа «m_Init» будет выглядеть следующим образом:

# +--------------------------+
# | Характеристики предметов |
# +--------------------------+
# Названия предметов в винительном падеже, в историю нужно добавить столько же одноимённых параграфов (дублируйте параграф «m_предмет», затем отредактируйте его)
<<set $m_listItem = ["шкатулку", "нож", "кольцо", "яблоко"]>>
# Начальное расположение предметов: название сцены или контейнера, имя героя или торговца (регистр символов имеет значение)
<<set $m_listPosition = ["Имя торговца", "Имя героя", "шкатулку", "Яблоня"]>>
# Объём предметов
<<set $m_listVolume = [12, 10, 1, 8]>>
# Свободное пространство внутри контейнеров
<<set $m_listSpace = [11, 0, 0, 0]>>
# Цена предметов
<<set $m_listPrice = [50, 60, 30, 10]>>

Свойства предметов во всех списках обязательно должны быть перечислены в одинаковой последовательности.

5) Для каждого предмета из списка $m_listItem создайте дубликат параграфа «m_предмет» и отредактируйте его:
5.1) установите название нового параграфа в соответствии с названием предмета в списке;
5.2) в тексте параграфа замените все строки «m_предмет» на название предмета, для этого удобно использовать диалог поиска и замены (Ctrl+F);
5.3) задайте описание предмета в значении объекта $m_description.
Пример нового параграфа для шкатулки (цветом выделен новый текст):

:: шкатулку
<<if $m_boxMode>>[[Положить в шкатулку|m_Move {$m_newPosition = "шкатулку"} {$m_market = 0}]]<<else>>[[*шкатулку|m_ItemActions {$m_item = "шкатулку"} {$m_description = "Обычная шкатулка из обычного дерева."}]]<<endif>>

Для предметов, которые не являются контейнерами, можно использовать сокращённый вариант параграфа:

:: яблоко
[[*яблоко|m_ItemActions {$m_item = "яблоко"} {$m_description = "Сочное спелое яблоко."}]]

6) При необходимости поменяйте значения объектов в группе «Текстовые константы» параграфа «m_Init» в соответствии со спецификой игры.

Инструкция по использованию модуля

1) В начале игры вызовите параграф «m_Init» для инициализации объектов. Например, в параграфе «Start»:

:: Start
<<display "m_Init">>
[[Начать игру|Сцена_1]]

2) На каждой сцене занесите в объект $m_location название текущей сцены и вызовите параграф «m_Title». Например:

:: Сцена_1
<<set $m_location = "Название первой сцены">>
<<display "m_Title">>

В результате на экран будет выведено:

Инвентарь | Деньги: 29 монет
Название первой сцены
-----------------------------------------------
Описание последнего действия героя с предметами (если таковое было).

По нажатию ссылки «Инвентарь» к описанию сцены будет добавлено перечисление имеющихся у героя предметов.

3) Чтобы перечислить предметы, находящиеся на сцене, добавьте в код сцены следующие строки:

# Установите позицию перечисления (название сцены)
<<set $m_position = $m_location>>
# Задайте текст до перечисления
<<set $m_textPosition = "Здесь вы видите">>
# Задайте текст при отсутствии предметов на сцене
<<set $m_textEmpty = "Здесь ничего нет.">>
# Вызовите параграф «m_Items»
<<display "m_Items">>

Аналогично можно вывести перечисления предметов в других позициях, например, предметы, находящиеся у неигрового персонажа. Если необходимо показать предметы не в виде ссылок, а в виде простого текста, перед вызовом параграфа «m_Items» установите значение объекта $m_itemsEnabled равным false.

4) Чтобы организовать магазин для покупки предметов, используйте следующую заготовку:

:: СценаМагазинПокупка
<<set $m_location = "Название сцены магазина">>
<<display "m_Title">>
# Установите коэффициент наценки
<<set $m_market = 1.3>>
# Задайте имя торговца
<<set $m_trader = "Торговец">>
Описание сцены.
# Покажите перечисление товаров торговца
<<set $m_position = $m_trader>>
<<set $m_textPosition = "Тут можно купить">>
<<set $m_textEmpty = "У торговца больше нет товаров.">>
<<display "m_Items">>

5) Чтобы организовать магазин для продажи предметов, используйте такую заготовку:

:: СценаМагазинПродажа
<<set $m_location = "Название сцены магазина">>
# Отключите доступность ссылки «Инвентарь» на этой сцене
<<set $m_inventoryEnabled = false>>
<<display "m_Title">>
<<set $m_inventoryEnabled = true>>
# Установите коэффициент наценки при продаже (отрицательное число)
<<set $m_market = -0.75>>
# Задайте имя торговца
<<set $m_trader = "Торговец">>
Описание сцены.
# Покажите перечисление предметов героя
<<set $m_position = $m_hero>>
<<set $m_textPosition = "Вы можете продать">>
<<set $m_textEmpty = "У вас при себе ничего нет.">>
<<display "m_Items">>

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

6) Чтобы задать дополнительное динамическое описание или нестандартные действия для некоторых предметов, отредактируйте параграф «m_SpecialActions»:

<<if $m_item eq "m_предмет">>
# Дополнительное описание предмета
<<endif>>
<<if $m_location eq "Название сцены">>
# Нестандартные действия для всех предметов на этой сцене
<<endif>>
<<if $m_item eq "m_предмет">>
# Нестандартные действия для конкретного предмета на любой сцене
<<endif>>

Содержимое параграфа «m_SpecialActions» отображается при выборе предмета после статического описания до базовых действий.

7) Для включения возможности передачи предметов неигровому персонажу на текущей сцене установите значение объекта $m_giveTo равным имени персонажа. Это следует сделать обязательно после вызова параграфа «m_Title»:

<<set $m_location = "Название сцены">>
<<display "m_Title">>
<<set $m_giveTo = "Имя персонажа">>

8) Для дополнительной обработки действий героя с предметами проверьте значение объекта $m_action, который содержит код последнего действия. Ниже приведены коды всех базовых действий:

  0 - нет
  1 - взял предмет
 -1 - не смог взять предмет (превышение максимального числа переносимых предметов)
  2 - бросил предмет
  3 - достал предмет из контейнера
  4 - положил предмет в контейнер
 -4 - не смог положить предмет в контейнер (не хватило места)
  5 - отдал предмет персонажу
  6 - купил предмет
 -6 - не хватило денег купить предмет
  7 - продал предмет
 -7 - не сумел продать предмет (цена предмета = 0)
  8 - взял всё
 -8 - не смог взять всё (превышение максимального числа переносимых предметов)
  9 - бросил всё
 10 - достал всё из контейнера
 11 - отдал всё персонажу
 12 - купил всё
-12 - не купил ничего (денег не хватило ни на один предмет)
 13 - купил не всё (на некоторые предметы денег не хватило)
 14 - продал всё
-14 - не продал ничего (цена всех предметов = 0)
 15 - продал не всё (цена некоторых предметов = 0)

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

<<set $m_location = "Название сцены">>
<<display "m_Title">>
<<set $m_giveTo = "Имя персонажа">>
<<if ($m_action eq 5) or ($m_action eq 11)>>
# Неигровой персонаж благодарит героя
<<endif>>

9) Для поиска определённого предмета в заданной позиции используйте следующую конструкцию:

# Позиция для поиска (если значением является пустая строка, то позиция не учитывается)
<<set $m_searchPosition = "позиция поиска">>
# Название предмета для поиска (если значением является пустая строка, то название не учитывается)
<<set $m_searchItem = "название предмета">>
<<display "m_Search">>
<<if $m_searchIndex gt -1>>
# Предмет найден
<<endif>>

После вызова параграфа «m_Search» объект $m_searchList будет содержать список индексов всех найденных предметов. Объект $m_searchIndex будет содержать индекс одного из найденных предметов, выбранный случайным образом. Если поиск не дал результатов, список $m_searchList будет пустым, а значение объекта $m_searchIndex будет равно -1.

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

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

Профиль


Закрыть

Показать все комментарии

Morych
11.11.14 19:44

Увы, дальше по плану у нас не календарь, а боевой модуль "Арена" :)
Лев Канзас
22.05.15 07:07

Эх, а я не рзобрался. попробую выдумать что нибудь примитивнее сам.
Лютамир
11.10.16 22:05

Так где же описание модуля "Арена"? )) Игра есть, а как работает секрет?)

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

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