Искры. Полвека парсера

Согласимся, что в плохие парсеры играть трудно.

А всё потому, что написать хороший парсер — на порядки труднее, чем плохой. На такое способны лишь седые аскетичные мужчины и женщины, годами медитирующие у мониторов. Или бессмертные юнцы, для которых ещё не существует такого понятия как время. Одни они готовы своими крошечными скарпелями и иглами вырезать из скалы очередной храм.

Но как же быть всем остальным, не готовым к аскезе (только чуть-чуть, после работы, ну и на выходных с утра, хотя не, тут новая серия вышла, тогда уже завтра)?

Не знаю. Но не оставляю попыток выяснить.

Мир

Дано: граф комнат, предметы в них, пошаговое взаимодействие с предметами. Эта формула остаётся неизменной со времён Colossal Cave Adventure. За годы подход углубился, предметы обросли свойствами (это контейнер, это окружение, это можно включить, отпереть, а это даёт свет), список стандартных глаголов расширился (> 60), стали возможны сложносочинённые пространства, переменные во времени (Blue Lacuna, Hadean Lands), и нарративы, невозможные в ином формате (Galatea, Photopia, Shade, All Roads). Однако, внутри — всё те же капсулы комнат и предметы в них. Всё остальное — дым и зеркала.

Если игрок, стоя у террасы некоего 17-комнатного особняка, увидит на огороде пугало и попробует любое из доступных с ним взаимодействий, то в 54-х случаях из 56-и получит отбивку «Пугало слишком далеко».

Почему так? Потому что автор создал класс предметов, который реагирует только на действия «Осмотреть» и «Помахать», а на все остальные даёт отбивку. Пугало, на самом деле совсем не далеко, оно находится рядом, в той же комнате-капсуле, что и игрок. Более того, оно «перемещается» за игроком в соседнюю капсулу «На террасе» и всё так же делает вид, что оно «слишком далеко». Всё только для того, чтобы у игрока возникла иллюзия большей глубины мира, чем есть на самом деле. Дым и зеркала.

Автор не просто придумывает сюжет и моделирует мир, он ещё и вынужден прилагать массу усилий для поддержания иллюзии. Игрок пытается взять дом? Коснуться солнца? Поговорить с дождём? Срубить дерево на картине? Удачи и терпения автору.

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

Нельзя взять дом не потому, что у него в атрибутах стоит static, а потому, что он очень большой и очень тяжёлый. Нельзя коснуться солнца не потому, что оно scenery, а потому что оно очень-очень далеко.

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

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

С объектом «автомобиль», когда он далеко, вообще нельзя ничего сделать из того, что требует расстояния «вытянутой руки» — ни взять, ни потрогать, ни открыть. Но если подойти к нему, то реакции уже другие, но такие же осмысленные. (Впрочем, взять автомобиль по-прежнему нельзя: объект — тяжёлый.)

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

Почему? Посмотрите на роглайки: Rogue тоже была про комнаты и объекты в них. Сравните с системным великолепием ADOM, Angband, NetHack и прочими.

Заключение

Это тема, над которой я размышляю последние пару месяцев и пробую понемногу реализовать.

И это я ещё не поминал «зрениецентричность» парсеров. Из всех пяти чувств парсеры прекрасно симулируют зрение и, неплохо, осязание. Свет/тьма, видимость и доступ при моделировании контейнеров и т.д. А что с симуляцией слуха, вкуса, обоняния? Удачи и терпения автору.

При прекрасном техническом состоянии современных парсерных систем (привет, Пётр!) их сущностная часть меняется мало. Может быть, это (а не только интерфейс командной строки) отпугивает игроков?

Искры. Полвека парсера: 3 комментария

  1. Рекомендую почитать и просветиться. Жаль, что Гораф удалил репозиторий, в тамошние сообщения об ошибках тоже можно было тыкать.

    https://www.ifwiki.org/Category:Game_help

    На русском я поднимал эту тему вот так: https://ifhub.club/tag/упражнения/

    Короче: да, абстракция — это удобно, но в парсерах есть целый пласт проблем, которые ещё лет сорок назад были признаны сложными и пока что никто не придумал простого решения. Если в игре есть кинжал, то он, конечно, относится к оружию, но им также логично попробовать копать. Физика жидкостей описывается словом «адище» и превращает обычный дождь в источник воды. Автомобиль может быть фоновым объектом или отдельной комнатой для перемещения между комнатами. Параметр «близость к игроку», доведённый до логичного максимума, делает логику игры трёхмерной.

    И нет, качество игры никак не соотносится с глубиной симуляции.

  2. Мне нравиться сам подход — отделять существенные реакции от несущественных. Думаю современные парсеры решают его достойно — описывают класс декораций. При желании можно сделать свой подкласс для «очень далеких» предметов. Ошибочно пытаться насильно впихнуть игрока в вымышленный мир и заставить его думать «вау, все законы природы работают! Я коснулся веточки, а с неё капельки влаги упали на землю, где я смогу их подобрать». Лучше сделать такой вымышленный мир комфортным для игрока, чтобы он чувствовал себя уверенно, был в потоке. Когда он попытается коснутся удаленных предметов, в голове сложится ментальная модель «ага, игра меня понимает, но предметы для моих задач бесполезные, буду обращать внимание на что-то другое». Если выстроить нарратив, то игрок будет обращать внимание на нужные повтору предметы, без ущерба для представления о мире.

  3. «И нет, качество игры никак не соотносится с глубиной симуляции».

    Я с этим не спорю! Это перпендикулярные вещи. Но разве глубокая симуляция не обогатит опыт игрока?

    «Лучше сделать такой вымышленный мир комфортным для игрока, чтобы он чувствовал себя уверенно, был в потоке».

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

    Долго не комментировал, потому что пытался воплотить идеи в коде (уф):
    Тестовое окружение: https://cheshiren.github.io/non-classic-parser-model/
    Описание, что к чему, в README к репозиторию: https://github.com/cheshiren/non-classic-parser-model

Добавить комментарий для Антон Ласточкин Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *