Постмортем игры “The Pirates Time”

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


Мы – творческая артель New Art Games – продолжаем делать флеш-игры. Очередным выпущенным проектом стала игра про пушку и разрушаемый рельеф “The Pirates Time”. Под катом – история разработки и продажи игры.

image

Ну и сразу чтоб не томить ожиданием – поиграть можно тут:
www.kongregate.com/games/NewArtGames/the-pirates-time
www.newgrounds.com/portal/view/564823

Начало


Всё началось ещё в августе 2010 года, когда я мучил интернеты на предмет физических движков для Flash. Я тогда начинал учить box2d, но клепать очередной клон Peggle не хотелось. И вот я наткнулся на пару уроков известного итальянского программиста Эмануэля Феронато, посвящённых разрушаемым рельефам. Эта механика и была взята за основу.

И тут же перед нами встала серьёзная проблема – надо было либо делать эти самые рельефы и обходится простой самописной физикой, либо отказываться от разрушаемости и с помощью стороннего физического движка делать крутую физику. Насколько я знаю, сейчас с помощью движка nape можно совместить две эти ипостаси, но nape – это ещё не изученный вдоль и поперёк box2d, так что могут возникнуть проблемы. Поскольку, как я уже сказал, делать клон не хотелось, был выбран первый вариант. Конечно, это не уберегло игру от внешнего сходства с десятками canon-игр, зато возможность разломать весь уровень «как в «Червячках»» придала некоторую свежесть геймплею.

…не всё так просто

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

Визуальный стиль


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

Он такой большой…

Изначально вся графика в игре была больше. Но в ходе игровых тестов мы заметили, что скроллинг по двум измерениям совершенно не даёт нормально целиться, и потому вся игровая часть была подвергнута суровому scale = 0.7;
Хозяйке на заметку: галочка allow smoothing, выставленная в библиотеке Flash IDE для растровой графики, в большинстве случаев предотвращает её искажение при поворотах и изменении масштаба. Как показывает практика, многие этого не знают.

Картинка большая, потому ссылкой:
lh3.googleusercontent.com/-Dq4eMhiDUm8/TYCVlV1xqcI/AAAAAAAAACY/NYuRP8Rsokc/s1600/scaling.png

Проблемы кода


Эта игра стала моим первым законченным проектом на actionscript 3. За время работы я успел возненавидеть и полюбить ООП. И, самое главное, приучиться комментировать код так, чтоб после длительного перерыва можно было бы легко вернуться к работе над проектом. В общем, я считаю этот проект левел-апом для себя. А теперь немножко о конкретных проблемах…

Самой нетривиальной с точки зрения программирования задачей для меня стала отрисовка траектории полёта снаряда. Понятно, что это должна быть кривая Безье, понятно, что мы можем получить две крайние точки… А вот попытки высчитать вспомогательную точку ни к чему ни приводили. Знакомые с программированием бакалавры математики тоже не особо помогли. А спас, как и всегда, гугл и сайт какого-то нашего флешера (к сожалению, имя и линк потерялись, но я выражаю искреннюю благодарность этому человеку). Кривая в итоге строится по точкам, сохраняемым в каждый момент полёта снаряда:

public function draw_curve()
                {
                        curve.graphics.lineStyle(2, 0xFFFFFF);
                        curve.graphics.moveTo(kontur[0][0], kontur[0][1]);
                for (i = 1; i < kontur.length - 2; i ++)
                {
                        var xc:Number = (kontur[i][0] + kontur[i + 1][0]) / 2;
                        var yc:Number = (kontur[i][1] + kontur[i + 1][1]) / 2;
                        curve.graphics.curveTo(kontur[i][0], kontur[i][1], xc, yc);
                }
                        curve.graphics.curveTo(kontur[i][0], kontur[i][1], kontur[i + 1][0], kontur[i + 1][1]);                 
                }


Ещё одной проблемой стало быстродействие. Мешанина классов со ссылками друг на друга приводила к тому, что после нескольких уровней сборщик мусора переставал справляться со своей работой (вернее, просто не делал её – ссылки на объекты-то остались, значит удалять нельзя). Вдумчивое переписывание кода и последовательное удаление всех слушателей событий и всего, что может помешать сборщику мусора, очень помогло. Мораль: продумывайте архитектуру! Ну а ещё используйте растровую графику – она всё-таки быстрее вектора.

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

Как всегда — эксклюзивный саунд-трек. На этот раз мы не стали экспериментировать и просто заказали нашему композитору «что-нибудь пиратское». Были проблемы с подбором звуков, не выбивающихся из атмосферы, но и их мы всё же решили.

Доделки


Весь функционал игры был готов к Новому году. Однако январская сессия несколько помешала работе, и игра ушла на аукцион 10 февраля. За несколько дней до этого мы по совету Стефана поменяли управление на более казуальное и добавили недоачивки (озвученные надписи, появляющиеся вверху экрана при определённых событиях). Ачивки – это модно, но нашпиговывать такую, в общем-то, простую игру кучей наград мы не стали. По причине простоты и ненапряжённости игры также не стали вводить магазин. Хотя разные виды снарядов можно было бы попробовать…

Торги, дистрибуция, бабло…


Продажа началась с 1000$ за праймари и закончилась на 1750$ праймари + 500$ за каждый миллион геймплеев в течение трёх месяцев. Игра ушла голландцам из FunnyGames. По их просьбе была добавлена система подсчёта очков, их API и записан walkthrough. Спонсор также позволил нам самим добавить игру на Kongregate и Newgrounds (кстати, API Конга очень прост и удобен, всем советую не брезговать им). На другие порталы спонсор обещал проталкивать игру сам – посмотрим, что получится. Деньги, после долгих попыток найти удобный всем вариант, мы получили через Western Union. С Эриком весьма приятно работать, я даже удивился, когда нашёл о них пару негативных отзывов о задержках с платежами. Собственно, деньги он отправил даже раньше, чем получил инвойс.

Что дальше?


“The Pirates Time” – это только начало работы в данном направлении. Несмотря на то, что сейчас в разработке у нас находятся кардинально иные проекты, мы также вынашиваем планы сиквела и, возможно, набора уровней для оригинальной игры.
  • +13

Комментарии (39)

+2
Постмортем это со статистикой, а это разработка чисто.
Через месяц можно Постмортем.
Удачи вам в начинаниях, графика хорошая, управление не особо.
+1
Постмортем — это как раз взгляд на игру изнутри собственно, и процесс ее разработки, а все что связано со статистикой это уже отчет.

А управление, да, не очень удобное, скроллинг во время оттягивания вектора выстрела это — зло, также после такого скроллинга отпускание кнопки не срабатывает.
0
посты с цифрами по продаже у нас традиционно идут в коллективный блог «Итоги и статистика». я переправил этот пост туда.
+1
Если бы не читал текст, то не догадался бы, что на корабле пират в треуголке. Чем стреляет пушка так и не понял. Зря, наверное, пожали графику.
0
А что делать?( Иначе было совсем неиграбельно…
+1
Возможно стоило перерисовать элементы которые после ужимки смотрятся как груда пикселей.
0
Хотелось бы больше о процессе продажи. Сколько длилась, сколько, с какой периодичностью и какие были биды?
+1
14 февраля первая ставка в 1000 за праймари, 15 — 1500 за праймари, 16 — 1500 за праймари + 1500 за 5 миллионов перформанса, 23 — окончательная ставка, после которой всё заглохло.
0
А заапрувили когда? 14го?
0
Заапрувили ещё десятого. И первая ставка пришла без всяких рассылок спонсорам.
0
Кстати по траектории, она же в игре простая, т.е. обычная парабола, ее можно построить с помощью 2-х кривых Безье. Чем меньше кривых тем быстрее будет работать, да и при расчете до выстрела, можно будет левую половину показывать, чтобы облегчить прицеливание.
0
Что-то не работало с двумя кривыми. Вероятно, можно было и так, но моё кун-фу изрядно выдохлось, и я просто усиленно погуглил х)
+1
Управление, если честно, убивает все желание играть. Если будете делать продолжение то стоит пересмотреть этот момент. Мне кажется тут не надо выдумывать что-то новое, взять тех же птичек или рэгдоллкэнон. За цифры отдельное спасибо. +
+1
Мне камера тоже слишком «дерганой» и непредсказуемой показалась.
0
Ну, какой-то скроллинг определённо был нужен. Лучшего решения не нашли, но с сиквелом будем думать что-то ещё, конечно же.
+1
Графика сливается, как мне кажется. Приходится приглядываться, чтобы увидеть силу натяжки. И притормаживается не много.
Когда поиграл в игру — не удивился насчет такой низкой цены.
  • z3lf
  • z3lf
0
Мне одному кажется что продешевили?
имхо, можно было продать в 1,5-2 раза дороже! Хотя, может быть из-за немного неудобного управления.
Игра «заочно» понравилась еще после просмотра геймплейного видео на youtube.
0
Странно, что на хабре запостили.
0
Что именно?
0
Ну вот эту статью.
0
Просто после публикации на Хабре прошлого постмортема у меня появилась пара полезных знакомств, так что решил ещё снова туда тоже скинуть)
0
Прикольная игрушка, вормс напомнила сразу, приятная так-то, но с силой выстрела как-то не удачно сделано, натяжку не видно.
0
Насчет памяти, стоит обратить внимание на пятый аргумент метода addEventListener, если его устанавливать в true, сборщик мусора будет удалять объекты не смотря на слушатели событий. Более детально было в статье www.dtf.ru/articles/read.php?id=51967
0
Это не работает :). По крайней мере не всегда работает.
0
Лучше самому все контролировать.
По кривым Безье
0
Так я примерно так и делал в итоге, только с большим количеством точек.
0
С прицелом все плохо. Стрелка должна быть большой и градуированной. Линия полета снаряда вообще не нужна (я целюсь по полету снаряда). Взрыв Кабум не выглядит как таковой. Снаряды пролетают сквозь не толстые стенки в несколько пикселей. На втором или третьем уровне игра умерла с сообщением о нуле в апдейте рендерера.

Ну и самое главное — никогда не скейлите графику в меньшую сторону — замыливаются абсолютно все детали. Я думаю ВСЕ знакомы с галочкой Allow smoothing — но пользуются ей единицы, потому что понимают к чему это может действительно привести… Allow smoothing хорош для анимации изображений — они плавнее перемещаются визуально, без рывков. Но детали частично мылятся даже без скейла.

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

А в остальном классная игрушка. Сиквел со всеми изменениями + какими то новыми детальками думаю вполне порвёт интернеты. Пираты вообще отличная тема.
0
Не совсем соглашусь
— лучше smoothing и замыливание чем крутить битмапу без сглаживания. В основном не ставят smoothing во избежании напряга рендера.
— скейл графики в меньшую сторону возможен и даже очь неплохо выглядит когда у объектов нет мелких деталей (но в вашем случаи скейл не на руку, так как много мелких деталей, корабль в оригинале супер).
0
Как то странно ты не согласился, сказав совершенно другие вещи)) Крутить битмапу без сглаживания я не предлагал. Скейл графики в меньшую сторону всегда лажает — имелось в виду скейл всей графики проекта разом. Про мелкие детали естественно согласен.
0
Насчёт пирата, заряжающего пушку, зря вы — было бы интересно. Сейчас он действительно не у дел.

Я правильно понимаю, вы делали игру с августа и до сих пор?
  • Mo3g
  • Mo3g
+1
Это было бы круто первые 3-4 раза, а потом только раздражало бы.

Ну да, правда работали с большими перерывами, так как у нас есть большой и амбициозный ММОРПГ-проект)
0
Ну сделали бы пропуск по клику.
0
А, видимо я неточно выразился. Пират не сам должен был бегать — по задумке художника игрок каждый раз должен был сам заряжать пушку)
+2
У вас же там не 1000 картинок, можно было бы и в фотошопе соскейлить и пересейвить всё заново — проц бы не напрягало, легче графика была бы + выглядело лучше.
+1
Поддерживаю, да хоть и 1000, в ФШ же есть пакетная обработка, один раз Экшин записал и делов-то. Перед уменьшением исходную картинку лучше немного пошарпить.
0
Согласен. Шарп вообще тема. А уменьшение в шопе только улучшит детали. По крайней мере рисовать сразу под размер (если размер мал) — получается немножко не так круто. А вот уменьшить с удвоенного и слегка аншарпом — получается чёткая классная штука.
0
Каюсь, ибо грешен. Архитектура игры во многом была завязана на размеры картинок, так как я не думал, что могут возникнуть проблемы.
+1
fucking-great-advice.ru/advice/166/
+1
Это немного о другом: лучше что-то делать, чем просто много думать.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.