Система для работы с чарниками для ролевых игр

Сегодня пятница, так что самое время предаться нашим весёлым странным страстям. Надеюсь, что здесь найдётся аудитория, которая при словосочетании «ролевые игры» представляет себе нечто отличное от девки с плёткой в латексе… Если вы именно о ней и подумали, то дальше читать вам, скорее всего, будет неинтересно.

На самом деле речь идёт про это.
ef383803161744d6bb266fd891908f66.png
Кадр из фильма восхитительной серии The Gamers.


Читаете дальше? Отлично! Наверняка вы уже не первый год играете в DnD, WoD, warhammer или какую-нибудь другую хорошую игру. Я уже который год играю по разным сеттингам Мира Тьмы — однако, пост будет про универсальные чарники, а не какую-то конкретную систему.

Постановка задачи


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

  • Он должен редактироваться в онлайне. Потому что какого чёрта иначе?
  • Должна быть возможность расшарить чарник на мастера других заинтересованных лиц
  • Он должен быть красивым. Например, используемые всеми для Мира Тьмы Mr Gone«s Character Sheets выглядят вот так (осторожно, по ссылке тяжёлый pdf). Электронный должен быть не хуже.
  • Он должен адекватно печататься. Электронная версия это хорошо, но ничто не заменит тёплого лампового листа на столе.
  • У него должно быть понятие ревизий. Ревизии должны обладать комментариями, возможностью сравнения и восстановления.
  • Желательна возможность оставлять комментарии.
  • Желателен вспомогательный алгоритм для генерации нового персонажа. В системах генерёжки обычно сам чёрт ногу сломит, и проверять по 10 раз, правильно ли ты распределил очки — очень уныло.
  • Должна быть возможность кому угодно сделать произвольный чарник. Ну или должен быть со старта полный набор требуемых чарников.


К сожалению, полному набору этих требований (даже без учёта «желательных») не удовлетворяет ничего. Поэтому два года назад я решил, что быстренько сделаю свою систему для работы с чарниками. Гмм, быстренько… Как же я сильно ошибался.

Решение


В общем, долго ли, коротко ли — я сделал такую систему. На момент двухлетней давности она была на PHP+MySQL, для отображения всякого хитрого добра использовал JQuery+Bootstrap. Сразу прошу не кидаться тухлыми помидорами — я бэкендер, а не фронтендер, так что делал на том, что под руку попало. Зато у сделанного был большой плюс — оно работает и реализовывает все мои хотелки:

  • Возможность добавлять любые красивые чарники. Сами чарники представляют собой автономные сущности, написанные чисто на HTML+CSS+JS.
  • Чарники можно распечатать, хоть для этого и приходилось сильно извращаться в некоторых местах;
  • Есть авторизация через Google и возможность давать доступ к чарникам;
  • Есть ревизии с возможностью отката и просмотра изменений;
  • Есть возможность комментирования;
  • Отлично смотрится с планшета и даже телефона;


Как пример — вот так выглядит чарник смертного, а вот так — чарник вампира со стилизацией под vampire the requiem.

Оказалось безумно удобно, однако создание красивого чарника времени отнимает немерянно. Поэтому я закинул удочку в пару сообществ на предмет совместного доделывания… Но энтузиастов не нашлось. Так что на этих двух чарниках я и остановился.

Так почему я пишу этот пост спустя два года? Я всё ещё надеюсь на помощь играющего сообщества, да и повод всплыл хороший. На днях я решил поправить мелкий баг в чарнике для смертных… И опомнился только тогда, когда сделал построение чарника при помощи Node.JS, gulp, babel и browserify. Увы, полностью выпилить JQuery пока что не в моих силах, поскольку я не владею всякими хорошими вещами вроде Angular, React, Vue и так далее — да и будет довольно долго искать и допиливать новые компоненты под новый стек. Однако, начало положено — можно писать на ES6, JQuery Deferreds были заменены на bluebird Promises, HTTP запросы вместо JQuery реализованы при помощи request-promise, часть зависимостей теперь подтягиваются из npm, и так далее. Рефакторингом кода я почти не занимался — задачей было просто завести вариант двухлетней давности — поэтому там есть некоторое количество ужаса. Но повторюсь — у этого кода есть большой плюс — он работает!

Планы


Теоретически, планов есть довольно много:

  • Сделать mock для HTTP запросов из чарника, чтобы можно полноценно тестировать чарник без взаимодействия с сервисом;
  • Переползти на какой-то адекватный фронтендовый стек;
  • Сделать больше красивых хороших чарников;
  • Переписать бэкенд самого сервиса на Node.JS.


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

Хотелось бы написать, что можно делать всякие хорошие вещи за пожертвования —, но увы, времени это занимает слишком долго, и выходит очень дорого. Так что надеюсь только на энтузиазм разработчиков. Если вам интересно, то я буду очень рад участию. Сами чарники есть в open source на github, лицензия MIT. Если вы хотите использовать их для чего-то ещё — я только за —, но рассказывайте, любопытно же!

Ссылки


  1. Система
  2. То же самое в виде Android приложения;
  3. Автор дизайна, который я использовал;
  4. Чарник смертного — свежая переделка;
  5. Красивый чарник вампира, без Node.JS.

© Geektimes