Расширение для 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 пользуетесь вы?

5353
35 комментариев

Ну как альтернатива roll2 и tabletop simulator может и пойдет, но по мне roll20 вполне удобен. Но за идею найти скрипт очередности хода спасибо, может что то такое в roll20 можно добавить.

2
Ответить

Для roll20, кажется, все что можно и что нельзя давно уже допилено энтузиастами. Так что поищите, может и есть.

Ответить

Черт, надо было голосовалку запилить, интересно соотношение использующих OR и roll20 среди настольщиков DTF. Судя по подписчикам на reddit, там оно примерно 1 к 50. Но у roll20 была фора в несколько лет, так что посмотрим, во что разовьётся OR.

Ответить

В смысле скрипт очередности хода? Там же инициатива в чарниках обычно есть. А групповая инициатива изи добавляется в VTTES (если вы по пятерке играете, конечно)

Ответить

Респект тебе. Рол 20 меня никогда особо не привлекал, всегда играли через ТТС, надо бы заценить OR. Только народ не могу собрать чтоб поводить и сам ничего подходящего не могу найти, чтоб поиграть.

1
Ответить

Спасибо) Ролл 20 действительно замудрёный, помимо того что полу-платный и требует регистрации. Плюс у моих сопартийцев не всё гладко с английским, а там в отличие от OBR все-таки надо немного понимать.

А в ТТС играть я не пробовал, какие у него преимущества? Чарники, насколько я понимаю, там не сделать удобно, а что ещё? Такая же карта и кубы как в OBR, только в 3D?

1
Ответить

Спасибо вам, очень крутую штуку сделали!
Сам периодически использую и roll20, и Foundry, и Owlbear. Последний явно выигрывает по темпам подготовки игры, что для меня крайне актуально.
Ну а для детективных сценариев без "аркадных головоломок" первые два и вовсе почти не имеют преимуществ.

1
Ответить