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

Сейчас, в эпоху повсеместного распространения широкоформатных мониторов читать узкую полоску текста у левого края экрана физически неприятно. Совершенно очевидно, что текст нужно располагать по центру монитора. Научные исследования говорят, что наиболее комфортен для чтения текст шириной 10-15 см и содержащий 55-65 символов.

Ещё одно неприятное наследие прошлого — это форматирование текста игры на стороне сервера. Мне кажется, что это задача сугубо клиента, делать текст максимально читаемым для игрока в зависимости от его оборудования. Сервер должен лишь отправлять специальным образом размеченный текст. Он должен сообщать клиенту, что строка А это название комнаты, строка Б это ее описание, строка В описание моба и т.д. Как эта информация будет выглядеть для игрока, решать должен только клиент. Из существующих для MUD протоколов наиболее близок по функционалу из описанного MXP.

Следующей проблемой является переусложнение клиентов для игры. В них добавляется все более новый функционал (не удивлюсь увидеть там когда-нибудь встроенную Visual Studio) в расчете на то, что пользователь сам настроит для себя комфортную среду для игры, но при этом увеличивают порог входа в MUD. В графических ММО обратная тенденция, клиент стараются сделать как можно проще, ограничивая количество клавиш, необходимых для нажатия в процессе игры, запрещают макросы и т.д. Конечно для MUD этот принцип не совсем применим, но нужно понимать, что большинство игроков не программисты и нужно стараться сделать игру доступной любой домохозяйке.

Для комфортной игры, как я думаю, более полезным было бы добавление в клиент социальных функций, как это сделано, например, в клиенте Steam. Необходима возможность добавлять других игроков в «друзья» с возможностью отображать их статус и отправлять им сообщения вне игры. Это можно делать и через сторонние мессенджеры, но внутри клиента подобный функционал был бы полезнее, что подтверждается популярностью несколько лет назад irc-прокси для MUD-клиентов. Было бы неплохо также создать специальные макросы для групп «друзей». Ключевой особенностью для них будет работа для всех пользователей группы одновременно с синхронизацией. Это позволит выводить сообщения типа «Фродо начал выполнять квест „Уничтожение кольца“ или „На Бильбо напал Горлум“, формируя что-то типа ленты событий.

Я верю, что MUD'ы это не умирающий жанр и для возвращения популярности им нужно лишь некоторое переосмысление современных реалий. А предложенные вещи станут для них со временем стандартом.
MUD'ы и клиенты к ним прошли долгий путь развития, но сейчас они, на мой взгляд, слишком зациклились на прошлом и развиваются лишь экстенсивно. Во-первых, давайте рассмотрим как выглядит игра с точки зрения пользователя. Текст традиционно жмется к левому краю экрана, что было вполне допустимо 30 лет назад, клиентов для игры не было, а был лишь терминал рабочей станции.

Сейчас, в эпоху повсеместного распространения широкоформатных мониторов читать узкую полоску текста у левого края экрана физически неприятно. Совершенно очевидно, что текст нужно располагать по центру монитора. Научные исследования говорят, что наиболее комфортен для чтения текст шириной 10-15 см и содержащий 55-65 символов.

Ещё одно неприятное наследие прошлого — это форматирование текста игры на стороне сервера. Мне кажется, что это задача сугубо клиента, делать текст максимально читаемым для игрока в зависимости от его оборудования. Сервер должен лишь отправлять специальным образом размеченный текст. Он должен сообщать клиенту, что строка А это название комнаты, строка Б это ее описание, строка В описание моба и т.д. Как эта информация будет выглядеть для игрока, решать должен только клиент. Из существующих для MUD протоколов наиболее близок по функционалу из описанного MXP.

Следующей проблемой является переусложнение клиентов для игры. В них добавляется все более новый функционал (не удивлюсь увидеть там когда-нибудь встроенную Visual Studio) в расчете на то, что пользователь сам настроит для себя комфортную среду для игры, но при этом увеличивают порог входа в MUD. В графических ММО обратная тенденция, клиент стараются сделать как можно проще, ограничивая количество клавиш, необходимых для нажатия в процессе игры, запрещают макросы и т.д. Конечно для MUD этот принцип не совсем применим, но нужно понимать, что большинство игроков не программисты и нужно стараться сделать игру доступной любой домохозяйке.

Для комфортной игры, как я думаю, более полезным было бы добавление в клиент социальных функций, как это сделано, например, в клиенте Steam. Необходима возможность добавлять других игроков в «друзья» с возможностью отображать их статус и отправлять им сообщения вне игры. Это можно делать и через сторонние мессенджеры, но внутри клиента подобный функционал был бы полезнее, что подтверждается популярностью несколько лет назад irc-прокси для MUD-клиентов. Было бы неплохо также создать специальные макросы для групп «друзей». Ключевой особенностью для них будет работа для всех пользователей группы одновременно с синхронизацией. Это позволит выводить сообщения типа «Фродо начал выполнять квест „Уничтожение кольца“ или „На Бильбо напал Горлум“, формируя что-то типа ленты событий.

Я верю, что MUD'ы это не умирающий жанр и для возвращения популярности им нужно лишь некоторое переосмысление современных реалий. А предложенные вещи станут для них со временем стандартом.
16 комментариев
Мады ограничены в первую очередь своим протколом, все эти MSDP, MCCP и прочая история в этом направлении тянет мады вниз и не дает развиваться ни клиентам, ни самим серверам. Новый протокол позволит развязать клиента от сервера. Т.е. сервер может внедрять новые фишки, не оглядывась на клиенты. А клиенты смогут внедрять себе эти нововведения сервера по мере возможности. Т.е. клиент, благодаря протоколу, легко игнорирует те фишки, которые он не поддерживает.
Я планировал на базе своей черепахи сделать новый клиент на новом протоколе. А других клиентов посадить на прокси, который бы транслировал новый протокол в старый телнет, как временное решение.
Я бы сейчас смотрел в эту сторону — внедрение нового протокола в старые мады, новые движки и вообще бы подумал об обсуждении этого с западными странами.
Если кратко, то:
В качестве протокола предлагается всем известныи — Lua.
Т.е. игровые данные идут в клиент в формате программы на Lua. А точнее в виде вызовов функций Lua с параметрами.
Т.к. Lua позволяет сделать песочницу, то можно знащитить клиент от неверных данных, ошибок в протоколе и
не поддерживаемых функций.
Lua — это готовый парсер команд, со сложной структурой параметров, уже с обработкой ошибок, с защищенным окружением,
позволяющий легко написать всю обвязку в клиенте как вздумается и под конкретный мад на самом Lua, ультрапростом языке.
Интерпретатор Lua весит копейки, работает очень быстро.
Я так понял, ты хочешь вместо 'описание комнаты' отправлять клиенту printf('описание комнаты'), а клиент их будет обрабатывать? Когда будет начало программы, а когда конец? Начало при открытии соединения, конец при закрытии? Что будет при потере пакетов, инструкции не будут обрабатываться полностью и описание комнаты полностью пропадет?
Да, я хочу заменить телнет на print с данными комнаты, как ты и написал, если говорить упрощенно, но
1. Формат этих данных и их количество любое, главное по синтаксису луа. Например.
room{ desc=«Описание», name=«Название», mobs = { { name=«mob1», hp = 100,… }, {} }, objects = { } }
Так можно передавать не только данные комнаты, а вообще все, что будет нужно клиенту!
Тогда клиент получит уже распарсенные данные, сможет отформатировать вывод как считает нужным,
например по ширине окна (как ты и хотел), вывести списки мобов в оотдельные окна с их хп и прочее.
2. Начала программы и конца нет… Каждый пакет данных — это новая программа, которые выполняются друг за другом.
Можно сказать по другому — это программа которая поступает в клиент построчно, а не вся сразу.
3. Потери пакетов не будет. Это обеспечивает TCPIP или будет обрыв связи.
Главный плюс такого подхода — готовый парсер протокола, с обработкой ошибок, причем протокол может быть сложным и
независимым для клиента и для сервера. Чтобы адаптировать клиент под новые возможности сервера нужно тупо
дописать обертку на том же Lua, которая будет понимать новые данные сервера, или тупо их игнорировать. Такая обертка
может быть своей для каждого сервера и ее написать ну очень просто. Причем игроки смогут ее дорабатывать под себя.
Пятнадцать человек на сундук мертвеца!
Йохохо, и бутылочка рома!
Также возможен второй вариант, как это сделано тут. Предоставляешь платформу для игр на своем движке и все желающие делают там игры, имея возможность заработать на этом.