Оббе Вермей [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 тыс. треугольников, могла быть всего тысяча полигонов для обработки столкновений. Так приходилось делать потому, что обработка столкновений — медленная операция. Для исправления этой ситуации даже создали специальный вид оружия, который стрелял телами-рэгдоллами.

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

Этот спор четырёх дизайнеров продлился какое-то время. Оббе предложил компромисс: запрограммировать текстуру так, чтобы размер менялся в игре, а художники пусть сами выберут такую, какую захотят. Поскольку на тот момент Вермей возился со снайперской винтовкой, он сделал так, чтобы по выстрелу из прицела в луну размер светила менялся на один из трёх вариантов.


ObbeVermeij

Художники не вернулись и не сообщили, какой размер правильный, поэтому это временное решение так и ушло в релиз. Хотя для San Andreas у луны кто-то дописал фазы, код изменения размера авторства Оббе остался на месте.

Ни одна из игр «трилогии» не поддерживает сетевую игру без модов. На код сетевой игры для GTA 3 Оббе потратил месяц, но мультиплеер работал с ошибками. Поскольку времени на исправления не оставалось, от сетевой игры отказались. Во время разработки Vice City на сетевую игру выделили сразу двух программистов, но и в этом случае времени не хватило — игра появилась на прилавках магазинов 29 октября 2002 года, всего через год после GTA 3 (вышла 23 октября 2001). Когда дело дошло до San Andreas, смысла в сетевой игре для стареющего поколения игровых приставок было мало, поэтому ограничились небольшим коопом.

При разработке Vice City команда сильно устала от любых GTA и даже хотела переключиться на зомби-шутер в сеттинге Шотландии или шпионский боевик. Технически Vice City от GTA 3 отличалась слабо и местами выглядела как «рескин», замена графической составляющей. Поэтому на Grand Theft Auto: San Andreas выделили сразу 2 года разработки и много внимания уделяли новым фичам.

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


Штат Сан-Андреас

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

Впрочем, проблемы геймдизайнеров меркнут на фоне технических задач, которые выдвигал стриминг ресурсов. Дело в том, что у PlayStation 2 лишь 32 МиБ ОЗУ и 4 МиБ видеопамяти. В этот объём нужно уместить симуляцию города с пешеходами и транспортными средствами.

Наивный подход без стриминга предполагает, что весь город будет помещён в память при загрузке игры. В начале разработки GTA 3 так и сделали. Художники уменьшили размер текстур и повторяли их. Получилось однотипно и некрасиво. Поэтому для GTA 3 написали стриминг ресурсов.

Игровой мир существует и отрисовывается только в определённом радиусе вокруг игрока. По мере передвижения персонажа игрока объекты мира подгружаются в память с компакт-диска, а здания вдали выгружаются из памяти. Вообще, стримятся не только здания, но и модели автомобилей, людей, звуки и музыка. Но основную проблему представляла загрузка мира — она не всегда поспевала за передвижением игрока.

Чтобы помочь прогрузке нужных районов вовремя, дорожки на компакт-диске оптимизировали специальным образом. Даже это не спасало. Скорость обращения к данным вынудила переделать целый район Либерти-Сити и повысить сопротивление воздуха на некоторых дорогах на незаметные 5–10 %.

Случайное падение самолёта

Со стримингом связана другая проблема San Andreas. Одна из новых фич для создания эффекта погружения — малая авиация, которая иногда рассекает над игроком. Технически это выглядит так: игра создаёт небольшой самолёт, который куда-то летит по своим делам.

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

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

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

Подборка падений из стримов спидранера Joshimuz

Физическая модель самолётов не отличается в зависимости от того, кто ими управляет: игрок или NPC. Часть падений случается из-за недостаточной скорости на момент спауна. Как утверждает Вермей, самолёт создаётся, но летит слишком медленно, чтобы оставаться в воздухе, и в итоге разбивается.

В остальных случаях Оббе винит стриминг. Часть мира может быть не прогружена, в том числе в памяти может не оказаться карты столкновений некоторых объектов. Из-за этого проверка проваливается, и самолёт спаунится с траекторией, обрекающей на гибель.



Наконец, как считают в микроблогах, сам код Оббе может содержать ошибку. Как утверждает известный модер Silent, в коде функции проверки вместо posX и posY должно быть GetSectorX(posX) и GetSectorY(posY).

Комментарии (18)


  1. AlB80
    04.04.2024 14:52
    +5

    Какое интересное разыменование указателя на указатель. Один адрес кратен 8, один кратен 4, один кратен 2 и ещё один кратен только единице. При ILP32 тут целых два UB.


    1. nixtonixto
      04.04.2024 14:52
      +2

      Ну и куда же без магических констант прямо в коде!


    1. ispodvupodverta
      04.04.2024 14:52

      UB в случаях когда кратно 2 и единице при ILP32, верно? а с LP64 имеем 3 UB?


      1. AlB80
        04.04.2024 14:52

        Да.


  1. Mingun
    04.04.2024 14:52
    +29

    Сколько играл в San Andreas, а про падение какой-либо техники с неба слышу впервые.


    1. PsihXMak
      04.04.2024 14:52
      +5

      Да ну? У меня такое постоянно случалось. В целом, я даже привык к звукам взрывов на фоне.


      1. perfect_genius
        04.04.2024 14:52
        +1

        Тоже привык, но перед персонажем ничего не падало.


    1. Mamontzabiyaka
      04.04.2024 14:52

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


    1. raspberry-porridge
      04.04.2024 14:52

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


    1. playermet
      04.04.2024 14:52
      +1

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


  1. andersong
    04.04.2024 14:52
    +2

    Помню, что летать на самолете в СА было очень трудно. "Двигатель" был очень слабый, требовался длительный разбег и плавный взлет, иначе потеря скорости и сваливание. А мотивацией освоить полет было прочесть надпись на недоступной горе, которая была едва заметной на мини-карте. Не помню уже, получилось ли у меня и что там было написано, на этой горе..


    1. 123150
      04.04.2024 14:52

      А не в 3 ли это было? Вот там как раз из авиатехники был один Додо, чьи летные характеристики оставляли желать лучшего. А вот в СА уже и Додо подправили, и куча других самолетов (и вертолетов) появились


  1. dimka11
    04.04.2024 14:52

    Разве игра не устанавливалась на жёсткий диск? Зачем нужна загрузка с компакт диска?


    1. tlv
      04.04.2024 14:52
      +8

      Для приставок


  1. vvbob
    04.04.2024 14:52
    +15

    Дело в том, что у PlayStation 2 лишь 32 МиБ ОЗУ и 4 МиБ видеопамяти

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


    1. Error1024
      04.04.2024 14:52
      +2

      даже браузер запустить

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


      1. vvbob
        04.04.2024 14:52
        +2

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


        1. nidalee
          04.04.2024 14:52
          +1

          Я вчера увидел видео об обновлении для X4 и вспомнил, что у меня в ней 20-40 FPS относительно стабильно. Подумал: "черт, процессор старый, без 3D-cache, надо бы обновиться, а то не тянет игры нормально". Погонял PassMark, посмотрел на 99% percentile на GPU (4090), 96% percentile на CPU (5950X) и вспомнил, что проблема вообще-то не в моем железе.

          Софтоделы в целом (и игроделы в особенности) явно куда-то не туда свернули. Ну у них с другой стороны C-suite сверху стоит и на мозги капает, а тех производительность интересует, наверное, меньше всего: им бы куда DRM и монетизации всунуть.