Приход эры распространения КПК отзнаменовался появлением вменяемого инструментария для разработки на привычном С++ и полным отсутствием адекватных и интересных игр для этой платформы. Поигравшись в Embedded Visual C++ возникла мысль - а почему бы не портировать, а точнее написать с нуля нечто старое и такое дорогое из старых игр. Дополнительной мотивацией к этому послужило отсутствие своего pixel artist и возможность отреверсить ресурсы игры и тем самым добыть готовый art для начального этапа разработки.
Первым кандидатом на роль подопытного кролика пала оригинальная Dune. Повозившись с ней некоторое время и по факту разобравшись с платформой было принято решение переключится на Heroes of Might and Magic 2. К тому времени на КПК появилась некоторая RTSка, а вот ничего похожего на героев не было в принципе. К тому же формат спрайтов стандартного разрешения игры в 640×480 лучше подходил для маленького экрана наладонника.
Ресурсы отреверсились замечательно, тут сказался давнишний опыт извлечения графики из Master of Magic. В обоих случаях спрайты хранились в некотором custom span-based формате с внедренным shadow key. Для игры был разработан редактор карт, который послужил так же прототипом визуализации карты.
Поскольку мы не ставили задачу написать полный клон, а скорее адаптировать игру к платформе, многие аспекты подверглись переработке. Таким образом карта из плоской стала 2.5D tile-based, игровой интерфейс был полностью переосмыслен, как, впрочем, и детали игрового процесса.
Ко времени, когда появилась работающая альфа версия, было принято решение показать проект широкому кругу фанатов данной игры.
Скромная презентация проекта в серии постов на коммьюнити-сайтах мобильных игр и фан-форумах оригинала принесло свои плоды. Почтовый ящик переполнился сообщениями от людей, интересующихся проектом и желающих принять непосредственное участие. На данном этапе это пришлось очень к месту, нам нужны были люди умеющие и желающие рисовать карты и графику для проекта. Для коммьюнити был создан форум (ныне потерявшийся на просторах интернет) который привлек добровольцев и сочувствующих как со стран СНГ, так и с других частей света.
К сожалению, предание проекта общественности имело и отрицательные стороны. Наша деятельность была замечена правообладателем в лице Gameloft, за чем последовала переписка в стиле:
Нельзя! Почему нельзя? Ууу у нас права и вы того-этого, графику используете. А если мы перерисуем? Ммм...
Интерес Gameloft было можно понять - они занимались такой же деятельностью (кое-как перенося хиты старых времен на мобильные платформы) но под крылом правообладателей. В итоге переписка заглохла сама по себе, после того как мы открестились обещанием заменить весь оригинальный арт. За что Gameloft большое спасибо.
Примерно в это же время выяснилось, что PocketHeroes есть зарегестрированный трейдмарк некоего производителя пластмассовых игрушек карманного размера, так что проект пришлось переименовать в Palm Heroes.
К этому времени социальная активность на форуме набирала обороты, были найдены такие люди, которые сами были готовы заниматься организацией и рекрутами. Появились энтузиасты для составления игровых карт / уровней, а так же художники. Коммьюнити трепетно ждало релизов и бурно обсуждало нововведения и фичи.
Однако дальнейшая разработка требовала материального стимула, пусть если и не для разработчиков, но, хотя бы, для наемных работников. Первая попытка монетизации в виде donate провалилась с треском. Собраных средств оказалось недостаточно для финансирования работы команды. По этой причине команде пришлось пойти на непопулярную меру и сменить статус проекта на shareware, что вызвало определенной резонанс в коммьюнити. Впрочем, после того как мы публично объяснили причину, сообщество отнеслось с пониманием.
В итоге, с расчетом на дальнейшее финансирование, игра была доведена до некоторого временного финала и опубликована, как на своем сайте, так и с помощью партнерской программы. Результаты не заставили долго ждать - денежное пособие от продажи пусть и упрощенной первой версии позволило привлечь долгожданных художников, а так же мотивировать разработчиков на дальнейшую работу. По результатам была выпущена версия 1.1 с уже новой графикой, новыми картами и улучшенным геймплеем.
Спустя некоторое время основные разработчики были вынужденных оставить проект и передать его на поруки новоприбывшим. К этому времени на рынке уже появилась новая перспективная платформа в виде iOS и новая команда своими силами портировала игру на эту платформу.
Результаты нашей работы были отмечены во всевозможных отечественных и зарубежных журналах, при чем не только в электронных, но и в тех, которые выходили на “глянцевой бумаге”. Проект неоднократно номинировался на различные премии, включая зарубежные (Smartphone & Pocket PC magazine 2007 Best Software Award в номинации “Games, Turn-Based Strategy”, Smartphone & Pocket PC magazine 2008 Best Software Award в номинации “Games - Turn-Based Strategy”). В достижения стоит записать так же опыт привлечения и организации коммьюнити, полезный опыт разработки под мобильные платформы (кроме Windows CE в некоторый момент времени были сделаны порты на Palm и Symbian разной степени сырости), некоторый опыт распространения и медиа-освещения проекта, опыт монетизации своими силами, технологические достижения.
В дальнейшем это все пригодилось и используется на ниве новых проектов для iOS и Android платформ.
В рамках проекта были созданны и опробованны следующие технологические “инновации”:
С целью уменьшения дистрибутива игры были разработанны и применены новые способы сжатия игрвых ресурсов:
Для полноэкранной пиксельной графики (кроме спрайтов), был разработан собственный программный кодек, базирующийся на dct сжатии. Lossless методы не обеспечивали достаточного уровня сжатия графики, в то время как jpeg вносил видимые артефакты при приемлимом уровне сжатия. Для улучшения характеристик сжатия, с сохранением сложности кодирования на уровне мобильных платформ, было проведено исследование и тестирования методов улучшения типичного dct кодека. Разработанный кодек использовал быстрое DCT-преобразование коэфициентов с оптимизированной квантизацией в альтернативном цветовом пространстве (YCoCg).
Для сжатия звуковых game assets был адаптирован под PCM8 lossless TTA кодек.
С переходом на модель shareware в полный рост встала проблема - а как дать возможность авторизовать покупку? Смешные способы того времени не предлагать.
Для этого потребовалось создать нечто, позволяющие активировать покупку на уникально идентифицирующемся устройстве путем ввода достаточно короткого и простого ключа, в тоже время учитывая возможность инвазивных действий и реверса ПО.
Для этих целей была разработана система авторизации на основе ассиметричного ключа с использованием elliptic curve криптографии и цифровой подписи с восстановлением вложенного сообщения (http://goo.gl/DQXre). Разработанная система позволила авторизировать индивидуальную копию ПО для конкретного устройства (идентифицируемого hardware id) компактным ключом, который одновременно хранил и специальные параметры данной лицензии (например ограничение по региону или доступную функциональность) плюс хранить список валидных и отозванных ключей в виде прегенерированной trap функции на основе bloom filter (нечто похожее на perfect hash)
Далее следует интересная и пространная история борьбы со взломом, по результатам которой keygen так и не был создан.
Ах, к этому стоит отнести еще интересный метод патча исполняемого кода с заменой условных ветвлений на переход к обфусцированному трамплину в виде perfect hash от адреса источника. В качестве противодействия one byte patch. И некоторого количества стадий определения изменений исполнимого кода с последующим влиянием на ход игры (что, несомненно, доставило множество приятных минут как взломщикам, так и читателям официального форума
Поскольку существующий механизм управления компьютерными игроками оставлял желать лучшего, были предприняты попытки существенно улучшить анализ, планирование и принятие решений компьютерного оппонента (впрочем, эти наработки не вошли в официальную версию).
С этой целью был создан симулятор игрового процесса, позволяющий автоматически отыгрывать бой, записывать принятые решения и оценивать и мутировать ключевые правила принятия решения на основе проигранных партий.
Для стратегической составляющей игры был спрототипирован алгоритм для ухода от rule-based логики с иерархическим behavior-based планировщиком, который показал значительное улучшение в поведении игровых персонажей.
В какой то момент времени были опробованы методы улучшения восприятия картинки путем введения глобального освещения в спрайтовый движок. Для видимой сцены просчитывался аналог ambient occlusion в зависимости от объектов (и их размера) на каждой клетке карты и отрисовка ландшафта с плавными градиентами этого затенения. Визуально это значительно улучшило читаемость отдельных объектов на карте, воспринимаемую “глубину”. [Найти скриншот]
Игровой проект получился весьма увлекательным, как в плане разработки, так и в спонтанном возникновении коммьюнити. С нуля был разработан весь pipeline, пусть и для спрайтовой игры - с редактором и финтифлюшками. Было организованно активное сообщество, принимающие участие в планировании, разработке и тестировании игры. Хорошо отыгрался опыт программирования под ARM и мобильные платформы. Каждый разработчик получил свой Level Up в опыте и некоторое количество денежного вознаграждения.
В конечном счете, не без помощи сообщества, игра стала отходить от прародителя. Вместо преобладающей стретегической составляющей проект получил развитие как стратегия + квест. По запросу создателей карт, в редакторе появились условные ветвления квестов, что позволило хорошо видоизменить single player experience.
Попытки монетизации имели несколько провальных моментов (donationware), но, в конечном счете, устаканились на привычном shareware.
Так же был получен не менее увлекательный опыт отладки по фотографии, т.к. встречались и удивительно креативные девайсы в семействе Pocket PC.
В целом опыт положительный и всем понравилось)