Descent
Я расскажу про Descent — компьютерную игру, трехмерный шутер (стрелялку) от первого лица, выпущенный в начале 1995 года. Я испытываю к нему сильные чувства как геймер и как программист, и хочу поделиться.
Любовь и нежность
(Някавай же! Последний босс и его ручной vulcan guy. Оба в расстроенных чувствах потому что не могут выстрелить. А выстрелить не могут потому что читом им отключена стрельба. А стрельба им отключена потому что иначе они убивают быстрее чем успеваешь выбрать ракурс для съемки)
Зачем сегодня рассказывать об игре 25-летней давности? Затем что шедевры не стареют, будь это музыка или книга, фильм или компьютерная игра. Descent был шагом вперед в свое время, многое из того что нам привычно в трехмерных шутерах сейчас в нём было реализовано впервые, а кое-что выделяется даже на фоне сегодняшних игр.
Но мне он конечно дорог в силу личной памяти, многих часов и дней проведенных в его виртуальном мире, особенном мире полной трехмерной свободы и компьютерных оппонентов, ведущих себя достаточно продуманно чтобы с ними было интересно играть. И исходный код Descent — открытый в 97-м, увиденный мною в 99-м, старательно изученный и подправленный — доставил мне пожалуй не меньшее удовольствие.
Приятно, идя по коридору, поворачивать за угол не только влево и вправо но и вверх и вниз, входить в комнаты через потолок и выходить вертикально вдоль стены. Мне сильно не хватает этого в реальности. Анималистично выглядящие роботы-монстры вызывают симпатию и хочется завести их как домашних животных (размером например с кошку). У меня есть плюшевый какодемон из Doom, но нет никого из Descent…
Контекст
Чтобы дать понять что особенного в Descent, нужно немного рассказать о том что было до него и вокруг него. Descent был выпущен в начале 95-го, разрабатывался с 93-го. Для сравнения, Doom появился в конце 93-го, а до него популярным шутером от первого лица был Wolfenstein 3D. Через год после Descent появился Duke Nukem 3D, а еще через некоторое время Quake (тоже 96-й), а в 98-м подоспели Unreal и Half-Life, но тут у меня внезапно кончилось детство и в них я уже не играл.
Что можно сказать про Doom, культовую игру, законодатель мод и вообще главную точку отсчета на шкале? Очень много хорошего можно сказать, я обязательно в другой раз, а здесь важно что он не моделировал трехмерную физику игрового мира и даже при построении изображения использовал упрощенные (двухмерные) геометрические расчеты. Это было очевидно увлеченному игроку и особенно — дизайнеру уровней.
Некоторые монстры в Doom могли летать, но не могли пролететь друг над другом. Игрок не мог пробежать под летящим в высоте какодемоном. Комнаты могли быть расположены повыше и пониже, но ни в коем случае не одна над другой, и вообще никакой элемент архитектуры не мог был видимым и сверху, и снизу, что исключало мосты и вообще любые арки, где было бы можно пройти и под ними, и по ним.
Отсутствие трехмерной геометрии проявлялось и в том, что законы перспективы действовали только в горизонтальной плоскости. Не было возможности посмотреть вверх или вниз. Duke Nukem 3D, изданный после Doom и после Descent, все еще страдал этим недостатком.
(Характерная проблема тогдашней графики, реализованной без геометрически корректных трехмерных вычислений. В Doom возможность смотреть вверх была предусмотрительно отключена, в Duke Nukem 3D не была и это приводило к тому что мы видим: при взгляде наверх углы нереалистично искажаются, законы перспективы перестают действовать)
Естественно, когда на фоне этого появляется игра, в которой можно смотреть в любом направлении и двигаться в любом направлении, и видеть достоверную картинку, и размещать объекты в пространстве без всяких ограничений — это производит сильное впечатление.
Полностью трехмерные игры были и задолго до того, но в других жанрах, например флайт-симуляторы. Descent был оригинален сочетанием трехмерного окружения с геймплеем, характерным для шутера.
Новизна
Я люблю Descent за его трехмерность и за другие технические новшества.
Динамическое освещение (когда вдоль коридора летит снаряд, стены освещаются последовательно по мере его движения). Это было ново, это было красиво, и это было обыграно в геймплее: среди вооружения игрок имеет в том числе не поражающие, но светящиеся и втыкающиеся в стены снаряды, которыми можно ненадолго освещать темные комнаты.
Монстры в виде подвижных трехмерных моделей. Остальные шутеры тогда все еще использовали “спрайты” — плоские картинки, изображающие врагов в разных позах и разных ракурсах. Такие картинки рисовались художниками или оцифровывались с фотографий материальных макетов. В Descent спрайтами изображались игровые предметы (ключи, оружие и прочий powerup), а монстры — полноценными текстурированными объемными моделями, как это делается и сегодня.
В Descent сюжет не играет роли, поскольку уровни представляют собой совершенно абстрактные лабиринты без претензий на любую реалистичность. (Никакого объяснения нет даже для базового факта отсутствия гравитации). Главный герой отстреливает взбесившихся летающих роботов-шахтеров и подрывает подземные объекты на разных небесных телах Солнечной системы, в бесплатной версии — от Луны до Меркурия, в полной версии — от Марса до Харона. (Хотя в названиях уровней вроде “Шахта по добыче H2O на Тефии, спутнике Сатурна” есть определенный абсурдистский шарм).
(Карта одного из уровней, чтобы продемонстрировать трехмерность лабиринта. В интернете я встречаю информацию, что по мнению некоторых игроков в Descent легко заблудиться, но у меня никогда такой проблемы не возникало. Для тех у кого проблемы с памятью на местность, в игре очень удобный режим карты)
Да, кое-что в игре было старомодным даже по тем временам: очки/баллы за подбитых роботов и собранные предметы; концепция нескольких “жизней” (убитый игрок, у которого были жизни в запасе, оказывался в начале уровня, но состояние уровня сохранялось как на момент смерти — монстры убиты, ключи действуют, а все подобранные powerup валяются в том месте где игрок был убит). Но ведь на это можно просто не обращать внимания.
Я люблю Descent за его геймплей, за сбалансированность, динамичность и сложность.
Роботы обладают тем же вооружением, что и игрок. Роботы стреляют быстро, по подвижной мишени используют упреждение, уклоняются от выстрела если снаряд угрожает им (и стоят на месте если игрок промахивается), стрейфят (стреляют по игроку, смещаясь, но не приближаясь к нему) и садятся на хвост. Роботы открывают огонь, едва выдвинув из-за угла орудие, силуэт которого может быть в сто раз меньше (и сложнее для поражения) чем силуэт робота целиком.
Только один вид оружия из десяти поражает условно мгновенно (то что называется hitscan), все остальные снаряды метательные (ну, классический “лазер” — летающая светящаяся палка) и оставляют пространство для маневра. Что разумно, ведь в шутерах оружие мгновенного действия либо чрезмерно фатально, либо искусственно ухудшено чтобы не быть таковым и с ним было интересно играть.
Самонаводящиеся ракеты, натурально, самонаводятся, и от них почти невозможно уйти маневрированием, так что роботы использующие их требуют специального обхождения.
Уже на средних уровнях появляются роботы, стреляющие ракетами залпами, что почти всегда фатально в узких коридорах, где взрыв ракеты, задевший о стену, наносит игроку почти такой же вред как прямое попадание. (Для сравнения, вспомните кибердемона из Doom, неторопливо выпускающего по три ракеты раз в несколько секунд).
Артефакт невидимости обеспечивает реальную невидимость (возможно подкрасться к роботам, оставаясь полностью незамеченным), но роботы при этом адекватно реагируют на видимые события— открытые двери, подобранные предметы или выстрелы — и начинают стрельбу по месту предполагаемого нахождения игрока.
Так я постепенно подхожу к главному поводу любви к Descent — к логике поведения управляемых компьютером врагов (“искуственному интеллекту”).
В шутерах того времени монстры предпочитали передвигаться хаотически или немного в сторону игрока или вообще умирать стоя, стреляя более-менее беспорядочно. Игры 2000-х стали развиваться в сторону мультиплеера, а в синглплеере поведение компьютерных оппонентов оказалось не в числе первых приоритетов и стало строиться на основании сценариев (скриптов) и использования расставляемых вручную меток (типа: “монстр А, в сложной ситуации стой здесь, а если игрок подходит со стороны Х, то отступай вдоль вот этой линии…”). В противоположность этому, роботы Descent принимают решения на основании общих, но детально проработанных правил, что проявляет себя в игре как осмысленное и сложное поведение в бою.
Исходный код
Бросающееся в глаза отличие поведения роботов в Descent от монстров во всех других известных мне играх, и любовь к программированию с детства, сразу подтолкнули меня к поиску и изучению исходного кода. Код написан на чистом C (не C++) и может являться образцом для подражания — что я могу сейчас уверенно утверждать как специалист.
Забегая мыслью на четверть века вперед, в сегодняшний день, скажу что нет, ни каждый робот, ни компьютерный оппонент как целое не используют искуственные нейронные сети для накопления информации о действиях игрока. Мне кажется, это было бы весьма интересное и единственное осмысленное на сегодняшний день направление развития оригинального Descent.
Пересказывать код нелепо, поэтому ограничусь несколькими цитатами, если вы можете читать английский и немного С, то пожалуйста, а если нет то прокрутите до конца вставок.
aistruct.h, немного констант: behavior — общая модель поведения одного робота (некоторые икогда не атакуют, только убегают), mode — текущее действие робота, awareness — численная характеристика, степень текущего “беспокойства”:
aistruct.h, структуры данных, используемых для описания состояния AI одного робота:
ai.c, ai_fire_laser_at_player(), робот стреляет по игроку, фрагмент (“So, that’s why we write games, instead of guiding missiles…”):
И многое-многое другое достойное внимания: вместо вычислений с плавающей точкой введен собственный тип fix, хранящий рациональные числа как числа с фиксированной точкой по 16 бит на целую и дробную часть; собственный аллокатор памяти и сборщики мусора в пределах нескольких часто используемых массивов; нехарактерный формат хранения демо — покадровая запись состояний игры, в противоположность начальному значению генератора псевдослучайных чисел и записи пользовательских действий; встроенный редактор уровней зачем-то содержит lisp-интерфейс — то ли разработчики процедурно генерировали карты, то ли просто любили emacs?
Оригинальный код например здесь https://github.com/videogamepreservation/descent; работающий из коробки (код, но не файлы с данными) современный здесь https://github.com/dxx-rebirth/dxx-rebirth.
Демо
Существует такое вполне самостоятельное развлечение, как запись своего прохождения игр (“демо”) со спортивными или эстетическими целями. Например, Compet-N — коллекция прохождений Doom — содержит тысячи прохождений, и смотреть некоторые интересно и познавательно (в смысле новых тактик игры); для Descent я не знаю общемировых библиотек с демо, но даже на youtube выложено немало.
И есть даже более узкое направление — tool assisted demo, когда для записи используется специально подправленная версия движка, обычно упрощающая какие-нибудь детали. Так можно записать прохождение более удачное, чем возможно получить при честной игре. Разумеется, это неспортивно и такие демо не участвуют в соревнованиях, но снимаются для красоты.
У меня нет ни способностей, ни желания участвовать в киберспорте, поэтому все мои демо немножко tool assisted. Раз уж я программист, странно было бы не воспользоваться возможностью; например, пусть для меня звонит колокольчик, когда робот незаметно подкрадывается со спины. Ломает ли это геймплей? — по-моему нет; читерство ли это? — строго говоря конечно да.
Демо я записывал не столько чтобы потом просматривать (в самом деле, зачем бы это мне могло понадобиться?), сколько для того чтобы иметь более сложную цель (ср.: ставить цели в трекере когда бегаешь по утрам). Когда записываешь демо, глупо использовать save/load, и некрасиво тупить/заблужаться/упускать роботов. Прохождение всех 30 уровней в записанном виде занимает примерно 7 часов. На многие уровни потрачены десятки попыток — в конце концов, чтобы записать сплошное прохождение, уровень надо помнить целиком. Наверное только геймеры понимают, сколько нужно времени потратить, чтобы записать 7 часов демо.
(Вот эта ссылка может привести на заключительную часть битвы с последним боссом: http://www.youtube.com/watch?v=osZAlhNxm4w&feature=youtu.be&t=236. И там же еще несколько выбранных моментов из прохождения и ссылка на полный плейлист)
Какая в этом ценность? Что ты делал в жизни, человече? — Я играл в Descent. По-моему, не так уж плохо по сегодняшним меркам!
Что было дальше
Ну понятно что: после коммерческого успеха последовал Descent II, в который было свалено всё наскребённое по сусекам после первого. Графический и трехмерный дизайн куда-то съехал, сюжет никто даже не пытался изображать, в общем, история знакомая по Doom / Doom II и многим другим сиквелам.
Реализованные новые возможности AI и вооружения, вполне естественно проистекавшие из замечательных свойств оригинальной игры, нарушили баланс геймплея. Робот-бот, играющий на стороне игрока, двадцать видов оружия, управляемые ракеты и пр. сделало игру неинтересной. Descent III, выпущенный на другом движке еще несколько лет спустя, был еще более бессмысленен и уныл.
Возможно, это моё личное восприятие и возраст, но возможно и нет. В оригинальном Descent я вижу старательную работу небольшого коллектива оригинальных авторов — вкладывавших душу когда коммерческий успех был еще далеко; вижу баланс и красоту геймплея и технические достижения программистов. А все продолжения похожи, ну, на все продолжения, евпочя.
Кто-то и сегодня, 25 лет спустя, продолжает играть в Descent на стиме, а кто-то коммитит в репу на гитхабе. Кто-то только помнит, а я вот пытаюсь рассказать об этом тем кто не просил.
Сложно сравнивать библию, мону лизу, эйфелеву башню и курьёзити ровер; но вот, где-то среди них и Descent (программисты Mike Kulas и Matt Toschlog, дизайнер моделей Adam Pletcher, дизайнер уровней Che-Yuan Wang — четыре человека * полтора года разработки).
Уверен что в общем всё это заслуживает упоминания.
Спасибо!
С удовольствием почитал. Завтра утром со свежей головой посмотрю код.
А выстрелить не могут потому что читом им отключена стрельба. А стрельба им отключена потому что иначе они убивают быстрее чем успеваешь выбрать ракурс для съемкиО да! Я помню вечно ныкался за углами и стрелял ракетами вместе с fusion cannon (?) последняя такая, пурпурная! И до блевоты крутился, чтобы занять лучшее положение.
Динамическое освещение (когда вдоль коридора летит снаряд, стены освещаются последовательно по мере его движения). Это было новоБыло уже минимум в 1992 году в РПГ Shadoworlds. :-)
Некоторые монстры в Doom могли летать, но не могли пролететь друг над другом. Игрок не мог пробежать под летящим в высоте какодемоном. Комнаты могли быть расположены повыше и пониже, но ни в коем случае не одна над другой, и вообще никакой элемент архитектуры не мог был видимым и сверху, и снизу, что исключало мосты и вообще любые арки, где было бы можно пройти и под ними, и по ним.Самое смешное, что уже в 1992, в Ultima Underworld, все это можно было сделать. А вот FPS отставали, да. :-)
Descent, естественно, имел шесть степеней свободы в перемещении, но просто забавные замечания.
вот эти двое 2 года назад выпустили кстати типа продолжение - Overload
То есть Half-Life для детей? При всём уважении к самой статье, ну и дичь вы сморозили.
Это вы сами додумали, что Half Life для детей. Очевидно, автор имел в виду нехватку времени на игры (учеба, армия, работа или еще что-нибудь).
Вполне возможно, что действительно додумал. Просто настолько часто сталкивался с такой точкой зрения относительно видеоигр, что вижу её повсюду.
Постарел и умер :)
Я напомню, тем кто не в курсе, что до «старших» 486-х процессоров плавающая точка реализовывалась сопроцессорами, так что это вынужденная мера.
Графический и трехмерный дизайн куда-то съехал, сюжет никто даже не пытался изображать, в общем, история знакомая по Doom / Doom IIА вот тут я совсем не понял упоминания Дума. Вы не могли бы пояснить свою мысль? Что именно у него «съехало»? По-моему, именно вторая часть является той самой «культовой игрой», а не первая.
Первый Doom имел детально проработанный сюжет (пусть и далеко не полностью реализованный, но мы знаем его историю: Tom Hall, the Doom Bible, доступные теперь альфа-версии и т.д.). А в Doom 2 попали карты, которые не вошли в Doom 1, монстры, которых не успели реализовать раньше, а "сюжет" вообще придуман в последний момент что называется "на отцепись". В Doom 1 все очень гармонично: первый эпизод - космические базы полные зомби и младших бесов, второй эпизод - космические базы сильно смешанные с адской архитектурой, третий эпизод - сплошной ад, смерть и боль. А что Doom 2? Проваливаешься в чужой мир а там технический лифт и надпись "осторожно", и "бочки веселья" расставлены. И два секретных уровня на тему Wolfenstein и Commander Keen, ну чистый фан-сервис, не могу к этому относиться серьезно, какой-то фарс. Но вообще это тема для большого текста, конечно же
Гм, через 25 лет открыл для себя "проработанный сюжет" в Думе. У нас-то он без докухи шёл, а по паре фраз между эпизодами сюжет восстановить тяжко :)
Впрочем, культовым Дум стал не из-за сюжета и даже вообще не из-за single-player'а, а deathmatch расцвёл пышным цветом именно во второй серии.
Комментарий недоступен
Спасибо за интереснейшее чтиво. Очень нравилась мне первая часть, хотя сейчас мой старческий мозжечок наверное не справится))) Пожалуй второй раз (наряду с первым Need for Speed), когда включение SVGA-режима сносило башню наглухо. И моей видеокарте тоже.
Всё чаще и чаще наталкиваюсь на мысль, что тогдашняя пресса выдавала оценки по чеклисту. Например, первую часть не особо любили, а вторую, наоборот, облизывали. За кучу оружия, в том числе. Мне она нравилась меньше, как и автору.
Потом помню с интересом ждал результата "противоборства" двух Descent от расколовшихся разработчиков. Но потом забыл и забил...
Обнимемся, бро! Первая часть заиграна была до дыр. Эффект погружения - не передать. Игра была, конечно, передовой. Жалко, популярность ее в массах была не очень высока - сложноватое управление, вестибюлярный аппарат не у всех справлялся, да и к железу требования были высоки, особенно, если играть в режиме SVGA, если мне олдскулы не изменяют, можно было играть в 320 х 240 и 640 х 480. Во втором от четкости картинки резало глаза.
Не мог играть в древние шутеры - вестибулярка не давала, тошнило через 10 минут. А Descent пленил - хотя с ним было еще тяжелее :))) Укачивало - отходил и возвращался .. Очень крутая игра !!
У Volition в офисе заметил большую картонную модель того зеленого робота с клешнями, который в ближнем бою дерется. Рассказал сопровождающим как залипал в Descent в детстве - меня тут же отвели к, чуть ли не единственному сотруднику, оставшемуся с тех времен. Кажется, это Адам был.
Жалко, что нет каких-то раскрученных шутеров с такой же механикой передвижения. Максимум, что есть - Prey 2006 & Dead Space, и то, там игра с гравитацией идёт.
из-за большого количества степеней свободы прог вхождения выше чем в любой игре про стреляющие утюги. Людей еще тогда укачивало реально без всякого виара - хоть тот же десент и поддерживал шлемы того времени.
Комментарий недоступен
то во второй части было. в первой без него
Комментарий недоступен
Descent это одна из тех игр которая в 1995 не давала мне спать наряду с Квакой ;)
Кстати недавно вышел сиквел Descent: Underground Я немного немного его так чисто ностальгически погамал .
полное разводилово этот десент последний, даже спорная 3 часть была той игрой а не паразитом на названии
Спасибо, тоже играл в те года!! Хорошая игра
Когда в 95 мне купили первый в жизни ПК на нем стоял именно Descent и Heretic. Как вчера помню. Прекрасная игра.
Такая партянка текста , и без картинок примеров из самой игры . Не дочитал.
Классная статья! И одна из любимых игр детства, сразу приходит на ум, когда хочу что-то вспомнить из DOS-игр (после более попсовых игрух)
Ты не мог бы добавить пару гифок непосредственно с полётом? Так проще показать трехмерность, и проще привлечь новых людей, чтобы попробовали игру
Я пробовал, но по-моему гифки слишком маленькие и короткие чтобы передать ощущения полёта. Есть ссылка на видео с нарезкой, кто заинтересуется тот пройдёт, но вообще мне кажется текст больше про добрые воспоминания, чем про привлечение новых людей
Любимая гамеса детства. А вдвоем в нее было особенно интересно.
Шикарная игра. Пару дней назад смотрел прохождение первых уровней.
В 1995 играл в нее кажется с помощью именно джойстика.
Сейчас как то можно в Descent поиграть? Типо подключить геймпад к ноуту?
Прекрасная игра. Обе части. Прям детство вспомнил.
охренеть, очень неожиданный текст по любимой игре. Есть что-то подобное про https://store.steampowered.com/app/448850/Overload/ ??
Оверлоад хорош, практически идеальный ремейк. Всё как в старом, включая десяток экранов настроек клавиатуры, геймпада, чувствительности каждого движения и всё такое. Геймплей ураганный
Я как-то записывал чуток своего геймплея
https://www.youtube.com/watch?v=P-OslP3G02A
Спасибо, для меня десцент это совершенно непонятная игрушка, которую я купил одной из первых в 96м за совершенно безумные деньги в белом ветре, то ли за 45, то ли за 47 долларов (тогда цены были в уе). Красивейшая коробочная версия, но после инсталла все оказалось очень сложно по сравнению с классическими шутанами, ориентация по хzy вкупе со сложными противниками и отсутствием захватывающей истории сыграли свое, я ее так и не прошел. А жаль)
заметил что с продолжателями дела у десцент пока все плоховато, андеграунд все ругают, вот только оверлоад недавно начал играть, вроде простовато пока, но затягивает
Черт побери. Это было так давно. У меня жена когда видела что я играю в Descent - отворачивалась от экрана. Говорила что у нее голова кружится :-)
Да, обалденная игра. Помню в здании, где тогда работал, был салон компьютерный, там можно было пропробовать игру с шлемом виртуальным VFX1, он вроде назывался:)
На будующие любой код лучше всего дублировать блок схемой с расписанным алгориитмом поведения бота. Это будет полезнее чем уже готовое решение, на конкретном языке так же хотелось бы более подробно услышать чем ии в данной игре отличался от других продуетов , с расписанием конкретных примеров, а не пары общих слов.
Это хорошая идея, но это требует статьи совершенно другого формата, больше для программистов чем для геймеров. Фрагменты кода выложенные здесь можно просто пробежать глазами, прочитать авторские комментарии и оценить, что создатели пытались вложить в своих роботов, в принципе это не требует каких-то специальных знаний. А расписанные алгоритмы поведения - слишком подробно нужно описывать чтобы это имело какой-то смысл. Я подумаю что тут можно сделать.
Мужик, напиши нам новый Descent с блэкджеком и самонаводящимися ракетами! А то играть не во что.
Именно на примере этой игры меня научили использовать артмани. Тогда я еще бегал сопли надувал.
Вот мимо в свое время "Дескент". Я тогда видел кучу игр, но у друзей. Поэтому проникнуться не успевал.