Не так давно вышла игра «Звезды знают всё, но молчат». В ней есть одна примечательная деталь – это интерактивный виртуальный мир, хоть и небольшой. Лично для меня, это целый поджанр интерактивной литературы, который надо развивать. Отличается от классических игр в первую очередь отсутствием игровой системы и явных целей. Он становиться больше похож на произведение искусства. Представьте себе, вы побывали в каком-то замечательном месте, но вместо фотографии или заметки решили оставить кусочек виртуального мира, чтобы потом снова в него погрузиться или кому-то передать. Текстовый мир не нуждается в сложных механиках. Автору хочется просто создавать локации, объекты и менять стандартные реакции. Передавать атмосферу мира за счёт интерактивного опыта. Для этих целей в 2016 г. был сделан конструктор текстовых виртуальных миров. Давайте попробуем создать виртуальный мир и посмотрим, что из этого получится.
#### Строим, строим, строим
Давайте побываем в лесу? Мы просыпаемся в летнем лагере ранним утром, пока еще все спят. Будет две локации – палатка и лес. Начнём, пожалуй с палаточки.
> HTML TADS — A multimedia TADS 2.5.16 Interpreter.
> Copyright © 1993, 2012 by Michael J. Roberts.
>
> Конструктор квестов 1
> Автор: Ласточкин А. П.
> Версия 1.5
> Если вы включили конструктор впервые, то наберите помощь.
> Начальная локация
> Краткая справка: Вы находитесь в первой локации, чтобы добавить новую, наберите: строить на север. Чтобы изменить название комнаты: дать имя комнате. Чтобы изменить подробное описание комнате: дать описание комнате. Добавление предмета: добавить предмет.
> > дать имя комнате
> Пожалуйста, введите имя комнаты:
> > Палатка
> Комната переименована.
> > дать описание комнате
> Пожалуйста, введите описание комнаты:
> > Ты в небольшой брезентовой палатке, которая шуршит при каждом вашем движении. Свежий утренний воздух приятно наполняет лёгкие.
> Введите следующую строку описания. Пустая строка — окончание ввода:
> >
> Описание комнаты обновлено.
> > осм
> Палатка
> Ты в небольшой брезентовой палатке, которая шуршит при каждом вашем движении. Свежий утренний воздух приятно наполняет лёгкие.
>
Так, палатка есть, только не чувствуется турпохода, надо добавить некоторые походные предметы:
> > добавить предмет
> Пожалуйста, введите новое имя предмета, одно слово (пример мужского рода- кот/1мо, женского- трава/1ж, среднего- окно/1, множественного- люди/2):
> > походный/1пм фонарь/1м
> Предмет походный фонарь добавлен в эту комнату.
> > добавить предмет
> Пожалуйста, введите новое имя предмета, одно слово (пример мужского рода- кот/1мо, женского- трава/1ж, среднего- окно/1, множественного- люди/2):
> > спальник/1м
> Спальник добавлен в эту комнату
> > осм
> Палатка
> Ты в небольшой брезентовой палатке, которая шуршит при каждом вашем движении. Свежий утренний воздух приятно наполняет лёгкие.
> Ты видишь здесь походный фонарь и спальник.
>
Добавленные предметы интерактивные, попробуем поработать:
> > взять фонарь
> Взят.
> > бросить фонарь
> Брошен.
> > осм фонарь
> Описание предмета
>
Описание никуда не годиться. Добавим описания фонарю и спальнику, а затем изменим реакции на включение походного фонаря.
> > дать описание фонарю
> Пожалуйста, введите описание предмета:
> > Металлический фонарик для кемпинга. Может светить вперед или превращаться в лампу. Заряда хватает почти на всю ночь.
> Введите следующую строку описания. Пустая строка — окончание ввода:
> > Его тебе подарил старший брат, когда первый раз взял с собой в поход.
> Введите следующую строку описания. Пустая строка — окончание ввода:
> >
> Описание предмета обновлено.
> > дать описание спальнику
> Пожалуйста, введите описание предмета:
> > Просторный спальный мешок. Хоть немного выцвел, но всё еще прочный.
> Введите следующую строку описания. Пустая строка — окончание ввода:
> > Ты помнишь, что как-то раз с другом Витькой смогли вдвоём спрятаться в нём от стаи комаров.
> Введите следующую строку описания. Пустая строка — окончание ввода:
> >
> Описание предмета обновлено.
> > включить фонарь
> Я не знаю как включить походный фонарь.
> > заменить «Зачем тебе утром включать фонарик?»
> Ты заменил реакцию для походного фонаря на глагол включить на 'Зачем тебе утром включать фонарик?'.
> > включить фонарь
> Зачем тебе утром включать фонарик?
>
Кстати, лучше заменим предмет спальник на объект, на котором можно лежать.
> > удалить спальник
> Объект удалён
> > добавить дикровать
> Пожалуйста, введите новое имя кровати, одно слово (пример мужского рода- лежак/1м, женского- кровать/1ж, среднего- лежбище/1):
> > спальник/1м
> Кровать спальник добавлен в эту комнату.
> > лечь на спальник
> Хорошо, Ты теперь лежишь на спальнике.
>
Еще немного улучшим это место, добавим синонимы для фонаря, спальника и добавим декорацию палатки, чтобы её можно было осмотреть или потрогать. Декорация отличается от предмета тем, что не добавляется в описание комнаты, её нельзя брать.
> > дать синоним фонарю
> Пожалуйста, введите синоним предмета, одно слово (пример мужского рода- кот/1м, женского- собака/1ж, среднего- окно/1, множественного- люди/2):
> > фонарик/1м
> Синоним для предмета добавлен.
> > дать синоним спальнику
> Пожалуйста, введите синоним предмета, одно слово (пример мужского рода- кот/1м, женского- собака/1ж, среднего- окно/1, множественного- люди/2):
> > спальный/1пм мешок/1м
> Синоним для предмета добавлен.
> > добавить декорацию
> Пожалуйста, введите новое имя декорации, одно слово (пример мужского рода- шарф/1м, женского- ваза/1ж, среднего- окно/1, множественного- люди/2):
> > палатка/1ж
> Предмет палатка добавлен в эту комнату.
> > осм палатку
> Описание предмета
> > трогать палатку
> На ощупь она похожа на обычную палатку.
> > включить фонарик
> Зачем тебе утром включать фонарик?
>
Отлично, теперь создадим на юге локацию лес.
> > строить на юг
> Ты построил комнату 2 на юг!
> > юг
> Комната 2
> Описание 2
> > дать имя комнате
> Пожалуйста, введите имя комнаты:
> > Лес
> Комната переименована.
> > дать описание комнате
> Пожалуйста, введите описание комнаты:
> > Палаточный городок раскинулся посреди соснового леса рядом с озером.
> Введите следующую строку описания. Пустая строка — окончание ввода:
> > Густая трава под деревьями постепенно редеет, подходя к песчаному пляжу.
> Введите следующую строку описания. Пустая строка — окончание ввода:
> > Тишину нарушает шелест листьев от внезапного порыва ветра и щебетание птиц.
> Введите следующую строку описания. Пустая строка — окончание ввода:
> >
> Описание комнаты обновлено.
> > осм
> Лес
> Палаточный городок раскинулся посреди соснового леса рядом с озером.
> Густая трава под деревьями постепенно редеет, подходя к песчаному пляжу.
> Тишину нарушает шелест листьев от внезапного порыва ветра и щебетание птиц.
>
Далее, всё аналогично. Обставляем предметами, добавляем описания и меняем реакции. После построения мира, можно распечать исходный код и собрать историю (с библиотеками RTADS). На данный момент получается такой код (немного причесал):
//НАЧАЛО КОДА
#define USE_HTML_STATUS
#define USE_HTML_PROMPT
#define GENERATOR_INCLUDED
#include <advr.t>
#include <stdr.t>
#include <errorru.t>
#include <extendr.t>
#include <generator.t>
#include <gameinfo.t>
modify Me
isHim = true
desc = 'ты/мо'
lico=2
fmtYou="Ты"
fmtToYou='Тебе'
fmtYour='Твой'
fmtYours='твои'
fmtYouve='тебя'
fmtWho='ты'
fmtMe='себя'
;
replace introduction: function
{
"";
}
replace version: object
sdesc = {
"Игра 1";
"
Автор: Иванов И. И.
Версия 1.0
Если вы играете впервые, то наберите помощь.
";
}
;
replace commonInit: function
{
"\H+";
}
startroom: room
sdesc="Палатка"
ldesc="Ты в небольшой брезентовой палатке, спальник под тобой шуршит при любом
движении. Свежий утренний воздух приятно наполняет лёгк"
south=room2
;
room2: room
sdesc="Лес"
ldesc="Палаточный городок раскинулся посреди соснового леса рядом с озером.
Густая трава под деревьями постепенно редеет, подходя к песчаному пляжу.
Тишину нарушает шелест листьев от внезапного порыва ветра и щебетание птиц."
north=startroom
;
item1: item
desc='походный/1пм фонарь/1м'
noun='фонаре' 'фонарем#t' 'фонарем' 'фонарике' 'фонариком#t' 'фонариком'
'фонарику#d' 'фонарику' 'фонарика' 'фонарик' 'фонарик/1м' 'фонарь' 'фонарь/1м'
'фонарю#d' 'фонарю' 'фонаря'
adjective='походном' 'походным#t' 'походным' 'походному#d' 'походному'
'походного' 'походный' 'походный/1пм'
ldesc="Металлический фонарик для кемпинга. Может светить вперед или
превращаться в лампу. Заряда хватает почти на всю ночь.
Его тебе подарил старший брат, когда первый раз взял с собой в поход."
location=startroom
verDoTurnon(actor)="зачем тебе утром включать фонарик?";
bed3: beditem
desc='спальник/1м'
noun='мешком#t' 'мешком' 'мешка' 'спальном' 'спальным#t' 'спальным'
'спальному#d' 'спальному' 'спального' 'спальный' 'спальный/1пм мешок/1м'
'спальнике' 'спальником#t' 'спальником' 'спальнику#d' 'спальнику' 'спальника'
'спальник' 'спальник/1м' 'мешке' 'мешок' 'мешку' 'мешку#d'
ldesc="Просторный спальный мешок. Хоть немного выцвел, но всё еще прочный.
Ты помнишь, что как-то раз с другом Витькой смогли вдвоём спрятаться в нём от
стаи комаров."
location=startroom
;
decor4: decoration
desc='палатка/1ж'
noun='палаткою#t' 'палаткою' 'палаткой#t' 'палаткой' 'палатку' 'палатке#d'
'палатке' 'палатки' 'палатка' 'палатка/1ж'
ldesc="Описание предмета"
location=startroom
;
//КОНЕЦ КОДА
Скриншот собранного мира:
#### Послесловие
Конечно, этот конструктор несовершенен. Многим будет удобнее в исходных текстах определить предметы и реакции, с другой стороны он позволяет делать прототипы миров за короткое время и получать код для дальнейших улучшений. Локации и предметы «Ученика мага» строились на этом конструкторе, а потом реакции дорабатывались вручную. В планах:
• Сделать замену на реакции из одного глагола (ждать, прислушаться, прыгнуть и т.п.)
• Добавить команду завершения режима редактирования. Тогда можно будет не компилировать исходный код мира, а обмениваться sav-файлами, которые меньше и проще создавать.
• Живые объекты. Для настоящего мира не хватает NPC. Нужно движущийся рандомно, за игроком или по фиксированному маршруту.
#### Ссылки
Скачать конструктор
Полный лог создания мира
Сгенерированный код, компилятор и бинарник
Ссылка:
https://ifhub.club/2018/08/14/konstruktor-virtualnyh-mirov.html