Постмортем XenoSquad

Делал, делал и доделал.
Под катом небольшой постмортем XenoSquad.

Поиграть можно тут, если кто еще не:
www.kongregate.com/games/ryzed/xenosquad
www.newgrounds.com/portal/view/582662

Ну, во первых, я это сделал!!!

Помню, еще в прошлом году, я писал в комментариях к посту Алекса ( flashgameblogs.ru/blog/200.html#comment3543 ), что хочу и буду делать пошаговую стратежку.

Потрачено много времени и какое-то просто нереальное количество усилий, но это живое, работает и я счастлив!

Статистика по коду:
AS3: 229 файлов, 739kB, 30892 loc.
Haxe: 18 файлов, 315kB, 10671 loc.

Кода, особенно на haxe, на самом деле меньше, потому что там по несколько копий процедур, развернутые циклы и прочие «low-level» оптимизации.




Если вдруг кто не в курсе, быстренько про технологии:
  • Софтварный рендер в стиле первого Quake. Все рисуется «попиксельно» в память, а потом перебрасывается на экран.
  • Статика с перспективно-корректными лайтмапами, сортированная через BSP.
  • Динамические модельки с z-буфером, Gouraud-освещением, glow-картами и какой-то жуткой самопальной лайт-сеткой, которой даже нет названия :)
  • Тени, частицы, прозрачные полигоны, subpixel, subtexel в наличии.
  • Все это работает довольно шустро.

Расскажу немного о том, что было плохо:
0. Будь проклят тот день, когда я задумал писать свой графический движок! :)

1. Не было никакого препродакшена. Игра придумывалась по ходу дела. Первые 3-4 месяца ушли исключительно на графический движок и только потом я начал задумываться о том, для чего он, собственно, мне нужен. Менять оружие у пацанов придумал в феврале, а скилл-поинты добавил в середине лета, если не ошибаюсь.

2. Много времени ушло на баловство с теком. Вода, туман, окклюдеры, какие-то оптимизации, сжатие данных. Весь этот рисёч, который на данный момент не используется. «Окупилось» только сжатие данных, и то, используется самый первый вариант, после которого я сделал еще 3 и выбросил.

3. Не совсем плохо, но такой, короче, pain in the ass.
Чтобы сделать уровень надо:
  • экпортировать геометрию скриптом из 3dsmax
  • запечь лайтмапы
  • задизерить лайтмапы в 256 цветов
  • просчитать лайт-грид
  • запаковать все это в свои форматы
  • проверить, что БСП не сглючило
На большом уровне на это может уйти 20-30 минут. Потом запускаешь, смотришь что где-то пересвечено, где-то недосвечено. Передвигаешь светильник в максе и все заново.
Это, кстати, основная причина, почему я делал уровни сам.
Тут задача не в том, чтобы сделать красиво, а в том, чтобы это хоть как-то заработало :)

4. GUI. На отрисовку ГУИ художника так и не нашёл, пришлось делать самому. Ушло довольно много времени на ковыряния, но оглядываясь назад, я об этом не жалею. Получилось «скромненько, но чистенько».
Спасибо фотошопу за предоставленные фильтры.

5. Модельки. Модельки я заказывал на 3drt.com, качеством и ценой доволен.
Единственное, что было плохо, это когда я задумал добавить оружие к пацанам. Моделеры оказались заняты и пришлось ждать 2 месяца, пока они освободятся и приделают к пацанам пару новых пушек.

Так, что еще.
Перед выкладыванием на FGL поменял тайлы. Раньше использовались тайлы из оригинального Q2, но в последний момент поменял на тайлы из «свободных» модов.

С тайлами сделал еще одну интересную штуку.
Изначально, использовались тайлы 64*64, и выглядело это, как сейчас понятно, довольно страшно. В первую очередь в связи с тем, что никакой интерполяции на текстурах нет. Просто берем ближайший пиксел и пихаем его на экран.

Добавлять билинейную интерполяцию очень дорого, поэтому пошел другим путем.
Растянул тайлы до 128*128 и немного разблурил. Поскольку на экране тайлы примерно в 2 раза меньше, получается такое псевдо-сглаживание.

Про всякое.

Вся логика основана на "очереди действий". То есть определены несколько классов, представляющих собой действия. «Повернуться», «идти в точку», «проиграть анимацию» и т.д. Все, что делает игрок и ИИ, так это добавляет действия в эту очередь.
То есть, когда игрок тыкает на кружочек на дверью, в очередь добавляются несколько действий: «подойти к двери», «повернуться к двери», «проиграть анимацию действия», «проиграть анимацию открывания двери».
Получилось очень удобно.

Поиск пути — волновой.

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

Кодить ГУИ и туториал сильно сложно, особенно когда делаешь это после всего. У меня, кстати, так до сих пор и нет нормальной системы ГУИ, которую можно было бы таскать из одного проекта в другой. Каждый раз переписываю и каждый раз оно мне не нравится.

Вода в «сеточку» не потому, что мне так захотелось, а потому, что это самый быстрый путь заполнить уровень чем-нибудь. Она рисуется примерно в 2 раза быстрее, чем обычный пол. Я там приглушил яркие пикселы, подводные полигоны рисуются отдельной палитрой. Вроде стало немного лучше.

Чтобы поддержать накал одскула хотел использовать трекерную музыку. Даже конвертнул плеер с явы на haxe. Получилось, в принципе, вполне нормально, но жрет 15% процентов производительности, а времени на оптимизацию не оставалось.
Поэтому в этой игре используются обычные mp3.
В следующей, надеюсь, будет .xm-музыка.

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

Аукцион.

Выложил на ФГЛ, две недели ждал pre-review.
Видео-рецензии понравились, сразу видно что читает, куда тыкает и где какие затыки.
По отзывам на форуме, на ФГЛ, по рецензиям сделал изменения.
Точно помню что авто-завершение хода и возможность подойти к двери/ящику одним кликом.
Что-то еще пробовал менять, но не получилось. Из-за тормозов или из-за того, что нарисовать не вышло.

Оценки поставили 8.0 и 9.0, вполне нормально.
Сразу запихали в рассылку и всякие списки.
Ну, в общем, как обычно.

Трейлер не делал, комп тормозит.

Сел ждать.
Сразу получил 3 ставки в 2000, 2500 и 3500.
Потом подтянулись конг, арморы и arcadebomb, сделали ставки в 6500, 6750, 7000 примари + реклама.
После этого все затихло на 2 недели.

В начале октября арморы поставили 9000 примари, а arcadebomb 12000 эксклюзив. Все без рекламы.
Конг ставку не возобновил. Уже после торгов я с ним поболтал и он сказал, что был не уверен, насколько игра хорошо пойдет.

Через неделю устал ждать, включил ласткол и тут появился Мартин из bigdino.
Поставил 12500 примари + реклама и выиграл торги.

Тут надо сказать, что ФГЛ не делает ничего! И следующие игры я постараюсь продавать без них.
Перед ластколом я написал Стиву, «типа давай там продвигай», получил стандартный ответ в стиле «Поспамь спонсоров, сделай трейлер и т.д.». Спасибо, капитан.
Все бы ничего, но он же, сука, даже игру не посмотрел!
То есть с таким же успехом я мог бы общаться с ботом.

Дистрибуция.

После продажи интегрировал АПИ, засайтлочил, заслал Мартину для теста.
Он выложил на сайт и игру буквально через 6 часов ломанули китайцы и кто-то там еще.
Первая версия была «плохо» брендирована и именно ее и уперли.
Ломаная версия начала распространяться по порталам, кто-то даже успел зарегать xenosquad.com :)
Пришлось срочно доделывать брендинг, менять все планы (сначала хотели подержать недельку только на bigdino) и рассылать письма по порталам с новой версией.

JayIsGames написали рецензию, правда трафик они гонят небольшой, так что это больше «статусная» вещь.

Выложил на Конг и НГ.
Получил 4.25 на конге и «дэйли 1» на НГ. Спасибо всем, кто поддержал!

На конге дали бейджи и зафичили, но по результатам недели оказался вторым.
Почему-то на конге игра пошла на удивление хорошо, все начали комментировать в стиле «Больше! Хардкорней! Даешь мультиплеер!», что не может не радовать.

На сегодняшний момент набрал больше миллиона геймплеев.

Продал два сайтлока, арморам за 1000 и АндКону за 700.
На Конге заработал 400, на CPMStar 600.

Суммарно получилось: 12500 (примари) + 1700 (сайтлоки) + 1000 (реклама) = 15200
Если честно, я ожидал большего от аукциона.
Мартин даже сам удивился, что он выиграл и никто не перебил его ставку.

Что дальше?

Дальше пока непонятно.
Молехил вышел, но использовать его особо никто не спешит.
Во-первых, 11 плеер пока еще не распространен и хороший инсталл-бэйс наберет только к весне, а может и дольше.
Во-вторых, молехил ввел ограничение на дату драйверов. Если дрова старше 2009 года — не видать вам ускорения, как своих ушей.
Плеер-то портальные игроки рано или поздно обновят, а вот драйвера вряд ли.

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

Вторая проблема это арт.
Арт, лично для меня, это всегда проблема. Его никогда нет и где его заказывать — непонятно.
Хочется сделать сиквел, конечно.
Игра получила «хорошую прессу :)» и можно смело делать продолжение или хотя-бы левелпак.
Но арта нет.
Так что продолжения может и не получиться.

Вроде все. Если что интересно — спрашивайте в комментариях.
  • +65

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

0
Аплодирую упорству и таланту! Все достойно уважения.
0
Игруха мега крутая. Правда динамики не хватает, но понимаю — такой жанр.
Доходы тоже мотивируют.
0
епереный театр. Респектище. Круто. Хотя не очень понимаю смысла делать такое на флеше, но слов нет, поздравляю!
+1
хороший посмортем, как и игруха принципе)

Вот в цене я очень удивился, времени затрачено просто уйма и так мало получилось, но я думаю ты отыграешся на левелпаке или продолжении игры
+2
Да, сейчас можно делать продолжение и тыкать спонсоров носом в рейтинги.
0
Респект!
100% согласен насчет продвижения от FGL, продавались в этот же период — помощи 0.
+1
Спасибо за отчет.
Что-то цена меня расстроила и насторожила :(
Я думал, будет в несколько раз выше.
0
Да ну, нормальная цена. Казуалки рулят и будут рулить еще больше. Вот за них цены и будут заламывать.
Сугубо ИМХО ;)
0
Жанр такой, рискованный.
Непонятно было как пойдет.
Сейчас уже понятно, что как минимум аудитория конга такие игры любит.
0
Дьявол. Для меня программирование 3д игр всегда было верхом непостижимого.
А игра клевая. Похожа на Уфо, фанатом которой я был.
Крутой перец!!!
0
А ограничение по драйверам для МолеХилла — это самое глупое, что они придумали. Оттянули развитие 3д флеш-игр на 2-3 года еще. Надеюсь были ооооочень веские причины.
+7
Ничего, что я тут еще поспамлю? :)

Делай из нее обязательно мультиплеерную игру и на одной ней поднимешься. Даже не надо больше игр делать будет :)

По словам Бадима, эта игра делает «всего» в 10-15 раз меньше денег, чем Танки-онлайн.

На базе твоей игры можно запросто сделать крутую мультиплеерную игру. Просто уверен.
0
Я, вообще, не любитель мультиплеера.
Но буду об этом думать, конечно.
0
Спасибо за содержательный и интересный пост. Игрушка классная! Цена конечно расстроила — однозначно мало за эту игру! На счёт «продвижения» от ФГЛ — в точку.
0
Молодец, что доделал :)
+8
Аукцион — ленивые и тупые свиньи! А камраду нужно присвоить звание героя российской разработки флеш игр! Ну или ярлычек с медалькой на блоге:)
+4
Ярлычок трехмерный!!!1
+9
А камраду нужно присвоить звание героя российской разработки флеш игр! Ну или ярлычек с медалькой на блоге:)
Сделано! :)
0
Главное, что не посмертно)))) Не многие выживают в неравной борьбе с софтверным 3д рендерингом во флеше))
+2
Ха-ха, спасибо, не ожидал :)
0
Ryzed — флагман! Мы идём за тобой! Ура!
По поводу дров для Молехила, сам обломался на них, и новее дров нет, хз чем они думали.
0
мне бы дал на проверку сайтлока за бесплатно. подсказал бы чего чтоб не за 6 часов ломанули ускоглазые а как минимум дольше.
0
Да там сайтлок «строковый» в прелоадере.
if(parseUrl(url)!='site.com')
{
   // block game
}
Просто не думал, что они сразу сграбят игру.
В следующий раз буду делать нормальную защиту, наверное.
+1
такое я вскрываю в среднем за 10 секунд и делаю либо привязку на другой ресурс либо вообще снимаю привязку ;)

мой тебе совет. Я тут уже писал давно как-то. мне просто лень писать, я люблю читать )))

Вот совет. Возьми в арт прямо в игре в раскраску робота к примеру включи hex цвета. к примеру в hex строка site.com это 736974652E636F6D, разбросай это по игре. Скажем так 73 69 74 65 2E 63 6F 6D в 8ми разных функциях. Сравнивай каждый символ имени сайта с тем что вшито. Имя сайта узнавай не через тупой stage.loaderInfo.url, а через external.callback и вызывай js функцию которая сама вернет в твою же флешку location адрес ))) парсь это дело

и тупорылые китайцы твою защиту будут ломать неделю как минимум. Я тут уже писал как работает хакер. Ломануть можно все. Вопрос во времени. Если ушло больше Х часов на ломание то уже не выгодно, переходишь ломать что-то иное )
0
а если X равен 1 ч?
+1
Каждый сам себе ставит цель. За 1 час описанную выше защиту не сломать — 100% проверенный факт. Тем более при дизассембленге (не путай с декомпилем) ты не видишь строковые вообще. А что первым ищут? слова .url и .loaderInfo и ByteArray

Сломать-то сломают. Но вопрос — когда. Сейчас или завтра. Если сейчас — ты потерял бабки. Если завтра — не так много, если бы «сейчас»
0
через external.callback и вызывай js функцию которая сама вернет в твою же флешку location адрес
Вот тут не понял.
js функция должна быть на сайте? Думаешь спонсор разрешит?
Или все внутри флэшки? Если да, то где об этом почитать?
А вообще, я с защитой особо не заморачиваюсь.
0
В этом всё и дело. Ты можешь создавать JS код прямо внутри Флешки, инициировать его и получать обратно ответ.

У меня довольно редки заказы на такие штуки и заказчики в основном это клиенты баннерных сетей, пытающиеся понять дурят их или нет :)

А вообще, я с защитой особо не заморачиваюсь. 
Имя озвученные суммы денег выше и не заморачиваться — это как-то не правильно :)

Если да, то где об этом почитать?

в интернете почитать. сходу линки не дам ибо искать надо самому. методом тыка изучал запуск функции из строки браузера. потом через eval создание функции и через ExternalInterface запуск функции и считывание ответа обратно ) там вообще много чего можно добраться до DOM html страницы. Если раздуплю (если не засну) я пример накатаю базовый сюда
+2
а может лучше вынеси отдельной темой
0
мне лень если честно. Зафукают и помидорами закидают. будут писать ересь в мой адрес. не впервой ) Я лучше созрею и в приват напишу кому надо, чем всем это рассказывать.
+3
Думаю, что всем будет интересно.
0
Если не решишься писать публично, скинь мне копию письма, пожалуйста.
0
и мне, пожалуйста
0
Пожалуйста, мне тоже
+9
а потом кто-нибудь выложите полученный ПМ в статью,
чтобы почитали все
0
url = ExternalInterface.call("window.location.href.toString");

Если возврат значений не нужен можно прямо через navigateToURL выполнять:
navigateToURL(new URLRequest("javascript: alert('Ахтунг')"), "_parent");
0
с удовольствием почитал бы
0
Еще порталы бы давали доступ к ExternalInterface, эвалом никто баловаться не даст, обычно AllowScriptAccess вырубают при эмбеддинге.
0
Я может ошибаюсь, но AllowScriptAccess разве ограничивает JavaScript в рамках текущего домена?
0
Если значение never, то все отрубает.
+1
Респектище за игру. Жанр «не мой» и зайдя через рейтинг группу чтобы проголосовать за игру, я сначало не думал, что буду в нее играть. Так, попробовал один уровень… Потом еще. В результате часика за 3 я ее таки прошел :))))

Да, и за постмортем тоже спасибо. Очень увлекательно и главное — с деталями и цифрами! Надеюсь, игра принесет еще не одну тысячу зеленых на рекламе!
+1
Троекратное ура тебе и огромный респект. Ещё увидев тестовую версию твоей игры на форуме, сразу подумал: «Я джва года хочу такую игру!!11».
Ты очень крут.
0
Респектую. Проделанный объем работ впечатляет. Тем более доведение такого проекта до победного конца, выше всяких похвал. Даешь! Сиквелов)))
0
Поздравляю с релизом! Вдумчивый подход и качественное исполнение, все на высоте. Сумма сделки немного удивила, конечно, но, думаю, на левелпаках и сиквелах возьмете свое. Удачи!
0
Охеренный постмортем, как только увидел твою игру, завис в ней надоОООООООООООооооооооолго…

По поводу ФГЛ согласен с тобой, ребята автоматизировали свою систему и стабильно получают процент, даже не парясь. Никакого персонального сервиса от них не видать, но для новичка самое то, опыта набрать, контактами обзавестись
0
Что сказать то?
Всё уже сказали)))

Единственное, если бы была возможность выбора языка, а так всё Мего круто)
Просто Мегабыбл!
0
Растянул тайлы до 128*128 и немного разблурил.
Прикольный метод, однако памяти жрет больше. Хотя это как всегда или оптимально, или компактно, но медленно.
0
Всего в игре 42 тайла.
Так что лишних 400 килобайт погоды не сделали.
+5
Маньяк. Сабмить на конкурс flashgamm. Выиграешь приз «самая технологичная игра».
0
ОМГ, крутяк!!!
Насчёт цифры конечно негусто, но думаю двиг и игру ещё можно будет хорошо поэксплуатировать и заработать недостающее...:)
0
Очень круто! Восхищяюсь
0
Отличная игра!
Меня лично, больше всего заинтересовали исп технологии ))
Напиши пожалуйста более подробную статью про технологии (с чего можно начать например если хочешь написать подобный движок), что откуда и зачем )) Я лично с удовольствие почитаю, это пока недоступный уровень для меня ))

А почему не использовал существующие 3D движки?
+2
Я делал уже несколько постов про «технологии».
Если по «кубику» тыкнуть, там будет список.

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

Существующие движки не обладают нужными возможностями (z-буфер, освещение) и тормозят.
0
Ах, да:
OMFG, AWESOME GAME!
0
Круто! Поздравляю!
0
про АРТ, рискну предложить свои услуги, вот ссылка на мою игру www.newgrounds.com/portal/view/540898

игра 2д, но могу делать и лоу поли. Анимация, текстурирование.
0
Хорошо, спасибо.
Буду иметь ввиду.
0
респект )
+1
«Все бы ничего, но он же, сука, даже игру не посмотрел!»

Ведь вполне очевидно, что если б не ФГЛ, рыночная стоимость игры была бы не определена, и вполне вероятно что ее не удалось бы продать за 12,5к?
+4
Лично меня не устраивает их «качество сервиса».
Постараюсь больше не пользоваться.
Гадать, что было бы, если бы не ФГЛ, смысла нет.
0
Там ещё админы могут смотреть игру, оставаясь невидимыми для разработчиков.
0
Поздравляю, очень круто!
Вопрос возник — зачем проект частично на Haxe, а частично на as3? Почему не на чём-то одном?
0
В haxe есть flash.Memory, который дает очень быстрый низкоуровневой доступ к памяти, и оптимизирующий компилятор, быстрый для целочисленных вычислений.
Поэтому использую его для непосредственного рендера.

А as3 удобный и привычный, поэтому на нем написано все остальное.
0
А как это совмещается? SWC?
0
Да, через swc.
0
Очень круто, поддержал.
0
ОФигительная игрушка.
0
Два чая автору! Фанаты Инкубации льют ностальгические слёзы… И да, мультиплеер был бы крут)
0
Мне уже не осталось что сказать, всё сказали до меня.
Поздравляю с завершением!

PS: Smrdis дело говорит, приз за «технологичность» (и немного пиара) — твой.
0
Выставляться на флэшгаме с клоном как-то не эцсамое.
Вот сделаю КсеноММО, тогда можно :)
0
Тут же речь о теке, а не об игре. Какая разница, клон / не клон, тем более, что не клон, а ремейк.
0
перфоманс никто не предлагал? Вроде логичное предложение для рискового проекта.
0
Предварительно говорил с Грегом по этому поводу, он сказал, что подумает.
Видимо не надумал, а я не настаивал.
У самого уверенности не было.
0
Нашел хорошую рецензию: sublieutenant.livejournal.com/286575.html
Приятно :)
0
Нужно было ответить. Думаю, автору было бы приятно, что его статью прочитал разработчик игры :)
0
Может пошаришь мочибота? Все таки не каждый день такое выходит, статистика должна быть интересной.
+12
0
Судя по цифрам, на перфомансе было бы примерно столько же, сколько заплатил Мартин.
0
Сложно пока сказать, всё же пока мало времени прошло — бывает что крупняки и попозже расхватывают…
0
отличная работа!

стоимость оч. занижена
да, нужен малтиплеер
+8
В общем я почти доделал метод позволяющий запудрить мозги узкоглазым хакерам :) Ну и нашим проворным. В общем я ближе к выходным напишу статью. Метод ручной и не подходит для любителей «навесной» защиты. Минусы будущего метода — он ручной и приходится с ним возиться. Плюсы — дисассемблером нельзя будет «поменять» переменные так, чтоб оно работало. Конечно, его вырубить можно. Но если этот метод вшить скажем по коду и учитывать его во время проверок — он будет хорош. Кому он будет выгоден — тому, у кого игры стоят денег. Кому он не поможет — тем, кто по 100 баксов игры делает, где цена защиты больше цены игры :)
0
это уже по-взрослому
респект!
0
ryzed, поздравляю! Ты проделал огромную работу. Низкий тебе поклон.
0
Игра выглядит конечно круто но по геймплеям очень сильно отстает от более казуальных игр.

Теже пушки от Джонни К, мандарины(60+mln), гибетсы (100+mln), home sheep home(100+mln), use boxmen (50+ mln) ну и множество других игр. А по времени делать их месяц-два плюс минус.

Да и продать дороже можно :)
Это так материал к размышлению
  • Vel
  • Vel
0
Надо или грамотней монетизировать (микро) или делать другого рода игры а то не особо прибыльно както =)
+3
Не все делают то, что можно продать дороже. Это так, материал к размышлению...:)
0
Это да :)
0
можно былоб используя наработки этой игры (в т.ч. графику) сделать классический шутер с управлением сверху, причем быстро и хорошо. собрало бы раз в 10 больше плеев)
+1
«пушки от Джонни К» — физпазл…
«мандарины» — физпазл…
«гибетсы» — физпазл…
«home sheep home» — физпазл…
«use boxmen» — пазл…

грусняво :(
0
Ну, значит народ их дюбит :)

Вот тебе Экшен: Achilles — www.mochibot.com/shared/shared_swfdetail.html?key=10b9eb8cd01e9d03dd54a07d0bb15631
0
Кстати там 12 тысяч хостов, вроде больше нигде невидел
+1
Количество хостов больше зависит от возраста игры. У uphill rush, например, 25k. Видел игру с 30+ тысячами хостов.
0
Gibbets хоть и на физике, но это не паззл. Это что-то ближе к skill-game, а-ля Bloons.
0
Да, я б тоже не сказал что пазл. Скорее скил
+5
Ну так уж повелось что такие игры называют экшн-пазлами. Если серьёзно говорить то и пушки и апельсины и всё остальное тоже имеют серьёзную долю скила.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.