Андрей Смирнов
Время чтения: ~18 мин.
Просмотров: 1

Кибердемоны: искусственный интеллект DOOM 2016

Здесь показаны не все монстры т.к. Doom 4 ещё не вышел и неизвестно будут ли там монстры, не показанные в трейлере.

Зомби-солдат (Doom, Doom 2, Doom 3, Doom 4)

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

1457300715164210512.jpg

Имп (Doom, Doom 2, Doom 3, Doom 4)

Основная пехота демонических сил. Умеет метать фаерболлы, в ближнем бою использует когти. С третьей части игры умеет бросаться из положения лёжа, сбивая прицел игроку.В 

1457300797192518992.jpg

Пинки (Doom, Doom 2, Doom 3, Doom 4)

Жирная опасная тварь. Гасить лучше на дальних подступах.В Если зажмёт в углу — мало не покажется.

1457300856118027434.jpg

МанкубусВ (Doom, Doom 3, Doom 4)

Толстячок-добрячок. Очень тупой и неповоротливый, что с лихвой компенсируется наличием у него двух ракетниц. Встречается на более поздних уровнях игры.

Какодемон (Doom, Doom 2, Doom 3, Doom 4)

Милый какодемон. Умеет летать и кастовать фаерболлы, достаточно отожранный, чтобы выдержать 2-3 выстрела из дробовика в упор, но медлительный.

Рыцарь Ада (Doom, Doom 2, Doom 3, Doom 4)

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

РевенантВ (Doom, Doom 3, Doom 4)

Стреляет самонаводящимися ракетами, что может нехило подпортить здоровье. В 4-й части умеет ещё и летать.

Кибердемон (Doom, Doom 2, Doom 3, Doom 4)

Босс.

14

24 июля 2019, 10:27, DOOMРедактировать

Отключить рекламу

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

Ракетные установки
Ракеты сверху

После того, как демон выпустит много ракет выше, на земле появятся желтые круги. Они отмечают места, где приземляются ракеты. Быстро найдите безопасное поле и стреляйте в демона оттуда.

Шоковая волна

Каждый раз, когда демон выпускает оранжевую ударную волну, через которую вы должны прыгнуть. Используйте двойной прыжок, чтобы избежать этого.

Разбег

Время от времени враг пытается атаковать вас так же, как разбегаются Пинки. Если вы держите достаточное расстояние, у вас не должно возникнуть проблем с тем, чтобы избежать атаки.

Атаки ближнего боя

Во время битвы держитесь на как можно большем расстоянии, если только вы не возьмите боеприпасы, сбрасываемые с противника. Ходить к демону очень опасно, так как его кулачные атаки почти невозможно избежать.

Энергетический луч

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

Если вы используете BFG на Кибердемон, вы оглушите его на очень короткое время. За это время можете нанести ему больше урона. Тем не менее, вы не должны делать это на первом этапе битвы. Как только вы уберете всю полоску здоровья существа, начнется вторая фаза битвы в аду. Второй этап намного сложнее, и BFG будет гораздо полезнее на этом этапе.

Второй этап очень похож на первый, но отличается несколькими важными деталями. На этот раз демон выпустит не одну, а три ударные волны. Первый будет лететь низко, второй высоко и третий снова низко. Чтобы избежать их, сначала вы должны перепрыгнуть через первую волну за один прыжок, затем быстро нажать кнопку приседания, чтобы немедленно приземлиться и избежать второй атаки, и, наконец, выполнить двойной прыжок, чтобы избежать третьей волны.

Второе отличие состоит в том, что время от времени зверь создает две каменные стены, которые ограничивают ваше движение, а затем стреляет ракетами или ударными волнами. В последнем случае их стены не доставят хлопот, но в узком проходе ракеты намного сложнее избежать. Как и на первом этапе, вы должны бежать в стороны, но на этот раз направление должно меняться гораздо чаще.

Самая опасная часть — это когда существо выпускает ракеты в небо. Атака работает так же, как и раньше, но на этот раз в дополнение к поиску безопасной позиции вы также должны перепрыгнуть через ударные волны, которые появятся через мгновение.

Лучший способ быстро закончить бой — это использовать все сохраненные боеприпасы BFG. Вы должны использовать это всякий раз, когда противник использует атаку, которую вам трудно избежать. Ошеломив его, вы отмените атаку и сможете отплатить ему.

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

Автор оригинала: Tommy Thompson

  • Перевод

Шутеры от первого лица за долгие годы эволюционировали и стали очень интересной средой для неигровых персонажей: солдаты прячутся за укрытиями, чужие преследуют игрока, а напарники помогают ему в пылу боя. Всё это вписывается в концепцию дизайна современных шутеров: удерживания территории, создания рубежей обороны и сдерживания игрока. В этой статье я на примере перезапуска франшизы DOOM 2016 года расскажу о том, что происходит, когда разработчики отказываются использовать в игре стандартный кодекс поведения.a2e5deec2e68c0b386df5321db3869dd.jpgDOOM построен на философии, известной как «push forward combat» («агрессивный бой»), влияющей на нарратив, дизайн уровней, перемещения игрока и многое другое. Если вкратце, то он является критическим взглядом и реакцией на современные шутеры. В то время как Call of Duty заставляет игрока ползать за укрытиями и снимать врагов издалека, DOOM нарушает эти правила, создавая мощный, быстрый, «спинномозговой» геймплей. Но как это всё устроено, и что предпринимает ИИ, чтобы сделать игровой процесс живым? Философия Push Forward Combat охватывает все аспекты DOOM: она определяет фундамент игры и способы взаимодействия игроков с ИИ в бою. Как объяснил Курт Лауди в своём докладе на GDC 2018, игра в большой степени заимствует механики оригинальных игр DOOM: быстрое движение, потайные коридоры и яростные перестрелки. Но хотя она стремится вернуться к корням, ей в то же время нужно привлечь совершенно новую аудиторию, никогда не игравшую в олдскульные FPS, в том числе и в DOOM с DOOM II: Hell on Earth. Поэтому агрессивный бой построен на четырёх столпах, на которых стоит дизайн всей игры:

  • Скорость движения игрока и демонов.
  • Индивидуальность демонов
  • Уникальность каждого оружия
  • Сохранение мощи игрока даже в самой тяжёлой ситуации.

Эти четыре столпа позволили создать и усовершенствовать механики игры; благодаря им становилось очевидно, какие из механики усиливали принципу агрессивного боя, а какие ему мешали. Поэтому из игры убрана перезарядка оружия, ведь она мешала течению боя, а также добавлен двойной прыжок, позволяющий быстрее добраться до врагов. Наконец, базовый геймплей должен быть интуитивным и интересным, но в то же время он может становиться всё более сложным, вознаграждая игрока за правильный выбор целей и оружия. Бои в DOOM часто происходят на средних и больших аренах, асимметричных по своей природе, с множеством перемещений по вертикали. Они гораздо ближе к многопользовательским онлайн-шутерам, чем к традиционным однопользовательским кампаниям. Добавьте в состав вражеских демонов, и вы получите то, что id называет «боевыми шахматами»: задача игрока — выяснить, какого демона уничтожить первым, и как лучше всего к нему добраться.f343ebd1fe127a3fc53c4a8bf134e51b.jpg Для реализации и оттачивания такого игрового процесса потребуется набор новых инструментов. Используемые в нём системы ИИ созданы под серьёзным влиянием более традиционных шутеров от первого лица и адаптированы под концепцию DOOM. Я ещё вернусь к тому, как именно ИИ DOOM благодаря своей структуре подкрепляет концепцию Push Forward Combat, но сначала мне бы хотелось исследовать работу архитектур ИИ и изучить источники её возникновения. Для этого нам нужно сначала рассказать о DOOM, которого никогда не было, и о том, как он превратился в игру 2016 года.

Спасение DOOM

Хорошо известно, что цикл разработки DOOM 2016 был сложным: франшиза испытывала проблемы самоидентичности и не знала, во что ей превратиться в современной эпохе. Изначально игра напоминала более современные шутеры, но в конце концов её сдали в утиль, и с этого момента начал обретать форму тот DOOM , который мы знаем сегодня. Именно в процессе этого перехода выяснилось, какие инструменты тулчейна ИИ можно адаптировать под игру и как они способны помочь в реализации концепции агрессивного боя.DOOM 4 — как он назывался изначально — находился в разработке с 2008 года. Родительская компания ZeniMax Media, купившая id Software в 2009 году, была недовольна процессом разработки и после внутренней ревизии в 2011 году настаивала на изменениях. Близкие к проекту источники, пожелавшие остаться анонимными, сообщили мне, что команда разработчиков Rage, готовившаяся к началу препродакшена сиквела, была вынуждена прекратить работу и слиться с командой DOOM 4. «Call of Doomy», как пренебрежительно называли игру в студии, резко изменила курс, превратившись из DOOM 4 в просто DOOM. Это привело к серьёзному разочарованию — идеи и личности противились новому выбранному направлению. Новый дизайн проекта заставил Мэтта Хупера приступить к поискам, необходимым для возрождения энергии классического DOOM. Мои источники утверждают, что успех мода Brutal DOOM  разработчика SgtMarkIV стал чем-то вроде подтверждения правильности этого идеала. Это привело к созданию нового геймплейного демо, выпущенного в 2012 году, в котором делался упор на философию push forward combat, а также была переработала система glory kill (прим. пер.: система эффектного добивания врага в ближнем бою), уже присутствовавшая в DOOM 4. Вместе со множеством опытных разработчиков, перешедших из команды Rage к созданию DOOM, в новый проект перенесли кучу инструментов и систем и из самой игры, и из движка id Tech 5. Давайте поговорим о базовых инструментах архитектуры ИИ в движке id Tech, а также о том, как эти системы созданные и отполированные под Rage, были в последствии портированы для DOOM. Разработка тулчейна ИИ как части движка id Tech 5, началась ещё в 2005 году, почти сразу после выпуска DOOM 3. Впервые он был протестирован в деле в Rage. Основная система принятия решений вражеского ИИ в Rage и DOOM состоит из иерархических конечных автоматов (Hierarchical Finite State Machines): разновидности классической реализации ИИ, обеспечивающей повышенную гибкость и контроль над последовательностью состояний с их поведением.

Иерархические конечные автоматы

Конечные автоматы (Finite State Machines) тесно связаны с принципом состояния (state), в течение которого ИИ может выполнять определённое поведение. Также при соблюдении определённых условий ИИ может переходить в другие состояния. Соединение множества состояний в группы и реализация переходов между ними позволяет создать гибкие, реагирующие на ситуацию и интересные поведения. В одном из моих первых видео про Batman: Arkham Asylum рассказывается, как они использовались для стелса и боёв.d8c26ea4fbf4229f69b7199226ab21b8.png Однако схема может быстро стать очень сложной: количество состояний увеличивается, а вариантов переходов между ними становится ещё больше. Чтобы справиться с этой проблемой, иерархические конечные автоматы (ИКА) группируют определённые наборы состояний и выполняют их одним кластером с чёткими переходами внутрь и наружу этого кластера.c752086fdf4c9d7e22fd4523c3c0a769.png По сути, кластеры создают маленькие конечные автоматы внутри большого конечного автомата, в которые и из которых система может выполнять переход. Это позволяет создать более упорядоченное и структурированное поведение, при котором отдельные состояния присутствуют в одной или нескольких группах. Благодаря этому конкретные аспекты — перемещение в укрытие, атака на расстоянии или приближение — можно обрабатывать и моделировать для каждого демона.f0695ac3060c9f286cf771c205c2d2fb.png Это отличает DOOM от многих современных шутеров, в которых конечные автоматы встречаются гораздо реже, а популярность приобретают деревья поведений (Behaviour Trees) или даже HTN-планирование. Система ИКА в Rage позволяла дизайнерам с определённой гибкостью настраивать поведения в конкретных ситуациях, но создавать такие конечные автоматы могли только программисты. Как рассказали мои источники, лучше всего было предоставить команде дизайнеров большой набор интересных и захватывающих поведений для каждой битвы. Это позволяло сохранить целостность систем ИИ и минимизировать вероятность их сбоя или неожиданного поведения. Для обеспечения целостности всего процесса конечные автоматы DOOM можно создавать только с помощью специально созданного редактора, имеющего интерфейс с кодом на C++, который использовался для построения отдельных состояний. Этот редактор стал расширенной версией ранее созданного макроязыка для Rage, который в редакторе используется для записи состояний и предлагаемых переходов нового конечного автомата. Он выполняет перекрёстные ссылки с файлами заголовков кода на C++, которые задают все возможные переходы для текущего состояния. Это оказалось невероятно ценной особенностью для команды программистов, потому что позволило быстро проверять целостность и структурированность всего конечного автомата или вручную, или с помощью инструмента визуализации графов. Готовая реализация получилась быстрой и не требовала управления огромным количеством ресурсов в игре. Однако несмотря на то, что созданные инструменты обеспечили чёткую визуализацию структуры и поведения конечных автоматов, они также увеличили количество абстракций, что усложнило пошаговое выполнение и отладку. В дополнение к ИКА, используемой для принятия решений о действиях демонов, в DOOM применяются две системы, созданные для Rage: система укрытий и система анимаций.

Система анимаций

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

Система укрытий

Наконец, в Rage была создана и протестирована система укрытий, активно взаимодействующая с ИИ принятия решений, AnimWeb и встроенными инструментами навигации. Боевая система Rage, а значит и её система укрытий вдохновлялись ранними играми Halo, в которых отряды монстров стремились в области с хорошими укрытиями, в то время как тяжёлые враги, такие как Shrouded и Gearhead, атаковали игрока на открытом пространстве. Эта система учитывала расстояния между игроком и располагаемыми дизайнерами оборонными позициями, позиции ИИ относительно областей хороших укрытий, видимость ИИ-противников для игрока, присутствие в укрытии дружественных ИИ, оптимальные позиции для бросков гранат и многое другое. Вероятно, вы задаётесь вопросом, почему это так важно: ИИ в DOOM никогда не прячется за укрытиями, да и сами укрытия в целом нарушают концепцию агрессивного боя. Как я объясню ниже, эта система невероятно важна для позиционирования демонов в DOOM, но совершенно неожиданным образом! Процесс разработки и выпуска Rage позволил довести все эти системы ИИ до уровня зрелости и использовать их в других продуктах. Они не только мигрировали в DOOM 2016 — в котором используется движок id Tech 6 — но и применяются в игре 2014 года Wolfenstein: The New Order компании MachineGame. Хотя эти системы уже доказали свою ценность, для использования в DOOM им необходимы были дальнейшие настройки и усовершенствования. Кроме того, дизайнерам нужно было сделать так, чтобы поведение системы находилось в контексте агрессивного боя. Поэтому давайте узнаем о дизайнерских секретах, позволивших реализовать эту философию. Теперь, когда мы знаем о внутренних системах ИИ, давайте разберёмся, как они используются для создания врагов в DOOM и подкрепления ядра дизайна. Поэтому вернёмся к четырём геймплейным столпам агрессивного боя: скорости, индивидуальности демонов, уникальности оружия и мощи игрока. Что же делает ИИ для усиления этих аспектов?

Скорость

Для начала поговорим о скорости: игрок может двигаться по миру очень быстро, и ИИ учитывает это двумя жизненно важными способами: стрельбой и расположением врагов. Точность демонов намеренно снижается в зависимости от скорости игрока: чем он быстрее, тем сложнее в него попасть. Это достигается благодаря взвешенному распределению точности выстрелов — демоны намеренно промахиваются, когда игрок движется на максимальной скорости, и становятся точнее, когда он замедляется. Кроме того, эта система связана с уровнями сложности: при высокой сложности точность демонов быстрее компенсирует перемещения игрока. И ещё один штрих: враги не стреляют по взрывающимся бочкам, даже если те находятся рядом с игроком, чтобы дать игроку шанс использовать их против демонов.c55e0e36c5dacb98609d312fc81f4be4.jpg Однако ещё более интересна система позиционирования ИИ в бою для поддержания своей эффективности и обеспечения свободы движения игрока. Стреляющие враги, такие как импы, какодемоны и манкубусы, активно стремятся при возможности находиться на расстоянии от игрока, чтобы атаковать издалека. В то же время игра стремится сделать так, чтобы другие враги были хорошо расположены для атаки, с учётом того, что им понадобится бежать к игроку в любой момент времени. Чтобы достичь этого, DOOM берёт систему укрытий из Rage и инвертирует её: система используется не для поиска точек укрытий, а для нахождения открытых позиций рядом с укрытиями, обеспечивающих максимальную видимость для игрока. Такие «перевёрнутые» укрытия не только позволяют демонам продолжать атаки, но и помогают игроку находить цель.

Индивидуальность

Теперь давайте рассмотрим индивидуальность демонов. В DOOM есть 16 отдельных архетипов ИИ, каждый из которых обладает уникальными поведениями и анимациями, подчёркивающими его характерные особенности. С учётом высокого темпа игры, основная цель заключается во мгновенном распознавании демонов игроком и обеспечении целостности их поведения. Вообразите Pac-Man, в котором игрок движется в 10 раз быстрее обычного, а призраки на самом деле являются адскими полчищами! Здесь просто нет места для затейливого и сложного поведения. Противники должны быть узнаваемыми для игрока и интересными для дизайнера, вываливающего их на шахматную доску боя. Эта цель достигается не только с помощью преувеличенных анимаций поведений, но также и через цели врагов и способы их достижения. Почти как в классическом DOOM, многие из ИИ имеют свои узнаваемые поведения, но подстроенные под дизайн современного DOOM: розовые демоны несутся к игроку, пытаясь протаранить его, а импы держаться в отдалении, чтобы метать фаерболлы. Кроме того, анимации созданы таким образом, чтобы подчеркнуть характерность каждого архетипа демона. В дополнение к реализации плавного смешивания, AnimWeb также выполняет проверки анимаций в реальном времени, чтобы убедиться, что анимация может уместиться в кривую движения демона. Поэтому импы могут прыгать на короткие и дальние расстояния, используя одинаковую анимацию, которая настраивается в реальном времени, а рыцари ада выполняют проверки, чтобы при атаках не пересекаться с окружающими объектами. Кроме того, каждый демон выполняет процесс под названием Focus Tracking: вычисляет подходящий поворот головы, груди и бёдер в IK-риге, чтобы поворачиваться и смотреть на игрока правильным образом. Кроме всего этого DOOM снова возвращает перепалки между врагами, которые использовались в оригинальных играх серии: система фракций фиксирует взаимодействия и поведения между отдельными архетипами ИИ. Она использует систему правил, определяющую, как и почему одна фракция демонов начинает злиться на другую. Кроме того, она фиксирует такие события, как случайный или намеренный урон, наносимый такими фракциями друг другу, и использует их для запуска боёв между врагами. Фракции внутри системы заимствуют повадки других фракций, поэтому пока импы страдают от лап манкубусов и баронов, одержимые солдаты UAC равно ненавидимы всеми демонами и во внутренних перепалках обычно оказываются убитыми первыми.

Уникальность

Теперь поговорим об уникальности каждого оружия. ИИ DOOM реагирует, когда игрок использует подходящее оружие для подходящего демона. В основном это реализуется системой продолжительного урона в секунду и системой управления состояниями боя. Она делает так, что демоны уязвимы к выстрелам из определённого оружия, и опасаются этого оружия. Мои источники объяснили, что внутри DOOM используется система продолжительного DPS (damage per second), вознаграждающая игрока за продолжительную агрессию к конкретному демону. Урон становится длительным, что запускает болевую реакцию демона. Джейк Кэмпбелл рассказывал об этом в своём докладе на GDC. Эти болевые реакции могут быть очень разнообразными: от небольших судорог, немного влияющих на точность прицела ИИ, до замирания и отступления, прерывающего текущее поведение ИИ.6def4a86254c4195e0219838c2752d07.jpg Чтобы ещё больше подкрепить эту систему, отдельные виды оружия запускают реакцию в разных типах врагов. Например, при выстреле из штурмовой винтовки импы перестают двигаться, а зомби при выстреле из дробовика быстро переходят в состояние пошатывания, в котором их легко убить. Мои источники сказали, что на этапе разработки какодемон мог застрять в постоянной реакции замирания при непрерывной стрельбе из минигана. Это было сделано намеренно, чтобы отдать честь оригинальному DOOM, но перед выпуском игры от этого отказались.

Мощь игрока

Наконец, несмотря на несметные полчища демонов и исходящую от них опасность, концепция агрессивного боя всегда должна стремится наделять игрока мощью. Поэтому игра должна сохранять баланс и ритм боя, обеспечивающие постоянное нахождение игрока в потоке. Для этого DOOM использует боевую систему, заставляющую демонов спрашивать разрешения для нападения на игрока. Это реализовано через систему токенов: каждый тип атаки — рукопашный, дальний и так далее — имеет в каждый момент времени ограниченное количество токенов. Чтобы совершить атаку, демон должен запросить токен, а после использования вернуть его системе. На каждом уровне сложности есть свой набор значений токенов для каждого типа атаки, создающий более агрессивную орду демонов и в то же время сохраняющий сбалансированность благодаря ограничению на количество одновременно атакующих демонов. Забавно в этой системе то, что демоны могут воровать токены друг у друга, если чувствуют, что способы использовать их более эффективно в текущий момент времени. Основная причина этого в том, чтобы заставить демонов рядом с игроком атаковать его, а не стоять рядом с глупым видом.75b8c9b6de1a8d790ff9213abc31b73a.png Кроме того, дизайнеры осознали, что не будет справедливо, если демоны будут атаковать, когда игрок не может ответить. Поэтому во время выполнения glory kills игрок неуязвим, а искусственный интеллект не имеет права начинать новое поведение атаки, пока glory kill не завершён. Наконец, glory kills ценны для игрока тем, что дают здоровье, а в случае убийства бензопилой — и боеприпасы! При glory kills игрокам всегда выпадают предметы, а большие демоны дают ещё больше жизни. Однако выпадающие боеприпасы в основном постоянны, потому что игра хочет, чтобы игрок продолжал осваивать свой арсенал и использовал наилучшее оружие в текущих условиях. Поэтому если вы используете для расправы над рыцарем ада бензопилу, то это не даст вам в результате больше боеприпасов! Возвращение DOOM в 2016 году оказалось триумфальным, но как мы только что убедились, это произошло не случайно: благодаря годам работы над игровым ИИ демоны ада восстали в полную силу. Эта игра — чёткий пример использования классических техник ИИ наряду с дизайнерскими инструментами, подкрепляющими ядро игрового процесса. Как и вся франшиза в целом, DOOM заявляет, что хотя некоторые инструменты создания ИИ уже вышли из моды, всё ещё остаётся потенциал для создания интересного нового игрового процесса, привлекающего и современных игроков. Пока писалась эта статья, было заявлено о разработке DOOM Eternal с ещё большим количеством архетипов демонов. Ад на земле никогда не был таким захватывающим.Loudy, K. and Campbell, J. 2018.  Embracing Push Forward Combat in DOOM. Game Developers Conference, 2018. Cambell, J. 2017 Bringing Hell to Life: AI and Fully Body Animation in DOOM. Game Developers Conference, 2017.Используемые источники:

  • https://pikabu.ru/story/yevolyutsiya_monstrov_iz_doom_4046286
  • https://rutab.net/b/doom-2016/2019/07/24/kiberdemon—boss.html
  • https://habr.com/post/419537/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации