Как стать автором
Поиск
Написать публикацию
Обновить

Выпустил ремастер своей игры спустя много лет после релиза. Вот как это было

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров3.4K

В этот день, 17-го июля, ровно 20 лет назад увидел свет простенький шутер под названием Endless War. О том, как эта игра затянула меня в геймдев, я рассказывал в прошлой статье. А сегодня на Newgrounds и itch.io я выпустил ремастер той самой первой игры. Эта игра - дань уважения всем тем, кто играл в первые части в детстве, кто писал отзывы и был неравнодушен к серии в частности и к flash-играм вообще. В этой статье расскажу как шла разработка и с какими сложностями я столкнулся.

Мысли отметить круглую дату возникли ещё год назад, но до реальной разработки руки дошли только в январе 2025. Изначально мы замахнулись на ремейк в Стим. Он должен был стать переосмыслением серии с новыми уровнями, графикой и множеством новых фичей. Конечно, сделать такую игру всего за полгода было слишком амбициозной задачей, тем более когда игра делается в свободное от работы время. Даже если бы успели - без маркетинга игра бы просто провалилась.

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

Основная идея

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

На флеше камера была строго сверху из-за 2D графики, а сейчас добавился режим, где камера под углом, как в The Ascent, Foxhole и Synthetic. Изначально я сильно ориентировался на самую первую часть, поэтому сеттингом выбрал вторую мировую. Да и ассеты под неё подобрать легко.

В первых играх оригинальной серии была ужасная графика, поэтому в ремейке хочется её немного облагородить. ААА графон нам не по силам, поэтому было решено остановиться на Low Poly 3D. Такой вариант дёшев в разработке и неплохо смотрится.

У меня ещё давно был куплен пак вот этих ребят:

Персонажи Polygon Blacksmith
Персонажи Polygon Blacksmith

А для окружения взял на распродаже несколько паков от Synty:

POLYGON - War Pack
POLYGON - War Pack

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

Геймплей

Геймплей, конечно же, хочется сохранить поближе к оригиналу. Его основой в ранних частях были опасные, но не слишком умные противники, от пуль которых можно было уворачиваться. Поэтому  расстояние от камеры и её угол подбираем такие, чтобы на экране могло поместиться примерно столько же персонажей, что и в оригинале. Пули тогда летали со скоростью в 4 пикселя за кадр, что при переносе на Unity вылилось в 25 метров в секунду: теперь от одного края экрана до другого пуля долетает за то же время, что и в оригинале. Персонажа пришлось немного ускорить, чтобы уворачиваться от выстрелов было также легко, как и раньше. Дело в том что в оригинале игрок мог перестреливаться с противником через весь экран, а тут у нас камера следует за игроком, и между ним и противником примерно пол-экрана.

По программной части у меня было много наработок от не взлетевшего топ даун шутера, который мы с товарищем делали под мобилки. Пришлось адаптировать управление под ПК и добавить много нового:

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

  • Чтобы уклоняться от пуль было интереснее, был добавлен кувырок, назначенный на пробел.

  • На локациях довольно много мешков с песком и прочих укрытий, и было бы странно оставлять их в роли декораций. Пришлось не только научить противников ими пользоваться, но и разнообразить ИИ, чтобы разные бойцы по-разному расставляли для себя приоритеты: пулемётчик побежит в укрытие даже если оно относительно далеко, обычный стрелок - только если близко, а автоматчик скорее предпочтёт сразу атаковать игрока.

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

Сцена из Steam-версии
Сцена из Steam-версии

ИИ

Искусственный интеллект был взят ещё из flash-игр и с некоторыми доработками переписан на C#. Ещё тогда я написал довольно удобную систему, работающую на парах “условие - действие” на манер гамбитов в Final Fantasy XII, и тактик из Dragon Age: Origins. Для каждого юнита можно было задать свой набор пар. Эти пары в текстовом виде прописывались в конфиге на python, а потом из него через jinja2 генерился код на C#. Такой подход оказался очень удобным когда нужно было создать много отличающихся скиллами и поведением противников, но для сходных действий (подойти, следовать, атаковать в ближнем бою и т. п.) требовалось копипастить код с небольшими правками.

Пример настроек обычного автоматчика:

	'smg': [
		I(
			A('FindCover', MaxRangeToCover='float 5f', MaxRangeToTarget='float 20f'),
			t='alive,enemy,nearest,dist>10'
		),
		I(
			A('TossGrenade', 20, 3),
			t='alive,enemy,nearest,dist>8',
		),
		I(
			A('Shoot'),
			t='alive,enemy,nearest',
			u=(
				A(
					'Strafe',p=40,
					MinRange='float 1f', MaxRange='float 2f'
				),
				A('BreakOnRecoil', MaxRecoil='float 15f'),
			),
		),
		A_MELEE,
		A_SEARCH,
	],

Заметив врага, он будет искать укрытие, кинет гранату если враг далеко и будет стрелять иногда стрейфясь.

Хотелось побольше разбить логику на “кирпичики”, а тут в Unity 6 выкатили Behaviors - инструмент для создания ИИ на графах, который как раз это позволял. В итоге я доработал свою систему: конфиг на python остался, но действия были уже не отдельными классами, а деревьями поведений.

Пример действия “найди укрытие”
Пример действия “найди укрытие”

Правда, Behaviors в итоге оказался дико забагованным, а юнитеки потом уволили команду, которая над ним работала, но пути назад уже не было. Зато теперь я могу более тонко настраивать поведение противников: от тупых пехотинцев, ведущих себя как лемминги, до элитников, уклоняющихся от пуль и закидывающих игрока гранатами.

UI

Много сил ушло на UI. Причём не на программирование или дизайн экранов, а просто на поиск решения по визуальному стилю. Мы попробовали 2 пака и просмотрели ещё десятки, и ни один не подходил. Хотелось обычный, читабельный, простой минималистичный UI. Но все паки в сторе или мультяшные, или фэнтезийные, или слишком казуальные, или всё сразу. Минималистичные паки тоже есть, но отдавать $150 за кучу прямоугольников жаба душит. Решение пришло откуда не ждали: на весенней распродаже в Стим я взял Battlefield V всего за $5. Сама игра не шедевр, зато какой там крутой UI! Всё стильно, читабельно, выглядит современно и при этом не конфликтует с сеттингом. Было решено использовать BFV как реф, а из арта потребовались лишь иконки, потому что всё остальное - на прямоугольниках.

Получилось, конечно, не так круто, как у них, но гораздо лучше чем с паками.
Получилось, конечно, не так круто, как у них, но гораздо лучше чем с паками.

Иконки миссий и кампаний сгенерировал мой товарищ в Sora. Пришлось попотеть чтобы выработать стиль, но в целом результат всех устроил. Ещё были нужны иконки оружия. Их рисовала моя жена (она художник 3D / 2D). Получилось заметно лучше чем в паках из стора:

Ремастер под веб

Идея собрать ремастер в веб на наработках Стим версии родилась где-то в апреле. Чтобы сделать игру быстро, мы попробовали воссоздать на Unity уровни из самой первой игры, а камеру сделать статической, тоже как в первых играх.

Сцена из ремастера
Сцена из ремастера

Я попросил жену пересобрать эти уровни один-в-один. И на 15 уровней у неё ушло всего 2 недели! Потом неделя на ещё 10. Итого у нас получилось 5 кампаний по 5 уровней. Для них использовались самые простые ассеты, упрощена графика и не вошла часть фичей (например, техника). Ради веба пришлось сильно порезать эффекты и безбожно пожать текстуры, даже обычные картинки в интерфейсе. Юнити тоже попил крови: в вебе у работают не все шейдеры и нельзя использовать среднюю кнопку мыши.

Что дальше?

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

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

Теги:
Хабы:
+16
Комментарии11

Публикации

Ближайшие события