«Грязные» приёмы разработчиков игр

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

В закладки

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

Фальшивая батарея

Игра Super Time Force использовала почти всю доступную память Xbox 360. Из-за функции перемотки времени игре приходилось сохранять информацию обо всех внутриигровых объектах — врагах, пулях, платформах, взрывах, — в каждый отдельный момент времени.

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

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

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

С этой проблемой разобрались ещё более простым способом— когда память приближалась к лимиту, игра вставала на паузу, а на экране появлялась надпись «низкий заряд батареи контроллера». Затем игра перенаправляла игрока на экран выбора уровней.

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

Кеннет Йонг
технический директор студии Capy Games

Невидимые белки

Геймдизайнер Артур Бруно вспоминает о проблеме, с которой он столкнулся при создании Titan Quest. Система игры не позволяла устанавливать задержку для действия — если какой-то триггер активировался, то действие должно было произойти немедленно, а не через пять или десять секунд.

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

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

Немного тишины

Разработчик Кит Кайзершот, работавший над Mega Man Legacy Collection для 3DS, столкнулся с загадочным багом. При запуске игры первый звук, который слышал игрок, искажался до неузнаваемости — вне зависимости от того, что это был за звук.

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

В конце концов Кит просто добавил в начало секунду тишины. Всё заработало.

Лишний счетчик

Мартин Тёртон работал над «одной гоночной игрой» для PS2 и PSP. В какой-то момент департамент контроля качества пожаловался, что машина реагировала на действия водителя немного по-другому — не так, как в других версиях игры.

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

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

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

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

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

Спасительная кнопка

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

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

Мир из остатков моста

Рассказывая о работе над игрой Grim Dawn, Артур Бруно вспоминает, как на начальном этапе разработки, когда в команде ещё не было художника, он пользовался услугами фрилансеров, тратя личные сбережения.

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

Вскоре понадобились новые элементы окружения — но художника и моделера в команде всё ещё не было, а личных сбережений Бруно уже не хватало.

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

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

#игры

{ "author_name": "Никита Евдокимов", "author_type": "editor", "tags": ["\u0438\u0433\u0440\u044b"], "comments": 40, "likes": 64, "favorites": 1, "is_advertisement": false, "subsite_label": "flood", "id": 30006, "is_wide": false }
00
дни
00
часы
00
мин
00
сек
(function(){ var banner = document.querySelector('.teaserSberbank'); var isAdsDisabled = document.querySelector('noad'); if (!isAdsDisabled){ var countdownTimer = null; var timerItem = document.querySelectorAll('[data-sber-timer]'); var seconds = parseInt('15388' + '59599') - now(); function now(){ return Math.round(new Date().getTime()/1000.0); } function timer() { var days = Math.floor(seconds / 24 / 60 / 60); var hoursLeft = Math.floor((seconds) - (days * 86400)); var hours = Math.floor(hoursLeft / 3600); var minutesLeft = Math.floor((hoursLeft) - (hours * 3600)); var minutes = Math.floor(minutesLeft / 60); var remainingSeconds = seconds % 60; if (days < 10) days = '0' + days; if (hours < 10) hours = '0' + hours; if (minutes < 10) minutes = '0' + minutes; if (remainingSeconds < 10) remainingSeconds = '0' + remainingSeconds; if (seconds <= 0) { clearInterval(countdownTimer); } else { timerItem[0].textContent = days; timerItem[1].textContent = hours; timerItem[2].textContent = minutes; timerItem[3].textContent = remainingSeconds; seconds -= 1; } } timer(); countdownTimer = setInterval(timer, 1000); } else { banner.style.display = 'none'; } })();
{ "id": 30006, "author_id": 61917, "diff_limit": 1000, "urls": {"diff":"\/comments\/30006\/get","add":"\/comments\/30006\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/30006"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199791 }

40 комментариев 40 комм.

Популярные

По порядку

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

За первый оторвать бы разрабам руки.

Ответить
9

Поликостылизм, инкостыляция, накостыление

Ответить

Комментарий удален

6

Костыли костылики.

Ответить
5

Ещё, например, в серии игр Far Cry первый выстрел врагов всегда будет мимо.
Чтобы у игрока было время спрятаться и начать бой "на равных".

Ответить
0

Ого, не знал)) надо проверить, лол))

Ответить
0

Это так же в стандартном сапёре из виндовса — в первом открытии клетки никогда не будет бомбы. А вот в других версиях можно с первого хода взорваться)

Ответить
0

Вот тут я не согласен. Сапер рандомно поле собирает и если вам везло с первого раза не подорваться, то я завидую вашему 6му чувству ибо у меня не так все))

Ответить
0

Рандомно, да, но «Мины расставляются после первого хода, поэтому проиграть на первом же ходу невозможно» © Вики. Возможно у вас был неправильный сапёр)

Ответить
–11

Ребят, может вы не будете мигрировать с DTF? Я понимаю что на DTF целевая аудитория умом ещё не открепла и от их комментариев хочется миксером в суфле глаза взбить, но неужели нет другого годного контента ?

Ответить
75

А мне понравилось, познавательно. Хоть как-то разбавляет статьи о биткоине ))

Ответить
0

Это точно!

Ответить
7

Не понял, к чему комментарий. Статьи рубрики «Рынок игр» на VC давно. Не нравится — идите мимо.

Ответить
–23

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

Вы так каждому клиенту говорите - "не нравится качество наших услуг? Засуньте своё мнение глубоко и надолго!" ? Интересуюсь чисто из любопытства )

Ответить
17

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

Ответить
–5

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

Ответить
2

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

Ответить
–2

Объективность не существует. Это раз, к критике я всегда готов. Это хорошо что пришло по вкусу, тут все пользователи читают для себя. Им всем плевать кому и что пришло по вкусу. А редакторам не наплевать.

Ответить
1

И о чем твой пост тогда?

Ответить
–3

Выше /\ все написано понятным языком.

Ответить
1

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

Ответить
–6

каждое мнение субъективно и относительно. Это так же как "ложки не существует") на счёт дизлайков это да, это является истинным значением, но не является суждением. А любое суждение не является истинным. Те кто изучал глубоко философию в универе, те поймут. Но думаю вы опять меня все не поймёте )

Ответить
–4

Кстати, мне не понятно по какой причине вам лайков на ставили?! Я просто представлять не хочу, когда все будут брать пример именно с вас, и в очередном магазине/заведении вам именно и скажут: "вы мне что, клиент что бы я вас обслуживал?". Мне всегда казалось, что людей вашего возраста всегда в детстве учили доброте, дружбе и взаимопониманию. Ох как я ушибался :) Впрочем, наверняка сейчас все настроены так, чтобы каждому можно было перегрызть глотки, удивительное время

Ответить
1

Вы упорно считаете, что я как-то связан с VC.ru, видимо. Ну или пытаетесь как-то вывернуть ситуацию в свою сторону.
Продолжая Вашу аналогию, я — клиент кафе, в котором Вы пытаетесь навести свои порядки, указывая, что в меню есть блюдо, которое Вы есть не хотите. Я же говорю Вам: «Если Вам не нравится это блюдо, Вы можете его не заказывать. Нам, другим клиентам, оно нравится — зачем его убирать?» Дальше можно не продолжать, думаю.

Что касается глоток, то это Вы начали с претензий к двум ресурсам сразу (на dtf.ru Вас не устраивают комментарии, здесь — контент). Так что исправление мира начните с себя.
Кстати, изучение правил родного языка, а также чтение классической литературы — отличный шаг к тому, чтобы научиться хорошо мыслить и рассуждать. И пишу я это именно по большой доброте и дружбе, а также с надеждой на взаимопонимание

Ответить
–4

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

Ответить
0

Окей, Вы клиент, который говорит: «Я этот цезарь ел в другом кафе, а в этом кафе мне нужно, чтобы в него добавили грибов!»
В конечном итоге никто Вам ничего не должен, а голосовать что за заведение, что за онлайн-ресурс Вы можете своим присутствием. Закончим на этом, пожалуй.

Ответить
4

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

Ответить
0

Можно ссылочку? Чот найти не могу))

Ответить
1

Актуальная тематика, а ведь мало таких статей! Пишите ещё. Критика и анлайки ставят те кто сам ничего и никогда опубликует

Ответить

Комментарий удален

1

статью с хабра скопипатили

Ответить
0

скопипастили*

Ответить
–1

Для кого эти рассказы? Для людей далеких от IT?

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

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

Ответить
0

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

Ответить
0

Интересная статейка. Спасибо.

Ответить

Комментарий удален

0

А ещё очень хитрая система в серии Mario Kart. Во всех частях, начиная с самой первой. Да и не то, что хитрая, а просто читерская система! Особенно на высоких сложностях. Там прям все и всё против тебя! Бывает, нормально едешь, вырываешься вперёд, но на последнем кругу, в нескольких метрах от финиша, какая-нибудь фигня обязательно произойдёт: либо в тебя панцирь какой-нибудь пустят (главным образом, взрывоопасный), либо кто-нибудь подобьёт неуязвимостью (или ракетой), либо просто каким-то непонятным образом тебя кто-то обгонит. Бывает, что даже несколько "призов" тебе достанется от разных уродов (именно тебе). И всё - ты в жопе, а все старания на смарку! И такое продолжается постоянно! Игра просто начинает тебя выводить из терпения! А ты всё пытаешь побороть эту читерскую систему. Приходится рассчитывать только на удачу и везение, а без этого просто не выиграть, как ни старайся. Да и ехать компьютерные персы будут всегда в определённой последовательности (имею в виду, приходить к финишу), что бы ни происходило во время гонки. Короче, тут разрабы чересчур "постарались", решили поиздеваться над игроками. Посмотрел бы я на них, как они проходили бы.

Ответить
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": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "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" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "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": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&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": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } } ]
Компания отказалась от email
в пользу общения при помощи мемов
Подписаться на push-уведомления