Расширение для Owlbear Rodeo

Owlbear Rodeo — простой и бесплатный VTT (виртуальный игровой стол), работающий через веб. Я сделал небольшое браузерное расширение, которое добавляет в него трекинг раундов, бросков кубов и ещё пару маленьких фишек, делая его чуть более удобным для регулярных онлайн-посиделок.

Расширение для Owlbear Rodeo

Невозможно недооценить преимущества онлайна в нашу ковидную эпоху. Играть в настолки хочется ничуть не меньше, но возможность встретиться есть не всегда. На помощь приходят сервисы конференций, типа Discord, но их одних мало — нужно ещё что-то, что сыграет роль игрового поля. В случае с D&D и другими НРИ на нём будут карта и миниатюры, а больше ничего и не нужно.

Так в нашей жизни появляются виртуальные игровые столы, или попросту VTT (virtual table top). Под простейший VTT можно приспособить даже MS Paint или какой-нибудь Photoshop (мы когда-то с этого начинали). Специализированные же программы бывают навороченные и универсальные, вроде TableTop Simulator, а бывают узкоспециальные, наподобие FantasyGrounds.

Мы с друзьями в D&D сессиях часто используем Owlbear Rodeo как бесплатную и простую альтернативу продвинутым столам вроде FantasyGrounds и Roll20, когда не удаётся собраться вживую. Чтобы начать играть, не нужно вообще ничего. Без регистрации и смс, как говорится.

Начало сессии в OR. Загружаете любую картинку, настраиваете сетку — и вперёд! Для примера я взял карту Тресендарского поместья из стартера по рудникам Фанделвера.<br />
Начало сессии в OR. Загружаете любую картинку, настраиваете сетку — и вперёд! Для примера я взял карту Тресендарского поместья из стартера по рудникам Фанделвера.

Но у этой простоты есть и оборотная сторона — иногда не хватает функций, дающих элементарный комфорт. В сложных энкаунтерах бывает трудно уследить, кто за кем ходит. Само собой, как и в реальной игре, эта обязанность лежит на Мастере, но при общении через онлайн-сервисы выяснение очередности почему-то занимает больше времени и иногда начинает раздражать. То же с кубами — Owlbear показывает, кто сколько кинул, но только на левой панели (которую неплохо бы скрыть), и отличить старый бросок от переброса, да и вообще отсечь момент броска бывает довольно сложно.

Я ни разу не «тыжпрограммист», но в юности, как многие, грешил быдлокодингом. С возрастом это почти прошло, но тут что-то решил посмотреть, можно ли вывести броски кубиков в более понятном виде, и понеслось. Сначала это планировалось как букмарклет, потом это был кусок кода, запускаемый из консоли разработчика, и вот я уже запаковал это в расширение. Попутно вспомнил JS и немного ковырнул возможности расширений современных браузеров (спойлер: возможностей всё меньше, а огораживания — всё больше). Результат выкладываю сюда — вдруг он будет полезен ещё кому-нибудь, кроме меня и моих сопартийцев.

Функционал расширения

Трекер кубиков

Расширение добавляет небольшое окошко лога в правом нижнем углу. Когда вы (или кто-то ещё) бросаете кубы, в логе отобразится именно этот бросок. Ранее брошенные кубики показаны не будут. В логе всегда явно видно, сколько именно кубиков (и с каким результатом) было брошено. Имена берутся из панели с кубиками, и могут, конечно, не совпадать с именами на карте.

В правом нижнем углу виден лог кубиков. При желании его можно свернуть.<br />
В правом нижнем углу виден лог кубиков. При желании его можно свернуть.

Переброс кубов с включением данного модуля пропадает. Дело в том, как Owlbear обрабатывает перебросы — пока кубики катятся, можно перебрасывать их сколько угодно, остальные увидят результат только после полной остановки кубов. Поэтому если попытаться схватить куб, пока он ещё не остановился, трей будет очищен. В спокойном состоянии нажатие на лоток скрывает его (просто для удобства добавил).

Ещё я зачем-то добавил озвучку броска кубиков. Видимо, просто потому что могу. Для собственных кубов это бесполезно, хоть и немного добавляет аутентичности. Чужие броски кубиков тоже озвучиваются, и это показалось мне вполне удобным. Озвучку, естественно, тоже можно отключать.

Трекер раундов

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

Стрелки вправо-влево переводят ход, а при достижении конца списка — начинают новый раунд. В процессе боя каждому можно ввести урон и навесить состояние (есть три вида состояний на выбор).

Вводить информацию можно и скопом (удобно, когда перед боем накидываете инициативу), и по одному персонажу.<br />
Вводить информацию можно и скопом (удобно, когда перед боем накидываете инициативу), и по одному персонажу.

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

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

Слева — кусок окошка Мастера, справа — то, как это выглядит у игроков. У игроков не отображается количество хитов, только общее состояние и нанесённый урон.<br />
Слева — кусок окошка Мастера, справа — то, как это выглядит у игроков. У игроков не отображается количество хитов, только общее состояние и нанесённый урон.

Мы используем цветовые обводки для лучшей читаемости карты: зелёное — игроки, красное — враги. В трекере текущий цвет обводки показан в кружочке рядом с каждым персонажем.

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

Установка и настройка

Установка через файл расширений

Для пользователей Opera, Firefox и Yandex.browser всё сравнительно просто — нужно скачать соответствующий файл расширения и перетащить его на окошко с плагинами. Браузер спросит разрешения на установку, предупредит (в случае Яндекса) о неподписанном файле, и расширением можно пользоваться.

Скачать файл расширения:

Установка через режим разработчика

Если у вас Chrome или Edge — политика безопасности обоих не позволяет ставить неподписанные расширения, поэтому придётся чуть повозиться.

  1. Скачать ZIP-архив с расширением
  2. Распаковать в любую папку (пароль 1)
  3. Включить на странице плагинов режим разработчика
  4. Нажать «Загрузить распакованное расширение»

Включение и отключение модулей

После установки на панели браузера появится иконка дополнения, а в ней — настройки. Можно галочками включать и отключать:

  • Трекер раундов боя
  • Трекер бросков кубиков
  • Озвучивание кубиков
  • Запуск со свернутыми боковыми панелями
После сохранения настроек нужно перезагрузить страницу, чтобы они применились.<br />
После сохранения настроек нужно перезагрузить страницу, чтобы они применились.

Ещё в настройках есть кнопка, в зависимости от ситуации служащая для открытия сайта или для быстрого перехода к открытой вкладке с Owlbear Rodeo. Под ссылкой «Недавние сессии» есть список последних открытых игр, чтобы не нужно было искать, где же вы с друзьями были в прошлый раз.

Включение передачи данных боя другим игрокам

После загрузки новой карты Мастер (или любой игрок которому принадлежит карта и который будет вести учёт раундов) должен создать где-нибудь за пределами картинки новый текстовый объект «Заметка», а затем написать туда! (восклицательный знак).

Примерно так я обычно располагаю "служебную" заметку — главное, чтобы глаза не мозолила.<br />
Примерно так я обычно располагаю "служебную" заметку — главное, чтобы глаза не мозолила.

Если после заполнения инициативы там сама начнёт появляться абракадабра — значит, вы на правильном пути. Это, конечно, костыль, но это единственное что я смог придумать для обмена данными между подключёнными к одной сессии игроками.

Представим, что кому-то интересно

Нафига всё это?

Хз, делать было нечего, дело было вечером, точнее, несколькими вечерами. В процессе немного разобрался со структурой расширений, манифестами, вот это вот всё. В итоге получилось удобно, вроде играть стало комфортнее, особенно благодаря логу кубиков.

Но там же сплошной говнокод?

Да, я не кодер, поэтому прошу прощения за кучу говнокода и костылей. Большая часть времени ушла на ковыряние в структуре данных, а потом — на обёртывание всего этого в расширение. Если кто-то знает, как проще вынуть из OR токены и запихнуть туда свои раунды — пожалуйста, комментируйте (IndexedDB не подойдёт, хоть OR и хранит там все данные — но только у владельца карты и только между сессиями).

В каких браузерах работает?

Ядро Chromium и популярность Хрома творят чудеса — в большинстве браузеров так или иначе всё работает. Я проверил на последних версиях Chrome, Opera, Firefox, Edge и Yandex. Для Firefox, который единственный на другом ядре и несколько отличается в плане движка, я даже прошёл валидацию через Центр разработчиков, благо, если не публиковать через их магазин, то это делается легко и быстро, не в пример Гуглу.

Почему всё на английском?

Сам Owlbear тоже на английском, поэтому, когда я начал прикручивать к нему свой велосипед, я как-то не задумываясь стал делать так, чтобы оно согласовалось со всем остальным в интерфейсе. Если надо будет, могу переделать, но пока лениво.

Какие разрешения используются?

Только разрешение на чтение списка открытых вкладок, содержимого Owlbear Rodeo (и только его!) и работу с хранилищем для сохранения настроек и сессий.

А вдруг там вирусы?

Там обычный говнокод, если и тормозит — то только по причине моей криворукости, а никак не злонамеренности. Если что, всегда можно посмотреть и убедиться самостоятельно. Чтобы удобнее смотреть — залил на GitHub.

Заключение

Буду рад, если это будет кому-нибудь полезно. В будущем я планирую залить расширение в Chrome Webstore — опять же, скорее для собственного общего развития. Ну и ребятам, с которыми я играю, будет проще обновляться, если я что-то ещё туда докручу. Напоследок, ссылки одним списком:

  • Mozilla extension. XPI — подписанный, для Firefox
  • Chrome extension. CRX — не подписан, работает в Яндексе и Опере
  • Запароленный архив. ZIP — для Chrome и Edge (пароль 1)

Если кто-то на DTF кроме меня пользуется Owlbear Rodeo — расскажите, чего ещё там не хватает для полного счастья? И если не OR — то какими другими VTT пользуетесь вы?

53
37 комментариев