Расширение для Owlbear Rodeo
Owlbear Rodeo — простой и бесплатный VTT (виртуальный игровой стол), работающий через веб. Я сделал небольшое браузерное расширение, которое добавляет в него трекинг раундов, бросков кубов и ещё пару маленьких фишек, делая его чуть более удобным для регулярных онлайн-посиделок.
Невозможно недооценить преимущества онлайна в нашу ковидную эпоху. Играть в настолки хочется ничуть не меньше, но возможность встретиться есть не всегда. На помощь приходят сервисы конференций, типа Discord, но их одних мало — нужно ещё что-то, что сыграет роль игрового поля. В случае с D&D и другими НРИ на нём будут карта и миниатюры, а больше ничего и не нужно.
Так в нашей жизни появляются виртуальные игровые столы, или попросту VTT (virtual table top). Под простейший VTT можно приспособить даже MS Paint или какой-нибудь Photoshop (мы когда-то с этого начинали). Специализированные же программы бывают навороченные и универсальные, вроде TableTop Simulator, а бывают узкоспециальные, наподобие FantasyGrounds.
Мы с друзьями в D&D сессиях часто используем Owlbear Rodeo как бесплатную и простую альтернативу продвинутым столам вроде FantasyGrounds и Roll20, когда не удаётся собраться вживую. Чтобы начать играть, не нужно вообще ничего. Без регистрации и смс, как говорится.
Но у этой простоты есть и оборотная сторона — иногда не хватает функций, дающих элементарный комфорт. В сложных энкаунтерах бывает трудно уследить, кто за кем ходит. Само собой, как и в реальной игре, эта обязанность лежит на Мастере, но при общении через онлайн-сервисы выяснение очередности почему-то занимает больше времени и иногда начинает раздражать. То же с кубами — Owlbear показывает, кто сколько кинул, но только на левой панели (которую неплохо бы скрыть), и отличить старый бросок от переброса, да и вообще отсечь момент броска бывает довольно сложно.
Я ни разу не «тыжпрограммист», но в юности, как многие, грешил быдлокодингом. С возрастом это почти прошло, но тут что-то решил посмотреть, можно ли вывести броски кубиков в более понятном виде, и понеслось. Сначала это планировалось как букмарклет, потом это был кусок кода, запускаемый из консоли разработчика, и вот я уже запаковал это в расширение. Попутно вспомнил JS и немного ковырнул возможности расширений современных браузеров (спойлер: возможностей всё меньше, а огораживания — всё больше). Результат выкладываю сюда — вдруг он будет полезен ещё кому-нибудь, кроме меня и моих сопартийцев.
Функционал расширения
Трекер кубиков
Расширение добавляет небольшое окошко лога в правом нижнем углу. Когда вы (или кто-то ещё) бросаете кубы, в логе отобразится именно этот бросок. Ранее брошенные кубики показаны не будут. В логе всегда явно видно, сколько именно кубиков (и с каким результатом) было брошено. Имена берутся из панели с кубиками, и могут, конечно, не совпадать с именами на карте.
Переброс кубов с включением данного модуля пропадает. Дело в том, как Owlbear обрабатывает перебросы — пока кубики катятся, можно перебрасывать их сколько угодно, остальные увидят результат только после полной остановки кубов. Поэтому если попытаться схватить куб, пока он ещё не остановился, трей будет очищен. В спокойном состоянии нажатие на лоток скрывает его (просто для удобства добавил).
Ещё я зачем-то добавил озвучку броска кубиков. Видимо, просто потому что могу. Для собственных кубов это бесполезно, хоть и немного добавляет аутентичности. Чужие броски кубиков тоже озвучиваются, и это показалось мне вполне удобным. Озвучку, естественно, тоже можно отключать.
Трекер раундов
В правом верхнем углу добавляется такое же небольшое окно со всеми персонажами, которые видны на карте. Один игрок (как правило, Мастер) должен ввести инициативу и (опционально) здоровье для каждого. После этого можно начать бой.
Стрелки вправо-влево переводят ход, а при достижении конца списка — начинают новый раунд. В процессе боя каждому можно ввести урон и навесить состояние (есть три вида состояний на выбор).
Изменения в здоровье и состояниях будут отображаться в общем окне трекера у всех подключенных к этой сессии игроков. Состояния будут сбрасываться через указанное количество раундов, а при наведении на иконку — будет показано, сколько раундов осталось.
Интерфейс окошка немного различается у Мастера и остальных игроков — только Мастер может вносить изменения в параметры, передавать ход и начинать/завершать бой. По завершении боя вся инициатива сбрасывается, но хиты и состояния остаются висеть, на случай, если партия попадёт в новую передрягу на той же карте.
Мы используем цветовые обводки для лучшей читаемости карты: зелёное — игроки, красное — враги. В трекере текущий цвет обводки показан в кружочке рядом с каждым персонажем.
Вот, собственно, и всё, больше я пока ничего не нафантазировал. Ребята, с которыми я играю, хотят ещё хотя бы подобие чарников, но я не уверен, что у меня хватит пороху. Разве что сделать каждому список абилок и возможность кидать заранее предустановленный набор кубов на каждую.
Установка и настройка
Установка через файл расширений
Для пользователей Opera, Firefox и Yandex.browser всё сравнительно просто — нужно скачать соответствующий файл расширения и перетащить его на окошко с плагинами. Браузер спросит разрешения на установку, предупредит (в случае Яндекса) о неподписанном файле, и расширением можно пользоваться.
Скачать файл расширения:
- Mozilla extension. XPI — для Firefox
- Chrome extension. CRX — будет работать в Опере и Яндексе
Установка через режим разработчика
Если у вас Chrome или Edge — политика безопасности обоих не позволяет ставить неподписанные расширения, поэтому придётся чуть повозиться.
- Скачать ZIP-архив с расширением
- Распаковать в любую папку (пароль 1)
- Включить на странице плагинов режим разработчика
- Нажать «Загрузить распакованное расширение»
Включение и отключение модулей
После установки на панели браузера появится иконка дополнения, а в ней — настройки. Можно галочками включать и отключать:
- Трекер раундов боя
- Трекер бросков кубиков
- Озвучивание кубиков
- Запуск со свернутыми боковыми панелями
Ещё в настройках есть кнопка, в зависимости от ситуации служащая для открытия сайта или для быстрого перехода к открытой вкладке с Owlbear Rodeo. Под ссылкой «Недавние сессии» есть список последних открытых игр, чтобы не нужно было искать, где же вы с друзьями были в прошлый раз.
Включение передачи данных боя другим игрокам
После загрузки новой карты Мастер (или любой игрок которому принадлежит карта и который будет вести учёт раундов) должен создать где-нибудь за пределами картинки новый текстовый объект «Заметка», а затем написать туда! (восклицательный знак).
Если после заполнения инициативы там сама начнёт появляться абракадабра — значит, вы на правильном пути. Это, конечно, костыль, но это единственное что я смог придумать для обмена данными между подключёнными к одной сессии игроками.
Представим, что кому-то интересно
Нафига всё это?
Хз, делать было нечего, дело было вечером, точнее, несколькими вечерами. В процессе немного разобрался со структурой расширений, манифестами, вот это вот всё. В итоге получилось удобно, вроде играть стало комфортнее, особенно благодаря логу кубиков.
Но там же сплошной говнокод?
Да, я не кодер, поэтому прошу прощения за кучу говнокода и костылей. Большая часть времени ушла на ковыряние в структуре данных, а потом — на обёртывание всего этого в расширение. Если кто-то знает, как проще вынуть из 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 пользуетесь вы?