The Elder Scrolls: Armistis
Modder's Muse English

Библиотека - Генератор имен

В этой статье я расскажу о том, к каким результатам привела моя попытка устранить острую проблему нехватки новых имен в дополнении, и о том, как это повлияло на судьбу проекта The Elder Scrolls IV: Armistis.

Проблема создания имен

Для глобального дополнения требуется огромное количество имен. Если вы создаете новую территорию, новые города или, что чаще, новых персонажей, то вам от этого не уйти. Вообще, здесь под словом "имена" можно понимать сразу и фамилии, а также названия городов, пещер, подземелий, географические названия, названия растений и животных, всякие местные словечки, понятия и т.п.

Конечно, можно придумать все имена самим, но такой подход обычно затруднен из-за ряда обстоятельств:

  • Это процесс очень долгий, так как объемы велики (особенно если неймингом занимается только один человек), да и других проблем тоже хватает.
  • Способ этот ненадежный, потому что воображение иногда бывает очень ограниченно, и можно упустить какой-нибудь интересный вариант.
  • Легко пасть жертвой субъективных взглядов на то, какими должны быть имена, ведь каждый воспринимает их по-своему.

То есть, порою достаточно сложно быстро создать подходящие имена и при этом уберечь так называемую лорность. Стоит засесть за какой-нибудь сюжет, и тут же полет мысли разбивается о факт полного отсутствия нужных названий. Иногда имена приходят сразу и сами собой, но чаще все-таки бывает, что требуется срочно придумать какое-нибудь очень хорошее название, а подобрать его никак не выходит, или же нужно быстро найти любое имя для второстепенного персонажа (лишь бы оно не шло вразрез с остальными именами), а взять его негде. Отдельные имена, понятно, могут выбиваться из общего ряда, но лишь как подтверждение всеобъемлющего правила.

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

Генератор слов

Первым образцом генератора стала программа Fancy, которая была написана буквально за один день в начале зимы 2005 года. Программа эта работала под DOS, настраивалась через INI-файл и выводила результат своей работы в текстовый файл, который автоматически открывался в Блокноте. Принцип ее работы состоял в случайном смешивании гласных и согласных букв таким образом, чтобы получались более-менее читаемые слова. Несмотря на всю свою простоту, она помогла мне придумать названия, часть из которых до сих пор используется в дополнении.

Затем, после долгого периода образования новых идей и изучения средств программирования, осенью 2006 года была выпущена первая публичная версия генератора, который мы с командой окрестили Modder's Muse. Между собой мы и сейчас называем его просто "Муза".

Это был уже существенный шаг вперед. Контролировать составление слов теперь можно было, создавая профили, где указывались места для гласных и согласных, и словари, в которых описывались условия выпадания той или иной буквы или морфемы.

В программу был встроен уникальный автозаполнитель, который мог сам выставлять условия выпадания букв на основе анализа какого-нибудь списка слов. Иногда это позволяло довольно быстро научить генератор создавать какие-нибудь простые имена (нужно было только потрудиться с составлением списка слов для примера), но запрограммировать его на создание сложных имен и названий, которыми славится мир TES, все-таки было очень сложно. Несмотря на это, значительная часть названий на концепт-карте нашего аддона была создана именно с помощью этой версии программы.

В конце концов, когда в конце 2006 года полетел жесткий диск, на котором находились основные материалы дополнения и исходники первой версии Modder's Muse, многое пришлось начинать заново. И так получилось, что, когда я восстановил и продолжил прорабатывать карту и сюжет дополнения, понадобилось такое количество новых имен и названий, что я просто все отложил и дал себе слово сделать наконец толковый генератор слов. То есть, я занялся его созданием потому, что без него проект бы застрял, а может, наоборот, проект остановился из-за того, что основное внимание направилось на создание генератора. Скорее всего, и то и другое.

Работу над новой версией программы я начал практически с нуля, основываясь на опыте предыдущих версий. Старая концепция стала быстро обрастать какими-то новыми идеями, да так стремительно, что реализация просто за ней не поспевала. Правильно говорят опытные программисты: никогда не пытайтесь развивать программу по мере ее написания, иначе процесс может затянуться до бесконечности. Что-то подобное и произошло.

Наконец, в начале зимы 2008 года впервые заработал движок генератора. Что интересно, ядро было написано всего за одну зимнюю ночь, а все предыдущее время заняла только его разработка. Далее последовал долгий этап всевозможных доделываний.

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

Не буду описывать всех мытарств, которые пришлось пройти при создании второй версии Modder's Muse, упомяну лишь несколько фактов, которые, может быть, отчасти объяснят столь большой срок ее разработки:

  • Со времени появления Fancy я сменил 3 языка программирования и 5 сред разработки - QuickBasic, Visual Basic, VB.NET, C++ Builder и Delphi. В конце концов, Delphi с дополнительными компонентами предоставил все нужные для программы возможности.
  • Нет программ, предоставляющих те же возможности, что и Modder's Muse, а это означает, что в ходе разработки пришлось придумывать всю систему генерации и интерфейс программы практически с нуля. Какие-то моменты я брал из других хороших программ. Например, условия в словарях произошли от условий в диалогах TES Construction Set, а устройство главного окна в общем и целом берет начало от устройства окон браузеров вроде Opera и Firefox.
  • Помимо создания движка генератора, пришлось решать такие новые для меня и не самые тривиальные задачи, как многопоточность, поддержка кодировки Unicode, отмена и возврат изменений в документах, разбор и анализ текста, создание двоичных форматов файлов, архивация данных в установщиках и др.
  • Пришлось почти вручную составлять и анализировать списки имен персонажей и названий из мира TES, а также других игровых и книжных вселенных. Такие списки называются ономастикой и они очень удобны, если нужно понять принципиальную конструкцию имен той или иной расы, или получить новое имя путем смешивания старых.
  • Программа выпускается сразу на русском и английском, а это подразумевает двуязычный интерфейс, двуязычные наборы ономастики, двуязычный сайт поддержки, а также полную справку по программе на обоих языках.

В общем, из программы "для себя", в которой можно простить себе любые недоработки, лишь бы был результат, Modder's Muse 2 постепенно превратилась в эдакий продукт, нацеленный на массового пользователя, что, в основном, и продлило срок ее разработки.

И все же, генератор слов получился почти революционный. О его особенностях можно почитать на сайте поддержки по адресу www.moddersmuse.org.

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

Судьба дополнения

Конечно, за все время, что было потрачено на создание генератора, дополнение было основательно заброшено, забыто сообществом, и вообще, записано в ряды мертвых. Однако, несколько раз я с удивлением для себя обнаруживал в сети упоминания о проекте, какие-то цитаты и ссылки на наш сайт, даже после столь длительного простоя проекта.

Иногда, особенно поначалу, поступали предложения о том, чтобы отдать разработку дополнения кому-нибудь из других моддеров, но я говорил, что проект только заморожен на неопределенный срок, потому что внутренне я никогда полностью не отказывался от его реализации. Просто, по некоторым обстоятельствам жизни, даже если бы я продолжил в тот момент активную разработку, ее вновь пришлось бы прервать в ближайшее время. Поэтому я постарался хотя бы успеть закончить и выпустить бета-версию Modder's Muse 2 к началу лета 2009 года. Когда программа вышла, обстоятельства поменялись, и появилась возможность еще какое-то время над ней поработать.

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

На этом фоне сами собой стали возникать мысли о восстановлении проекта. Было много за и против, поэтому я достаточно долго колебался. Но последней каплей, пожалуй, стала мемориальная запись на сайте YourPro.ru, увидев которую я окончательно решил, что не все еще потеряно: генератор в общем-то готов и функционирует, материалы по проекту - вот они, бери и продолжай, да и времени на досуге вполне хватает для продолжения работы. И проект, наконец, был восстановлен.

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

Автор - Dehero