Circle теперь издается согласно лицензии LGPL. И tbaMUD
Метка: tbamud
Как я ехал в метро
Сегодня утром по дороге на работу вместо того, чтобы залипать в твиттер, залипал в терминал termux на Андроиде и игрался со сборкой мад-серверов под Андроид.
Как я уже ранее писал, tbamud собирается с пол-пинка. ROM собирается. Виртустан муд собирается, но выпадает в корку на каком-то вызове lexical cast. А в Былинах-0 (это очень-очень-очень старая версия Былин, по сути слегка русифицированный Circle) внезапно нашелся ассемблерный код на ассемблере x86 (а телефон построен на процессоре ARM). Перепишу эти вставки на C и посмотрю, что будет дальше.
Кстати, когда телефон подключается к Wi-Fi, запущенный там мад-сервер может быть виден из Интернета, а вот при использовании 3G/4G — нет
Update. Код Былин-0 оказался психологически несовместим с используемым в Андроиде «богомерзким кленгом». А tbamud и rom — рулез!
GloryMUD reforged
На домене glorymud.kharkov.org, на порту 5000 в качестве Глоримада или «моего текущего англоязычного мада» уже крутится не мой любимый tbamud, а EmpireMUD с модулем перевода на русский (с тем же модулем, что я намедни невозбранно вставил в свой клиент prooltin).
tbamud, конечно, хорош и прельстивен, но в имперском маде непрерывный мир и если я таки заставлю себя разобраться с графикой, я смогу сделать графический клиент с tile-графикой, ну примерно как в «Сказке»
Каминг аут
На работе выдали Макбук Air. Чувствую себя кем-то типа Ренли Баратеона или Лораса Тирелла.
В порядке освоения OS X (которая основана на ядре FreeBSD) собрал там мад-клиент prooltin (мой мод tintin++). Собралось вообще без вопросов. Еще собрал мад-сервер tbamud, здесь пришлось в Makefile указать полный путь к библиотеке libiconv (а до этого инсталлировать ее при помощи brew, а до этого инсталлировать пакетный менеджер brew). Компилятор здесь, кстати, хипстерский богомерзкий clang, а не православный gcc
Glory MUD
Внезапно тараканы в моей голове сказали, что хорошо бы сделать англоязычный мад. На него начнут заходить китайцы и индусы и у меня будет посещаемость! Не зная хорошо английского я взял готовую кодовую базу с зонами, а именно tbaMUD и запустил всё это на 5000 порту. Мад будет называться «Glory to Heroes» (Слава героям!).
Сайт мада http://glorymud.kharkov.org
Адрес мада glorymud.kharkov.org 5000
Модифицированные мною исходники мада
Это тот самый tbaMUD, который я начал русифицировать неск. месяцев тому назад. Для англоязычного релиза я его дерусифицировал назад (сохранив переведенные файлы с расширениями .rus) и теперь неторопливо думаю о том, как сделать двуязычный мад
«Рубай компот, он жирный!»
Роясь в окаменелом гавне коде tbamud, который произошел от circlemud, я обнаружил вот что: там есть тип жидкости «вода» (LIQ_WATER), а есть тип «чистая вода» (LIQ_CLEARWATER). Так вот, обычная вода утоляет и жажду и голод. А чистая вода только жажду. Что там у них в воде содержится? Питательные микроорганизмы?
Я, кстати, от нефиг делать, слегка его русифицирую
О русификации 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 сделан в виде форка и работы в этом муде не отображаются на гитхабовском календарике квадратегами. Негодую на эту политику Гитхаба!
Рабочее
tbamud/prool, который я кручу-верчу, выпал при команде shutdown в корку
это плохой знак
«нам потребуются более тщательные наблюдения»
Место, где происходит crash найдено при помощи gdb и помечено. Обычный сбой при использовании ptr (или там ноль или мусор). Как бороться с нулем, понятно, проверять. Причем вероятность сбоя низкая: при освобождении фолловеров, но не всегда
Еще и gdb в корку вылетел
Apr 22 16:23:46 ���� :: (GC) Shutdown by Prool. Apr 22 16:23:46 �%W :: Closing all sockets. Apr 22 16:23:46 :: Closing link to: Prool. Apr 22 16:23:46 :: Saving current MUD time. Apr 22 16:23:46 :: Normal termination of game. Fri Apr 22 16:23:46 2016 Normal termination of game. Apr 22 16:23:46 :: Clearing game world. Fri Apr 22 16:23:47 2016 locate follower who is not head of list Fri Apr 22 16:23:47 2016 locate follower who is not head of list Program received signal SIGSEGV, Segmentation fault. ../../gdb/dwarf2-frame.c:1907: internal-error: decode_frame_entry_1: Assertion `fde->cie != NULL' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) y ../../gdb/dwarf2-frame.c:1907: internal-error: decode_frame_entry_1: Assertion `fde->cie != NULL' failed. A problem internal to GDB has been detected, further debugging may prove unreliable. Create a core file of GDB? (y or n) y Аварийный останов (core dumped)
Ссылки
И снова о русификации английских кодовых баз, основанных на 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