Игра была довольно успешной в своё время, поэтому решено было возродить, так сказать, классику. На самом деле до этого была ещё одна игра на эту тему, «Alien World», но её я не смог уже отыскать на просторах интернета, а в старых архивах копаться уже не хочется.
Так вот, было решено запилить что-то подобное на модный тогда iPhone.
Был написан прототип на имеющийся на руках iPod. Самым нормальным движком на тот момент мне показался Cocos2d (который на Objective-C) - уж не знаю, жив ли он ещё? Забегая вперёд, скажу, что остался верен (почти) ему до конца, и, благодаря ему, игра сейчас работает на всём, что шевелится, включая Linux и даже Windows Phone.
Получив рабочий прототип с жутким управлением (мне казалось, что наклонять телефон очень удобно для управления 2d-персонажем), тут же вместе с сотрудниками занялся генерацией идей. Идей был реально миллиард, но немногие из них дожили до сегодняшнего дня.
Прототипировать было легко, потому что были какие-то монстры уже из старой игры, персонаж (графика для начала - это очень важно) и горящая сера в одном месте. Ну и желание прославиться и захватить мир, конечно.
Однако, к сожалению, на тот момент опыта в гейм-дизайне было маловато, поэтому всё постепенно заглохло. Так всегда бывает, когда работа не разбита на этапы, задачи, и не используется баг-трекер. И когда ты точно не знаешь, сколько уровней у тебя будет - 100 или 30 или 700. Сколько монстров, персонажей, видов оружия. Будут ли достижения, бонусы, коллекционные медальки? Будет ли сюжет? Короче, нет цели - нет результата. Всё расползалось вширь, но каждая отдельная фича игры не доводилась до конца.
Постепенно игра обросла новой графикой, заказанной уже у брата первоначального художника, так что имеется некая преемственность безумия персонажей и монстров. Многие монстры переехали как есть.
На одном прототипе не уедешь, как оказалось. По наивности я даже пытался показать игру издателям, но на тот момент я не знал умных слов вроде «learning curve» и не понимал, почему мне все отказывают. А ларчик просто открывался - игра была настолько хардкорна, что кроме меня никто не мог пройти даже второй уровень и понять в чём собственно суть игры. А «обучение» было только в сопроводительном письме. Музыка в игре была на тему heavy metal, что для продюсеров тоже как-то не очень обычно. Ну и в завершение пиксель-арт, когда модно стало рисовать Ом-Номов (при всём уважении) и прочих крокодилов Свомпи.
2. Графика
Графика да, была пиксельной. Но не вся. Задники очень даже не пиксельные. Я не помню как так вышло. Возможно, задники в пиксель-арте требуют гораздо больших трудозатрат? Но всё, что на переднем плане было отрисовано в пикселе, а всё, что на заднем… не знаю, как это называется у художников, короче - обычно.
Это хорошо пошло вместе, создался некий контраст, когда ты отделяешь то, что происходит на переднем плане от фона. Так что решено было продолжать в этом же духе. А возможно повлияло то, что игра делалась изначально на древние сейчас уже устройства, где разрешение экрана позволяло выводить пиксель-арт один к одному и он не сильно отличался от задников. Но потом появилась retina, и понеслось. Отчасти это тоже было сильно демотивирующим фактором - видеть, как все переходят на высокое разрешение графики, а ты со своим пиксель-артом остаёшься на обочине.
Художник нам попался мега-творческий. Монстры и задники получались как надо, с нужным накалом безумия. К сожалению, в то время игра так и не была дорисована до конца, так как мы переключились на другой проект, за который нам обещали заплатить денег.
Кстати, ролик той игры (из далёкого 11го года) у меня ещё сохранился на Youtube, так что выкладываю на посмотреть. В принципе, отличия от сегодняшнего дня видно. К сожалению, отсутствие рейтинга не даёт выложить ролики, поэтому желающие могут ознакомиться по ссылкам.
Старый ролик 2011 года: https://youtu.be/ZWReHsbWvRI
Новый ролик 2016 года: https://www.youtube.com/watch?v=xbAO7kXsCSI
Много картинок выкладывать не буду, при желании можно посмотреть скрины на страничке в greenlight (ссылка, напомню, внизу).
3. Код, движок и всё такое
Движок, как уже говорилось, был выбран Cocos2d. Особенностью той первой версии было то, что он был адски глючный. Глюки находились почти во всём. И тогда не было моря китайцев, пишущих на Cocos2d-x, которые могут помочь практически во всём. Одним из самых дурацких решений на тот момент было то, что я стал делать физику в игре самостоятельно. Поначалу мне это почему-то показалось хорошей идеей. Но по мере того, как игра расширяясь в плане функционала, стали вылезать проблемы. А добавилось вот что:
- Монстры и персонажи, в отличие, от прообраза перестали быть кругло-квадратными, поэтому попадания в них стали выглядеть коряво
- Уровни усложнились, появились лестницы, более комплексные платформы
- Появилось оружие с разными принципами действия
- Появились частицы
В результате всё было так ужасно, что персонаж постоянно куда-то проваливался, застревал, монстры не убивались. И совершенно нереально было всё это исправить, так как была накопипастена была куча говно-кода по всему проекту.
И вот однажды я осознал свою тупизну и просто забросил проект, переключившись на что-то другое по работе. Совместно с причинами, которые озвучил ранее, конечно.
Ещё несколько проблем того периода:
- Я не додумался (поленился?) по-нормальному сделать редактор уровней. Прототип был, напомню, на мобильный девайс, поэтому делать на нём уровни было невозможно, сохранять их было некуда. Был написан кривенький редактор, очень неудобный, уровни делать и тестировать было невероятно неудобно.
- Я не знал толком Objective-C и поверхностно представлял себе суть объектно-ориентированного программирования.
- Я писал говно-код, волшебные числа и допущения были повсюду
- Строки с текстом прямо в коде, я делал диалоги прямо на картинках в фотошопе (с соответствующими трудозатратами на исправление/локализацию)
- Я считал, что мой английский прекрасен, а шутки на нём остроумны
- Я предпочитал копипаст тому, чтобы писать более универсальный код на все случаи жизни.
4. Эпоха возрождения
Прошли годы (реально годы, блин), мы с командой работали над портированием проектов с платформы на платформу (кому интересно - добро пожаловать на сайт с портфолио), мы работали на всех платформах, которые можно представить. Портировали и хороший код, и такой, как был у меня раньше. Поработали с хорошими продюсерами, нормально поставленной системой баг-трекинга, постигли дзен, в общем.
Было принято волевое решение написать всё нафиг заново. На Cocos2d-JS. Да, HTML5, Javascript. Чтобы веб и можно было портировать на всё остальное. Было потрачено некоторое количество времени (недель), была выкачена версия, с которой мы съездили на DevGamm2015 в Минск.
Получили полезные отзывы у себя на стенде и почти победили на GameLynch. Это такое событие, когда твою игру полчаса уничтожают эксперты, доказывая, что она редкостный трэш и шлак, а у тебя есть 5 минут, чтобы защититься. Аудитория голосует и проигравший выпивает мощную дозу алкоголя.
В результате мы с ещё одним парнем вырвались в финал. Финальным испытанием, чтобы определить победителя из нас двоих, было метнуть плюшевого медведя в зал как можно дальше. Мой медведь пошёл низко, и я зарядил какому-то парню прямо в щи. Так что я проиграл. Братан, извини, если ты это читаешь, я не виноват, мне сказали не попасть в мера-дорогие люстры. Я выбрал тебя.
Воодушевлённый я примчался к родным пенатам и решил опробовать игру на разных платформах и выпустить уже наконец. И жёстко обломался. Оказалось, что использованный в игре Box2d не был портирован китайцами настолько, чтобы можно было собрать нативные версии на мобильные платформы. То есть в вебе и на PC всё шуршало, а вот на Android не собралось, и на iOS не собралось. А то, что собралось после отключения физики работало с частотой до 10 кадров в секунду. Это был как удар по самому дорогому. Но нам ведь не привыкать! Ну и плюс игра на HTML5 нафиг никому не нужна.
С нового года (конфа была в ноябре, а декабрь был загружен работой) сера в одном месте чудесным образом обновилась, и всё было переписано на C++. Работал я параллельно с основной работой, поэтому растянусь на несколько месяцев. Плюс 2 месяца был в поездках.
Но наконец-то я:
- Написал хорошие классы для интерфейса, новые окна, кнопки и в целом интерфейсы стало делать легко и приятно
- Написал чудный класс монстров, наследовать от которого, расширяя возможности новых монстров, стало удовольствием
- Реализовал локализацию всего по-красивому, в отдельных файлах
- Повсюду появились синглтоны SaveManager, ControlsManager, SessionManager и другие, обращаться к которым стало очень легко и приятно из любого места кода
- Подключил нормальный генератор частиц (пришлось купить ParticleEditor)
- Сделал, наконец, нормальные шрифты (пришлось купить GlyphEditor)
- Мощно ускорил всё, собрав атласы (пришлось купить TexturePacker)
- Написал хороший встроенный редактор, с помощью которого можно было тут же затестировать уровень, подредактировать что-то на лету.
- Избавился от всех волшебных чисел, всё либо в файле констант, либо в конфигурационных файлах
- Монстры получили честные формы, повторяющие их спрайты
- Графику стало можно отключать, оставляя на экране лишь физику
- MovieManager, который умеет управлять персонажами и врагами, позволил сделать кучу роликов на движке - диалоги или мультики появились в каждом уровне!
А вообще, писать на C++ - это невероятно приятно. Даже с учётом того, что приходится делать это в XCode (к сожалению в данном случае, дома и на работе Mac).
Ну и масса более мелких улучшений имела место. Плюс ответственно подошли к тестированию внутри конторы, перепроходили игру многократно с занесением багов в трекер.
5. К чему всё пришло и что дальше?
Правильный вопрос задаёшь, пытливый читатель. Это всё было месяца 2-3 назад. Труд, который я вложил в переписывание начисто принёс плоды. Всё работает как часы, не глючит. Но стало легко добавлять в игру новое и я развернулся:
- добавил массу задач для каждого уровня
- поскрёб по сусекам, нашёл всех неиспользованных пиксельных монстров за все годы работы и внедрил. Правда, парочка осталась. Пойдёт в дополнение.
- добавил все имеющиеся задники, правда, кое-что пришлось дорисовать
- добавилась онлайн-таблица рекордов
- друг-американец помог с переводом на английский
- нормальное управление для тач-скрина
- сборки на все платформы, как настольные, так и мобильные
- безжалостно уничтожено то, что не было доделано
- была написана спецмузыка другом-музыкантом
Всё добавлялось так быстро и легко, что пришлось наложить резолюцию и закруглиться для выхода игры. Масса идей осталась на будущее, конечно.
На заре времён задумывался мега-сюжет, но в результате всё пришло к абсурдной истории (намеренно абсурдной). Из интересного добавилось в конце:
- сюжет (диалоги и ролики) немножко зависит от того, кем играешь - мужиком или девчонкой.
- бессмысленные ранее медальки за задания на каждом уровне теперь ограничивают доступ к 4м боссам
- всё это встроено в сюжет, диалоги меняются в зависимости от внешних условий
Что дальше?
А дальше голосование на Greenlight. Ссылка вот: http://steamcommunity.com/sharedfiles/filedetails/?id=814871...
Сборка на Windows Phone залита на стор, зарелизится как только удастся сделать красивые скрины. Те, что у меня есть, как оказалось, смотрятся на витрине паршиво. Занимаюсь этим прямо сейчас. Знаю-знаю, платформа маргинальная, но такой мобильник есть у самого - проще тестить, плюс будет вроде как пробный пуск.
После этого выгружу на мажорные платформы, но уже, наверное после Нового Года. Единственное, чего там сейчас не хватает - это in-app и достижения. Да, игру придётся покупать, но она просит денег после прохождения 12 уровней и убийства первого босса. Всё по-честному, понравилось - купи, никакого выкачивания денег на какие-нибудь улучшающие кристаллы.
Вот и всё. Если есть вопросы - пишите, с удовольствием отвечу.