Gamedev Андрей Верещагин
10 228

Создание боевой системы для JRPG — опыт авторов Grimshade

Трудности с интерфейсами и честная сложность.

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

Grimshade — ролевая игра от российской студии Talerock. В ней игроку необходимо управлять командой разношёрстных героев (среди которых даже есть огромный барсук с винтовкой), стремящихся спасти фэнтезийное королевство Ри'Фа.

Несмотря на то, что игру разрабатывали в России, её пошаговая боевая система напоминает скорее о японских RPG, чем о западных. В своей колонке для DTF авторы Grimshade рассказали о тонкостях создания боёвки.

Начиналось всё с классического представления боёв в JRPG, когда наши ребята с одной стороны, а противники — с другой. Мы последовательно обмениваемся ударами, проигрывая всякие анимации и визуальные эффекты. В какой-то момент нам захотелось добавить всему этому некоторой тактической глубины.

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

Прототип экрана боя

Много раз мы задумывались о том, чтобы всё-таки объединить поля и разрешить подходить к врагам (ох, сколько проблем это могло бы решить!). Однако каждый раз мы приходили к выводу, что это «не канон». Довольно забавно, что на Disciples, как на референс, мы совершенно не смотрели, и уже много позже увидели, насколько наша игра оказалась близка к ней.

Следующим важным решением был отказ от вертикального роста. Для многих из нас главным мотиватором и причиной это сделать был Винсент Валентайн из Final Fantasy VII. Было невероятно обидно, что такой шикарный дизайнерски и механически персонаж попадал в команду игрока так поздно, поэтому, чтобы его прокачать, надо было потратить кучу времени. Наверняка, это не единственный пример и нормальная практика для JRPG, но вспомнился нам именно он.

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

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

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

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

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

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

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

Выходит, что опыт от игры мы переносим с персонажей на самого игрока. Чем лучше ты понимаешь механики, поведение противников, умеешь рассчитывать ходы — тем лучше у тебя получается сражаться. И тем больше удовольствия ты получаешь от игры. Но весь опыт перечёркивается тем, что тебе тупо не повезло и твой «дамагер» в ключевой момент, имея шанс атаки 95%, всё равно промахнулся. Так бывает. Вероятность, бессердечная ты сука.

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

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

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

Значит, нужна какая-то плата. Мана? Усталость? Да, но игрок всё равно большинство боёв будет начинать со своей «Большой Берты», а уже выдохшись (или для добивания слабеньких противников) доставать Дерринджер. Значит, кроме маны или усталости, нужно что-то ещё. Так появилась наша шкала времени.

И если мысль о том, что в игре есть некоторая длительность навыков довольно проста и не нова (например, была в «Героях 5»), то дальше начинаются нюансы. Все герои «живут» по некоторой шкале времени, и каждый раз, когда совершают какое-то действие, оказываются на новой точке на этой шкале. Но где «живут» статусы? Например, «отравление». По-хорошему, у статусов должно быть своё время действия, например, 20 условных единиц времени. Но когда они срабатывают?

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

Должны ли мы показать игроку, что и когда произойдёт: когда кто-то получит урон, и когда статус закончит действие; доживёт ли вон тот парень до своего хода? Конечно, ведь невозможно построить тактику и спланировать действия, если ты не понимаешь, что будет дальше. И тут начинается интерфейсный ад.

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

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

Что делать? Перевешивать срабатывания на начало хода персонажа? Хорошо, но тогда медленный герой может использовать медленный навык и вообще не заметить, что он был подожжён. А быстрый персонаж сгорит от своей поспешности. Буквально. Значит, длительность нужно перевешивать с единиц времени на количество срабатываний. Тогда и медленный, и быстрый герои получат одинаковое количество урона. И бафы усилят им одинаковое количество атак. На том и порешили.

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

Второй раз мы подумали о настольных играх, когда вводили «Уклонение». Отказавшись от шансовых механик, мы, по сути, лишили персонажей возможности избегать урона, и тогда бой превращался бы в простое сравнение: мой DPS против твоего здоровья. Не очень похоже на тактику.

Хорошо, значит, нужно добавить возможность защищаться со 100% вероятностью. Но не всегда же? Значит, нужно считать количество блоков и уворотов (изначально мы их прямо разделяли: есть атаки, которые невозможно заблокировать, но можно уклониться, и наоборот; от этого отказались — лишний параметр, лишний раз нужно следить за тем, что за атаки, лишние анимации).

Выдавать их один раз за бой — не лучшее решение. Всю первую часть боя никто никого пробить не может, а дальше начинается кровь, кишки и сравнение DPS vs. HP. Так появились раунды — отрезки времени, в которые танки могут снова получить свою защиту. И, конечно, появились навыки, которые «ходят мимо» этих жетонов уклонения. Зачем вообще придумывать правила, если не нарушаешь их хоть иногда?

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

Честные рейкасты? Тогда игроку пришлось бы запоминать довольно много паттернов: из какой клетки куда можно прострелить при какой диспозиции (ведь нужно иметь возможность и защищаться от этого, прикрывать слабые задние ряды танками).

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

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

Рассматривали варианты и с захватом чужого поля, и с ближней атакой, которая бьет вдаль, и ещё несколько куда более диких вариантов, о которых даже говорить не хочется. Какие-то варианты мы даже успели запрототипировать и пощупать. Увы, почти все они вызывали нарекания: или ломалась динамика, или восприятие, или ещё чего.

В итоге, взбодрили значимость первого ряда тем, что прикрытие дают не все, а только особые защитники. И только когда стоят в первом ряду. А заодно сделали так, что ближние атаки проносят урон в «Напряжение» (это та самая мана или усталость) всегда, в отличие от стрелковых. Появилось больше смысла стоять в первом ряду, но, честно говоря, этой частью мы жутко недовольны.

Во второй части игры мы планируем делать все анимации ближних атак с «накоплением». Если никого нет вблизи, герой прыгает, подскакивает или бежит к противнику вдали и бьёт, после чего отскакивает. Мы бы и в этой части это сделали (программисты даже всё создали для этого), но мы тупо не успевали переделать анимации и пересобрать ИИ, чтобы он мог этим вменяемо пользоваться. Вообще, конечно, нехватка времени — самый главный разрушитель веселья.

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

Но просто поддавки нас не устроят — обязательно нужно, чтобы противник изображал бурную деятельность и напряжение, создавал опасные моменты (на самом деле, нет, они должны только выглядеть опасными), но в конце обязательно проигрывал. Или игра должна бросать мне вызов? Я и так сражаюсь с ненастоящими противниками, может быть, они хотя бы попробуют сопротивляться мне в полную силу?

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

Весь ИИ мы настраивали под максимальную мерзопакостность. У вас кто-то остался без защиты? Напрасно вы так! Зазевались и у кого-то слишком мало здоровья? Можете с ним попрощаться. Наш ИИ очень пессимистичен. Он не верит в свою победу. Он знает, что вы будете загружаться, пока не победите его, и он обречен. Он будет всеми силами стараться «подгадить» вам: искать самого слабого, фокусировать урон, добивать раненых.

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

На самом деле, мы сами не до конца понимали, как пользоваться нашей боевой системой, пока не поиграли в её околофинальную версию. Самым главным учителем для нас самих в итоге оказался первый босс — король Вильгельм. Геймдизайнеры пытались его убить, кажется, неделю (параллельно ещё что-то докручивали в ИИ, навыках и прочем).

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

Это, кстати, в итоге создало проблему с финальным боссом. Его тоже балансировали относительно сетапа, когда игрок забил на все сайд-квесты, пробежал только основной и к боссу вышел с очень малым набором скиллов и предметов.

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

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

Если честно, нам стало очень страшно. Ведь нам нужно было достаточно дотошно рассказывать игроку о том, что и как у нас происходит. И стены текста в обучении — это совсем не то, что мы хотим видеть, когда нашли вечерок, чтобы посмотреть на новую игру. Причём, это первые часы, которые так важны!

На самом деле, мы до сих пор не понимаем, справились ли мы. Есть довольно много положительных отзывов от игроков, которые поняли и разобрались — они греют наши души. Но, конечно, есть и много негативных отзывов, в которых боевую систему называют «имбалансной», поломанной и однообразной. Для нас это в первую очередь значит, что игрок, скорее всего, не до конца разобрался в механиках, и это наше упущение. Может быть, мы найдём в себе силы и ресурсы что-то с этим сделать. Было бы здорово.

Так или иначе, кажется, нам удалось сделать если не уникальную боевую систему, то, по крайней мере, боевую систему с индивидуальностью. Если пристально на неё посмотреть, конечно, можно увидеть фрагменты других систем. Мы совершенно не скрываем, чем мы вдохновлялись. И было бы здорово, если бы и наша «боёвка» могла вдохновить кого-то ещё. Чтобы они сделали больше и лучше и не допускали наших ошибок. Вдохновлять других — это ли не цель любого искусства? Ну и ещё денег заработать, конечно.

#опыт #геймдизайн #лонг

{ "author_name": "Андрей Верещагин", "author_type": "editor", "tags": ["long","\u043b\u043e\u043d\u0433","\u043e\u043f\u044b\u0442","\u0433\u0435\u0439\u043c\u0434\u0438\u0437\u0430\u0439\u043d"], "comments": 31, "likes": 62, "favorites": 117, "is_advertisement": false, "subsite_label": "gamedev", "id": 47457, "is_wide": true, "is_ugc": false, "date": "Mon, 22 Apr 2019 16:54:11 +0300" }
{ "id": 47457, "author_id": 22254, "diff_limit": 1000, "urls": {"diff":"\/comments\/47457\/get","add":"\/comments\/47457\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/47457"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }

31 комментарий 31 комм.

Популярные

По порядку

Написать комментарий...
–3

Создание боевой системы для JRPG

игра от российской студии

Окей.

Ответить
12

Не, быть таким душным не окей.

Ответить
1

Не будь, тебя не никто не заставляет.

Ответить
5

Справедливости ради, тут википедия подсказывает:

"Определение игр как «японских» не ограничивается страной выпуска игры: так, некоторые выпущенные в США и Европе компьютерные ролевые игры описывались как игры «в духе JRPG»[5] — например, Anachronox и Septerra Core, а японскими разработчиками выпускались и игры «западного образца», такие, как Dark Souls и Dragon's Dogma".

Ответить
3

Определение игр как «японских» не ограничивается страной выпуска игры

некоторые выпущенные в США и Европе компьютерные ролевые игры описывались как игры «в духе JRPG»

в духе JRPG

Создание боевой системы для JRPG

Что-то все еще не сходится.

Ответить
1

Из разряда "DaRK SoULS iS aCtUaLLy a JrPG yOu GuYs"

Ответить
–2

С суолсборнами пусть разбираются их фанаты.

Ответить
3

Худшее что есть в пошаговых играх это сидеть и ждать когда все мобы сделают свой ход. Помню в Лост Одесси это было прям до боли. На тебя надает свора жуков и ты сидишь и уныло ждешь пока каждый рыпнется. Не понимаю почему по-умолчанию в эти вещи не вставлена опция 2-4х скорости. Так вот по теме, почти все жрпг что я видел - пошаговые. Отсюда моя боль.

Ответить
11

Ох, помню как проходили бои в Дене (Fallout 2). Ждешь пока каждый наркоман, приняв дозу винта, убегает еле волоча ноги по 15 секунд за ход.

Ответить
5

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

Ответить
0

Скажи это финалкам!

Ответить
0

Худшее что есть в JRPG это их боевые системы. Только портят хорошие квесты.

Ответить
0

Сыграй в пепер марио

Ответить
0

А у нас есть педаль "ускорить все вдвое", так что, надеемся, от этой боли Гримшейд вас избавит.

Ответить
0

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

Не смог из-за такой фигни пройти шиннинг форс. Это прям адище. Когда твоя тима из 6 человек, вроде бы, против 20-30 врагов это просто ппц. Причем персонажи двигаются по разному, в зависимости от каких-то хар-тик кто-то ходит раньше и тд. И вот сходив одним героем, ты ждешь пока ии подвинет своих. А он может и не подвинуть, а просто потратить 15 секунд твоего времени на стояние врага. И так в каждой мать его битве. А шиннинг про битвы!

Ответить
0

FF13 в этом плане была отдушиной - некоторые бои реально длились 2 секунды.

Ответить
1

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

Абсолютно идентичная механика с настолкой Pixel Tactics. Многие другие ваши механики тоже похожи. Думаю, если бы ознакомились с ней до начала разработки, то избежали бы кучи граблей :)

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

Ответить
0

У нас Pixel Tactics живут на стеллаже в студии с самого начала разработки. Мы то обращались к ним, то отходили в сторону. Но в конце статьи мы же говорим, что это не вот вам супер-уникальное-новое, можно увидеть, на чем мы строили систему, так что все честно)

Ответить
1

Так я и не обвиняю в использовании чьих-то механик. Просто удивлён, что так долго к этой конкретной реализации шли :)

Ответить
0

со стороны всегда так кажется, а когда пробуешь сделать, то как-то всё не так и не эдак

Ответить
1

Похоже на пиксель тактикс

Ответить
–5

Пук

Ответить
0

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

Ответить
0

Либо игру брали казуальщики, которые JRPG знают только по играм слепленным на RPG Maker'е.

Ответить
0

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

Ответить
0

Зато боевка понятней, кликнул сюда, кликнул туда и все.

Ответить
1

Hold Space to win

Ответить
0

И я о том:)
Зачем играть в то, что заставляет напрягать извилины, когда есть однотипные "кликеры"

Ответить
0

Ток в этих кликерах дохера много кликать надо, не казуально

Ответить
0

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

Ответить
0

Здорово, молодцы!
но по скриншотам картинка иногда настолько темновата, что ничегошеньки не видно

Ответить
0

Прямой эфир

[ { "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": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "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, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "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": 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" } } } ]
Гейб Ньюэлл наконец-то анонсировал то,
чего все так долго ждали
Подписаться на push-уведомления