В этот день, 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 в детстве и было невероятно приятно узнать, что она оставила такие тёплые воспоминания.

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


  1. lolo333
    18.07.2025 07:01

    Выглядит круто! А можно ли добавить какой-нибудь онлайн, что б с другом постреляться можно было?


    1. VitalyZaborov Автор
      18.07.2025 07:01

      Спасибо! Онлайн под Стим может сделаем, но скорее всего нет - уж очень сложно.


      1. vityo
        18.07.2025 07:01

        Теперь понятно, что следующая версия уже будет на анреале) если нужно сильно, то могу скинуть как через lyra делал архитектуру, плюс подключение через стим и можно было побегать по одной простой карте (с боссом побегал). Но коду два года ровно, и я не открывал давно. ТГ @vityo . т.е. оно больше как размышление как дальше или как стартовое для своего, смотря как оценить


        1. vityo
          18.07.2025 07:01

          Не боссом , братом*


        1. VitalyZaborov Автор
          18.07.2025 07:01

          Да нет, скорее всего для этой серии останемся на юнити. Многое уже сделано, а на UE всю нашу кастомизацию переносить слишком долго.


  1. 19971997
    18.07.2025 07:01

    Буду ждать с нетерпением выход игры в стим


  1. iamkisly
    18.07.2025 07:01

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


  1. JetPac
    18.07.2025 07:01

    В веб версии есть бесячий баг. Для старта уровня нужно кликнуть мышью во время надписи "click to start", при этом после этого происходит выстрел - очень раздражает, да ещё и на оружии с малым количеством патронов довольно чувствительная потеря. А ещё если правой кнопкой мыши кликнуть, до нажатия левой, то ещё и граната тебе под ноги полетит...


    1. VitalyZaborov Автор
      18.07.2025 07:01

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


  1. zugzug
    18.07.2025 07:01

    Расскажите пожалуйста детальнее про команду. А ещё интересно, чем вы зарабатываете на жизнь в наши дни? У вас есть какая-то постоянная работа в офисе в геймдеве? Где, если не секрет? Заранее спасибо за ответы и большой удачи на Стиме!


    1. VitalyZaborov Автор
      18.07.2025 07:01

      Спасибо! Команда - это я, товарищ, который занимается, артом, светом, эффектами и всем остальным что касается картинки, и моя жена, которая рисовала иконки и собирала уровни. Я, соответственно, занимаюсь программной частью, балансом и геймплеем в целом. Этим всем мы занимаемся как хобби, в свободное от работы время.

      Основная работа есть, но там NDA, поэтому распространяться особо не буду.