Русский
Русский
English
Статистика
Реклама

Mud

MMORPG больше не в Telegram Swift и Kotlin Первый большой проект Часть 1

24.11.2020 16:19:42 | Автор: admin

Прошло полгода с выпуска пробной статьи про создание MMORPG в телеграме. Изменился мир, изменились и планы по игре.

Почему больше не в Telegram

После выпуска первой статьи, энтузиазма писать игру хватило еще на неделю. Прилетели проблемы по работе, поиски новой, да и вообще лето. Проект был отброшен на задний план. В процессе поиска будущего работодателя возникла мысль попробовать себя в разработчиках. Спустя несколько часов диалогов с разными ребятами из IT, выбор пал на iOS-разработку. Благо, на Udemy курсы уже куплены, поэтому из летнего режима переходим в режим разработчика на 1.5[OT1] недели.

Время поиска работодателя шло, и тут приходит идея. А не попробовать ли что-то свое? За час продумываем идею, крутящуюся в голове несколько лет, и через какое-то время получаем макет нашего приложения.

Проводим несколько Cust Dev исследований, и упираемся в понятие красный океан, где сложно найти инвестиции. Если кому интересно, вот пара отрисованных скриншотов проекта, умершего в зародыше.

EventSurf - найди как провести времяEventSurf - найди как провести время

Чем же теперь заниматься? Ведь амбиции трушного разраба никуда не делись. Точно! Есть же детская мечта - написать "свою MMORPG". Да и какой-никакой код на питоне остался.

Стоп? А зачем писать в игру в телеграме? Я зря что ли курсы проходил по iOS? И тут аргументы начали приходить один за другим

  • Ограничение функционалом чатов

  • Прототип у меня неплохо получилось нарисовать (по своему собственному мнению). Значит, и игру смогу

  • MMORPG - это про айдентику игрока среди других. А это труднодостежимо с телегой

  • Визуал воспринимается проще, чем эконки emoji и одноцветный текст

Решено. Делаем iOS

Дизайн

Заходим в Figma. Новый файл. Стоп. Нужна также и айдентика игры.

Ищем палитру цветов. Находим коричневый и бежевый. Вроде отлично подходят под фентезийный мир, в котором все действия будут отображаться в логах. Накинули Background color.

Что следующим этапом? Верно, стартовый экран. На нем должен быть лого и должна быть картинка. Название игры пока не придумано. Берем за пример TBMMORPG (Text based MMORPG). Как сделать красиво? Создаем 2 одинаковых текста, темный подкладываем под светлым, у темного увеличиваем letter spacing.

Теперь нужна картинка. Открываем Aseprite (редактор пиксельных изображений). Час тыкаем кисточкой в пиксели. Закрываем Aseprite. Идем на сайт по продаже спрайтов. Сутки поиска подходящих сетов и 50$, и более 1800 айтемов и персонажей у нас в папке проекта. Выбираем яркого персонажа и загадочного персонажа, ставим в конфронтацию, кладем в лапу оружие, охапка дров и плов готов!

Готово окно входа. Теперь нужен и сам экран с логами.

Ищем бесплатный шрифт, который будет смотреться хорошо на кириллице и соответствовать сеттингу. В текст пихаем картиночки, чтобы не было скучно

Основные механики игры

Notion: выписываем все, что хотим реализовывать в первых версиях игры:

  • Классы: на начальном этапе будут Воин, Лучник, Убийца, Маг

  • Характеристики персонажей: скорость атаки, уклонение, крит

  • Автофарм - даже вне сети.

  • Player vs Mob - автоматический фарм. Выбираются типы мобов доступные в локации, сколько максимум мобов в локации, их HP и атака. Раз в пять секунд персонаж и моб обмениваются ударами. Atack speed накапливается и при скорости атаки 50%, каждый второй обмен ударами, игрок наносит два удара. Мобы бывают с одной звездой, с двумя и с тремя. Самый сложный - с тремя, но с него гораздо вкуснее лут. Но и его появления меньше. В локациях для более высоких уровней могут быть агрессивные мобы. То есть, независимо от того, каких мобов для сражения вы выбрали, агрессивный моб может напасть на вас, даже в момент, когда вы бьете другого моба. Тогда урон будет проходить по игроку от двух мобов.

  • Player vs Player - игрок может выбрать другого игрока в локации и нанести ему урон. Игрок, нанесший урон, приобретает статус PVP и для всех в локации отображается другим цветом. Если на такого игрока нападут, то выигравший получит плюс к счетчику убийств PVP. Если игрок наносит урон игроку, который не находится в статусе PVP и убивает его, игрок переходит в статус PK (Player killer). Если такого игрока убить, с высоким шансом из его инвентаря выпадет при смерти лут, который не привязан к игроку, и его смогут подобрать другие игроки.

  • Скилы - в автобое используются автоматически, но с бОльшим кулдауном и меньшим эффектом. Есть скилы полезные в группе - сагрить мобов, выхилить пати, бафнуть, нанести массовый урон и тд.

  • Крафт - доступен крафт, из собираемых ресурсов, из лута падающего с мобов, из лута падающего с боссов в данжах, из лута падающего при разборе предметов.

  • Группа - на фарме, в PvP, в GvG, в данжи и на боссах можно сражаться в группе. Эффект группы дает бонусы к характеристикам персонажей.

  • Данжи - в данж можно зайти одному или группой. В данже - N комнат. В каждой комнате - M волн мобов, которые атакуют игроков. В конце каждой комнаты - мини-босс. Последняя комната с основным и самым вкусным боссом, с которого падают уникальные ресурсы, необходимые для крафта, для повышения уровня Клана и для изучения скилов Клана.

  • Заточка: максимальная заточка оружия +12, максимальная заточка вещей и бижутерии +10. Безопасная точка +3. Неудачная точка свыше +3 - сбрасывает заточку до +0. Есть усовершенствованные свитки, которые сбрасывают точку при неудачной только на -1.

  • Мировой босс: появляется в определенной локации раз в сутки. Могут упасть разные ништяки. Выпадает тому, кто нанес больше всего урона (персонаж или группа).

  • Арена - каждый день проводится арена в формате группового этапа. Победителям распределяются очки. Каждую неделю, персонажи набравшие большее количество очков участвуют в финалe, который проводится в режиме сетки. В воскресенье определяются победители, которые получают ништяки и возможность участвовать в Арене Героев, которая проводится раз в месяц в формате турнирной сетки. Ее победители получают уникальные шмотки/оружие, которые имеют преимущество в PvP по сравнению с другими носимыми предметами в игре, а также статус Героя, который выделяет персонажа в списке всех персонажей

  • Клан: основной смысл кланов на текущий момент - это клановые скилы, которые значительно увеличивают характеристики персонажей, находящихся в клане.

  • Клановые замки: 4 больших города - 4 замка в их окрестностях. И эти замки можно захватывать. Один или два раза в неделю. И наличие замка дает бонус к монеткам с мобов, сокращает время перехода между локациями, дает баф, а также расширение инвентаря.

  • Чаты с игроками, чаты с гильдией, аукцион, и другие моменты, которые еще не до конца продуманы.


И вроде все классно, но вот механика боя история, которая под большим вопросом. С одной стороны, хочется избавить людей от лютого гринда и залипалово в экран и реализовать автофарм. Но, с другой стороны, сделать так, чтобы это не поломало концепт игры и другие механики. (Может кто знает, как можно это интересно реализовать?)

Начинаем прогать все заново

Дизайн - есть, механики - есть. Нужен код.

Открываем Питонячий файл, написанный для телеги. Находим в нем WebHooks. Это нам вряд ли подходит - выбрасываем питонячий файл. Открываем PyCharm. Стоп! А как сервер писать для MMORPG?

Пару дней гуглим, находим не так много информации. Походу, MMORPG не написать копипастом из StackOverflow.

Обычные запросы нам не то, чтобы подходят. На сей раз нам помогает Reddit, где сообщают, что WebSockets отличное решение для мультиплеерных игр. Несмотря на то, что боёвка планируется по шагам (обмен ударами раз в N секунд), то PVP, GVG и другие механики требуют постоянного соединения. Поэтому выбираем Websockets и одноименный пакет для Python.

Теперь нужно получить connection к веб-сокету с клиента. Накидываем пару текстовых полей в интерфейсе. Добавляем либу. Конектим. Фейл. Еще раз - фейл. Вообще не стучится. Пробуем через браузер - стучится. Хрень какая-то. Поменяли настройки. Конектим - не стучится. Окей. Теперь время посмотреть в доку. This library for sockets connection. If you need websocket protocol you should use this library: Starscream.

Выучили урок. Теперь будем читать доку либы чуть дальше строки с ее названием.

Конектится. Погнали дальше, подключаем ORM SQLAlchemy. Как же это элементарно работает! Реализуем таблицы, классы, регистрацию, вход. Все работает как по маслу.

Ну и настало время придумать название для игры. Что ассоциируется у меня с классическими MMORPG? Perfect World, Lineage, World of warcraf. В двух из трех есть слово World. Окей, заимствуем. В чем концепт игры? В логах! Logger World

Начинаем прогать все заново

Что-то ноут тормозит и работать становится тяжеловато. Копируем папку Developer в Yandex Disk, ребутаем устройство. Reinstall OS.

Открываем Xcode, открываем Pycharm. Открываем прое.. А вы знали, что неделя работы и 95% написанного кода Pycharm сохраняет не в Developer, а в свою директорию. Ну вот! А я не знал. И не посмотрел.

Окей. Повторенье - мать ученья. Только в этот раз - не на питоне. Что у нас есть из интересного? Swift на back! Но я не IBM - мне страшно. Java, NodeJS, C#

А что там с Kotlin? Вроде как он мультиплатформенный. Запускается там, где есть JVM. На нем можно будет написать и Android клиент. А еще можно использовать Kotlin Multiplatform Mobile, чтобы объединить кодовую базу iOS и Android приложения. И там только интерфейсные истории останется написать. Звучит easy. Как раз мой внутренний недождун устал от рутинных проектов по 50 штук в день, и подавай ему что-то эдакое.

Заходим в телегу, спрашиваем: "Есть ORM и Websockets либы для Kotlin, хватит ли этого на проект?". После краткого интродакшена игры нам подтверждают, что все гуд и Kotlin потянет (а вот ты нет!). Не зря Google пляшет вокруг Kotlin. И пару часов спустя нам пишет и предлагает поучаствовать в проекте AahzBrut. Он уже писал игры на котлин, да и явно кто-то с опытом back-end разработки, лучше, чем кто-то без опыта back-end разработки. Просим AahzBrut настроить проект, чтобы мы вдвоем могли писать код на разные части проекта. И получаем через пару часов файлик с описанием: Services, DTO, Entity, POJO, Reposintories. Уходим гуглить. Окей, AahzBrut, очень интересно, но якори нам на back-end точно не нужны. С этого момента AahzBrut у нас за серверную часть, а я за клиентскую.

Хороший старт

Ну по крайней мере на back-end у нас хороший старт

На текущий момент, у нас реализовано:

  • Примерный визуал игры (как должна выглядеть)

  • Экраны регистрации, логина, выбора персонажа, создания персонажа, прототип самого экрана с логами, ну и конечно иконка приложения

  • Back-end: aутентификация, регистрация, Websockets STOMP, созданы локации, персонажи, персонажи бегают по локациям, оповещения об изменении количества игроков в локациях, и еще много разных и интересных штук, которые я бы понял, но не понял :(

Ну собственно я и пошел понимать. Как только значительно продвинемся, расскажу вам в каком состоянии игра.

Чао!

Подробнее..

MMORPG прошлого века как мы создали первый Киевский игровой сервер

09.05.2021 10:20:54 | Автор: admin

Давным давно на далеком сервере...

Вторая половина девяностых. В СНГ интернет как таковой еще только начинает развиваться. Коммерческих сайтов практически нет (а если и есть, то исключительно айтишной тематики). Web еще не стал тем местом, где пользователи проводят основную часть времени. Доминирующая технология последней мили - dial-up, на котором в основном читают почту и сидят в ICQ. Но энтузиасты айтишники уже пользуются и ньюсами и IRC и несколькими другими сервисами. И конечно играют в сетевые игры!

Doom, в который можно было поиграть вдвоем по модему или вчетвером в локальной сети уже смещен с позиции самой популярной сетевой игры. Сейчас поднимают пиратские батлнет сервера на PVPGN - там можно сразиться в Starcraft и Diablo уже в компании до 4-8 игроков (чем больше игроков, тем больше вероятность лагов). В шутерах доминирует Quake и Quake2 - в игре одновременно может быть уже десяток игроков, и уже не зависеть от чужих лагов (ибо UDP).

Кто-бы мог подумать, что примерно всего через десять лет появятся игры, в которые может одновременно играть сотня или тысяча игроков, и даже больше!

Но что это только что было?
Неужели такие игры уже есть?
Да, уже есть! А если взять англоязычный мир, так уже давным-давно!

Рождение FD

В 1998 году официально запускается первый Киевский MUD (Multi User Dungeon/Dimension) сервер "Forgotten Dungeon".
Для него по шапочному знакомству выделили немного места на одном из FreeBSD-серверов в общежитии Киевского Политехнического института.

Это не первый русскоязычный MUD сервер, но один из них.
Московский "Мир Мерлина" был запущен примерно на год раньше.
А вот с другими серверами в СНГ старшинство уже можно и оспорить (привет, Zmey и ко.!).

Благодаря большой локальной сети общежитий КПИ, раскинутой на витой паре, коаксиале и честном слове, сервер быстро заполняется игроками.
В активные дни количество игроков находящихся в мире превышает 100, то и 150, что по тем меркам весьма немало!
Такой онлайн позволяет не просто побегать по миру в компании практически в любое время суток, но и наладить дипломатические отношения между кланами и даже альянсами.

Внешний канал для института был проблемой - интернет в то время был медленным и дорогим, поэтому были периоды, когда игровой сервер не был доступен снаружи.
Но по договоренности с ректоратом, для "Forgotten Dungeon" в конечном счете все-таки сделали исключение, как для общественно-полезного проекта.
Снаружи он был известен по адресу mud.ntu-kpi.kiev.ua:4000 до конца своей активной жизни (2005-2007).
Хотя, честно говоря, внешние игроки составляли не более 10% основного онлайна.

С одной стороны это несколько ограничивало популярность, но с другой стороны давало свои уникальные преимущества, практически недоступные другим MUD-ам.
Регулярные встречи игроков и разработчиков в реале еженедельно а то и несколько раз в неделю. Обычная рядовая пятничная сходка могла собрать более половины всего состава.

Такая тесная и регулярная связь и общий энтузиазм вдохновляли на множество безумных идей, и "Forgotten Dungeon" очень быстро обрастал сложной боевой/магической механикой и уникальными фичами.

Конечно, по современным меркам, все разработчики в основном не дотягивали даже до джуниоров - обычные студенты, из которых не все отличали компилятор от линкера.
Мы просто писали код с горящими глазами.
Сервер падал - его поднимали и писали скрипты с автоматическим рестартом.
Сервер ломался - его чинили и писали новые фичи с новыми ошибками, которые снова чинили.
Иногда появлялись игроки и "мимокрокодилы" с факультетов информатики, которые могли написать немного больше, чем "hello world". Они делали свой вклад и пропадали.

Однако, несмотря на полное отсутствие коммерческого опыта разработки, мы были открыты к любой полезной информации.
В какой-то момент, узнав про существование систем контроля версий, я перевел все на CVS с коммитами и странной системой версионирования.
Еще не было Jenkins/Teamcity, не было gitlab/gerrit и других привычных CI инструментов, но у нас при коммите новых изменений уже триггерилась сборка новой версии с отправкой логов. А админ, не выходя из игры мог командой перезагрузить игровой сервер с обновлением на новую версию, что позволяло разграничить права доступа, давая возможность вносить изменения в код, но не давая доступ к полной админке.
На каждое падение сервера, автоматически генерировался отчет с отладочной информацией (dbg стектрейс) и уходил на почту.
Для тех времен, это было очень круто!
За почти 10 лет существования сервера, вклад в разработку внесло несколько десятков человек. Без контроля версий, и этих на коленке сделанных скриптов, наверное не получилось бы и половины вещей довести до ума.

Конечно, несмотря на все наши значимые (как нам тогда казалось) попытки причесать код, он очень далек от того, на что можно равняться.
Но мне кажется, это довольно неплохой проект "на поиграться" для начинающих разработчиков, которые хотят освоиться в Си, и научиться работать с базовыми вещами - условия, циклы, структуры данных, неважно тебе 10 или 30+ лет.
По слухам, на кодовой базе нашего сервера, было даже несколько человек, защитивших свои дипломы.
Но были и отчисленные за неуспеваемость слишком увлеченные игроки... Каждый берет что может (;

Технические данные

За базу был взят один из отделившихся от DikuMud движок, а именно ROM 2.4b4a - довольно популярная кодовая база на то время.
К сожалению, сам репозиторий со всей историей коммитов не удалось сохранить (это современные системы типа git хранят всю историю локально, а более старые CVS только на сервере).
Но сохранилась последняя версия исходного кода.
При помощи Google и stackoverflow я смог довести код до состояния, когда он собирается и запускается на современном Линуксе.
В коде есть текстовый файл, где вручную писали комментарии на жуткой смеси русского(нецензурного)/английского, но посторонним его читать не рекомендуется.

Еще до запуска сервера в институте, он стоял у меня на рабочем сервере, я игрался с ним в одиночку (зарегистрировались несколько знакомых, которые заходили в основном потестить какие-то фичи). Но раскручивать я его не собирался, ибо не был готов хостить полноценный сервер на работе, так что я и КПИ нашли друг друга (:
Добавил поддержку кодировок (koi-8, cp-866, win1251 и транслитерацию), добавил поддержку контрольных символов для ANSI colors, поправил какие-то ошибки.
И даже придумал и реализовал систему простых автоматических квестов.
Но эти вещи можно найти практически в каждом MUD, а я хочу поделиться некоторыми уникальными инсайдами или просто забавными моментами.

Делаем простые вещи

Если говорить о базовых элементах программирования - например на практике понять разницу между знанием синтаксиса if/then/else и умением им пользоваться хорошо, то игровые механики в таких простеньких консольных или браузерных играх это просто превосходный вариант для начинающих! Ведь для того, чтобы увидеть результат нового супер-пупер заклинания, тебе не нужен гейм-дизайнер, художник, музыкант и кто-то еще. Многие вещи делаются простыми командами.

Например: научился проверять значение переменной, и создал новую переменную, статус "friendly fire". Добавляем немного условий - и код готов. А с точки зрения игрока - полностью меняется боевая составляющая, потому что теперь можно сражаться команда на команду или клан на клан или стая однотипных монстров против игроков, пользуясь массовыми заклинаниями и не вредя своим "друзьям".

Можно сделать переменную "Статус зрителя", и создать арену для дуэлей, на которой могут находиться зрители в полной безопасности. Еще немного переменных - и можно уже делать ставки на победителя, и вот уже "просто посмотреть за чужой дуэлью" превращается в азартное зрелище вроде "арены гладиаторов" с букмекером! А учитывая что игра текстовая - все зрители могут смотреть, так сказать, с лучшего места в первом ряду ;)

Пробуем что-нибудь посложнее

В какой-то момент я разобрался с тем, как работает "время" в движке, и подумал что ведь можно сделать навыки или заклинания, которые кастуются не мгновенно, а будут требовать времени на "концентрацию". Которые можно даже прервать во время выполнения. И которые будут визуально создавать ощущение, что ты колдуешь что-то мощное. Одно из таких заклинаний - портал. Позволяло создавать объект портал (который пропадал через несколько минут) - через портал мог пройти уже любой игрок.

Техническая реализация заклинания "полиморф" уже была посложнее. Высокоуровневый маг может превратиться в любой предмет. Полноценный. Его можно было взять. Если это было оружие, им можно было вооружиться и сражаться. Если это была еда, ее можно было съесть (съеденный игрок умирал :).
Сложность заключалась в том, что все триггеры на оповещение персонажа (кто-то зашел, кто-то сел, кто-то встал и ушел) - были завязаны на объект "персонаж". Следовало добавить многочисленные проверки и триггеры в код, чтобы игрок, превратившийся в объект "предмет", получал полную информацию из мира.
С заклинанием было связано довольно много проблем, чем с радостью пользовались "злоумышленники", но все они в конечном счете были исправлены, а само заклинание внесло значительные изменения в командную игру и особенно клановые войны.

Уникальные локации

Игровой мир в Forgotten Dungeon был довольно большим. И становился еще больше. Несколько карт было скачано с разных ресурсов, адаптировались, переводились, подключались.
Но еще больше карт рисовали сами игроки. Так была нарисована собственно карта и самого Киевского Политехнического института с кучей локальных мемов и отсылок. Среди NPC фигурируют фамилии преподавателей и ректоров. И наверное хорошо, что на тот момент эти люди были далеки от игр и компьютеров, ибо цензура на сервере была минимальна ;)
Парочка фамилий, которые можно встретить в игре: Федорова, Куцик, Сенько, Шпортюк, Кравцов, Савицкий, Скоробагатько, Линчевский и др.

Воспоминания про армию

Однажды мы придумали армию.
Натуральную.
По достижению 18 уровня, все вещи у игрока забираются, и его переносит в закрытую локацию.
В этой локации он даже пообщаться с другими игроками не может, за исключением тех, кто уже в "армии". Из внешнего мира можно было прийти в специальную "комнату переговоров", в котором можно было пообщаться и даже передать предметы (только с типом "вода" или "еда").
Без поддержки друзей, клана и хороших предметов, нужно было выжить три уровня с высокоуровневыми агрессивными монстрами (сержанты, солдаты, прапорщики..), пока на 21 уровне товарищ Майор не отправлял тебя назад в общий мир. Иногда даже игроки из враждующих кланов объединялись в армии =)
Но за смерть в армии не штрафовали, поэтому рано или поздно армию проходили все.
Казалось бы - ну придумали и придумали.
Но Армия оказала заметное социальное воздействие.

Небольшое отступление: в середине 90х во многих MUD у игроков вообще могла отсутствовать возможность сражаться друг с другом, так как многие MUD создавались как социальные игровые "чаты" с ролевой составляющей в стиле DnD (или другой тематикой). На ресурсах со списком серверов, даже отдельно указывалась поддержка PK (Player Killing) в описании сервера.

Смерть персонажа в игре воспринималась неприятно - потеря опыта, потеря предметов, и в отличие от уже одиночных RPG, нельзя было сохраниться.
Но Армия в нашем MUD "сделала из тварей дрожащих львов и тигров".
После армии, страх перед смертью заметно падал, отношение к игровому персонажу менялось.
Я слышал пару историй, когда игроки из нашего мира уходили в другие миры и наводили там шороху.
Даже верю, что это могло оказать какое-то влияние и в реале. Ну собственно для кого-то это так и было.
Конечно с армией тоже было связано много багов, которыми пользовались любители халявы, но мы это дело находили и прекращали:

Сотни мелочей

Введено много уникальных рас, с действительно заметными отличиями. Сейчас в MMORPG это уже норма, а тогда и рас было мало, и в базовом движке их отличие было в основном в небольшом разбросе изначальных параметров - силы, ловкости и так далее.
У нас вводились заметные изменения.
Раса Вампиров, которые заметно прибавляли в силе по ночам и вынуждали игроков следить за сменой дня и ночи в игре.
Банальные вещи - Ящеры умеют плавать. Пикси - летать. Этериалы - проходить сквозь двери и сопротивляться режущему оружию. Зомби могут не есть и не дышать. У Кентавров четыре ноги, поэтому удар двумя копытами вполне заменял серьезное оружие.
Гномы могут перековывать предметы, улучшая их при помощи специальных артефактных компонентов (да, у нас гномы-игроки уже были прародителями современных крафтеров).
В общем сотни мелочей, которые в сумме значительно влияли на то, как следует одевать/вооружать/прокачивать и отыгрывать своего персонажа в зависимости от расы.

Введены перерождения с частичным сохранением навыков предыдущего класса, позволяя создавать сложные комбинации (например вор/маг и маг/вор - далеко не одно и тоже, а это ведь необходимо дважды прокачаться до 101 уровня.)

Админы и игроки творят вместе

Мы любили игроков-энтузиастов. У нас была активная поддержка кланов и гильдий - мы вводили уникальные индивидуальные визуалиации для игроков и кланов. Мы вводили уникальные заклинания, навыки и фичи и локации для кланов и гильдий прямо в код, которые придумывали вместе с игроками.
Да, всегда на фоне старались не забывать о балансе, но согласитесь - в современных играх такая идейная поддержка игроков и ролевой составляющей практически невозможна.

У нас были "отношений", включая секс, свадьбы, разводы и даже возможность получить статус "родственника". Да, следует ставить рейтинг 18+.

Были игроки-одиночки, которые не хотели в клан. Но клановые фичи были довольно "вкусные". И мы сделали для них специальный клан для одиночек "LONER". Он ни к чему не обязывал, но указывал, что человек сам по себе и давал возможность пользоваться защищенным тепленьким местом с кроватью для отдыха.

Внутренняя кухня

Некоторые решения были довольно странные по архитектуре. Например, никто из нас не умел работать с базами данных и не особо разбирались в том, насколько это удобно. Честно говоря, в то время из известных баз были Foxpro и MS Access. MySql еще не был известен. А Oracle какой-то версии 5-6 был жутко тяжелым и решения на его базе только начинали продаваться далеко в Москве.
В большинстве MUD движков данные игроков хранились в файлах. Проблемным моментом в этом было то, что сохранение файла игрока обычно происходило во время его выхода из игры, и практически все сервера были подвержены ошибке с дублированием предметов.
Рецепт примерно такой: Ты узнаешь любой баг в игре, который приводит к падению сервера (это встречалось частенько и в разных мадах).

Инструкция: в игру заходят два игрока, у одного есть "вкусный" предмет.
Он отдает его второму. Второй выходит из игры (его профайл сохраняется уже с предметом).
Первый игрок крашит сервер (или дожидается такого краша), и его инвентарь не успевает сохраниться в файл.
После рестарта сервера - оба заходят - и каждый с предметом.

Мое ужасное но рабочее решение было в лоб - если игрок производил любые манипуляции с предметами, на него вешался флаг "сохранить".
При сохранении какого-либо игрока, сохранялись все игроки с таким флагом одновременно.
При онлайне 100-200 игроков вопрос производительности не стоял, файлы игроков занимали в среднем 3-4 килобайта.
Решение сработало отлично, и duplicate bug в нашем мире исчез (главное чтобы не крашилась сама процедура сохранения).

Можно было просто почитать документацию о fopen/fwrite, и вот - добавлены административные команды для работы с оффлайн игроками.
Администраторам игры было полезно уметь забанить, разбанить, проверить информацию по игрокам, которые сейчас оффлайн, без доступа к консоли сервера.

Работаем с текстом

Переводя фразы изначального движка и создавая новые, текст для действий старались строить таким образом, чтобы он звучал корректно вне зависимости от пола игрока.
Например: "Ты уже благословил Aelita" - звучит неблагозвучно, если заклинание колдует девушка.
Нейтральная фраза выглядит как: "Aelita уже под божественным благословлением".

Но затем была придумана и реализована система работы с полом.
В коде это выглядело как: "Ты уже благословил$a Aelita", (ch->sex)
Нужное подбиралось из массива ["","а","о"] для он, она, оно.
Или с использованием готовой функции: act_new("Задание перв$b выполнил$r $n!",ch,NULL,NULL,TO_ALL,POS_DEAD);

Чуть позже, по той же схеме добавили обработку падежей.
Для этого в описании персонажей (в основном для NPC) нужно было руками прописать склонения: "волшебн|ый|ого|ому|ого|ым|ом дракош|а|и|е|у|ей|е".

В тексте фразы указывалась нужная форма:
act("$c1 выдыхает облако кислоты в $C4.",ch,NULL,victim,TO_NOTVICT);
Функция проверяла есть ли для данного персонажа набор падежей, если нет - просто брала инфинитив.

Карты правда обновлять не успевали, но вроде бы в центральных городах и новых картах можно было порадоваться некоторой естественности и благозвучностью окончаний:

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

Зарубежом

История зарубежных англоязычных МАДов гораздо более долгая. Она начинается чуть ли сразу с появления первых сетей - второй половины семидесятых. Общее количество игроков и онлайн на отдельно взятом крупном сервере могло посоревноваться с общим онлайном всех серверов в СНГ вместе взятых.

Например Arctic MUD, который появился еще в 1992 году, к концу девяностых мог похвастать онлайном свыше 1000 человек, доходя в пиковое время почти до двух тысяч. Многие англоязычные MUD могли позволить себе монетизирование, которое в то время в СНГ было бы непонятым и попросту невозможным. Также для игры в MUD, точнее комфортной игры, желательный уровень английского языка заметно выше чем elementary. Это также было довольно серьезным барьером для желающих поиграть.
Вполне возможно что за рубежом было придумано и воплощено много разных интересных вещей, и многие из наших нововведений могли оказаться вторичными.

Пик MUD серверов в рунете пришелся на тот небольшой промежуток времени, когда сама идея многопользовательских текстовых игр была уже неплохо проработана. Существовало несколько готовых движков с разным подходом к основной механике: level-based (dikumud, ROM, Merc and many other), когда персонаж получает уровни и от уровня уже получает навыки, заклинания и улучшения параметров (elf 80-го левелу), или skill-based (Avalon, Clok, DartMUD), когда уровня нет вообще, или он ни на что не влияет, а значение имеет только уровень владения различными навыками и заклинаниями (владение двуручным мечом 12 уровня).

Но уже всего через несколько лет на хвост начали наступать первые "графические МАДы", как их называли вначале - Ultima Online, Everquest. А затем подтянулись уже и более современные MMORPG - Lineage/Aion/WOW и другие. Поэтому отечественные мады, ярко вспыхнув, горели не слишком долго - около десяти лет (примерно с 1997 по 2005-2007), вытесненные более современными играми.

Я потратил примерно одинаковое количество времени на администрирование "Forgotten Dungeon" и шарда Lineage2, и могу сказать, что с точки зрения игровой механики, МАД конечно гораздо глубже, шире, и предоставляет больше возможностей и свободы для игроков.

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

Но удобство и простота управления, привлекательность и конечно визуальная составляющая - конечно на стороне графических игр.

Я подсчитал, что в "Forgotten Dungeon" есть примерно 350 команд, которые можно ввести (правда часть из них административные, часть эмоции), около 120 заклинания и примерно 50 навыков (активных и пассивных). Гайдов и форумов практически не было в силу неразвитости веб, есть только довольно обширная но запутанная внутренняя справка. Примерно месяц занимало просто чтобы игрок стал чувствовать себя в игре уверенно и ориентироваться в мире.
А для большинства графических игр - месяц это зачастую если и не ветеран, то уже довольно опытный игрок.

На текущий момент (2021 год) еще можно найти несколько живых серверов в СНГ (http://www.mudconnector.su/MudList), но это лишь тень минулого и зачастую они пустуют.
А вот среди англоязычных серверов можно найти десяток серверов, с онлайном в 500-800 игроков.

Стоит отметить, что MUD - это практически единственный вариант интересной многопользовательской сетевой игры для слепых игроков, поскольку текстовая игра очень легко адаптируется при помощи синтезатора речи. Существуют целые кланы таких игроков. Да и поддержать таких игроков, добавив несколько опций по запросу для удобства - это действительно требует очень немного затрат со стороны разработчиков.

Конец истории

Я уверен, что наши восторженные "открытия" тех времен сейчас вряд ли кого-то удивят.
Подход к разработке заметно изменился. Количество готовых наработанных решений за 20 лет можно найти практически на любой случай. Паттерны, структуры данных (словари, двухсторонние списки с уже готовыми методами работы) и множество других вещей - уже встроено в язык.
Но эта статья - кусочек реальной истории одного из первых виртуальных миров Украины и рунета.

Исходники "Forgotten Dungeon" доступны на https://github.com/sfkulyk/fdungeon
Кстати, выложить код в github (правда без некоторых последних правок), я успел еще до https://archiveprogram.github.com/, поэтому можно надеятся, что исходники FD переживут всех нас ;)

Сам игровой мир (пусть и пустой) живет по адресу mud.saboteur.com.ua:4000, чисто из чувства ностальгии. Много он не просит, а вдруг кто зайдет пустить слезу по временам, когда трава была зеленее.

Изредка я могу вносить мелкие правки, а также планирую использовать его в школьно-образовательных целях, но ничего серьезного вносить не планируется (тем более что я не разработчик, а так - балуюсь). Если кому интересно - форкайте!

Буду благодарен, если при этом вы сохраните в текстах наши юные смешные имена..

Спасибо всем, кто дочитал до конца.

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru