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

Поэтому было решено продолжать работу в том же темпе без чёткой даты релиза, а чтобы отпраздновать юбилей, мы решили сделать ремастер под веб, используя наработки основной игры. Как и 20 лет назад, это абсолютно бесплатная игра с одиночным прохождением. Несмотря на то, что до аудитории, игравшей в первые части серии, сейчас непросто достучаться, многие детали в игре рассчитаны именно на них. А ещё я верю что быстрый хардкорный шутер зайдёт и более молодой аудитории. И надеюсь, что веб-версия поможет привлечь больше вишлистов к нашей игре в Стиме.
Основная идея
Самый большой вызов при создании ремейка - сделать абсолютно новую игру, лучше во всём, но сохранить дух оригинала. Помимо собственно геймплея было решено воссоздать наиболее заметные элементы интерфейса: прицел, полоски здоровья, индикаторы патронов. Музыку тоже взяли из прошлых частей.
На флеше камера была строго сверху из-за 2D графики, а сейчас добавился режим, где камера под углом, как в The Ascent, Foxhole и Synthetic. Изначально я сильно ориентировался на самую первую часть, поэтому сеттингом выбрал вторую мировую. Да и ассеты под неё подобрать легко.
В первых играх оригинальной серии была ужасная графика, поэтому в ремейке хочется её немного облагородить. ААА графон нам не по силам, поэтому было решено остановиться на Low Poly 3D. Такой вариант дёшев в разработке и неплохо смотрится.
У меня ещё давно был куплен пак вот этих ребят:

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

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

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

ИИ
Искусственный интеллект был взят ещё из 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)
iamkisly
18.07.2025 07:01Поздравляю! Правда есть один момент, наверно не стоило смешивать ассеты. Паки от polygon хороши тем, что имеют общую теплую цветовую гамму, и почти полное отсутствие градиентов в текстурах.. что делает их отличными от ассетов персонажей.
JetPac
18.07.2025 07:01В веб версии есть бесячий баг. Для старта уровня нужно кликнуть мышью во время надписи "click to start", при этом после этого происходит выстрел - очень раздражает, да ещё и на оружии с малым количеством патронов довольно чувствительная потеря. А ещё если правой кнопкой мыши кликнуть, до нажатия левой, то ещё и граната тебе под ноги полетит...
VitalyZaborov Автор
18.07.2025 07:01Спасибо, исправлю. Этот экран делался в последний момент: решили, что когда сразу после загрузки уровня начинается перестрелка - это не очень хорошо и непонятно где свои, где чужие.
zugzug
18.07.2025 07:01Расскажите пожалуйста детальнее про команду. А ещё интересно, чем вы зарабатываете на жизнь в наши дни? У вас есть какая-то постоянная работа в офисе в геймдеве? Где, если не секрет? Заранее спасибо за ответы и большой удачи на Стиме!
VitalyZaborov Автор
18.07.2025 07:01Спасибо! Команда - это я, товарищ, который занимается, артом, светом, эффектами и всем остальным что касается картинки, и моя жена, которая рисовала иконки и собирала уровни. Я, соответственно, занимаюсь программной частью, балансом и геймплеем в целом. Этим всем мы занимаемся как хобби, в свободное от работы время.
Основная работа есть, но там NDA, поэтому распространяться особо не буду.
lolo333
Выглядит круто! А можно ли добавить какой-нибудь онлайн, что б с другом постреляться можно было?
VitalyZaborov Автор
Спасибо! Онлайн под Стим может сделаем, но скорее всего нет - уж очень сложно.
vityo
Теперь понятно, что следующая версия уже будет на анреале) если нужно сильно, то могу скинуть как через lyra делал архитектуру, плюс подключение через стим и можно было побегать по одной простой карте (с боссом побегал). Но коду два года ровно, и я не открывал давно. ТГ @vityo . т.е. оно больше как размышление как дальше или как стартовое для своего, смотря как оценить
vityo
Не боссом , братом*
VitalyZaborov Автор
Да нет, скорее всего для этой серии останемся на юнити. Многое уже сделано, а на UE всю нашу кастомизацию переносить слишком долго.