Окончание первой части истории, раскрывающей кратко упомянутый эпизод в финской книге "Finnish Video Games: History and Catalog".
В этой части я описываю организационно-технические вопросы и делаю некоторые выводы об организации проекта и причинах по которым он был успешен.
Фаза 0
Итак, закончив короткий шведский проект и отдохнув какое-то время, я устроился работать в компанию производящую контент под торговой маркой «INFON» (да, это тот самый — «ИНФОН тебе в телефон»). У «INFON» тоже были планы по производству мобильных игр в 2001м, но этот рынок был еще достаточно туманен и отсутствовала нужная количественная база устройств, в конторе видел только телефон Nokia 9110 пригодный к разработке игр, но поигравшись с ним решили отложить это дело (я слышал, что потом этот «кирпичик» подарили какому-то губернатору). Меня посадили заниматься аплетами для онлайн-сервисов компании, публикуемых под маркой “Логотон”, позволяющие пользователям подготавливать графический и звуковой контент, с последующей отправкой себе на телефоны через SMS. В целом за таким занятием я провел почти год.
Фаза 1
Где-то в марте 2002 года и началась та история про которую в своем интервью кратко рассказал Микко Хонкакорпи. Насколько помню, изначально на меня вышел Артем Голубчин, управленец из финско-российской рекрутинговой компании MPS-Russia (работавшей на финский рынок) и предложил пройти собеседование на предмет работы. Они решили развивать бизнес и перейти в категорию оутсорсинговой разработки, открыв так называемые “competence centers” (так они называли свою бизнес-модель). Основным достоинством “центров” была простота манипулирования кадрами со стороны компании-работодателя, а именно — легкость закрытия и увольнения, так как в Финляндии с этим очень большие сложности и неправильное увольнение может вызвать разорение компании.
Одной из компаний, которые хотели разместить свой «центр компетенций», была финская компания Akumiitti Oy. На тот момент достаточно известный поставщик решений для организации мобильных сервисов. Первое собеседование было без присутствия представителя финской компании. Если не ошибаюсь, в первый раз меня собеседовали Артем Голубчин и два финна. Один из финнов был похожий на викинга Тимо Мултамаки (Timo Multamaki) (сейчас известный финский дизайнер настольных игр) и еще какой-то финн, чье имя я уже не помню. Запомнилось только, что спрашивали какая игра мне нравится, на что я ответил, что «Operation Flashpoint». Потом было собеседование с психологами, и только раз на третий было собеседование с Микко Хонкакорпи (Mikko Honkakorpi). Параллельно финны вышли на контакт с Сергеем Кулигиным и нас пригласили на обсуждение проекта.
Выяснилось, что одна из крупных телекоммуникационных компаний планирует начать продажи нового бюджетного телефона Siemens M50 в одной из стран восточной Европы и так как телефон имел на борту встроенную поддержку J2ME, то заказчик хотел получить от Akumiitti вместе с мобильными сервисами и пакет из 20 игр. Основная сложность была, что дедлайн был назначен на 1-е июня, а на дворе был уже конец марта и на всё про всё оставалось меньше двух месяцев. Сергей Кулигин, исходя из своего богатого игрового опыта, отклонил предложение по сотрудничеству, сославшись, что сделать столько игр за такой срок — авантюра, но я был менее опытен и продолжил переговоры.
Мне было предложено разработать сценарии 20 мобильных игр и показать их на следующей встрече, которая должна была пройти через несколько дней. По вечерам в течение этих дней я «перелопатил» кучу старых игр со своих архивов от БК-0010, сделав компиляцию подходящих сценариев. Игры включали в себя аркадные, азартные и логические. Встретившись через несколько дней с Микко и Тимо, я представил им сценарии. Микко сказал, что сценарии им подходят и при мне они с Тимо пожали друг другу руки, ознаменовав заключение сделки. Ну а я подписался на создание команды и выпуск 20 мобильных игр по своим сценариям с «дедлайном» 1 июня 2002 года.
Фаза 2
На фазе формирования команды проектом удалось заинтересовать еще трех человек:
- Александра Васильева, опытного Java разработчика с навыками решения нерешаемых задач, с ним я работал в немецкой компании Concept Software GmbH.
- Евгения Михайлова, недавно уволившегося с военной службы. Ему отводилась роль QA инженера, так же у него был опыт разработки для бытовых компьютерных платформ.
- Сергея Олейника, одного из лучших российских художников в области пиксель-арта, который был привлечен на part-time в качестве дизайнера-оутсорсера, поскольку имел основную занятость в виде работы в компании «INFON» (несколько лет спустя Сергей дойдет до директорских топ-должностей в INFON).
Из всех членов команды, непосредственный опыт работы с мобильными устройствами имел только я и Сергей Олейник. Компания выделила нам комнатку в их офисном помещении на Большой Морской улице, рядом с Домом Композиторов. Было завезено необходимое оборудование в виде компьютеров и офисной мебели. Всё это было не новое и носило явные признаки «бэушности». Компьютеры «брендовые» и если не ошибаюсь производства COMPAQ, с предустановленной новой по тем временам Windows XP, с которой мало кто из нас на то время сталкивался (мы предпочитали Windows 98). Вся эта «брендовость» и специфичность «железа», не давала нам возможности переставить операционку, что давало дополнительные риски в напряженном проекте, поделать с этим мы ничего не могли.
Фаза 3
Следующей фазой было проектирование и планирование работ. Исходя из "дедлайна", я рассчитал, что среднее время на одну игру выходило примерно в 2.5 дня (понятно, что о выходных и праздниках, при таком напряженном графике, говорить не приходилось). Разрабатывать игры при таком по стандартной общепринятой методике — "на, тебе, программист, задание и сделай мне хорошо" было нереально и так как я помнил заветы Адама Смита про увеличение производительности при помощи своего рода "конвейерности", то ориентировался на "конвейер" с минимальным переключением задач. Был составлен четкий сетевой график с расчетом времени и порядка работ позволяющий максимально распараллелить работы.
Роли распределились в таком порядке:
- Александр Васильев был занят на разработке платформенно-зависимых модулей для отображения игрового пространства, так же он сделал несколько игровых моделей.
- Евгений Михайлов был занят на тестировании готовой продукции. Очень помогли его навыки в решении головоломок при тестировании пазлов. (В реализации следующего игрового пакета, он был привлечен и к написанию игровых моделей)
- Сергей Олейник был занят только на изготовлении графического контента.
- я был задействован на общении с заказчиком, разработке игровых моделей и постпродакшене с подготовкой релизов. Так же на мне была роль арт-директора и отрисовка некоторых игровых элементов (спасибо БК-0010 и ZX-Spectrum которые дали мне эти навыки).
Фаза 4
У нас не было реального физического устройства на старте проекта (его финны подвезли где-то через две три недели насколько помню) и мы пользовались эмуляторами от компании Siemens (эмуляторами для SL-45 и M50). В качестве системы итоговой сборки мы использовали Sun Java Wireless Toolkit. Никаких обфускаторов на тот момент не было, систему контроля версий мы тоже не имели (работали по системе общего файл-сервера), автоматизация была минимальна.
Так как целевое устройство имело очень жесткие ограничения по производительности и памяти, то было принято решение минимизировать нагрузку на "сборщик мусора" через создание игровых объектов при запуске игры и повторного использования их в процессе работы приложения, т.е. на старте мы сразу создавали всё нужное и оно жило до конца работы приложения. Хранение графики осуществлялось в виде PNG файлов и за нехваткой времени мы сделали минимальную автоматизацию по их упаковке (за счет удаления избыточной и дублирующейся информации) и оформили это отдельной утилитой склеивающей графические ресурсы вместе. Текстовые ресурсы так же паковали и хранили отдельно, за это отвечала специальная утилита. Звуковое оформление решили исключить в связи с бедностью возможностей устройства, нехваткой времени и экономией памяти. Каждая игра должна была быть представлена JAR архивом размером в 30-40 килобайт.
Поскольку некоторые игры требовали вычислений с плавающей точкой, но CLDC 1.0 (которая была на целевом устройстве) не поддерживала ни float ни double, то мы, как на старых компьютерах, выкрутились переведя все такие вычисления на «фиксированную точку» (8 бит в int отводилось на дробную часть), тригонометрические функции были реализованы через таблицы и была реализована небольшая библиотека для такого типа данных. Для того что бы не путаться в типах данных, так как всё было int, мы сделали специальную нотацию, где в имени переменной префиксом шли дополнительные данные, например i8_width обозначал значение с фиксированной точкой 8 бит (мне потом было долго не отделаться от использования такой нотации).
С использованием моих предыдущих наработок, был создан игровой фреймворк. Фреймворк состоял из нескольких интерфейсов и вспомогательных классов и описывал стандартную абстрактную модель мобильной игры, которая покрывала бы все жанры из запланированного пакета игр с возможностью загрузки-сохранения игрового процесса.
Каждая игра разрабатывалась по паттерну Model-View-Controller, это позволяло изолировать разрабатываемые модули и не «зависать» в процессе разработки на каком либо из этапов подготавливая модули пакетами.
- StrategicBlock описывал Model и содержал все относящееся к реализации игровой модели и взаимодействию компонентов содержалось в этом классе.
- PlayerBlock отвечал за Controller, это был универсальный интерфейс возвращающий запись хода игрока или AI, это позволяло делать и автоматические демо-игры показываемы пользователю.
- GameStateRecord был наиболее важным и описывал внутреннее состояние игрового мира. Этот объект передавался и в платформенно-зависимую часть View где на базе его состояния отрисовывалось игровое поле.
Фаза 5
Когда были завершены подготовительные фазы, то начали производственные работы. Первой выпущенной игрой, если не ошибаюсь, была игра «Carting» (автогонки), потом её игровая модель была с небольшими изменениями переиспользована для игры «Downhill race» (лыжный спуск). В процессе разработки, все производимые игры имели свои кодовые названия, а готовый продукт уже именовался именем присланным Микко. Некоторые названия игр были достаточно странны (например игра про каратэ называлась «Chop Chop»), но если вспомнить, что шведам пришлось в какой-то момент избавляться от названия Battleships, то в этом было здравое зерно.
Работы шли достаточно гладко и серьезных организационно-технических проблем не припомню. Как обычно, реальное устройство показало, что эмуляция не всегда отражает реальную картину вещей, но не было каких то критичных моментов требующих тотальной переделки. С "малознакомой" Windows XP был «забавный» случай, когда приехав с утра на работу мы совершенно неожиданно для себя увидели, что все компьютеры поменяли пароль и нам не войти в систему. При этом компьютеры были сконфигурированы так, что у нас не было возможности установить новые пароли, судя по всему, забыли сбросить какие-то настройки безопасности. На возню с этим делом было потрачено примерно половина рабочего дня и кончилось всё тотальным взломом систем с изменением системных паролей.
Слава богу, никто за период работ не заболел и не случились какие-то форс-мажорные обстоятельства, так как на них у нас не было никакого запаса времени. Микко лично посещал нас нечасто, в основном с ним шла переписка по емайл. Бывало, что он мог приехать и я узнавал об этом только постфактум. Где-то через месяц-полтора после начала работ, он сфотографировал нас троих на рабочем месте для внутреннего информационного листка Akumiitti.
Не обошлось и без изменений рабочих планов повлиявших на график. Один из игровых сценариев был на тему 11 сентября и игроку предлагалось защищать башни-близнецы от летящих на них самолетов-камикадзе. Поначалу этот сценарий был одобрен финнами и Сергей Олейник нарисовал отличную заставку (другие он и не умел рисовать) вместив туда даже миниатюрный портрет Усамы бенЛадена, но где-то во второй половине производственных работ, я получил сообщение от Микко, что от этой игры придется отказаться, так как очень «мутная тема» и никому не хочется разгребать вероятные проблемы с духовным миром террористов и им сочувствующих, которые могут неправильно оценить игру. Так что этот сценарий забраковали и игра была спешно заменена на другую, что потребовало дополнительные пару дней.
В конечном итоге все 20 игр были сделаны в срок + 2 дня вызванные изменениями со стороны заказчика. Пакет был полностью оттестирован и отгружен сначала Akumiitti, а потом ими их заказчику (крупной мобильной компании). Пакет состоял из следующих игр:
- AMAZING MAZE (паззл, лабиринт) вдохновила известная игра Soko-Ban
- BALLOON PARK (аркада) вдохновила игра D-Day
- BLACK JACK (геймблинг) просто игра в 21
- CARTING (аркада) вдохновил советский игровой автомат
- CHOP CHOP (файтинг) вдохновила игра KARATE-DO
- COSMIC STORM (аркада) вдохновила игра АСТЕРОИДЫ
- DANGER ZONE (аркада) вдохновила игра LONG RAID
- DOWNHILL RACE (аркада)
- LEAP OF FAITH (аркада) вдохновился игрой когда то виденной на PC
- OFFROAD (аркада) вдохновила игра РАЛЛИ
- PACK RACE (аркада) отдаленно напоминает Pac Man
- PING-PONG (спорт) вдохновила игра ТЕННИС
- PITMAN (аркада) отдаленно напоминает игру Boulder dash
- PUZZLE (паззл) сделана на базе головоломки 15
- RACKET BALL (аркада) вдохновила игра Арканоид
- SEA BATTLE (аркада) сценарий старого доброго морского боя
- SHIP DUEL (аркада) вдохновила игра Worms
- STAR GUN (аркада) вдохновила виденная игра на бейсике Star
- TREASURE HUNT (аркада, лабиринт) вдохновила игра КЛАД
- VIPER (аркада, лабиринт) переделка игры Змейка
На фоне такого достижения, руководством TekLabs (так стало называться бизнес-подразделение MPS-Russia) и Akumiitti было решено отметить это дело через однодневное посещение руководством и командой пригородного дома-отдыха «Скандинавия» с торжественным обедом и сауной. Так-же через некоторое время нас посетил «топ» из Akumiitti Юрки Матикайнен (Jurki Matikainen) и обсуждались пути развития мобильного направления. На митинге я описал какие ресурсы требуются для организации производства мобильных игр в промышленных масштабах, но особого понимания не встретил (это не было приоритетным направлением для финнов).
Микко через какое-то время уволился и нашим куратором со стороны головной компании стал Ээро Пойри (Eero Pöyry) (в настоящее время директор по развитию в Rovio). Он держал нас в курсе дел по отгрузкам изданного первого игрового пакета. От него пришла информация, что на 1000 первых проданных их заказчиком мобильных телефонов Siemens M50 было отгружено более 1200 мобильных приложений, что показывало реальную заинтересованность пользователей в J2ME контенте. Я получил по емайл диаграмму отгрузок по играм и в ней сбылось эвристическое правило высказанное мне еще Сергеем Кулигиным — «если хочешь, что бы игра гарантированно продавалась — делай гонки», игра «Carting» была абсолютным лидером по отгрузкам и взяла больше четверти диаграммы.
На этом думаю можно остановиться, так как на мой взгляд достаточно подробны раскрыты детали и результаты проекта.
Небольшие выводы
На фоне всего вышеописанного, хотелось бы сформулировать ряд причин, которые по моему мнению привели к успеху проекта:
- Удалось быстро найти и заинтересовать толковые кадры, способные сделать работу.
- Команда создавалась с нуля, если бы была попытка подключить уже существующую команду и разбавить ее новыми членами, то притирки и разборки с иерархией взяли бы так много времени, что практически гарантированно поставило бы проект на край гибели.
- Был найден активный "лид" (хоть практически и без знания английского), который взял на себя ответственность и был недостаточно опытен, что бы понимать, что «это авантюра».
- Проект был продуман на старте, было осуществлено планирование и распределение ролей. (прим. авт. — На самом деле это очень редкий шаг в проектах, несмотря на то, что все его декларируют, тем более в проектах где "сроки горят". Обычный цикл разработки идет по системе — "поздно думать, надо делать!")
- Представители Akumiitti и руководство TekLabs не пытались вмешиваться в производственные процессы, соблюдая границы и осуществляя взаимодействие только в рамках своей бизнес-роли, предоставив руководству команды все требуемые "рычаги".
- В целом в процессе не использовалось что-то радикально незнакомое участникам.
Из неправильных шагов которые хотелось бы отметить, были:
- Производственное оборудование с незнакомым базовым программным обеспечением, при жестких требованиях по времени, это был ненужный риск.
- Недостаточный анализ игровых сценариев со стороны заказчика, что привело к замене одной из игр.
- Слишком напряженный график работ, приводящий к выгоранию персонала.
Фаза дополнительная, российская
На фоне шагов в области мобильных игр со стороны западных партнеров, нельзя не рассказать об известных мне шагах российских игроков в этой области. Как указано выше, до проекта я работал в компании INFON и она тоже не хотела оставаться в стороне от разработки J2ME игр. INFON вообще по бизнесу был очень схож с Akumiitti, за небольшой разницей — то, на что финны закладывали 10 лет, в INFON делали за полгода-год.
В июле 2002го года, владелец INFON обратился с просьбой сделать мобильную игру на тему «утиной охоты», так как он собирался на охоту с одним из топ-менеджеров NOKIA. Требовалось сделать игру для нового (на тот момент) Nokia 3410. Задача была успешно решена, мы разработали сценарий и сделали достаточно неплохую реализацию. Мне запомнилось как мы обсуждали с Сергеем Олейником отрисовку уток и он стоял за реализм, а я за «диснеевский подход», вобщем я победил в споре. К сожалению «директорская охота» сорвалась и заказчик презентовал игру на одной из западных тематических конференций. Вернулся назад он с горящими глазами и словами — «Когда я им это показал, то на меня смотреть стали совсем по другому! Только ради этого уже стоило делать!».
INFON заказал еще одну игру на тему сноуборда для отгрузок на мероприятии в Москве (как понимаю это было Nokia Totally Board, прошедшее в сентябре 2002 года). Аркада Snowboard была успешно спроектирована и реализована для телефонов NOKIA 3410, музыку к ней я заказал у Сергея Боярского. По заказу INFON были сделаны еще игры Penalty и Drive OFF. Позднее все эти игры были адаптированы под более широкую линейку телефонов.
Однажды, открыв один из популярных тогда российских журналов по мобильному контенту (к сожалению уже запамятовал название), я увидел скриншоты из Fowling и Snowboard с пометкой, что «игры компании INFON открыли эру мобильных игр в России».
P.S.
Как ни странно, но отголосок тех мобильных проектов, до сих пор звучит, хоть и не на мобильных платформах.
Где-то ближе к концу лета 2002 года, для автоматизации сборки под разные мобильные платформы, была сделана версия препроцессора для языка Java. Думаю если это и не был самый первый Java-препроцессор (препроцессор Antenna появился в том же году), то по крайней мере был самый мощный, так как двухпроходовый и позволял даже держать данные в XML файлах. Этот проект жив до сих пор как OSS и используется например при сборке JDBC драйвера командой Postgres. Я был даже немного удивлен, обнаружив этот препроцессор в разных Linux репозиториях обозначенный как пакет libcomment-preprocessor-java.
Автор: Igor Maznitsa