Для меня основной интерес представляет исследование, а написание кода — чаще всего рутина. Под исследованием я понимаю в первую очередь изучение кода игры (с меньшим интересом — редактора карт и кампаний) в дизассемблере/декомпиляторе (хотя кое-какая творческая работа другого рода, связанная с поиском решения задачи, сюда тоже попадает).
В отличие, видимо, от других геройских реверсеров (например, от baratorch'а) я воспринимаю исследование кода игры не как вспомогательный процесс, трудный и, может быть, неприятный, но нужный для того, чтобы реализовать ту или иную фичу, а как основной и наиболее интересный вид деятельности. Я бережно заполняю базу данных по коду Героев — распознаю и называю функции, структуры и их поля, здесь есть в том числе и некоторая «коллекционерская» мотивация. Часто я ленюсь переносить исследованную структуру в исходники — но я никогда не ленюсь обновлять информацию в самой базе данных реверсерской информации.
При реализации того или иного нововведения для меня представляет интерес выяснить на концептуальном уровне, как встроить его в игру таким образом, чтобы оно было максимально «как родное», чтобы учесть все ситуации, где потенциально это нововведение нужно учитывать и чтобы не нарушить никаких механизмов игры.
С другой стороны, само по себе написание кода, реализация фичи, которую я уже знаю, как реализовывать, мне неинтересно. Также мне неинтересно освоение каких-то новых для меня областей в программировании: например, поддержка полупрозрачных изображений в текущей версии Хоты сделана baratorch'ем и gotthit'ом (там требовалось реализовать чтение/конверсию png-файлов). Также, хотя вопрос о создании лобби в Хоте стоял очень давно, задолго до того, как оно было реализовано baratorch'ем — я никогда не планировал заниматься им сам, потому что для этого требовалось бы разбираться с сетевыми механизмами.
Из конкретных вопросов реализации наиболее интересной и вдохновляющей для меня была работа над генератором случайных карт: новый механизм прокладывания дорог, исправление багов с затопленными зонами, багнутых проходов и неправильно стоящих охран (и многих других багов, которые невозможно все перечислить в одной фразе).
Эта задача с одной стороны требовала глубокого исследования кода генератора (довольно сложного кода, использующего математические конструкции и алгоритмы), при этом требовалось не просто детально понять принципы работы генератора, но и разобраться, почему он иногда работает не так, как задумано.
С другой стороны, многие найденные баги оказались не ошибкой программиста, а проблемой самой концепции: разработчики не учли ряд ситуаций. Как исправлять такие баги — отнюдь не очевидно, этот вопрос сам по себе требует исследования и привлечения некоторой математики для решения некоторых проблем (что в других случаях требуется довольно редко). Что касается дорог, то сделать возможным назначение связей с обязательными дорогами (когда оригинал всего лишь соединяет дорогами все города по кратчайшему маршруту по уже построенной карте без учёта зон), — тоже было нетривиальной задачей, отчасти математической, над которой требовалось подумать, что было интересно.
Немаловажно и то, что в работе по генератору я был полностью автономен: я сам ставил себе задачи, сам их решал, и мне не требовалась ничья помощь. Если задача мне ставится извне, то мне гораздо менее интересно ей заниматься, чем когда желание возникло спонтанно или созревало в процессе обдумывания вопроса. С другой стороны, требование какого-то взаимодействия меня тоже сковывает, я не слишком люблю ни обсуждать спорные вопросы, ни контролировать выполнение другими их части работы. Вообще, я плохо приспособлен для командной работы по складу характера.
Так или иначе, за то время, пока я занимался генератором он успел мне поднадоесть: я знаю ещё массу недочётов генератора, более того, я уже спланировал, как нужно их исправлять — но желания вплотную заняться этим пока больше не возникало, тем более, что там многое уже придумано, и нужно просто писать код. Несколько отвращает от генератора и то, что всё реализованное в игре приходится дублировать и в коде редактора карт.
Когда я начинал работать над Хотой (где-то за 4 месяца до выпуска 1.0), я начинал с чистого листа: мне было практически ничего неизвестно ни о коде Героев, ни о коде Хоты (который тоже был таким, что его нужно было расшифровывать). Поэтому на начальном этапе (наверное, где-то до версии 1.2–1.3) я в основном исследованием и занимался, и любая работа была мне интересна.
На этом этапе даже такая, казалось бы, монотонная вещь, как расширения массивов доступности героев (чтобы для новых героев работали запреты в редакторе карт — проблема в том, что эти запреты хранятся не в одном месте: в меню выбора карты они загружаются и хранятся отдельно для каждой карты и используются при выборе стартового героя) — 180 однообразных хуков, — была интересной, так как для реализации этой вещи я вводил принципиально новые (для меня тогда) механизмы расширения структуры, а также написал для этой цели автогенератор кода. Добавление новых объектов тоже поначалу было связано с реализацией самого механизма для упрощения этого добавления.
Позже я уже разобрался полностью в коде Хоты и исправил все существенные его пробелы, добавил ряд технических усовершенствований, упрощающих написание нового кода; а также приобрёл много знаний о коде Героев — и многие задачи для меня превратились в рутину. Вообще, чем больше я приобретаю опыта и увеличиваю знания о коде Героев, тем проще для меня реализация тех или иных вещей, но тем большее число задач перестают мне быть сколько-то интересными.
Из последних задач довольно интересным было добавление новой почвы — хотя это ни в коей мере не было задачей «от себя и для себя», как генератор, интерес был в том, что это первая моя самостоятельная работа по расширению количества элементов (тем более, таких сложных, как почвы, чего раньше вообще никем не делалось). До этого я всегда опирался на разработки Entuser'а (расширение числа артефактов, существ, классов героев, героев, городов), и хотя то же расширение доступностей героев по сложности может даже и превышало всё остальное расширение количества героев; и расширение количества артефактов я полностью переписал по-своему — но это не было полноценным собственным расширением.
Помимо кода, мне приходится заниматься массой других задач: заполнение текстовиков, файлов с данными и т. п. Это всё сплошная рутина и, казалось бы, нет смысла заниматься этим именно мне — но, во-первых, обычно это всё равно ответственная работа, и допущенная ошибка серьёзно негативно отразится на результате; а во-вторых, мне всё равно придётся объяснять другому человеку, что и как делать, что не всегда окупится сэкономленными усилиями.
Впрочем, из не программистко-реверсерских задач мне более-менее даётся написание технических текстов: большая часть работы по разделам документации
http://h3hota.com/ru/documentation (кроме FAQ) сделана мной, и часто это было интересно (хотя поддержка и обновление документации уже скучна и рутинна). В связи с этим иногда у меня получается написать подробное письменное руководство о том, как делать ту или иную вещь, после чего я уже могу поручить её кому-то другому.
На текущий момент большая часть работы, которую приходится делать, — рутинна и не доставляет мне удовольствия. Возможно, мне более интересно даже править баги, чем вводить новые фичи — за баги я, во-первых, чувствую личную ответственность, а во-вторых, я сам решаю, когда что исправлять, и это не нужно ни с кем согласовывать.
Поэтому основная мотивация сейчас — это не сам процесс работы — а продвижение проекта, продвижение своего видения Героев в массы. С одной стороны, моя позиция оказывает существенное влияние на развитие проекта, и, в целом, я могу считать Хоту своим видением Героев. С другой — Хота имеет серьёзную популярность, что действительно мотивирует (но здесь есть и оборотная сторона: сильно демотивирует, когда хотовский контент заимствуется другими, в некоторой степени конкурирующими проектами, что иногда случается; также я не очень «толстокожий» и болезненно воспринимаю неадекватную «хейтерскую» критику — хотя рационально и понимаю, что её обычно нужно просто игнорировать).
Основной, наиболее мотивирующий момент — это стримы онлайн-игроков. С одной стороны, сам онлайн-геймплей мне интересен (вообще, после некоторого с ним знакомства, на мой взгляд, уже сложно получать удовольствие от игры в сингл «против компьютера», даже несмотря на то, что играю я очень редко — хотя, может быть, другие ощущают это иначе). С другой стороны, именно онлайн-игроки способны наиболее полно оценить геймплейные и балансные нововведения, и, что важно конкретно для меня, — реализацию тех или иных технических геймплейных и интерфейсных деталей. Они чаще обращают внимание на мелочи, в которые я вложил немало труда. Они в наибольшей степени ценят те же исправления багов генератора карт (это видно даже по постам «хейтеров», которые просят baratorch'а сделать то же самое для Сода). Другие категории игроков чаще обращают внимание на графику или просто на какие-то глобальные изменения.
Другая мотивирующая меня вещь — это творчество пользователей (равно как и участников команды) на основе доступных в Хоте возможностей — в первую очередь, создание карт и шаблонов (особенно карт, поскольку в шаблоностроении я и сам что-то смыслю, и оно не является для меня той задачей, с которой я вообще не понимаю, как можно справиться; в пользовательском шаблоне я наверняка легко найду кучу недостатков). Однако, запросы на добавление новых фич меня скорее раздражают — я ценю, когда человек сумел, используя по-максимуму доступные возможности, создать действительно хорошую карту или шаблон (а желательно, при этом ещё и сумел их разрекламировать — убедить кого-то поиграть на стриме, организовать турнир и пр.) — после такого мнение человека о том, что нужно добавить, становится интересно, но не в том случае, если ему заранее нужны эти возможности, чтобы создать шедевр.