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


