Pull to refresh

Разработка флеш игры «King of the rocks»

Reading time 9 min
Views 5.2K
Прочитав несколько статей о том как наши соотечественники делают флеш игры, да ещё и неплохо зарабатывают на этом я решил во чтобы-то ни стало сделать свою игру. И непременно заработать с её продажи как минимум 1000$. Успех в этом деле значил для меня очень многое. Я всю жизнь хотел делать игры и вот сейчас я был готов и уверен в успехе на все 100%. Это история разработки моей первой флеш игры King of the Rocks




Идея для игры.


Тут все довольно просто. Подбирал такую идею, которую мог бы реализовать самостоятельно без посторонней помощи, чтобы не пришлось спотыкаться на каждом шагу и разработка не превращалось в каторгу и долгострой. До этого я уже не раз начинал делать игры и каждый раз не доводил дело до конца. Поэтому проанализировав предыдущий опыт я поменял стратегию и решил, что нужно во чтобы то ни стало создать законченный продукт. То есть игру решил делать не ради процесса, как это часто бывает, когда вовлекаясь в процесс вылизываешь графику и код, а ради результата, который можно будет подать именно как законченный продукт, а не как поделку-недоделку. Поэтому ничего сложного придумывать не стал и решил просто сделать аналог какой-нить флеш игры. Одна из нравившихся мне тогда игр называлась Elite Forces: Clone Wars, которую делал многим известный mrBadim. Посмотрев на механику я понял, что реализовать такой геймплей мне вполне под силу. К тому же подобных игр крайне мало и ещё одна лишней точно не будет.

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

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

Соперничать за владение замками и доминирование на территории будут три стороны, отличающиеся главным образом цветами. Изначально я хотел, чтобы это были летающие парусники, но тогда я ещё не знал как зеркально развернуть объект в обратную сторону (scaleX) и поэтому решил использовать воздушные шары, их разворачивать совсем не обязательно.



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

  1. Самодисциплина. Нельзя слишком долго засиживаться над оттачиванием деталей, увлекаясь этим процессом можно совсем забыть о времени. На отрисовку каждого объекта отведено свое время и нельзя на маленький простой объект тратить времени больше чем на более сложный.
  2. Если я продам игру, то важно чтобы затраченное на разработку время окупилось. Разрабатывать игру месяц и заработать с её продажи 500$ интерес не большой.

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

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

Все появляющиеся задачи я записывал также по порядку нумерованным списком на отдельных листах и каждый такой лист представлял собой суб-план. Крупные задачи также разделялись на подзадачи которые записывались по порядку на отдельном листе. По выполнению задача вычеркивалась из списка. Позднее я заметил что формирование таких списков также играет немаловажную роль. Задачи записанные на бумаге, а не в голове не забываются. Кроме того вычеркивание или пометка задачи как завершенная имеет и психологическое значение. Глядя на списки решенных задач виден прогресс. Каждый вечер я брал в руки листы с вычеркнутыми задачами, просматривал их и порой поражался как много Я смог сделать за такой короткий промежуток времени. Это классное ощущение, Я очень гордился собой.

Шары.




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



такие вот, простенькие шары

Острова и замки


Острова делались параллельно с замками. Замки нужно было нарисовать так чтобы визуально они плотно сидели на скалах. Для этого ниже основания замков я добавил небольшие деревца, они скрывали огрехи. Соответственно размеры и форма скал подгонялись под основание замков. Все объекты рисовал в векторе, чтобы потом не было проблем с масштабированием.

Для разнообразия и расширения уже известного геймплея я придумал 3 типа замков:



  1. Колония — основной тип замков генерирующий основную массу войск. Чем выше уровень замка тем быстрее в нем генерируются войска. Может быть улучшен до 10 уровня.
  2. Академия - шары отправляемые из этого здания имеют гораздо большую скорость передвижения. Чем выше уровень этого здания, тем выше скорость шаров вылетающих оттуда. Может быть улучшен до 5 уровня.
  3. Мельница — каждую секунду приносит по одному $ за каждого воина внутри. Если внутри 20 шаров, значит мельница приносит по 20$ каждую секнду. На получение от мельниц деньги можно улучшать все свои замки. Как только появляется достаточная сумма для апгрейда какого-то замка над ним появляется стрелочка «UP». Мельница может быть улучшена до 5 уровня.




10 уровней колонии, и по 5 уровней на академию и мельницу



ну скалы очень даже ничего такие получились

Облака.


Облака так же как и скалы нужны для составления из них локаций. Создают атмосферу и придают картинке глубину. Я сделал побольше разновидностей.



сделал потемнее, чтобы не сливалось с фоном страницы

Интерфейс и его элементы.





эскиз заставочки

С интерфейсом мне помог мой друг и продвинутый дизайнер Александр. Я попросил его как-то оформить меню и кнопки, подобрать шрифт, сделать какую-нить рамочку. Остальные элементы интерфейса делал сам. Ничего заурядного в интерфейсе нет как видите.





от эскиза к реализации

Инструкции.





так выглядели эскизы

Можно наверное было на них и не заморачиваться, но я все же решил сделать все как задумал. Времени они у меня отняли совсем не много, все таки стиль уже был выработан. Больше времени потратил на правильный перевод содержимого инструкций. С переводом помогли также друзья. В итоге получились вот такие картиночки. Полноразмерные варианты можете найти в игре кликнув «How to play» в главном меню.



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

Программирование


Как я уже говорил геймплей не хитрый и никаких сложных вычислений тут нет. Опишу только то как устроены уровни и работа компьютера.

Каждый уровень это один кадр в таймлайне. В каждом кадре на нижнем слое размещается фон, горы и облака так, чтобы сформировалась цельная картинка. Горы и облака это просто графические объекты типа graphics. А вот замки это уже MovieClipы, представители класса Castle. Замки размещаются в кадре поверх сформированного заднего фона поверх скал и каждому замку задается instance name. В этом же кадре скриптом прописывается добавление каждого замка по имени instance в массив Castles. В игре задан глобальный массив Castles который очищается перед запуском каждого уровня и заполняется ссылками на замки размещенные в текущем кадре. После этого запускается обработка уровня. Таким образом вся необходимая информация об уровне хранится прямо в кадре.

Мозг компьютера был устроен довольно просто. В игре 2 противника: желтый и красный. В начале каждого уровня устанавливается периодичность вычисления и принятия решений отдельно для желтого и отдельно для красного компьютера, к примеру раз в секунду. Каждый раз, когда подходит время компьютер вычисляет максимально выгодную для себя цель. Эта цель определяется в зависимости от расстояния до вражеского замка, количества юнитов в ней, уровня замка и т.п. Все эти значения выражаются коэффициентами и компьютер просто перемножает их и записывает получившиеся чиста в массив. Число элементов массива равно количеству замков. Каждый элемент массива представляет собой обычное число, показывающее коэффициент эффективности нападения на замок. Чем ниже число, тем выгоднее цель для нападения. Ищем самое маленькое значение в массиве и индекс его элемента будет соответствовать индексу самого слабого или выгодного для нападения замка. После этого просто отправляем туда шары. Вот и вся работа компьютера.

Музыка и звуки.


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

Бета-тест.


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

Регистрация на FlashGameLicense и поиск спонсора.


Продажа игры спонсору — вот ради чего в конечном итоге был поставлен этот эксперимент. Было жутко интересно сколько же предложат за сие произведение и предложат ли вообще что-нибудь. Признаюсь я нисколько не сомневался, что за игру дадут больше 2000$, хотя мои друзья следившие со мной за движухой на аукционе поначалу считали что 1000$ это потолок. Я попросил mrBadim сделать первую ставку, чтобы игра сдвинулась с мета и другие спонсоры начали перебивать его ставку. Таким образом торги начались с 300$. Ниже лог поступления предложений:

>2010-03-26 09:52:14 jaludo_s    $3000.00 primary FGL [reentering bid to correct log in our system] Accepted
2010-03-05 18:14:41 jaludo_s    $3000.00 primary Intro
2010-03-04 09:31:38 Gimme5Games    $2000.00 primary Require: Sponsor logo, links, hi-score API 
2010-03-04 07:56:48 SpilGames_Martine    $1900.00 primary Branding + API integration
2010-03-03 10:42:11 Gimme5Games    $1800.00 primary Require: Sponsor logo, links, hi-score API 
2010-03-03 08:50:33 SpilGames_Martine    $1750.00 primary Branding + API integration 
2010-03-01 17:08:51 lorenz    $1000.00 other Non exclusive, integration api & highscores (+ translati... 
2010-03-01 13:09:53 Gimme5Games   $1600.00 primary Require: Sponsor logo, links, hi-score API 
2010-02-28 07:55:36 jaludo_s    $1500.00 primary Intro and branding
2010-02-26 11:25:14 Gimme5Games    $1100.00 primary Require: Sponsor logo, links, hi-score API 
2010-02-25 06:05:57 jaludo_s    $1000.00 primary Intro and branding
2010-02-22 03:47:43 elite_games    $800.00 primary preloader and main menu logos, more games link. cpmstar
2010-02-19 12:49:22 armorgames    $600.00 other Cpmstar ads allowed on the viral version
2010-02-19 08:12:04 elite_games     $300.00 primary preloader and main menu logos, more games link. cpmstar

Предложение Jaludo мне сначала не нравилось. Я хотел размещать cpm star рекламу в игре, а его это не устраивало. Долго мы с ним переговаривались, но он так и не соглашался. В итоге я принял ставку Gimme5Games. Я решил, что 1000$ вполне реально заработать и на рекламе. Другим разработчикам mochi и cpmstar реклама приносит довольно большие суммы, значит и мне принесет не мало. В любом случае надо было попробовать и узнать, что и как. Но Gimme5Games оказался той ещё динамой. У них были какие-то проблемы с сервером и он не мог дать мне необходимые ассеты и скрипты, и просил немножко подождать. 2 или больше недели он кормил меня обещаниями, мол через пару дней все даст и как только я вставлю скрипты переведет мне деньги. Но мне эти обещания совсем не нравились и я поставил ему ультиматум, либо плати вперед аванс 50% от ставки, либо я обращусь в FGL и скажу чтобы эту ставку отменили и я приму ставку Jaludo. Между тем я написал Jaludo что если он всеже разрешит мне cpmstar рекламу в игре, то я приму его ставку. Jaludo согласился и теперь я без тени сомнения обратился к администрации FGL с просьбой изменить уже принятую ставку. FGL сказали, что интересы разработчика для них важнее интересов спонсора и быстренько поменяли принятую ставку на предложение Jaludo. С Jaludo проблем никаких не было, в течении недели он перевел мне 3000$ международным переводом в банк.

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

С результатом знакомимся тут
Tags:
Hubs:
+136
Comments 74
Comments Comments 74

Articles