Оббе Вермей [Obbe Vermeij] — один из программистов GTA 3, Vice City и San Andreas. Оббе ушёл из Rockstar после GTA IV и давно занимается другими проектами. В последние месяцы он начал вести блог insiderockstarnorth.blogspot.com, но в ноябре прошлого года закрыл его, поскольку бывшим коллегам мемуары не понравились. Тем не менее в личном микроблоге Оббе иногда делится байками про разработку игр из своей карьеры.
На этот раз Вермей рассказал, почему так часто падают самолёты в San Andreas.
Из одного названия серии игр Grand Theft Auto легко понять как основную деятельность, так и сеттинг. Дело в том, что «grand theft auto» обозначает угон (или попытку угона) автомобиля. При этом сам термин используется в североамериканском семействе диалектов английского языка. Тем не менее GTA зародилась в Шотландии, а не США.
Компания DMA Design открылась в 1987 году. На тот момент основатели студии уже разработали несколько мелких игр в компьютерном клубе города Данди и искали издателя. Изначальное временное название компании Acme уже было занято, поэтому пришлось искать новое. Имя выбрали по сокращению термина direct memory access (прямой доступ к памяти), хотя позднее будут говорить, что DMA ничего не означает.
Разработчики офиса в Данди, начало девяностых. Scotsman
Следующие несколько лет DMA Design связаны с успехом динамической головоломки Lemmings и её сиквелов. За счёт прибыли от игры DMA разрослась и перешла на сотрудничество с крупным японским производителем игр Nintendo.
4 апреля 1995 года в Данди начинают разработку будущей игры Race’n’Chase. А если верить ревизиям диздока от 22 марта 1995 года, первые попытки очертить рамки проекта были готовы уже 25 января на основании обсуждений, проведённых с 23 января.
Концепт предлагал создать продукт, как говорят сейчас, с открытым миром, где игрок может путешествовать на автомобилях по городу и выполнять различные задачи, связанные с криминальной деятельностью. Уже в набросках GTA предусмотрен мультиплеер, сетевой (ПК) или на одном устройстве (игровые приставки), где игроки берут на себя разные роли.
Описано было всё: от языков программирования до оценки системных требований. Издать игру предлагалось на DOS, Windows 95, Sony Playstation, Sega Saturn и Nintendo 64. Диздок заканчивается сроками: релиз намечен на 1 июля 1996 года, а движок должен быть готов к 3 июля 1995 года.
Концепт будущей GTA успел претерпеть несколько итераций изменений.
Для начала написали техническую демку. Как и предлагал диздок, это был вид сверху на объёмный мир. Поскольку 3D-ускорителей в среднестатистическом игровом ПК не будет ещё лет пять, отрисовка шла усилиями исключительно центрального процессора компьютера. Приходилось идти на различные ухищрения а-ля движок Doom. Их недостатки заключились в отсутствии возможности наклонить камеру, их неоспоримое преимущество — игра выдавала неплохое число кадров в секунду.
Мокап Race’n’Chase. mikedailly
Затем из этой демки попытались сделать игру. Разработчики перебирали темы из диздока и изобретали что-то новое: гоночный симулятор, который стал доставкой пиццы, затем игрока и вовсе сделали копом. Лишь после пришли к решению, что играть нужно за преступника.
В августе 1995 года в DMA принимают на работу нидерландца по имени Оббе Вермей. Он работал над Space Station Silicon Valley для Nintendo 64 на позиции программиста. Оббе мог лишь наблюдать со стороны, как команда GTA переживала из-за технических ограничений целевых платформ и попыток пересмотреть проект. К примеру, у PlayStation было всего 2 МиБ ОЗУ, куда меньше, чем встречалось на ПК, поэтому количество цветов в игре сократили с 256 до 16. Художники испытали бурю нецензурных эмоций, когда увидели результат сжатия.
И вообще Вермей — хороший программист, но не всегда он был прав относительно геймдизайна. К примеру, когда Оббе пригласили в команду GTA 3, он предлагал сделать её игрой с видом сверху — так же, как у предшественников. Вермей написал соответствующий режим камеры и просил сделать его режимом по умолчанию.
Выход Grand Theft Auto в 1997 году принёс финансовый успех. Компанию DMA Design приобрела Gremlin Interactive, последнюю позднее, после выхода GTA 2, поглотила Infogrames. При этом саму DMA продали Take-Two Interactive, которая уже владела BMG Interactive, издателем и владельцем прав на GTA.
Все эти реструктуризации затронули не только права, но и организацию компании. DMA Design открыла новый офис в Эдинбурге, куда командам законченных на тот момент игр Body Harvest и Space Station Silicon Valley предложили переехать из офиса в Данди. Большинство из них действительно уехали в столицу Шотландии, и через несколько месяцев офис в Данди закрыли полностью.
Какое-то время команды сидели без дела. От офиса издателя в Нью-Йорке указаний не поступало, поэтому сотрудники занимались собственными проектами. Кстати, именно так в бывшей команде Body Harvest зародилась идея будущей Manhunt. В это время команда GTA 2 исследовала возможность сделать GTA 2.5, игру с изометрической проекцией. GTA 2.5 никогда не увидела свет: началась работа над GTA 3.
Команда разработчиков GTA 3, фотография 2000 или 2001 года. ObbeVermeij
Слабая вовлечённость менеджеров Rockstar из Нью-Йорка сохранялась на протяжении всей разработки Grand Theft Auto 3. Разработка шла быстро, поскольку никаких экспериментов с концепцией не требовалось, а сотрудники были опытные, как минимум с одной продающейся игрой за плечами — необычно хорошо для молодой гейм-индустрии той эпохи. Как утверждает Вермей, также значительно помогло, что из Нью-Йорка не мешали микроменджментом.
GTA 3 разрабатывали в первую очередь для PlayStation 2. Вообще, из-за технической схожести три игры — GTA 3, Vice City и San Andreas — иногда называют трилогией, пусть и сюжетно они связаны слабо, на уровне камео персонажей.
Технические ограничения заметно влияли на качество геймплея. Как говорит Вермей, именно из-за этого автомобили на дорогах так часто повторяются: хотя всего в игре около 80 транспортных средств, объём памяти приставки умещал порядка 7. Впрочем, хватило ресурсов реализовать сменяемую погоду, хотя и примитивно: игра последовательно перебирала небольшую (около 40 строк) таблицу состояний.
Также Оббе вспоминает об огромном числе багов на протяжении разработки. Трудно было отыскать миссию, которую получалось пройти без падения игры, а частота кадров в секунду обычно проседала ниже 10. Лишь за 5 месяцев до релиза в GTA 3 можно было сносно играть.
А ещё карта была буквально усеяна дырами. Дело в том, что обработка столкновений работает отдельно от отрисовки: у здания, состоящего из 10 тыс. треугольников, могла быть всего тысяча полигонов для обработки столкновений. Так приходилось делать потому, что обработка столкновений — медленная операция. Для исправления этой ситуации даже создали специальный вид оружия, который стрелял телами-рэгдоллами.
Оружием решали и другие проблемы. Однажды Вермей получил от художников текстуру луны. Программист приделал светило в игру, убедившись, чтобы в суточном цикле луну было видно ночью. Через несколько дней у стола программиста столпились четыре художника и попросили поменять размер нового объекта. Однако они не смогли выбрать, какого размера должна быть луна в небе. Два из них предлагали поменьше, чтобы было реалистично, ещё два хотели крупнее, чтобы получилось красиво.
Этот спор четырёх дизайнеров продлился какое-то время. Оббе предложил компромисс: запрограммировать текстуру так, чтобы размер менялся в игре, а художники пусть сами выберут такую, какую захотят. Поскольку на тот момент Вермей возился со снайпейрской винтовкой, он сделал так, чтобы луна меняла размер по выстрелу в неё.
Художники не вернулись и не сообщили, какой размер правильный, поэтому это временное решение так и ушло в релиз. Хотя для San Andreas у луны кто-то дописал фазы, код изменения размера авторства Оббе остался на месте.
Ни одна из игр «трилогии» не поддерживает сетевую игру без модов. На код сетевой игры для GTA 3 Оббе потратил месяц, но мультиплеер работал с ошибками. Поскольку времени на исправления не оставалось, от сетевой игры отказались. Во время разработки Vice City на сетевую игру выделили сразу двух программистов, но и в этом случае времени не хватило — игра появилась на прилавках магазинов 29 октября 2002 года, всего через год после GTA 3 (вышла 23 октября 2001). Когда дело дошло до San Andreas, смысла в сетевой игре для стареющего поколения игровых приставок было мало, поэтому ограничились небольшим коопом.
Вообще, от разработки Vice City команда сильно устала и даже хотела переключиться на зомби-шутер в сеттинге Шотландии или шпионский боевик. Технически Vice City от GTA 3 отличалась слабо и местами выглядела как «рескин», замена графической составляющей. На Grand Theft Auto: San Andreas выделили сразу 2 года разработки и много внимания уделяли новым фичам.
Карта штата San Andreas упакована тремя крупными городами с аэропортами и кольцевой сетью железных дорог, мелкими поселениями, лесами и огромной горой, на которой легко потеряться. Персонаж игрока научился плавать и пользоваться парашютом, в игру добавили элементы ролевой игры с прокачкой, едой и симуляцией свиданий. Доходило до того, что некоторые новинки реализовывали не из желания иметь новую игровую механику, а чтобы было. Например, к числу подобных фич, о которых сами разработчики отзывались прохладно, относится стелс. Другие фичи просто не закончили: значение удачи на ставки в казино никак не влияет.
Штат Сан-Андреас
Всё это приходилось балансировать в рамках геймплея и полной проходимости игры. К примеру, растолстевший Карл не мог вскарабкаться на препятствия, которые были по плечу худому варианту.
Впрочем, проблемы геймдизайнеров меркнут на фоне технических задач, которые выдвигал стриминг ресурсов. Дело в том, что у PlayStation 2 32 МиБ ОЗУ и 4 МиБ видеопамяти. В этот объём памяти нужно уместить симуляцию города с пешеходами и транспортными средствами.
Наивный подход без стриминга предполагает, что весь город будет помещён в память при загрузке игры. В начале разработки GTA 3 так и сделали. Художники уменьшили размер текстур и повторяли их. Получилось однотипно и некрасиво. Поэтому для GTA 3 написали стриминг ресурсов.
Игровой мир существует и отрисовывается только в определённом радиусе вокруг игрока. По мере передвижения персонажа игрока объекты мира подгружаются в память с компакт-диска, а здания вдали выгружаются из памяти. Вообще, стримятся не только здания, но и модели автомобилей, людей, звуки и музыка. Но основную проблему представляла загрузка мира — она не всегда поспевала за скоростью передвижения игрока.
Чтобы помочь прогрузке нужных районов вовремя, дорожки на компакт-диске оптимизировали специальным образом. Но даже это спасало не всегда. Скорость обращения к данным вынудила переделать целый район Либерти-Сити и добавить незаметное замедление скорости на некоторых дорогах.
Случайное падение самолёта
Со стримингом связана другая проблема San Andreas. Одна из новых фич для создания эффекта погружения — малая авиация, которая иногда рассекает над игроком. Технически это выглядит так: игра создаёт небольшой самолёт, который куда-то летит по своим делам.
Желательно, чтобы самолёт появлялся не слишком высоко, чтобы игрок мог видеть его. Одновременно с этим недопустимы столкновения с объектами игрового мира. Для этого до момента создания самолёта нужно проверить, чтобы на его пути не было препятствий.
Вермей объясняет, что код проверки бросает несколько лучей из силуэта самолёта по направлению движения и ищет столкновения. Подобная операция вычислительно ресурсоёмкая, поэтому Оббе запрограммировал лишь минимально нужное количество проверок — лучи из фюзеляжа и кончиков крыльев.
В процессе разработки San Andreas было задокументировано 70 тыс. багов. Это — один из нерешённых. В релизной версии самолёты иногда падают из неба или даже сталкиваются с самим игроком. Событие настолько частое, что у спидраннеров это известное нежелательное явление.
Подборка падений из стримов спидраннера Joshimuz
Физическая модель самолётов не отличается в зависимости от того, кто ими управлял: игрок или NPC. Часть падений случается из-за недостаточной скорости на момент спауна. Как утверждает Вермей, самолёт создаётся, но летит слишком медленно, чтобы оставаться в воздухе, и в итоге разбивается.
В остальных случаях Оббе винит стриминг. Часть мира может быть не прогружена, в том числе в памяти может не оказаться карты столкновений некоторых объектов. Из-за этого проверка проваливается, и самолёт спаунится с траекторией, обрекающей на гибель.
Наконец, как считают в микроблогах, сам код Оббе может содержать ошибку. Как утверждает известный модер Silent, в коде функции проверки вместо posX
и posY
должно быть GetSectorX(posX)
и GetSectorY(posY)
.