Русификация 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 (это у них такой номер порта по умолчанию)

О русификации QuickMUD-lua

С подачи товарища Пацифиста начал русифицировать QuickMUD+lua (Авраам породил Иакова, ROM породил QuickMUD, а потом товарищ Odoth добавил туда lua). В общем, все делается примерно по тому же шаблону, что и ранее слегка русифицированный tbaMUD. Русские команды лучше и проще реализовывать не в общей таблице, а отдельным обработчиком, вызываемым до основного. А то всякие глюки выползают из-за UTF-8

Всё здесь:

https://bitbucket.org/prool/quickmud-lua-russian

А вот взгляд на проблему с другой стороны: http://muder.ru/blog/172.html

tbaMUD+prool

Ну чо, я практически русифицировал tbaMUD. С падежами я решил не заморачиваться и сообщения не переводил, но сделал главное: теперь муд нормально воспринимает символы из старшей половины таблицы ASCII, кириллица внутри мада хранится в UTF-8, а снаружи в UTF-8 или koi8-r. Добавить кодировки win, alt, lat проще простого. (В Винде хороший клиент Tortilla, который умеет UTF-8) Пока кодировки переключает флаг summonable (команда toggle summonable on или off). Можно делать русские команды, русских мобов и предметы (без падежей!) И украинских! И белорусских! И болгарских! И сербских! (Или братушки сербы уже перешли на латиницу?)

Всё на гитхабе https://github.com/prool/tbamud

И описанный в предыдущем посте баг нейтрализован

Обращаю также ваше внимание на то, что на гитхабе tbaMUD+prool сделан в виде форка и работы в этом муде не отображаются на гитхабовском календарике квадратегами. Негодую на эту политику Гитхаба!

И снова о русификации английских кодовых баз, основанных на Circle

Я только о том, чтобы мад воспринимал символы из второй половины таблицы ASCII. И строго говоря это не русификация и даже не кириллизация, а интернационализация и UTFизация

Возьмем, к примеру TBAMUD

Файл comm.c, в функции perform_socket_read

ищем строку с проверкой isascii(*ptr)&&isprint(*ptr)

и меняем ее на ((unsigned char)*ptr)>=32U

Почему так коряво, да потому что по умолчанию *ptr – это signed *char

Я там и единицу ставил (то есть всегда true), тоже работало, но лучше от символов, меньших пробела, защититься 😉

Возможно есть и другие места, где придется слегка модифицировать код, чтобы нормально проходили старшие символы (>127). И не надо забывать, что char signed!

UPDATE. 01-Apr-2017. То же касается и русификации ROM и вообще всех детей Diku

UPDATE. 03-Dec-2017. И не надо забывать, от командах протокола telnet, которые могут появиться, например в начале строки и испортить картину. Например, испортится ввод пароля или ввод команд. Вот пример таких последовательностей FF FD 01 и FF FE 01