Как стать автором
Обновить

Как создателю Prince of Persia удалось преодолеть ограничения памяти Apple II

Время на прочтение12 мин
Количество просмотров30K
Автор оригинала: Ars Technica

«Я разработал сюжетную линию „Теневого человека“. Он появляется в игре в заранее определённые моменты. В одном случае он крадёт зелье. Когда игрок уже готов схватить пузырёк, прибегает Теневой человек, выпивает его и сбегает. В другой раз, когда игрок уже собирается пройти через ворота, появляется Теневой человек, нажимает на плиту и закрывает ворота. После этого игрок падает на три уровня вниз, и ему приходится снова проделывать весь путь наверх. Я прописал эти столкновения в сюжете, чтобы игрок возненавидел Теневого человека и считал его своим врагом. Чтобы в момент, когда ему придётся скрестить с ним мечи в конце игры, он по-настоящему хотел поквитаться, ведь тот столько раз препятствовал игроку. Это был мой способ создания эмоциональной связи между игроком и противником через игровой процесс, а не кинематографические вставки».

Привет, я Джордан Мекнер, автор Prince of Persia. Это история о том, как я загнал себя в угол анимациями, а потом смог выбраться из него благодаря боям.

Я был ребёнком, росшим в Нью-Йорке в середине 70-х. Фанатом комиксов. Я любил кино. Рос на журнале «MAD», и если бы не появились компьютеры, я мог бы заняться комиксами и анимацией. Но когда в 1978 году появился Apple II, я воспринял его как машину, на которой я в первую очередь могу играть в игры дома, что раньше было совершенно невозможно. Вместо того, чтобы тратить четвертаки в местных залах игровых автоматов, я мог оставаться дома и играть сколько пожелаю в «Space Invaders» на Apple II. Кроме того, компьютер позволял мне создавать собственные игры, и меня это восхитило. Это случилось ещё до появления Интернета, поэтому почти все были самоучками. Я подписался на журнал «Creative Computing», а чуть позже — на журнал в «Softalk», в котором были статьи о том, как программировать. Я начал обмениваться опытом с друзьями, которые тоже любили компьютеры.

Моими первыми играми стали копии существовавших аркадных игр: у игрока всегда было три жизни, а цель заключалась в том, чтобы получить рекордное количество очков. Но тогда я уже поступил в колледж, и хотел написать игру, которая будет рассказывать историю, и поэтому начал программировать «Karateka». Она имела очень простой сюжет. Злой полководец похитил принцессу и заточил её в своём замке. Игрок управляет героем, который должен победить в нескольких карате-поединках воинов, охранявших крепость. По сути, он бегал слева направо и побеждал одного воина за другим, пока не добирался до конца, а затем сражался с большим плохишом и спасал принцессу. Я писал игру на Apple II, и в то время Apple на самом деле был игровой платформой номер один, но он имел свои ограничения. Музыкальные функции Apple II были не особо хороши, компьютер имел всего четыре цвета и экран с разрешением 280×192, а всю программу приходилось умещать в 48 КБ памяти. Это было жёсткое ограничение.


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

Первые аниматоры Disney в качестве образца использовали отснятый на плёнку материал. В «Белоснежке» персонажи-люди, например, сама Белоснежка и принц, на самом деле были анимированы при помощи ротоскопирования, то есть аниматоры Disney снимали живых актёров, выполнявших действия, которые нужно анимировать, а затем проецировали эти кадры и покадрово копировали или обводили их. То же самое я сделал для «Karateka.» Я записал на плёнку Super 8, как мой учитель карате делает удары руками и ногами, а также другие движения, которые персонаж должен делать на экране, затем обвёл каждый кадр плёнки Super 8 карандашом на кальке и превратил их в пиксели для вывода на экран. Это своего рода ротоскопирование 1.0.


«Karateka» вышла в 1984 году и стала бестселлером номер один, и мне очень повезло, что так получилось: вместо того, чтобы после завершения колледжа начать искать работу, я обрёл роскошь задуматься — что мне хочется делать дальше? И у меня появилась идея ещё одной игры. Одним из источников вдохновения стали первые десять минут фильма «В поисках утраченного ковчега». В этой сцене Индиана Джонс перепрыгивает через яму и чуть не падает, из стены выскакивают шипы, ворота закрываются, и все эти действия напомнили мне то, что я видел в платформенных играх наподобие «Lode Runner» и «The Castles of Doctor Creep»: если встаёшь на плиту, она открывает ворота. Я подумал, что если совместить этот геймплей с персонажем-человеком, то игрок будет ощущать, что если промахнуться в прыжке и упасть, будет по-настоящему больно. Персонажи первых платформенных игр как будто не имели веса. Игрок понимал, что даже если промахнётся, то персонаж плавно спустится вниз, и не почувствует боли. А я решил соединить базовый геймплей платформенной головоломки в модульном мире с очень плавными анимациями бега и прыжков, пытающихся передать восхитительность первых минут «В поисках утраченного ковчега».

Сюжет «Prince of Persia» тоже был простым. Как и в «Karateka», игроку нужно было спасать принцессу. В этом я вдохновлялся сказками «Тысячи и одной ночи», а также фильмами наподобие «Багдадского вора» 1940 года, в которых злой великий визирь захватывает власть и заточает принцессу в темницу. Я знал, что для «Prince of Persia» мне понадобится гораздо больше анимаций. Бег, прыжки, взбирание, падение: все движения маленького персонажа, которые он должен выполнять на экране. И к моменту, когда я занимался в 1985 году анимациями для «Prince of Persia», появилась новая технология — VHS. При помощи одной из первых VHS-камер я снял, как мой брат бегает, прыгает и выполняет все остальные действия на парковке рядом с нашей школой.


Следующей проблемой стал перенос всех этих записанных кадров в компьютер. Путём проб и ошибок я, наконец, нашёл технику, подходящую для «Prince of Persia»; она заключалась в преобразовании из аналога в цифру и состояла из нескольких этапов. Я запустил видеоплёнку с записью брата на телеэкране в затемнённой комнате, поставил на штатив 35-миллиметровую камеру, направил её на экран, а потом сделал снимок, перемотал на следующий кадр в видеомагнитофоне, сделал ещё один снимок, снова на кадр вперёд, и так много раз, пока не получил рулон фотоплёнки примерно с 35 кадрами. Я отнёс его в местный салон мгновенной печати Fotomat, за один час они проявили плёнку и вернули мне набор снимков, которые я склеил вместе скотчем. С помощью маркера и корректора я выделил контуры каждого персонажа, а затем засунул снимки в копировальный аппарат, получив на выходе один чёткий лист бумаги с серией кадров отчётливого белого персонажа на чёрном фоне. Контраст был достаточно сильным, чтобы можно было поместить этот лист на мультипликационный станок, направить на него видеокамеру и вывести изображение в Apple II, который не имел видеовхода. Я использовал специальную плату дигитайзера, которая могла делать только одно чёткое неподвижное изображение. Она не могла выполнять захват движения, но получив 9-12 отдельных кадров анимации персонажа, я мог уже работать с пикселями и вырезать их на экране при помощи своего инструмента анимации, а затем проиграть последовательность кадров. Для переноса записанных на видео бега или прыжков в последовательность кадров на экране компьютера требовались недели работы.

Когда я впервые увидел, как персонаж бегает и прыгает на экране, у него появилась грубая иллюзия жизненности и веса. Это было время восьмибитной графики. Каждый кадр анимации «Prince of Persia» был набором байтов, представлявших фиксированное изображение на экране, а следующий кадр был ещё одним набором байтов. Чтобы реализовать, например, прыжок, требовалось 12 кадров, а для прыжка в беге нужно было до 15, и чем больше кадров, тем плавнее получалась анимация. После добавления прыжков, бега, поворотов, висения, раскачивания и всего такого каждое отдельное движение занимало память. И здесь оказывалось очень важным отличие тех компьютеров от современных, ведь Apple II имел всего 48 КБ. Это меньше среднего текстового электронного письма, но в этот объём должно было вмещаться всё: все изображения, фоны, кадры анимации, логика работы программы, все звуковые эффекты, музыка, вообще всё. И всё это вместе с анимациями, которые необходимы персонажу для движения по подземельям, заполняло всю доступную память компьютера.

Итак, июнь 1988 года, я уже два года работаю над «Prince of Persia», и на этом этапе самое сложное уже сделано. У меня есть плавно двигающийся персонаж, бегающий по подземельям, он карабкается, падает, нажимает на плиты, чтобы открывать двери, и прыгает через пропасти, едва не сваливаясь на шипы. Все, кто видит мою игру, охают и восхищённо вздыхают. Этот результат стал подтверждением концепции, но в игру не очень интересно играть, и меня терзает смутное чувство, что я уже реализовал почти всё, что хотел, но мне не удаётся достичь того восхищения, на которое я надеялся. К тому же появились признаки того, что платформа Apple II умирает. Когда я начинал разработку «Price of Persia», Apple II всё ещё был платформой номер один для игр. Но к 1988 году появились новые машины, с большим количеством цветов и разрешением, более совершенными звуковыми функциями. Я находился в самом конце жизненного цикла Apple II, но чувствовал, что перейдя на другую платформу, придётся начинать всё заново. Я волновался, что создам великолепную, увлекательную игру, но в неё некому будет играть.

Да, возникла проблема: я достиг того этапа в разработке, когда начал сомневаться в своём первоначальном видении игры. Иногда правильным ответом бывает: просто верь в первоначальное видение, реализуй его, и всё будет хорошо. Но иногда в процессе работы ты делаешь открытия, заставляющие тебя осознать, что первоначальное видение было всего лишь первым черновиком. Изначально я думал, что главный герой не будет сражаться, он не применяет насилия и просто пытается выжить в подземелье в жестоком мире, где есть выскакивающие из пола шипы, есть ворота и падающие плиты, которые могут его раздавить, но сам он не жесток. Цель заключалась в преодолении этих ловушек и спасении принцессы, и для реализации этого я задействовал все имевшиеся у Apple II ресурсы. У меня не было места для вставки ещё одного персонажа.


В то время я делил офис с друзьями, которые тоже работали над собственными проектами. Роберт Кук работал над игрой «D/Generation». Томи Пирс создавала образовательное ПО, и каждый раз, когда она, проходя мимо, видела на моём экране «Prince of Persia», то повторяла «Бои, бои, бои». «Тебе нужны битвы, или эта игра не будет интересной», и это напрягало меня, потому что бои я не планировал. «Karateka» была файтингом. Вся игра заключалась в том, что ты встречаешь охранника, сражаешься с ним, а потом переходишь к следующей битве. Я объяснял Томи: «Я не могу их сделать, потому что не хватит памяти, к тому же мне нужен плавно анимированный враг, способный делать всё, что нужно врагу». Но когда к Томи приходит идея, она её не отпускает, поэтому мне приходилось говорить: «Теперь на стенах есть факелы. А теперь я добавил ловушки-челюсти, которые разрезают героя и усиливают напряжение. Разве так не лучше?» Томи оценивала новую функцию и говорила: «Бои, бои, бои». [глубоко вздыхает] И я с отчаянием осознал, что в её словах что-то есть. Как бы ни хотел, чтобы игра была почти готова, она просто не увлекала, и в этом была проблема: два года разработки, я использовал почти всю имеющуюся память, но в игре не хватает той напряжённости, восхитительности и ощущения конфликта, которые сделали «Karateka» такой простой и очень интересной. Что же мне делать?

Я могу точно сказать вам, что произошло. В тот день в июне 1988 года (я знаю, потому что записал это в свой журнал) Томи снова подошла, посмотрела на экран и сказала: «Бои, тебе нужны бои». И я снова выкатил свой обычный аргумент: во-первых, это не соответствует концепции игры, во-вторых, не хватает памяти. Она сказала: «В „Karateka“ ты использовал одинаковые фигуры для героя и для врага, можно ли сделать так же?». Я ответил: «Нет, потому что герой выглядит привлекательным, несокрушимым персонажем. Враг не должен так выглядеть». А она сказала: «Ну, а что если тебе сделать врагов другого цвета?» И ко мне пришла идея: что, если я выполню XOR для каждого байта с самим собой, сдвинутым на один бит?

У Apple II, как я сейчас понимаю, не было никаких возможностей обработки изображений, потому что вся графика представляла собой битовые карты. Но одна из ассемблерных инструкций под названием «исключительное ИЛИ» (XOR) брала два бита, и если они одинаковы, то она возвращала ноль, а если отличаются, то единицу. И когда я в десятый раз объяснял Томи, почему я не могу нарисовать персонажа не тем цветом, которым он был нарисован, я осознал, что если использовать инструкцию «исключающее ИЛИ» со сдвигом на один бит, то это создаст как бы мерцающий, призрачный контур главного героя. И как только я сказал эти слова, возникло имя этого персонажа: Shadow Man («Теневой человек»). Пока Томи и Роберт заглядывали ко мне из-за плеча, мне понадобилось всего пять минут, чтобы написать код, превращающий главного героя в призрачную версию самого себя. Как только мы увидели, как бегает, прыгает и карабкается по подземелью Теневой человек, стало очевидно, что именно он был тем противником, который нужен игре.


Роберт предложил, что Теневой человек мог бы возникать, когда герой прыгает сквозь зеркало: в этот момент его призрачная копия прыгает в другом направлении, а потом, затерявшись в подземелье, она становится врагом — ворует зелья, закрывает ворота, которые игрок хотел открыть, и вообще создаёт всяческий хаос. Так, вынужденно родился этот персонаж, который в результате стал одной из лучших особенностей игры. Это пример того, как ограничения могут иногда подтолкнуть вас к более творческим решениям, чем вы бы могли найти с самого начала, будь они доступны. Если бы моим ограничением не была память, то я, возможно, для разнообразия создал бы в «Prince of Persia» различных монстров и врагов, но так как для них не было места, мне пришлось копать глубже и придумать Теневого человека, который и в самом деле как будто оказался глубже и убедительней.

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

Как только Теневой человек появился в игре, стало очевидно, что это правильно, поэтому мне удалось засунуть в память ещё несколько кадров для реализации боёв на мечах, чтобы игрок мог сразиться с теневой копией себя. Это оказалось очень убедительно, и теперь мне любым способом нужно было населить подземелье охранниками. На таком позднем этапе разработки я нашёл способ позаимствовать 12 КБ памяти, которая пряталась в дополнительной карте памяти Apple II, и добавить охранника. Но при этом возникла новая проблема — как создавать анимации для врагов?

Моделью для анимаций «Prince of Persia» был мой младший брат, который теперь находился в трёх тысячах миль от меня. К тому же, он вообще не умел сражаться на мечах, поэтому сначала я попробовал записать себя и коллегу по офису Роберта, мы держали мечи и фехтовали. К сожалению, это не сработало. В отчаянии я включил один из моих любимых фильмов — «Робин Гуд» 1938 года с Эрролом Флинном, и оказалось, что в этом фильме есть кульминационная дуэль с Бэзилом Рэтбоуном. В ней нашлась сцена примерно из шести секунд, в которой два сражающихся друг с другом персонажа сняты идеально в профиль. Я сделал фотографии каждого кадара с VHS-кассеты «Робина Гуда» 1938 года, получил движения, которые понадобятся персонажам для боя на мечах, и как только я реализовал охранников, игра показалась мне завершённой.

Теперь, перемещаясь по подземельям, игрок ощущал чувство соперничества, напряжённости, страха, которые стали важной частью успеха «Karateka». Урок, который я получил из этого, можно сформулировать так: если в вашей голове звучат два голоса, два подхода, дающие два разных решения, диаметрально противоположных друг другу, то нужно постараться прислушаться к каждому из голосов и подумать «Говорит ли мне этот голос про общую картину?» Потому что иногда могут возникать замечательные идеи, которые отклоняют вас от намеченного пути, но иногда этот голос на самом деле возвращает вас на путь. Теневой человек был правильным решением потому, что он соотносится с первоначальным источником вдохновения для «Prince of Persia». По сути, это современная версия «фильма плаща и шпаги», а в этих старых фильмах герои, будь то Эррол Флинн, Дуглас Фэрбенкс или Индиана Джонс, сражались, поэтому это полностью соответствовало духу игры.

«Prince of Persia» выпустили в конце 1989 года на Apple II. Как я и опасался, гонка наперегонки со временем оказалась проигранной. К тому времени Apple II был умирающей платформой, и примерно около года я испытывал мучительное чувство, что игра, над которой я так упорно работал, и которая нравилась всем, кто в неё играл, пропадёт, не оставив никаких следов. Меня спасли порты на другие платформы: на PC, на Mac, а также на консоли типа Sega и Nintendo, которые появились в течение следующей пары лет. Это спасло игру, превратив её из фиаско в хит. И именно это со всей чёткостью показало мне, что добавление Теневого человека и боёв было правильным решением, потому что на этих платформах проблемы с памятью, столь критичные для Apple II, больше не существовали.

Вдохновение, почерпнутое из фильмах о схватках и приключениях, оказалось важнейшим источником, превратившим «Prince of Persia» в то, чем она является. Популярности «Prince of Persia» на PC оказалось достаточно для создания сиквела, «Prince of Persia 2: The Shadow and the Flame». И ко времени игры в 1993 году у нас уже было новое поколение PC, способное воспроизводить звуки и музыку, а также отображать цветную графику. Его возможности намного превосходили то, что было доступно в конце 80-х, и мы воспользовались этим, добавив больше врагов, больше персонажей и обогатив окружение. Мы отправили принца в путешествие по миру, которое привело его к подземелью и замку «Prince of Persia 1». Но фундаментальный геймплей, формула из ловушек, побегов, решения головоломок, боёв и исследования, была довольно близка к тому, что присутствовало в «Prince of Persia 1». Со времён первой «Prince of Persia» технологии ушли вперёд, но основные вопросы дизайна игр почти не изменились. Когда мы делали в 2003 году ремейк, «Prince of Persia: The Sands of Time», то работали с гораздо более поздним поколением консолей. Игра на поколении PlayStation 2, впервые за всё время, имела 3D-графику, возможность перемотки времени, звук, музыку — всё то, что не мог себе позволить Apple II, но у нас всё равно были ограничения. Первый черновик сюжета «The Sands of Time» был гораздо более сложным, в нём присутствовали всевозможные политические интриги с разными фракциями внутри королевства. Но из готовой игры мы всё это вырезали и оставили гораздо более простую историю, в которой все в королевстве превратились в песочных монстров. И это решение позволило создать игру, которая действительно синхронизирована с тем, что возможно делать на контроллере, потому что все, с кем вы сталкиваетесь — это песочные монстры. Так что выбор у вас такой: акробатика, бой и побег, и это хорошо соответствовало с тем, что мог делать игрок, хотя у нас ещё была возможность реализации диалогов, лицевой анимации и многого другого. Наличие большого списка персонажей отодвинуло бы игру от её сильных сторон, то есть при создании сюжета игры нужно планировать решения, которые подчеркнут её сильные, а не слабые стороны.


В этом году первой «Prince of Persia» исполняется 30 лет, и многое из того, что я сегодня вам рассказал, я помню благодаря тому, что вёл журнал, поэтому в честь 30-летней годовщины мы снова выпускаем эти журналы в виде книги «Prince of Persia». Это журналы, которые я вёл во время создания игр, поэтому в них много взлётов и падений, сомнений и восторга: «эта игра будет отличной», «эта игра окажется катастрофой», мои размышления о том, как решать конкретные проблемы. Также мы проиллюстрировали журналы скриншотами процесса работы и набросками, поэтому мне было очень интересно в эту годовщину вернуться в прошлое и снова взглянуть на эти журналы, которые 80-х я вёл в основном карандашом на бумаге.
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 99: ↑99 и ↓0+99
Комментарии41

Публикации

Работа

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань