Первая в мире текстовая игра Colossal Cave Adventure + исходный код на Фортране

1xquvzgsvnzt91kalsnfubephtq.png

«Вы знаете, за свою карьеру я совершил множество замечательных вещей, забавно, что единственное, за что меня помнят, — это «Adventure». © Уилльям Краудер


Прежде чем написать код своей легендарной игры, Краудер помог нанести на карту сложную сеть пещер, а до этого он уже занял место в истории благодаря своему вкладу в другую сеть. В составе команды программистов Bolt, Beranek and Newman он помог создать ARPANET, предшественницу Internet.

Краудер — один из разработчиков ARPANET, спелеолог и любитель D&D. А еще у него были две маленькие дочки, которые не знали программирование. На пересечение всего этого родилась первая версия «Colossal Cave Adventure».

Уильям Краудер написал игру «Colossal Cave Adventure» (чаще Adventure или ADVENT) в 1975 году. Это первый пример «interactive fiction» и предок квестовых игр. Adventure вдохновила разработчиков на множество игр, в т.ч. Zork (1977), Adventureland (1978), Mystery House (1980), Rogue (1980) и Adventure (1980), которые впоследствии стали основой для жанров интерактивная фантастика, adventure, roguelike и action-adventure.

pvakz4g6o4xwsndmu2lqyvirwds.gifЯ веду ламповый Telegram-канал GameDEVils и блог на Substack. Заглядвыйте в гости, я делюсь там материалами про геймдизайн, разработку и историю игр ^__^

Краудеры


В «Adventure» игрок путешествует по огромной фентезийной пещере, а игра выступает в роли рассказчика, описывая местонахождение игрока и результаты предпринятых игроком действий. Пещера в игре основана на карте реальной Мамонтовой пещеры в Кентукки, которую помогали составлять Уильям и его жена Патриция Краудер.

Краудер и его первая жена Пэт были спелеологами. В 1960–70-х годах Краудеры проводили все каникулы под землей, вместе участвовали в экспедициях и исследовали связь Мамонтовой пещеры и пещерной системы Флинт-Ридж.

Патриция Краудер (29 лет, 1972 г.):

sxaswy-hblg7n9ldb8j3quvu6zc.png

Краудер был одним из сильнейших программистов в компании Bolt, Beranek & Newman, которая разрабатывала ARPANET. Коллеги в офисе рассказывали, чтобы сосредоточиться, Краудер иногда подтягивался на пальцах на дверном косяке. Он всю жизнь занимался альпинизмом и обучил скалолазанию жену.

На фото второй справа, в бороде и очках:

nnp5hik9xe8fqggcenqw_6qt6y8.png

А вот фото Краудера 10-летней давности, свежее не нашла:

yczdfaazubhk6wart4xleajdsqo.png

В Массачусетсе Пэт и Уилл отслеживали картографические данные каждой экспедиции Фонда исследования пещер. Супруги вводили необработанные данные из «запутанных книжечек» в терминал телетайпа в их гостиной, который был подключен к мейнфрейму PDP-1 на рабочем месте Уилла. Из этих данных они генерировали «команды для нанесения на огромные рулоны бумажной ленты» с помощью программы, которую написал Уилл. Пэт написала подпрограмму для добавления цифр и букв к итоговой карте. Они использовали трофейный барабанный плоттер Cal-comp, подключенный к Honeywell 316.

Honeywell 316:

mkw6ktoo4akdklj2nfapgkcyp_k.png

Карты Краудеров представляли собой упрощенные линейные графики, это одни из самых ранних попыток компьютеризации пещер.

В пещерах


В сентябре 1972 года Патриция Краудер отправилась в экспедицию одна, Уилл остался готовить дочерей Сэнди и Лору к школе. 9 сентября 1972 года Патриция (единственная девушка в экспедиционной группе) смогла втиснуться в узкий каньон и первая прошла по пути, соединяющему Мамонтову пещеру и Флинт-Ридж. Это было значимым событием в спелеологии.

ndhumd6yetzxbany_m4zrk0lbxy.png

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

Через несколько лет после того, как Краудеры использовали миникомпьютер Honeywell 316 для составления своих карт пещер, он был перепрофилирован и усилен, превратившись в интерфейсный процессор сообщений, или IMP — то, что мы сейчас называем маршрутизатором. Эти маршрутизаторы образовывали подсеть из небольших компьютеров в ARPANET, перемещая данные и переводя их между основными узлами.

В 1975 году Краудеры развелись. Уильям тогда часто играл в Dungeons and Dragons и много программировал по ночам. А вот со спелеологией стало туго — из-за общего с бывшей женой круга знакомых он перестал ходить в экспедиции, считал такие встречи неловкими.

Краудер скучал по дочкам и по пещерам. Он решил отвлечься, создав свою воображаемую пещеру с элементами D&D:

I had been involved in a non-computer role-playing game called Dungeons and Dragons at the time, and also I had been actively exploring in caves — Mammoth Cave in Kentucky in particular. Suddenly, I got involved in a divorce, and that left me a bit pulled apart in various ways. In particular I was missing my kids. Also the caving had stopped, because that had become awkward, so I decided I would fool around and write a program that was a re-creation in fantasy of my caving, and also would be a game for the kids, and perhaps some aspects of the Dungeons and Dragons that I had been playing. My idea was that it would be a computer game that would not be intimidating to non-computer people, and that was one of the reasons why I made it so that the player directs the game with natural language input, instead of more standardized commands. My kids thought it was a lot of fun.

Технологии


Оригинальная игра Краудера состояла примерно из 700 строк кода на Фортране и еще около 700 строк данных, написанных для PDP-10 компании BBN. Для работы программе требовалось около 60 КБ слов (почти 300 КБ) основной памяти, что было значительным объемом для систем PDP-10/KA, работающих только с 128 КБ слов.

Как-то восемь знакомых Краудера зашли к нему в офис, чтобы посмотреть его программу. Игра произвела впечатление на его коллег:

«Уилл был очень горд — или, точнее, удивлен — тем, как хорошо он мог обмануть людей, заставив их думать, что за игрой стоит какой-то очень сложный ИИ». M. Kraley

Самый ранний исходный код игры Краудера PDP-10 «Adventure» существует в двух файлах FORTRAN — один для данных и один для кода, датированных 11 марта 1977 года.

Файл данных состоит из шести отдельных таблиц, содержащих большую часть текста игры:

  1. подробные описания;
  2. короткие названия комнат;
  3. данные карты;
  4. сгруппированные словарные слова;
  5. статические состояния игры;
  6. подсказки и события.

В файл кода встроены статические компоненты переменных строк, таких как «I SEE NO», «A5», «HERE», где «A5» представляет собой имя объекта. Весь текст был написан заглавными буквами из-за ограничений PDP-10.

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

Одним из тех, кто открыл для себя эту игру, был Дон Вудс, аспирант Стэнфордского университета. Вудс нашел игру в 1976 г. на PDP-10 в медицинской школе Стэнфорда и захотел расширить возможности игры. Он связался с Краудером, чтобы получить доступ к исходному коду, отправив электронное письмо «crowther» на каждый домен, который существовал в ARPANET.

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

Версия Вудса, выпущенная в 1977 году, расширила игру Краудера примерно до 3000 строк кода и 1800 строк данных. Игра увеличилась до 140 местоположений на карте, 293 словарных слов и 53 объектов. Вудс также добавил в игру средства контроля доступа, позволяющие администраторам мэйнфреймов ограничивать запуск игры в рабочее время.

В 1977 году Джим Гиллогли (Jim Gillogly) из корпорации RAND провел несколько недель, перенося код с Фортрана на C под Unix, с согласия Вудса и Краудера.

Unix-версия игры на компьютере Osborne 1 около 1982 года:

3s4uq0ku7bthhu1zr7td7dhpozk.png

Игра также была перенесена на супермини-компьютер Prime Computer под управлением PRIMOS в конце 1970-х годов с использованием Fortran 4 и на мейнфреймы IBM с VM/CMS в конце 1978 года с использованием PL/1.

Более поздние версии игры отошли от языков программирования общего назначения, вроде C или Fortran. Для них использовали специальные движки для «interactive fiction», наподобие Z-machine Infocom.

Дональд Кнут в 1998 году использовал версию 1.0 «Adventure» Вудса на Фортране в качестве своего единственного примера в руководстве по программированию. Кнут переводит код Краудера/Вудса с FORTRAN на CWEB, начиная каждый раздел кода с обсуждения, как правила, определенные в каждом разделе кода, влияют на игровой процесс.

Исходники


Оригинальный исходный код версии Краудера 1976 года.

Открытый исходный код Adventure порта версии Crowther and Woods 1995 года.

Моды


В 1976 году аспирантом Дон Вудс обнаружил Adventure на компьютере в Стэнфордском университете и внес значительные расширения и улучшения с разрешения Краудера. Вудс был поклонником Толкина и добавил больше фэнтези, так в игре появились эльфы, тролль, дракон и магические заклинания.

qwpfhsq_hrcaaeljdipubkyajny.png
Дон Вудс (Don Woods; 30 апреля 1954 года) — американский хакер и программист, один из разработчиков языка программирования INTERCAL, разработчик приключенческой компьютерной игры Colossal Cave Adventure. Один из авторов «Словаря хакера» (англ. The Hacker’s Dictionary). © Википедия

Версия Вудса расширила игру и обе версии были распространены в зарождающейся сети ARPANET.

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

Colossal Cave Adventure была одной из первых игр для телетайпа и пользовалась огромной популярностью в компьютерном сообществе в конце 1970-х годов, поскольку на основе исходного кода Вудса было создано множество портов и модифицированных версий.

Вудс продолжал выпускать обновленные версии на Фортране до 1995 года.

Вот полное дерево модов на игру:

qaj3rd1f4c1qe_fswc3i0aumcjc.png

Кстати, этой осенью должен выйти 3д ремейк игры. Вот сайт игры с новостями, а вот трейлер:

Может я избаловалась, но мне трейлер по графике напомнил игры 10-летней давности, а не обещанный «захватывающий, вручную проработанный мир». Текст + воображение любопытных игроков гораздо красочнее, чем 3D графика.

Игровые приколы


До 2007–2008 учебного года от студентов Стэнфордского университета требовалось заново реализовать игру в качестве задания на первом курсе программирования.

Вы находитесь в лабиринте извилистых маленьких проходов, похожих друг на друга…


«You are in a maze of twisty little passages, all alike» — это запоминающаяся фраза из игры, популярная в хакерской культуре (где «passages» могут быть заменены другим словом, в зависимости от ситуации). Этот лабиринт, где «all alike» («все одинаково») создал Краудер.

Вудс пошел дальше и создал лабиринт «all different» («все по-другому»). Ниже 11 версий его «по-другому»:

  1. Little maze of twisting passages
  2. Little maze of twisty passages
  3. Little twisty maze of passages
  4. Maze of little twisting passages
  5. Maze of little twisty passages
  6. Maze of twisting little passages
  7. Maze of twisty little passages
  8. Twisting little maze of passages
  9. Twisting maze of little passages
  10. Twisty little maze of passages
  11. Twisty maze of little passages

Проще, чем кажется


Иногда квесты в игре очень простые.

К примеру, когда вы встречаете дракона, и вам надо его победить. Спойлер.
legfw0fu1zc7ssbg-5hdyifzduu.png

Волшебное слово XYZZY


«Xyzzy» — это волшебное слово, которое телепортирует игрока между двумя конкретными локациями.

Есть две истории о его происхождении. Первая — что это вроде «абракадабры», просто забавные звуки. Скукота.

А вторая, что «xyzzy» — мнемонический прием для запоминания перекрестного произведения.

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

enga3c2sp-8g7r_2becs15kw03m.png

Второе и третье уравнения можно получить из первого простым поворотом индексов x → y → z → x. Проблема в том, как запомнить первое уравнение. Вы делаете это, запоминая «волшебное слово», состоящее из нижних индексов, взятых по порядку: xyzzy.

Карты


Вот схематичная карта пещер:

w4thbhulotqgagjz7un34xcryfo.png

Взяла ее из видео-обзора игры. Кстати, друзья-спелеологи Краудера обычно не испытывали никаких проблем с «ориентированием» в игре.

На этом сайте я нашла две версии, первую можно использовать как подсказку во время прохождения, она просто визуализирует путь:

kjah15gnx4tqr-qfdgnq5r35wrq.png
А вот вторая версия со спойлерами, на ней указаны все сокровища и названия комнат
mkphcncjow8natoxoe-_7z24xti.png

Если интересно, вот огромное исследование и анализ «Adventure» от Денниса Джерца: Somewhere Nearby is Colossal Cave: Examining Will Crowther’s Original «Adventure» in Code and in Kentucky.


Еще про игры:

  • Реверс-инжиниринг интеллекта персонажей: как спроектировать НЕтупого Волдеморта
  • Настолки Древней Руси
  • 10 принципов хорошего левел дизайна
  • Во что поиграть, если шахматы ещё не придумали, а ты фараон / викинг / вождь майя
  • 15 игр, которые прокачивают логику, алгоритмы, ассемблер и силу земли
  • Ещё 20+ игр, которые прокачивают логику, алгоритмы и радуют умный мозг
  • Играйте в хакера безопасно: 20+ игр, чтобы почувствовать себя хацкером и не призвать ФСБ
  • 20 игр, чтобы видеть детали, чувствовать нюансы и уловить смысл дизайна


pvakz4g6o4xwsndmu2lqyvirwds.gifЕсли было интересно, подписывайтесь на мой канал в Telegram с находками про разработку игр, историю игр и геймдизайн: GameDevils (на русском) и блог на Substack (на английском).

p-u9l27ynelxi92bcmdxhu76ma8.png

© Habrahabr.ru