Текущее

Мы с Пацифистом бросили Лиму и вернулись продолжать работу с библиотекой 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