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

Роясь в окаменелом гавне коде 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, всё тоже будет работать.

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

О русификации кодовой базы FluffOS

В каталоге packages в файле parser.c надо поместить вот эти определения вместо тех, которые там присутствуют

#define isignore(x) (x == '\'')
#define iskeep(x) (x!=' ')

И кириллица перестанет быть игнорируемой и заработают команды

say ёжиик
get палица

Собственно, не только кириллица (в любой кодировке), перестанет игнорироваться всё, что представимо в кодировке UTF-8 (то есть вообще все алфавиты)

Вот два мада, уже пропатченных таким образом:

https://github.com/prool/deadsouls

https://github.com/prool/lima

Текущие новости

Мы с Пацифистом бросили DeadSouls и взялись за Лиму, которая тоже построена на базе FluffOS, но показалась проще, по крайней мере say привет работает там «из коробки» (то есть показывает кириллическое сообщение).

Всё, что наработано на текущий момент в DS здесь https://github.com/prool/deadsouls
Последнее достижение: взят кириллический объект. Бросить его пока нельзя 🙂 См. тестовую команду prool, которая берет всё, включая мобов и игроков! 🙂 🙂 🙂

А Лима здесь: https://github.com/quixadhal/lima или более старая версия http://lpmuds.net/files/lima_fluffos_v1.zip

Кстати, работа с DS не прошла даром: мы поняли немного о структуре драйвера FluffOS и его библиотек.

Тестовый мад на Лиме работает здесь mud.kharkov.org 7878 (это у них такой номер порта по умолчанию)