longot: (Всадник)
При разработке сего либо, нужна удобная среда для разработки и взаимодействия с проектом. А тогда были времена когда код писали в блокноте, собирали проект из командной строки, а отлаживали проект по записям в логах. Дикое было время.

Проект был многоплатформенным, и он должен был собираться и работает как на винде так и на линуксе, и на фрибсд. И у каждой из этих систем были некоторые тонкости. Конечно очень хорошо, что в ядре SMAUG изначально предусмотрели это, и в коде уже были нужные IFDEF конструкции. Но были несколько проблем, которые не так просто было победить. Одной из таких проблем была кодировка в файлах. Так как ядро русифицировалось, из-за этого возникали проблемы. Изначально, и я считаю что это была ошибка, кодовая страница для русских букв была KOI8. Нужно было выбрать CP-1251. Во первых, в 1251 в отличии от KOI8, был правильный порядок русских букв, что бы позволило не извращаться с кодом и не делать дополнительные костыли. Во вторых было бы меньше проблем для девелоперов которые сидели на виндовс машинах, хотя с этими проблемами вполне успешно поборолись. В основном это были проблемы с редакторами. И в третьих, сейчас было бы проще ковыряться в истории коммитов, и смотреть, а что же там раньше была за строка и на что её заменили.

Весь проект собирался GCC 2.95. Под линуксом и фрёй никакхи проблем с этим небыло. А вот со сборкой под вин32 пришлось немного помучатся с ним. Виндовая версия компилятора вообще отказывалась что-то делать, похоже с ней нужно было предварительно совершать танцы с бубном, но как это делать никто не знал. Оставалось два варианта, собирать по GygWin или MinGW. Под MinGW проект почти собирался, но нужно было ещё доводить напильником. А вот под GygWin всё собиралось, запускалось и была полная обвеска, которая была нужна для полноценной работы.

Но были проблемы со сборщиком кода. Make. Как выяснилось, их несколько, и у каждого есть свои особенности с форматом файла, и тот make который был на FreeBSD был не совместим с make на Linux и в CygWin. А так как проект собирался и работал на FreeBSD пришлось как-то выкручиваться. Сервер админил в то время Эрлис, и он не хотел устанавливать нужную версию make, считая что это будет как то влиять на его сервер, и он станет не стабильным. Я не знаю, что именно его пугало, вполне возможен вариант, что у него просто небыло времени установить нужную версию make.

Для контроля версий использовали CVS. На тот момент это было гораздо лучше, чем хранить все файлы в разных папках и в ручную сравнивать, кто и какие делал изменения. И использование CVS мне очень понравилось. :) Правда была одна проблема, и заключалась она в том, что ченж логи при комитах приходили у разных людей в разных кодировках. И это было крайне не удобно, когда смотришь кто и что сделал. Я эту проблему исправил, когда сервер переехал на другой хостинг, и как систему контроля версия я решил использовать SVN. В процессе конвертации истории комитов, я вручную сконвертировал все ченж логи в нужную кодировку. Автоматически это сделать не получилось, так как в некоторых ченж логах кодировка была дважды изменена. А работать в SVN было несколько удобней чем в CVS. Правда я так и не освоил там таги, я считал в то время, что они были нам просто не нужны. Так как у нас небыло никакой структуры или системы по которой мы работали, то у нас небыло и версий продукта. Но в какой-то момент я начал экспериментировать с кодом, и это ох как плохо аукнулось в последствии. По хорошему, нужно было сделать несколько веток разработки, одну - экспериментальную, а вторую - стабильную. И не вносить в стабильную версию свои эксперименты, так как они в какой-то момент сделали ядро совершенно не стабильным, а откатить эти изменения я уже не мог, так как на них наложились изменения других участников проекта. А сейчас, с появлением GIT это стало в разы проще делать, и вести сразу несколько веток одного кода, а в стабильную ветку вносить только проверенные изменения.

Вот с IDE была вообще печаль, и сильная. Так как в то время небыло таких редакторов как Notepad++ или Sublime Text или Brackets. Был только обычный блокнот и Вижуал Студия. Конечно были ещё разные редакторы, но у них небыло одной важной функции, они не умели переходить от места использования функции к месту её определения. Это было наверное самое важное, что мне требовалось от редактора кода. С вижуалстудией к сожалению у меня не сложилось взаимопонимание. Да и к тому же я не смог её заставить собирать проект, а так бы было очень удобно, к тому же полезно. А кроме того, нельзя было изменить кодовую страницу у файла, чтоб корректно отображать KOI8 в винде. Поэтому я не нашёл ничего лучшего, чем использовать редактор файл менеджера FAR с плагином, который умел переходить к определению функции, и у которого была нормальная подсветка кода. И мне этого вполне хватало. Хотя с начала было не очень удобно. А вот сейчас я бы заставил собираться проект в Вижуал Студии, или использовал другой нормальный редактор. Вообще, хороший редактор значительно ускоряет разработку. Благодаря удобствам редактора меньше времени тратится на редактирование кода и поиск ошибок.

А вот сколько времени может сэкономить хороший отладчик... Но это я в другой раз расскажу.

Оглавление.
longot: (Всадник)
История одного старого проекта, многопользовательской онлайновой игры MUD.


Старые проекты. - вместо введения.
Как же это всё началось? - или как мы собрались.
Хаотическая разработка. - или как мы начали.
Среда разработки. - или в чём мы работали.
longot: (Всадник)
Это довольно таки забавно, писать о событиях которые произошли пятнадцать лет назад, пытаясь вспомнить какие-то детали. С другой стороны, кажется это было не так давно, вроде бы прошло то, а когда начинаешь считать приходишь в некоторый ужас. ) Хотя всё равно, интересно вспомнить что было и как было. Это был достаточно интересный опыт, и очень жаль что он не перерос во что-то более серьезное и так бездарно завершился. Хотя опыт есть опыт, и я надеюсь что он мне приходится.

Конечно всё и в деталях вспомнить сложно, к тому же не со всеми участниками проекта у меня осталась связь. В основном это произошло по одной причине, трёх летней давности. А вот с кем связь осталась, они сами с трудом вспоминают как это было и что именно они делали. Хотя я надеюсь удастся вспомнить интересные моменты. Буду попинывать периодически тех с кем есть связь в надежде, что они что-то вспомнят.

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

У нас небыло никакого внятного плана работ, хотя нас и не пугало количество всего, что нужно было сделать и переделать. Но работы было очень много. Код ядра SMAUG был крайне странный, и скорей всего по тому, что он тянул за собой куски кода из более старых ядер, которые писались вообще для больших компьютеров, потом адаптировались к другим архитектурам и операционным системам. Сам коды был плохо расширяемым и люто захардкодженным. Зачастую, чтоб добавить новый флаг у объекта, приходилось вносить правки в три - четыре файла. А если где-то забыл дописать ещё одно значение в массив, то сервер крешился. Приходилось искать где он крешится, и это не всегда было просто. Да и кроме того, чтоб сделать нормальную русификацию пришлось хорошенько переписать код. Нельзя было просто перевести слова, так как в итоге получался текст, как после автопереводчика, не в тех падежах или не в тех формах, и читать такое было не очень.

Ещё одной сложностью был файл хелпа, а это примерно два мегатайта текста на английском языке. Перевести это для нас было не реально. Хотя мы старались. Для этого сначала его перевели автопереводчиком, чтоб понимать что там вообще было написано. После удалили значительное количество разделов помощи, так как они были посвящены другим серверам, админам этих серверов, или тем вещам, которых у нас уже нет. Но вот с оставшейся частью нужно было что-то делать. И если бы были деньги, то по хорошему, нужно было отдать этот перевод кому-то и заплатит за это. И это было бы самым правильным решением, так как сами мы с этой задачей справиться не могли, а вот помощь по командам была нужна игрокам.

Вообще идея всё, вообще всё всё всё делать самому - порочна. Нужно максимально делегировать задачи внутри команды, а что не может сделать команда, отдавать на аутсорсинг. Хотя за аутсорсинг зачастую нужно платить деньгами, не все готовы работать за идею и за спасибо. И вот тут начинается самое сложное. Эти деньги для начала нужно где-то взять. В первую очередь они дерутся из собственного кармана, но это будет происходить до тех пор, пока это не будет напрягать тот самый карман. Поэтому нужно сразу думать как получить финансирование. И вот тут начинается самое сложное. Так как в то время мы были гордые и глупые, мы решили что не будем даже просить денег у игроков. И это было зря. Конечно ввод абонентской палаты резко уменьшит количество игроков, если им не давать ничего в замен. А вот попросить по возможности скидываться раз в месяц, это было бы вполне нормально. Конечно же поощряя в игре дарителей. Но тут тоже нельзя переусердствовать, так как игра в которой тот кто платит тот и получает все плюшки, достаточно быстро изживает себя.

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

Оглавление.
longot: (Всадник)
Вопрос конечно хороший, и действительно, как кому пришла идея запустить свой мад сервер? Но пока он покрыт пылью годов, и за 100% достоверность истории я не ручаюсь.

В то время у нашей компании были самыми популярными мад серверами Аладон и Балдердаш.

Самый первый сервер запустился в 1997 году, на базе донецкого интернет узла Алика Драчука. Узел назывался АЛАДОН - тоесть Алик Донецкий. Народ там играл в Galaxy, Judgement Day, Atlantis, сейчас врядли кто помнит эти игры по переписке. Да да, был такой онлайн, когда каждый свой шаг ты отправлял по почте, и ждал результата в ответном письме. Админа мад сервера звали Дио. Самый первый мад сервер назывался Rings of Aladon и был основан на ядре Circle. Он медленно развивался и были попытки его русификации. В 1998 году админа уговорили перевести мад на ROM 2.4 и он стал называться Towers of Aladon, дальше были попытки перевести его на SMAUG, но успехом они не увенчались. Долгое время сервер был доступен только для местных посетителей этого интернет узла и был неизвестен в большом интернете. Но после очередного и очень затяжного падения популярного в то время серверв RMUD, в октябре 1999 года он вышел в большой мир. Я узнал о нём через месяц, и начал постигать для себя первую онлайновую игру. Я в то время работал в интернет кафе, и но ночам сидя на линуксовым сервером, так как админской машины у нас небыло, играл в мад из консоли. В середине 2000 года, на интернет узел пришло новое начальство, переименовало его в Аист, и начало наводить новые порядки. Тогда начались первые затяжные падения сервера, что было очень плохо, так как по ночам было скучно, а к любимой игре не удавалось присоединиться. В итоге, после не продолжительных уговоров Интры, сервер переехал в Москву на площадку Совинтела. Каналы там были получше, да и железо по мощней.

В начале 2001 кода появляется мад - Балдердаш. Располагался он в Кахасии, и был построен на ядре ROM 2.4 как и Аладон. Это был второй по популярности у на сервер. У каждого из них были свои преимущества и свои недостатки. Если падал один из них, все дружно переходили в другой, продолжая наслаждаться игрой и общением с людьми.

Но потом начались изменения, которые очень сильно изменили баланс игры. О гейм дизайне тогда мало кто знал, и ещё меньше кто понимал что это такое. Поэтому вдруг изменить некоторые ключевые параметры, или убрать у всех предметов некоторые свойства, это было вполне нормально. Правда приводило к тому, что часть игроков уходила из игры или начинали играть на других серверах. И наверное именно это послужило толчком к созданию своего мад сервера. Скорей всего это была середина 2002 года, когда в Аладоне порезали вещи и убрали у многих защиту от урона и бонус к атаке. Мотивирована это тем, что это же не нормально, что шлем даёт дополнительный урон к атаке, а меч увеличивает стойкость к защите. Такого не бывает в реальном мире. В общем игровой баланс был очень сильно нарушен, многие игроки были крайне не довольны. И как то вечером в пятницу, потягивая пивко у кого-то промелькнула светлая мысль, что нужно поднимать свой сервер. Кто это был и когда именно это было я не берусь утверждать, так как не помню. В итоге собралась активная троица из Эрлиса (erlis), Фарыча (daddy) и Гавала (gaval) и решили они запустить свой сервер. Эрлис предоставлял хостинг, так как он работал на местного интернет провайдера, и мог на своей машине запустить сервер. Фарыч взялся за написание интересных и разнообразных зон, а Гавал брался править код сервера. Потом они пригласили Вицкеда (wicked) которому было интересно помочь с руссификацией и исправлением ошибок в коде сервера. Так проект и стартанул. Какое-то время всё работало спонтанно, фиксы присылались в виде файлов по электронной почте, сервер не сразу обновлялся, так как Эрлис был постоянно загружен по работе, и не всегда мог уделить время на проект. Только в конце 2002 года, в ноябре, после очередной коллизии в коде была поднята система контроля версий, и в ней был залит код. Это значительно упростило работу.

В январе 2003 года от проекта отвалился Вицкед, я не знаю по какой причине, возможно у него небыло больше времени, чтоб уделить его проекту, а может по какой другой причине, к сожалению он сам этого не помнит. И в феврале месяце меня пригласили принять участие в этом проекте. Неделя ушла на создание среды разработки, изучения как работать с системой контроля версий, и ознакомления с кодом ядра сервера. Всё было так интересно и так не понятно. Я совершенно не понимал, как это всё работает, и что получается после того как сервер получил команду от игрока, как вычисляется где и что делает каждый игрок, и как всё это между собой взаимодействует. Это была магия.

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

Первое изменение которое я сделал в ядре было через месяц после этого, это было создание объектов которые могли изменяться с течением времени. К примеру это могли быть растения которые росли, изменялось их название и некоторые параметры. Это позволило создавать более интересные и динамичные зоны, в которых могла расти трава на лугу, созревать плоды на дереве, или мог разрушаться старый дорожный камень с надписями на нём.

А потом история длинной в тысячу ревизий, сотен писем, двух переездов на другой хостинг, параллельной работы над двумя мад серверами и безуспешной попытки их объединить.

Оглавление.
longot: (Всадник)
Иногда вспоминаю о своих старых проектах, из них конечно самый интересный, это проект онлайновой многопользовательской игры. Длился этот проект примерно три года, и два года я в нём принимал крайне активное участие. Потом он был заморожен на неопределённый срок, хотя север продолжал ещё пару лет работать.

Сейчас заглянул в архивы, судя по логам CVS, первый коммит был сделан 2002.11.19. Можно считать эту дату, началом проекта Silan MUD Server. Меня пригласили в проект через пару месяцев. Я нашёл свой первый коммит от 2003.03.17. И последний мой коммит 2005.04.18. Эту дату можно назвать концом этого проекта. Хотя сам сервер игры был включён ещё несколько лет, но уже на другом хостинге. Иногда в игру заходили люди по старой памяти, гоняли монстров, но сервер больше не развивался. У меня не хватало времени, а команда распаласть изза отсутствия мотивации и разнообразных моментов в личной жизни.

К сожалению я не помню тот день, когда меня пригласили в проект, нужно над этим поработать и вспомнить, может быть удастся что-то интересное вспомнить. Когда я начинал работу над этим проектом, я не вообще не знал что такое CVS и как работать с системами контроля версий. Совершенно не представлял как делать мультиплатформенный проект, он собирался и работа на трёх операционных системах, линукс, фрибсд и виндовс. Не имел ни малейшего понятия как работают сервера и что происходит внутри главного процесса. Не имел никакого понятия о игромеханике и балансе. Приходилось всё изучать методом тыка, проб и ошибок. Единственное что я умел на тот момент, это писать на С.

Сначала я занимался правкой мелких багов, исправлял тексты и изучал как работает сервер. Мне потребовалось примерно три месяца на то, чтобы понять как работает сервер и свободно ориентироваться в коде. А кода там было около трёх мегабайт кода. Этот объём теста сравним с объёмом романа "Война и Мир". Но это был не художественный рассказ, а код полный багов, ошибок, боли и страдания. )

За основу был взят сервер SMAUG 1.4, на тот момент самый продвинутый MUD сервер, код которого казался максимально стабильным. Казался таким, но не был таким по сути. Сам код был ужасным. Его писали студенты, точней дописывали, так как он базировался на кодовых базах других серверов, с некоторыми патчами и дополнениями. И всё это было перевязано изолентой, подперто неизвестным количеством костылей, и украшено разноцветными ANSII символами. Но я всего этого ещё не знал. Я видел огромный мир, который можно было построить на этом сервере с невероятными возможностями и интереснейшими зонами, в которых будут резвится тысячи монстров, а игроки будут их уничтожать, проходить квесты всячески ролеплеить друг с другом.

В то время существовало несколько MUD серверов, которые развивались в основном за счёт увеличения количества зон, и некоторых мелких косметических исправлений кода. Мы же решили, что зоны зонами, но нужно развиваться за счёт новых возможностей и в основном занимались изменениями в коде. Одной из наших задач была полная руссификация и адаптация кода. Это было на самом деле не так просто. Сервер был изначально англоязычный, а английский и русский очень сильно отличаются. К примеру падежи, которых нет в английском. К примеру гендерные окончания. К примеру числительные и множественное число которое зависит от рода. В общем, для полной адаптации текстовой онлайновой игры под русский язык пришлось существенно попотеть. То что в английском можно было написать просто добавив 's в конце слова, в русском приходилось проверять род, количество и падеж. пришлось делать систему автосклонения, с приличным таким количеством слов исключений. Делать систему спряжений у числительных и согласований рода. Это всё выглядело как огромные таблицы, которые периодически приходилось доделывать, так как среди нас небыло ни одного лингвиста или филолога, мы всё это делали наугад, но после тщательной проверки теоретической части алгоритма. ) Это было достаточно забавно.

Да, это был интересный проект. И наверное действительно стоит вспомнить как и что мы там делали и написать про это. Хотя уже столько лет прошло. Но у меня есть история коммитов! ) Хотя кроме кода была ещё куча посиделок, ночного кодинга и прочих приколов.
И конечно очень жаль, что он так бездарно завершился.

Оглавление.

December 2016

S M T W T F S
    123
456 7 89 10
111213 14151617
181920212223 24
252627 282930 31

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 25th, 2017 03:13 pm
Powered by Dreamwidth Studios