что такое рпг сервера
Чем привлекателен жанр RPG — ролевая система, открытые миры и не только
Содержание
Содержание
Компьютерные ролевые игры произошли от «настолок». Сейчас между ними уже мало общего, RPG мутируют и смешиваются с другими жанрами, например шутерами. В этом материале поговорим об основных чертах «ролевок», геймплейных элементах, поджанрах и ярких представителях за последние годы.
Особенности
В RPG (от англ. role-playing game — ролевая игра) ваш герой бродит по обширному миру, знакомится с неигровыми персонажами (NPC, от англ. none-player character), выполняет квесты, рубит монстров, получает в результате приключений очки опыта и ценные предметы. Один из столпов жанра — прокачка. Вы можете повлиять на характеристики персонажа, способности, умения и оружие/броню. Развивайте персонажа по-своему и проходите игру в удобной манере. Подобная гибкость подкупает, пусть она и далека от «отыгрыша роли», как в «настолках».
Авторы обычно предлагают создать собственного героя или взять готовенького. Часто к цели вы ведете целый отряд (партию) «приключенцев», причем у каждого есть имя, биография, мотивы. Количество бойцов невелико — как правило, не больше шести.
Сюжет не менее важен, чем прокачка и руководство отрядом. На него влияют ваши действия и выбор в диалогах, приводящие к одной из концовок.
С начала 2000-х годов события в RPG разворачиваются в открытых мирах. Они детально проработаны и создают иллюзию живой вселенной. Что до сеттинга (место действия/антураж), то разработчики часто выбирают фэнтези. Встречаются и исключения: киберпанк (Cyberpunk 2077, Deus Ex, Shadowrun), стимпанк (Arcanum: Of Steamworks and Magick Obscura), мистика с вампирами и оборотнями (Vampire: The Masquerade — Bloodlines), постапокалипсис (Wasteland, Shin Megami Tensei, Fallout).
А боевые системы лучше рассматривать в рамках поджанров.
Поджанры
Как и любой старый игровой жанр, RPG породили немало ответвлений. Остановимся на главных.
JRPG. Ролевые игры родом из Японии. От западных отличаются линейным сценарием и заранее созданным главным героем (вы меняете лишь имя, да и то не всегда). Во время боя партию перекидывает на отдельный экран. Раньше для прокачки японцы поголовно обращались к random encounters, то есть случайным битвам: вы не видите врага заранее и не можете его миновать. Они очень раздражают, когда нужно много перемещаться по локации. Сами схватки в большинстве JRPG, как и в классических западных «ролевках», пошаговые и требуют усидчивости, знания сильных сторон героя и его соратников, недостатков противника.
Из известных серий приведем Final Fantasy, Dragon Quest, Pokemon, Tales of, Kingdom Hearts, Star Ocean, Persona.
Action/RPG. В «ролевых боевиках» важен навык геймера, его реакция, а не только параметры персонажа. Сюжет может быть подан в обрывочном и даже примитивном виде, к примеру, через описания предметов. Популярные представители: Diablo, Monster Hunter, Dark Souls.
Помните, что в action/RPG все-таки важны характеристики и классы. Не стоит их путать с агрессивными слэшерами и прямолинейными экшенами/hack and slash.
Тактическая RPG. Смесь «ролевки» и тактической стратегии. Крючком, цепляющим геймера, тут выступают пошаговые баталии. Они происходят на карте-сетке, персонажи ступают по квадратикам. Необходимо учитывать естественные преграды и укрытия. Из игр последних лет в качестве примера приведем Ash of Gods: Redemption и серию Expeditions.
Гибрид RPG и шутера. Подобные проекты соединяют геймплейные черты ролевой игры и шутера. Это Mass Effect, Outriders, The Outer Worlds, Destiny, Deus Ex. В них продуманное повествование совмещено со стрельбой в реальном времени и прокачкой героя.
Dungeon crawler. В играх этого поджанра сценарий поверхностный — вас просто посылают в подземелья обходить ловушки, уничтожать нежить, чудовищ и собирать добычу. С каждым новым подземельем сложность растет. Зачастую они генерируются случайным образом, плюс создатели вводят механику «permadeath», когда со смертью персонажа вы теряете весь прогресс. Авторы Darkest Dungeon разнообразили поджанр, внедрив показатель душевного здоровья — следите за ним, иначе отряд под стрессом перестанет выполнять приказы.
Текстовая RPG. Этакая интерактивная книга. Вы листаете страницы, принимаете решения, получаете очки опыта и тратите их на выбранные характеристики. Текст тут первичен, а происходящее демонстрируется при помощи статичных картинок. Текстовые RPG родственны японским визуальным новеллам. В нынешнем году в поджанре прогремела The Life and Suffering of Sir Brante от томской студии Sever.
MMORPG. В массовых многопользовательских онлайн-RPG застревают сотни тысяч и миллионы геймеров. Разработчики создают десятки миров-копий на разных серверах, где собираются тысячи игроков. Чтобы проходить сложные подземелья, геймеры объединяются в гильдии. Модель оплаты может варьироваться: продажа аддонов, микротранзакции, ежемесячная подписка. Подобные проекты способны принести создателям куда больше, чем одиночные «ролевки». В то же время разработчики тратят огромные деньги на поддержание сетевой вселенной. Сейчас за аудиторию сражаются два MMO-тяжеловеса — World of Warcraft и Final Fantasy 14.
Титаны последних лет
Теперь поговорим детальнее о представителях жанра. А именно — о недавних хитах.
Cyberpunk 2077. Долгострой CD Projekt RED поразил кинематографичностью, размерами мегаполиса Найт-Сити, Киану Ривзом в одной из главных ролей. Разочаровал обилием технических ошибок. Поляки неторопливо латают бреши и не спешат выпускать игру на «некстгене».
Dragon Quest 11: Echoes of an Elusive Age. Японская RPG с дизайном персонажей Акиры Ториямы, похожая на любимую сказку или героический телесериал из детства. Она привлекает разношерстным зоопарком противников, такими не похожими друг на друга регионами, отсутствием какого-либо давления на пользователя вроде «гринда».
The Witcher 3: Wild Hunt. Еще один громкий проект CD Projekt RED. Его любят за изобретательные квесты (что основные, что побочные), запоминающийся саундтрек, красивый открытый мир.
Elex. Неожиданно бодрое возвращение ветеранов — авторов серии Gothic. Особенно им удался постапокалиптический мир — планета Магалан, где средневековье схлестнулось с шагающими роботами. В следующем году на прилавках окажется продолжение, Elex 2.
Kingdom Come: Deliverance. Серьезная историческая RPG про Богемию (Чехию) XV века. До релиза ее дотащил Даниэль Вавра, «отец» Mafia. Он же написал для игры цепкие диалоги.
The Outer Worlds. Помесь RPG и шутера от Obsidian. К изображению событий на далекой-далекой планете американская студия подошла, как обычно, с юмором.
Pillars of Eternity. Разработчик — тоже Obsidian. На сей раз перед вами упражнение в духе «Как сделать ностальгическую RPG в наши дни». Obsidian с ним справилась образцово. И породила моду на изометрические RPG.
South Park: The Stick of Truth. Снова Obsidian! Игры по лицензиям редко выходят приличными, но The Stick of Truth — исключение из правила. Сценарий написали Мэтт Стоун и Трей Паркер, создатели мультсериала, а Obsidian придумала затягивающие боевую и ролевую системы.
Final Fantasy 7 Remake. Square Enix обновила культовую FF 7 для современного поколения. Получилось здорово. Топовая графика, напряженные сражения, бережное отношение к классике. Одна беда: издатель разделил «ролевку» на несколько эпизодов и пока не сообщает, когда фанаты увидят продолжение.
Kingdom Hearts 3. Возвращение в детство: герои путешествуют по мирам Disney — есть локация из «Пиратов Карибского моря», «Корпорации монстров», «Истории игрушек» и не только.
Что на горизонте
Напоследок о том, что ждет жанр. Проиллюстрируем, опять же, конкретными примерами.
RPG ценят за свободу в развитии героя и исследовании мира, за прямое влияние на то, как сложится история. А какие черты жанра нравятся вам? Что предпочтете — Avowed, Starfield или Final Fantasy 16? Поделитесь в комментариях!
Разработка ММО РПГ – практическое руководство. Сервер (часть 1)
В тексте будет много отсылок к функционалу «Звездных Призраков», но я постараюсь излагать материал так, чтобы вам не было нужды вникать (и играть) в наш продукт. Однако, для лучшего понимания материала желательно потратить пару минут и посмотреть, как это все выглядит.
В статье мы сосредоточимся именно на архитектурных решениях применительно к backend’у MMO RPG в реальном времени. Исходного кода будет не много и он точно не будет содержать таких специфических для С++ вещей как множественное наследование или шаблоны. Задача данной статьи помочь в проектировании игрового сервера и ознакомить всех желающих со спецификой игрового backend’а.
Описываемые решения достаточно универсальны и вполне подойдут для многих RPG. В качестве иллюстрации в конце статьи я приведу пример использования описанной архитектуры в игре «про эльфов».
Выбор технологии
Чтобы реализовать задуманный нами геймплей, был необходим сервер с постоянным сокетным соединением и достаточно малым временем отклика на действие любого пользователя — не более 50мс, не считая пинга. Выбор технологий, которые позволяли удовлетворить такие требования, не так уж и велик. На тот момент у нашей кампании уже был опыт реализации backend’а на С++ для неигрового проекта, и поэтому выбор был сделан в пользу именно С++: у нас были и люди, и опыт в этой технологии.
Возможно, Java (или некая другая технология) была бы лучшим решением, но в нашей команде не было сильного Java-разработчика, не говоря уже об архитекторе с опытом создания серверных решений. В такой ситуации нанимать новых специалистов, тратить месяцы и десятки тысяч долларов на то, чтобы проверить что лучше, а так же выкинуть работающий и оттестированный код на С++, который мы легко могли повторно использовать – все это далеко выходило за рамки нашего бюджета и отведенного времени на разработку.
Я затрудняюсь ответить каким бы вышел сервер на Java (или какой-то другой технологии), но на С++ мы получили именно то, что нам требовалось, к тому же за вменяемые сроки.
Общая схема сервера
Сервер состоит из следующих модулей (см. рис.1).
Модуль Ship
Прототипы предметов и предметы
Этот модуль оперирует материальными объектами типа «предмет». То есть со всем, что можно положить в трюм, выбросить в космос, купить в магазине или передать другому игроку. Так же этот модуль считает базовые и производные от установленных устройств параметры корабля.
На рис. 2 представлена диаграмма классов (диаграмма упрощена для большей наглядности). Вы видите разделение классов на две части: внизу прототипы предметов, а вверху – сами предметы. Прототипы полностью статичны и безлики – они загружаются из БД, не могут изменяться и никому не принадлежат. А объекты предметов (все потомки от ICargo), наоборот, могут быть модифицированы и содержат в себе уникальный ID, который позволяет идентифицировать конкретный предмет и определить в каком месте он находится (трюм, склад, контейнер в космосе, магазин и т.д.). Такой подход добавляет гибкости и позволяет модифицировать функционал предметов, не затрагивая другие классы.
В нашем решении большинство потомков ICargo (вернее все, кроме TDevice и TShip) являются просто проксями для своих прототипов. Тогда возникает вопрос: а так ли они были нужны? Ведь проще создавать потомков прототипов, с добавлением уникального ID для идентификации, да и дело с концом? Нет, не проще. Но при таком подходе, во-первых, нам все равно потребовалось бы два класса на предмет (прототип и потомок), а во-вторых, у нас бы смешивались динамические данные со статическими (ведь прототипы неизменны). Вдобавок ко всему, конечно же, увеличился бы расход памяти и время создания предмета, потому что необходимо было бы клонировать прототип со всеми его полями. В подтверждение сказанному приведу такой пример: изначально у нас в игре не было чипов, и когда они появились, то все изменения свелись к добавлению пары классов TMicromodule/TMicromoduleProto с добавлением функционала по учету установленных чипов в TDevice. Класс TShip, как и все прочие классы, не был затронут вообще.
Расчет параметров корабля и обрудования
В «Звездных Призраках» есть много различных типов устройств (турели, ракетницы, радар, система маскировки, защитное поле, усилители урона и прочее). Казалось бы, для каждого из них необходимо делать класс-поток от TDevice и реализовывать там специфичный функционал для этого устройства. Но давайте еще раз взглянем на общую схему сервера и описание модуля Ship: этот модуль, в основном, просто предоставляет итоговые расчетные параметры корабля более верхнему уровню, при этом сам функции предметов не выполняет. Поясню на примере. Класс TShip содержит параметр ScanningRange – радиус работы радара, – но фактическую фильтрацию объектов по дальности он не делает. И, что самое главное, на уровне модуля Ship сделать эту фильтрацию не получится, так как у объектов нет координат в пространстве. Самое время спросить себя: есть ли смысл создавать пару классов TRadarPrototype (как потомка от TProtoBase) и TRadar (как потомка от TDevice), отдельную таблицу в БД для этого класса и страницу в админке только ради одного поля ScanningRange? Ответ очевиден: смысл всех этих строк кода и классов весьма сомнителен. Именно поэтому мы создали один класс TStaticParams, содержащий в себе все параметры, которые могут быть у любого устройства в игре, а также класс TPrototypeMod, который может загружать из БД TStaticParams.
Конечно это излишество, но не очень большое: на данный момент класс TStaticParams содержит всего 34 поля типа int. А вот взамен мы получили несколько отличных плюшек. Во-первых, простоту модификации. Теперь можно создавать новые типы устройств и параметров без создания новых классов. Во-вторых, простоту подсчета параметров. Достаточно просто сложить все одноименные поля всех TStaticParams в корабле, чтобы получить итоговые параметры! Никаких виртуальных вызовов или downcast’ов – простая операция «+=» в цикле. В-третьих, мы получили геймдизайнерскую гибкость. Например, у нас в игре есть чип, который может быть установлен в любое устройство, и дает он НР. Такой механизм позволяет геймдизайнерам резвиться так как им захочется, при этом абсолютно не дергая программистов по каждой мелочи типа «ребзя, допишите мне тут капарик, чтобы я мог задавать в устройстве маскировки бонус к уклонению».
Расчет выстрела
Кроме расчета параметров устройств и проверки на возможность установки в слот, класс TShip выполняет еще одну функцию – расчет параметров выстрела. Делает это метод SFireResult TShip::Fire(NSlotPlace slot). Этот метод проверяет возможность выстрела (оружие ли это вообще, закончился ли кулдаун устройства, есть ли патроны для выстрела), рассчитывает наносимый урон, количество произведенных выстрелов, а также бросает кубик на допустимые флаги выстрела (такие, как нанесение критического урона). Все параметры записываются в структуру SFireResult, устройство ставится в кул-даун, списываются боеприпасы, результат выстрела возвращается. При этом TShip не может проверить ни дальность, ни параметры объекта, в который стреляют (например, если у объекта есть защита и урон нужно снизить). Это делает верхний уровень Space, который располагает всеми необходимыми данными.
Остальные классы модуля Ship
Класс TProtoBase содержит в себе общие данные для любого предмета, такие как ImageID, Name, Level и т.д.
ICargo содержит в себе указатель на TProtoBase и проксирует его данные наружу, а также предоставляет Factory для создания предметов. В этом ему помогает класс-синглтон TDeviceHandbook, который загружает из БД все протитипы и содержит указатели на них.
Класс TCargoBay – это хранилище объектов типа ICargo. Он умеет сохранять свое состояние в БД и предоставляет ряд сервисных функций таких как: поиск ближайшего свободного слота, поиск совместимого стакабельного предмета (например, патронов, чтобы объединить с другими патронами) и т.п. Потомки от этого класса накладывают ограничения на типы хранимых предметов (например, в ангаре можно хранить только корабли, а на складе – все кроме кораблей), и, по необходимости, ограничения на количество доступных ячеек для хранения.
Класс IShipNotifyReciver является интерфейсным и обеспечивает связь с более высоким уровнем. Например, передачу на уровень Main сообщения о начале регенерации, чтобы можно было отправить соответствующий пакет клиенту.
Модуль Space
Этот модуль оперирует космическими объектами (КО), такими как космические корабли, астероиды, планеты и т.д. У всех КО есть текущие координаты в космосе и вектор их движения. Диаграмма классов представлена на рис.3 (для большей наглядности диаграмма несколько упрощена).
Не смотря на алгоритмическую сложность, с архитектурной точки зрения этот модуль достаточно прост. Все объекты в космосе (корабли, астероиды, планеты, контейнеры, звезда) являются потомками TSpaceObject и находятся в объекте типа TSystem. У TSpaceObject есть текущие координаты, размер и два объекта, управляющие его поведением – это FlyCommand (потомок от ISpaceFlyTo) и Action (потомок от ISpaceAction). FlyCommand вычисляет текущие координаты объекта и его текущую скорость (в данный момент времени). Алгоритм расчета зависит от типа команды: для движения по орбите он один, для линейного перемещения другой, для перемещения с плавными поворотами – третий. Action отвечает за более сложные алгоритмы перемещения объекта. Например, TFollowShipAction выполняет преследование указанной цели. Для этого она в каждом вызове Update проверяет, изменились ли координаты цели и если да, то заменяет в Owner команду FlyCommand (с указанными новыми координатами цели). Введение Action позволило существенно упростить создание AI и избежать дублирования кода, так как функционал, реализуемый в Action необходим и кораблям игроков и ботам.
Наличие FlyCommand позволяет легко задать необходимый тип движения для любого объекта в космосе и передать эту команду на клиент в виде коэффициентов уравнения движения. Это позволяет существенно уменьшить количество передаваемых данных и упростить реализацию нового поведения на стороне сервера.
Нанесение урона
У класса TSpaceObject есть два виртуальных метода – CorrectDamage и ApplyDamage, а у класса TSystem есть метод DoDamage. Когда какой-то объект хочет нанести урон другому объекту (например, астероид попал в другой объект), он сообщает это TSystem. Система вызывает CorrectDamage и, если урон не нулевой (например, планета имунна к любым видам урона), то она отправляет сообщение о нанесенном уроне «наверх» (чтобы передать в клиенты) и вызывает ApplyDamage, чтобы реципиент выполнил специфические действия (например, корабль уменьшает НР и если НР равно нулю, корабль выбрасывает контейнеры в космос).
Класс TSpaceShip содержит метод FireSlot, который реализует стрельбу спец.абилками. Он проверяет допустимую дистанцию, потом вызывает TShip:: Fire и в зависимости от типа абилки производит дальнейшие действия. Например, для MissileLauncher создает ракеты.
Остальные классы модуля Space
Класс ISpaceShipNotifyReciver используется в TSpaceShip для передачи в верхний модуль сообщений типа «меня атаковали», «я убит», «готов к гиперпереходу» и т.д.
Класс ISpaceSystemNotifyReciver используется в TSystem для передачи наверх сообщений о добавлении/удалении космических объектов, о новых FlyCommands и о нанесении урона.
Класс TGalaxy является синглтоном и содержит в себе список всех TSystem в Галактике.
РПГ Майнкрафт сервера
РПГ есть и в Майнкрафт, достаточно просто зайти на один из таких серверов и погрузиться в один из многочисленных миров с прокачкой персонажа, квестами, редкими доспехами, магией и эпическим оружием. Хороший RPG сервер в Майнкрафт не отличается от классических РПГ игр, так как Minecraft является отличной платформой для создания мини-игр в этом жанре.
Лучшие РПГ Майнкрафт сервера
Так как Майнкрафт — это действительно одна из самых лучших платформ для построения собственных РПГ карт или РПГ Майнкрафт серверов, то наверное, первые режимы игры, которые стали появляться — это магические Майнкрафт сервера с прокачкой персонажа и простым набором навыков. Баланс на таких серверах был очень перекошен.
На сегодняшний момент сервера Майнкрафт с РПГ очень сильно продвинулись, в том числе и за счет развития самой игры. Они все больше погружают в ту самую обстановку настоящего RPG на уровне отдельных игр со своим движком. А зачастую появляются просто уникальные проекты со своими историями и приключениями, прокачкой, модами и волшебством.
Разумеется, это не всегда Майнкрафт сервера, посвященные магии и колдовству. РПГ в Майнкрафт может быть прикручено практически к любому игровому режиму. Прокачать персонажа можно как на сервере с зомби апокалипсисом, тик и на Minecraft DayZ сервере, или даже на ванильном выживании.
Как играть на РПГ сервере Майнкрафт?
Обычно все зависит от сервера и режима игры, но такие сервера в обязательном порядке имеют полный мануал сразу при входе на сервер. Примером хорошего обращения с новичком на РПГ сервере является встреча с NPC, которые и разъяснят суть игры.
Игра на сервере может быть линейной, а может быть и открытой. Обычно игроку будет предложено выбрать класс, профессию или расу. От этого будут зависеть навыки персонажа и его способности.
Как зайти на РПГ сервер?
Для этого достаточно просто выбрать сервер, скопировать его айпи, добавить в лаунчер и начать играть. Если для игры могут потребоваться моды, то игрок будет предупрежден об этом при попытке зайти на сервер с РПГ.
В целом вход на такой сервер ничем не отличается от стандартной процедуры. И не нужно качать РПГ сборки или моды, ведь серверов с RPG на данный момент достаточно.
Как найти надежный сервер с РПГ?
Тут все так же, как и с другими серверами. Надежные сервера работают долго, развиваются и постоянно радуют игроков новостями и обзорами нововведений. РПГ сервер в первую очередь нуждается в повседневных доработках и в исправлении ошибок.
Надежный сервер сам проявит себя, лишь стоит на него зайти и провести на нем некоторое время. Обычно режимы игры с RPG захватывают на очень долгое время!