Текстовая MMO RPG на движке форума Invision 5 с PWA приложением и кубиками

от автора

Привет, Хабр! Текстовые браузерные MMO вроде старой «Тюряги онлайн» — жанр древний, но до сих пор живой, особенно среди фанатов олдскульных вселенных. В сообществах готоманов нашу игру уже смело окрестили «Тюрягой онлайн 2.0», и сходство тут прямое: и там, и там на бэкенде крутится суровый выживач на зоне. Только в Тюряге ты обычный зэк на нарах, а Миненталь — это колония под магическим барьером, где каждый кусок мяса падальщика на счету. Игрок либо ходит на охоту и пашет на фракцию, либо быстро отбросит коньки в канаве от голода или первого же каторжника.

Когда мы на Бесте с нашими технарями задумали сделать эту тактическую RPG «Путь Героя», пришлось выбирать платформу для серверной части. В итоге мы решили использовать наш старый форум ещё времён 2004 года, обновив его с древней версии 3.4.6 до свежего каркаса IPS 5. Из коробки у него есть всё, что нужно: нормальная система прав, готовая база пользователей и вменяемое API. Но чтобы превратить обычный форум в нормальную игру, пришлось знатно поковыряться под капотом и в базах. Первым делом нужно было решить две главные проблемы: как упаковать всё это дело в легкое мобильное приложение и раз и навсегда отвадить игроков от читерства с кубиками.

https://habrastorage.org/getpro/habr/upload_files/80d/7c2/4ff/80d7c24ff5f233df19d17f5e877e3c7e.jpg

Вот так выглядит основной экран игры со всеми вкладками. На компьютере всё это спокойно отображается в привычном форумном стиле — на большом мониторе хватает места, чтобы аккуратно развернуть все игровые панели. Нативные приложения под iOS и Android мы делать не стали — для игрового форума это слишком дорого и долго. Вместо этого завернули мобильную версию в PWA. Для игроков это выглядит как магия: приложение вообще ничего не весит, скачивать из сторов его не нужно. Человек просто заходит на форум через Хром или Сафари, жмет «Добавить на главный экран», и у него на телефоне появляется полноценная иконка. При этом мы убрали из интерфейса все браузерные элементы — адресную строку и кнопки «вперед‑назад». Игра открывается сразу на весь экран смартфона, так что ничего не отвлекает от атмосферы Готики. Плюс это помогло сэкономить мобильный трафик. Движок форума IPS 5 сам по себе довольно тяжелый, но за счет кэширования в PWA все картинки, аватарки и шапка сайта сохраняются в памяти телефона один раз. Из сети приложение качает только свежий текст — новые сообщения и логи. Поэтому играть комфортно даже там, где плохо ловит интернет. Установка занимает один клик, приложение весит условные «ноль мегабайт» и вообще не высаживает батарейку, потому что тяжелой 3D‑графики тут нет. Зато игрок сразу видит чистый игровой интерфейс: свой шмот, крафт, арену, рынок и наставников. При этом PWA — это просто удобный бонус для игры с телефона, и никто не обязан сидеть только в нём.

Бэкенд оставили на Invision 5. Движок используем для авторизации пользователей и хранения их учетных записей, но саму структуру сильно переделали. Все игровые механики привязали к аккаунтам форума и их правам. Сами локации Миненталя, прокачка персонажей, шмот и инвентарь пишутся в наши собственные таблицы в БД, так что стандартные таблицы форума для тем и постов в игровом процессе вообще не участвуют — там как и прежде идёт живое общение игроков по любой теме. Единственное исключение — мы связали баланс руды с активностью на форуме. Сервер проверяет длину сообщений, и за каждый пост от 100 символов игроку автоматически начисляется случайное число руды от 5 до 15 прямо в его игровой кошелек. За создание новой темы, понятное дело, отсыпаем больше — там начисляется от 15 до 35 единиц руды. Плюс добавили чисто готическую фишку: при любом начислении есть небольшой шанс «попасть в жилу», и тогда заработанная руда удваивается.

Главная техническая проблема в текстовых играх — это механика бросков. Если считать результаты на стороне клиента, игроки начинают жестко мухлевать. Например, когда в драке выпадает единица, хитрый пользователь просто обновляет страницу или закрывает приложение до того, как данные уйдут на сервер, и пробует бросить кубик заново. Эта лазейка закрыта раз и навсегда на стороне сервера. Игрок вообще не кидает кубики руками — он просто кликает по кнопке «Искать добычу» в интерфейсе приложения. В этот момент бэкенд сам крутит рандом, прибавляет к нему силу или ловкость персонажа и намертво записывает итоговый результат в отдельную таблицу базы данных. И только после этого система выдает готовый текстовый результат на экран. Переиграть или подкрутить бросок физически невозможно: даже если игрок дернет шнур интернета или закроет приложение, в базе уже зафиксирован честный результат, который PWA выведет в лог при следующем запуске.

https://habrastorage.org/getpro/habr/upload_files/15b/581/8bc/15b5818bc0b3003c4004b3c7cb69fbbb.jpg

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

https://habrastorage.org/getpro/habr/upload_files/6a2/e12/44a/6a2e1244a7302867da459c8118242d0e.jpg

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

Использование Invision 5 в качестве готового каркаса сэкономило месяцы разработки: базовые вещи вроде админки, авторизации и настройки прав пользователей были доступны сразу. Связка этого бэкенда с PWA полностью решила проблему кроссплатформенности. В итоге получилась мобильная игра, которая запускается на телефоне в один клик. Побегать по старому доброму Миненталю теперь можно хоть в метро по дороге на работу — ничего не лагает, и игрокам не нужно ничего скачивать из магазинов приложений.

Посмотреть, как вся эта серверная математика, фракции и бои работают вживую, а заодно протестировать интерфейс и боевые логи можно на нашем портале Best Gothic.

ссылка на оригинал статьи https://habr.com/ru/articles/1062240/