Glory MUD

Внезапно тараканы в моей голове сказали, что хорошо бы сделать англоязычный мад. На него начнут заходить китайцы и индусы и у меня будет посещаемость! Не зная хорошо английского я взял готовую кодовую базу с зонами, а именно tbaMUD и запустил всё это на 5000 порту. Мад будет называться «Glory to Heroes» (Слава героям!).

Сайт мада http://glorymud.kharkov.org
Адрес мада glorymud.kharkov.org 5000
Модифицированные мною исходники мада

Это тот самый tbaMUD, который я начал русифицировать неск. месяцев тому назад. Для англоязычного релиза я его дерусифицировал назад (сохранив переведенные файлы с расширениями .rus) и теперь неторопливо думаю о том, как сделать двуязычный мад

«Рубай компот, он жирный!»

Роясь в окаменелом гавне коде tbamud, который произошел от circlemud,  я обнаружил вот что: там есть тип жидкости «вода» (LIQ_WATER), а есть тип «чистая вода» (LIQ_CLEARWATER). Так вот, обычная вода утоляет и жажду и голод. А чистая вода только жажду. Что там у них в воде содержится? Питательные микроорганизмы?

Я, кстати, от нефиг делать, слегка его русифицирую

О русификации ROM

На выходных ВНЕЗАПНО решил поразвлекаться и русифицировать ROM. В качестве примера ROM’а взял rom24-quickmud:

https://github.com/prool/rom24-quickmud

Замечания к данному релизу:

1. В отличие от Circle, где вместо if (isprint() && isascii()) можно написать даже if (1) здесь такое не проходит, так как выскакивают команды протокола telnet, которые портят пароль и первую вводимую команду (смутно вспоминаю, что с первой испорченной командой я уже сталкивался ранее и вышел тогда тупо, выведя сообщение «нажмите энтэр два раза»). Я пока игнорирую коды FF, FD, FE, но это неправильно, так как могут теряться некоторые буквы некоторых кодировок, например «большой твердый знак» в koi8-r

Update. В последней ревизии на github обработка команд telnet сделана корректно

И снова о русификации EmpireMUD

Только что я запустил тестовый сервер русифицированного EmpireMUD (кодировка только UTF-8!),
которым занимаемся я и коллега Пацифист:

mud.kharkov.org 5000

Что сделано на данный момент:

— можно вводить русские имена игроков (только вводить, выводятся они пока в транслитерированной форме)

— можно писать в чат по-русски

— переведено одно сообщение!

Это не шутка, именно одно. Но главное, написан простейший модуль перевода, то есть теперь надо просто переводить все сообщения и заполнять словарь. А сообщений там тысячи, однако. Поэтому ищутся волонтеры и спонсоры 😉

Муд этот в отличие от обычных, состоящих из отдельных дискретных комнат, состоит из как бы непрерывного большого мира. И имеет элементы стратегии, то есть в лесу, можно строить домики, добывать руду, набигать и так далее. Я джва года искал такой муд

О создании дву- и многоязычных мадов

Я предлагаю метод фальшпанели. То есть у мада есть основной язык, им будет, например, английский. Вся внутренняя инфа на английском. Для англоязычных игроков все работает как обычно. А для русскоязычных на лету переводится. Имеется ввиду конечно не использование онлайн-переводчиков, а заранее сделанный перевод.

Что нибудь примерно такое:

сообщения выводят игроку при помощи новой функции

msg_to_char_multilingual(ch,«Invalid exit»);

И англоязычный игрок увидит сообщение Invalid exit

А для русскоязычного игрока функция обратится в базе переводов (обычному текстовому файлу) и найдет соответствие

Invalid exit — Неверный выход

и выдаст игроку текст «Неверный выход»

Похожим, только более сложным и громоздким образом работает многоязычный интерфейс gettext (https://ru.wikipedia.org/wiki/Gettext)

А откуда система узнает, что игрок русскоязычный? Обратите внимание на первый параметр функции msg_to_char_multilingual, он такой же, как у реальной функции msg_to_char — это ссылка на структуру, описывающую игрока. Надо будет ввести в параметры игрока еще один параметр «Language». Или для большей простоты использовать какой-нибудь уже существующий малоиспользуемый параметр

Для ускорения поиска по строкам для оригинальных строк (английских) вычисляются хеши (например CRC32) и поиск по файле переводов будет осуществляться по хешам

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

Русификация EmpireMUD

Начал русификацию мада EmpireMUD по методу, описанному в предыдущем сообщении. EmpireMUD, кстати, отличается тем, что мир в нем состоит не из комнат, а как бы непрерывный и достаточно большой

https://github.com/prool/EmpireMUD-2.0-Beta

К вопросу о русификации имен игроков в английских кодовых базах

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

Поэтому только что мне в голову пришла простейшая идея, которую я назвал романизацией (по названию города Рима, где был изобретен латинский алфавит)

Игрок вводит имя кириллицей и оно сразу «романизируется», то есть аккуратно транслитерируется латиницей. И дальше внутри мада имя латинское и имена файлов данных латинские.

А при выводе сообщений на экран, везде, где выводится имя игрока GET_NAME(player) оно перед выводом дероманизируется:

deromanize(GET_NAME(player))

то есть транслитерируется назад

MUDLET

Интересный клиент (я давно о нем слышал, но сильно не тестировал), есть для разных ОС, авторы занимаются интернационализацией, в частности, русификацией. Надо потестировать. (Как вы может знаете, моя основная рабочая ОС — Ubuntu и в мад я вхожу при помощи tintin++, причем у меня есть своя сборка Тинтина с нужными мне опциями типа перевода и ватчдога)

http://www.mudlet.org/

Оригинальный MUDLET https://github.com/Mudlet/Mudlet — собрался легко по их инструкции. С конца мая 2016 года начал работать с кириллицей в разных кодировках

Частично русифицированная старая версия, понимающая UTF-8 (май 2011 года) https://github.com/olostan/mudlet — мне его собрать пока не удалось, потому что я тупой

Письмо на форуме Былин http://forum.bylins.su/showthread.php?t=4407

Mudlet 4.0 internalization roadmap http://forums.mudlet.org/viewtopic.php?f=7&t=19499

Текущее

Мы с Пацифистом бросили Лиму и вернулись продолжать работу с библиотекой DeadSouls, эта библиотека на текущий момент нам нравится больше других:

https://github.com/prool/deadsouls

Всё, что было сделано в Лиме, выложено тут:

https://github.com/prool/lima

Главное, что в обоих библиотеках сделан патч, позволяющий работать с кодировкой UTF-8 и полными восьмибитным байтами. Это даже не патч библиотек, а патч драйвера FluffOS (см. предыдущее сообщение). Те, кто не любит UTF, могут на базе нашего патча делать свои библиотеки с кириллицей в кодировке koi8-r или cp1251, всё тоже будет работать.

Теперь остается текущая рутинная (и достаточно огромная) работа: переводить все сообщения и описания всех комнат, мобов, объектов на русский. Есть еще проблема с падежами, она непроста, но решаема