Размышления о клиенте для MUD

В данной статье я попытаюсь структурировать мысли и идеи, высказанные в комментариях к предыдущей статье.

MUD'ы и клиенты к ним прошли долгий путь развития, но сейчас они, на мой взгляд, слишком зациклились на прошлом и развиваются лишь экстенсивно. Во-первых, давайте рассмотрим как выглядит игра с точки зрения пользователя. Текст традиционно жмется к левому краю экрана, что было вполне допустимо 30 лет назад, клиентов для игры не было, а был лишь терминал рабочей станции.
Клиент с выравниванием слева
Сейчас, в эпоху повсеместного распространения широкоформатных мониторов читать узкую полоску текста у левого края экрана физически неприятно. Совершенно очевидно, что текст нужно располагать по центру монитора. Научные исследования говорят, что наиболее комфортен для чтения текст шириной 10-15 см и содержащий 55-65 символов.
Клиент с выравниванием по центру
Ещё одно неприятное наследие прошлого — это форматирование текста игры на стороне сервера. Мне кажется, что это задача сугубо клиента, делать текст максимально читаемым для игрока в зависимости от его оборудования. Сервер должен лишь отправлять специальным образом размеченный текст. Он должен сообщать клиенту, что строка А это название комнаты, строка Б это ее описание, строка В описание моба и т.д. Как эта информация будет выглядеть для игрока, решать должен только клиент. Из существующих для MUD протоколов наиболее близок по функционалу из описанного MXP.
Пример компьютерной верстки
Следующей проблемой является переусложнение клиентов для игры. В них добавляется все более новый функционал (не удивлюсь увидеть там когда-нибудь встроенную Visual Studio) в расчете на то, что пользователь сам настроит для себя комфортную среду для игры, но при этом увеличивают порог входа в MUD. В графических ММО обратная тенденция, клиент стараются сделать как можно проще, ограничивая количество клавиш, необходимых для нажатия в процессе игры, запрещают макросы и т.д. Конечно для MUD этот принцип не совсем применим, но нужно понимать, что большинство игроков не программисты и нужно стараться сделать игру доступной любой домохозяйке.
Настраиваем клиент для игры
Для комфортной игры, как я думаю, более полезным было бы добавление в клиент социальных функций, как это сделано, например, в клиенте Steam. Необходима возможность добавлять других игроков в «друзья» с возможностью отображать их статус и отправлять им сообщения вне игры. Это можно делать и через сторонние мессенджеры, но внутри клиента подобный функционал был бы полезнее, что подтверждается популярностью несколько лет назад irc-прокси для MUD-клиентов. Было бы неплохо также создать специальные макросы для групп «друзей». Ключевой особенностью для них будет работа для всех пользователей группы одновременно с синхронизацией. Это позволит выводить сообщения типа «Фродо начал выполнять квест „Уничтожение кольца“ или „На Бильбо напал Горлум“, формируя что-то типа ленты событий.
Steam friends
Я верю, что MUD'ы это не умирающий жанр и для возвращения популярности им нужно лишь некоторое переосмысление современных реалий. А предложенные вещи станут для них со временем стандартом.

16 комментариев

avatar
  • artist
  • 0
У меня еще очень давно был план по развитию мадов. Сначала решил написать клиент, вот написал. Далее по плану было написание мад сервера на новом протоколе, т.к. решение для протокола уже давно на поверхности, готовое и мага-супер-пупер гибкое, которое планировал внедрить в мой клиент. Жизнь внесла коррективы и план не удался в планируемые временные рамки.

Мады ограничены в первую очередь своим протколом, все эти MSDP, MCCP и прочая история в этом направлении тянет мады вниз и не дает развиваться ни клиентам, ни самим серверам. Новый протокол позволит развязать клиента от сервера. Т.е. сервер может внедрять новые фишки, не оглядывась на клиенты. А клиенты смогут внедрять себе эти нововведения сервера по мере возможности. Т.е. клиент, благодаря протоколу, легко игнорирует те фишки, которые он не поддерживает.

Я планировал на базе своей черепахи сделать новый клиент на новом протоколе. А других клиентов посадить на прокси, который бы транслировал новый протокол в старый телнет, как временное решение.

Я бы сейчас смотрел в эту сторону — внедрение нового протокола в старые мады, новые движки и вообще бы подумал об обсуждении этого с западными странами.

Если кратко, то:
В качестве протокола предлагается всем известныи — Lua.
Т.е. игровые данные идут в клиент в формате программы на Lua. А точнее в виде вызовов функций Lua с параметрами.
Т.к. Lua позволяет сделать песочницу, то можно знащитить клиент от неверных данных, ошибок в протоколе и
не поддерживаемых функций.
Lua — это готовый парсер команд, со сложной структурой параметров, уже с обработкой ошибок, с защищенным окружением,
позволяющий легко написать всю обвязку в клиенте как вздумается и под конкретный мад на самом Lua, ультрапростом языке.
Интерпретатор Lua весит копейки, работает очень быстро.
avatar
Lua — это язык программирования, а telnet — протокол связи, способ передачи байтов из пункта А в пункт Б. В этом плане луа не может заменить телнет.

Я так понял, ты хочешь вместо 'описание комнаты' отправлять клиенту printf('описание комнаты'), а клиент их будет обрабатывать? Когда будет начало программы, а когда конец? Начало при открытии соединения, конец при закрытии? Что будет при потере пакетов, инструкции не будут обрабатываться полностью и описание комнаты полностью пропадет?
avatar
  • artist
  • +1
Не стоит путать уровни протоколов. Телнет — это тупо текст поверх TCPIP. HTTP — это тупо текст в формате html поверх TCPIP. Протокол транспорта один, а возможности совсем разные. Я хочу сделать Lua поверх TCPIP. По сути все тоже самое — текст поверх TCPIP. За доставку данных через инет отвечает TCPIP, а не Lua или Telnet.

Да, я хочу заменить телнет на print с данными комнаты, как ты и написал, если говорить упрощенно, но
1. Формат этих данных и их количество любое, главное по синтаксису луа. Например.
room{ desc=«Описание», name=«Название», mobs = { { name=«mob1», hp = 100,… }, {} }, objects = { } }
Так можно передавать не только данные комнаты, а вообще все, что будет нужно клиенту!
Тогда клиент получит уже распарсенные данные, сможет отформатировать вывод как считает нужным,
например по ширине окна (как ты и хотел), вывести списки мобов в оотдельные окна с их хп и прочее.

2. Начала программы и конца нет… Каждый пакет данных — это новая программа, которые выполняются друг за другом.
Можно сказать по другому — это программа которая поступает в клиент построчно, а не вся сразу.

3. Потери пакетов не будет. Это обеспечивает TCPIP или будет обрыв связи.

Главный плюс такого подхода — готовый парсер протокола, с обработкой ошибок, причем протокол может быть сложным и
независимым для клиента и для сервера. Чтобы адаптировать клиент под новые возможности сервера нужно тупо
дописать обертку на том же Lua, которая будет понимать новые данные сервера, или тупо их игнорировать. Такая обертка
может быть своей для каждого сервера и ее написать ну очень просто. Причем игроки смогут ее дорабатывать под себя.
avatar
Спасибо за разъяснения, теперь все стало намного понятнее. Нужен будет прототип хотя бы на уровне простого чата для демонстрации возможностей. Будешь писать свой с нуля или попробуешь сделать на основе существующего движка?
avatar
  • artist
  • 0
Вопрос только, кому то это нужно сейчас? Если что то пилить новое, то с прицелом на западные страны.
avatar
Нужно сделать хороший движок, организовать кампанию типа IronRealms, сделать на этом движке несколько мадов разных тематик. А остальные русскоязычные мады закрыть за нарушение diku-лицензии. Вот такой вот злодейский план. :)
avatar
  • prool
  • 0
Мой мад не закроете
avatar
А, как известно, мы народ горячий,
Ах, и не выносим нежностей телячих,
Но любим мы зато телячьи души
Мы любим бить людей,
Любим бить людей,
Любим бить людей,
И бить баклуши.

Мы раз-бо-бо-бобойники,
Разбойники, разбойники
Пиф-паф, и вы покойники,
Покойники, покойники.
Пиф-паф, и вы покойники,
Покойники, покойники.

А кто увидит нас, тот сразу ахнет.
И для кого-то жареным запахнет.
А кое-что за пазухой мы держим.
К нам не подходи,
К нам не подходи,
К нам не подходи,
А то зарежем.
avatar
  • prool
  • 0
Неправильная песня. Вот моя песня:

Пятнадцать человек на сундук мертвеца!
Йохохо, и бутылочка рома!
avatar
  • artist
  • 0
Допустим движок будет. Кто будет писать сам мад?
avatar
Я могу. Но мне нужна поддержка и одобрение, иначе энтузиазм быстро пропадает.

Также возможен второй вариант, как это сделано тут. Предоставляешь платформу для игр на своем движке и все желающие делают там игры, имея возможность заработать на этом.
avatar
  • artist
  • 0
Чья поддержка и одобрение? Мое или игроков? Если это очень важно, то мад врядли напишешь.
комментарий был удален
комментарий был удален
avatar
Посмотрим, что у тебя получится написать.
avatar
  • prool
  • 0
Идет дождь
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.