Gamedev
System1
2432

Процесс создания уровней для Смерть Шпионам 2

Привет всем!

В закладки
Аудио

В статье рассказывается о процессе контент продакшена уровней во время разработки игры Смерть Шпионам 2.

Небольшая ремарка:

Игра использует полностью проприетарную технологию созданную в студии Haggard games, игровой движок поддерживал платформы PC и Xbox360.


Комплект включал в себя: SHAD 3d engine с AI системой, редактор уровней Smersh Editor, анимационный редактор, плагины для конвертации моделей и ландшафта, вспомогательные инструменты упрощающие проверку контента на ошибки и редактор скриптов.

Смерть Шпионам 2 изначально задумывалась с возможностью игры за 3х героев. Но связи с определёнными событиями игра сменила название на Alekhine's Gun, был существенно переработан оригинальный сценарий с сохранением геимплея только за Семёна Строгова.


В данный момент разрабатывается новая часть игры на движке Unreal Engine 4.

А теперь о самом процессе:

Структурно игра состоит из отдельных независимых локаций — уровней. Процесс работы над созданием нового уровня разбивался на несколько последовательных этапов:

  • Этап 1. Формирование концепта и основных целей уровня, сбор референсов, первичный пул задач по контенту.
  • Этап 2. Blockout прототип уровня и ландшафта, просмотр прототипа и внесение необходимых правок.
  • Этап 3. Сборка уровня в Smersh Editor, расстановка объектов окружения, создание финальных структур уровня, замена blockout на финальные модели, звуки.
  • Этап 4. Расстановка ботов, скриптование игрового процесса и освещение.

Формирование концепта и основных целей уровня

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

Созданием концепта геимплея для каждого уровня занимался game designer он же по совместительству был программист AI системы в игре.

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

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

Сценарий обсуждался в рабочей группе состоящей из сценариста, game designer (AI programmer) и project lead для достижения финальной формализованной версии адаптированной под возможности игрового процесса и реальные ресурсы команды.

Ниже приведен фрагмент сценария для оригинальной Смерть Шпионам 2 в варианте игры за трёх персонажей.

Версия от сценариста​
Версия после правок​ геим дизайнером

Очевидно, что сценарий в версии от сценариста и сценарий адаптированный геим дизайнером под игровой процесс существенно отличаются.

​Вилла Розоутера в редакторе уровней

Одновременно с процессом адаптации сценария происходит поиск и подбор референсов, о котором я рассказывал в прошлый раз.

Формируется первичный пул задач для команды художников, который на данном этапе состоял в основном из моделей наполнения уровня: фурнитура, декор, техника, отдельные объекты, которые не имели прямого отношения к формирующей структуре уровня, но требуемые для наполнения уровня или как его обычно называют называют - props content.

Постановка задачи художнику состояла из:

  • Референсы (картинки, редко - видео), текст описывающие модель с визуальной и смысловой стороны.
  • Технические ограничения в виде максимального количества треугольников, допустимого количества и максимальные размеры текстур.
  • Название модели, название текстур, расположение pivot point.
  • Reuse (использование уже существующих на данном уровне) текстур, если это было возможно в контексте модели.
  • Сроки на выполнение задачи.
  • Необходимость unrwrap под lightmap.
  • Дополнительную информацию необходимую для создания модели, например секционность или специфику по использованию разных текстур.
  • Blockout модель прототипа (для структур уровня).
  • Необходимость сборки в единый mesh и одну текстуру.

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

В среднем на типичные работы по фурнитуре закладывалось: от 0.5 до 1-2 дней в зависимости от комплектности.

Для сложных моделей таких как автомобили, самолёты, сложные скульптуры и т.д. 3-4 рабочих дня.

Модели создавались в соответствии с принятыми техническими условиями и все художники их знали.

Непосредственно интеграция в проект проходила после того, как контент полностью удовлетворял техническим условиям, отсутствовали артефакты / bugs и модель соответствовала художественно-смысловой задумке.

Ниже пример возможного представления ТУ:

​Пример технических условий для props

После того, как сценарий был полностью проработан и формализован, геим дизайнер выдыхал и передавал мне base mission plan =)

Base mission plan - документ описывающий все основные задачи на уровне, ключевые места, особенности и примерные геометрические расстояния, если таковые были важны для игрового процесса.

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

Часть base mission plan​
​Часть base mission plan

Blockout прототип, ландшафт

Следующий этап - создание прототипа уровня.

Пример blockout

В мою задачу входило быстро превратить base mission plan в геометрический прототип, найти и подобрать все необходимые материалы, чтоб воссоздать требуемый сеттинг уровня с аутентичным наполнением, сформировать задачи для команды художников и распределить их.

Прототип уровня, он же blockout - низкополигональная геометрия максимально быстро созданная из примитивов без существенной детализации в 3d редакторе с использованием base mission plan, учётом референсов и сеттинга уровня.

У меня были некоторое количество шаблонов low poly моделей с размерными оконными, дверными проёмами, лестницами, что частично ускоряло процесс создания blockout версии уровня.

Обычно я создавал его в виде единого целого и конвертировал в игру, как одну большую 3d модель. Затем мы его просматривали и вносили необходимые правки. В комплекте могла быть и первая грубая итерация ландшафта, если он требовался по задумке уровня.

Для чего нужен Blockout прототип:

  • Позволяет на стадии просмотра проверить корректность, наличие, размерность и пропорциональность всех необходимых структур и проходов.
  • Минимизировать вероятность не стыковок для сложных по структуре уровней.
  • Быстро внести необходимые правки по результатам просмотра.
  • Оценить “попадание” в сеттинг уровня.
  • Оценить объем работы, сгруппировать и распределить задачи между командой художников.
  • Является размерным шаблоном для создания финальной геометрии и использовался художниками в виде отправной базовой геометрии с уже расположенными дверными, оконными, стыковочными и др. элементами.
  • Позволяет рассчитать точные места расположения дорог, и других уникальных объектов, требующих значительной по времени ручной работы с ландшафтом.
  • Задать корректное наименование для структур, чтобы не возникала путаница в контенте.

О ландшафте:

В Smersh Editor были достаточно удобные инструменты для работы с ландшафтом - например, кисти для редактирования terrain height, блендинга между текстурными слоями, добавление материалов, foliage и т.д.

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

Такие задачи, как прокладка и врезка дорог / гор / скал, вырезание части ландшафта и т.д. выполнялись вручную в 3д редакторе. Это достаточно хардкорная ручная работа, особенно, если требовалось проложить и врезать несколько сотен метров дорог или тропинок.

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

Ландшафт создавался в 3d редакторе, обычно на основе вручную нарисованного height map и необходимым displace. Отрезались или вырезались нужные участки сетки и задавались UV координаты для соответствующих слоёв. Затем ландшафт конвертировался в формат поддерживаемый Smersh Editor.

Далее уже непосредственно в редакторе подвергался раскраске текстурами и блендингу в местах перехода текстур для реализации бесшовности.

Поддерживался import / export ландшафта между 3d редактором и Smersh Editor. Ландшафт - отдельная сущность и с ним можно было работать независимо от остальной геометрии уровня.

​Раскидываем кистью мусор по ландшафту

Создание игрового уровня, расстановка объектов окружения

Blockout прототип разрезался на отдельные модели с присвоением корректного названия, каждая комната или секция выгружалась, как отдельная модель.

Некоторые большие и сложные комнаты резались на отдельные составные части. Подвергались сегментации и большие по площади модели фасадов (outdoor) зданий.

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

Одновременно с этим формировался второй пул задач для художников, но уже по структурам самого уровня.

Производилась сборка уже боевого уровня в редакторе уровней из blockout конструктора, плюс создавались специальные объекты типа VisAreas и порталы с указанием необходимых свойств, расставлялись двери и т.д.

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

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

Что представлял из себя готовый контент структуры уровня:

  • Высокополигональная модель со всеми необходимыми текстурами: diffuse, normal map, specular.
  • Развертка под освещение (lightmap) на 2ом UV канале.
  • Collision shape: геометрия по которой происходит проверка на столкновение с капсулой персонажа в игре.
  • VisArea: отдельная 3д модель, созданная в соответствии с технологическими требованиями, необходимая для интеграции комнаты в игру.
  • Portal: созданный средствами Smersh Editor объект для дверных, оконных проёмов или связывающий между собой две VisAreas.
  • Опционально: Стыковочные якоря в геометрии - треугольники, призванные облегчить и ускорить процесс стыковки моделей в единое целое при сборке в редакторе уровней.

VisAreas требовались для отсечения видимости комнат и моделей внутри, использовались в AI системе для определения в какой комнате находится игрок, а так же при настройке визуальной части - например, можно для любой VisArea и соответствующей ей комнаты задать свой ambient color.

К сожалению VisAreas и порталы должны были быть выполнены в строгом соответствии с технологическими требованиям, и малейшее отклонение приводило к некорректной работе в игре и иногда случался настоящий батхерт с швырянием клавиатур и мышей =)

Для комнат сегментированой или многоэтажной структуры приходилось создавать несколько отдельных VisAreas связанных между собой порталами.

V​isAreas, порталы и waypoints

Уровень, пока ещё в виде blockout геометрии, но уже корректно собранный и состыкованный, отправлялся на расстановку тех самых props: стулья, столы, двери, шкафчики, фотографии на стенах и т.д.

На данном этапе, параллельно велось несколько работ:

  • Завершались задачи по созданию props контента.
  • Создавались финальные модели структур уровня на основе blockout геометрии.
  • Производилась расстановка готовых props элементов наполнения на собранном уровне, и замена blockout моделей на финальные.
  • Финализировался и доводился ландшафт.
  • Принимался и конвертировался в игру новый контент.
  • Создавались звуковые эффекты.

На заключительном этапе после расстановки всех props и объектов окружения формировались waypoints и AI areas для ботов, создавались occluders для оптимизации и т.д.

Редактор уровней поддерживал слои и можно было легко распараллеливать рабочий процесс над уровнем. Например, одновременно расставлять props наполнение в отдельном слое, создавать VisAreas и порталы в другом слое, расставлять звуки в третьем и затем всё это объединить в один финальный вариант уровня, выгрузив слои.

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

Выявленные проблемы правили и тестирование происходило заново.

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

​Финальные модели комнат
Наполнение декором​

Расстановка ботов, звуки, эффекты, освещение

Собранный, наполненный props контентом, с настроенными visareas, порталами, occluders, waypoints, AI areas и т.д .отправлялся на пред финальный этап - расстановку ботов и реализацию геимплея.

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

Освещение локации - финальный этап, завершающий наш pipeline по созданию контента игрового уровня. В зависимости от размера и комплексности уровня, процесс мог занимать от нескольких дней до двух недель.


Иногда, отдельные комнаты или же outdoor могли освещаться до того, как был реализован геимплей. Это делалось для того, чтобы понять общее настроение уровня по освещению, подобрать световые и цветовые themes и выставить необходимые источники света.

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

Так было необходимо, чтобы исключить повторные итерации по расчёту света, т.к. в процессе работы над геимплеем, некоторые объекты расстановки влияющие непосредственно на освещение, могли менять местоположение, полностью быть удалены или же добавлены на уровень в угоду игровому процессу.

Одновременно с освещением по необходимости создавались новые shaders для vfx, запекались cubemaps и настраивался post processing.

Всё освещение в игре было рассчитано средствами Smersh Editor. Для статических структур уровня и больших декоративных объектов в игре используется статическое предрасчитанное освещение на основе lightmaps.

Дополнительным небольшим этапом - была отрисовка векторной мини карты уровня, которая отображалась во время игры.

Разумеется, как и в любом сложном контенте были bugs, которые приходилось оперативно править. Чаще всего, это были проблемы связанные с UV развёрткой под освещение или же некорректно работающие VisAreas / portals.

​Без освещения
​С освещением, эффектами и финальным наполнением

Полностью освещенный и настроенный с ботами уровень считался на 100% законченным и отправлялся на хранение до момента сборки в игру.

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

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

​Полностью готовый уровень

В среднем, на создание уровня от начала работ до полностью освещенного состояния без учёта работ по имплементации геимплея требовалось ~1.5 - 2.5 месяца. Отдельные, большие уровни, например, Ракетный Бункер или Авианосец требовали больше времени на продакшен.

Количество итераций до состояние ready to fly в игру, доходило до нескольких сотен в зависимости от сложности и масштаба уровня.

Среднее количество props контента ~150 шт. Среднее количестве структур уровня: ~60 шт.

Заключение

Процесс создания уровня представлял собой waterflow подход.

На этапе создания base mission plan, геимдизайнер нёс ответственность за то, как будет играться уровень в финале. Возможности по времени, что-либо кардинально поменять после того, как уровень был готов, фактически не было.

Список работ составлялся под текущий уровень и не учитывал будущие уровни.

Художники начинали работу над props контентом до того, как был сформирован base mission plan и blockout уровня.

Существовал common набор ассетов, которые могли использоваться на всех уровнях.

На этапе сборки и наполнения уровня, рабочие процессы распаралелливались благодаря поддержке в Smersh Editor слоёв, достаточно простому процессу замены blockout на финальные модели и независимому от остального уровня ландшафту.

Корректный нейминг объектов в заданиях уменьшал путаницу в контенте.

Копии финализированного контента хранились в общем хранилище на локальном сервере.

Постановка задач для художников включала необходимую информацию для их работы.

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

Отправной точкой по созданию аутентичного сеттинга были подобранные и накопленные референсы.

Были определены технические требования, которые знали и соблюдали все художники. Те, кто иногда забывал их выполнить - получали возмущённые матюги от level дизайнера в свой адрес.

Мелкие props часто батчились в одну текстуру и единый mesh для экономии draw calls и активно использовали Reuse.

Blockout позволял существенно сократить ошибки в геометрическом планировании уровня, сформировать список и распределить объем работ.

Все принципиальные геометрические размеры были стандартизированы на весь проект.

Часть художников, после завершения работ над контентом уровня переводились на задачи по моделированию персонажей.

Уделялось пристальное внимание техническому тестированию уровня уже на этапе его первичной сборки и наполнению.

Объем максимально доступной RAM под уровень был лимитирован. В случае превышения лимита можно было выборочно уменьшить размер некоторых текстур либо использовать Reuse.

Хардкорные виды работы с геометрией ландшафта, например врезки дорог и тропинок выполнялись в 3d редакторе.

Где-то в китайском квартале​

Небольшой кейс - не стоит начинать работу над уровнями с той локации, которую игрок увидит первой в игре.

Разумнее стартовать из середины рабочего плана по уровням, а стартовую локацию оставить уже на финальные этапы. Дело в том, что в концу работы над проектом накопится достаточно много материалов, эффектов, контента и опыта у команды, что позволит создать стартовую локацию в максимальном качестве.

За прогрессом разработки Death To Spies X можно следить на официальном форуме.

P.S: В качестве небольшого бонуса для тех, кто дочитал - Blockout геометрия CTF уровня (в fbx) c пояснениями.

Данный прототип был сделал достаточно давно, как тестовое задание:

На этом всё, благодарю за внимание.

Всем не скучной разработки!

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "System1", "author_type": "self", "tags": [], "comments": 24, "likes": 61, "favorites": 158, "is_advertisement": false, "subsite_label": "gamedev", "id": 95863, "is_wide": false, "is_ugc": true, "date": "Fri, 24 Jan 2020 13:31:12 +0300", "is_special": false }
0
{ "id": 95863, "author_id": 126843, "diff_limit": 1000, "urls": {"diff":"\/comments\/95863\/get","add":"\/comments\/95863\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/95863"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }
24 комментария
Популярные
По порядку
Написать комментарий...
9

Сначала подумал первый скриншот из игры Saboteur

Ответить
0

В Saboteur другая палитра, более теплая, Alekhine's Gun ближе картинкой к Mafia II скорее

Ответить
2

Ого, клевая статья.

Но, мне одному кажется что редактор СМЕРШ как то слишком подозрительно похож на CryEngine 2?
Ладно компановка интерфейса, но блин даже иконки и некоторые гизмы (те же якоря)

Ответить
1

Inspired by CryEditor =) 

Ответить
0

У меня какие то вьетнамские флешбэки, открыл скриншот и чуть не нажал на ctrl+G.

(и чем больше вглядываюсь тем мне больше кажется что тут просто передернуты иконки и гизмы из края, иконки ладно - но якоря ведь нет особо смысла 1в1 моделить как в CryEngine 2...)

Ответить
0

Ctr+H тоже работало )

Ответить
0

Inspired by CryEditor =)

Ваша внутренняя технология дальше не будет развиваться? Тем, кто работал над движком и редактором не печально хоронить уйму вложенных в её разработку сил? 

Ответить
0

Shad engine и Smersh Editor развиваться не будут и новая часть игры создаётся полностью на Unreal Engine 4. В текущих реалиях создавать свою конкурентоспособную технологию, полагаю практически не реально за обозримые сроки

Ответить
1

Недавно подумывал поиграть в первую часть, когда они с аддоном выходили, проходил с удовольствием. Alekhin’s gun честно начал, но слишком уж сыро. Было бы классно получить продолжение, особенно если такого же качества как и оригинал.

Ответить
0

Alekhine's Gun - высер геймдева, на фоне оригинальной линейки Смерть Шпионам (две части).

Если СМЕРШ я прошел с кайфом и удовольствием ещё хз когда, то в это играть даже стыдно. Графически проседает, геймплейно я не почувствовал какого-то хардкора. После первой миссии удалил нахрен.

Ответить
0

Ты ждал хардкора от первой миссии?

Ответить
0

Я ждал знакомого и нормального геймплея, а не это чудовище.

Ответить
0

Не играл, но он ведь так и не стал "русским хитманом", да? По качеству всмысле

Ответить
0

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

Ответить
1

У проекта достаточно не простая история релиза. Тут однозначно трактовать сложно.

Ответить
0

Первый СМЕРШ с аддоном - греют душу, и вообще ничо такие проекты, не стыдные. Но вот последнее..

Ответить
0

Здесь могу лишь отметить, что AG фактически доводился до релиза силами двух человек. Команды, которая работала над оригинальной СШ уже не было. 

Ответить
1

Да, слышал/читал что-то такое, когда вдруг вышла эта игра, а не изначально анонсированная. Полез читать - ну и все понял. 

Ответить

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovz", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "chvjx", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "chfbl", "p2": "gnwc" } } } ]
{ "jsPath": "/static/build/dtf.ru/specials/DeliveryCheats/js/all.min.js?v=05.02.2020", "cssPath": "/static/build/dtf.ru/specials/DeliveryCheats/styles/all.min.css?v=05.02.2020", "fontsPath": "https://fonts.googleapis.com/css?family=Roboto+Mono:400,700,700i&subset=cyrillic" }