💾 Archived View for ostov.ml › articles › reum.gmi captured on 2023-01-29 at 02:18:38. Gemini links have been rewritten to link to archived content

View Raw

More Information

-=-=-=-=-=-=-

Reum

Знаете, что самое сложное в разработке IF? Состояние.

`7MM"""Mq.  `7MM"""YMM `7MMF'   `7MF'`7MMM.     ,MMF'
MM   `MM.   MM    `7   MM       M    MMMb    dPMM
MM   ,M9    MM   d     MM       M    M YM   ,M MM
MMmmdM9     MMmmMM     MM       M    M  Mb  M' MM
MM  YM.     MM   Y  ,  MM       M    M  YM.P'  MM
MM   `Mb.   MM     ,M  YM.     ,M    M  `YM'   MM
.JMML. .JMM..JMMmmmmMMM   `bmmmmd"'  .JML. `'  .JMML.

О да, состояние, оно же State. Вы конечно же можете и не согласиться, утвердив сюжет самой сложной частью разработки.

Однако состояние мира - это бездна, в которую очень легко провалиться.

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

Ради адекватной работы с состоянием был создан такой наисложнейший инструмент - Inform 7.

Вдумайтесь. И ведь он только облегчит работу с состоянием, но не решит саму проблему состояния.

Нужно ли состояние для хорошей интерактивной истории?

Интересный вопрос.

В визуальной новелле "Бесконечное Лето" ты не можешь пнуть или лизнуть каждый предмет.

Однако "Бесконечное Лето" - бриллиант отечественного игростроя.

В "Жизнь и страдания господина Бранте" всё состояние мира сводится к параметрам персонажа и открытым историям (storylets), которые будут влиять на доступность тех или иных действий.

И "Бранте" - прекраснейшая игра с крайне затягивающим сюжетом.

IF без состояния

Читая блог Эмили Шорт я наткнулся на вот этот инструмент:

Emily Short's Interactive Storytelling: DINE

DINE

Мне понравилась концепция DINE. DINE это движок игр-книг, но в которых выбор делается не с помощью клика по ссылкам, а с помощью ввода команд (как в традиционных парсерных IF).

И в DINE нет даже намека на симуляцию мира.

К сожалению, NLP-методы для анализа команд у DINE работают не очень: игра то и дело путает команды "осмотреть кровать" с "осмотреть игрушки".

Это натолкнуло меня на создание собственного движка.

Собственно, Reum

Reum

Reum - пет-проект на один вечер.

Движок разделяет действия на три категории:

И в пределах одной страницы (в других движках это может называться room или passage) не важно в какой последовательности выполняются действия. Действия пишутся так, чтобы их (с точки зрения здравого смысла) можно было сделать независимо друг от друга.

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

Но почему ввод команд, а не менюшный интерфейс? Почему новый движок, когда уже есть Twine?

Всё просто - тогда потеряется иллюзия свободы. Когда игрок вводит команды самостоятельно создается впечатление непосредственного участия.

Язык сценариев

Я не стал писать свой DSL, а просто взял YAML, идеально подходящий для моей цели.

Маленький фрагмент для примера:

---
название: Вход в подземелье
описание: |
  Ты стоишь возле входа в подземелье.
  Войдешь ли ты в него или уйдешь?
действия:
  - ?: войти
    =: Ты вошел в подземелье. Перед тобой стоит сундук.

  - ?: уйти
    =: Ты решил закончить приключение, так и не начав его :(
    +: 1

  - ?: открыть( сундук)?
    =: |
      Ты открыл сундук, в нём был видавший бои меч.
      Ты оставил меч себе. В комнате была большая дверь на востоке.
      Куда ты отправишься?

  - ?: восток
    =: Ты открыл восточную дверь.
    ): Темница

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

Ссылки

💾 Скачать Reum

💾 Тестовый сценарий

Постскриптум

Надеюсь я поборю свою лень, и постараюсь из чего-то *минимального* сделать что-то максимально хорошее.

Своего рода челлендж. Ну или хоть какую-нибудь историю, которую не так стыдно показать.

Назад