Бот, который гуляет по лесу

Вынул текст из старого черновика одной игры и сделал бота для Mastodon: https://botsin.space/@forestbot
Бот ходит по лесу и каждые 6 часов отчитывается. Так как текст взят из игры, то текст написан во втором лице. Если нет блога в Mastodon, можно подписаться на RSS.
Зачем? Потому что это весело. А ещё, раз я забросил эту игру, так хоть показать описания. Зря, что ли, писал 41 вариант странных запахов в родительном падеже?
А теперь о том, как это сделано. Бот написан на движке Improv.
Сначала скрипт берёт пустую модель генерации. В реальной игре модель будет заполнена информацией о мире игры и игроке: где он стоит, что находится рядом, откуда он пришёл.
Затем идёт генерация описания. Самый первый шаблон — это description.cson. Improv выбирает случайным образом один из вариантов шаблонов и идёт на уровень глубже, генерируя текст для тегов в составе шаблона. Например, тег
Но в файле object.cson есть много групп фраз. Одна из них выполняется на любом условии, а вот остальные — только если в модели Improv находятся определённый теги. Например, если игрок стоит в клетке с типом «shore» (берег озера), то Improv добавит к вариантам выбора подходящую группу и исключит варианты для других типов.
Но ведь наша модель пуста — значит ли это, что бот будет ходить только по самым скучным и типичным фразам? Нет, потому что в настройках Improv установлен параметр
Код открыт под свободной лицензией, если хотите — можете попробовать дополнить библиотеку фраз. Я не делал подсчётов, насколько какая группа фраз имеет вероятность выпадения, так что вполне может оказаться, что этот 41 вариант странных запахов имеет лишь один шанс из сотни на попадание в текст, а 5 вариантов неба — один шанс из десяти, и надо было лучше описывать небо.
Короче, процедурная генерация — это просто, мощно и интересно. Даже в ботах, а не играх.
Бот ходит по лесу и каждые 6 часов отчитывается. Так как текст взят из игры, то текст написан во втором лице. Если нет блога в Mastodon, можно подписаться на RSS.
Зачем? Потому что это весело. А ещё, раз я забросил эту игру, так хоть показать описания. Зря, что ли, писал 41 вариант странных запахов в родительном падеже?
А теперь о том, как это сделано. Бот написан на движке Improv.
Сначала скрипт берёт пустую модель генерации. В реальной игре модель будет заполнена информацией о мире игры и игроке: где он стоит, что находится рядом, откуда он пришёл.
Затем идёт генерация описания. Самый первый шаблон — это description.cson. Improv выбирает случайным образом один из вариантов шаблонов и идёт на уровень глубже, генерируя текст для тегов в составе шаблона. Например, тег
[:object]
подключит случайную фразу из файла object.cson. Но в файле object.cson есть много групп фраз. Одна из них выполняется на любом условии, а вот остальные — только если в модели Improv находятся определённый теги. Например, если игрок стоит в клетке с типом «shore» (берег озера), то Improv добавит к вариантам выбора подходящую группу и исключит варианты для других типов.
Но ведь наша модель пуста — значит ли это, что бот будет ходить только по самым скучным и типичным фразам? Нет, потому что в настройках Improv установлен параметр
incorporate: true
С этим параметром Improv выполняет инкорпорацию: если модель позволяет это сделать, то он выбирает вариант текста и обновляет модель в соответствии с выбранным вариантом. То есть, идёт обратная связь: если текст говорит, что вы стоите на берегу озера, то теперь так оно и есть. И это уже может использоваться в последующих кусках текста. Таким образом, текст никогда не будет противоречив.Код открыт под свободной лицензией, если хотите — можете попробовать дополнить библиотеку фраз. Я не делал подсчётов, насколько какая группа фраз имеет вероятность выпадения, так что вполне может оказаться, что этот 41 вариант странных запахов имеет лишь один шанс из сотни на попадание в текст, а 5 вариантов неба — один шанс из десяти, и надо было лучше описывать небо.
Короче, процедурная генерация — это просто, мощно и интересно. Даже в ботах, а не играх.
Похожие публикации
Сайт Tracery обновился
Нет комментариев