{ "author_name": "Никита Евдокимов", "author_type": "self", "tags": ["\u0438\u0433\u0440\u044b"], "comments": 44, "likes": 63, "favorites": 34, "is_advertisement": false, "section_name": "default", "id": "30006", "is_wide": "" }
Никита Евдокимов
16 004

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

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

Поделиться

В избранное

В избранном

Сайт 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 многие из этих элементов удалось заменить на оригинальные, но большая часть, по словам Артура, по-прежнему принадлежит тому самому мосту, который он заказал у фрилансера.

#игры

{ "is_needs_advanced_access": false }

Комментарии Комм.

Популярные

По порядку

0

Прямой эфир

Хакеры смогли обойти двухфакторную
авторизацию с помощью уговоров
Подписаться на push-уведомления
[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "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", "tablet" ], "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", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "create", "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-158433683", "adfox_url": "//ads.adfox.ru/228129/getCode?p1=bxbwd&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid21=&puid22=&puid31=&fmt=1&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } } ]